0

それで、私はGoogleの逆ジオコーダーを使用しているので、最初に行うことはtokyoなどの住所を入力することです.latlngを取得し、それをジオコーダーに戻して場所の適切な名前を受け取りますが、代わりに未定義を返します。私のコードは次のとおりです。

var geocoder = new google.maps.Geocoder();
var place = document.getElementById("location").value;
var name;
var place_latlng;
geocoder.geocode({'address' : place}, function(results, status){
  if (status == google.maps.GeocoderStatus.OK){
    place_latlng = results[0].geometry.location;
    addMarker(place_latlng);
  }
});
geocoder.geocode({'latLng' : place_latlng},function(results, status){
  if (status == google.maps.GeocoderStatus.OK){
    name = results[0].formatted_address;
  }
});

name が毎回未定義になってしまうのですが、これを修正する方法はありますか?

4

1 に答える 1

2

Geocoder は非同期です。コールバック関数内で Geocoder によって返されたデータを使用する必要があります (テストされていません)。

geocoder.geocode({'address' : place}, function(results, status){
  if (status == google.maps.GeocoderStatus.OK){
    place_latlng = results[0].geometry.location;
    addMarker(place_latlng);
    geocoder.geocode({'latLng' : place_latlng},function(results, status){
      if (status == google.maps.GeocoderStatus.OK){
        name = results[0].formatted_address;
        alert("name = "+name);
      } else { alert("reverse geocode of "+place_latlng+ " failed ("+status+")"); }
    });
  } else { alert("geocode of "+place+" failed ("+status+")"); }
});

于 2013-02-05T01:18:06.990 に答える