//
// 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)
{
找软件资料,就到一览软件文库