资源简介
高斯正反算C++源代码,能准确进行高斯正反换算
代码片段和文件信息
#include
#include
#define PI 3.14159265358979312
double BLxy;
void zs(double Bdouble Ldouble adouble e2double e12);
void fs(double xdouble yint mdouble adouble e2double e12);
/*double setf(double a int t)
{
double b=fabs(a);
for(int i=0;i b*=10;
if(b-floor(b)>0.5) b=floor(b)+1;
else b=floor(b);
for(i=0;i b/=10;
if(a<0) b=-b;
return b;
}*/
double dh(double angle)
{double ab;
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 hd(double angle)
{double abc;
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;
}
//*************************************************************************
void Gaussjisuan()
{
int style2style3nm;
double L0;
double abe2e12;
cout<<“------请选择参考椭球:--------“< cout<<“ 1 克拉索夫斯基椭球“< cout<<“ 2 1975年国际椭球“< cin>>style2;
cout.precision(17);
if(style2==1)
{ a=6378245.0000000000;
b=6356863.0187730473;
e2=0.006693421622966;
e12=0.006738525414683;
cout<<“ ------克拉索夫斯基椭球参数为:“< cout<<“ 长半轴a=“< cout<<“ 短半轴b=“< cout<<“ 第一偏心率e的平方e2=“< cout<<“ 第二偏心率e的平方e12=“< }
else
{a=6378140.0000000000;
b=6356755.2881575287;
e2=0.006694384999588;
e12=0.006739501819473;
cout<<“ ------1975年国际椭球参数为:“< cout<<“ 长半轴a=“< cout<<“ 短半轴b=“< cout<<“ 第一偏心率e的平方e2=“< cout<<“ 第二偏心率e的平方e12=“< }
cout<<“----------请选择转换类型:“< cout<<“ 1. 高斯正算“< cout<<“ 2. 高斯反算“< cout<<“ 3. 高斯换带计算“< cin>>style3;
if(style3==1)
{cout<<“请输入转换点总数“< cin>>n;
for(int i=0;i {
cout<<“请输入点的经纬度B L“< cin>>B>>L;
zs(BLae2e12);
}
}
else if(style3==2)
{cout<<“请输入转换点总数“< cin>>n;
for(int j=0;j {
cout<<“输入高斯坐标x y和带号:“< cin>>x>>y>>m;
cout< fs(xymae2e12);
}
}
else if(style3==3)
{cout<<“请输入转换点总数“< cin>>n;
for(int k=0;k {
cout<<“输入点的x y坐标和带号:“< cin>>x>>y>>m;
fs(xymae2e12);
zs(BLae2e12);
}
}
}
//***************************************************************
void zs(double Bdouble Ldouble adouble e2double e12)
{
double m0m2m4m6m8;
double a0a2a4a6a8;
double XL0Ntyt2l;
int style1;
m0=a*(1-e2);
m2=double(3)/double(2)*e2*m0;
m4=double(5)/double(4)*e2*m2;
m6=double(7)/double(6)*e2*m4;
m8=double(9)/double(8)*e2*m6;
a0=m0+m2/double(2)+double(3)/double(8)*m4+double(5)/double(16)*m6+double(35)/double(
评论
共有 条评论