我正在尝试计算Android设备的速度,但这是最好的做法,已经有了使用GPS的location.getSpeed()函数,这是最好的使用方法吗?或者我应该使用获得的GPS坐标手动计算速度?
答案 0 :(得分:8)
IMO,Android上最新的方法是使用Location.getSpeed()
以及Google Services Location API和融合位置提供商。然后,现实 - 根据Google Play Services Activity Recognition检查此值。
融合位置提供商集成了一些其他板载传感器来调整位置数据,这比单独使用GPS更好。然后,检查ActivityRecognition.getMostProbableActivity()方法。如果DetectedActivity
类型为STILL
,则您的真实速度可能等于0.如果是ON_FOOT
,则可能是低速(例如,1 m / s)。如果是ON_BICYCLE
或IN_VEHICLE
,您可能很好地依赖于直接从Location.getSpeed()
获得的速度输出。您还需要检查DetectedActivity.getConfidence()
值,并在依赖这些值时,为您提供“自信”的置信水平设置自己的阈值。
我也肯定建议你做 NOT 简单地平均连续位置以获得两个位置之间的平均速度(如果这样做,它需要是大量位置的平均值)。在我对移动设备的基准测试中(参见我的论文here,特别是第105-106页和第137-138页),我发现了GPS子系统计算的瞬时速度(通常基于{{3 }})比从GPS导出的位置更准确。在测试的Sanyo Pro 200中,在室内静止时观察到的第95百分位速度(仅使用辅助GPS,无传感器融合)为1米/秒。在我正在评估的一些智能能源管理技术中,我能够使用速度数据(参见第137-138页)过滤掉大量的位置异常值。通过传感器融合和活动识别来帮助过滤异常值,在类似的设备上准确度应该优于此。
最后,我不能强调这一点,你是否真的在真实设备上进行测试,尽可能多的停止,最好是最受欢迎的模型。 Android有各种各样的OEM推出设备,这些都会有他们的怪癖。最好的办法是创建一个针对最流行模型的解决方案,并承认在所有模型上都能完美地运行解决方案是不现实的。
答案 1 :(得分:4)
似乎getSpeed()方法并不总是可靠的,尤其是在低速时以及当gps覆盖率不是最佳时。 您可以查看this question和this one,它们都是getSpeed()的替代品。 然而,android developper page表示您可以使用Google Location API获得更好的效果。
所以看起来选择取决于您的应用程序的使用情况:如果您的目标是在gps覆盖率较差的区域(在木头中行走)中缓慢移位,请使用您自己的实现。具有良好GPS覆盖范围的快速区域,请使用Google Location API。
希望它对你有所帮助。
答案 2 :(得分:0)
移动速度比步行速度快的设备的最佳方法是直接使用location.getSpeed()。
对于行人或其他慢速情况,这并不容易,也许根本无法获得当前有效的有效慢速。
有些人试图评估历史记录并进行平均或基于阈值的方法,这将针对特定的应用/用途进行改进。
但最简单的是设计你的应用程序以忽略低速。
与速度相关的一些链接:
GPS position correction
Smooth GPS data