通过Google Maps API v3访问ExtendedData信息

时间:2011-01-02 11:14:29

标签: javascript google-maps kml

我有一个KML文件,它在每个<Placemark>节点中包含一个<ExtendedData>节点,然后包含一些具有键/值对的<Data>个节点。我按照以下示例进行了操作: http://code.google.com/apis/kml/documentation/extendeddata.html code.google.com/apis/kml/documentation/ kmlelementsinmaps.html 建议地图支持KML ExtendedData节点(虽然部分),但我找不到通过javascript访问ExtendedData对象的方法。我正在使用:

google.maps.event.addListener(agency_layer, 'click', function(kmlEvent) {
  console.debug( kmlEvent );
}

(其中agency_layer是KML对象)。 kmlEvent包含所有KML特征数据,但不包含extendedData,我正在摸不着头脑。我想让我的KML语义合理,而不是在描述中加载更多数据并稍后使用javascript解析它。

有没有人有类似的经历,或者知道如何通过Google Maps API v3访问ExtendedData节点?

4 个答案:

答案 0 :(得分:2)

我正在寻找完全相同的东西。我根据我发现here的信息构建了一个jQuery解决方案。

由于jQuery可以轻松解析xml,而kml是xml,因此效果非常好。这是我写的函数。

function extendedDataToArray(feature)
{
    var returnArray = new Array();
    $(feature.getKml()).find("Data").each(function()
    {
        returnArray[$(this).attr("name")] = $(this).find("value").text();
    }
    );
    return returnArray;
}

该函数返回一个关联数组,其中的键等于数据元素的名称,值作为值标记的内容。希望这有帮助!

答案 1 :(得分:1)

另一种解决方案可能是在需要使用时在地标描述和预处理描述中传递数据。

/*
<Placemark>
    <name></name>
    <description><![CDATA[
    Lorem Ipsum  [data]{"datakey":524}[/data]
    ]]>
    </description>
    <Point>
        <coordinates>COORDINATES</coordinates>
    </Point>
</Placemark>
*/
   var map_overlay = new google.maps.KmlLayer(
        'URL_TO_KML_FILE',
        {
            'suppressInfoWindows': true
        }
    );
    map_overlay.setMap( gmap );

    var placemarkInfo = new google.maps.InfoWindow();
    google.maps.event.addListener(map_overlay, 'click', function (kmlEvent) {

        var text_to_process = kmlEvent.featureData.description,
        matches = text_to_process.match(/\[data\](.*)\[\/data\]/),
        json_data_string = matches[1],
        json_data = JSON.parse(json_data_string),
        real_description = text_to_process.split('[data]')[0];

        alert(json_data.datakey);

        placemarkInfo.setContent( real_description );
        placemarkInfo.setPosition(kmlEvent.latLng);
        placemarkInfo.open(gmap);

    });

答案 2 :(得分:0)

我正在寻找同样的事情。您可以使用JSON.stringify()对象上的kmlEvent函数查看返回的数据:

alert(JSON.stringify(kmlEvent));    
根据{{​​3}}页面部分支持

ExtendedData个节点,但我还没有弄清楚如何正确使用它们。

答案 3 :(得分:0)

某些数据会从ExtendedData中删除,但如果您信任KML的来源,则可以使用getBalloonHtml()getBalloonHtmlUnsafe()。请参阅“https://developers.google.com/kml/documentation/extendeddata”以供参考。