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);
        }
    }
}