PHP KML Generator - PullRequest
       6

PHP KML Generator

0 голосов
/ 11 февраля 2011

У меня проблемы со следующим шагом моего генератора KML. У меня так, когда вы выбираете дату, она отправляет дату в генератор и создает KML, который затем будет загружен. Он создает файл, но загружаемый файл называется generator.php. Там есть вся моя информация о KML, но это не совсем то, чего я хотел. Поэтому мне нужна небольшая помощь или учебное пособие по созданию файла в формате .kml с желаемым именем, которое будет выбрано для загрузки. Вот мой код до сих пор: index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
        <title>TDM KML Generator</title>
        <script type="text/javascript" src="calendarDateInput.js"></script>
    </head>
    <body>
    <form action="generator.php" method="post">
        <script type="text/javascript">DateInput('orderdate', true, 'YYMMDD')</script>
        <input name="submit" type="submit" value="get KML" />
    </form>

    </body>
</html>

generator.php

<?php
            if($_SERVER['REQUEST_METHOD'] == 'POST')
            {
                $date = $_POST['orderdate'];
                $file = fopen("http://www.xxxxxxxxxxxxxxxxxxx/".$date."xxxxxxxxx.csv", "r");
                $content = fgetcsv($file, 1000, ",");
                $dom = new DOMDocument('1.0', 'UTF-8'); 

                // Creates the root KML element and appends it to the root document.
                $node = $dom->createElementNS('http://earth.google.com/kml/2.1', 'kml');
                $parNode = $dom->appendChild($node);

                // Creates a KML Document element and append it to the KML element.
                $dnode = $dom->createElement('Document');
                $docNode = $parNode->appendChild($dnode);

                // Creates the two Style elements, one for restaurant and one for bar, and append the elements to the Document element.
                $restStyleNode = $dom->createElement('Style');
                $restStyleNode->setAttribute('id', 'restaurantStyle');
                $restIconstyleNode = $dom->createElement('IconStyle');
                $restIconstyleNode->setAttribute('id', 'restaurantIcon');
                $restIconNode = $dom->createElement('Icon');
                $restHref = $dom->createElement('href', 'http://maps.google.com/mapfiles/kml/pal2/icon63.png');
                $restIconNode->appendChild($restHref);
                $restIconstyleNode->appendChild($restIconNode);
                $restStyleNode->appendChild($restIconstyleNode);
                $docNode->appendChild($restStyleNode);

                $barStyleNode = $dom->createElement('Style');
                $barStyleNode->setAttribute('id', 'barStyle');
                $barIconstyleNode = $dom->createElement('IconStyle');
                $barIconstyleNode->setAttribute('id', 'barIcon');
                $barIconNode = $dom->createElement('Icon');
                $barHref = $dom->createElement('href', 'http://maps.google.com/mapfiles/kml/pal2/icon27.png');
                $barIconNode->appendChild($barHref);
                $barIconstyleNode->appendChild($barIconNode);
                $barStyleNode->appendChild($barIconstyleNode);
                $docNode->appendChild($barStyleNode);
                $id = 1;
                while (($content = fgetcsv($file, 1000, ",")) !== FALSE) {
/*******************************************************************************************
                    Values of content
                    (ignore)****content[0] = Time*******(ignore)
                                content[1] = Size
                    (ignore)****content[2] = Location***(ignore)
                                content[3] = City
                                content[4] = State
                                content[5] = Lat 
                                content[6] = Long
                                content[7] = Comments
*******************************************************************************************/
                    if ($content !== false) {

                        $node = $dom->createElement('Placemark');
                        $placeNode = $docNode->appendChild($node);

                        // Creates an id attribute and assign it the value of id column.
                        $placeNode->setAttribute('id', 'placemark' . $id);

                        // Create name, and description elements and assigns them the values of the name and address columns from the results.
                        $descNode = $dom->createElement('description', $content[7]);
                        $placeNode->appendChild($descNode);
                        $styleUrl = $dom->createElement('styleUrl', '#barStyle');
                        $placeNode->appendChild($styleUrl);

                        // Creates a Point element.
                        $pointNode = $dom->createElement('Point');
                        $placeNode->appendChild($pointNode);

                        // Creates a coordinates element and gives it the value of the lng and lat columns from the results.
                        $coorStr = $content[6] . ','  . $content[5];
                        $coorNode = $dom->createElement('coordinates', $coorStr);
                        $pointNode->appendChild($coorNode);
                    }
                    $id = $id + 1;
                }       
                $kmlOutput = $dom->saveXML();
                header('Content-type: application/vnd.google-earth.kml+xml');
                echo $kmlOutput;
                fclose($file);      
            }   
        ?>

1 Ответ

2 голосов
/ 11 февраля 2011

Посмотрите на Пример 1 в руководстве по PHP для header:

Если вы хотите, чтобы пользователю предлагалось сохранить данные, которые вы отправляете, например, сгенерированный файл PDF, вы можете использовать »Content-Disposition заголовок для подачи рекомендуемое имя файла и заставить браузер для отображения диалогового окна сохранения.

<?php // We'll be outputting a PDF
header('Content-type: application/pdf');

// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');
// The PDF source is in original.pdf
readfile('original.pdf'); ?>
...