2011-08-11 194 views
1

嗨我正在使用谷歌地圖javascript api v3谷歌地圖與地理編碼

這裏是我的代碼來畫多段線。

for(var i=0; i < addressArr.length; i++){ 
    geocoder.geocode({ 'address': addressArr[i]}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 

     point = results[0].geometry.location; 
     place.push(results[0].address_components[1].long_name); 

     flightPlanCoordinates.push(point); 
     if(flightPlanCoordinates.length == addressArr.length){ 
     flightPath = new google.maps.Polyline({path: flightPlanCoordinates,strokeColor: "#FF0000",strokeOpacity: 0.50,strokeWeight: 2 }); 
     flightPath.setMap(map); 
     } 

addressArr是地址

數組的問題是在我的flightPlanCoordinates,他們不是在我傳遞的addressArr從for循環的順序。
假設我通過addressArr = [1,2,3,4]我的flightPlanCoordinates變成了[2,3,1,4]。 任何可以提示發生了什麼。

+0

Gmaps4rails還顯示折線 – apneadiving

回答

1

這只是因爲在循環內部,你會做出異步調用(geocoder.geocode),這會花費不同的時間來完成。因此,建議需要1秒鐘的時間對數組中的第二個元素進行地理編碼,並且需要3秒鐘對地理編碼第一個元素進行地理編碼顯然,第二個元素的回調函數將在第一個元素之前被調用,從而將其推入flightPlanCoordinates的第一個位置。

只需在代碼中的第二個if語句中調用sort()方法來解決問題。

UPDATE:

var i = 0; 
function geocode(){ 
    geocoder.geocode({ 
     'address': addressArr[i] 
    }, 
    function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      point = results[0].geometry.location; 
      place.push(results[0].address_components[1].long_name); 
      flightPlanCoordinates.push(point); 
      i++; 
      if(addressArr[i] != null) 
       geocode(); 

      if (flightPlanCoordinates.length == addressArr.length) { 
       flightPath = new google.maps.Polyline({ 
        path: flightPlanCoordinates, 
        strokeColor: "#FF0000", 
        strokeOpacity: 0.50, 
        strokeWeight: 2 
       }); 
       flightPath.setMap(map); 
      } 
     } 
    } 
} 
geocode(); 
+0

你是對的,這是問題,但排序沒有解決problem.The路由不能正常顯示,因爲我的數組包含經度和緯度。 – Mahesh

+0

我可以讓Geocode調用等待直到它返回第一個響應。 – Mahesh

+0

當我在循環中添加了一個警報,但它不能解決問題。 – Mahesh

0

不太確定爲什麼它返回這樣的值,但你可以對數組進行排序,這將解決你的問題。 flightPlanCoordinates.sort();