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


?>

クエリを忘れてください!Googleマップマップで読み取る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 に答える