background image

//
// Krasovsky 1940
//
// a = 6378245.0, 1/f = 298.3
// b = a * (1 - f)
// ee = (a^2 - b^2) / a^2;

const

 

double

 a = 6378245.0;

const

 

double

 ee = 0.00669342162296594323;

Location transformFromWGSToGCJ(Location wgLoc)
{
    Location mgLoc;
    

if

 (outOfChina(wgLoc.lat, wgLoc.lng))

    {
        mgLoc = wgLoc;
        

return

 mgLoc;

    }
    

double

 dLat = transformLat(wgLoc.lng - 105.0, wgLoc.lat - 35.0);

    

double

 dLon = transformLon(wgLoc.lng - 105.0, wgLoc.lat - 35.0);

    

double

 radLat = wgLoc.lat / 180.0 * pi;

    

double

 magic = sin(radLat);

    magic = 1 - ee * magic * magic;
    

double

 sqrtMagic = sqrt(magic);

    dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);
    dLon = (dLon * 180.0) / (a / sqrtMagic * cos(radLat) * pi);
    mgLoc.lat = wgLoc.lat + dLat;
    mgLoc.lng = wgLoc.lng + dLon;

    

return

 mgLoc;

}

 

bool

 outOfChina(

double

 lat, 

double

 lon)

{
    

if

 (lon < 72.004 || lon > 137.8347)

        

return

 

true

;

    

if

 (lat < 0.8293 || lat > 55.8271)

        

return

 

true

;

    

return

 

false

;

}

 

double

 transformLat(

double

 x, 

double

 y)

{

                   找软件资料,就到一览软件文库

http://wk.yl1001.com/rj/