我正在实施简单导航,我需要在路线上计算大概位置(GPS)。路线是一个点列表,所以基本上它看起来像这样:
(latX, longX)
(lat1, long1) o------o---------------o (lat2, long2)
|
|
o
(lat3, long3) - GPS My location
我有两个点(lat1,long1)和(lat2,long2)和我的位置(lat3,long3)。我该如何计算(latX,longX)?
答案 0 :(得分:0)
让我试着给你一个如何将问题分成更小步骤的草图。
将地球视为半径为r
的完美3D球体。
将(lat, long)
对给出的位置转换为球体表面上的3D点(x, y, z)
,即x^2 + y^2 + z^2 = r^2
。您还需要逆变换才能返回(lat, long)
坐标。
让我们(使用上面的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)
让H
成为包含原点(位于地球中心)和点P1
和P2
的平面。请注意,H
与P1
与P2
加入的路径中的球体曲面相交,如图所示。
让(a, b, c)
垂直于H
。你可以通过求解矩阵方程Mv = 0
来找到它,其中M
是行,(x1, y1, z1)
和(x2, y2, z2)
的矩阵,v
是带坐标的未知列(a, b, c)
。
设Q = (x3, y3, z3) + u*(a, b, c)
,其中u
是Q = (q1, q2, q3)
中H
行的系数。您可以通过求解矩阵方程u
来计算Mv = P3
,其中M
是3x3
矩阵,其中列(x1, y1, z1)
,(x2, y2, z2)
和{{1} },(-a, -b, -c)
是未知列v
,(s, t, u)
代表列P3
。
设(x3, y3, z3)
,其中P = w*Q
是w
与P = (x, y, z)
的系数。
使用上面步骤2中提到的转换的反转来计算x^2 + y^2 + z^2 = r^2
。