Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过googlemapsapi操作KML_Javascript_Google Maps_Kml - Fatal编程技术网

Javascript 通过googlemapsapi操作KML

Javascript 通过googlemapsapi操作KML,javascript,google-maps,kml,Javascript,Google Maps,Kml,我试图在侧边栏中创建一个带有一系列复选框的地图,以显示标记组。我的KML文件结构如下(它来自Google Earth): 我能够加载KML并将其作为一个图层应用于地图,同时显示所有标记和多边形等。我不确定的是,在任何地方都找不到文档,那就是如何操作KML中的特定节点——比如通过复选框来显示特定文件夹中的所有位置标记,或者显示所有多边形,但不显示标记,反之亦然 由于PlaceMarker的数量,我宁愿使用GoogleEarth来维护KML文件,而不是通过javascript/API单独添加它们

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


我能够加载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>