这是在android中计算速度的最佳方法,无论是"使用GPS坐标进行手动计算"还是"location.getSpeed"?

Ana*_*d K 8 gps android

我试图计算Android设备的速度,但这是最好的做法,已经有了使用GPS的location.getSpeed()函数,这是最好的使用方法吗?或者我应该使用获得的GPS坐标手动计算速度?

Sea*_*eau 8

IMO,Android上最新的方法是Location.getSpeed()Google Services Location API和融合位置提供商一起使用.然后,现实 - 根据Google Play服务活动识别检查此值.

融合位置提供商集成了一些其他板载传感器来调整位置数据,这比单独使用GPS更好.然后,检查ActivityRecognition.getMostProbableActivity()方法.如果DetectedActivity是类型STILL,你的真实速度可能等于0.如果是ON_FOOT,它可能是低速(例如,1米/秒).如果它ON_BICYCLE或者IN_VEHICLE,你可能很好地依靠直接获得的速度输出Location.getSpeed().您还需要检查DetectedActivity.getConfidence()值,并在依赖这些值时为您提供"自信"的置信水平设置自己的阈值.

我也肯定建议你不要简单地平均连续位置以获得两个位置之间的平均速度(如果你这样做,它需要是大量位置的平均值).在我的移动设备上的基准(见我的论文在这里,105-106,137-138和特别页),我发现通过GPS子系统(通常基于关闭的计算瞬时速度的GPS载波信号的多普勒频移)比GPS导出的位置更准确.在测试的Sanyo Pro 200中,在室内静止时观察到的第95百分位速度(仅使用辅助GPS,无传感器融合)为1米/秒.在我正在评估的一些智能能源管理技术中,我能够使用速度数据(参见第137-138页)过滤掉大量的位置异常值.通过传感器融合和活动识别来帮助过滤异常值,在类似的设备上准确度应该优于此.

最后,我不能强调这一点,你是否真的在真实设备上进行测试,尽可能多的停止,最好是最受欢迎的模型.Android有各种各样的OEM推出设备,这些都会有他们的怪癖.最好的办法是创建一个针对最流行模型的解决方案,并承认在所有模型上都能完美地运行解决方案是不现实的.


Leg*_*sey 6

似乎 getSpeed() 方法并不总是可靠的,尤其是在低速和 GPS 覆盖不是最佳的情况下。您可以查看this questionthis one,它们都是关于getSpeed()的替代方法。该机器人developper页但是说你会使用谷歌定位API获得更好的性能。

因此,选择似乎取决于您的应用程序的使用:如果您的目标是在 GPS 覆盖范围较差的区域(在树林中行走)中的缓慢位移,请使用您自己的实现。在 GPS 覆盖良好的地区快速,使用 Google Location API。