高斯投影坐标反算c语言代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
高斯投影坐标反算c语言代码
#include
#include
#include
main()
{
printf("#####################################################\n");
printf("# 角度输入说明:如26°12′45.2″输入为26,12,45.2 #\n");
printf("#####################################################\n");
double x,y;
int j,L0;
printf("请输入高斯投影坐标(自然坐标),中间用逗号隔开:\n");
scanf("%lf,%lf",&x,&y);
//自然坐标输入
printf("请输入中央子午线L0:\n");
scanf("%d,%d,%lf",&L0); //中央子午线输入
printf("请选择参考椭球:1.北京1954参考椭球。\n 2.西安1980参考椭球。\n");
printf("选择的参考椭球为:");
scanf("%d",&j);
//选择椭球参数
if(j==1)
{
long double Bf0=0.157046064172*pow(10,-6)*x;
long double Bf=Bf0+cos(Bf0)*(0.005051773759*sin(Bf0)-0.000029837302*pow(sin(Bf0),3)+0.00000023818 9*pow(sin(Bf0),5));
long double t=tan(Bf);
long double m=0.00673852541468*pow(cos(Bf),2);
long double V=1+m;
long double N=6378245.000/sqrt(1-0.00669342162297*pow(sin(Bf),2));
long double B1=Bf-1.0/2*V*t*pow(y/N,2)+1.0/24*(5+3*pow(t,2)+m-9*m*pow(t,2))*V*t*pow(y/N,4)-1.0/72 0*(61+90*pow(t,2)+45*pow(t,4))
*V*t*pow(y/N,6);
long double l1=(1/cos(Bf))*(y/N)-1.0/6*(1+2*pow(t,2)+m)*(1/cos(Bf))*pow(y/N,3)
+1.0/120*(5+28*pow(t,2)+24*pow(t,4)+6*m+8*m*pow(t,2))*(1/cos(Bf))*pow(y/N,5);
long double B=B1*57.29577951;
long double l=l1*57.29577951;
long double L=L0+l;
int d2=int(B);
int f2=int((B-d2)*60);
long double m2=((B-d2)*60-f2)*60;
printf("B=%d %d %.12lf\n",d2,f2,m2);
int d3=int(L);
int f3=int((L-d3)*60);
long double m3=((L-d3)*60-f3)*60;
printf("L=%d %d %.12lf\n",d3,f3,m3); //北京1954参考椭球
}
if(j==2)
{long double Bf0=0.157048687473*pow(10,-6)*x;
long double Bf=Bf0+cos(Bf0)*(0.005052505593*sin(Bf0)-0.000029847335*pow(sin(Bf0),3)+0.0000002416* pow(sin(Bf0),5)
+0.0000000022*pow(sin(Bf0),7));
long double t=tan(Bf);
long double m=0.006739501819473*pow(cos(Bf),2);
long double V=1+m;
long double N=6378140.000/sqrt(1-0.006694384999588*pow(sin(Bf),2));
long double B1=Bf-1.0/2*V*t*pow(y/N,2)+1.0/24*(5+3*pow(t,2)+m-9*m*pow(t,2))*V*t*pow(y/N,4)-1.0/72 0*(61+90*pow(t,2)+45*pow(t,4))
*V*t*pow(y/N,6);
long double l1=(1/cos(Bf))*(y/N)-1.0/6*(1+2*pow(t,2)+m)*(1/cos(Bf))*pow(y/N,3)
+1.0/120*(5+28*pow(t,2)+24*pow(t,4)+6*m+8*m*pow(t,2))*(1/cos(Bf))*pow(y/N,5);
long double B=B1*57.29577951;
long double l=l1*57.29577951;
long double L=L0+l;
int d2=int(B);
int f2=int((B-d2)*60);
long double m2=((B-d2)*60-f2)*60;
printf("B=%d %d %.12lf\n",d2,f2,m2);
int d3=int(L);
int f3=int((L-d2)*60);
long double m3=((L-d2)*60-f2)*60;
printf("L=%d %d %.12lf\n",d3,f3,m3); //西安1980参考椭球
}
getch();
}