0

マップにマーカーを配置し、そのマーカーの位置を使用してポリゴンを描画しようとしています。しかし、marker.getPosition()は最初に値を返すようには見えません。以前のマーカー位置を取得するには、関数を再度呼び出す必要があります。誰もが、これは地図マーカーgetPosition()は、関数の最初の呼び出し時に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); 
    }); 
    document.write(marker.getPosition()); //this displays nothing 
} 

答えて

4

グーグルマップである理由として任意の提案を持っていますそのnot synchronousためのコールバック、(see parameter 2 in the documentation)を使用しています。ビットは魔法が起こる場所です。 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"); 
} 

そして、あなたは​​

+0

どれ勧告の利点を取ることができる前にalert("Alert 2")が表示されていることがわかります。

これを試してみてくださいこれを回避するには? – user1330217

+0

それを回避するには、あなたのロジックを(アラートのように)コールバックの中に入れなければなりません。ウェブサイトにテキストを挿入/編集する必要がある場合は、[jQuery](http://www.jquery.com)を使用することをお勧めします。 –

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()); 
    }); 
} 
関連する問題