【问题标题】:How to use linear interpolation estimate current position between two Geo Coordinates?如何使用线性插值估计两个地理坐标之间的当前位置?
【发布时间】:2010-12-16 21:03:25
【问题描述】:

我有以下可用的:

  • 最后报告的带时间戳的纬度、经度
  • 目标纬度、经度
  • 预计目标时间
  • 标题

如何随着时间的推移插入估计位置?

我知道这足以计算剩余行程所需的平均速度。给定一个直线距离,这是非常微不足道的。我知道这与向量有关,但我有点生疏,认为最好咨询一些专家。

我需要这个更新率的原因是有限的,所以为了显示流畅的动画我需要猜测更新之间的当前位置。

目标平台是一个谷歌地图应用程序,因此我可以使用一些基本功能,例如用于两个坐标之间距离的地理校正功能。语言并不重要,因为我知道很多,并且可以根据需要移植或改编任何示例。然而,一般的解决方案将是首选。


这只是两个独立的向量计算吗?

lat估计 = latstart + (Δlat * P) lon估计 = lon开始 + (Δlon * P) 在哪里: testimated = 报告的预计目标时间 telapsed = 自上次估计以来的时间 P = t经过 / t估计 Δlat = lat报告 - lat目标 Δlon = lon报告 - lon目标

【问题讨论】:

    标签: language-agnostic math geospatial estimation interpolation


    【解决方案1】:

    您想使用Slerp 或球面线性插值。

    将您的纬度和经度转换为单位 3 向量:

    p=(x,y,z)=(cos(lon)*cos(lat), sin(lon)*cos(lat), sin(lat))
    

    然后,“Slerp”为您提供沿单位球体表面的等速插值:

    theta= angle between 3-vectors p0 and p1 (e.g., cos(theta)= p0.p1)
    Slerp(p0,p1,t)= ( p0*sin((1-t)*theta) + p1*sin(t*theta) ) / sin(theta)
    

    请注意,如果 theta 非常接近 0 或 180 度,则此公式在数值上可能不稳定。在小角度情况下,可以回退到线性插值;在 180 度的情况下,您的路径确实是模棱两可的。

    【讨论】:

      【解决方案2】:
      Lat_to_Travel  = CurLat - TargetLat
      Long_to_Travel = CurLong - TargetLong
      Time_to_Travel = ETA - now
      

      如果距离相对较小,则可能可以假设这三个维度上的线性级数 (*)。然后,您需要确定要显示的中间位置的数量,比如 10 个,并相应地计算每个中间点

      NbOfIntermediates       = 10  // for example    
      Lat_at_Intermediate(n)  = CurLat + (1/NbOfIntermediates * Lat_to_travel)
      Long_at_Intermediate(n) = CurLong + (1/NbOfIntermediates * Long_to_travel)
      Time_at_Intermediate(n) = now + (1/NbOfIntermediates * Time_to_travel)
      

      所有这一切中最复杂的是保持单位正常。

      ( * ) 关于是否可以假设线性级数的一些考虑...
      显然,物理元素的真实性(海流、风、能见度...)的细节在这件事上可能比地理空间数学更重要。
      假设车辆以恒速,直线,[一般] 可以假设纬度维度的线性 [从技术上讲,地球并不是一个球体,这并不完全正确但该死的接近]。然而,在包含相对较大纬度变化的较长距离上,沿经度维度的角度进展不是线性的。原因是当我们远离赤道时,以线性英里(或公里......)表示的经度度数会减少。对于不同纬度的位置,下表应粗略了解这种影响:

      一个度数的纬度长度近似示例 (经度)在 海里 0 60 吉隆坡、波哥大、内罗毕 20 56.5 墨西哥城、麦加、孟买、里约热内卢 45 42.5 日内瓦、波士顿、西雅图、北京、惠灵顿(新西兰) 60 30 奥斯陆,斯德哥尔摩,安克雷奇 AK,圣彼得堡 俄罗斯

      查看此handy online calculator 以计算特定纬度的值。
      了解这一点的另一种方法是查看在佛罗里达州杰克逊维尔或加利福尼亚州圣地亚哥的纬度向东(或向西)行驶,需要 52 英里才能覆盖一个经度;在蒙特利尔或西雅图的纬度上,只需 40 英里。

      【讨论】:

      • 抱歉,我在添加评论时没有收到您的回答通知。我认为我们都在说同样的话......在几个支持它的支持后,我会接受你的回答;-)
      • @Mark R,对不起,我自己,我也没有看到您添加到问题中的公式。我看到你也假设你可以使用简单的线性外推。请参阅我对此假设的修改。
      • 我想是因为我已经有估计的时间(如果没有异常,我们可以假设它是正确的)从等式中删除地理空间方面对吗?我随着时间的推移进行插值以找到位置,而不是试图计算时间。
      • @Mark R,不完全是……[抱歉]。让我们举一个(有点做作的)例子:一架从迈阿密起飞的飞机估计它会在 5 小时内到达西雅图。如果您要通过线性插值绘制进度线,您将显示飞机向西前进,在第一个小时比最后一个小时要多。然而,这架飞机的最短路线是它在凌晨“确实”向北一点,在晚些时候向西一点。 (实际上,由于 FAA 的航线政策和利用 ...
      • ...各种天气因素,特别是急流的位置。)简而言之,线性插值提供了一个很好的投影车辆路径近似值,但如果旅行可能会关闭涉及到明显的纬度差异。由于没有车辆真正在恒向线或大圆上[长时间]行驶,因此这种近似值可能是可以的。如果您的任务是对这些假想线中的任何一条提供良好的估计,则应用的公式会有所不同。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-04
      • 2016-02-22
      • 1970-01-01
      • 2020-01-13
      • 2011-12-17
      • 1970-01-01
      相关资源
      最近更新 更多