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

Googleマップは、同期していないため、コールバックを使用しています(ドキュメントのパラメータ2を参照) 。ビットは魔法が起こる場所です。Googleが住所をジオコーディングしたときに実行されます。それまでは、表示するものは何もありません。function(results,status)

これを試して:

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 に答える