在获得准确结果之前,如何运行Geolocation watchPosition?

时间:2016-10-11 21:43:58

标签: javascript jquery geolocation

我一直在使用地理位置navigator.geolocation.getCurrentPosition,但发现它不如navigator.geolocation.watchPosition准确。所以我的想法是让它运行navigator.geolocation.watchPosition,直到它获得<=100的准确度,然后显示位置,如果它在15秒内失败,则显示错误。

这是我得到的:

function getLocation() {
    if (navigator.geolocation) {
        var geo_options = {
            enableHighAccuracy: true,
            timeout: 15000,
            maximumAge: 0
        };
        var watchID = navigator.geolocation.watchPosition(
            showPosition,
            showError,
            geo_options
        );
    } else {
        // Error here. Geolocation disabled.
    }
}

function showPosition(position) {
    if (position.coords.accuracy > 100) {
        // Keep trying
    } else {
        // Fire up the map, we got a position!
        // Clear the watchID.
        navigator.geolocation.clearWatch(watchID);
    }
}

我的问题是,由于某些原因我无法清除watchID的成功因为它说它未定义。我猜那是因为功能在外面。

是否有一种简单的方法可以实现showPosition仅在准确度低于100时触发?现在showPosition随时被触发,因为它在watchPosition函数内。

1 个答案:

答案 0 :(得分:1)

那是因为watchID undefined。您已在getLocation范围内定义了该范围,但showPosition未与var watchID; function getLocation() { ... watchID = navigator.geolocation.watchPosition(showPosition, showError, geo_options); } function showPosition(position) { if (position.coords.accuracy <= 100) { navigator.geolocation.clearWatch(watchID); } } 共享范围。尝试在两者之外声明它。

'use strict';

function declareX() {
  var x = 1;
}

function useX() {
  console.log(x);
}

declareX();
useX();

专业提示:如果您的代码在strict mode中运行,则会提醒您出现此错误。

git config --global url."https://".insteadOf git://