2012-01-03 45 views
8

我正在使用谷歌地图和使用getCurrentPosition()来获取用户位置的Web应用程序。这工作正常,但我需要跟踪用户的位置随着时间的推移。geolocation.watchPosition打破geolocation.getCurrentPosition

为此,我打算使用watchPosition()。根据API参考API reference,它必须立即执行数据采集并执行回调,但事实并非如此。相反它冻结,我不能再使用getCurrentPosition()。我一直在寻找原因,我不知道为什么这样做。我正在使用最新的Chrome for Linux Mint“Lisa”。

回答

14

在移动设备上,.getCurrentPosition()非常不准确。使用.watchPosition()更准确,但需要大约五秒钟才能获得最佳读数。之后,浪费电池保持活动状态。

这会使用.watchPosition()每15秒检查一次位置,并在使用.clearWatch()五秒钟后停止检查。

演示:https://jsfiddle.net/ThinkingStiff/phabq6r3/

脚本:

var latitude, longitude, accuracy; 

function setGeolocation() { 
    var geolocation = window.navigator.geolocation.watchPosition( 
     function (position) { 
      latitude = position.coords.latitude; 
      longitude = position.coords.longitude; 
      accuracy = position.coords.accuracy; 
      document.getElementById('result').innerHTML += 
        'lat: ' + latitude + ', ' 
       + 'lng: ' + longitude + ', ' 
       + 'accuracy: ' + accuracy + '<br />'; 
     }, 
     function() { /*error*/ }, { 
      maximumAge: 250, 
      enableHighAccuracy: true 
     } 
    ); 

    window.setTimeout(function() { 
      window.navigator.geolocation.clearWatch(geolocation) 
     }, 
     5000 //stop checking after 5 seconds 
    ); 
}; 

setGeolocation(); 

window.setInterval(function() { 
     setGeolocation(); 
    }, 
    15000 //check every 15 seconds 
); 

HTML:

<div id="result"></div> 
+0

我会尝试感谢花花公子 – 2012-01-17 00:09:15

+5

这个脚本是完全荒谬的。 watchPosition在脚本加载时被调用,15秒后第二次没有理由。当然,setTimeout不会每15秒调用一次setGeolocation,而且您不必。如果用户的位置实际发生变化,给watchPosition的第一个函数将得到回调。 5秒后调用clearWatch也毫无意义。 – user414873 2012-12-26 08:58:29

+1

@ user414873'getPosition()'本身在移动设备上非常不准确。如果你每15秒调用一次,你得到的每一个结果都是不准确的。 'watchPosition()'可以在三次尝试(大约5秒)内更准确。之后,它只是在浪费电池。 'clearWatch()'把它关掉,直到你准备好再次追踪。这是在移动设备上进行跟踪的最佳方法。 – ThinkingStiff 2012-12-26 09:03:18