1

我正在尝试使用 php 生成 KML,但在第 1 行出现错误屏幕,这是我的文档:

<?php
header('Content-type: text/xml');

include('../../../../../../config.php');

// Print the head of the document
echo htmlentities('<?xml version="1.0" encoding="UTF-8"?>');
echo '</br>';
echo htmlentities('<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">');
echo '</br>';
echo htmlentities('<Document>');
echo '</br>';

  // Finally query the database data
$result = mysql_query("SELECT * FROM acars_airports ORDER BY id DESC");

  // Now iterate over all placemarks (rows)
while ($row = mysql_fetch_array($result)) {

    // This writes out a placemark with some data
    // -- Modify for your case --

echo htmlentities('<Placemark>');
echo '</br>';
echo htmlentities('<name>'.$row['icao'].'</name>');
echo '</br>';
echo htmlentities('<description>'.$row['name'].'</description>');
echo '</br>';
echo htmlentities('<Point>');
echo '</br>';
echo htmlentities('<coordinates>'.$row['lon'].' , '.$row['lat'].'</coordinates>');
echo '</br>';
echo htmlentities('</Point>');
echo '</br>';
echo htmlentities('</Placemark>');
echo '</br>';

  };

// And finish the document

echo htmlentities('</Document>');
echo '</br>';
echo htmlentities('</kml>');


?>

忘记查询!如何生成要在谷歌地图上读取的 KML/KMZ/XML 文件?

已经尝试过:

header('Content-type: text/xml');
header('Content-type: application/vnd.google-earth.kmz');
4

2 回答 2

2

我创建了一个新代码,现在它可以工作了,把它放到你的 HTML 页面中:

</html>
<style type="text/css">
      html { height: 100% }
      body { height: 100%; margin: 0; padding: 0 }
      #map_canvas { height: 100% }
</style>

        <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&sensor=false">
        </script>

        <script type="text/javascript">
              function initialize() {
                var mapOptions = {
                  center: new google.maps.LatLng(-15.869167, -47.920834),
                  zoom: 3,
                  disableDefaultUI: true,
                  mapTypeId: google.maps.MapTypeId.HYBRID
                };
                var map = new google.maps.Map(document.getElementById("map_canvas"),
                    mapOptions);

                var nyLayer = new google.maps.KmlLayer(
              'YOUR_REAL_KML_LINK',
              {  suppressInfoWindows: false,
                 map: map});




                google.maps.event.addListener(nYLayer,'click',function(){
                    infowindow.open(map, nYLayer); 
                });
        }


        </script> 
</head>

    <body onLoad="initialize()">
    <div id="map_canvas" style="width:800; height:400;"></div>
    </body>
</html>

并使用您的查询通过 PHP 生成您的 KML:

<?php
header('Content-Type: application/vnd.google-earth.kml+xml kml');
header('Content-Disposition: attachment; filename="test.kml"');

include('database_config.php');

// Query the database data
$result = mysql_query("SELECT * FROM YOUR_DATA_TABLE");

// Print the head of the document
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">';
echo '<Document>';

  // Now iterate over all placemarks (rows)
while ($row = mysql_fetch_array($result)) {

    // This writes out a placemark with some data

echo '<Placemark>';
echo '<name>'.$row['name'].'</name>';
echo '<description>'.$row['description'].'</description>';
echo '<Point>';
echo '<coordinates>'.$row['lng'].' , '.$row['lat'].'</coordinates>';
echo '</Point>';
echo '</Placemark>';


  };

// And finish the document

echo '</Document>';
echo '</kml>';


?>

更简单!谢谢你们的帮助!

于 2013-03-24T05:42:55.270 回答
0

创建 XML 的一种简单方法是 XMLWriter:

$r=new XMLWriter();
$r->openMemory();
$r->startDocument('1.0','UTF-8');
$r->startElement('kml');
    $r->startElement('document');
    $r->startElement('Placemark');
        $r->startElement('name');
        $r->text($row['icao']);
    $r->endElement();
    $r->startElement('description');
        $r->text($row['name']);
    $r->endElement();
    $r->startElement('Point');
                $r->startElement('coordinates');
                    $r->text($row['lon'].' , '.$row['lat']);
                $r->endElement(); // coordinates
    $r->endElement(); // point          
        $r->endElement(); // Placemark
    $r->endElement(); // document
$r->endElement(); // kml
$newxml = $r->outputMemory(true);

您仍然需要弄清楚如何在 mml-node 中设置命名空间。见http://www.php.net/manual/en/function.xmlwriter-start-element-ns.php

于 2013-03-23T22:59:07.380 回答