Ionic4中使用Ionic/Capacitor的Geolocation的watchPosition和getCurrentPosition不准确。

8

我正在使用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个回答

4

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

据我所知,现代位置API不区分提供商(参见融合定位),但您始终可以检查coords.accuracy以获取位置精度的概述。

如果通过卫星进行三角测量,则精度总是最好的。通常是小于16米,但绝对小于30米。您可以安全地丢弃精度高于此的坐标。


那很容易 :-) 谢谢 - user1469734
你知道我做错了什么吗?为什么我的准确率只能得到高于50的结果?@nikitah - user1469734
这很可能是因为(1)GPS没有启用,(2)您的安卓手机没有启用高精度或者(3)您没有明确地请求权限。GPS模块是一个需要先向用户请求的强权限:https://developer.mozilla.org/en-US/docs/Web/API/Geolocation_API#Prompting_for_permission - Nikitah
有人找到了解决这个问题的方法吗? - Seloka
@Nikitah,我在使用设备没有网络/数据连接/WiFi时获取地理坐标时遇到了问题。我已经尝试过(ACCESS_FINE_PERMISSION和ACCESS_COURSE)。你能帮我解决一下吗?我正在使用Ionic 4,启用高精度也是真的。 - Raj
因为我要帮助你,所以我需要更多的信息。我猜你在用Android,但是用的是哪个操作系统版本?您是否已弹出位置权限对话框,即是否具有GPS权限?启用网络时,一切是否正常工作?您是使用插件还是Web API? - Nikitah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接