⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wgs84tope90.m

📁 本程序设计了常用的几个坐标系的转换
💻 M
字号:
% WGS-84坐标转换成PE-90坐标
clear;
input('\n\ninput geography_84:');                                                   % 输入WGS-84坐标系下的地理坐标值
i=1;
while i<=6 
fprintf('\ni=%d \n',i);
phi_84(i)=input('\nphi_84(i)= ');                                                   % WGS-84下的纬度(度)
lamda_84(i)=input('\nlamda_84(i)= ');                                               % WGS-84下的经度(度)
H_84(i)=input('\nH_84(i)= ');                                                       % WGS-84下的高度(米)
a=6378137;                                                                          % WGS-84椭球体长半轴
f=1/298.257223563;                                                                  % WGS-84椭球体扁率
e=sqrt(0.00669437999013);                                                           % WGS-84椭球体第一偏心率
N=a/sqrt(1-e^2*(sin(phi_84(i)/180*pi))^2);                                          % N为卯酉圈曲率半径
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%WGS-84地理坐标转换成WGS-84直角坐标
X_84(i)=(N+H_84(i))*cos(phi_84(i)/180*pi)*cos(lamda_84(i)/180*pi);
Y_84(i)=(N+H_84(i))*cos(phi_84(i)/180*pi)*sin(lamda_84(i)/180*pi);
Z_84(i)=[N*(1-e^2)+H_84(i)]*sin(phi_84(i)/180*pi);
fprintf('\nX_84(i)=%.3f \n',X_84(i));                                               % 以小数形式输出,保留3位小数,且输出换行
fprintf('\nY_84(i)=%.3f \n',Y_84(i));
fprintf('\nZ_84(i)=%.3f \n',Z_84(i));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%WGS-84直角坐标转换成PE-90直角坐标
X_90(i)=1/(1+1.9e-6*1.9e-6)*[X_84(i)+1.9e-6*(Y_84(i)-2.5)];
Y_90(i)=1/(1+1.9e-6*1.9e-6)*[-1.9e-6*X_84(i)+(Y_84(i)-2.5)];
Z_90(i)=1/(1+1.9e-6*1.9e-6)*[(1+1.9e-6*1.9e-6)*Z_84(i)];
fprintf('\nX_90(i)=%.3f \n',X_90(i));                                           
fprintf('\nY_90(i)=%.3f \n',Y_90(i));
fprintf('\nZ_90(i)=%.3f \n',Z_90(i));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%PE-90直角坐标转换成PE-90地理坐标
lamda_90(i)=atan(Y_90(i)/X_90(i))*180/pi;                                            %保证lamda_90在0~180度内
if lamda_90(i)<0
    lamda_90(i)=180+lamda_90(i);
end
b=(1-f)*a;
N(1)=a;
H(1)=sqrt(X_90(i)^2+Y_90(i)^2+Z_90(i)^2)-sqrt(a*b);
phi(1)=atan(Z_90(i)/sqrt(X_90(i)^2+Y_90(i)^2)*(1-e^2*N(1)/(N(1)+H(1)))^(-1))*180/pi;
N(2)=a/sqrt(1-e^2*(sin(phi(1)*pi/180))^2);
H(2)=sqrt(X_90(i)^2+Y_90(i)^2)/cos(phi(1)*pi/180)-N(2);
phi(2)=atan(Z_90(i)/sqrt(X_90(i)^2+Y_90(i)^2)*(1-e^2*N(2)/(N(2)+H(2)))^(-1))*180/pi;
k=2;
while((abs(phi(k)-phi(k-1))>=(0.00001/(60*60)))|(abs(H(k)-H(k-1))>=0.001))
    k=k+1;
    N(k)=a/sqrt(1-e^2*(sin(phi(k-1)*pi/180))^2);
    H(k)=sqrt(X_90(i)^2+Y_90(i)^2)/cos(phi(k-1)*pi/180)-N(k);
    phi(k)=atan(Z_90(i)/sqrt(X_90(i)^2+Y_90(i)^2)*(1-e^2*N(k)/(N(k)+H(k)))^(-1))*180/pi;
end
phi_90(i)=phi(k);
H_90(i)=H(k);
fprintf('\nphi_90(i)=%f \n',phi_90(i));
fprintf('\nlamda_90(i)=%f \n',lamda_90(i));
fprintf('\nH_90(i)=%f \n',H_90(i));  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 输出两坐标系下的误差值
Delta_X(i)=abs(X_84(i)-X_90(i));
Delta_Y(i)=abs(Y_84(i)-Y_90(i));
Delta_Z(i)=abs(Z_84(i)-Z_90(i));
Delta_phi(i)=abs(phi_84(i)-phi_90(i));
Delta_lamda(i)=abs(lamda_84(i)-lamda_90(i));
Delta_H(i)=abs(H_84(i)-H_90(i));
fprintf('\nDelta_X(i)=%f \n',X_84(i)-X_90(i));                                                                                    
fprintf('\nDelta_Y(i)=%f \n',Y_84(i)-Y_90(i));
fprintf('\nDelta_Z(i)=%f \n',Z_84(i)-Z_90(i));
fprintf('\nDelta_phi(i)=%f \n',phi_84(i)-phi_90(i));                                       
fprintf('\nDelta_lamda(i)=%f \n',lamda_84(i)-lamda_90(i));
fprintf('\nDelta_H(i)=%f \n',H_84(i)-H_90(i));
i=i+1;
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -