0

こんにちは、この問題に対するアドバイスは大歓迎です。単純な問題のように思えますが、非常に困難になっています。

https://developers.google.com/maps/articles/phpsqlajaxにあるチュートリアル「Using PHP/MySQL with Google Maps」に従って、kml/xml ファイルを生成しています。生成している kml ファイルは、特定の場所に単に目印を作成するのではなく、一連の建物のポリゴン境界を生成しているという点で、例にあるファイルとは異なります。このページのコードは以下のとおりです...

// Creates the Document.
    $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);

    //Style 1
    //Set Style ID
    $restStyleNode = $dom->createElement('Style');
    $restStyleNode->setAttribute('id', '#style1');
    $restIconstyleNode = $dom->createElement('IconStyle');
    $restIconstyleNode->setAttribute('id', 'BuildingIcon');

    //Set LineStyle
    $restIconNode = $dom->createElement('LineStyle');
    $restHref = $dom->createElement('colour', 'FF990000');
    $restIconNode->appendChild($restHref);
    $restWidth = $dom->createElement('width', '2');
    $restIconNode->appendChild($restWidth);
    $restIconstyleNode->appendChild($restIconNode);
    $restStyleNode->appendChild($restIconstyleNode);
    $docNode->appendChild($restStyleNode);

    //Set Polystyle
    $restIconNode = $dom->createElement('PolyStyle');
    $restHref = $dom->createElement('colour', 'FFCC0000');
    $restIconNode->appendChild($restHref);
    $restFill = $dom->createElement('fill', '1');
    $restIconNode->appendChild($restFill);
    $restOutline = $dom->createElement('outline', '1');
    $restIconNode->appendChild($restOutline);
    $restIconstyleNode->appendChild($restIconNode);
    $restStyleNode->appendChild($restIconstyleNode);
    $docNode->appendChild($restStyleNode);

    //Style 2
    //Set Style ID
    $restStyleNode = $dom->createElement('Style');
    $restStyleNode->setAttribute('id', '#style2');
    $restIconstyleNode = $dom->createElement('IconStyle');
    $restIconstyleNode->setAttribute('id', 'HighfieldIcon');

    //Set LineStyle
    $restIconNode = $dom->createElement('LineStyle');
    $restHref = $dom->createElement('colour', 'ff000000');
    $restIconNode->appendChild($restHref);
    $restWidth = $dom->createElement('width', '2');
    $restIconNode->appendChild($restWidth);
    $restIconstyleNode->appendChild($restIconNode);
    $restStyleNode->appendChild($restIconstyleNode);
    $docNode->appendChild($restStyleNode);

    //Set Polystyle
    $restIconNode = $dom->createElement('PolyStyle');
    $restHref = $dom->createElement('colour', 'ff000000');
    $restIconNode->appendChild($restHref);
    $restFill = $dom->createElement('fill', '1');
    $restIconNode->appendChild($restFill);
    $restOutline = $dom->createElement('outline', '1');
    $restIconNode->appendChild($restOutline);
    $restIconstyleNode->appendChild($restIconNode);
    $restStyleNode->appendChild($restIconstyleNode);
    $docNode->appendChild($restStyleNode);

    // Iterates through the MySQL results, creating one Placemark for each row.
    while ($row = @mysql_fetch_assoc($result))
        {
            // Creates a Placemark and append it to the Document.

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

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

              // Create name, and description elements and assigns them the values of the name and address columns from the results.
              $nameNode = $dom->createElement('name',htmlentities($row['name']));
              $placeNode->appendChild($nameNode);
              $styleUrl = $dom->createElement('styleUrl', $row['styleID']);
              $placeNode->appendChild($styleUrl);

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

              //Add extrude information
              $restExtrude = $dom->createElement('extrude', '1');
              $polygonNode->appendChild($restExtrude);

              //Add altitude information
              $restAltitude = $dom->createElement('altitudeMode', 'relativeToGround');
              $polygonNode->appendChild($restAltitude);

              //Add outerBoundaryIsNode
              $outerBoundaryIsNode = $dom->createElement('outerBoundaryIs');
              $polygonNode->appendChild($outerBoundaryIsNode);

              //Add LinearRing Node
              $LinearRingNode = $dom->createElement('LinearRing');
              $outerBoundaryIsNode->appendChild($LinearRingNode);

              //Adding information into linear ring node
              $tessellate = $dom->createElement('tessellate', '1');
              $LinearRingNode->appendChild($tessellate);

              // Creates a coordinates element and gives it the value of the lng and lat columns from the results.
              $coorStr = $row['longitude1'] . ','  . $row['latitude1'] . ' ' . $row['longitude2'] . ',' . $row['latitude2'] . ' ' . $row['longitude3'] . ',' . $row['latitude3'] . ' ' . $row['longitude4'] . ',' . $row['latitude4'] . ' ' . $row['longitude5'] . ',' . $row['latitude5'];
              $coorNode = $dom->createElement('coordinates', $coorStr);
              $LinearRingNode->appendChild($coorNode);
        }

        $kmlOutput = $dom->saveXML();
        header('Content-type: application/vnd.google-earth.kml+xml');
        echo $kmlOutput;

マップにロードして生成されたkmlファイルをチェックしましたが、結果には満足していますが、phpファイルが生成しているkmlファイルをWebサイトに表示させる方法を一生理解できません。私はそれを行う方法を考えることはできません。チュートリアルが示唆することに従ってみましたが、それが何をしているのか本当に理解できず、機能させることができません。kml ファイルを動的に生成するための php コードを開発したので、難しい部分をやったと思っていましたが、間違っていたと感じています。非常に重要なので、アドバイスをいただければ幸いです。

現時点では、次のコードを使用しています。

<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=key

" type="text/javascript">

            var map;
            var geoXml; 
            var toggleState = 1;

    function initialize() 
    {
        if (GBrowserIsCompatible())
            {
                geoXml = new GGeoXml("Locationoffile.part");
                map = new GMap2(document.getElementById("map_canvas")); 
                map.setCenter(new GLatLng(50.xxxxx,-1.xxxxxxx), 16); 
                map.addControl(new GLargeMapControl());
                 map.addOverlay(geoXml);
            }
    } 


function toggleMyKml() 
    {
    if (toggleState == 1) 
        {
        map.removeOverlay(geoXml);
        toggleState = 0;
        } 
    else 
        {
        map.addOverlay(geoXml);
        toggleState = 1;
        }
    }

php で生成された kml ファイルから出力を静的な場所にコピーすることによって、マップを生成します。これは機能します。代わりに私のphpファイルをロードするには、これをどれだけ編集する必要がありますか? あなたの助けにもかかわらず、私はまだ少し混乱しています。

4

2 に答える 2

0

問題がある可能性があります。Google は kml ファイルをキャッシュします。新しいバージョンを作成するたびに、保存された kml ファイル名を変更する必要があります。これがないと、最新ではなく、キャッシュされた古いバージョンを取得し続けることになります。

于 2016-01-22T17:16:13.650 に答える
0

あなたはおそらく難しい部分をやったでしょう。KmlLayerkml ファイルを Google マップに表示するには、 api-docを使用できます。コンストラクターに提供する URLKmlLayerは公開されている URL でなければならないことに注意してください。そのため、Web からアクセスできる URL を渡すことができることを確認する必要があります。KML が動的に生成されても問題ありません。Google が取得できるようにするだけで済みます。その後、Google が kml を処理し、タイル オーバーレイを生成します。それがあなたの呼び出しから返されるものです: new google.maps.KmlLayer

URL が有効な kml を生成することをテストしたい場合は、Galdos KML Validatorをチェックしてください。URL を指定すると、KML を取得して解析しようとします。これは素晴らしい kml スモーク テスト ユーティリティです。

于 2012-05-15T18:26:53.643 に答える