Ionic4 watchPosition 和 getCurrentPosition 的地理位置与 Ionic/Capacitor 不准确

Posted

技术标签:

【中文标题】Ionic4 watchPosition 和 getCurrentPosition 的地理位置与 Ionic/Capacitor 不准确【英文标题】:Ionic4 watchPosition and getCurrentPosition of Geolocation not accurate with Ionic/Capacitor 【发布时间】:2019-10-19 08:07:28 【问题描述】:

我正在使用 Capacitor 构建我的 Ionic 应用程序。 我当然想通过 GPS 在地图上显示当前位置的应用程序。

以下代码可以正常工作,并为我提供了我想要的地图上的正确标记,但是.. 它远非准确。

async getLocation() 
    var self = this;
    let location = await Geolocation.getCurrentPosition(
        enableHighAccuracy: true,
        timeout: 1000
    );
    self.marker.setLngLat([location.coords.longitude, location.coords.latitude])
    const wait = Geolocation.watchPosition(enableHighAccuracy: true, timeout: 1000, (position, err) => 
        self.marker.setLngLat([position.coords.longitude, position.coords.latitude])
    );

标记正在疯狂地四处走动。发生在我测试它的每个位置。它移动的不是厘米,而是我所在位置周围的米......

我错过了什么导致 GPS 坐标不太准确?我以为enableHighAccuracy: true 就够了,但事实并非如此。

【问题讨论】:

【参考方案1】:

位置信息可以从不同的位置提供者返回:卫星、网络、被动。为获得最佳结果,您应该放弃网络和被动提供商提供的位置。

据我所知,现代位置 API 不会区分提供者(参见融合位置),但您可以随时查看 coords.accuracy 以了解位置的准确性。

如果通过卫星对位置进行三角测量,则准确度始终是最佳的。通常低于 16(以米为单位),但绝对低于 30。您可以安全地丢弃精度更高的坐标。

【讨论】:

这很简单 :-) 谢谢 你知道我做错了什么吗,我只得到高于 50 的准确度结果? @nikitah 这很可能是因为 (1) 未启用 GPS,(2) 您的 android 手机上未启用高精度,或者 (3) 您没有明确请求许可。 GPS模块是强权限,需要先向用户请求:developer.mozilla.org/en-US/docs/Web/API/… 有人找到解决办法了吗? @Nikitah 当我的设备没有网络/数据连接/wifi 时,我在获取地理坐标时遇到了问题。我已经尝试过(ACCESS_FINE_PERMISSION 和 ACCESS_COURSE)。你能帮我解决这个问题吗?我使用的是 Ionic 4,启用高精度也是如此。

以上是关于Ionic4 watchPosition 和 getCurrentPosition 的地理位置与 Ionic/Capacitor 不准确的主要内容,如果未能解决你的问题,请参考以下文章

watchPosition() 和 getCurrentPosition

Phonegap watchPosition测量距离和触发事件

使用 navigator.geolocation.watchPosition 的 javascript 对象变量和方法范围问题

带有 navigator.geolocation.watchPosition 的连续标记

地理位置 getCurrentPosition() 和 watchPosition() 不适用于不安全的来源

React Native Geolocation Watchposition不会实时更新