我是Javascript的新手。我尝试使用Google api的Gmap v3来实现反向地理编码。我已经阅读了很多教程并编写了一个简单的代码。问题是传递给geocoder.geocode()的匿名函数有时会起作用,但有时它不会。谢谢你的帮助!
function geoCode(latStr,lngStr){
var lat = parseFloat(latStr);
var lng = parseFloat(lngStr);
var latlng = new google.maps.LatLng(lat, lng);
codeLatLng(latlng,function(addr){
alert(addr); // sometimes message appears.
});
}
function codeLatLng(latlng,callback) {
if (geocoder) {
geocoder.geocode({'latLng': latlng}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[1]) {
callback(results[1].formatted_address);
} else {
alert("No results found");
}
} else {
alert("Geocoder failed due to: " + status);
}
});
}
}
答案 0 :(得分:0)
我不确定Google服务是返回null
还是空数组,但为了安全起见,您可以使用:if (results && results.length > )
进行检查。另外,你是否忘记了Javascript中的数组是从零开始的?您可能需要results[0]
:
if (results && results.length > 0) {
callback(results[0].formatted_address);
} else {
alert("No results found");
}
作为解释:如果“results”是一个长度为0或1的数组,你的代码会在if (results[1])
上崩溃,因此我猜测是间歇性的失败。
答案 1 :(得分:0)
var geocoder = new google.maps.Geocoder();
geocoder.geocode({
'latLng' : position
}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[1]) {
address = results[1].formatted_address;
// alert("Wow ! Got it");
} else {
// alert("No results
// found");
infowindow.setContent("No address found");
}
} else {
// alert("Geocoder failed due
// to: " + status);
infowindow.setContent("Geocoder failed due to: " + status);
}
infowindow.setContent(address + '<br/>' + Timestamp);
});
infowindow.open(marker.get('map'), marker, this);
currentInfoWindow = infowindow;
});
}
尝试使用上面的代码