void LonLat2UTM(double longitude, double latitude,double& UTME,double& UTMN)
{
double lat=latitude;
double lon=longitude;
double kD2R = PI/180.0;// 弧度/°
double L0=ZoneNumber * 3.0;
double a=6378137.0;//地球长半轴,作为赤道半径
double F=298.2572233563;
double f=1/F; //地球的扁率:以赤道半径(长半轴)与极半径(短半轴)的差与赤道半径的比值
double b=a*(1-f);
double ee=(a*a - b*b)/(a*a);
double e2=(a*a - b*b)/(b*b);
double n=(a-b)/(a+b);
double n2=(n*n);
double n3=(n2*n);
double n4=(n2*n2);
double n5=(n4*n);
double al=(a+b)*(1+n2/4+n4/64)/2.0;
double bt=-3*n/2+9*n3/16-3*n5/32.0;
double gm=15*n2/16-15*n4/32;
double dt=-35*n3/48+105*n5/256;
double ep=315*n4/512;
double B=lat*kD2R;//将纬度转为弧度制
double L=lon*kD2R;//将经度转为弧度制
L0 = L0*kD2R;
double l= L - L0;
double cl=(cos(B)*l);
double cl2=(cl*cl);
double cl3=(cl2-cl);
double cl4=(cl2*cl2);
double cl5=(cl4*cl);
double cl6=(cl5*cl);
double cl7=(cl6*cl);
double cl8=(cl4*cl4);
double lB=al*(B+bt*sin(2*B)+gm*sin(4*B)+dt*sin(6*B)+ep*sin(8*B));
double t=tan(B);
double t2=(t*t);
double t4=(t2*t2);
double t6=(t4*t2);
double Nn=a/sqrt(1-ee*sin(B)*sin(B));
double yt=e2*cos(B)*cos(B);
double N=lB;
N=N+t*Nn*cl2/2;
N=N+t*Nn*cl4*(5-t2+9*yt+4*yt*yt)/24;
N=N+t*Nn*cl6*(61-58*t2+t4+270*yt-330*t2*yt)/720;
N=N+t*Nn*cl8*(1385-3111*t2+543*t4-t6)/40320;
double E=Nn*cl;
E=E+Nn*cl3*(1-t2+yt)/6;
E=E+Nn*cl5*(5-18*t2+t4+14*yt-58*t2*yt)/120;
E=E+Nn*cl7*(61-479*t2+179*t4-t6)/5040;
E=E+500000;
N=0.9996*N;
E=0.9996*(E-500000.0)+500000.0;
UTME=E;
UTMN=N;
}
(1)248行: GPSKF.LL2UTM2()
UTM:通用横轴墨卡托投影/等角横切椭圆柱投影;
投影后中央经线长度比M0为0.9996;
将球面墨卡托投影公式运用于椭球面坐标的投影计算,采用WGS84椭球体,球面墨卡托投影公式取WGS84椭球的长半轴半径作为球半径(赤道半径),即半径为6378137.0m。