geolocation.watchPosition breaks geolocation.getCurrentPosition - PullRequest
8 голосов
/ 04 января 2012

Я работаю над веб-приложением с Google Maps и использую getCurrentPosition(), чтобы получить позицию пользователя. Это хорошо работает, но мне нужно отслеживать положение пользователя с течением времени.

Для этого я намеревался использовать watchPosition(). В соответствии со ссылкой API Ссылка API он должен немедленно выполнить сбор данных и выполнить обратный вызов, но это не так. Вместо этого он зависает, и я больше не могу использовать getCurrentPosition(). Я искал причину этого и не могу понять, почему так себя ведет. Я использую последнюю версию Chrome для Linux Mint "Lisa".

1 Ответ

14 голосов
/ 04 января 2012

На мобильном устройстве .getCurrentPosition() очень неточно. Использование .watchPosition() более точно, но для получения лучшего результата требуется около пяти секунд. После этого он расходует заряд батареи, чтобы поддерживать его активным.

Проверяет позицию каждые 15 секунд, используя .watchPosition(), и останавливает проверку через пять секунд, используя .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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...