通过Google Maps API操作KML

时间:2011-11-02 03:38:37

标签: javascript google-maps kml

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

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

我可以加载KML并将其作为图层应用于地图,同时显示所有标记和多边形等。我不确定,并且无法在任何地方找到记录,是如何操纵KML中的特定节点 - 例如通过复选框显示特定文件夹中的所有地标,或显示所有多边形,但没有标记或反之亦然。

由于地方标记的数量,我宁愿使用Google地球来维护KML文件,而不是通过javascript / API单独添加它们。我会更好地使用Fusion Tables吗?

为了使事情更复杂,在某些情况下,我想显示一个文件夹中的所有地标和另一个文件夹中的所有地标 - 我想我将使用ExtendedData来实现它,或者明确地按名称添加标记。稍后再说......

2 个答案:

答案 0 :(得分:3)

据我所知,你是对的 - 当你添加KmlLayer时,无法访问谷歌地图创建的Javascript对象。我甚至认为它们不存在 - Google Maps v3经常将图层渲染为在服务器端渲染的叠加图块,因此可能没有任何MarkerPolygon个对象符合您的预期( see the API docs)。

这为您提供了两个选项:

  1. 创建多个KML文件,分别针对您要分别显示的每组地标,并将其作为单独的KML图层加载。您可以使用myKmlLayer.setMap(map)myKmlLayer.setMap(null)隐藏/显示它们。这里的Javascript相对简单,但是管理数据更加困难,并且您只能使用一个完整KML文件的粒度 - 您无法显示/隐藏单个地标。

  2. 在您自己的代码中加载并解析KML,使用生成的数据将标记和多边形加载到地图上。然后,您可以使用对这些对象的引用来支持您的显示/隐藏控件。这可能是很多工作,尽管你可能会在geoxml3获得一些里程。

  3. 您也可以通过聆听addoverlay来捕捉引用,如this answer to a related question中所述。

答案 1 :(得分: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地球一次移动一个。如果您找到更好的解决方案,请发表评论。