大地坐标系与大地空间坐标系的相互转换
//白鑫
//2016.11.20
//大地坐标系与大地空间坐标系的相互转换
#include
#include
#include
using namespace std;
#define pi 3.14159265
//54坐标系
#define a1 6378245.0000
#define ee1 0.[1**********]297
//1980西安
#define a2 6378140.0000
#define ee2 0.[1**********]959
//2000
#define a3 6378137.0000
#define ee3 0.[1**********]290
//由大地坐标系计算大地空间坐标系
void qiu_XYZ()
double X,Y,Z; double B_du,L_du;//B L 度数 double B_fen,B_miao,L_fen,L_miao;//B L 的分和秒 用于临时输入进行转换 double H;//大地高H double W1,N1,W2,N2,W3,N3; //辅助量 //输入B 的度分秒 cout>B_du;cout>B_fen;cout>B_miao; //将度分秒转换为度 B_du=pi*(B_du+B_fen/60+B_miao/3600)/180; cout>L_du;cout>L_fen;cout>L_miao; L_du=pi*(L_du+L_fen/60+L_miao/3600)/180; //输入大地高 cout>H; //辅助函数 W1=sqrt(1-ee1*sin(B_du)*sin(B_du)); N1=a1/W1; W2=sqrt(1-ee2*sin(B_du)*sin(B_du)); N2=a2/W2;
N3=a3/W3; //北京51坐标系 X=(N1+H)*cos(B_du)*cos(L_du); Y=(N1+H)*cos(B_du)*sin(L_du); Z=(N1*(1-ee1)+H)*sin(B_du); cout
//西安80坐标系 X=(N2+H)*cos(B_du)*cos(L_du); Y=(N2+H)*cos(B_du)*sin(L_du); Z=(N2*(1-ee2)+H)*sin(B_du); cout
//2000坐标系 X=(N3+H)*cos(B_du)*cos(L_du); Y=(N3+H)*cos(B_du)*sin(L_du); Z=(N3*(1-ee3)+H)*sin(B_du); cout
13位长度的X 、Y 、Z
}
//由大地空间坐标系计算大地坐标系
void qiu_LBH()
{
);
); B_du2=atan(((a1*ee1*sin(B_du1))/sqrt(1-ee1*pow(sin(B_du1),2))+Z)/(sqrt(X*X+Y*Y))while(fabs(B_du2-B_du1)>pow(10,-6)) { B_du1=B_du2; double X,Y,Z; double B_du1,B_du2,L_du;//B L 度数 double B_fen,B_miao,L_fen,L_miao;//B L 的分和秒 用于临时输入进行转换 double H;//大地高H double W1,N1,W2,N2,W3,N3; //辅助量 cout>X;cout>Y;cout>Z; //北京54 B_du1=atan(Z/sqrt(X*X+Y*Y));//跌倒初值B B_du2=atan(((a1*ee1*sin(B_du1))/sqrt(1-ee1*pow(sin(B_du1),2))+Z)/(sqrt(X*X+Y*Y))
//L值 H 值 L_du=atan(Y/X); H=sqrt(X*X+Y*Y)/cos(B_du2)-a1/sqrt(1-ee1*pow(sin(B_du2),2)); B_du2=B_du2*180/pi;//将弧度转化为度数 L_du=L_du*180/pi; B_fen=(B_du2-(int)B_du2)*60;B_miao=(B_fen-(int)B_fen)*60;//将度数小数部分装换为分和秒
L_fen=(L_du-(int)L_du)*60;L_miao=(L_fen-(int)L_fen)*60; cout
cout
);
while(fabs(B_du2-B_du1)>pow(10,-6)) { cout
);
B_du2=atan(((a2*ee2*sin(B_du1))/sqrt(1-ee2*pow(sin(B_du1),2))+Z)/(sqrt(X*X+Y*Y))} //L值 H 值 L_du=atan(Y/X); H=sqrt(X*X+Y*Y)/cos(B_du2)-a2/sqrt(1-ee2*pow(sin(B_du2),2)); B_du2=B_du2*180/pi;//将弧度转化为度数 L_du=L_du*180/pi; B_fen=(B_du2-(int)B_du2)*60;B_miao=(B_fen-(int)B_fen)*60;//将度数小数部分装换为分和秒
L_fen=(L_du-(int)L_du)*60;L_miao=(L_fen-(int)L_fen)*60; cout
cout
cout
);
);
while(fabs(B_du2-B_du1)>pow(10,-6)) { B_du1=B_du2; B_du2=atan(((a3*ee3*sin(B_du1))/sqrt(1-ee3*pow(sin(B_du1),2))+Z)/(sqrt(X*X+Y*Y))} //L值 H 值 L_du=atan(Y/X); H=sqrt(X*X+Y*Y)/cos(B_du2)-a3/sqrt(1-ee3*pow(sin(B_du2),2)); B_du2=B_du2*180/pi;//将弧度转化为度数 L_du=L_du*180/pi; B_fen=(B_du2-(int)B_du2)*60;B_miao=(B_fen-(int)B_fen)*60;//将度数小数部分装换为分和秒
L_fen=(L_du-(int)L_du)*60;L_miao=(L_fen-(int)L_fen)*60; cout
cout
} int main()
{
inti; cout大地空间坐标系 请输入1"大地坐标系 请输入2:" ;
cin>>i; cout