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