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