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

Associate marker with proper request in multiple 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 相似但格式不同,所以字符串比较是不可行)。我该怎么办?

您需要创建 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])));
}

但是对于客户端geocode-requests你应该使用javascript-API的方法(请求网络服务可能会失败,因为不能保证会发送适当的headers)

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])));
}