0

我的问题: 需要从我的移动浏览器(使用 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.';
    }
4

2 回答 2

2

我有解决方案来获得最准确的地理位置。您需要在给定超时后调用 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) {
于 2012-08-05T22:50:18.810 回答
0

GPS 无线电可能在第一页加载时未打开。为了让收音机有时间打开,您可能需要读取一个位置来启动 GPS,丢弃第一个位置结果,等待几秒钟让 GPS 收音机预热并找到足够的卫星以获得良好的位置定位,然后在定时异步回调函数中再次读取位置。

于 2012-06-20T21:05:04.980 回答