从反向地理编码回调中获取地址

时间:2014-12-18 17:46:31

标签: javascript google-maps google-maps-api-3 callback reverse-geocoding

我一直在开展一个小型的javascript项目,该项目将坐标存储在xml / kml文件中,并将其显示在自定义的Google Maps应用程序中。除了反向地理编码外,我的一切都按照我想要的方式工作。当我在回调函数中运行代码时,我能够显示格式化的地址,但是我找不到存储地址供以后使用的方法(用于动态事件,例如当用户显示完整地址)点击标记。)

有没有办法将地址存储在回调函数中,然后再获取它?每当我尝试时,它都说地址是不确定的。见下文:

var address;
var geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(lat, lng);

geocoder.geocode({'latLng': latlng}, function (results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
        if (results[1]) {
            address = results[1].formatted_address;
            alert(address); // this displays correctly
        }
        else {
            alert("No results found");
        }
    }
    else {
        alert("Geocoder failed due to: " + status);}
    }
);

alert(address); // this displays 'undefined'

1 个答案:

答案 0 :(得分:1)

  

有没有办法将地址存储在回调函数中,然后再获取它?

是的,但问题是你以后不想尝试。你试图立刻得到它。

让我解释一下。正如JavaScript中常见的那样,geocoder.geocode异步。这意味着它做了一些工作,并且当工作完成时它调用回调,但这里是catch:它立即返回。这意味着,当您在最后一行alert(address)时,geocoder.geocode仍然有效,您的回调尚未调用,而address尚未设置。

解决方案是在回调中使用address,或者(出于组织的考虑)定义一个函数,您可以在回调中调用该函数来执行后续工作。

相关问题