14

写一个GPS测井应用~

我发现由报告的getSpeed()方法返回的值非常不可靠。我正在使用,过滤通过提供的位置以获得最佳准确性。即使在个位数的精度水平下,返回的速度通常也高得离谱。当手机静止时,我们正在谈论高达 200 英里/小时(是的,我知道它以米/秒为单位)。LocationsLocationManagerLocationManager.GPS_PROVIDERonLocationChanged

我正在两个不同型号的 Android 手机上测试相同的代码库,运行两个不同的操作系统版本,并看到相同的问题,所以我认为这是一个代码问题。

我错过了什么?我试过在一段时间内平均位置,但无济于事。我是否必须根据行驶距离/时间计算出自己的速度值?这将令人失望。

正如您将看到的,我没有做任何特别的事情 - 稍微过滤以提高准确性,即使在这之后,即使位置的准确性很好AverageSpeed_bestLocation.getSpeed()也经常不可行地高。

public void onLocationChanged(Location location) {
    if (location.getAccuracy() < 25f) {
        _recentLocations.add(location);

        if (_bestLocation == null || location.getAccuracy() <= _bestLocation.getAccuracy())
            _bestLocation = location;
    }

    if ((_bestLocation != null && _bestLocation.getAccuracy() < 10f && _recentLocations.size() >= 10)
            || _recentLocations.size() >= 25)
    {
        int Count = 0;
            float TotalSpeed = 0f;
            float AverageSpeed = 0f;
            for (int i = 0; i<_recentLocations.size(); i++) {
                if (_recentLocations.get(i).hasSpeed()) {
                    Count++;
                    TotalSpeed += _recentLocations.get(i).getSpeed();
                }
            }

        if (Count > 0)
                AverageSpeed = TotalSpeed / Count;
        }
}
4

4 回答 4

31

我已经在 GPS 硬件上工作了 7 年多了。准确度读数也不是 100% 准确的。制造商说明精度以及用于测量它的系统。CEP、RMS、2DRMS 和 R95 是其中的一些系统。阅读本文了解更多信息:http ://en.wikipedia.org/wiki/Circular_error_probable

准确度数字不包括异常值。例如,如果规定精度为 5 米,则在良好信号条件下读取的读数在 95% 的情况下最大误差为 5 米。剩下的 5% 读数或在不良信号条件下读取的读数无话可说。防止这些异常值是使基于位置的良好应用程序脱颖而出的特殊方法。

您可以做的一些事情是:

  1. 过滤出疯狂的高速。利用高度作为在飞机上的提示。
  2. 关联来自运动传感器的信息,看看它们是否与 GPS 一致。运动传感器特征在稳态和运动中会有很大不同。
  3. GSM/3G 小区的典型尺寸在城市地区不到一公里,在人口稀少的地区为 5-10 公里。如果车辆高速行驶了一段时间,而手机信号塔的信息还是一样的,你就知道有问题了。
  4. GPS 定位是否也会高速读取北向,下一刻向南读取?如果是,则很可能是 GPS 错误。
  5. 检查 GPS 计算中使用的卫星数量。12 是优秀的,9 是健康的,5 或更少是差,4 是 lat,lon + 高度计算的最低限度,3 是 lat,lon 计算的最低限度。任何小于 3 的都不是有效读数。如果卫星数量多,您可以对数据的有效性更有信心。
于 2012-07-27T11:23:35.363 回答
1

GPS 设备是定位速度计,基于接收器自上次测量后移动了多远。它的速度计算不受与车辆速度计相同的误差源(车轮尺寸、传动/传动比)的影响。相反,GPS 的定位精度以及其计算速度的精度取决于当时的卫星信号质量。当位置误差与位置变化的比率较低时,速度计算将在较高速度下更准确。

来自维基百科。

可能你应该在信号强度好的地方试试这个。

于 2012-07-27T10:27:41.773 回答
1

我遇到了同样的问题。我认为 GPS 信号取决于位置,某些位置可能会给出位置的准确输出,否则会产生“不那么可靠”的结果。就我而言,我的位置距离我的实际位置大约 200 米。你呢?

另外,GPS_PROVIDER 在我所在的地区不起作用。NETWORK_PROVIDER 确实如此,它是提供 200 米外结果的那个。

于 2012-07-27T10:38:12.747 回答
0

似乎大多数人都假设来自 GPS 的速度信息是基于比较与时差相关的位置。这种方法对于确定速度不是很好,在较低的行驶速度下效果更差。

GPS 接收器可以基于来自卫星测量的多普勒频移输出速度测量。与基于位置/时间计算的速度测量相比,基于多普勒的速度测量的准确性要好得多。

谷歌上的 gps 速度多普勒和你会发现很多阅读。

一个链接在这里: http: //nujournal.net/HighAccuracySpeed.pdf

/城市霍姆达尔

于 2013-12-12T16:34:05.050 回答