科尔多瓦地理定位精度上限为10米

时间:2018-03-18 13:36:42

标签: android cordova geolocation cordova-plugins

更新:这是Google Play服务问题,内部报告here,将从版本13.4.0修复

我们使用cordova gelocation plugin和方法navigator.geolocation.watchPosition()以及enableHighAccuracy: true选项来跟踪用户位置并获得最准确的结果。

我们的应用程序已存在超过1年,我们曾经没有任何问题,任何设备获得非常好的位置准确性,外面4/6米,天空晴朗。

最近,我们的许多用户报告说,无论他们做什么,都无法获得低于10米精度的任何内容。

我们决定自己测试,我们发现有同样的问题。最初,我们认为我们在最新版本中引入了一些错误,我们对所有内容进行了三重检查,但我们没有对涉及地理位置的代码/依赖项进行任何更改。

我们也测试了我们应用程序的旧版本,我们确信它可以达到4米精度,但令人惊讶的是它们也无法正常工作,精度上限为10米。

我们尝试了不同版本的Android,我们可以在5(Lollipop)到8(Oreo)的任何平台上重现这个问题。我们在iOS 10/11上也有同样的问题。同样,我们还没有在几个月内更新应用程序。

最近有一个关于同一问题的问题here

使用Android原生代码here

,其他人遇到了同样的问题

有谁知道发生了什么事?这是一个许可问题吗?定位服务也设置为高准确度。

为了完整起见,我们可以使用此plugin

的旧版本(2.x)获得3/4米的准确度

这是唯一的出路吗?

我们宁愿不为开箱即用的东西引入额外的依赖。

非常感谢

2 个答案:

答案 0 :(得分:4)

查看源代码:

旧插件(2.x)Source

  watchPosition: function(success, error, args) {
    var win = function() {
        var geo = cordova.require('cordova/modulemapper').getOriginalSymbol(window, 'navigator.geolocation');
        geo.watchPosition(success, error, {
            enableHighAccuracy: args[1]
        });
    };
    exec(win, error, "Geolocation", "getPermission", []);
},

新插件(主)Source

watchPosition: function(success, error, args) {
    var pluginWatchId = utils.createUUID();

    var win = function() {
        var geo = cordova.require('cordova/modulemapper').getOriginalSymbol(window, 'navigator.geolocation');
        pluginToNativeWatchMap[pluginWatchId] = geo.watchPosition(success, error, args);
    };

    var fail = function() {
        if (error) {
            error(new PositionError(PositionError.PERMISSION_DENIED, 'Illegal Access'));
        }
    };
    exec(win, fail, "Geolocation", "getPermission", []);

    return pluginWatchId;
},

在OLD插件代码 enableHighAccuracy 是由(arg1 of array)设置的布尔值。

使用新版插件,您需要将arg作为JSON传递,并设置该标志: {enableHighAccuracy:true} 以重现对 geo.watchPosition 功能的同一调用精度。

旧方式:

navigator.geolocation.watchPosition(geolocationSuccess,
                                                  geolocationError,
                                                  [false,true]);

新方式:

navigator.geolocation.watchPosition(geolocationSuccess,
                                                  geolocationError,
                                                  { enableHighAccuracy: true });

答案 1 :(得分:1)

它可能引起关注,这是一个Google Play服务问题,内部报告here,它将从13.4.0版开始修复

更新:更新至Play Services 14.3.66后解决,精度再次降至4m!