大地坐标与空间坐标的互相转换__

  • 格式:docx
  • 大小:19.85 KB
  • 文档页数:3

下载文档原格式

  / 3
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

大地坐标向空间坐标转换和空间坐标向大地坐标转换的

#include

#include

void main()

{

float a=6378137.000,b=6356752.3142,E=0.006694379990,pi=3.14159265;

float B,L,N,H,X,Y ,Z;

float K,t0,t1,t2,P;

int i;

float B1,B2,B3,L1,L2,L3;

printf(" 如果向进行大地坐标向空间坐标转换请输入1,进行空间坐标向大地坐标转换请

输入0");

scanf("%d",&i);

if(i)

{

printf(" 请输入经度:B1,B2,B3");

scanf("%f%f%f",&B1,&B2,&B3);

B=(B1+B2/60+B3/3600)*pi/180;

printf(" 请输入纬度:L1,L2,L3"); scanf("%f%f%f",&L1,&L2,&L3);

L=(L1+L2/60+L3/3600)*pi/180;

printf(" 请输入大地高:H");

scanf("%f",&H);

N=a/sqrt(1-E*sin(B)*sin(B));

X=(N+H)*cos(B)*cos(L);

Y=(N+H)*cos(B)*sin(L);

Z=(N*(1-E)+H)*sin(B);

printf("X=%f\n",X);

printf("Y=%f\n",Y);

printf("Z=%f\n",Z);

}

else

{printf(" 请输入空间坐标:X,Y,Z");

scanf("%f%f%f",&X,&Y ,&Z);

L=atan(Y/X)*180/pi;

L1=int(L);

L2=int((L-L1)*60);

L3=int(((L-L1)*60-L2)*60);

printf(" 大地经度:L1=%f,L2=%f,L3=%f\n",L1,L2,L3 ); t0=Z/sqrt(X*X+Y*Y);

t1=t0;

K=1+E;

P=E*a*a/b/sqrt(X*X+Y*Y);

t2=t0+P*t1/sqrt(K+t1*t1);

while(abs(t2-t1)>1E-100)

{t1=t2;

t2=t0+P*t1/sqrt(K+t1*t1);

}

B=atan(t1)*180/pi;

B1=int(B);

B2=int((B-B1)*60);

B3=int(((B-B1)*60-B2)*60);

printf(" 大地纬度:B1=%f,B2=%f,B3=%f\n",B1,B2,B3 ); N=a/sqrt(1-E*sin(B)*sin(B));

B=B*pi/180;

H=sqrt(X*X+Y*Y)/cos(B)-N; printf(" 大地高:H:\n");

printf("%f\n",H);} }