阅读这个标题可能会令人感到困惑......我同意。
所以我有一个地址,我想在Google地图上显示。我没有lat / long,所以我需要调用Google Maps API提供的Geocoder服务。
当我请求lat / long获取地址时,服务返回一个合法的值,但是当在地理编码函数的最后一行单步执行javascript时,代码将进入geocoder.js缩小的代码,从不返回(没有成功的结果,没有例外)。
我已经对使用Google Maps API进行了大量研究,据我所知,我已经完全实现了示例的显示方式。我在哪里错了?
这是调用lat / long服务的javascript代码:
function getLatLong(street, city, state, zip) {
var geocoder = new google.maps.Geocoder();
var address = street && street.length > 0 ? street + ' ' : '';
address += city && city.length > 0 ? city + ', ' : '';
address += state && state.length > 0 ? state + ' ' : '';
address += zip && zip.length > 0 ? zip : '';
var latLong = {
lat: 0.0,
long: 0.0
};
try {
geocoder.geocode({ 'address' : address }, function(results, status) {
if (status === google.maps.GeocoderStatus.OK) {
return {
lat: results[0].geometry.location.lat(),
long: results[0].geometry.location.lng()
};
} else {
return latLong;
}
});
} catch (exception) {
alert(e.message);
}
}
(如果您不想在上面的代码中的catch
上方的某个位置上执行此操作,那么就会丢失"
如果你想看到它的实际效果并自行完成,请访问以下网址:http://golfproxy.com/course/list
编辑:如果有帮助,这里添加地图和标记的功能,调用上面的getLatLong函数:
function plotMapHardCodePos(position) {
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 9,
center: position
});
$.each(tournaments.Result, function (i, item) {
var latLong = {};
if (!item.Latitude || !item.Longitude) {
latLong = getLatLong(item.Street, item.City, item.State, item.ZipCode);
if (latLong) {
item.Latitude = latLong.lat;
item.Longitude = latLong.long;
}
}
if (!(item.Latitude === 0.0 && item.Longitude === 0.0)) {
var marker = new google.maps.Marker({
position: new google.maps.LatLng(item.Latitude, item.Longitude),
map: map
});
marker.setIcon('http://maps.google.com/mapfiles/ms/icons/blue-dot.png');
var infoWindow = new google.maps.InfoWindow({
content: "<div class=''><h4><a href=\"#\">" + item.Name + "</a></h4></div><br/><span>" +
item.Body1 + "</span>" + "<br/><span>" + item.Body2 + "</span>"
});
google.maps.event.addListener(marker, 'click', function () {
infoWindow.open(map, marker);
});
}
});
}
答案 0 :(得分:0)
您无法从异步回调函数返回任何内容,您需要在可用/可用时使用回调函数中的数据