第一次调用函数时,映射标记getPosition()不适用于谷歌地图

时间:2012-04-12 21:04:31

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

我试图在地图上放置一个标记,然后使用该标记的位置绘制一些多边形。但是,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
}

2 个答案:

答案 0 :(得分:4)

Google地图正在使用回调(see parameter 2 in the documentation),因为其not synchronousfunction(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")出现

答案 1 :(得分: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());
  });
}