最大 10 個の住所をジオコーディングし、マップにマーカーを追加することができましたが、ジオコード (codeAddress) 関数の外でジオコードの結果にアクセスする必要があります。結果をグローバル変数配列 (userLat、userLng) にプッシュできると考えました。アラートを使用すると、ループによって実際に結果が関数内の配列に追加されますが、配列は関数の外では値がありません。
ちなみに、失敗したジオコーディングのアラートは、問題があった住所に応じて住所「i」を返す必要がありますが、ループの最後の住所値のみを表示します。
多分問題は関連していますか?ネストされた関数の理解不足と関係があるのではないかと思います。
これが明確であることを願っています。助けてくれてありがとう!
function codeAddress() {
var useradd = [];
var geocoder = new google.maps.Geocoder();
var howmany = parseFloat(document.getElementById("howmany").value);
for (var i=0; i<howmany; i++) {
useradd[i] = document.getElementById('address['+i+']').value;
geocoder.geocode( {address: useradd[i]}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
userLat.push(parseFloat(results[0].geometry.location.lat()));
userLng.push(parseFloat(results[0].geometry.location.lng()));
var marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location
});
}
else {
alert('Address ' + i + ' was not successfully located for the following reason: ' + status);
}
});
};
}
編集:
正しく理解できたかどうかはわかりませんが、コールバック関数を抽出し、ジオコーダーによって呼び出される新しい関数を作成しました。ただし、問題は同じで、変数 userLat と userLng はループの外に持ち出されません。助言がありますか?
関数コードアドレス() {
function callBack() {
return function(results, status){
if (status == google.maps.GeocoderStatus.OK) {
userLat.push(parseFloat(results[0].geometry.location.lat()));
userLng.push(parseFloat(results[0].geometry.location.lng()));
var marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location
});
}
else {
alert('Address ' + i + ' was not successfully located for the following reason: ' + status);
}
}
}
var userLat = [];
var userLng = [];
var useradd = [];
var geocoder = new google.maps.Geocoder();
var howmany = parseFloat(document.getElementById("howmany").value);
for (var i=0; i<howmany; i++) {
useradd[i] = document.getElementById('address['+i+']').value;
geocoder.geocode({address: useradd[i]}, callBack());
};
}