【发布时间】:2013-01-16 13:24:27
【问题描述】:
我正在尝试通过 html5 geolcation api 获取用户的地理位置,我使用以下 sn-p:
if (navigator.geolocation) {
var timeoutVal = 10 * 1000 * 1000;
navigator.geolocation.getCurrentPosition(
displayPosition,
displayError,
{ enableHighAccuracy: true, timeout: timeoutVal, maximumAge: 0 }
);
}
else {
// DO SOME STUFF HERE
}
function displayPosition(position) {
// configuration
var myZoom = 12;
var myMarkerIsDraggable = true;
var myCoordsLenght = 6;
var defaultLat = position.coords.latitude;
var defaultLng = position.coords.longitude;
document.getElementById('latitude').value = defaultLat;
document.getElementById('longitude').value = defaultLng;
/*
1. creates the map
2. zooms
3. centers the map
4. sets the map’s type
*/
var map = new google.maps.Map(document.getElementById('canvas'), {
zoom: myZoom,
center: new google.maps.LatLng(defaultLat, defaultLng),
mapTypeId: google.maps.MapTypeId.ROADMAP
});
});
// centers the map on markers coords
map.setCenter(myMarker.position);
// adds the marker on the map
myMarker.setMap(map);
}
function displayError(error) {
var errors = {
1: 'Permission denied',
2: 'Position unavailable',
3: 'Request timeout'
};
alert("Error: " + errors[error.code]);
}
});
上述方法的问题在于,很少有用户发现它难以使用。少数情况下,他们点击了 Deny 而不是 Allow 并一直盯着屏幕。所以从可用性的角度来看,我认为一个好的方法是:
请求他们的许可。
等待 3 秒,如果他们点击拒绝或没有响应,请使用 IP 在地图上显示地理定位。
如何完成上述 sn-ps 中的第二步。 请让我知道,谢谢! 但是,有什么更好的处理方式
【问题讨论】:
-
当用户单击拒绝或请求超时时,您的错误处理程序 (
displayError()) 是否未被调用?如果它正在被调用(应该如此),那么您需要在此处执行第二步(使用用户的 IP 进行地理定位)。
标签: javascript html google-maps geolocation ip-geolocation