如何获取安卓设备用户移动的速度?Location.getSpeed 可靠吗?

10

我正在尝试从用户的Android设备获取其速度,但哪种方法最可靠呢?

有一个 location.getSpeed() 函数使用GPS; 这是获取速度的可靠方法吗?或者我应该手动使用获取到的GPS坐标计算速度?或者还有其他我所不知道的方法可以实现这一点吗?

3个回答

10

在安卓系统中,目前最好的方法是使用Location.getSpeed()结合Google服务位置API和融合式位置提供程序。然后,使用Google Play服务活动识别来检查这个值是否真实可信。

The fused location provider整合了一些其他的板载传感器来调整位置数据,这比仅使用GPS更好。然后,检查ActivityRecognition.getMostProbableActivity()方法。如果DetectedActivity类型为STILL,则您的真实速度可能等于0。如果是ON_FOOT,那么它可能是低速(例如1 m/s)。如果是ON_BICYCLEIN_VEHICLE,则可以放心地依赖直接从Location.getSpeed()获得的速度输出。您还需要检查DetectedActivity.getConfidence()值,并设置您自己的置信水平阈值,以在依赖这些值时提供“有信心”的信号 :)。
我强烈建议您不要简单地平均连续位置以获得两个位置之间的平均速度(如果这样做,需要对大量位置进行平均)。在移动设备基准测试中(请参见我的论文此处,特别是第105-106页和137-138页),我发现由GPS子系统计算的瞬时速度(通常基于GPS载波信号的多普勒频移)比由GPS派生的位置更准确。在我测试的Sanyo Pro 200上,仅使用辅助GPS(无传感器融合),在室内静止状态下观察到的速度95分位数为1 m/s。我能够使用速度数据(请参见第137-138页)过滤掉大量位置异常值,用于评估一些智能能源管理技术。通过传感器融合和活动识别来帮助过滤异常值,类似设备的准确性应该比这个更好。
最后,我再次强调,您需要在尽可能多的真实设备上进行自己的测试,最好是最受欢迎的型号。Android有许多OEM厂商推出的设备,每个设备都有其独特之处。您最好的选择是创建一个针对最受欢迎的型号的解决方案,并认识到无法使解决方案在所有型号上完美运行是不现实的。

你的论文链接无法打开,能否请你修复一下呢?这对我非常有帮助。谢谢! - rgv

6
似乎getSpeed()方法并不总是可靠的,特别是在低速和GPS覆盖不理想的情况下。您可以查看此问题这个,它们都是关于getSpeed()替代方案的。然而,Android开发者页面表示,使用Google位置API可以获得更好的性能。因此,选择取决于您的应用程序使用情况:如果您的目标是在GPS覆盖差的区域进行缓慢移动(在树林中行走),请使用自己的实现。在GPS覆盖良好的区域快速移动,请使用Google位置API。

0

对于移动速度快于步行的设备,最好直接使用location.getSpeed()。

对于行人或其他低速情况,这并不容易,也许在此时很难获得有效的低速度。
有些人尝试评估历史数据并进行平均化或基于阈值的方法,这将改善特定应用/用途。

但最简单的方法是设计您的应用程序以忽略低速度。

一些与速度相关的链接:
GPS位置校正
平滑GPS数据


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接