using NetTopologySuite.Geometries; namespace LY.App.Common { public static class CoordConvert { /// /// 经纬度转Web墨卡托(单位:米) /// /// 经度 /// 纬度 /// 转换后的位置 public static CoordPoint WGS84ToMercator(double lon, double lat) { var x = lon * Math.PI / 180 * Parameters.LongRadius; var param = lat * Math.PI / 180; var y = Parameters.LongRadius / 2 * Math.Log((1.0 + Math.Sin(param)) / (1.0 - Math.Sin(param))); return new CoordPoint(x, y); } /// /// 经纬度转Web墨卡托(单位:米) /// /// 经度 /// 纬度 /// 转换后的位置 public static CoordPoint WGS84ToMercator(Coordinate coord) { return WGS84ToMercator(coord.Lon, coord.Lat); } /// /// Web墨卡托转经纬度 /// /// X坐标值(单位:米) /// Y坐标值(单位:米) /// 转换后的位置 public static Coordinate MercatorToWGS84(double x, double y) { var lon = x / Parameters.MercatorLength * 180; var lat = y / Parameters.MercatorLength * 180; lat = 180 / Math.PI * (2 * Math.Atan(Math.Exp(lat * Math.PI / 180)) - Math.PI / 2); return new Coordinate(lon, lat); } /// /// Web墨卡托转经纬度 /// /// X坐标值(单位:米) /// Y坐标值(单位:米) /// 转换后的位置 public static Coordinate MercatorToWGS84(CoordPoint point) { return MercatorToWGS84(point.X, point.Y); } } }