0

我的问题是使用谷歌地图进行反向地理编码。我想对 n 个(小于 15)的纬度和经度坐标进行地理编码,以便我可以使用获得的地址绘制路线。我的问题是当我在循环中使用它时,它没有按照传递的 lat-lng 坐标的顺序给出地址。循环未正确执行。我遇到问题的代码部分是:

 for(var i=0;i<tlength;i++){
 alert(i);    
 var geocoder = new google.maps.Geocoder();   
 geocoder.geocode({'latLng': latlng[i]},function(results, status) {
 alert(i); 
 if (status == google.maps.GeocoderStatus.OK) {
      if (results[0]) {
        var add=results[0].formatted_address;
        address.push(add);
      }
    }
  });    
 }

得到的地址数组与 latlng 数组不按顺序排列。第二个 latlng 首先进行地理编码,并且第二个警报框中的 i 值始终为 6(在本例中为 tlength=6)。它应该从 0 变为 5。但它没有发生。有人可以帮我弄这个吗。或者他们是否有任何其他方式直接使用 latlong 坐标绘制路线?

4

2 回答 2

1

地理编码是异步的。不能及时保证回调的顺序。一种解决方法是使用函数闭包将输入索引与回调相关联。请注意,地理编码器受到配额和速率限制。如果您不检查返回的状态,您将不知道何时遇到限制。(如果您的数组中有很多点,下面代码中的警报会变得非常烦人......)

 var geocoder = new google.maps.Geocoder();   
 function reverseGeocode(index) {
   geocoder.geocode({'latLng': latlng[index]},function(results, status) {
     if (status == google.maps.GeocoderStatus.OK) {
       if (results[0]) {
         var add=results[0].formatted_address;
         address[index] = add;
       } else alert("no results for "+laglng[index]);
     } else alert("Geocode failed: "+status);
   });    
 }

 for(var i=0;i<tlength;i++){
   reversGeocode(i);
 }
于 2013-10-17T12:49:46.570 回答
0

您需要在代码中使用这样的错误:

var latlng = new google.maps.LatLng(51.9000,8.4731);
    var geocoder = new google.maps.Geocoder();   
     geocoder.geocode({'latLng': latlng},function(results, status) {
     if (status == google.maps.GeocoderStatus.OK) {
          if (results[0]) {
            var add=results[0].formatted_address;
            //address.push(add);
             alert(results[0].formatted_address); 
          }
        }
      });  

对于您的代码,您需要像这样传递:

for(var i=0;i<tlength;i++){ 
 var latlng = new google.maps.LatLng(latlng[i]);
 var geocoder = new google.maps.Geocoder();   
 geocoder.geocode({'latLng': latlng},function(results, status) {
 alert(i); 
 if (status == google.maps.GeocoderStatus.OK) {
      if (results[0]) {
       // var add=results[0].formatted_address;
        address.push(results[0].formatted_address);
      }
    }
  });    
 }
于 2013-10-17T12:29:43.817 回答