【问题标题】:Generate KML/KMZ/XML with PHP query使用 PHP 查询生成 KML/KMZ/XML
【发布时间】:2013-03-21 18:51:07
【问题描述】:

我正在尝试使用 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');

【问题讨论】:

  • 在这种情况下,它使文档更易于阅读;)
  • 它使 XML 无效 ;)
  • AHHHHHHHHHHHHHHHHHHHHHHHHHHHHNNNNNNNNNNNNNNNNN,现在我会尝试修复它!谢谢,让我们看看会发生什么!
  • No.. 我仍然收到错误屏幕:error on line 1 at column 1: Document is empty

标签: php xml google-maps kml


【解决方案1】:

我创建了一个新代码,现在它可以工作了,把它放到你的 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>';


?>

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

【讨论】:

    【解决方案2】:

    创建 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-10
      • 1970-01-01
      相关资源
      最近更新 更多