【问题标题】:Manipulating KML via Google Maps API通过 Google Maps API 操作 KML
【发布时间】:2011-12-20 00:10:00
【问题描述】:

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

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

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

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

为了使事情更加复杂,在某些情况下,我想显示一个文件夹中的所有地标和另一个文件夹中的一个 - 我想我会使用 ExtendedData 来实现这一点,或者按名称显式添加标记。以后再说吧……

【问题讨论】:

标签: javascript google-maps kml


【解决方案1】:

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

这让您有两个选择:

  1. 创建多个 KML 文件,一个用于您希望单独显示的每组地标,并将它们作为单独的 KML 图层加载。您可以使用myKmlLayer.setMap(map)myKmlLayer.setMap(null) 隐藏/显示它们。此处的 Javascript 相对简单,但更难管理您的数据,并且您仅限于一个完整 KML 文件的粒度 - 您无法显示/隐藏单个地标。

  2. 在您自己的代码中加载和解析您的 KML,使用生成的数据将标记和多边形加载到地图上。然后,您可以使用对这些对象的引用来支持您的显示/隐藏控件。这可能需要大量工作,但您可能会通过geoxml3 获得一些帮助。

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

【讨论】:

  • 我正在考虑使用多个 KML 文件,我想使用 Google 地球来管理这些文件可能不会太难。也会保持 js 最小化。而且,额外的好处是,这意味着我可以在多个类别中显示标记,只需根据需要将它们添加到每个 kml 文件中..
  • 你是对的。在谷歌地图中加载 kml 不会导致正确的标记/多边形等。请参阅code.google.com/intl/nl-NL/apis/maps/documentation/javascript/…
【解决方案2】:

我曾经使用过一个库来完全按照您的描述(侧边栏和所有内容):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 地球一次只能移动一个。如果您找到更好的解决方案,请发表评论。

【讨论】:

  • 我最终使用了融合表——一张用于多边形,一张用于地标。我可以在 Google 地球中创建新的标记/多边形,然后将 kml 添加到适当的融合表中(这意味着我可以针对标记存储其他值 - 类别、描述、url、flickr 图像等)。从那里,我的 UI 允许显示所有标记或子集,融合表中的数据可用于信息窗口。效果很好,即使管理融合表可能有点麻烦。
猜你喜欢
  • 2016-11-17
  • 2018-01-05
  • 1970-01-01
  • 2020-02-06
  • 1970-01-01
  • 2011-07-25
  • 2018-09-02
  • 2017-02-26
  • 2012-05-17
相关资源
最近更新 更多