📄 diff_lbh.m
字号:
function [LBH2] = diff_LBH(LBH1,type1,type2)
% diff_LBH 能对不同的大地坐标系进行互相转换(GDZ80,BJ54)
% LBH1(1:n,1:3)为输入,LBH2(1:n,1:3)为输出,LBH1(1:n,2)为纬度B,
% type1是输入大地系的类型(GDZ80,BJ54),type2是输出大地系的类型
n = size(LBH1,1);
if strcmp(type1,'BJ54')
a1 = 6378245; alpha1 = 1/298.3 ;
e21 = 2*alpha1-alpha1^2;
XYZ01 = [3 4 5]; % 原点的坐标,用于计算椭球平移参数
elseif strcmp(type1,'GDZ80')
a1 = 6378140; alpha1 = 1/298.257;
e21 = 2*alpha1-alpha1^2;
XYZ01 = [6 7 8]; % 原点的坐标,用于计算椭球平移参数
end
if strcmp(type2,'BJ54')
a2 = 6378245; alpha2 = 1/298.3 ;
e22 = 2*alpha2-alpha2^2;
elseif strcmp(type2,'GDZ80')
a2 = 6378140; alpha2 = 1/298.257;
e22 = 2*alpha2-alpha2^2;
end
if strcmp(type1,'BJ54')&strcmp(type2,'GDZ80')
dxyz = [111 -95 -75]; % GDZ80-BJ54
elseif strcmp(type1,'GDZ80')&strcmp(type2,'GDZ80')
dxyz = [-111 95 75];
end
da = a2-a1; dalpha = alpha2-alpha1;
N = a1./sqrt(1-e21.*sin(LBH1(1:n,2)).^2); % 卯酉圈曲率半径
M = a1*(1-e21)./sqrt((1-e21.*sin(LBH1(1:n,2)).^2).^3); % 子午圈曲率半径
for k = 1:n
A(1:3,1:3) = [ -sin(LBH1(k,1))/(N(k)+LBH1(k,2))*cos(LBH1(k,2)) cos(LBH1(k,1))/((N(k)+LBH1(k,3))*cos(LBH1(k,2))) 0;
-sin(LBH1(k,2))*cos(LBH1(k,1))/(M(k)+LBH1(k,3)) sin(LBH1(k,2))*sin(LBH1(k,1))/(M(k)+LBH1(k,3)) cos(LBH1(k,2))/(M(k)+LBH1(k,3));
cos(LBH1(k,2))*cos(LBH1(k,1)) cos(LBH1(k,2))*sin(LBH1(k,1)) sin(LBH1(k,2)); ];
B(1:3,1:2) = [ 0 0;
N(k)*e21*sin(LBH1(k,2))*cos(LBH1(k,2))/(a1*(N(k)+LBH1(k,3))) M(k)*(2-e21*sin(LBH1(k,2))^2)*sin(LBH1(k,2))*cos(LBH1(k,2))/((1-a1)*(M(k)+LBH1(k,3)));
-N(k)*(1-e21*sin(LBH1(k,2))^2)/a1 M(k)*(1-e21*sin(LBH1(k,2))^2)*sin(LBH1(k,2))^2/(1-a1); ];
dLBH(k,1:3) = ( A*dxyz'+B*[da dalpha]')' ; % 把dLBH由列向量化为行向量。dLBH为大地坐标修正量。
dLBH(k,1:2) = 206265.*dLBH(k,1:2); % 将dL,dB化为以弧度秒″为单位
LBH2(k,1:3) = LBH1(k,1:3)+dLBH(k,1:3); % 将原坐标值加上坐标修正值,即为新的坐标值。
end
% 测试数据 LBH1(1:4,1)=[20;21;22;23];LBH1(1:4,2)=[20;21;22;23];LBH1(1:4,3)=[100;120;140;160];
% type1='GDZ80',type2 = 'BJ54', [LBH2]=diff_LBH(LBH1,type1,type2)
%%%%%%%%%%%%%%%%%%%% *** last line of diff_LBH.m *** %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -