等待getCurrentPosition达到准确度阈值

时间:2011-06-07 12:15:18

标签: javascript iphone google-maps geolocation iphone-web-app

查看网络地理位置API documentation有两种获取位置的方法 - getCurrentPosition可以快速阅读位置,watchPosition可以监控位置的变化。

我正在寻找的是一种尽可能快地获得非常准确的位置读数的方法。我认为理想的做法是在getCurrentPosition调用时使用精度阈值 - 当达到阈值或超出超时时(将尽可能准确地得到结果),将调用成功处理程序。

这还不存在,对吗?据推测,通过将watchPosition方法包装在超时或达到阈值后停止检查来实现它是相当简单的。如果没有人知道内置方法来执行此操作,我将使用此方法(并打算发布代码)...

2 个答案:

答案 0 :(得分:3)

没有内置功能。我发现超时比设定精度更好。在iPhone上,通常情况下,准确度不会超过100米左右,因此继续检查更好是浪费。使用watchPosition()效果最好,似乎是三角测量,因此在三次阅读后很少会变好。我等了五秒钟才停下来。

演示:http://jsfiddle.net/ThinkingStiff/3k859/

HTML:

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

脚本:

function setGeolocation() {

    var geolocation = window.navigator.geolocation.watchPosition( function ( position ) {

            document.getElementById( 'result' ).innerHTML += 
                  'lat: ' + position.coords.latitude + ', '
                + 'lng: ' + position.coords.longitude + ', '
                + 'accuracy: ' + position.coords.accuracy + '<br />';

        },
        function () {
            //error
        },
        {
            maximumAge: 250, 
            enableHighAccuracy: true
        } 

    );

    window.setTimeout( function () {

        window.navigator.geolocation.clearWatch( geolocation ) 

    }, 5000 );

};

setGeolocation();

答案 1 :(得分:2)

根据我为Taxi开发基于J2ME地理位置的应用程序的经验,GPS芯片需要进行一些初始化以获得准确的位置读取。首选方法是使用类似于watchPosition()的方法,这将使GPS芯片保持热点以提供准确的位置读取。

我认为你的方法在理论上是合理的,但它需要在真实设备上进行测试,因为GPS芯片在各种设备上的性能各不相同。

希望这会有所帮助。