通过Google Maps API操作KML

3

我正在尝试在侧边栏中构建一张地图,以显示标记组的系列复选框。我的KML文件结构如下(来自Google Earth):

    <document>
        <folder>
            <placemark>
                <xx />
                <xxx />
            </placemark>
        </folder>
     </document>

我能够加载KML文件并将其作为图层应用于地图上,一次显示所有标记和多边形等。但我不确定的是如何操作KML中的特定节点,例如通过复选框显示特定文件夹中的所有地标,或仅显示所有多边形而没有标记,反之亦然,我无法在文档中找到相关资料。
由于存在大量地标,我宁愿使用Google Earth来维护KML文件,而不是通过JavaScript / API单独添加它们。那我是不是最好使用Fusion Tables?
更进一步,有时我想显示来自一个文件夹的所有地标和另一个文件夹的地标 - 我认为我会使用ExtendedData来实现这一点,或者通过名称显式添加标记。稍后再说......

你好。你标记了一个答案为正确,但在下面提到了Fusion表格。我正在拼命寻找这个问题的答案http://stackoverflow.com/questions/16446118/add-and-remove-kml-overlay-to-a-google-map-from-external-link - 32423hjh32423
2个回答

3
据我所知,你是正确的 - 没有办法访问添加KmlLayer时Google Maps创建的Javascript对象。我甚至认为它们不存在 - Google Maps v3经常将图层呈现为覆盖在服务器端上的瓦片,因此可能不会有任何你期望的MarkerPolygon对象(请参见API文档)。
这给您留下了两个选择:
  1. 创建多个KML文件,每个文件包含一个独立的地标集合,并将它们作为单独的KML图层加载。您可以通过使用myKmlLayer.setMap(map)myKmlLayer.setMap(null)来隐藏/显示它们。这里的JavaScript相对简单,但是数据管理更加困难,而且您仅限于一个完整KML文件的细粒度控制 - 无法显示/隐藏单个地标。

  2. 在您自己的代码中加载和解析KML文件,使用生成的数据将标记和多边形加载到地图上。然后,您可以使用对这些对象的引用来支持您的显示/隐藏控件。虽然您可能可以使用geoxml3来减少工作量。

您还可以通过监听addoverlay来捕获引用,如this answer to a related question所述。


我在考虑使用多个KML文件,我想使用Google Earth来管理它们,这可能不会太困难。这也可以使js最小化。而且,额外的好处是,只需根据需要将它们添加到每个kml文件中,就可以显示多个类别的标记。 - Nathan
1
你是正确的。在Google地图中加载KML文件不会导致正确的标记/多边形等。请参见http://code.google.com/intl/nl-NL/apis/maps/documentation/javascript/overlays.html#KMLLayers。 - Eddy

0

有一个库可以实现您描述的功能(侧边栏和其他所有内容):http://code.google.com/p/geoxml/。如果您正在使用v3 api,则还有http://code.google.com/p/geoxml-v3/

编辑:这里有例子:http://www.dyasdesigns.com/geoxml/

我开始使用单独的kml文件,但是这会变得有点混乱,并且界面会因每个文件而混淆(而不是文件夹图标)。最终我使用了一个kml文件,并操纵它以获得适当的文件夹结构,并继续使用Google Earth添加数据。

主要问题是管理大量数据(数百个点或形状)很困难。您只能使用Google Earth一次移动一个。如果您找到更好的解决方案,请留言。


我最终使用了融合表 - 一个用于多边形,另一个用于地标。我可以在Google Earth中创建新的标记/多边形,然后将kml添加到相应的融合表中(这意味着我可以存储其他值以对标记进行分类、描述、url、flickr图像等)。从那里开始,我的用户界面允许显示所有标记或子集,并且可以在信息窗口中使用来自融合表的数据。即使管理融合表可能有点棘手,但效果很好。 - Nathan

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