通过Google Maps API v3访问ExtendedData信息

4

我有一个KML文件,其中每个<Placemark>节点内都包含一个<ExtendedData>节点,然后是一些键/值对的<Data>节点。我已经按照这些示例:http://code.google.com/apis/kml/documentation/extendeddata.htmlcode.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特征数据,但不包括扩展数据,我现在有些困惑。我希望使我的KML在语义上更加合理,而不是将更多数据加载到描述中,并稍后用JavaScript解析它。

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

4个回答

2
我也在寻找同样的内容。我从这里找到了信息,然后构建了一个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;
}

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

感谢您建议使用JQuery解析KML,但问题是当通过Google Maps API加载时,ExtendedData节点被剥离了,因此我甚至无法看到那些数据。最终我直接访问了KML文件(类似于这样),并手动放置每个标记,而不是使用Google Maps API中的KML功能 :( - Matthew Knight
真的很不幸 :/。我正在使用Google Earth API工作,到目前为止它已经保持了每个Placemark的kml完整。 - Alkix
顺便说一下,JavaScript没有关联数组。你应该将returnArray声明为一个对象{} - Mads Hansen

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

    });

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

ExtendedData节点在Google Maps支持的KML元素页面上得到了部分支持,但我还没有弄清楚如何正确使用它们。


是的,它说ExtendedData仅支持“未类型化<Data>”,但我似乎在对象中找不到它。 - Matthew Knight

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接