2010-10-07 108 views
3

使用Google Maps API時,是否有任何方法可以通過KML文件創建「邊欄」?訪問Google地圖中的KML標記

我使用這樣的裝載地圖上的標記:

var myMarkerLayer = new google.maps.KmlLayer('http://example.com/WestCoast.kml'); 

這個偉大的工程,到目前爲止,但我怎麼能搶,通過這些點的數據和循環?

我想避免使用第三方庫,如果可能的話 - 雖然jQuery是好的。

回答

7

KML只是一個XML文檔,所以你可以使用jQuery來處理它,以提取你需要的數據。您可以將座標和地名存儲在本地數組中,並將這些數據用於您想要的任何目的,例如。當用戶點擊側邊欄上的地名時,您可以使用它導航到地圖上的某個點。

下面是一個關於如何處理KML文件並基於文件中的數據實現導航的示例..謹慎的一句話我不會對大型KML文件做這件事,因爲它會加載加載時間(瀏覽器有加載文件以處理特徵)...

<script type="text/javascript" src= "http://maps.google.com/maps/api/js?sensor=false"> 
</script> 
<script src="../js/jquery-1.4.2.min.js"> 
</script> 
<script> 
    var map; 
    var nav = []; 
    $(document).ready(function(){ 
     //initialise a map 
     init(); 

     $.get("kml.xml", function(data){ 

      html = ""; 

      //loop through placemarks tags 
      $(data).find("Placemark").each(function(index, value){ 
       //get coordinates and place name 
       coords = $(this).find("coordinates").text(); 
       place = $(this).find("name").text(); 
       //store as JSON 
       c = coords.split(",") 
       nav.push({ 
        "place": place, 
        "lat": c[0], 
        "lng": c[1] 
       }) 
       //output as a navigation 
       html += "<li>" + place + "</li>"; 
      }) 
      //output as a navigation 
      $(".navigation").append(html); 

      //bind clicks on your navigation to scroll to a placemark 

      $(".navigation li").bind("click", function(){ 

       panToPoint = new google.maps.LatLng(nav[$(this).index()].lng, nav[$(this).index()].lat) 

       map.panTo(panToPoint); 
      }) 

     }); 

     function init(){ 


      var latlng = new google.maps.LatLng(-43.552965, 172.47315); 
      var myOptions = { 
       zoom: 10, 
       center: latlng, 
       mapTypeId: google.maps.MapTypeId.ROADMAP 
      }; 
      map = new google.maps.Map(document.getElementById("map"), myOptions); 



     } 


    }) 
</script> 
<html> 
    <body> 
     <div id="map" style="width:600px;height: 600px;"> 
     </div> 
     <ul class="navigation"> 
     </ul> 
    </body> 
</html> 
+0

由於跨域安全限制,此方法將要求kml文件與地圖頁面存在於相同的域中。而使用本地谷歌地圖KmlLayer將允許外部kmls加載。 – Sean 2012-09-03 02:31:35

+0

請注意,此方法簡單地解決了原生KMLLayer的缺點,它不會給您任何選項來從KML獲取更多數據,但這並不是要取代它,只是一種處理XML文檔的方法。 – Michal 2012-09-03 20:44:32

+0

你好 我知道這個問題很舊,但使用這種方法從kml文件中提取數據後,我發現它給了我一個錯誤。 nav未定義; 所以你需要添加var nav = [];在使用nav變量之前。 – JonnyDevv 2014-03-03 12:10:36