/// <summary> /// Creates a new lambert projection. /// </summary> /// <param name="name"></param> /// <param name="ellipsoid"></param> /// <param name="standard_parallel_1"></param> /// <param name="standard_parallel_2"></param> /// <param name="latitude_origin_1"></param> /// <param name="longitude_origin_2"></param> /// <param name="x_origin"></param> /// <param name="y_origin"></param> protected LambertProjectionBase(string name, LambertEllipsoid ellipsoid, double standard_parallel_1, double standard_parallel_2, double latitude_origin_1, double longitude_origin_2, double x_origin, double y_origin) { _name = name; _ellipsoid = ellipsoid; _standard_parallel_1 = standard_parallel_1; Radian temp = new Degree(_standard_parallel_1); _standard_parallel_1_radians = temp.Value; _standard_parallel_2 = standard_parallel_2; temp = new Degree(_standard_parallel_2); _standard_parallel_2_radians = temp.Value; _latitude_origin = latitude_origin_1; temp = new Degree(_latitude_origin); _latitude_origin_radians = temp.Value; _longitude_origin = longitude_origin_2; temp = new Degree(_longitude_origin); _longitude_origin_radians = temp.Value; _x_origin = x_origin; _y_origin = y_origin; // calculate common calculation intermidiates. _m_1 = (System.Math.Cos(_standard_parallel_1_radians) / System.Math.Sqrt((1.0 - _ellipsoid.Eccentricity * _ellipsoid.Eccentricity * System.Math.Pow(System.Math.Sin(_standard_parallel_1_radians), 2.0)))); _m_2 = (System.Math.Cos(_standard_parallel_2_radians) / System.Math.Sqrt((1 - _ellipsoid.Eccentricity * _ellipsoid.Eccentricity * System.Math.Pow(System.Math.Sin(_standard_parallel_2_radians), 2.0)))); _t_0 = (System.Math.Tan(System.Math.PI / 4.0 - _latitude_origin_radians / 2.0) / System.Math.Pow(((1 - _ellipsoid.Eccentricity * System.Math.Sin(_latitude_origin_radians)) / (1 + _ellipsoid.Eccentricity * System.Math.Sin(_latitude_origin_radians))), _ellipsoid.Eccentricity / 2.0)); _t_1 = (System.Math.Tan(System.Math.PI / 4.0 - _standard_parallel_1_radians / 2.0) / System.Math.Pow(((1 - _ellipsoid.Eccentricity * System.Math.Sin(_standard_parallel_1_radians)) / (1 + _ellipsoid.Eccentricity * System.Math.Sin(_standard_parallel_1_radians))), _ellipsoid.Eccentricity / 2.0)); _t_2 = (System.Math.Tan(System.Math.PI / 4.0 - _standard_parallel_2_radians / 2.0) / System.Math.Pow(((1 - _ellipsoid.Eccentricity * System.Math.Sin(_standard_parallel_2_radians)) / (1 + _ellipsoid.Eccentricity * System.Math.Sin(_standard_parallel_2_radians))), _ellipsoid.Eccentricity / 2.0)); _n = ((System.Math.Log(_m_1) - System.Math.Log(_m_2)) / (System.Math.Log(_t_1) - System.Math.Log(_t_2))); _g = _m_1 / (_n * System.Math.Pow(_t_1, _n)); _r_0 = _ellipsoid.SemiMajorAxis * _g * System.Math.Pow(System.Math.Abs(_t_0), _n); }
protected LambertProjectionBase(string name, LambertEllipsoid ellipsoid, double standard_parallel_1, double standard_parallel_2, double latitude_origin_1, double longitude_origin_2, double x_origin, double y_origin) { this._name = name; this._ellipsoid = ellipsoid; this._standard_parallel_1 = standard_parallel_1; this._standard_parallel_1_radians = new Degree(this._standard_parallel_1).Value; this._standard_parallel_2 = standard_parallel_2; this._standard_parallel_2_radians = new Degree(this._standard_parallel_2).Value; this._latitude_origin = latitude_origin_1; this._latitude_origin_radians = new Degree(this._latitude_origin).Value; this._longitude_origin = longitude_origin_2; this._longitude_origin_radians = new Degree(this._longitude_origin).Value; this._x_origin = x_origin; this._y_origin = y_origin; this._m_1 = System.Math.Cos(this._standard_parallel_1_radians) / System.Math.Sqrt(1.0 - this._ellipsoid.Eccentricity * this._ellipsoid.Eccentricity * System.Math.Pow(System.Math.Sin(this._standard_parallel_1_radians), 2.0)); this._m_2 = System.Math.Cos(this._standard_parallel_2_radians) / System.Math.Sqrt(1.0 - this._ellipsoid.Eccentricity * this._ellipsoid.Eccentricity * System.Math.Pow(System.Math.Sin(this._standard_parallel_2_radians), 2.0)); this._t_0 = System.Math.Tan(System.Math.PI / 4.0 - this._latitude_origin_radians / 2.0) / System.Math.Pow((1.0 - this._ellipsoid.Eccentricity * System.Math.Sin(this._latitude_origin_radians)) / (1.0 + this._ellipsoid.Eccentricity * System.Math.Sin(this._latitude_origin_radians)), this._ellipsoid.Eccentricity / 2.0); this._t_1 = System.Math.Tan(System.Math.PI / 4.0 - this._standard_parallel_1_radians / 2.0) / System.Math.Pow((1.0 - this._ellipsoid.Eccentricity * System.Math.Sin(this._standard_parallel_1_radians)) / (1.0 + this._ellipsoid.Eccentricity * System.Math.Sin(this._standard_parallel_1_radians)), this._ellipsoid.Eccentricity / 2.0); this._t_2 = System.Math.Tan(System.Math.PI / 4.0 - this._standard_parallel_2_radians / 2.0) / System.Math.Pow((1.0 - this._ellipsoid.Eccentricity * System.Math.Sin(this._standard_parallel_2_radians)) / (1.0 + this._ellipsoid.Eccentricity * System.Math.Sin(this._standard_parallel_2_radians)), this._ellipsoid.Eccentricity / 2.0); this._n = (System.Math.Log(this._m_1) - System.Math.Log(this._m_2)) / (System.Math.Log(this._t_1) - System.Math.Log(this._t_2)); this._g = this._m_1 / (this._n * System.Math.Pow(this._t_1, this._n)); this._r_0 = this._ellipsoid.SemiMajorAxis * this._g * System.Math.Pow(System.Math.Abs(this._t_0), this._n); }