navigator.geolocation.watchPosition只是不起作用

时间:2012-11-28 17:48:57

标签: javascript geolocation w3c-geolocation

好的,我的代码在下面,所以我会解释我在做什么以及我得到的结果。

我正在尝试使用navigator.geolocation.watchPosition获取用户位置。我已经指定了成功和错误回调。我第一次得到这个位置通常是非常不准确所以我使用watchPosition继续获取位置,直到它尝试了4次或者得到一个精确到500米以内的位置。

我遇到的问题:

  • 它永远不会进入android的错误回调(在HTC上测试 感觉和三星Galaxy 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;
            }
        }
    }

1 个答案:

答案 0 :(得分:2)

我建议使用:

进行检查
if (typeof navigator.geolocation === 'object' && typeof navigator.geolocation.watchPosition === 'function') {
    ...
}

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

Maby它没有触发,因为位置仍然相同? ^^

尝试使用Geolocation.getCurrentPosition()和Interval或Webworker调试它:https://developer.mozilla.org/en-US/docs/Web/API/Geolocation

祝你好运