WGS84坐标转BJ54坐标

int main(int argc, char* argv[])
{
 //WGS84坐标
 double dLongitude = 117;
 double dLatitude =40;

 double EARTH_WGS84_A = 6378137.0000;
 double EARTH_WGS84_E2 = 0.00669437999013;
 double EARTH_WGS84_FLATTENING = 298.257223563;

 double EARTH_BJ54_A = 6378245.0;
 double EARTH_BJ54_E2 = 0.00667;
 double EARTH_BJ54_FLATTENING = 298.3;  

 double OMIGA = 206264.8062;
 double DELTA_X = -28.3;
 double DELTA_Y = 144.9;
 double DELTA_Z = 77.5;

 double sinRenda = sin(dLongitude);
    double cosRenda = cos(dLongitude);
    double sinFi = sin(dLatitude);
    double cosFi = cos(dLatitude);
    double sinFi2 = sinFi*sinFi;
    double eSinFi = sqrt(1-EARTH_WGS84_E2*sinFi2);
    double M = EARTH_WGS84_A*(1-EARTH_WGS84_E2)/(eSinFi*eSinFi*eSinFi);
    double N = EARTH_WGS84_A/eSinFi;
    double deltaE2 = 2*(1-1/EARTH_BJ54_FLATTENING)*(1/EARTH_WGS84_FLATTENING-1/EARTH_BJ54_FLATTENING);
    double deltaA = EARTH_BJ54_A - EARTH_WGS84_A;
    double deltaRenda = OMIGA*(cosRenda*DELTA_Y - sinRenda*DELTA_X)/(N*sinRenda);
    double deltaFi = OMIGA*((EARTH_WGS84_A*deltaE2 + EARTH_WGS84_E2*deltaA)*sinFi*cosFi + EARTH_WGS84_A*EARTH_WGS84_E2*deltaE2*sinFi*sinFi*sinFi*cosFi-sinFi*cosRenda*DELTA_X - sinFi*sinRenda*DELTA_X + cosFi*DELTA_Z)/M;

 //BJ54坐标
    double dLatitude54 = dLatitude + deltaFi/3600;
    double dLongitude54 = dLongitude + deltaRenda/3600;

 return 0;
}

posted on 2009-03-27 09:08  Dormouse  阅读(2498)  评论(1)    收藏  举报

导航