²âÁ¿³ÌÐòÉè¼Æ ʵÑ鱨¸æ
»»Ëã
ʵÑéÃû³Æ£º´óµØ×ø±êÓë¿Õ¼äÖ±½Ç×ø±êµÄ
ʵÑéËÄ ´óµØ×ø±êÓë¿Õ¼äÖ±½Ç×ø±êµÄ»»Ëã
Ò»¡¢ÊµÑéÄ¿µÄ
±àд´óµØ×ø±êÓë¿Õ¼äÖ±½Ç×ø±êÏ໥ת»»µÄ³ÌÐò£¬²¢¶Ô¸ñʽ»¯ÎļþÊý¾Ý½øÐмÆË㣬ÑéÖ¤³ÌÐò¡£ ¶þ¡¢ÊµÑéÄÚÈÝ£º
1¡¢´óµØ×ø±êÏò¿Õ¼äÖ±½Ç×ø±ê»»Ëã ת»»¹«Ê½£º
x?(N?h)cosBcosLy?(N?h)cosBsinL £¨1£© z?[N(1?e2)?h]sinBÆäÖУºLΪ¾¶È£¬BΪγ¶È£¬hΪ´óµØ¸ß£¬N?a1?esinB22ΪîÓÏȦÇúÂʰ뾶£¬
e?a2?b2ΪµÚһƫÐÄÂÊ£¬aΪÐýתÍÖÇò³¤°ëÖᣬbΪ¶Ì°ëÖá¡£ aWGS84ÍÖÇò²ÎÊý£º³¤°ëÖá a=6378137
±âÂÊ f = 1/298.257223563
¸ù¾ÝÉÏʽ´´½¨ÒÔgeo2xyzÃüÃûµÄº¯Êý£¬º¯ÊýÊäÈëÊä³ö¸ñʽΪ [x, y, z] = geo2xyz (L, B, h) 2¡¢¿Õ¼äÖ±½Ç×ø±êÏò´óµØ×ø±ê»»Ëã
¸ù¾Ýʽ£¨1£©ÍƵ¼´óµØ×ø±êÏò¿Õ¼äÖ±½Ç×ø±êת»»¹«Ê½£º
L?arctan(y/x)z?Ne2sinBB?arctan()
22x?yh?x2?y2?NcosBaz×¢Òâ¼ÆËãγ¶ÈʱÐèÒªÓõ½µü´ú£¬¿ÉÓÃB?arctan()×÷Ϊ³õʼֵ¡£
22bx?y´´½¨ÒÔxyz2geoÃüÃûµÄº¯Êý£¬º¯ÊýÊäÈëÊä³ö¸ñʽΪ [L, B, h] = xyz2geo (x, y, z)
Èý¡¢ÊµÑé²½Öè
1¡¢´óµØ×ø±êÏò¿Õ¼äÖ±½Ç×ø±ê»»Ëã Ö÷³ÌÐò£º
%%´óµØ×ø±êÏò¿Õ¼äÖ±½Ç×ø±ê»»Ëã
%º¯ÊýµÄÊäÈëÊä³ö¸ñʽΪ[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('*.txt','ÇëÑ¡ÔñÒªÊä³öÊý¾ÝÎļþ');
fileout = [pathname_out, filename_out]; fid = fopen(fileout,'wt');
fprintf(fid,' x y z\\n'); fprintf(fid,'.7f .7f .7f\\n',A); close('all');
º¯Êý£º
function [x,y,z]=geo2xyz(L,B,h) %´óµØ×ø±ê¾Î³¶Èת»»³É¿Õ¼äÖ±½Ç×ø±ê B=dms2rad(B); L=dms2rad(L); a=6378137; %aÊdz¤°ëÖá
f=1/298.257223563; %fÊDZâÂÊ 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
function rad=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; end
2¡¢¿Õ¼äÖ±½Ç×ø±êÏò´óµØ×ø±ê»»Ëã Ö÷³ÌÐò£º
%% ½«Îļþdata.2.txtÖеĿռäÖ±½Ç×ø±êϵת»»Îª´óµØ×ø±ê£¬²¢½«¼ÆËã½á¹û°´ÕÕ¸ñʽ´æ´¢ÔÚÎļþdata3.txtÖÐ
¨²ta3.txt¸ñʽΪ£º¾¶È£¨ddmmss£© γ¶È£¨ddmmss£© ´óµØ¸ß [filename,pathname]=uigetfile('*.txt','ÇëÑ¡Ôñ´ò¿ªµÄÊý¾ÝÎļþ'); file=[pathname,filename]; data=importdata(file); x=data.data(:,1); y=data.data(:,2); z=data.data(:,3);
[L,B,H]=xyz2geo(x,y,z);
[filename_out,pathname_out] = uiputfile('*.txt','ÇëÑ¡ÔñÒªÊä³öÊý¾ÝÎļþ');
fileout = [pathname_out, filename_out]; fid = fopen(fileout,'wt');
fprintf(fid,' ¾¶È(ddmmss£© γ¶È(ddmmss£© ´óµØ¸ß\\n'); fprintf(fid,'.7f .7f %7.3f\\n',[L,B,H]'); fclose('all');
º¯Êý£º
function [L,B,H]=xyz2geo(x,y,z) %½«Ö±½Ç×ø±êת»»Îª´óµØ×ø±ê %% ÒÑÖª:WGS-84ÍÖÇò²ÎÊý
f=1/298.257223563;%±âÂÊf=(a-b)/a a=6378137; %³¤°ëÖá 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³õʼֵ while 1
N=a./(sqrt(1-(e^2).*(sin(B0).^2))); %îÓÏȦÇúÂʰ뾶N B=atan2(z+N.*(e^2).*sin(B0),(sqrt(x.^2+y.^2))); if abs(B0-B)<10^-6 break; end
abs(B0-B) B0=B; end
%% ´óµØ¸ßHµÄ¼ÆËã
H=(sqrt(x.^2+y.^2))./cos(B)-N; B=degree2dms(B.*180/pi);%γ¶ÈB End
function dms= degree2dms(jiaodu) %¶È£>¶È·ÖÃ루dd.mmss£© degree = fix(jiaodu);
mimute = fix((jiaodu-degree)*60);
second = ((jiaodu-degree)*60-mimute)*60; dms = degree+mimute/100+second/10000;