大地坐标系和空间直角坐标系转换

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
aa[2][0]=6378137.0000000000; aa[2][1]=6356752.3142;
aa[3][0]=6378137.000; aa[3][1]=6356752.314;
cout<<"请选择椭球体"<<endl;
cout<<"0:克拉索夫斯基椭球体"<<endl; //选择椭球体
cout<<"1: 1975年国际椭球体"<<endl;
return false;}
cout<<"谢谢您使用龚晓鹏编的程序,所有任务均已完成,欢迎下次使用,祝生活愉快"<<endl;
}
////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////空间直角坐标系换算到大地坐标系
Z=(N*(1-E1)+a.H)*sin(a.B);
cout<<"转换后的空间直角坐标是:"<<endl; //屏幕输出结果
cout<<"X "<<X<<endl;
cout<<"Y "<<Y<<endl;
cout<<"Z "<<Z<<endl;
cout<<"要保存数据吗?"<<endl;
cout<<"1:保存"<<endl;
cout<<"2: WGS-84椭球体"<<endl;
cout<<"3: 2000中国大地坐标系"<<endl;
cin>>k;
if(k!=0&&k!=1&&k!=2&&k!=3)
{cout<<"输入代码有误,程序中止,请重新运行"<<endl;
return false;}
cout<<a.B<<endl;
return false;
}
}
}
else if(m==2)
jianpan1(a);
else
{cout<<"输入代码有误,程序中止,请重新运行"<<endl;
return false;}
aa[0][0]=6378245.0000000000; aa[0][1]=6356863.0187730473;
aa[1][0]=6378140.0000000000; aa[1][1]=6356755.2881575287;
double FILEIN1(XYZ &b,char *fname)
{
ifstream in(fname,ios::nocreate); //建立文件流,并与输入文件名建立关联
if(!in)
{
cout<<fname<<" error: file does not exist! "<<endl;
cout<<"--------------------------请手动输入数据-------------------------\n"<<endl;
reቤተ መጻሕፍቲ ባይዱurn false;}
if(a.B<-90||a.B>90)
{cout<<"输入B有误,程序中止,请重新运行"<<endl;
return false;}
if(a.L<0||a.L>360)
{cout<<"输入L有误,程序中止,请重新运行"<<endl;
return false;}
if(a.H<0)
cin>>a.Z;
}
//////////////////////////////////////////////////////大地坐标系换算到空间直角坐标系
double B_X(BLH &a)
{double aa[MAX][MAX];
double a1,b1,N,E1,X,Y,Z;
int k,n,m;
struct BLH
{char name1[20];
char name2[20];
double B;
char name3[20];
double L;
char name4[20];
double H;
};
///////////////////////////////结构体存放X,Y,Z
struct XYZ
}
///////////////////////////////////////////键盘输入B,L,H
jianpan(BLH &a)
{cout<<"请输入大地坐标B "<<endl;
cin>>a.B;
cout<<"请输入大地坐标L "<<endl;
cin>>a.L;
cout<<"请输入大地坐标H "<<endl;
char outfilename[20],fname[20];
cout<<"请选择:"<<endl; //选择数据输入方式
cout<<"1:文件输入"<<endl;
cout<<"2:键盘输入"<<endl;
cin>>m;
if(m==1)
{cout<<"请输入文件名"<<endl;
cin>>fname;
B=atan(tanB[i+1][0]);
i++;
}while(B-B0>0.000000000000001);
cout<<i<<endl;
out<<"空间直角坐标"<<endl;
out<<"X"<<endl;
out<<X<<endl;
out<<"Y"<<endl;
out<<Y<<endl;
out<<"Z"<<endl;
out<<Z<<endl;
out.close();
}
else if(n==2);
else
{cout<<"输入代码有误,程序中止,请重新运行"<<endl;
double X_B(XYZ &a)
{double a1,b1,N,E1,B,L,H,B0,aa[MAX][MAX];
double tanB[MAX][1];
int i=0,n,k,m;
char outfilename[20],fname[20]; //选择数据输入方式
cout<<"请选择:"<<endl;
{char name1[20];
char name2[20];
double X;
char name3[20];
double Y;
char name4[20];
double Z;
};
/////////////////////////////////文件输入B,L,H
double FILEIN(BLH &b,char *fname)
cout<<"2不保存"<<endl;
cin>>n;
if(n==1)
{cout<<"请输入保存的文件名"<<endl; //文件输出结果
cin>>outfilename;
ofstream out(outfilename);
out.precision(10);
if(!out) cout<<"can not open save file!"<<endl;
E1=(a1*a1-b1*b1)/(a1*a1);
L=atan(a.Y/a.X);
tanB[0][0]=a.Z*(1+E1)/sqrt(a.X*a.X+a.Y*a.Y);
do{B0=atan(tanB[i][0]);
tanB[i+1][0]=(1/sqrt(a.X*a.X+a.Y*a.Y)*(a.Z+a1*E1*tanB[i][0]/sqrt(1+(1-E1)*tanB[i][0]*tanB[i][0])));
{
ifstream in(fname,ios::nocreate); //建立文件流,并与输入文件名建立关联
if(!in)
{
cout<<fname<<" error: file does not exist! "<<endl;
cout<<"--------------------------请手动输入数据-------------------------\n"<<endl;
return 0;
}
in>>1;
in>>2;
in>>b.X;
in>>3;
in>>b.Y;
in>>4;
in>>b.Z;
in.close();
return 1;
}
////////////////////////////////////////////////////////
cin>>a.H;
}
/////////////////////////////////////////键盘输入X,Y,Z
jianpan1(XYZ &a)
{
cout<<"请输入空间直角坐标X "<<endl;
cin>>a.X;
cout<<"请输入空间直角坐标Y "<<endl;
cin>>a.Y;
cout<<"请输入空间直角坐标Z "<<endl;
aa[2][0]=6378137.0000000000; aa[2][1]=6356752.3142;
aa[3][0]=6378137.000; aa[3][1]=6356752.314;
cout<<"请选择椭球体"<<endl; //选择椭球体
cout<<"0:克拉索夫斯基椭球体"<<endl;
cout<<"1: 1975年国际椭球体"<<endl;
double h_d(double angle) //弧度化角度
{
double a,b,c;
angle=modf(angle*180.0/(PI-3.0E-16),&a);
angle=modf(angle*60.0,&b);
angle=modf(angle*60.0,&c);
return a+b*0.01+c*0.0001+angle*0.0001;
if(FILEIN(a,fname));
else
{if(jianpan(a));
else
{cout<<"输入有误,程序中止,请重新运行"<<endl;
return false;
}
}
}
else if(m==2)
jianpan(a);
else
{cout<<"输入代码有误,程序中止,请重新运行"<<endl;
double d_h(double angle) //角度化弧度
{
double a,b;
angle=modf(angle,&a);
angle=modf(angle*100.0,&b);
return (a+b/60.0+angle/36.0)*(PI+3.0E-16)/180.0;
}
///////////////////////////////////////////////////////////
return 0;
}
in>>1;
in>>2;
in>>b.B;
in>>3;
in>>b.L;
in>>4;
in>>b.H;
in.close();
return 1;
}
////////////////////////////////////////////////文件输入X,Y,Z
cout<<"2: WGS-84椭球体"<<endl;
cout<<"3: 2000中国大地坐标系"<<endl;
cin>>k;
if(k!=0&&k!=1&&k!=2&&k!=3)
{cout<<"输入代码有误,程序中止,请重新运行"<<endl;
return false;}
a1=aa[k][0];
b1=aa[k][1];
#include<math.h>
#include<string.h>
#include<iostream.h>
#include<fstream.h>
#define MAX 100
#define PI 3.1415926
///////////////////////////////////结构体存放B,L,H
{cout<<"输入H有误,程序中止,请重新运行"<<endl;
return false;}
aa[0][0]=6378245.0000000000; aa[0][1]=6356863.0187730473;
aa[1][0]=6378140.0000000000; aa[1][1]=6356755.2881575287;
a1=aa[k][0];
b1=aa[k][1];
E1=(a1*a1-b1*b1)/(a1*a1);
a.B=d_h(a.B);
相关文档
最新文档