使用 google.maps.geocoder 检索位置的纬度/经度

Posted

技术标签:

【中文标题】使用 google.maps.geocoder 检索位置的纬度/经度【英文标题】:retrieving lat/long of location using google.maps.geocoder 【发布时间】:2012-02-07 02:13:47 【问题描述】:

我一直在尝试使用一些 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 中调试和设置断点时,它首先在返回结果上中断,然后在 result[lat] = results[0].geometry.location.Pa; 上中断。

我知道数组应该声明为数组类型,但即使我只是返回 results[0].geometry.location 对象,也没有返回任何内容

我可以做些什么来返回位置的纬度/经度以便我可以存储在我的数据库中?

【问题讨论】:

Google Places API why does it returns Lat and Lon under a different variable each time? 的可能重复项 【参考方案1】:

这不是答案,但不要使用 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)

【讨论】:

为了让这个答案更加清晰:谷歌地图的地理编码器有时会返回 lat 和 lng 值作为 Pa 和 QA,其他时候是 Sa 和 Ta...唯一有保证的方法是使用 geometry.location .lat() 和 geometry.location.lng()【参考方案2】:

您面临的问题是您将 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);
    );

【讨论】:

感谢 - 我使用 javascript 来验证地址,然后将其发布到服务器并使用 http 请求获取地理代码信息。可能会进一步重构 正如 Lee Smith 所说,不要使用结果的内部字段。我只是使用这些,因为 OP 这样做了。 Google 经常更改内部变量名称,因此您不能依赖它们。使用 API。 查看 Lee Smith 的回答...改用 geometry.location.lat() 和 geometry.location.lng() 函数。【参考方案3】:

我为此苦苦挣扎,发现以下方法可行。

    循环遍历对象并推入一个新数组:

    var newArray = [];
    
    for (var key in latLng) 
    
       newArray.push(key);
    
    
    

    使用方括号语法调用带有变量值的对象,点符号中断:

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

【讨论】:

【参考方案4】:
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'); 

【讨论】:

你能找到更多答案吗? 能否请您对您的代码进行一些解释?【参考方案5】:

在我的例子中,从地点对象获取纬度和经度的最简单解决方案是:

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

【讨论】:

以上是关于使用 google.maps.geocoder 检索位置的纬度/经度的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Google Maps geocoder.getLatLng() 并将其结果存储在数据库中?

Google map v3 Geocoder 向后兼容性 [重复]

从谷歌地图的地理位置获取邮政编码

谷歌地理编码 - 通过“ENTER”键提交地址时功能不起作用

秒表检定仪和瞬时日差检定仪使用介绍

OpenCV2马拉松第17圈——边缘检測(Canny边缘检測)