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

1

听起来你的意思是你想做类似的事情......

// create a closure to capture the index
function callback(index){
    return function(data) {
        objecto[index].lat = data.results[0].geometry.location.lat;
        objecto[index].lon = data.results[0].geometry.location.lng;
    }
}

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(callback(i));
}
于 2013-05-22T17:09:08.483 回答
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]objecto[index]引用,使用一个简单的place变量来替换它们。

我发现这种方法比返回函数的函数更容易理解。

objecto与地理编码相关的其他评论:您的阵列中是否会有更多的位置?如果超过几个,您将需要减慢地理编码请求,而不是连续触发它们。

此外,如果这些是固定位置,您应该对它们进行一次地理编码并将纬度/经度存储在您的数组中,因此您根本不必在浏览器中对它们进行地理编码。这将使您的地图加载速度更快,并避免地理编码多个地址的问题。

于 2013-05-22T17:41:13.203 回答