计算用户随时间的步行距离

时间:2018-05-02 10:30:53

标签: gps location distance

我正在尝试使用GPS跟踪用户在我的应用程序中随时间移动的距离。我有基本的想法,所以我存储了以前的位置,当发送新的GPS位置时,我计算它们之间的距离,并将其添加到总距离。到目前为止一切都很好。

这个简单的实现有两个大问题:

  1. 由于GPS处于静止状态,当用户移动时,GPS点不会是直线,而是更多的“锯齿形”图案,使得用户看起来像移动的时间长于他实际移动的时间。
  2. 也是准确性问题。如果手机只放在桌子上并轮询GPS的位置,那么答案通常每次都会有几米不等,所以即使手机静止不动,你也会看到仪表开始累积。
  3. 这两种情况都使得追踪对于腐败无用,因为我提供的数字现在已接近准确。

    但我想这个问题是可以解决的,因为有很多健身追踪器和类似的跟踪距离GPS。我猜他们会在GPS值或类似的东西之间进行某种插值吗?我想这也不是100%准确,但可能足够我的使用。

    所以我所追求的基本上是一种算法,我可以放入我的GPS位置,并尽可能好地近似行进的距离。

    请注意,我不能假设用户会关注道路,因此我无法使用Google Distance Matrix API或类似功能。

1 个答案:

答案 0 :(得分:1)

这是GPS接收器产生的位置数据的常见问题。我使用的典型消费级接收器的位置精度定义为2.5米的CEP。这意味着对于处于“完美”天空视野环境中的固定接收器,随着时间的推移,50%的定位将位于半径为2.5米的圆内。如果你看一下接收器报告的位置,它看起来随意地绕着真实位置漂移,有时会移动距离其真实位置数米。如果您只是整合样本之间移动的距离,那么您将获得非常大的表观距离。对于固定设备。

我已成功用于车辆里程表功能的简单算法如下

for(;;)
{
    Stored_Position = Current_Position ;
    do 
    {
       Distance_Moved = Distance_Between( Current_Position, Stored_Position ) ;
    } while ( Distance_Moved < MOVEMENT_THRESHOLD ) ;

    Cumulative_Distance += Distance_Moved ;
}

MOVEMENT_THRESHOLD的值将影响最终结果的准确性。如果该值太小,则由固定接收器执行的一些随机漂移将包括在最终结果中。如果该值太大,则所采用的路径将近似为一系列直线,每条直线与阈值一样长。当接收器的路径偏离该直线段时,接收器行进的额外距离将被遗漏。

与车辆里程表相比,这种方法的准确性非常好。如何与行人一起工作必须进行测试。人们的问题在于它们可以比车辆产生更尖锐的转弯,从而导致直线近似的更大误差。由于建筑物,车辆等引起的天空视野遮挡和信号多路径的长期存在问题,可能导致10米的位置误差。