2013-03-21 122 views
1

我'尝试使用PHP生成一个KML,但我得到了一个错误屏幕,1号线,这里是我的文档:用PHP生成查询KML/KMZ/XML

<?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'); 
+0

你喜欢'
'? – 2013-03-21 19:46:31

+0

在这种情况下,它保持文档更容易阅读;) – 2013-03-21 20:45:12

+0

它使XML无效;)现在我会尝试修复它!) – 2013-03-21 23:08:34

回答

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>'; 


?> 

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

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节点。见http://www.php.net/manual/en/function.xmlwriter-start-element-ns.php