1

さて、私はこの問題の解決策をしばらく探しましたが、これについては特に何も見つかりませんでした。また、Googleの利用規約を紹介する前に、質問の最後までお読みください。

つまり、ここにアイデアがあります。Googleのジオコーダーを使用して、住所の緯度と経度を配列に保存したいと思います。すべての値を正しく計算できましたが、配列に保存できないようです。匿名関数を使用してアドレスを関数に渡しましたが、保存はまだ機能していません。助けてください!

Googleの利用規約について:このコードをどこにも保存したり、Googleマップに表示したりすることはできません。ただし、後でGoogleマップにフィードするために、kmlファイルとして保存する必要があります。マップを作成する方がはるかに便利ですが、他の理由でそれは不可能です。

adressdaten []は、アドレスのデータを含む2次元配列です。これはコードです。

for (i=1; i<adressdaten.length-1; i++)  {
//Save array-data in String to pass to the Geocoder
var adresse = adressdaten[i][3] + " " + adressdaten[i][4];
var coordinates;
var geocoder = new google.maps.Geocoder();
    geocoder.geocode( { 'address': adresse}, (function (coordinates, adresse) {
        return function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
               var latLong = results[0].geometry.location;
               coordinates = latLong.lat() + "," + latLong.lng();


        } else {
                alert('Geocode was not successful for the following reason: ' + status);
            }
        }
    })(coordinates, adresse));
    adressdaten[i][6] = coordinates;
}
4

1 に答える 1

1

これはFAQです。ジオコーディングは非同期です。結果をサーバーから返されたときに実行されるコールバック関数に保存する必要があります。

のようなもの(テストされていません)

関数クロージャを使用するように更新

function geocodeAddress(address, i) {
  geocoder.geocode( { 'address': address}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
       var latLong = results[0].geometry.location;
       coordinates = latLong.lat() + "," + latLong.lng();
       adressdaten[i][6] = coordinates;
    } else {
       alert('Geocode of '+address+' was not successful for the following reason: ' + status);
    }
  });
}

var geocoder = new google.maps.Geocoder();
for (i=1; i<adressdaten.length-1; i++)  {
  //Save array-data in String to pass to the Geocoder
  var adresse = adressdaten[i][3] + " " + adressdaten[i][4];
  var coordinates;
  geocodeAddress(addresse, i); 

}

于 2012-10-25T12:12:14.233 に答える