|
|
算出来不对,帮忙看看吧。
#define PI 3.14159265358979323846
//北京54,经纬度单位:度,6度分带。
void GaussToGeo(double dGaussX,double dGaussY,double *dGeoL0,double *dGeoB0,double CenterL)
// 已知参数值的单位为(米) ( x---纵坐标,y---横坐标(自然值,没加500公里) )
// 返回值为经纬度(度)
{
double dGeoL,dGeoB; // 后来加
double a,e2,B2,B4,B6,B8,l,y,s,y2,Nf,Nf2,Fai,tf,tf2,gf,gf2,Bf,BfB,B;
a = 6378245L; //长轴
e2 = 0.00669342162297; //离心率平方 1-(a2/b2)
//e12=0.00673852541468; // (a2/b2)-1
y = dGaussY ;
s = dGaussX ; //
Fai = s*0.1570460641219/1000000L;
B2 = 0.25184647783/100;
B4 = 0.36998873/100000L;
B6 = 0.74449/100000000L;
B8 = 0.1828/10000000000L;
Bf = Fai+B2*sin(2*Fai)+B4*sin(4*Fai)+B6*sin(6*Fai)+B8*sin(8*Fai);
Nf = a/sqrt(1-e2*sin(Bf)*sin(Bf));
tf = tan(Bf);
gf = sqrt(e2)*cos(Bf);
y2 = y*y;
Nf2 = Nf*Nf;
tf2 = tf*tf;
gf2 = gf*gf;
l = y/(Nf*cos(Bf))*(1-y2/(6*Nf2)*(1+2*tf2+gf2)
+ y2*y2/(120*Nf2*Nf2)*(5+28*tf2+24*tf2*tf2+6*gf2+8*gf2*tf2));
BfB = y2/(2*Nf2)*(1+gf2)*tf*(1-y2/(12*Nf2)*(5+3*tf2+gf2
- 9*tf2*gf2)+y2*y2/(360*Nf2*Nf2)*(61+90*tf2+45*tf2*tf2));
B = Bf-BfB;
dGeoL = l*180.0/PI;
dGeoB = B*180.0/PI;
*dGeoL0=dGeoL+CenterL;
*dGeoB0=dGeoB;
}
|
|