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

问题描述 投票:17回答:5

我一直在尝试使用一些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;
}

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

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

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

javascript jquery google-maps-api-3 geocoding
5个回答
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);
    });
}

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)}

2
投票

我努力奋斗,发现以下工作。

  1. 遍历对象并推入新数组: var newArray = []; for (var key in latLng) { newArray.push(key); }
  2. 使用方括号语法,点符号中断使用变量值调用对象: var lat = latLng[newArray[0]]; var lng = latLng[newArray[1]];

1
投票
function getLatLong(address) 
{
    var geocoder = new google.maps.Geocoder();
    var result = '';
    geocoder.geocode( { 'address': address }, function(results, status{
        if (status == google.maps.GeocoderStatus.OK) {
            // Call the lat/lng functions to return a computed value.
            result[lat] = results[0].geometry.location.lat();
            result[lng] = results[0].geometry.location.lng();
        } else {
            result = 'Unable to find address: ' + status;
        }
    });
    return result;
}

getLatLong('address'); 

0
投票

在我的情况下,从place对象获取纬度和经度的最简单的解决方案是:

  var latitude=place.geometry.location['k'];
  var longitude=place.geometry.location['A'];
© www.soinside.com 2019 - 2024. All rights reserved.