2011-07-18 117 views
1

我正在尝试计算一段时间内在Android平台的应用中已经过去的距离。
这样做的最好方法是什么?
目前,我正在实现LocationListener接口。
我重写的方法OnLocationChanged计算一段时间内行驶距离的最佳方法是什么?

我目前在做这样的事情:

public void onLocationChanged(Location location) { 
     Log.d("onLocationChanged", "onLocationChanged"); 


     old_location.set(new_location); 
     new_location.set(location); 
     totalDistanceElapsed += new_location.distanceTo(old_location); 

}
所以我加入从原来的位置点的距离到新的位置点过一次“onLocationChanged “ 叫做。 这是正确的吗? 我需要做其他事吗? 这是否准确?如果不是,我怎样才能使它更准确?谢谢

+0

这取决于,你需要多少accurisncy?对我而言,最好的方法是每隔x次(例如30秒)记录GPS位置,然后计算距离。根据上下文的不同,它可能会改变......也许另一种方法是根据速度计算采样时间。我的意思是,如果速度很高,你可以提高采样率:) – ykatchou

+0

好问题。 totalDistanceElapsed必须具有的一个属性是它在不移动时不会增加。我不确定位置的精确位置,因此我会建议您在手机未移动的情况下进行测试,并确认totalDistanceElapsed不会增加。如果它确实在增加,你可以增加一个10米的容差,或者如果放弃事件的话,如果容差小于容差的话。 –

+0

谢谢 现在我不知道如何“测试手机不在移动” 请问您能再帮忙吗?谢谢 – dewijones92

回答

3

确定一段时间内行驶距离的微小方法是每秒获取一次修复程序,并读取并记录每个修复程序报告的速度(以米/秒为单位)。那么你的距离是所有时间段内所有速度的总和。

如果您想避免将“抖动”作为移动进行计数(即,如果由于GPS修复不准确而修复缓慢移动,但设备实际上是静止的),则可以设置速度阈值(例如,忽略速度低于某个水平,或者如果标题在修正之间快速变化。这些阈值可能取决于所使用的GPS设备,并且一些设备已经内置了这种类型的设备(即,如果速度太低,则报告0m/s)。

但是,它确实取决于设备。例如,我的早期型号三星Galaxy I9000即使在晴朗的天空条件下也能在半径20米的区域内以大约每秒半米的速度漫游,因此如果它在田野中静止10分钟,上述算法会报告它已经旅行3亿英镑。

相关问题