移动地理定位要求两个负载准确

时间:2012-06-20 16:07:56

标签: iphone mobile geolocation

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

2 个答案:

答案 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无线电升温并找到足够的卫星来获得良好的定位,然后在定时异步回调函数中再次读取该位置。