2012-05-30 28 views
4

我正在開發一個帶有Google Maps API v3的網頁。我目前有一個功能地圖和搜索欄。我需要能夠顯示地圖上其中一個KML文件上的搜索地址到最近地標的距離。我怎樣才能做到這一點?搜索到的地址與Google地圖上最近的地標的距離api v3

下面是頁面的代碼:

<script type="text/javascript"> 
    var geocoder; 
    var map; 
    var marker; 
    var layers = []; 
    function initialize() { 
    geocoder = new google.maps.Geocoder(); 
    var latlng = new google.maps.LatLng (41, -73.4); 
    var myOptions = { 
     zoom: 7, 
     center: latlng, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
     } 
     map = new google.maps.Map(document.getElementById("map_canvas"), 
     myOptions); 
     marker = new google.maps.Marker({map:map}); 


     layers[0] = new google.maps.KmlLayer('http://dl.dropbox.com/u/80233620/South-and-North-County-Trailway.kml', 
      {preserveViewport: true}); 
     layers[1] = new google.maps.KmlLayer('http://www.nyc.gov/html/dot/downloads/misc/cityracks.kml', 
      {preserveViewport: true}); 
     layers[2] = new google.maps.KmlLayer('http://dl.dropbox.com/u/80233620/NWS%20Radar%20Images.kmz', 
      {preserveViewport: true}); 
    for (var i = 0; i < layers.length; i++) { 
       layers[i].setMap(map); 
       } 
     } 

    function codeAddress() { 
     var address = document.getElementById ("address").value; 
     geocoder.geocode ({ 'address': address}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      map.setCenter(results [0].geometry.location); 
      marker.setPosition(results [0].geometry.location); 
      map.setZoom(14); 
      } 
     else { 
      alert("Geocode was not successful for the following reason: " + status); 
       } 
     }); 
          } 
    function toggleLayer(i) { 
     if(layers[i].getMap() === null) { 
     layers[i].setMap(map); 
     } 
     else { 
     layers[i].setMap(null);} 
    } 

</script> 

回答

1

無法訪問KML圖層的數據一樣,

https://developers.google.com/maps/documentation/javascript/layers#KMLLayers

由於KML可能包括大量的功能,您不能直接從KmlLayer對象訪問 功能數據。相反,當顯示功能 時,它們呈現爲看起來像可點擊的Maps API 疊加層。

相反,您可以手動處理XML並添加標記,然後使用geometry librarycomputeDistanceBetween()來獲得距離。我通常將距離乘以某個數字來計算輪次(距離公式獲得直線距離)。我相信1.2是最準確的。

+0

通過手動處理XML並添加標記,你的意思是什麼? – Gavin

+0

你必須用php打開xml文件並提取出點並添加標記。 Google地圖不允許您通過kml圖層訪問該數據。 – Galen

+0

我對PHP不熟悉,如何用它打開文件? – Gavin