好的,我的代码在下面,因此我将解释我在做什么以及为获得结果而得到的东西。

我正在尝试使用navigator.geolocation.watchPosition来获取用户位置。我已经指定了成功和错误回调。第一次获得该位置通常是非常不准确的,因此我使用watchPosition来保持该位置,直到尝试4次或获得的位置精确到500米以内为止。

我遇到的问题:

  • 它永远不会输入android的错误回调(在HTC上测试
    感觉和三星银河S3)。但是,在iPhone上,
    输入错误回调的时间超过50%。
  • 它也永远不会超时。它一直在搜索,直到收到一个
    地点。
  • 检索位置需要0-60秒之间的任何时间。有时它在页面加载完成之前就已经拥有了,而其他时候则需要一分钟的时间。关于为什么有时有时很快,而为什么其他时候没有很快,也没有可辨别的模式。

  • 我搜索了很多论坛帖子和很多stackoverflow问题,以及地理位置规范和其他文档。关于它的信息不是很多,更不用说这些问题了。我做错了吗?还是这仅仅是与地理位置合作的本质?
    if(navigator.geolocation){
            var geo_count = 0;
    
            var wpid = navigator.geolocation.watchPosition(success, error, {
                enableHighAccuracy: true,
                maximumAge: 0,
                timeout: 10000
            });
    
            function success(position){
                alert(position.coords.accuracy)
    
                geo_count = geo_count + 1;
    
                if(position.coords.latitude && position.coords.longitude && position.coords.accuracy < 500){
                    navigator.geolocation.clearWatch(wpid);
    
                    alert('position obtained!');
                }
                else if(geo_count > 4){
                    navigator.geolocation.clearWatch(wpid);
    
                    alert('inaccurate position obtained');
                }
            }
    
            function error(error){
                switch(error.code){
                    case 1:
                        alert('permission denied');
                        break;
                    case 2:
                        alert('position unavailable');
                        break;
                    case 3:
                        alert('timeout');
                        break;
                    default:
                        alert('unknown error');
                        break;
                }
            }
        }
    

    最佳答案

    我建议使用以下方法进行检查:

    if (typeof navigator.geolocation === 'object' && typeof navigator.geolocation.watchPosition === 'function') {
        ...
    }
    

    “Geolocation.watchPosition()方法用于注册一个处理程序函数,该函数将在每次设备的位置更改时自动调用。您还可以选择指定一个错误处理回调函数。”

    Maby不会触发,因为位置仍然相同? ^^

    尝试使用带有Interval或Webworker的Geolocation.getCurrentPosition()对其进行调试:https://developer.mozilla.org/en-US/docs/Web/API/Geolocation

    祝你好运

    关于javascript - navigator.geolocation.watchPosition不能正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13611316/

    10-12 02:35