android - 令人难以置信的不准确的 GPS 点。是什么原因?

标签 android gps location

我为 Android 开发了一个应用程序,用于存储用户的 GPS 位置。

我的一位客户将他的设备送给了我,我注意到有时设备的准确度真的很差,令人难以置信。有时设备会返回距离实际位置约 200 公里的点。

您可以在该设备的以下 GPS 位置示例中看到这一点。你看到两个点距离真实位置大约 200 公里。

设备是 Samsung SM-T111 和 Android 4.2.2,我只使用 GPS 供应商来获取位置 (LocationManager.GPS_PROVIDER)。

我想知道是什么原因导致了这种不准确?

我直接存储从提供商那里收到的积分。这是我在 onLocationChanged 中的代码:

更新

        @Override
        public void onLocationChanged(Location location) {
            try {

                    if (location.getAccuracy() <= MAX_DISTANCE_TOLERANCE) {

                        gotLocation(new GPSLocation(location.getLatitude(),
                                location.getLongitude(), location.getTime(),
                                location.getAccuracy(),
                                location.getProvider(), location.getSpeed()));
                    }               

            } catch (Exception e) {
                MessageBox.showExceptionToast(_context, e);
            }
        }

enter image description here

enter image description here

最佳答案

I want to know what can be the problem for this kind of inaccuracy?

硬件/固件,很有可能。换句话说,责怪三星。

它不太可能是您的应用。假设您为这些失败点获得的精度值在 MAX_DISTANCE_TOLERANCE 范围内,并且假设 MAX_DISTANCE_TOLERANCE 小于 200 公里,那么您将忠实地使用您获得的数据。如果该数据存在缺陷,则这些缺陷来自系统本身。

您可以创建一个更具适应性的过滤器。除了测试 MAX_DISTANCE_TOLERANCE 的准确性外,您还可以:

  • 计算您获得的最后一个位置与您现在正在处理的新位置之间的时间
  • 根据您预计设备行驶的最大速度,计算该时间内可以行驶的最大距离
  • 计算这两个位置之间报告的距离(Location 上有一个静态方法用于此)
  • 如果报告的距离比您认为设备在这段时间内可能移动的距离更远,则拒绝位置

例如,您的第一个错误修复比上一个修复晚了 20 分钟。除非您认为该设备可能以 600 公里/小时的速度行驶,否则您会拒绝该错误修复,因为它不切实际。

此算法只有在您进行了一些一致的修复后才会起作用。您可能会请求几分钟的快速位置更新,检查该数据,排除任何异常值,然后应用“设备真的可以行驶那么远吗?”测试 future 的修复。

关于android - 令人难以置信的不准确的 GPS 点。是什么原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40446956/

相关文章:

android - Qt5 QGeoPositionInfoSource::createDefaultSource() 在 Android 5.0 上崩溃

android - 是否有一些算法可以保存最佳路线 gps android

java - 我如何每次都创建一个新文件,这样什么都不会被覆盖?

java - GPS 启用检查后销毁并重新启动应用程序

iphone - 用相机拍摄的照片不包含任何 ALAsset 元数据

android - 通过默认提供商单击按钮即可获取位置

java - 获取 ArrayList<ArrayList<String>>() 的值(字符串);在 java

android - OAuth Twitter 在 iPhone 和安卓上只有 Consumer Key(不使用 Consumer Secret)

java - 在android中下载、存储和混合.ts文件的正确方法是什么?

android - 如何从位置名称获取坐标