예제 #1
0
        public void MainTest()
        {
            var    clarke  = IRI.Ham.CoordinateSystem.Ellipsoids.Clarke1880Rgs;
            double phi0    = 32.5;
            double phi1    = 29.65508274166;
            double phi2    = 35.31468809166;
            double lambda0 = 45.0;
            var    niocLcc = new LambertConformalConic(clarke, phi1, phi2, lambda0, phi0, 1500000.0, 1166200.0, 0.9987864078);

            var xLccNioc = 2047473.33479;
            var yLccNioc = 912594.777238;

            var xWgs84 = 50.689721;
            var yWgs84 = 30.072906;

            var xWebMercator = 5642753.9243;
            var yWebMercator = 3512924.70491;

            var xClarke1880Rgs = 50.689721;
            var yClarke1880Rgs = 30.075637;


            var wgs84 = niocLcc.ToWgs84Geodetic(new Point(xLccNioc, yLccNioc));

            Assert.AreEqual(xWgs84, wgs84.X, 1E-6);
            Assert.AreEqual(yWgs84, wgs84.Y, 1E-6);

            var clarke1880 = niocLcc.ToGeodetic(new Point(xLccNioc, yLccNioc));

            Assert.AreEqual(xClarke1880Rgs, clarke1880.X, 1E-6);
            Assert.AreEqual(yClarke1880Rgs, clarke1880.Y, 1E-6);

            var webMercator = MapProjects.GeodeticWgs84ToWebMercator(wgs84);

            Assert.AreEqual(xWebMercator, webMercator.X, 0.05);
            Assert.AreEqual(yWebMercator, webMercator.Y, 0.05);

            var clarke1880_2 = Transformation.ChangeDatum(wgs84, Ellipsoids.WGS84, Ellipsoids.Clarke1880Rgs);

            Assert.AreEqual(xClarke1880Rgs, clarke1880_2.X, 1E-6);
            Assert.AreEqual(yClarke1880Rgs, clarke1880_2.Y, 1E-6);
        }
예제 #2
0
        public void TestLccToGeographic()
        {
            double expectedPhi    = 35.0;
            double expectedLambda = -75.0;

            var result = new LambertConformalConic(
                IRI.Ham.CoordinateSystem.Ellipsoids.Clarke1866,
                33.0,
                45.0,
                -96.0,
                23.0).ToGeodetic(new Point(1894410.9, 1564649.5));

            Assert.AreEqual(result.X, expectedLambda, .00001);
            Assert.AreEqual(result.Y, expectedPhi, .00001);

            var ellipse = IRI.Ham.CoordinateSystem.Ellipsoids.GRS80;

            double phi0 = 52;
            double phi1 = 35;
            double phi2 = 65;

            double lambda0 = 10;

            var projection = new LambertConformalConic(ellipse, phi1, phi2, lambda0, phi0);


            //China
            double x = 10000000 - 4000000;
            double y = 4000000 - 2800000;

            result = projection.ToGeodetic(new Point(x, y));

            Assert.AreEqual(result.X, 85.22674468408002, 0.000001);
            Assert.AreEqual(result.Y, 32.27382257394294, 0.000001);

            //Canada
            x = -800000 - 4000000;
            y = 7000000 - 2800000;

            result = projection.ToGeodetic(new Point(x, y));

            Assert.AreEqual(result.X, -95.34976832367953, 0.000001);
            Assert.AreEqual(result.Y, 52.469308415860205, 0.000001);

            //Brazil
            x = -5000000 - 4000000;
            y = -350000 - 2800000;

            result = projection.ToGeodetic(new Point(x, y));

            Assert.AreEqual(result.X, -52.14245756518865, 0.000001);
            Assert.AreEqual(result.Y, -5.873476680963928, 0.000001);


            //Autralia
            x = 19000000 - 4000000;
            y = 9000000 - 2800000;

            result = projection.ToGeodetic(new Point(x, y));

            Assert.AreEqual(result.X, 132.45309686067716, 0.000001);
            Assert.AreEqual(result.Y, -21.744457361769854, 0.000001);
        }