基于matlab的大地坐标与直角坐标间的转换文档格式.docx
- 文档编号:20659976
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:6
- 大小:39.25KB
基于matlab的大地坐标与直角坐标间的转换文档格式.docx
《基于matlab的大地坐标与直角坐标间的转换文档格式.docx》由会员分享,可在线阅读,更多相关《基于matlab的大地坐标与直角坐标间的转换文档格式.docx(6页珍藏版)》请在冰豆网上搜索。
长半轴a=6378137
扁率f=1/298.257223563
根据上式创建以geo2xyz命名的函数,函数输入输出格式为
[x,y,z]=geo2xyz(L,B,h)
2、空间直角坐标向大地坐标换算
根据式
(1)推导大地坐标向空间直角坐标转换公式:
注意计算纬度时需要用到迭代,可用
作为初始值。
创建以xyz2geo命名的函数,函数输入输出格式为
[L,B,h]=xyz2geo(x,y,z)
三、实验步骤
主程序:
%%大地坐标向空间直角坐标换算
%函数的输入输出格式为[x,y,z]=geo2xyz(L,B,h)
[filename,pathname]=uigetfile('
*.txt'
'
请选择打开的数据文件'
);
file=[pathname,filename];
data=importdata(file);
L=data.data(:
1);
B=data.data(:
2);
h=data.data(:
3);
[x,y,z]=geo2xyz(L,B,h);
A=[x,y,z];
A=A'
;
[filename_out,pathname_out]=uiputfile('
请选择要输出数据文件'
fileout=[pathname_out,filename_out];
fid=fopen(fileout,'
wt'
fprintf(fid,'
xyz\n'
%15.7f%15.7f%15.7f\n'
A);
close('
all'
函数:
function[x,y,z]=geo2xyz(L,B,h)
%大地坐标经纬度转换成空间直角坐标
B=dms2rad(B);
L=dms2rad(L);
a=6378137;
%a是长半轴
f=1/298.257223563;
%f是扁率
b=a-a*f;
e=sqrt(a^2-b^2)/a;
N=a./(sqrt(1-e^2.*(sin(B)).^2));
%N为卯酉圈半径率,e为第一偏心率
x=(N+h).*cos(B).*cos(L);
y=(N+h).*cos(B).*sin(L);
z=(N*(1-e^2)+h).*sin(B);
end
functionrad=dms2rad(jiaodu)
%度分秒->
弧度(rad)
degree=fix(jiaodu);
mimute=fix((jiaodu-degree)*100);
second=(jiaodu-degree-mimute/100)*10000;
degree=degree+mimute/60+second/3600;
rad=degree/180*pi;
%%将文件data.2.txt中的空间直角坐标系转换为大地坐标,并将计算结果按照格式存储在文件data3.txt中
%data3.txt格式为:
经度(ddmmss)纬度(ddmmss)大地高
[filename,pathname]=uigetfile('
file=[pathname,filename];
data=importdata(file);
x=data.data(:
y=data.data(:
z=data.data(:
[L,B,H]=xyz2geo(x,y,z);
经度(ddmmss)纬度(ddmmss)大地高\n'
%10.7f%10.7f%7.3f\n'
[L,B,H]'
fclose('
function[L,B,H]=xyz2geo(x,y,z)
%将直角坐标转换为大地坐标
%%已知:
WGS-84椭球参数
%扁率f=(a-b)/a
%长半轴
b=a*(1-f);
%短半轴
e=(sqrt(a^2-b^2))/a;
%第一偏心率
%%经度L的计算
L=atan2(y,x);
L=rad2dms(L);
%%纬度B的计算
B0=atan2((a*z),(b.*sqrt(x.^2+y.^2)));
%B初始值
while1
N=a./(sqrt(1-(e^2).*(sin(B0).^2)));
%卯酉圈曲率半径N
B=atan2(z+N.*(e^2).*sin(B0),(sqrt(x.^2+y.^2)));
ifabs(B0-B)<
10^-6
break;
end
abs(B0-B)
B0=B;
%%大地高H的计算
H=(sqrt(x.^2+y.^2))./cos(B)-N;
B=degree2dms(B.*180/pi);
%纬度B
End
functiondms=degree2dms(jiaodu)
%度->
度分秒(dd.mmss)
degree=fix(jiaodu);
mimute=fix((jiaodu-degree)*60);
second=((jiaodu-degree)*60-mimute)*60;
dms=degree+mimute/100+second/10000;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 matlab 大地 坐标 直角坐标 转换