如何将此地理编码请求分配给变量?

时间:2011-11-14 07:19:56

标签: javascript google-maps

我正在尝试使用Google地图地理编码将此地址字符串转换为LatLng对象。我相信因为它是一个异步调用,所以latlng被赋值为null。我可以做些什么来使变量赋值按我想要的方式工作?

var latlng = codeAddress(address)
alert("Lat/lng is: " + latlng);

function codeAddress(address) {
      geocoder.geocode( {'address':address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
          return results[0].geometry.location;
        } else {
          alert("Geocode failed due to: " + status);
        }
      }); 
    }

1 个答案:

答案 0 :(得分:3)

由于geocode()是异步的,正如您所提到的,因此无法同步调用它。因此,var latlng = codeAddress(address); 不可能。您需要在函数本身内使用地理编码的结果。考虑:

var latlng = null;
function codeAddress(address) {
      geocoder.geocode( {'address':address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
          latlng = results[0].geometry.location; // use latlng here ..., e.g.:
          alert("Lat/lng is: " + latlng);
        } else {
          alert("Geocode failed due to: " + status);
        }
      }); 
    }

调用codeAddress(address)分配给全局变量latlng。但是,问题在于您不知道分配何时发生。在上述情况下,只有在出现警告框后才会知道。

一般方法是在回调中处理地理编码的结果,例如使用结果填充HTML字段。