我一直在尝试使用一些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对象也没有被返回
我该怎么做才能返回位置的纬度/长度以便我可以存储在我的数据库中?
答案 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)
我努力奋斗,发现以下工作。
循环通过对象并推入新数组:
var newArray = [];
for (var key in latLng) {
newArray.push(key);
}
使用方括号语法,点符号分隔符调用具有变量值的对象:
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');