1

我正在尝试使用地理编码从数组创建地图标记。我将地址以及地址的标题存储在数组中。问题出在我的循环中,标题被设置为我最后一个数组的最后一个值,尽管标记是从数组中的地址正确设置的。这是我的代码:

maprender : function (comp, map) {
  new google.maps.Marker({
    animation: google.maps.Animation.DROP,
    position: new google.maps.LatLng(this._geo.getLatitude(), this._geo.getLongitude()),
    map: map
  });

  var names = new Array("ABC","DEF","GHI"),
      mapAdd = new Array();

  mapAdd[0] = "Address 1";
  mapAdd[1] = "Address 2";
  mapAdd[2] = "Address 3";

  var geocoder = new google.maps.Geocoder(); 

  for (var i = 0; i < mapAdd.length; i++) {
    var lat = 0,
        lng = 0,
        x = names[i];

    geocoder.geocode({
      'address': mapAdd[i]}, 
      function (results,status) {
        if (status === google.maps.GeocoderStatus.OK) {
          lat = results[0].geometry.location.lat();
          lng = results[0].geometry.location.lng();

          console.log(lat + " " + lng);
          new google.maps.Marker({
            position: new google.maps.LatLng(lat, lng),
            title: x,
            map: map
          });
          console.log(x);
        }
      }
    });

  }

}

标题在所有标记上都返回“GHI”。

4

1 回答 1

0

基于http://blog.jbrantly.com/2010/04/creating-javascript-function-inside.html

试试这个方法

function geocode(i) {

  var lat = 0,
      lng = 0,
      x = names[i];

  geocoder.geocode({
    'address': mapAdd[i]},
    function (results,status) {
      if (status === google.maps.GeocoderStatus.OK) {
        lat = results[0].geometry.location.lat();
        lng = results[0].geometry.location.lng();

        console.log(lat + " " + lng);
        new google.maps.Marker({
          position: new google.maps.LatLng(lat, lng),
          title: x,
          map: map
        });
        console.log(x);
      }
    }
  });

}

for (var i = 0; i < mapAdd.length; i++) {
  geocode(i);
}

希望这可以帮助

于 2013-03-18T10:01:06.397 回答