/// <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(_Parameters.ToProjectionParameter(), this);
     }
     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);
             */
        }