大地坐标与空间直角坐标的转换程序代码

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

#include "stdio.h"

#include "math.h"

#include "stdlib.h"

#include "iostream"

#define PI 3.1415926535897323

double a,b,c,e2,ep2;

int main()

{

int m,n,t;

double RAD(double d,double f,double m);

void RBD(double hd);

void BLH_XYZ();

void XYZ_BLH();

void B_ZS();

void B_FS();

void GUS_ZS();

void GUS_FS();

printf(" 大地测量学\n");

sp1:printf("请选择功能:\n");

printf("1.大地坐标系到大地空间直角坐标的转换\n");

printf("2.大地空间直角坐标到大地坐标系的转换\n");

printf("3.贝塞尔大地问题正算\n");

printf("4.贝塞尔大地问题反算\n");

printf("5.高斯投影正算\n");

printf("6.高斯投影反算\n");

printf("0.退出程序\n");

scanf("%d",&m);

if(m==0)exit(0);

sp2:printf("请选择椭球参数(输入椭球序号):\n");

printf("1.克拉索夫斯基椭球参数\n");

printf("2.IUGG_1975椭球参数\n");

printf("3.CGCS_2000椭球参数\n");

printf("0.其他椭球参数(自行输入)\n");

scanf("%d",&n);

switch(n)

{

case

1:a=6378245.0;b=6356863.0188;c=6399698.9018;e2=0.00669342162297;ep2=0.0067385254146 8;break;

case

2:a=6378140.0;b=6356755.2882;c=6399596.6520;e2=0.00669438499959;ep2=0.0067395018194 7;break;

case

3:a=6378137.0;b=6356752.3141;c=6399593.6259;e2=0.00669438002290;ep2=0.0067394967754 7;break;

case 0:{

printf("请输入椭球参数:\n");

printf("长半径a=");scanf("%lf",&a);

printf("短半径b=");scanf("%lf",&b);

c=a*a/b;

ep2=(a*a-b*b)/(b*b);

e2=(a*a-b*b)/(a*a);

break;

}

default:printf("\n\n输入错误!\n请重新输入!\n\n");goto sp2 ;

}

while(1)

{

switch(m)

{

case 1:BLH_XYZ();break;

case 2:XYZ_BLH();break;

case 3:B_ZS();break;

case 4:B_FS();break;

case 5:GUS_ZS();break;

case 6:GUS_FS();break;

default:printf("\n\n输入错误!\n请重新输入!\n\n");goto sp1 ;

}

printf("是否继续进行此功能计算? \n\n");

printf("(若继续进行此功能计算,则输入1;\n 若选择其他功能进行计算,则输入2;\n 若退出,则输入0. )\n");

scanf("%d",&t);

switch(t)

{

case 1:break;

case 2:goto sp1;

case 0:exit(0);

}

}

}

double RAD(double d,double f,double m)

{

double e;

double sign=(d<0.0)?-1.0:1.0;

if(d==0)

{

sign=(f<0.0)?-1.0:1.0;

if(f==0)

{

sign=(m<0.0)?-1.0:1.0;

}

}

if(d<0)

d=d*(-1.0);

if(f<0)

f=f*(-1.0);

if(m<0)

m=m*(-1.0);

e=sign*(d*3600+f*60+m)*PI/(3600*180);

return e;

}

void RBD(double hd)

{

int t;

int d,f;

double m;

double sign=(hd<0.0)?-1.0:1.0;

if(hd<0)

hd=fabs(hd);

hd=hd*3600*180/PI;

t=int(hd/3600);

d=sign*t;

hd=hd-t*3600;

f=int(hd/60);

m=hd-f*60;

printf("%d'%d'%lf'\n",d,f,m);

}

void BLH_XYZ()

{

double B,L,H,N,W;

double d,f,m;

double X,Y,Z;

printf(" 请输入大地坐标(输入格式为角度(例如:30'40'50')):\n");

相关文档
最新文档