0

Google MapsAPIGeocodeを使用して住所の緯度と経度を見つけようとする2つのJavascript関数があります。

function getLatLon(address) {
    var location = -1;
    geocoder.geocode( { 'address': address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            var lat = results[0].geometry.location.lat();
            var lon = results[0].geometry.location.lng();
            location = new Array(lat, lon);
            //document.getElementById('results').innerHTML = location[0];
        } else {
            alert("Geocode was not successful.");
        }
    });
    return location;
}

function search() {
    var address = document.getElementById('address').value;
    var location = getLatLon(address);
    document.getElementById('results').innerHTML = location[0];
}

getLatLon()内のlocation[0]は#resultsdivに正しい数値を出力しますが、search()内のlocation[0]はundefinedを返します。なぜこれが起こるのか、何か考えはありますか?代わりにgetLatLon()からプレーン文字列( "Hello")を返してみましたが、これは問題なく機能します。

4

2 に答える 2

6

問題はgeocoder.geocode(...)非同期あるため、値を返すことができません。代わりに次のようにしてみてください。

function getLatLon(address, callback) {
    geocoder.geocode( { 'address': address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            var lat = results[0].geometry.location.lat();
            var lon = results[0].geometry.location.lng();
            location = new Array(lat, lon);
            callback(location);
        } else {
            alert("Geocode was not successful.");
        }
    });
}

function search() {
    var address = document.getElementById('address').value;
    getLatLon(address, function(location) {
        document.getElementById('results').innerHTML = location[0];
    });
}
于 2012-11-26T04:05:13.353 に答える
2

APIドキュメントによると、呼び出しgeocoder.geocode(request, callback_function)てもすぐには何も返されません。応答が受信されて処理さcallback_functionれると、が呼び出されます。それまでは、location設定した値のままになります。

を呼び出すときは、コールバック関数で検索自体を開始する必要がありますgetLatLon。柔軟性を高めるためにgetLatLon、コールバック関数内から呼び出されるコールバックパラメータを追加することでこれを行うことができgeocode()ます。

于 2012-11-26T04:06:34.827 に答える