📄 高斯投影正算.cpp
字号:
#include "iostream.h"
#include "math.h"
#include "stdio.h"
#define p 206264.806247 //一弧度对应的秒值
#define pi 3.1415926 //圆周率
#define a_ 298.3 //北京54椭球的扁率倒数
#define a 6378245.00000 //北京54椭球的长半轴
main()
{ double B,L,x,y,X1;
int i;
double m0,m2,m4,m6,m8,q0,q2,q4,q6,q8,b,e2,t,g2,N,l,x1,x2,x3,y1,y2,y3;
double X,Y,Z;
double p1,r,A1,A2,A3,A4;
//输入空间直角坐标系中的坐标
cout<<"请输入已知点在空中直角坐标系中的坐标:"<<endl;
cin>>X>>Y>>Z;
cout<<endl;
b=a*(1-1/a_);
e2=1-b*b/(a*a);
//坐标转换的直接解法求解经纬度
p1=atan(Z/sqrt(X*X+Y*Y));
r=a*sqrt(1-e2)/((1-e2*sin(p1)*sin(p1))*(1-e2*sin(p1)*sin(p1)));
r=sqrt(X*X+Y*Y+Z*Z);
A1=a*tan(p1)/r;
A2=sin(p1)*sin(p1)+2*(a/r)*cos(p1)*cos(p1);
A3=3*sin(p1)*sin(p1)*sin(p1)*sin(p1)+16*((a/r)*sin(p1)*sin(p1)*cos(p1)*cos(p1)+4*(a/r)*(a/r)*cos(p1)*cos(p1)*(2-5*sin(p1)*sin(p1)));
A4=5*sin(p1)*sin(p1)*sin(p1)*sin(p1)*sin(p1)*sin(p1)+48*((a/r)*sin(p1)*sin(p1)*sin(p1)*sin(p1)*cos(p1)*cos(p1)+20*(a/r)*(a/r)*sin(p1)*sin(p1)*cos(p1)*cos(p1)*(4-7*sin(p1)*sin(p1))+16*(a/r)*(a/r)*(a/r)*cos(p1)*cos(p1)*(1-7*sin(p1)*sin(p1)+8*sin(p1)*sin(p1)*sin(p1)*sin(p1)));
B=atan(tan(p1)+A1*e2*(1+e2*A2/2*(1+e2*A3/4*(1+A4*e2/2))));
L=atan(Y/X);
if(L<0)
L=pi+atan(Y/X);
L=L*180/pi;
//计算高斯投影带的带号
for(i=0;fabs(3*i-L)>1.5;i++);
printf("高斯投影带的带号为:");
cout<<i<<endl;
//计算经差,并用弧度的形式表示
l=(L-3*i)*pi/180;
t=tan(B);
g2=e2*cos(B)*cos(B)/(1-e2);
N=a/sqrt(1-e2*sin(B)*sin(B));
//计算子午弧长 X1
m0=a*(1-e2);
m2=3*e2*m0/2;
m4=5*e2*m2/4;
m6=7*e2*m4/6;
m8=9*e2*m6/8;
q0=m0+m2/2+3*m4/8+5*m6/16+35*m8/128;
q2=m2/2+m4/2+15*m6/32+7*m8/16;
q4=m4/8+3*m6/16+7*m8/32;
q6=m6/32+m8/16;
q8=m8/128;
X1=q0*B-q2*sin(2*B)/2+q4*sin(4*B)/4-q6*sin(6*B)/6+q8*sin(8*B)/8;
//使用实用电算公式计算进行高斯投影正算
x1=N*t*cos(B)*cos(B)*l*l/2;
x2=N*t*cos(B)*cos(B)*cos(B)*cos(B)*l*l*l*l*(5-t*t+9*g2+4*g2*g2)/24;
x3=N*t*cos(B)*cos(B)*cos(B)*cos(B)*cos(B)*cos(B)*l*l*l*l*l*l*(61-58*t*t+t*t*t*t)/720;
y1=N*cos(B)*l;
y2=N*cos(B)*cos(B)*cos(B)*l*l*l*(1-t*t+g2)/6;
y3=N*cos(B)*cos(B)*cos(B)*cos(B)*cos(B)*l*l*l*l*l*(5-18*t*t+t*t*t*t+14*g2-58*g2*t*t)/120;
x=X1+x1+x2+x3;
y=y1+y2+y3;
printf("对应的高斯投影坐标系中的坐标为:\n");
printf("x=%10.6f,y=%10.6f",x,y);
cin>>x;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -