GNSS仰角和方位角的計算及代碼,XYZ轉BLH坐標的代碼及原理


function [E,A]= Get_EA(sx,sy,sz,x,y,z)
%GET_EA Summary of this function goes here
%sx,sy,sz:站點的XYZ坐標,x,y,z:衛星的XYZ坐標
%   Detailed explanation goes here
[sb,sl]=XYZtoBLH(sx,sy,sz);
T=[-sin(sb)*cos(sl) -sin(sb)*sin(sl) cos(sb);
    -sin(sl)               cos(sl)         0;
    cos(sb)*cos(sl) cos(sb)*sin(sl)  sin(sb)];%transition matrix(XYZ to NEU)
deta_xyz=[x,y,z]-[sx,sy,sz];
NEU=T*(deta_xyz)';
E=atan(NEU(3)/sqrt(NEU(1)*NEU(1)+NEU(2)*NEU(2)));
A=atan(abs(NEU(2)/NEU(1)));
if NEU(1)>0
    if NEU(2)>0
    else
        A=2*pi-A;
    end
else
    if NEU(2)>0
        A=pi-A;
    else
        A=pi+A;
    end 
end
end

計算仰角\(E\)和方位角\(A\)的公式:

\[E=arctan\left(\frac{cos(\phi_2-\phi_1)\times cos\beta-0.15}{\sqrt{1-\left[cos(\phi_2-\phi_1)\times cos\beta\right]^2}}\right)\tag{1} \]

\[A=arctan\left(\frac{tan(\phi_2-\phi_1)}{sin\beta}\right)\tag{2} \]

對於輸入時是XYZ坐標的衛星位置和接收機位置還要進行坐標轉換

先將接收機位置的XYZ坐標轉換成大地坐標系(BLH),轉換公式為:

\[L=arctan\left(\frac{Y}{X}\right)\tag{3} \]

\[B=arctan\left(\frac{Z(N+H)}{\sqrt{(X^2+Y^2)[N(1-e^2)+H]}}\right)\tag{4} \]

\[H=\frac{Z}{sinB}-N(1-e^2)\tag{5} \]

\(N\)為卵冒圈的半徑,\(e\)表示橢球扁率,\(a\)\(b\)分別表示長半軸和短半軸。

\[N=\frac{a}{\sqrt{1-e^2sin^2B}},\ \ e^2=a^2-b^2\tag{6} \]

利用上面的式子有一個問題就是式\((4)​\)\((5)​\)中有交叉變量。因此一般采用下面的方法迭代計算:

  • 首先計算出\(B\)的初值

    \[B=arctan\left(\frac{Z}{\sqrt{X^2+Y^2}}\right)\tag{7} \]

  • 然后利用\(B\)的初值求出\(H、N\)的初值,再求定\(B\)的值

    \[N=\frac{a}{\sqrt{1-e^2sin^2B}}\tag{8} \]

XYZ坐標轉換為BLH坐標的matlab程序為:

function [B,L] = XYZtoBLH(X,Y,Z)
%WGS84坐標轉換到大地經緯度
%   Detailed explanation goes here
a=6378137;
e2=0.0066943799013;
L=atan(abs(Y/X));
if Y>0
    if X>0
    else
        L=pi-L;
    end
else
    if X>0
        L=2*pi-L;
    else
        L=pi+L;
    end
end
B0=atan(Z/sqrt(X^2+Y^2));
while 1
    N=a/sqrt(1-e2*sin(B0)*sin(B0));
    H=Z/sin(B0)-N*(1-e2);
    B=atan(Z*(N+H)/(sqrt(X^2+Y^2)*(N*(1-e2)+H)));
    if abs(B-B0)<1e-6;break;end
    B0=B;
end
N=a/sqrt(1-e2*sin(B)*sin(B));
end

也可以采用如下的方法直接轉換

\[L=arctan(\frac{Y}{X})\tag{9} \]

\[e'^2=\frac{a^2-b^2}{b^2},\ \ \ \theta=arctan\left(\frac{Z·a}{\sqrt{X^2+Y^2}·b}\right)\tag{10} \]

\[B=arctan\left(\frac{Z+e'^2bsin^3\theta}{\sqrt{X^2+Y^2}-e'^2acos^3\theta}\right)\tag{11} \]

\[H=\frac{\sqrt{X^2+Y^2}}{cosB}-N\tag{12} \]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM