【问题标题】:Not getting correct return value from geocoder?没有从地理编码器获得正确的返回值?
【发布时间】:2012-02-23 10:53:31
【问题描述】:

我有一系列位置,并且使用地理编码器,我能够获得纬度和经度。但是,我想每次都从地理编码器函数中传递位置值。

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”])。

【问题讨论】:

    标签: javascript google-maps-api-3 dom-events


    【解决方案1】:

    原因是地理编码器的响应是异步的。 for 循环遍历每个元素,因为 'Jaipur' 是最后一个值,所以当地理编码器的响应最终传入并调用 createMarker 时,该值仍存储在 tempLoc 中:

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

    【讨论】:

      猜你喜欢
      • 2012-01-06
      • 2021-10-22
      • 1970-01-01
      • 2016-09-09
      • 1970-01-01
      • 2013-09-22
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      相关资源
      最近更新 更多