2016-02-03 80 views
-1

這是簡單的我很確定,但我是新來的很多代碼在這裏。谷歌地圖API和標記陣列的問題

我有這樣的代碼:

function initMap() { 
    var myOptions = { 
     center: new google.maps.LatLng(52.0209079,-0.751136), 
     zoom: 12, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 

    var map = new google.maps.Map(document.getElementById("map"), myOptions); 
    var addressArray = ["mk4 1eh","mk4 4fy","mk8 0er"]; 
    var geocoder = new google.maps.Geocoder(); 

    var markerBounds = new google.maps.LatLngBounds(); 

    for (var i = 0; i < addressArray.length; i++) { 
     var postcode = addressArray[i] 
     geocoder.geocode({ 'address': addressArray[i] }, function(results, status) { 
      if (status == google.maps.GeocoderStatus.OK) { 
       var marker = new google.maps.Marker({ 
        map: map, 
        title: postcode, 
        position: results[0].geometry.location 
       }); 

       markerBounds.extend(results[0].geometry.location); 
       map.fitBounds(markerBounds); 
      } else { 
       alert("Geocode was not successful for the following reason: " + status); 
      } 
     }); 
    } 
} 

這應該大地定位在addressArray三個郵政編碼(郵政編碼),然後用標題在地圖上顯示出來。

如果我使用一個常數指數即var postcode = addressArray[0]

那麼每個地圖標記得到mk41eh的相同的標題,就像我期望我在與線15 var postcode = addressArray[i]

問題。

問題是如果我使用索引,那麼所有標記最終都會被標記爲數組中的最後一項(在本例中爲mk8 0er)。

我敢肯定,解決方案是盲目明顯,但我迷路了。

任何幫助將是非常讚賞。

感謝

史蒂夫

+1

可能的重複[將地理編碼結果保存到數組中 - Closure Trouble](http://stackoverflow.com/questions/13067403/saving-geocoder-results-to-an-array-closure-trouble) – geocodezip

+0

可能的重複項[Google地圖包含多個地理編碼位置和點擊提醒](http://stackoverflow.com/questions/29195868/google-maps-with-multiple-geocode-locations-and-alerts-on-click) – geocodezip

回答

0

https://developers.google.com/maps/documentation/javascript/geocoding

訪問地理編碼服務是異步的,因爲谷歌地圖API需要外部服務器的呼叫。出於這個原因,你需要傳遞一個回調方法來在請求完成時執行。這個回調方法處理結果。請注意,地理編碼器可能會返回多個結果。

您傳遞給.geocode()的函數是回調函數,一旦得到響應就會發生。在請求正在進行時,您的循環繼續運行,同時postcode正在更改。一旦回調第一次觸發,循環結束並且postcode被設置爲最後一個索引i

請參閱this answer瞭解如何異步提高請求和響應之間的範圍的示例。

+0

對不起我是新手,正在努力效仿這個例子。你能給我更多的指點嗎?具體在哪裏學校郵編。謝謝 –

0

好的我解決了我的問題。 geocoder會返回一個帶有許多關於位置的可愛信息的JSON對象。 See here瞭解詳情。

其中一個元素被稱爲formatted_address,其中包含我想要顯示的郵政編碼。