我的问题: 它需要从我的移动浏览器(使用iphone测试)加载两页才能获得准确的结果。第一次加载将关闭半英里或更多,然后第二次加载将非常接近。
我的问题: 需要做些什么才能在第一次加载时获得准确的位置?
额外信息:
我已阅读http://www.w3.org/TR/geolocation-API/并正在利用带有enableHighAccuracy的watchPosition。我也使用maximumAge:0并且未设置超时。
来自http://www.w3.org/TR/geolocation-API/
如果maximumAge设置为0,则实现必须立即尝试获取新的位置对象
用于超时属性的默认值是Infinity
我的代码列在下面
// Try HTML5 geolocation
if(navigator.geolocation) {
// updated this with watchPosition rather than getCurrentPosition
navigator.geolocation.getCurrentPosition(function(position) {
var pos = new google.maps.LatLng(position.coords.latitude,
position.coords.longitude);
var infowindow = new google.maps.InfoWindow({
map: map,
position: pos,
content: 'Location found using HTML5.'
});
map.setCenter(pos);
}, function() {
handleNoGeolocation(true);
},
// enable high accuracy
// {maximumAge:100, timeout:5000, enableHighAccuracy: true}
//
{maximumAge:0, enableHighAccuracy: true}
);
} else {
// Browser doesn't support Geolocation
handleNoGeolocation(false);
}
}
function handleNoGeolocation(errorFlag) {
if (errorFlag) {
var content = 'Error: The Geolocation service failed.';
} else {
var content = 'Error: Your browser doesn\'t support geolocation.';
}
答案 0 :(得分:1)
我有解决方案来获得最准确的地理位置。您需要在给定的超时后调用clearWatch()。超时可能是时间和/或表单点击等事件。
在我的应用程序中,我使用5秒超时并单击表单元素。
这是所有有用的代码片段。
设置onclick
<select onclick="aFormClick()" id="location"
在函数中设置超时,该函数是watchPosition函数的父级
setTimeout("stopWatchPosition()",5000);
创建一个侦听表单的函数点击
function aFormClick(){
stopWatchPosition();
}
创建调用clearnWatch()
的函数function stopWatchPosition(){
if (clearWatchCalled == 0){
navigator.geolocation.clearWatch(watchID);
clearWatchCalled++;
}
}
确保您的watchPosition可以通过ID
引用watchID = navigator.geolocation.watchPosition(function(position) {
答案 1 :(得分:0)
首次加载页面时,GPS无线电可能未开启。为了让无线电时间开启,你可能想要读取一个位置来启动GPS,抛出第一个位置结果,等待一些秒钟让GPS无线电升温并找到足够的卫星来获得良好的定位,然后在定时异步回调函数中再次读取该位置。