安卓GPS定位速度不可靠



编写GPS日志应用程序~

我发现LocationManager报告的Locations上的getSpeed()方法返回的值非常不可靠。我使用LocationManager.GPS_PROVIDER,过滤通过onLocationChanged提供的位置以获得最佳精度。即使在个位数的精度水平下,返回的速度通常也高得离谱。当手机静止时,我们的通话速度高达200英里/小时(是的,我知道它的记录单位是米/秒)。

我正在两款不同型号的安卓手机上测试相同的代码库,运行两个不同的操作系统版本,发现了相同的问题,所以我认为这是一个代码问题。

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

正如你所看到的,我没有做任何特别的事情——对准确性进行一点过滤,即使在这之后,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;
        }
}

我在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的读数都不是有效的读数。如果卫星数量多,你可以对数据的有效性更有信心

GPS设备是基于接收器距离的位置测速仪自上次测量以来已移动。它的速度计算不是受到与车辆速度表相同的误差源的影响(车轮尺寸、变速器/传动比)。相反,GPS的位置准确度,因此计算速度的准确度,是取决于当时的卫星信号质量。速度当相对于位置变化的位置误差较低。

来自维基百科。

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

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

需要补充的是,GPS_PROVIDER在我所在的地区不起作用。NETWORK_PROVIDER做到了,这就是200米外的结果。

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

GPS接收机可以根据卫星测量值的多普勒频移输出速度测量值。与基于位置/时间计算的速度测量相比,基于多普勒的速度测量的精度要好得多。

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

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

/城市Holmdahl

最新更新