【问题标题】:How to get the most accurate possible speed from GPS in Android如何从 Android 中的 GPS 获得最准确的速度
【发布时间】:2012-03-19 08:44:40
【问题描述】:

如何在 Android 中通过 GPS 获得准确的速度? 是的,我知道Location 类中的location.getSpeed() 方法。问题是,默认实现返回 0.0 作为速度:显然是that is the default behavior

我目前正在做的,如下,考虑位置对象a和b,其中a先取,b后取:

a.distanceTo(b)/(b.getTime()-a.getTime());

(为了可读性而简化,原始代码处理历史ArrayList

问题在于这有点不准确:在正常情况下,数据点彼此如此接近,以至于 GPS 不准确确实成为一个问题。我需要降低更新频率或计算相对于更远点的速度。前者我不想做,因为我想获得尽可能高的频率,但也许我可以过滤这些点以根据它们彼此的距离来计算速度? 我假设getSpeed() 方法可以做到的最佳解决方案是根据 GPS 卫星本身计算速度,从而获得更准确的结果。 我是否以某种方式使用了getSpeed() 错误?

【问题讨论】:

  • 您好 Visa,我认为您应该在距离中包含 Accuracy 参数,当我们从 Location 类中获取纬度、日志时,它不是 100% 准确的,Location 类有名为“getAccuracy()”的方法。它返回 int - 以米为单位的精度。您应该将其包括在计算中
  • 模拟器显然总是回答 0 作为速度,但真正的设备不应该。你在真机上遇到过同样的问题吗?

标签: android performance gps location


【解决方案1】:

既然你保留了历史为什么不...

获取当前位置和时间

找出当前和最后一个 ~10 之间的速度

取平均结果

【讨论】:

    【解决方案2】:

    使用您所说的公式来确定平均速度,但要确保您的两点在一条直线上。您可以通过调用 Location.getBearing() 查看用户是否仍在同一方向行驶。如果距离足够近,您可以假设它们沿直线行驶。如果不只是丢弃结果。

    请注意,此速度会受到任何停车(例如停车标志或停车灯)的影响。尽可能频繁地采样并丢弃任何明显的异常值。

    【讨论】:

      【解决方案3】:

      模拟器显然总是回答 0 作为速度,但真正的设备 不应该。你在真机上有同样的问题吗? – 斯特凡 3 月 20 日 8:21

      Stefan 的回答实际上是正确的。显然模拟器没有给出速度,因为它不包含在 GPX 文件输入中作为测试数据。因此,如果您想展示速度,在真实设备上进行测试并慢跑,它会起作用(对于大多数设备)。

      以下是对其他检测速度方法的一些想法,但并非严格相关,但如果您使用 GPS,可能会很有趣。

      由于 GPS 相对不准确,特别是在低速或弯曲的道路上,速度很难计算:要么数据点之间的距离太短,GPS 不准确就会发挥作用,要么当不直线移动时,它变得不准确.此外,如果计算速度的数据点之间的最小距离很长,那么在低速时更新间隔就会成为问题。 有一些方法可以解决这个问题,例如使用 getAccuracy() 方法计算数据点之间的最小安全距离并动态使用它,根据最大加速度和减速度值过滤数据点,运动方向等。您还可以计算一个滚动平均值来稍微平息变化并很好地了解什么是什么。

      即使您不根据行驶距离计算速度,上述方法也可能很有用,因为有时 GPS 似乎将速度返回为 0,即使您在移动时也是如此。我使用 F1 赛车的加速/减速数据作为过滤器 :)

      【讨论】:

        猜你喜欢
        • 2010-10-09
        • 1970-01-01
        • 2012-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-16
        • 1970-01-01
        相关资源
        最近更新 更多