请手动输入数据return 0;
}
in>>b.name1;
in>>b.name2;
in>>b.X;
in>>b.name3;
in>>b.Y;
in>>b.name4;
in>>b.Z;
in.close();
return 1;
}
////////////////////////////////////////////////////////
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;
}
///////////////////////////////////////////////////////////
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;
}
/////////////////////////////////////////// jianpan(BLH &a)
{cout<<\"请输入大地坐标B \"<cin>>a.B;cout<<\"请输入大地坐标L \"<cin>>a.L;cout<<\"请输入大地坐标H \"<cin>>a.H;键盘输入B,L,H
}
///////////////////////////////////////// 键盘输入X,Y,Z
jianpan1(XYZ &a)
{
cout<<\"请输入空间直角坐标X \"<cin>>a.X;cout<<\"请输入空间直角坐标Y \"<cin>>a.Y;cout<<\"请输入空间直角坐标Z \"<cin>>a.Z;}
////////////////////////////////////////////////////// 间直角坐标系
double B_X(BLH &a)
大地坐标系换算到空
{double aa[MAX][MAX];
double a1,b1,N,E1,X,Y,Z;
int k,n,m;
char outfilename[20],fname[20];
cout<<\"请选择:\"<cout<<\"2:键盘输入\"<cin>>m;if(m==1)
{cout<<\"请输入文件名\"<cin>>fname;if(FILEIN(a,fname));
else
//选择数据输入方式
{if(jianpan(a));
else
{cout<<\"输入有误,程序中止,请重新运行\"<return false;}
}
}
else if(m==2)
jianpan(a);
else
{cout<<\"输入代码有误,程序中止,请重新运行\"<return false;}if(a.B<-90||a.B>90)
{cout<<\"输入B有误,程序中止,请重新运行\"<return false;}if(a.L<0||a.L>360)
{cout<<\"输入L有误,程序中止,请重新运行\"<return false;}if(a.H<0)
{cout<<\"输入H有误,程序中止,请重新运行\"<return false;}aa[0][0]=6378245.0000000000; aa[0][1]=6356863.0187730473;
aa[1][0]=6378140.0000000000; aa[1][1]=6356755.2881575287;
aa[2][0]=6378137.0000000000; aa[2][1]=6356752.3142;
aa[3][0]=6378137.000; aa[3][1]=6356752.314;
cout<<\"请选择椭球体\"<cout<<\"0: 克拉索夫斯基椭球体\"<cout<<\"1: 1975年国际椭球体\"<cout<<\"2: WGS-84椭球体\"<cout<<\"3: 2000中国大地坐标系\"<cin>>k;if(k!=0&&k!=1&&k!=2&&k!=3)
{cout<<\"输入代码有误,程序中止,请重新运行\"<return false;}cout<a1=aa[k][0];b1=aa[k][1];
E1=(a1*a1-b1*b1)/(a1*a1);
a.B=d_h(a.B);
a.L=d_h(a.L);
N=a1/sqrt(1-E1*sin(a.B)*sin(a.B));
X=(N+a.H)*cos(a.B)*cos(a.L);
Y=(N+a.H)*cos(a.B)*sin(a.L);
Z=(N*(1-E1)+a.H)*sin(a.B);
cout<<\"转换后的空间直角坐标是:\"<cout<<\"X \"<cout<<\"Y \"<cout<<\"Z \"<cout<<\"要保存数据吗?\"<cout<<\"1:保存\"<cout<<\"2不保存\"<cin>>n;//屏
if(n==1)
{cout<<\"请输入保存的文件名\"<cin>>outfilename;ofstream out(outfilename);
out.precision(10);
if(!out) cout<<\"can not open save file!\"<out<<\"空间直角坐标\"<out<<\"X\"<out<out<<\"Y\"<out<out<<\"Z\"<out<out.close();}
else if(n==2);
else
{cout<<\"输入代码有误,程序中止,请重新运行\"<return false;}cout<<\" 谢谢您使用龚晓鹏编的程序,所有任务均已完成,欢迎下次使用,祝生活愉快 \"<}////////////////////////////////////////////////////////
////////////////////////////////////////////////////////// 空间直角坐标系换算到大地坐标系
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<<\"请选择:\"<cout<<\"1:文件输入\"<cout<<\"2:键盘输入\"<cin>>m;if(m==1)
{cout<<\"请输入文件名\"<cin>>fname;if(FILEIN1(a,fname));
else
{if(jianpan1(a));
else
{cout<<\"输入有误,程序中止,请重新运行\"<return false;}
}
}
else if(m==2)
jianpan1(a);
else
{cout<<\"输入代码有误,程序中止,请重新运行\"<return false;}aa[0][0]=6378245.0000000000; aa[0][1]=6356863.0187730473;
aa[1][0]=6378140.0000000000; aa[1][1]=6356755.2881575287;
aa[2][0]=6378137.0000000000; aa[2][1]=6356752.3142;
aa[3][0]=6378137.000; aa[3][1]=6356752.314;
cout<<\"请选择椭球体\"<cout<<\"0: 克拉索夫斯基椭球体\"<cout<<\"1: 1975年国际椭球体\"<cout<<\"2: WGS-84椭球体\"<cout<<\"3: 2000中国大地坐标系\"<cin>>k;if(k!=0&&k!=1&&k!=2&&k!=3)
{cout<<\"输入代码有误,程序中止,请重新运行\"<return false;}a1=aa[k][0];
b1=aa[k][1];
//
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])));
B=atan(tanB[i+1][0]);
i++;
}while(B-B0>0.000000000000001);
cout<N=a1/sqrt(1-E1*sin(B)*sin(B));
H=sqrt(a.X*a.X+a.Y*a.Y)/cos(B)-N;
B=h_d(B);
L=h_d(L);
if(a.X<0&&a.Y<0)
L=180+L;
else if(a.X<0&&a.Y>0)
L=180+L;
else if(a.X>0&&a.Y<0)
L=360+L;
cout<<\"转换后的//屏幕输出结果
cout<<\"B \"<cout<<\"L \"<cout<<\"H \"<cout<<\"要保存数据吗?\"<cout<<\"1:保存\"<cout<<\"2不保存\"<大地坐标是:\"<cin>>n;if(n==1)
{cout<<\"请输入保存的文件名\"<cin>>outfilename;ofstream out(outfilename);
out.precision(15);
if(!out) cout<<\"can not open save file!\"<out<<\"空间直角坐标\"<out<<\"B\"<out<out<<\"L\"<out<out<<\"H\"<out<out.close();}else if(n==2);
else
{cout<<\"输入代码有误,程序中止,请重新运行\"<return false;}cout<<\" 谢谢您使用龚晓鹏编的程序,所有任务均已完成,欢迎下次使用,祝生活愉快 \"<}/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////
main()
{cout.precision(15);
int m;
BLH a;
XYZ b;
cout<<\"请选择:\"<cout<<\"1,大地坐标系转换成空间直角坐标系\"<cout<<\"2,空间直角坐标系转换成大地坐标系\"<cin>>m;if(m==1)
B_X(a);
else if(m==2)
X_B(b);
else cout<<\"输入代码有误,程序中止,请重新运行\";
}