android - GPS 路线长度估计,考虑位置的不确定性

标签 android ios gps

因此,这是在旅途中跟踪您的位置的应用程序中的一个常见问题(例如,运行或自行车锻炼)。

显然 GPS 导航器的麻烦较少,因为它们可以假设您捕捉到道路上的一个点 - 但是,如果您在公园运行,捕捉到一些道路网格会给您带来非常疯狂的数字。

据我所知,问题是结合航路点之间的大圆距离,但要考虑到误差(精度值),这样您就不会因为低精度点而偏离航线太远.我脑海中的粗略实现包括绘制一些贝塞尔曲线(使用该点的速度/方位来添加样条方向和权重)并对其进行积分。

但是,显然这是人们以前解决过的问题。任何人都知道这些实现,或者它们都隐藏在专有软件中?

奖励积分对于任何也可以使用(大部分)不太准确的基站点(带有不同/不同步的时间戳,并且没有速度或方位信息)的人。 p>

最终的实现将使用 javascript 或 python,以速度更快的为准(我使用的是 SL4A),但我正在寻找通用算法。

最佳答案

为了让每个人都开始,这里是朴素的算法,不使用任何速度或方位信息。

弧长 s 可通过标准公式从我们将开始的路段的两对(长、纬度)(开始和结束航路点)计算得出。

假设我们已将值对转换为标准球坐标 phitheta(此处为数组,因此使用 phi[0]phi[1] 以弧度表示位置 0 和 1),弧长仅为:

from math import sin, cos, arccos, sqrt

s = arccos(
  sin(phi[0]) * sin(phi[1]) * cos(theta[0] - theta[1]) + 
  cos(phi[0]) * cos(phi[1])
)

但是,由于我们有一个庞大的可怕函数,我们需要使用链式法则来计算一阶误差,我们得到以下 delta_s 的怪物:

delta_s = (1.0 / abs(sin(s))) * (
  delta_phi[0] * abs(
    sin(phi[0]) * cos(phi[1]) -
    cos(phi[0]) * sin(phi[1]) * cos(theta[0] - theta[1])
  ) +
  delta_phi[1] * abs(
    sin(phi[1]) * cos(phi[0]) -
    cos(phi[1]) * sin(phi[0]) * cos(theta[0] - theta[1])
  ) +
  (delta_theta[0] + delta_theta[1]) * abs(
    sin(phi[0]) * sin(phi[1]) * sin(theta[0] - theta[1])
  )
)

我们按顺序对每一对连续点执行此操作,对 ss 求和,正常添加正交误差:

accumulator = 0.0
for error in errors:
  accumulator += error * error

journey_error = sqrt(accumulator)

因此,我们知道垃圾距离估计的不确定性。 (如果我们在末尾添加几个点,我们甚至可以保留 accumulator 以加快计算速度 - 正如我们在实践中使用实时数据一样。)

但是,这会给我们带来巨大的错误,并且对于我们实际走了多远只会有一个非常模糊的想法。这不可能是实际 GPS 设备估计距离的方式,因为它永远不够准确,除非它一直都有惊人的信号:

Rubbish approximation to the path

我们需要的是一些更细微的路径近似,它只会使路径偏离显示的不准确点类型的位置,而不是完全转移它并大量增加距离估计——在问我希望找到的问题时了解所有现有的实现(可能)是如何做到的!

关于android - GPS 路线长度估计,考虑位置的不确定性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8151767/

相关文章:

java - 单击 ListView 然后转到具有自动数据的其他 Activity

android - 在 GridView 中创建页脚需要帮助

java - Android Jack mockito 替代品

ios - iPhone中用户之间的对话框

Android根据gps坐标在 Canvas 上画一个点

android - GPS 跟踪和加速度计

macos - CLLocationManager 可以在 MAC 中与外部 GPS 配合使用吗

java - 为什么设备从 Activity 中振动,而不是从类(文件)内振动?

ios - UILocalNotifications 算法

javascript - iOS 7 - 修复了虚拟键盘上的页脚工具栏中断问题