public void Test(string geoResourceName, string prjResourceName, double projectDelta, double unprojectDelta) { var latLonData = GoldData.GetReadyReader(geoResourceName); var prjData = GoldData.GetReadyReader(prjResourceName); var spheroid = GoldData.GenerateSpheroid(prjData["DATUM"]); PolarStereographic projection; if (null != prjData["SCALE FACTOR"]) { projection = new PolarStereographic( new GeographicCoordinate( Math.PI / 2.0, Double.Parse(prjData["LONGITUDE DOWN FROM POLE"]) * Math.PI / 180.0 ), Double.Parse(prjData["SCALE FACTOR"]), new Vector2( Double.Parse(prjData["FALSE EASTING"]), Double.Parse(prjData["FALSE NORTHING"]) ), spheroid ); } else { var latSp = Double.Parse(prjData["LATITUDE OF TRUE SCALE"]) * Math.PI / 180.0; var originLat = latSp < 0 ? -Math.PI / 2.0 : Math.PI / 2.0; projection = PolarStereographic.CreateFromStandardParallel( new GeographicCoordinate( originLat, Double.Parse(prjData["LONGITUDE DOWN FROM POLE"]) * Math.PI / 180.0 ), latSp, new Vector2( Double.Parse(prjData["FALSE EASTING"]), Double.Parse(prjData["FALSE NORTHING"]) ), spheroid ); } var inverse = projection.GetInverse(); while (latLonData.Read() && prjData.Read()) { var coord = latLonData.CurrentLatLon(); var coordRads = latLonData.CurrentLatLonRadians(); var expected = prjData.CurrentPoint2D(); var projected = projection.TransformValue(coordRads); Assert.AreEqual(expected.X, projected.X, projectDelta); Assert.AreEqual(expected.Y, projected.Y, projectDelta); var unProjected = inverse.TransformValue(expected); unProjected = new GeographicCoordinate(unProjected.Latitude * 180.0 / Math.PI, unProjected.Longitude * 180.0 / Math.PI); Assert.AreEqual(coord.Latitude, unProjected.Latitude, unprojectDelta); Assert.AreEqual(coord.Longitude, unProjected.Longitude, unprojectDelta); } }
public void EpsgExample_1_3_7_2_B() { var projection = PolarStereographic.CreateFromStandardParallel( 1.221730476, -1.239183769, new Vector2(6000000.00, 6000000.00), new SpheroidEquatorialInvF(6378137, 298.2572236) ); var input = new GeographicCoordinate(-1.308996939, 2.094395102); var expected = new Point2(7255380.79, 7053389.56); var result = projection.TransformValue(input); Assert.AreEqual(expected.X, result.X, 0.004); Assert.AreEqual(expected.Y, result.Y, 0.001); }