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

Get address out of a Reverse Geocoded callback

本文关键字:回调 获取 地址 编码      更新时间:2023-09-26

我一直在做一个小型的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'

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

是的,但问题是你以后不想得到它。您正在尝试立即获得它。

让我解释一下。与JavaScript中常见的一样,geocoder.geocode异步的。这意味着它做了一些工作,当工作完成时,它会调用回调,但这里有一个问题:它会立即返回。这意味着当您在最后一行执行alert(address)时,geocoder.geocode仍在工作,您的回调尚未被调用,并且尚未设置address

解决方案是在回调中使用address,或者(为了组织起见(定义一个函数,从回调中调用该函数以执行后续工作。