这是一个高斯反算的算法,你可以参考以下,这个程序是针对克拉索夫斯基椭球的,转成其他的椭球体的坐标,只需要换一下参数就可以了。
#define PI 3.1415926535
main()
{
float P;
float x,y,z;
float a,b,bf,Bf,B,l1,l2,L,L0;
float b2,b3,b4,b5;
float N,i,j,k;
int B1,B2,L1,L2;float B3,L3;
P=(180.0/PI)*3600.0;
printf("please enter x,y:\n");
scanf("%f,%f",&x,&y);
y-=500000;
a=x*P/6367558.4969;
b=(a*PI/180.0)/3600.0;
i=cos(b)*cos(b);
bf=a+(50221746+(293622+(2350+22*i)*i)*i)*sin(b)*cos(b)*P*(1E-10);
Bf=(bf*PI/180.0)/3600.0;
j=cos(Bf)*cos(Bf);
N=6399698.902-(21562.267-(108.973-0.612*j)*j)*j;
b2=(0.5+0.003369*j)*sin(Bf)*cos(Bf);
b3=0.333333-(0.166667-0.001123*j)*j;
b4=0.25+(0.16161+0.00562*j)*j;
b5=0.2-(0.1667-0.0088*j)*j;
z=(y/N)/cos(Bf);
k=z*z;
printf("Please enter L0:\n");
scanf("%f",&L0);
B=bf-(1-(b4-0.12*k)*k)*k*b2*P;
B=B/3600.0;
B1=(int)B;
B2=(int)((B-B1)*60);
B3=((B-B1)*60-(int)((B-B1)*60))*60.;
l1=(1-(b3-b5*k)*k)*z*P;
L=(l1/3600)+L0;
L1=(int)L;
L2=(int)((L-L1)*60);
L3=((L-L1)*60-(int)((L-L1)*60))*60.;
}
}
您好,我看到您的问题很久没有人来回答,但是问题过期无人回答会被扣分的并且你的悬赏分也会被没收!所以我给你提几条建议:
一,你可以选择在正确的分类下去提问,这样知道你问题答案的人才会多一些,回答的人也会多些。
二,您可以到与您问题相关专业网站论坛里去看看,那里聚集了许多专业人才,一定可以为你解决问题的。
三,你可以向你的网上好友问友打听,他们会更加真诚热心为你寻找答案的,甚至可以到相关网站直接搜索.
四,网上很多专业论坛以及知识平台,上面也有很多资料,我遇到专业性的问题总是上论坛求解决办法的。
五,将你的问题问的细一些,清楚一些!让人更加容易看懂明白是什么意思!
谢谢采纳我的建议!
!