使用google.maps.geocoder检索lat/long的位置

Chr*_*abe 17 javascript jquery geocoding google-maps-api-3

我一直在尝试使用一些ajax来保存我的应用程序中的场所位置,并在堆栈溢出时偶然发现以下代码

function getLatLong(address) 
{
    var geocoder = new google.maps.Geocoder();
    var result = "";
    geocoder.geocode( { 'address': address, 'region': 'uk' }, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            result[lat] = results[0].geometry.location.Pa;
            result[lng] = results[0].geometry.location.Qa;
        } else {
            result = "Unable to find address: " + status;
        }
    });
    return result;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是当我调用函数时它什么也没有返回,当我调试并在chrome中设置断点时,它会在返回结果之前先破坏结果[lat] = results [0] .geometry.location.Pa;

我知道数组应该声明为类型数组,但即使我刚刚返回结果[0] .geometry.location对象也没有被返回

我该怎么做才能返回lat/long的位置,以便我可以存储在我的数据库中?

Lee*_*ith 20

这不是答案,但不要使用Pa和Qa总是使用lng()和lat()函数:

 place.geometry.location
{...}
    Pa: 56.240477
    Qa: -0.902655999999979
    toString: function(){return"("+this.lat()+", "+this.lng()+")"}
    equals: function(a){return!a?k:Cd(this.lat(),a.lat())&&Cd(this.lng(),a.lng())}
    lat: function(){return this[a]}
    lng: function(){return this[a]}
    toUrlValue: function(a){a=Hd(a)?a:6;return $d(this.lat(),a)+","+$d(this.lng(),a)}
Run Code Online (Sandbox Code Playgroud)

  • 为此答案添加更多清晰度:Google地图的地理编码器有时会将lat和lng值返回为Pa和QA,有时则为Sa和Ta ...唯一可靠的方法是使用geometry.location.lat()和geometry.location .lng() (14认同)

Ton*_*ler 16

您遇到的问题是您在执行返回结果之前将geocoder.geocode函数视为立即完成.真正发生的是触发geocoder.geocode,然后立即返回结果.由于异步结果很可能未返回,因此结果为空.将地理编码结果视为推动而非拉动.storeResult函数(未显示)是保存信息所需的任何代码.因为您要将结果与错误字符串组合在一起,所以您必须在storeResult函数中处理它.作为替代方案,您可以在结果中显示指示成功或失败的状态.

function getLatLong(address) {
var geocoder = new google.maps.Geocoder();
var result = "";
geocoder.geocode( { 'address': address, 'region': 'uk' }, function(results, status) {
     if (status == google.maps.GeocoderStatus.OK) {
         result[lat] = results[0].geometry.location.Pa;
         result[lng] = results[0].geometry.location.Qa;
     } else {
         result = "Unable to find address: " + status;
     }
     storeResult(result);
    });
}
Run Code Online (Sandbox Code Playgroud)

  • 请参阅Lee Smith的答案...使用geometry.location.lat()和geometry.location.lng()函数. (4认同)