2011-11-02 136 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