1

だから私はグーグルマップAPIを使っています。オブジェクト内に lat と lon の値を挿入する必要がありますが、次のようなことはできません。

$.get(url).done(buscaGPS(data, i));

function buscaGPS(data, i) {

}

コード

objecto = [{
    "address_1": "Avenida da Republica, 15A",
    "city": "Lisbon",
    "country": "pt",
    "id": 1534282,
    "name": "Pastelaria Versailles"
}, {
    "address_1": "Avenida da Republica, 15A",
    "city": "Lisbon",
    "country": "pt",
    "id": 1534282,
    "name": "Pastelaria Versailles"
}];


for (var i = 0; i < objecto.length; i++) {
    var url = "http://maps.googleapis.com/maps/api/geocode/json?address=" + objecto[i].address_1 + "+" + objecto[i].city + "+" + objecto[i].country + "&sensor=false";
    $.get(url).done(buscaGPS);
};



function buscaGPS(data) {

    objecto[i].lat = data.results[0].geometry.location.lat;
    objecto[i].lon = data.results[0].geometry.location.lng;

}
4

2 に答える 2

0

Shanimal の解決策は完全に合理的ですが、関数を返す関数によってコードが少し複雑になります。クロージャーを取得するために実際には必要ありません。単純な関数呼び出しでうまくいきます。

この代替案を検討してください。

for( var i = 0;  i < objecto.length;  i++ ) {
    geocode( objecto[i] );
}

function geocode( place ) {
    var url =
        "http://maps.googleapis.com/maps/api/geocode/json?address=" +
        place.address_1 + "+" + place.city + "+" + place.country +
        "&sensor=false";
    $.get(url).done( function( data ) {
        var location = data.results[0].geometry.location;
        place.lat = location.lat;
        place.lon = location.lng;
    });
}

これにより、単純な変数を使用してすべてのobjecto[i]and参照も削除されることに注意してください。objecto[index]place

このアプローチは、関数を返す関数よりもはるかに理解しやすいと思います。

ジオコーディングに関するその他のコメント:objecto配列内の場所の数を増やしますか? 数が多い場合は、すべてのリクエストを連続して実行するのではなく、ジオコーディング リクエストの速度を落とす必要があります。

また、これらが固定された場所である場合は、それらを一度ジオコーディングして緯度/経度を配列に保存する必要があるため、ブラウザーでジオコーディングする必要はまったくありません。これにより、マップの読み込みが速くなり、複数の住所をジオコーディングする際の問題が回避されます。

于 2013-05-22T17:41:13.203 に答える