使用 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 向后兼容性 [重复]