public void CoordinateProjectionFactoryFromMethodNameTest()
        {
            CoordinateProjection expected = CoordinateProjectionFactory.BritishNationalGrid(Ellipsoids.WGS1984);

            Dictionary <CoordinateOperationParameter, Object> parameters = new Dictionary <CoordinateOperationParameter, Object>();

            parameters.Add(CoordinateOperationParameters.LatitudeOfNaturalOrigin, Angle.FromDegree(49));
            parameters.Add(CoordinateOperationParameters.LongitudeOfNaturalOrigin, Angle.FromDegree(-2));
            parameters.Add(CoordinateOperationParameters.FalseEasting, Length.Convert(Length.FromMetre(400000), Ellipsoids.WGS1984.SemiMajorAxis.Unit));
            parameters.Add(CoordinateOperationParameters.FalseNorthing, Length.Convert(Length.FromMetre(-100000), Ellipsoids.WGS1984.SemiMajorAxis.Unit));
            parameters.Add(CoordinateOperationParameters.ScaleFactorAtNaturalOrigin, 0.9996012717);

            CoordinateProjection actual = CoordinateProjectionFactory.FromMethodName(expected.Method.Name, parameters, Ellipsoids.WGS1984, AreasOfUse.GreatBritainMan).FirstOrDefault();

            Assert.AreEqual(expected.Method, actual.Method);
        }
        /// <summary>
        /// Computes the coordinate projection.
        /// </summary>
        /// <param name="ellipsoid">The ellipsoid.</param>
        /// <returns>The coordinate projection.</returns>
        /// <exception cref="System.IO.InvalidDataException">Projection code is invalid.</exception>
        private CoordinateProjection ComputeProjection(Ellipsoid ellipsoid)
        {
            Int32 code = Convert.ToInt32(_currentGeoKeys[GeoKey.Projection]);

            if (code >= 10000 && code <= 19999)
            {
                return(CoordinateProjectionFactory.FromIdentifier("EPSG::" + code, ellipsoid).FirstOrDefault());
            }

            if (code == Int16.MaxValue)
            {
                CoordinateOperationMethod method = ComputeCoordinateOperationMethod();
                Dictionary <CoordinateOperationParameter, Object> parameters = ComputeCoordinateOperationParameters();

                return(CoordinateProjectionFactory.FromMethod(method, parameters, ellipsoid, AreasOfUse.World));
            }

            throw new InvalidDataException("Projection code is invalid.");
        }