Javascript 通过googlemapsapi操作KML
我试图在侧边栏中创建一个带有一系列复选框的地图,以显示标记组。我的KML文件结构如下(它来自Google Earth):Javascript 通过googlemapsapi操作KML,javascript,google-maps,kml,Javascript,Google Maps,Kml,我试图在侧边栏中创建一个带有一系列复选框的地图,以显示标记组。我的KML文件结构如下(它来自Google Earth): 我能够加载KML并将其作为一个图层应用于地图,同时显示所有标记和多边形等。我不确定的是,在任何地方都找不到文档,那就是如何操作KML中的特定节点——比如通过复选框来显示特定文件夹中的所有位置标记,或者显示所有多边形,但不显示标记,反之亦然 由于PlaceMarker的数量,我宁愿使用GoogleEarth来维护KML文件,而不是通过javascript/API单独添加它们
我能够加载KML并将其作为一个图层应用于地图,同时显示所有标记和多边形等。我不确定的是,在任何地方都找不到文档,那就是如何操作KML中的特定节点——比如通过复选框来显示特定文件夹中的所有位置标记,或者显示所有多边形,但不显示标记,反之亦然
由于PlaceMarker的数量,我宁愿使用GoogleEarth来维护KML文件,而不是通过javascript/API单独添加它们。使用融合表会更好吗
更复杂的是,在某些情况下,我希望显示一个文件夹和另一个文件夹中的所有位置标记-我想我将使用ExtendedData来实现这一点,或者显式地按名称添加标记。稍后再讨论…据我所知,你是对的-当你添加
kmlayer
时,没有办法访问谷歌地图创建的Javascript对象。我甚至不认为它们存在-Google Maps v3通常将层渲染为在服务器端渲染的重叠平铺,因此可能不会有任何标记或多边形对象以您期望的方式()
这给您留下了两个选择:
创建多个KML文件,每一组要单独显示的位置标记对应一个文件,并将其作为单独的KML图层加载。您可以使用myKmlLayer.setMap(map)
和myKmlLayer.setMap(null)
隐藏/显示它们。这里的Javascript相对简单,但更难管理您的数据,并且您仅限于一个完整KML文件的粒度-您无法显示/隐藏单个位置标记
在自己的代码中加载并解析KML,使用生成的数据将标记和多边形加载到地图上。然后,可以使用对这些对象的引用来支持显示/隐藏控件。这可能是一个很大的工作,虽然你可能会得到一些里程与
您还可以通过收听addoverlay
,来捕获引用,如中所述。有一个库,我曾经完全按照您的描述(边栏和所有内容):。如果您使用的是v3api,还有一个问题
编辑:示例如下:
我开始使用单独的kml文件,但它变得有点毛茸茸的,界面上每个文件的全局图标(而不是文件夹图标)变得混乱。最后,我使用了一个kml文件来获得正确的文件夹结构,并继续使用Google Earth添加到其中
主要问题是管理大量数据(数百个点或形状)变得很糟糕。使用Google Earth一次只能移动一个。如果找到更好的解决方案,请留言。我正在考虑使用多个KML文件,我想使用Google Earth来管理这些文件可能不会太难。也会使js最小化。而且,额外的好处是,这意味着我可以显示多个类别的标记,只需根据需要将它们添加到每个kml文件中..你是对的。在GoogleMaps中加载kml不会导致正确的标记/多边形等。请看,我最终使用了融合表-一个用于多边形,一个用于放置标记。我可以在Google Earth中创建新的标记/多边形,然后将kml添加到相应的融合表中(这意味着我可以根据标记存储其他值-类别、描述、url、flickr图像等)。从那里,我的UI允许显示所有标记或子集,并在信息窗口中使用来自融合表的数据。工作良好,即使管理融合表可能有点费尼基。嗨。您将答案标记为正确,但更进一步,请提及融合表。我拼命想找到答案
<document>
<folder>
<placemark>
<xx />
<xxx />
</placemark>
</folder>
</document>