/// <summary> /// 高德转GPS /// </summary> /// <param name="wgLat"></param> /// <param name="wgLon"></param> /// <returns></returns> public static CoordinatesHelper GCJ02_to_WGS84(double wgLat, double wgLon) { CoordinatesHelper point = new CoordinatesHelper(); if (OutOfChina(wgLat, wgLon)) { point.SetLat(wgLat); point.SetLng(wgLon); return(point); } var a = 6378245.0; // a: 卫星椭球坐标投影到平面地图坐标系的投影因子。 var ee = 0.00669342162296594323; // ee: 椭球的偏心率。 var lat = +wgLat; var lng = +wgLon; var dlat = transformLat(lng - 105.0, lat - 35.0); var dlng = transformLon(lng - 105.0, lat - 35.0); var radlat = lat / 180.0 * PI; var magic = Math.Sin(radlat); magic = 1 - ee * magic * magic; var sqrtmagic = Math.Sqrt(magic); dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI); dlng = (dlng * 180.0) / (a / sqrtmagic * Math.Cos(radlat) * PI); var mglat = lat + dlat; var mglng = lng + dlng; point.SetLat(lat * 2 - mglat); point.SetLng(lng * 2 - mglng); return(point); }
/// <summary> /// WGS-84转换GCJ-02 GPS转高德 /// </summary> /// <param name="wgLat">纬度</param> /// <param name="wgLon">经度</param> /// <returns></returns> public static CoordinatesHelper WGS84_to_GCJ02(double wgLat, double wgLon) { CoordinatesHelper point = new CoordinatesHelper(); if (OutOfChina(wgLat, wgLon)) { point.SetLat(wgLat); point.SetLng(wgLon); return(point); } double dLat = TransformLat(wgLon - 105.0, wgLat - 35.0); double dLon = TransformLon(wgLon - 105.0, wgLat - 35.0); double radLat = wgLat / 180.0 * pi; double magic = Math.Sin(radLat); magic = 1 - ee * magic * magic; double sqrtMagic = Math.Sqrt(magic); dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi); dLon = (dLon * 180.0) / (a / sqrtMagic * Math.Cos(radLat) * pi); double lat = wgLat + dLat; double lon = wgLon + dLon; point.SetLat(lat); point.SetLng(lon); return(point); }
/// <summary> /// GCJ-02转换BD-09 /// </summary> /// <param name="gg_lat">纬度</param> /// <param name="gg_lon">经度</param> /// <returns></returns> public static CoordinatesHelper GCJ02_to_BD09(double gg_lat, double gg_lon) { CoordinatesHelper point = new CoordinatesHelper(); double x = gg_lon, y = gg_lat; double z = Math.Sqrt(x * x + y * y) + 0.00002 * Math.Sin(y * x_pi); double theta = Math.Atan2(y, x) + 0.000003 * Math.Cos(x * x_pi); double bd_lon = z * Math.Cos(theta) + 0.0065; double bd_lat = z * Math.Sin(theta) + 0.006; point.SetLat(bd_lat); point.SetLng(bd_lon); return(point); }
/// <summary> /// BD-09转换GCJ-02 /// </summary> /// <param name="bd_lat">纬度</param> /// <param name="bd_lon">经度</param> /// <returns></returns> public static CoordinatesHelper BD09_to_GCJ02(double bd_lat, double bd_lon) { CoordinatesHelper point = new CoordinatesHelper(); double x = bd_lon - 0.0065, y = bd_lat - 0.006; double z = Math.Sqrt(x * x + y * y) - 0.00002 * Math.Sin(y * pi); double theta = Math.Atan2(y, x) - 0.000003 * Math.Cos(x * pi); double gg_lon = z * Math.Cos(theta); double gg_lat = z * Math.Sin(theta); point.SetLat(gg_lat); point.SetLng(gg_lon); return(point); }