public void Test(string sourceResourceName, string targetResourceName, double projectDelta, double unprojectDelta) { var sourceData = GoldData.GetReadyReader(sourceResourceName); var targetData = GoldData.GetReadyReader(targetResourceName); var sourceCrs = GoldData.GetCrs(sourceData); var targetCrs = GoldData.GetCrs(targetData); Assert.IsNotNull(sourceCrs); Assert.IsNotNull(targetCrs); var operationGenerator = new HelmertCrsCoordinateOperationPathGenerator(); var operationPath = operationGenerator.Generate(sourceCrs, targetCrs).First(); Assert.IsNotNull(operationPath); var compiler = new StaticCoordinateOperationCompiler(); var forward = new CompiledConcatenatedTransformation <GeographicCoordinate, Point2>(compiler.Compile(operationPath) as IEnumerable <ITransformation>); var inverse = forward.GetInverse(); while (sourceData.Read() && targetData.Read()) { var geogreaphicExpected = sourceData.CurrentLatLon(); var projectedExpected = targetData.CurrentPoint2D(); var projected = forward.TransformValue(geogreaphicExpected); Assert.AreEqual(projectedExpected.X, projected.X, projectDelta); Assert.AreEqual(projectedExpected.Y, projected.Y, projectDelta); var geographic = inverse.TransformValue(projectedExpected); Assert.AreEqual(geogreaphicExpected.Latitude, geographic.Latitude, unprojectDelta); Assert.AreEqual(geogreaphicExpected.Longitude, geographic.Longitude, unprojectDelta); } }
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 Test(string geoResourceName, string mercResourceName, double projectDelta, double unprojectDelta) { var latLonData = GoldData.GetReadyReader(geoResourceName); var lccData = GoldData.GetReadyReader(mercResourceName); var latTrueScale = lccData["LATITUDE OF TRUE SCALE"]; Mercator projection; if (null == latTrueScale) { projection = new Mercator( Double.Parse(lccData["CENTRAL MERIDIAN"]) / 180 * Math.PI, Double.Parse(lccData["SCALE FACTOR"]), new Vector2( Double.Parse(lccData["FALSE EASTING"]), Double.Parse(lccData["FALSE NORTHING"]) ), GoldData.GenerateSpheroid(lccData["DATUM"]) ); } else { projection = new Mercator( new GeographicCoordinate( Double.Parse(latTrueScale) / 180 * Math.PI, Double.Parse(lccData["CENTRAL MERIDIAN"]) / 180 * Math.PI ), new Vector2( Double.Parse(lccData["FALSE EASTING"]), Double.Parse(lccData["FALSE NORTHING"]) ), GoldData.GenerateSpheroid(lccData["DATUM"]) ); } var inverse = projection.GetInverse(); while (latLonData.Read() && lccData.Read()) { var coord = latLonData.CurrentLatLon(); var coordRads = latLonData.CurrentLatLonRadians(); var expected = lccData.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 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"]); var projection = new TransverseMercator( new GeographicCoordinate( Double.Parse(prjData["ORIGIN LATITUDE"]) * Math.PI / 180.0, Double.Parse(prjData["CENTRAL MERIDIAN"]) * Math.PI / 180.0 ), new Vector2( Double.Parse(prjData["FALSE EASTING"]), Double.Parse(prjData["FALSE NORTHING"]) ), Double.Parse(prjData["SCALE FACTOR"]), 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 Test(string geoResourceName, string lccResourceName, double projectDelta, double unprojectDelta) { var latLonData = GoldData.GetReadyReader(geoResourceName); var lccData = GoldData.GetReadyReader(lccResourceName); var projection = new LambertConicConformal2Sp( new GeographicCoordinate( Double.Parse(lccData["ORIGIN LATITUDE"]) / 180 * Math.PI, Double.Parse(lccData["CENTRAL MERIDIAN"]) / 180 * Math.PI ), Double.Parse(lccData["STANDARD PARALLEL ONE"]) / 180 * Math.PI, Double.Parse(lccData["STANDARD PARALLEL TWO"]) / 180 * Math.PI, new Vector2( Double.Parse(lccData["FALSE EASTING"]), Double.Parse(lccData["FALSE NORTHING"]) ), GoldData.GenerateSpheroid(lccData["DATUM"]) ); var inverse = projection.GetInverse(); while (latLonData.Read() && lccData.Read()) { var coord = latLonData.CurrentLatLon(); var coordRads = latLonData.CurrentLatLonRadians(); var expected = lccData.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); } }