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);
            }
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        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);
            }
        }
Exemplo n.º 5
0
        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);
            }
        }