用手机获取GPS坐标 显示在手机地图偏差大约在100-200米左右,我把坐标放在 Maps.google.com 搜索坐标定位则相当精确。
可能是.....为了安全吧故意加的偏差
不过可以计算偏差使位置精确
代码如下
public class EvilTransform {static double pi &#61; 3.14159265358979324;static double a &#61; 6378245.0;static double ee &#61; 0.00669342162296594323;public static double mgLat;public static double mgLon;public static void transform( double wgLat, double wgLon){if (outOfChina(wgLat, wgLon)){mgLat &#61; wgLat;mgLon &#61; wgLon;return;}double dLat &#61; transformLat(wgLon - 105.0, wgLat - 35.0);double dLon &#61; transformLon(wgLon - 105.0, wgLat - 35.0);double radLat &#61; wgLat / 180.0 * pi;double magic &#61; Math.sin(radLat);magic &#61; 1 - ee * magic * magic;double sqrtMagic &#61; Math. sqrt(magic);dLat &#61; (dLat * 180.0) / (( a * (1 - ee)) / (magic * sqrtMagic) * pi);dLon &#61; (dLon * 180.0) / ( a / sqrtMagic * Math.cos(radLat) * pi);mgLat &#61; wgLat &#43; dLat;mgLon &#61; wgLon &#43; dLon;}static Boolean 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;}static double transformLat( double x, double y){double ret &#61; -100.0 &#43; 2.0 * x &#43; 3.0 * y &#43; 0.2 * y * y &#43; 0.1 * x * y &#43; 0.2 * Math.sqrt(Math.abs(x));ret &#43;&#61; (20.0 * Math. sin(6.0 * x * pi) &#43; 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;ret &#43;&#61; (20.0 * Math. sin(y * pi) &#43; 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0;ret &#43;&#61; (160.0 * Math. sin(y / 12.0 * pi) &#43; 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0;return ret;}static double transformLon( double x, double y){double ret &#61; 300.0 &#43; x &#43; 2.0 * y &#43; 0.1 * x * x &#43; 0.1 * x * y &#43; 0.1 * Math.sqrt(Math.abs(x));ret &#43;&#61; (20.0 * Math. sin(6.0 * x * pi) &#43; 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;ret &#43;&#61; (20.0 * Math. sin(x * pi) &#43; 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0;ret &#43;&#61; (150.0 * Math. sin(x / 12.0 * pi) &#43; 300.0 * Math.sin(x / 30.0 * pi)) * 2.0 / 3.0;return ret;}
}