在多地理编码中将标记与适当的请求相关联

时间:2015-03-07 09:04:42

标签: google-maps google-maps-api-3 geocoding

我有一个javascript元素数组。每个元素都包含address和唯一id

var elements = 
[
    {
      id: 1, 
      address: "address1"
    },

    {
      id: 2, 
      address: "address2"
    }
];

元素地址经过地理编码,结果标记显示在Google地图中,如this post所示。

for (var i = 0; i < elements.length; i++) {
    $.getJSON('http://maps.googleapis.com/maps/api/geocode/json?address='+elements[i].address+'&sensor=false', null, function (data) {
        // add marker to map
        console.log(data.results[0]);
    });
}

现在我的目标是将每个标记与正确的请求相关联。例如,假设第一个地理编码(id=1)导致标记位于(lat: 15.0526206, lng: 19.6929845)。我想找到一种方法将此标记与id=1元素相关联。

我已尝试记录数据结果(请参阅上面的代码段),但遗憾的是它无效(formatted_address与原始元素address类似,但格式不同,因此字符串比较不可行)。我该怎么办?

1 个答案:

答案 0 :(得分:1)

您需要创建closures

for (var i = 0; i < elements.length; i++) {
    $.getJSON('http://maps.googleapis.com/maps/api/geocode/json?address=' +
               encodeURIComponent(elements[i].address), 
               null, 
              (function(element){
                return function(data){
                console.log(element.id,data.results[0]);
                }  
              }(elements[i])));
}

但是对于客户端地理编码请求,您应该使用javascript-API的方法(请求Web服务可能会失败,因为无法保证将发送相应的标头)

var geocoder=new google.maps.Geocoder();  
for (var i = 0; i < elements.length; i++) {
    geocoder.geocode({address:elements[i].address}, 
    (function(element){
      return function(data){
        console.log(element.id,data[0]);
      }  
    }(elements[i])));
}