如何在Android中从GPS获得最准确的速度

时间:2012-03-19 08:44:40

标签: android performance gps location

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

我目前正在做的事情,如下所示,考虑位置对象a和b,首先拍摄a,b后面:

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

(为便于阅读而简化,原始代码处理历史记录ArrayList

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

3 个答案:

答案 0 :(得分:0)

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

获取当前位置和时间

找出当前和最后的速度~10

取结果的平均值

答案 1 :(得分:0)

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

请记住,此速度会受到停车标志或停车灯等任何停车的影响。尽可能经常采样并丢弃任何明显的异常值。

答案 2 :(得分:0)

  

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

Stefan的回答其实是正确的。显然,仿真器没有提供速度,因为GPX文件输入中没有包含测试数据。因此,如果您想要显示速度,在真实设备上进行测试并进行慢跑,它将起作用(对于大多数设备而言)。

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

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

即使您不根据所覆盖的距离计算速度,上述方法也可能有用,因为即使您正在移动,GPS似乎也会将速度恢复为0。我使用F1赛车的加速/减速数据作为过滤器:)