Google geocoder.geocode,异步变量映射

时间:2013-03-06 11:27:34

标签: javascript google-maps-api-3 asynchronous google-geocoder google-geocoding-api

我有以下地理编码异步方法,它按预期工作从我自己的自定义对象数据中获取地址,我的问题是将结果映射回对象[i],该方法触发了该方法,仅查看结果给我一个格式化的地址,与我输入的地址不同,“Google添加了一些区号,将St更改为街道等”。因此,当我得到这些结果时,我无法匹配由于此方法的异步性质而导致的每个对象的新Lat和Lng坐标,并且结果不按顺序返回,任何想法是我在这里可以做什么的?

感谢。

编辑:我的想法是创建一种方法来将结果按顺序恢复,将其更改为Synchronous,不太理想我知道,我找不到任何示例。

function iterateAndAddress(objArray){

    for(var i=0; i< objArray.length; i++) {

        var address = objArray[i].BillingStreet +' '+objArray[i].BillingCity+' '+objArray[i].BillingCountry;
        var geocoder = new google.maps.Geocoder();
        console.log('Address = '+address);

        if(geocoder) {
            geocoder.geocode( { 'address': address}, function(results, status) { 

                if (status == google.maps.GeocoderStatus.OK) {

                    //console.log(results);
                    var lat = results[0].geometry.location.lat();
                    var lon = results[0].geometry.location.lng();  
                    console.log('Address : '+results[0].formatted_address);


                }else if(status == 'OVER_QUERY_LIMIT') {

                }
                else{

                }
            });  
         }  

    }  
}

1 个答案:

答案 0 :(得分:0)

将一个id扔进混音中。除了返回数据之外,还要返回id并将信息绑定完毕并进行扫描。

... 修改

好的,所以你是从一个对象数组发出请求的。那个数组有id键吗?如果是这样,那么返回lat和long也会返回id。

var id = objArray[i].id
var lat = results[0].geometry.location.lat();
var lon = results[0].geometry.location.lng();

或者您正在使用的任何ID键。

返回数组(或对象,如)

可能更好
result[i].lat = results[0].geometry.location.lat();
result[i].lon = results[0].geometry.location.lng();

只要您知道我与之相关的记录,那么您就拥有了比较点。

我必须承认,我一定错过了当前方法的异步(单词?)。