为了让每个人都开始使用,以下是朴素的算法,不使用任何速度或方位信息。
圆弧长度s
可以通过标准公式从我们开始的线段的两个(长,纬度)对(开始和结束路标)计算出来。
假设我们(因此使用用于位置0 phi[0]
和phi[1]
和1这里阵列)弧度转换的值对成标准球面坐标phi
和theta
,电弧长度刚好:
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])
)
)
我们为了在每对连续的点执行此操作,总结了s
S,加在正交误差为正常:
accumulator = 0.0
for error in errors:
accumulator += error * error
journey_error = sqrt(accumulator)
,因此,我们知道我们的垃圾距离估计的不确定性。 (我们甚至可以保留accumulator
以加速计算,如果我们在结尾添加几个点 - 就像我们实际使用实时数据一样)。
但是,这会给我们带来巨大的错误,并且只是一个非常模糊的想法,我们已经走了多远。这不可能是GPS如何实际设备的估计距离,因为这将永远是不够准确的,除非它有惊人的信号,所有的时间:
我们需要的是一些更细致的路径近似,只弯曲显示的不准确的点类型的路径不在位置,而不是完全分散它,并大量增加距离估计—在提问我希望找出所有现有的实现(可能)如何做!