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

时间:2012-01-10 16:53:34

标签: javascript jquery google-maps-api-3 geocoding

我一直在尝试使用一些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对象也没有被返回

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

5 个答案:

答案 0 :(得分: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)}

答案 1 :(得分: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);
    });
}

答案 2 :(得分:2)

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

  1. 循环通过对象并推入新数组:

    var newArray = [];
    
    for (var key in latLng) {
    
       newArray.push(key);
    
    }
    
  2. 使用方括号语法,点符号分隔符调用具有变量值的对象:

    var lat = latLng[newArray[0]];
    
    var lng = latLng[newArray[1]];
    

答案 3 :(得分:0)

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

  var latitude=place.geometry.location['k'];
  var longitude=place.geometry.location['A'];

答案 4 :(得分:0)

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');