首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android GPS定位速度不可靠

Android GPS定位速度不可靠
EN

Stack Overflow用户
提问于 2012-07-27 18:18:10
回答 4查看 13.4K关注 0票数 14

编写GPS日志应用程序~

我发现LocationManager报告的Locations上的getSpeed()方法返回的值非常不可靠。我正在使用LocationManager.GPS_PROVIDER,过滤通过onLocationChanged提供的位置以获得最佳精度。即使在个位数精度级别,返回的速度通常也高得离谱。当手机处于静止状态时,我们谈论的速度高达200MP/h(是的,我知道它是以米/秒为单位)。

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

我遗漏了什么?我试着在一段时间内对位置进行平均,但没有效果。我是否必须根据行驶的距离/时间计算出我自己的速度值?这将会令人失望。

正如你将看到的,我并没有做任何特别的事情--为了精确度做一点过滤,即使在这之后,AverageSpeed_bestLocation.getSpeed()通常都很高,即使位置的精确度很好。

代码语言:javascript
复制
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;
        }
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-27 19:23:35

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

准确率数字不包括异常值。例如,如果规定精度为5米,则在良好信号条件下获取的读数的最大误差为5米,95%的时间。关于剩下的5%的读数或在坏信号条件下取得的读数,什么都不能说。针对这些异常值的保护是一种特殊的调料,它使一个好的基于位置的应用程序脱颖而出。

您可以执行的一些操作包括:

  1. 可以过滤出超高的速度。利用高度作为在飞机上的提示。
  2. 将来自运动传感器的信息关联起来,看看它们是否与GPS一致。运动传感器的信号在稳态和运动中会有很大的不同。
  3. ,一个GSM/3G蜂窝的典型尺寸在城市地区小于一公里,在人口稀少的地区为5-10公里。如果车辆高速行驶了一段时间,手机发射塔信息仍然是一样的,你就知道出了什么问题。
  4. 的全球定位系统会不会在高速行驶时先读北边,再读南边?如果是,则很可能是GPS错误。
  5. 检查在GPS计算中使用的卫星数量。12为优秀,9为健康,5或更少为差,4为最小高度计算,高度+高度计算,3为最小高度计算。任何小于3的读数都不是有效读数。如果卫星数量很多,你可以对数据的有效性更有信心。
票数 31
EN

Stack Overflow用户

发布于 2012-07-27 18:27:42

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

来自维基百科。

也许你应该在你有良好信号强度的地方尝试一下。

票数 1
EN

Stack Overflow用户

发布于 2012-07-27 18:38:13

我也遇到了同样的问题。我认为GPS信号取决于位置,一些位置可能会给出准确的位置输出,否则就会产生“不太可靠”的结果。在我的例子中,我的位置离我的实际位置大约200米远。你呢?

补充一句,GPS_PROVIDER在我所在的区域不起作用。NETWORK_PROVIDER是这样做的,并且是它给出了200米以外的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11685842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档