Matlabを使用して測地座標と測地での測地直交座標を変換する

1.概要

測地座標系は、地球の経度L、地球の緯度B、地球の高さHが空間内の点の幾何学的位置を表す座標系です。地球の経度は、始点の地球の子午線から測定され、東向きに0°から360°まで測定されます。東向きおよび西向きに測定することもできます。それぞれ0°〜180°で、それぞれ東経と西経と呼ばれます。西経は負です。
ポイントの法線と赤道面の間の角度は、ポイントの測地緯度と呼ばれ、Bで表されます。地球の緯度は赤道面から測定され、南極と北極からそれぞれ0°から90°で測定されます。これらはそれぞれ南緯と北緯と呼ばれます。北緯は正、南緯は負です。
法線に沿った地上ポイントから参照楕円体までの距離は、ポイントの地上高と呼ばれ、文字Hで表されます。地球の高さは楕円面から計算され、外側が正、内側が負です。
測地空間の直交座標系は、楕円の中心Oを座標の原点とし、開始子午面と赤道面の交点をX軸とし、赤道面のX軸に直交する方向をY軸とし、楕円体の回転軸はZ軸は、右手系の座標系O-XYZを構成します。

ここに画像の説明を挿入
図1測地座標系と測地空間の直交座標系

2.既知のポイント(B、L、H)の測地座標ポイント(X、Y、Z)の空間直交座標を計算します

必要な式:
X =(N + H)cos(B)cos(L)
Y =(N + H)cos(B)sin(L)
Z = [N(1-e 2)+ H] * sin( B)
ここで、Nは通常の長さN = a / W
Wは補助式W = sqrt((1-e 2)sin 2 B)

計算要件:
この例では、GRS80楕円体パラメーターが計算に使用され、最終結果がメートル単位で画面に出力され、小数点以下3桁が保持されます
(度、分、秒、ラジアン関数が最初に書き込まれます)。

matlabソースプログラムは次のとおりです。

度、分、秒からラジアン関数

function rad=d2r(deg,min,sec)
    %    角度转弧度
    rad=(deg+min/60+sec/3600)*pi/180;

メインプログラム

clear
clc
b=d2r(33,44,55.666);
l=d2r(77,11,22.333);
h=5555.660;   %经纬度
a=6378137;f=1/298.257222101;e2=2*f-f^2;   %GRS80椭球参数
W=sqrt(1-e2*(sin(b))^2);
N=a/W;
X=(N+h)*cos(b)*cos(l);
Y=(N+h)*cos(b)*sin(l);
Z=(N*(1-e2)+h)*sin(b);
fprintf('\nX=%.3fm\nY=%.3fm\nZ=%.3fm\n',X,Y,Z);

2.測地座標(B、L、H)を計算するための測地空間の直交座標(X、Y、Z)を把握する

必要な式:
tan(L)= Y / X、次にL = atan(Y / X)
tan(B)= 1 / sqrt(X 2 + Y 2)*(Z + ae 2 tanB / sqrt(1 + tan 2 B-e 2 tan 2 B))
ここでは、Bの値を計算するために反復アルゴリズムを使用する必要があります。最初に初期値tan(B0)= Z / sqrt(X 2 + Y 2)をとり
収束条件は2回の絶対値です。差は5×10 -10未満(つまり、2回計算されたBの絶対値の差は0.0001″未満です)、反復は停止できます

H = Z / sinB-N(1-e 2
ここで、Nは通常の長さN = a / W
Wは補助的な式ですW = sqrt((1-e 2)sin 2 B)

計算要件:
この例では、CGCS2000楕円体パラメーターが計算に使用され、次数は小数として表示されます。つまり、
B = 30°12′29″はB = 30.122900000(秒は小数第5桁を保持)として表示され、
標高は小数
3桁を保持します(最初に記述)ラジアンから角度への関数)

matlabソースプログラムは次のとおりです。

ラジアンを角度にして出力形式を決定する

function deg=r2d(rad)
    %   弧度转角度
    rad1=rad*180/pi;
    deg1=fix(rad1);
    min=fix((rad1-deg1)*60);
    sec=((rad1-deg1)*60-min)*60;
    deg=deg1+min/100+sec/10000;

メインプログラム

clear
clc
X=-2109101.506+500*29;
Y=4843022.866+500*29;
Z=3562987.896+500*29;     %空间直角坐标
a=6378137;f=1/298.257222101;e2=2*f-f^2;    %CGCS2000椭球参数
l=atan(Y/X);
L=r2d(l);
tanb0=Z/(sqrt(X^2+Y^2));
tanb1=(1/sqrt(X^2+Y^2))*(Z+(a*e2*tanb0)/(sqrt(1+tanb0^2-e2*tanb0^2)));
while abs(tanb1-tanb0)>=1e-7
    tanb0=tanb1;
    tanb1=(1/sqrt(X*X+Y*Y))*(Z+(a*e2*tanb0)/(sqrt(1+tanb0^2-e2*tanb0^2)));
end
b=atan(tanb1);
B=r2d(b);
W=sqrt(1-e2*(sin(b)^2));
N=a/W;
H=(sqrt(X^2+Y^2)/cos(b))-N;
fprintf('\nB=%.9f\nL=%.9f\nH=%.3f\n',B,L,H);

間違いがあったら訂正してください

元の13件の記事を公開 いいね32 10,000+を訪問

おすすめ

転載: blog.csdn.net/weixin_43637490/article/details/89371315