algorithm - 计算两个位置之间的大概位置

标签 algorithm math maps latitude-longitude

我正在实现简单的导航,我需要计算路线上的大概位置 (GPS)。路线是一个点列表,所以基本上它看起来像这样:

                    (latX, longX)
(lat1, long1) o------o---------------o (lat2, long2)
                     |
                     |
                     o
                     (lat3, long3) - GPS My location

我有两个点 (lat1, long1) 和 (lat2, long2) 以及我的位置 (lat3, long3)。我如何计算 (latX, longX)?

最佳答案

让我试着给你一个草图,说明我如何将问题分解成更小的步骤。

  1. 将地球视为半径为 r 的完美 3D 球体.

  2. 转换 (lat, long) 给出的位置对成 3D 点 (x, y, z)在球体表面,即 x^2 + y^2 + z^2 = r^2 .您还需要进行逆变换才能返回 (lat, long)坐标。

  3. 让我们放(使用上面的 2)

    P1 := (x1, y1, z1) <-> (lat1, long1)

    P2 := (x2, y2, z2) <-> (lat2, long2)

    P3 := (x3, y3, z3) <-> (lat3, long3)

    P := (x, y, z) <-> (latX, longX)

  4. H是包含原点(在地球中心)和点 P1 的平面和 P2 .注意 H在连接 P1 的路径中与球体表面相交与 P2如您的插图所示。

  5. (a, b, c)垂直于 H .你可以通过求解矩阵方程Mv = 0来找到它, 其中M是行为 (x1, y1, z1) 的矩阵和 (x2, y2, z2)v是坐标为 (a, b, c) 的未知列.

  6. Q = (x3, y3, z3) + u*(a, b, c) , 其中uQ = (q1, q2, q3) 的系数H 中的行.你可以计算出u通过求解矩阵方程 Mv = P3 , 其中M3x3带列的矩阵 (x1, y1, z1) , (x2, y2, z2)(-a, -b, -c) , v是未知列 (s, t, u)P3代表列 (x3, y3, z3) .

  7. P = w*Q , 其中wP = (x, y, z) 的系数与 x^2 + y^2 + z^2 = r^2 .

  8. 使用上面第 2 步中提到的逆转换来计算 (latX, longX) <-> (x, y, z) .

关于algorithm - 计算两个位置之间的大概位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33387255/

相关文章:

algorithm - 如何优化发现相似性?

algorithm - 在哪些情况下,使用合并排序计算反转的算法将失败

c - 长双数学库实现?

javascript - 谷歌地图 API : Bézier curve polyline wrap

algorithm - 如何优化图像的翻转、反转和旋转?

java - 如何获得 N 组合 R 中的第 k 项

algorithm - 仅使用加法、乘法、减法和最大值的整数除法

javascript - 在 map 上画线并使用javascript获取国家线通过

c++ - STL map.find 返回不正确的元素

sql - 在 PL/SQL/Oracle Forms 中搜索