/// <summary> /// Returns the inverse of this projection. /// </summary> /// <returns>IMathTransform that is the reverse of the current projection.</returns> public override MathTransform Inverse() { if (_inverse == null) { _inverse = new TransverseMercator(_Parameters.ToProjectionParameter(), this); } return(_inverse); }
/// <summary> /// Returns the inverse of this projection. /// </summary> /// <returns>IMathTransform that is the reverse of the current projection.</returns> public override IMathTransform Inverse() { if (_inverse == null) { _inverse = new TransverseMercator(this._Parameters, !_isInverse); } return(_inverse); }
/// <summary> /// Creates an instance of an TransverseMercatorProjection projection object. /// </summary> /// <param name="parameters">List of parameters to initialize the projection.</param> /// <param name="inverse">Flag indicating wether is a forward/projection (false) or an inverse projection (true).</param> /// <remarks> /// <list type="bullet"> /// <listheader><term>Items</term><description>Descriptions</description></listheader> /// <item><term>semi_major</term><description>Semi major radius</description></item> /// <item><term>semi_minor</term><description>Semi minor radius</description></item> /// <item><term>scale_factor</term><description></description></item> /// <item><term>central meridian</term><description></description></item> /// <item><term>latitude_origin</term><description></description></item> /// <item><term>false_easting</term><description></description></item> /// <item><term>false_northing</term><description></description></item> /// </list> /// </remarks> protected TransverseMercator(IEnumerable <ProjectionParameter> parameters, TransverseMercator inverse) : base(parameters, inverse) { Name = "Transverse_Mercator"; Authority = "EPSG"; AuthorityCode = 9807; _esp = _es / (1.0 - _es); _ml0 = mlfn(lat_origin, Math.Sin(lat_origin), Math.Cos(lat_origin)); /* * e = Math.Sqrt(_es); * ml0 = _semiMajor*mlfn(lat_origin, Math.Sin(lat_origin), Math.Cos(lat_origin)); * esp = _es / (1.0 - _es); */ }
/// <summary> /// Returns the inverse of this projection. /// </summary> /// <returns>IMathTransform that is the reverse of the current projection.</returns> public override IMathTransform Inverse() { if (_inverse==null) _inverse = new TransverseMercator(this._Parameters, ! _isInverse); return _inverse; }
private static IMathTransform CreateCoordinateOperation(IProjection projection, IEllipsoid ellipsoid, ILinearUnit unit) { List<ProjectionParameter> parameterList = new List<ProjectionParameter>(projection.NumParameters); for (int i = 0; i < projection.NumParameters; i++) parameterList.Add(projection.GetParameter(i)); parameterList.Add(new ProjectionParameter("semi_major", ellipsoid.SemiMajorAxis)); parameterList.Add(new ProjectionParameter("semi_minor", ellipsoid.SemiMinorAxis)); parameterList.Add(new ProjectionParameter("unit", unit.MetersPerUnit)); IMathTransform transform = null; switch (projection.ClassName.ToLower(CultureInfo.InvariantCulture).Replace(' ', '_')) { case "mercator": case "mercator_1sp": case "mercator_2sp": //1SP transform = new Mercator(parameterList); break; case "transverse_mercator": transform = new TransverseMercator(parameterList); break; case "albers": case "albers_conic_equal_area": transform = new AlbersProjection(parameterList); break; case "krovak": transform = new KrovakProjection(parameterList); break; case "lambert_conformal_conic": case "lambert_conformal_conic_2sp": case "lambert_conic_conformal_(2sp)": transform = new LambertConformalConic2SP(parameterList); break; default: throw new NotSupportedException(String.Format("Projection {0} is not supported.", projection.ClassName)); } return transform; }