Google Maps Geocoder内部循环播放

时间:2011-12-10 17:39:24

标签: javascript google-maps google-maps-api-3 geocoding google-maps-markers

我有一段代码,我试图在谷歌地图中放置一组标记:

  for(var i = 0; i < postcodes.length; i++) {
    var address = postcodes[i].innerHTML +", uk";
    geocoder.geocode({'address': address}, function(results, status){
      if (status == google.maps.GeocoderStatus.OK) {
        var marker = new google.maps.Marker({
          position: results[i].geometry.location,
          map: map,
          icon: image,
        });
      } else {
        alert("Geocode was not successful for the following reason: " + status);
      }
   });
 }

然而,在我尝试设置位置时,这将返回undefined。如果我在结果[#]中使用数字(0)而不是变量i,它可以正常工作,但我无法迭代结果。有没有人遇到过这个问题?

谢谢,

1 个答案:

答案 0 :(得分:2)

问题是启动一个for循环,遍历邮政编码:

for(var i = 0; i < postcodes.length; i++) {

所以我是邮政编码数组中的索引。然后尝试在结果对象中使用该索引从邮政编码的地理编码请求返回[i];但这两个阵列是无关的。变量结果是postcodes [i]的结果,并包含该邮政编码的所有搜索结果。因此,结果[0]是一个邮政编码的最接近的结果。

我认为你想要的是:

for(var i = 0, num = postcodes.length; i < num; i++) { // loop through postal codes
  geocoder.geocode(
    {
      address: postcodes[i].innerHTML + ", uk"
    },
    function(results, status) {
      if (status != google.maps.GeocoderStatus.OK) {
        alert("Geocode was not successful for the following reason: " + status);
        return false;
      }
      for (var i = 0, num = results.length; i < num; i++) { // loop through results
        var marker = new google.maps.Marker({
          position: results[i].geometry.location,
          map: map,
          icon: image
        });
      }
    }
  ); // end geocode request
}

如果您只想显示最接近的结果,请省略第二个for循环并使用结果[0]而不是结果[i]。