2011-11-02 135 views
3

我试图在侧边栏中创建一系列复选框的地图,以显示标记组。我的KML文件的结构如下(它是来自谷歌地球):通过谷歌地图API处理KML

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

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

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

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

+0

嗨。你标记的答案是正确的,但进一步下降提到融合表。我拼命想找到一个答案这个http://stackoverflow.com/questions/16446118/add-and-remove-kml-overlay-to-a-google-map-from-external-link – 32423hjh32423

回答

3

据我所知,你是正确的 - 当你添加KmlLayer时,无法访问Google Maps创建的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描述赶上引用。

+0

我在想使用多个KML文件,我想用Google Earth来管理这些文件可能不会太困难。也将保持js最小化。并且,额外的奖励,这意味着我可以根据需要将它们添加到每个kml文件中,以显示多个类别中的标记。 – Nathan

+1

您是对的。在谷歌地图中加载kml不会导致正确的标记/多边形等。请参阅http://code.google.com/intl/nl-NL/apis/maps/documentation/javascript/overlays.html#KMLLayers – Eddy

+0

@Eddy - 谢谢,添加到我的答案的链接。 – nrabinowitz

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地球。如果您找到更好的解决方案,请发表评论。

+0

我已经结束了使用融合表 - 一个用于多边形,一个用于地标。我可以在Google Earth中创建新的标记/多边形,然后将kml添加到适当的融合表(这意味着我可以存储其他值与标记 - 类别,说明,url,flickr图像等)。从那里,我的用户界面允许显示所有标记或子集,并将融合表中的数据用于信息窗口。即使管理融合表可能有点挑剔,也可以很好地工作。 – Nathan