2012-02-23 80 views
0

我有一組位置,使用地理編碼器,我可以獲得緯度&經度。但是,我希望每次將地址值傳遞給地理編碼器函數。從地理編碼器得不到正確的返回值?

var locations=new Array("Delhi","Jaipur") 
for(var i=0;i<locations.length;i++){ 
var tempLoc=locations[i];   
geocoder.geocode({ 'address': tempLoc},function(results, status) 
{ 
     if (status == google.maps.GeocoderStatus.OK) { 

       latitude[i] = results[0].geometry.location.lat(); 
       longitude[i] = results[0].geometry.location.lng();   
    latLonArray[i]=new google.maps.LatLng(latitude[i],longitude[i]); 
    latlngbounds.extend(latLonArray[ i ]); 
    map.setCenter(latlngbounds.getCenter()); 
       map.fitBounds(latlngbounds);      
       createMarker(latLonArray[i],tempLoc); 
     }    
}); 

} 

function createMarker(pos,t){ 
var marker = new google.maps.Marker({  
    position: pos, 
    map: map, 
    title: t  
}); 
google.maps.event.addListener(marker, 'click', function() { 
infowindow.setContent(marker.title); 
infowindow.open(map, marker); 

}); 
return marker; 
} 

的位置被標記完美,但是當一個點擊事件被稱爲信息窗口被根據該位置未示出(爲每一個標記信息窗口顯示標題作爲最後位置[「齋」])。

回答

0

原因是因爲geocoder的響應是異步的。該for循環經過每一個元素,因爲「齋浦爾」是最後一個值,即仍存儲在TEMPLOC值時,從地理編碼器響應終於進來,並呼籲createMarker:

createMarker(latLonArray[i],tempLoc); 
// by this time tempLoc always equals tempLoc=locations[locations.length-1]; 

什麼你真的想做的就是名字後面那個地址解析器返回

results[0].address_components[0].long_name 

所以你要createMarker的通話將看起來像:

createMarker(latLonArray[i], results[0].address_components[0].long_name); 
相關問題