Не получите правильное возвращаемое значение из геокодера? - PullRequest
0 голосов
/ 23 февраля 2012

У меня есть множество местоположений, и, используя геокодер, я смог получить широту и долготу.Однако я хочу каждый раз передавать значение местоположения из функции геокодера.

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;  
}

Места отмечены отлично, но при вызове события щелчка информационное окно не отображается в соответствии с местоположением (для каждого маркера в информационном окне отображается заголовок как последнее местоположение ["jaipur"]).

1 Ответ

0 голосов
/ 28 февраля 2012

Причина в том, что ответ геокодера асинхронный. Цикл for проходит через каждый элемент, и, поскольку 'Jaipur' является последним значением, это значение все еще сохраняется в 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 );
...