给定lat,lon和heading,计算切向3D矢量

时间:2018-03-02 08:58:50

标签: geolocation geo

假设我有一个3D单位球体模型,我用

计算一个3D点
x = cos(lat) * cos(lon)
y = cos(lat) * sin(lon)
z = sin(lat)

现在假设我给出了一个以度为单位的罗盘,其中0表示朝向真北(纬度= 90°)。

如何计算与[x,y,z]正交的三维轴承矢量,即朝向罗盘轴承的切线矢量。

2 个答案:

答案 0 :(得分:0)

假设你有一个带有大地坐标lat,lon和笛卡尔坐标x,y,z的点P.另一个方便的坐标系是以地心为中心的坐标系,以P:(u,v,w)为中心,其中u向北是正向,v向东是正向,而在沿着P的切平面法线向上是正向。

以地心为中心和笛卡尔坐标由

相关联
(u) = M*(X-x)
(v) =   (Y-y)
(w) =   (Z-z)
where
M = ( 1  0 0) * Ry(lat-90) * Rz(lon-180)
    ( 0 -1 0)
    ( 0  0 1)
and Ry is the usual 3d rotation about the y axis etc

或走另一条路

(X) = (x) + N*(u)
(Y)   (y) +   (v)
(Z)   (z) +   (w)
where
N = Rz(180-lon)*Ry(90-lat)*(1  0 0)
                          (0 -1 0)
                          (0  0 1)

在以地心为中心的坐标中,罗盘角度为c的单位矢量为

( cos(c))
( sin(c))
( 0     )

如果您在上面应用N,您将在笛卡尔中获得相应的矢量。

答案 1 :(得分:0)

要定义问题,假设我们有一个点 Po =(Xo,Yo, Zo)在单位球上,我们想要找到 Po 的切线 朝向极点 N =(0,0,1)

我的解决方案使用了所述切线的参数化描述 辅助变量 a P = P(a)

The geometry of the problem

在上图中我们有

  • Z = 0 (左)的单位球的水平部分 可以看到点(Xo,Yo,0) a 轴:为方便起见 a 中心为<0> ,(Xo,Yo,0)为 a = 1 ;
  • 通过 Po 的单位球体(右)的垂直剖面, (0,0,0)(0,0,1) - 在底部你可以看到 a 轴 - 在本节中我们还可以看到请求的切线 传递给 Po 和点(0,0,Zp)其中,通过相似性 三角形,它是 Zp = 1 / Zo

在代码中,假设您的某个类Point类 背包,

def P_tan(a, Po):
    Xo, Yo, Zo = Po
    Xp, Yp, Zp = 0, 0, 1/Zo
    X = Xp + a*(Xo-Xp)         # X(0)=Xp, X(1)=Xo
    Y = Yp + a*(Yo-Tp)         # Y(0)=Yp, Y(1)=Yo
    Z = Zp + a*(Zo-Zp)         # Z(0)=Zp, Z(1)=Zo
    return Point(X, Y, Z)

如果我们对切线文字的组成部分更感兴趣

def tan_versor(Po):
    Xo, Yo, Zo = Po
    Xp, Yp, Zp = 0, 0, 1/Zo
    dX, dY, dZ = Xp-Xo, Yp-Yo, Zp-Zo 
    length = sqrt(dX**2+dY**2+dZ**2)
    return dX/length, dY/length, dZ/length,

请注意,定向线向外,而反面 走向最近的极点(由于 Zo 有一个符号......)。最后但是 尤其是, Zo = 0 需要特殊情况。