0

我试图在我的地图上放置一个标记,然后使用该标记的位置来绘制一些多边形。但是,marker.getPosition() 最初似乎没有返回值。我需要再次调用该函数以获取先前的标记位置。有没有人对为什么会这样有任何建议

function codeAddress() {
  var address = fubar;
  geocoder.geocode( { 'address': address}, function(results, status) {
      map.setCenter(results[0].geometry.location);
      map.setZoom(1);
      if (marker == null){
        marker = new google.maps.Marker({
          map: map,
        });
      }
      marker.setPosition(results[0].geometry.location);
  });
  document.write(marker.getPosition());   //this displays nothing
}
4

2 回答 2

4

谷歌地图正在使用回调,(参见文档中的参数 2),因为它不是同步的。这function(results,status)就是魔法发生的地方。它在 Google 对地址进行地理编码时运行。在那之前,你没有什么可以展示的。

尝试这个:

function codeAddress() {
    var address = fubar;
    geocoder.geocode( { 'address': address}, function(results, status) {
        map.setCenter(results[0].geometry.location);
        map.setZoom(1);
        if (marker == null){
            marker = new google.maps.Marker({
                map: map,
            });
        }
        marker.setPosition(results[0].geometry.location);
        alert("Alert 1");
        alert(marker.getPosition());
    });
    alert("Alert 2");
}

你会看到它alert("Alert 2")出现在之前alert("Alert 1")

于 2012-04-12T21:10:49.300 回答
1

您可以利用 $.Deferred()

function codeAddress() {
  var address = fubar;
  var d = $.Deferred();
  var marker;

  geocoder.geocode( { 'address': address}, function(results, status) {
      map.setCenter(results[0].geometry.location);
      map.setZoom(1);
      if (marker == null){
        marker = new google.maps.Marker({
          map: map,
        });
      }
      marker.setPosition(results[0].geometry.location);
      d.resolve();
  });
  d.done(function(){
      document.write(marker.getPosition());
  });
}
于 2014-05-07T13:00:26.010 回答