コード例 #1
0
        /// <summary>
        /// Transforms a <see cref="Envelope"/>.
        /// </summary>
        /// <param name="box">BoundingBox to transform</param>
        /// <param name="transform">Math Transform</param>
        /// <returns>Transformed object</returns>
        public static Envelope TransformBox(Envelope box, IMathTransform transform)
        {
            if (box == null)
                return null;
            var corners = new Coordinate[4];
#if PCL
            var ll = new Coordinate(box.MinX, box.MinY);
            var ur = new Coordinate(box.MaxX, box.MaxY);
            var llTrans = transform.Transform(ll);
            var urTrans = transform.Transform(ur);

            corners[0] = new Coordinate(llTrans.X, llTrans.Y); //lower left
            corners[2] = new Coordinate(llTrans.X, urTrans.Y); //upper left
            corners[1] = new Coordinate(urTrans.X, urTrans.Y); //upper right
            corners[3] = new Coordinate(urTrans.X, llTrans.Y); //lower right
#else
            var ll = box.Min().ToDoubleArray();
            var ur = box.Max().ToDoubleArray();
            var llTrans = transform.Transform(ll);
            var urTrans = transform.Transform(ur);

            corners[0] = new Coordinate(llTrans[0], llTrans[1]); //lower left
            corners[2] = new Coordinate(llTrans[0], urTrans[1]); //upper left
            corners[1] = new Coordinate(urTrans[0], urTrans[1]); //upper right
            corners[3] = new Coordinate(urTrans[0], llTrans[1]); //lower right
#endif

            var result = new Envelope(corners[0]);
            for (var i = 1; i < 4; i++)
                result.ExpandToInclude(corners[i]);
            return result;
        }
        protected override void ExecuteTests(IMathTransform d, IMathTransform i)
        {
            TestDirectTransform(d, Sexa2DecimalDegrees(58, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(5, 0, 0, CardinalPoint.E), 760722.92, 3457368.68, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(56, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(5, 0, 0, CardinalPoint.E), 768396.68, 3230944.81, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(54, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(5, 0, 0, CardinalPoint.E), 776020.19, 3006003.84, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(51, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(4, 0, 0, CardinalPoint.E), 717027.29, 2668695.78, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(49, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(4, 0, 0, CardinalPoint.E), 721740.43, 2445941.16, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(53, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(3, 0, 0, CardinalPoint.E), 644764.91, 2891124.20, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(53, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(5, 0, 0, CardinalPoint.E), 779816.75, 2893981.68, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(53, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(7, 0, 0, CardinalPoint.E), 914752.17, 2900274.37, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(53, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(9, 0, 0, CardinalPoint.E), 1049483.80, 2909998.20, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(53, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(11, 0, 0, CardinalPoint.E), 1183924.41, 2923146.86, 1E-2);

            TestInverseTransform(i, Sexa2DecimalDegrees(57, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(5, 0, 0, CardinalPoint.E), 764566.84, 3343948.93, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(55, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(5, 0, 0, CardinalPoint.E), 772213.97, 3118310.95, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(53, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(5, 0, 0, CardinalPoint.E), 779816.75, 2893981.68, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(50, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(4, 0, 0, CardinalPoint.E), 719385.25, 2557252.84, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(46, 48, 0, CardinalPoint.N), Sexa2DecimalDegrees(4, 0, 0, CardinalPoint.E), 726915.75, 2201342.52, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(53, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(4, 0, 0, CardinalPoint.E), 712299.92, 2892123.37, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(53, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(6, 0, 0, CardinalPoint.E), 847304.47, 2896698.83, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(53, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(8, 0, 0, CardinalPoint.E), 982148.91, 2904707.73, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(53, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(10, 0, 0, CardinalPoint.E), 1116745.93, 2916144.90, 1E-6);

            ExecuteIterations(d, i, Sexa2DecimalDegrees(58, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(5, 0, 0, CardinalPoint.E));
        }
        protected override void ExecuteTests(IMathTransform d, IMathTransform i)
        {
            TestDirectTransform(d, Sexa2DecimalDegrees(12, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(117, 0, 0, CardinalPoint.E), 807919.144, 1329535.334, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(9, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(117, 0, 0, CardinalPoint.E), 809334.177, 996918.212, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(6, 52, 42.450, CardinalPoint.N), Sexa2DecimalDegrees(116, 50, 47.588, CardinalPoint.E), 793704.631, 762081.047, 2E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(5, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(117, 0, 0, CardinalPoint.E), 811930.345, 554475.627, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(3, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(117, 0, 0, CardinalPoint.E), 813245.133, 333300.13, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(1, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(117, 0, 0, CardinalPoint.E), 814401.375, 111916.452, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(6, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(123, 0, 0, CardinalPoint.E), 1475669.281, 673118.573, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(6, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(121, 0, 0, CardinalPoint.E), 1254086.173, 669446.249, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(6, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(119, 0, 0, CardinalPoint.E), 1032643.312, 666797.354, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(6, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(117, 0, 0, CardinalPoint.E), 811253.303, 665041.265, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(6, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(115, 0, 0, CardinalPoint.E), 589825.706, 664048.715, 1E-2);

            TestInverseTransform(i, Sexa2DecimalDegrees(10, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(117, 0, 0, CardinalPoint.E), 808784.981, 1107678.473, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(10, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(117, 0, 0, CardinalPoint.E), 808784.981, 1107678.473, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(8, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(117, 0, 0, CardinalPoint.E), 809939.302, 886240.183, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(6, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(117, 0, 0, CardinalPoint.E), 811253.303, 665041.265, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(4, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(117, 0, 0, CardinalPoint.E), 812599.582, 443902.706, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(4, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(115, 0, 0, CardinalPoint.E), 590521.147, 442890.861, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(2, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(117, 0, 0, CardinalPoint.E), 813851.067, 222645.511, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(0, 0, 0.624, CardinalPoint.S), Sexa2DecimalDegrees(109, 41, 8.955, CardinalPoint.E), 0, 0, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(6, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(122, 0, 0, CardinalPoint.E), 1364854.862, 671146.254, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(6, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(120, 0, 0, CardinalPoint.E), 1143352.598, 668002.074, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(6, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(118, 0, 0, CardinalPoint.E), 921947.286, 665815.815, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(6, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(116, 0, 0, CardinalPoint.E), 700549.965, 664457.586, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(6, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(114, 0, 0, CardinalPoint.E), 479068.802, 663798.63, 1E-6);

            ExecuteIterations(d, i, Sexa2DecimalDegrees(12, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(117, 0, 0, CardinalPoint.E));
        }
        protected void ExecuteTests(IMathTransform d, IMathTransform i)
        {
            TestGeocentricDirect(d, -1598619.169, 2768889.623, 5500844.468, -1598248.169, 2768777.623, 5501278.468, 1E-3);
            TestGeocentricDirect(d, -1598394.169, 2768499.912, 5500065.045, -1598023.169, 2768387.912, 5500499.045, 1E-3);
            TestGeocentricDirect(d, 6377563.396, 0, 0, 6377934.396, -112, 434, 1E-3);
            TestGeocentricDirect(d, 6374563.396, 0, 0, 6374934.396, -112, 434, 1E-3);
            TestGeocentricDirect(d, 6367563.396, 0, 0, 6367934.396, -112, 434, 1E-3);
            TestGeocentricDirect(d, -1598394.169, -2768499.912, -5500065.045, -1598023.169, -2768611.912, -5499631.045, 1E-3);
            TestGeocentricDirect(d, -1598169.169, -2768110.201, -5499285.622, -1597798.169, -2768222.201, -5498851.622, 1E-3);
            TestGeocentricDirect(d, 0, -5783481.614, 2678892.11, 371, -5783593.614, 2679326.11, 1E-3);
            TestGeocentricDirect(d, -4087466.478, 2977579.559, -3875891.429, -4087095.478, 2977467.559, -3875457.429, 1E-3);
            TestGeocentricDirect(d, -4086290.959, 2976723.233, -3874769.274, -4085919.959, 2976611.233, -3874335.274, 1E-3);
            TestGeocentricDirect(d, -4084371.165, 2975324.729, -3872936.631, -4084000.165, 2975212.729, -3872502.631, 1E-3);
            TestGeocentricDirect(d, -4079891.647, 2972061.553, -3868660.465, -4079520.647, 2971949.553, -3868226.465, 1E-3);
            TestGeocentricDirect(d, -2187707.719, 0, -5970583.093, -2187336.719, -112, -5970149.093, 1E-3);

            TestGeocentricInverse(i, -962850.5924, 555799.8517, 6260304.653, -962479.5924, 555687.8517, 6260738.653, 1E-3);
            TestGeocentricInverse(i, -962668.0059, 555694.4354, 6259108.961, -962297.0059, 555582.4354, 6259542.961, 1E-3);
            TestGeocentricInverse(i, 2763839.405, 4787864.865, 3170034.52, 2764210.405, 4787752.865, 3170468.52, 1E-3);
            TestGeocentricInverse(i, 2763757.32, 4787722.688, 3169939.735, 2764128.32, 4787610.688, 3170373.735, 1E-3);
            TestGeocentricInverse(i, 2763757.32, -4787498.688, -3170807.735, 2764128.32, -4787610.688, -3170373.735, 1E-3);
            TestGeocentricInverse(i, 2763529.349, -4787103.831, -3170544.497, 2763900.349, -4787215.831, -3170110.497, 1E-3);
            TestGeocentricInverse(i, 2763509.863, -4787070.081, -3170521.997, 2763880.863, -4787182.081, -3170087.997, 1E-3);
            TestGeocentricInverse(i, -962668.0059, -555470.4354, -6259976.961, -962297.0059, -555582.4354, -6259542.961, 1E-3);
            TestGeocentricInverse(i, -962521.945, -555386.1071, -6259020.462, -962150.945, -555498.1071, -6258586.462, 1E-3);
            TestGeocentricInverse(i, -962169.2951, -555182.5046, -6256711.087, -961798.2951, -555294.5046, -6256277.087, 1E-3);
            TestGeocentricInverse(i, -2187707.719, 0, 5970583.093, -2187336.719, -112, 5971017.093, 1E-3);
            TestGeocentricInverse(i, -2905069.555, -2904586.555, 4862355.038, -2904698.555, -2904698.555, 4862789.038, 1E-3);
            TestGeocentricInverse(i, 6377766, 112, -434, 6378137, 0, 0, 1E-3);
            TestGeocentricInverse(i, -2905069.555, 2904810.555, -4863223.038, -2904698.555, 2904698.555, -4862789.038, 1E-3);
        }
コード例 #5
0
 private static Coordinate Transform(IMathTransform transform, Coordinate input)
 {
     var ordinates = transform.Transform(input.ToDoubleArray());
     if (ordinates.Length == 2)
         return new Coordinate(ordinates[0], ordinates[1]);
     return new Coordinate(ordinates[0], ordinates[1], ordinates[2]);
 }
        protected override void ExecuteTests(IMathTransform d, IMathTransform i)
        {
            TestDirectTransform(d, Sexa2DecimalDegrees(58, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(5, 0, 0, CardinalPoint.E), 187742.7, 969521.653, 1E-3);
            TestDirectTransform(d, Sexa2DecimalDegrees(56, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(5, 0, 0, CardinalPoint.E), 189652.853, 745291.184, 1E-3);
            TestDirectTransform(d, Sexa2DecimalDegrees(54, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(5, 0, 0, CardinalPoint.E), 191555.55, 521935.9, 1E-3);
            TestDirectTransform(d, Sexa2DecimalDegrees(52, 09, 22.178, CardinalPoint.N), Sexa2DecimalDegrees(5, 23, 15.500, CardinalPoint.E), 219843.841, 316827.604, 1E-3);
            TestDirectTransform(d, Sexa2DecimalDegrees(50, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(4, 0, 0, CardinalPoint.E), 123652.406, 76521.628, 1E-3);
            TestDirectTransform(d, Sexa2DecimalDegrees(47, 58, 30.940, CardinalPoint.N), Sexa2DecimalDegrees(3, 18, 49.421, CardinalPoint.E), 71254.553, -148236.592, 1E-3);
            TestDirectTransform(d, Sexa2DecimalDegrees(53, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(3, 0, 0, CardinalPoint.E), 58108.966, 411155.591, 1E-3);
            TestDirectTransform(d, Sexa2DecimalDegrees(53, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(5, 0, 0, CardinalPoint.E), 192504.921, 410490.433, 1E-3);
            TestDirectTransform(d, Sexa2DecimalDegrees(53, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(7, 0, 0, CardinalPoint.E), 326870.04, 413445.087, 1E-3);
            TestDirectTransform(d, Sexa2DecimalDegrees(53, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(9, 0, 0, CardinalPoint.E), 461106.844, 420017.408, 1E-3);
            TestDirectTransform(d, Sexa2DecimalDegrees(53, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(11, 0, 0, CardinalPoint.E), 595117.95, 430202.63, 1E-3);

            TestInverseTransform(i, Sexa2DecimalDegrees(57, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(5, 0, 0, CardinalPoint.E), 188698.877, 857277.135, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(55, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(5, 0, 0, CardinalPoint.E), 190604.967, 633523.672, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(53, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(5, 0, 0, CardinalPoint.E), 192504.921, 410490.433, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(51, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(4, 0, 0, CardinalPoint.E), 124202.936, 187756.876, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(49, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(4, 0, 0, CardinalPoint.E), 123101.889, -34711.068, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(53, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(4, 0, 0, CardinalPoint.E), 125304.704, 410370.504, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(53, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(6, 0, 0, CardinalPoint.E), 259697.429, 411515.356, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(53, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(8, 0, 0, CardinalPoint.E), 394010.571, 416279.276, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(53, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(10, 0, 0, CardinalPoint.E), 528146.69, 424658.807, 1E-6);

            ExecuteIterations(d, i, Sexa2DecimalDegrees(58, 0, 0, CardinalPoint.N), Sexa2DecimalDegrees(5, 0, 0, CardinalPoint.E));
        }
        protected override void ExecuteTests(IMathTransform d, IMathTransform i)
        {
            TestDirectTransform(d, Sexa2DecimalDegrees(57, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(5, 00, 00.000, CardinalPoint.E), 131405.466, 1002468.081, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(55, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(5, 00, 00.000, CardinalPoint.E), 130183.562, 779577.697, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(53, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(5, 00, 00.000, CardinalPoint.E), 128979.263, 556953.19, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(51, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(4, 00, 00.000, CardinalPoint.E), 57605.946, 335312.662, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(49, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(4, 00, 00.000, CardinalPoint.E), 53412.761, 112842.732, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(53, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(4, 00, 00.000, CardinalPoint.E), 61856.776, 557779.118, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(53, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(6, 00, 00.000, CardinalPoint.E), 196105.283, 557057.739, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(53, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(8, 00, 00.000, CardinalPoint.E), 330331.464, 560058.312, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(53, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(10, 00, 00.000, CardinalPoint.E), 464462.348, 566781.236, 1E-2);

            TestInverseTransform(i, Sexa2DecimalDegrees(58, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(5, 00, 00.000, CardinalPoint.E), 132023.27, 1114054.872, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(56, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(5, 00, 00.000, CardinalPoint.E), 130792.264, 890981.281, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(54, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(5, 00, 00.000, CardinalPoint.E), 129579.261, 668240.578, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(52, 09, 22.178, CardinalPoint.N), Sexa2DecimalDegrees(5, 23, 15.500, CardinalPoint.E), 155000, 463000, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(50, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(4, 00, 00.000, CardinalPoint.E), 55502.306, 224086.514, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(47, 58, 30.940, CardinalPoint.N), Sexa2DecimalDegrees(3, 18, 49.421, CardinalPoint.E), 0, 0, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(53, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(3, 00, 00.000, CardinalPoint.E), -5253.063, 559535.55, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(53, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(5, 00, 00.000, CardinalPoint.E), 128979.263, 556953.19, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(53, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(7, 00, 00.000, CardinalPoint.E), 263225.722, 558092.769, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(53, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(9, 00, 00.000, CardinalPoint.E), 397413.385, 562954.436, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(53, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(11, 00, 00.000, CardinalPoint.E), 531469.202, 571538.839, 1E-6);

            ExecuteIterations(d, i, Sexa2DecimalDegrees(57, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(5, 00, 00.000, CardinalPoint.E));
        }
        protected override void ExecuteTests(IMathTransform d, IMathTransform i)
        {
            TestDirectTransform(d, 64.44444444, 2.958634256, 760724.023, 3457334.864, 1E-3);
            TestDirectTransform(d, 62.22222222, 2.958634256, 768397.648, 3230915.06, 1E-3);
            TestDirectTransform(d, 60, 2.958634256, 776020.989, 3005978.979, 1E-3);
            TestDirectTransform(d, 56.66666667, 1.847523144, 717027.602, 2668679.866, 1E-3);
            TestDirectTransform(d, 54.44444444, 1.847523144, 721740.59, 2445932.319, 1E-3);
            TestDirectTransform(d, 58.88888889, 0.736412033, 644765.081, 2891102.088, 1E-3);
            TestDirectTransform(d, 58.88888889, 2.958634256, 779817.454, 2893959.584, 1E-3);
            TestDirectTransform(d, 58.88888889, 5.180856478, 914753.403, 2900252.301, 1E-3);
            TestDirectTransform(d, 58.88888889, 7.4030787, 1049485.565, 2909976.163, 1E-3);
            TestDirectTransform(d, 58.88888889, 9.625300922, 1183926.705, 2923124.876, 1E-3);

            TestInverseTransform(i, 63.33333333, 2.958634256, 764567.882, 3343917.044, 1E-6);
            TestInverseTransform(i, 61.11111111, 2.958634256, 772214.859, 3118283.535, 1E-6);
            TestInverseTransform(i, 58.88888889, 2.958634256, 779817.454, 2893959.584, 1E-6);
            TestInverseTransform(i, 55.55555556, 1.847523144, 719385.487, 2557240.347, 1E-6);
            TestInverseTransform(i, 52, 1.847523144, 726915.726, 2201342.518, 1E-6);
            TestInverseTransform(i, 58.88888889, 1.847523144, 712300.356, 2892101.266, 1E-6);
            TestInverseTransform(i, 58.88888889, 4.069745367, 847305.444, 2896676.742, 1E-6);
            TestInverseTransform(i, 58.88888889, 6.291967589, 982150.413, 2904685.68, 1E-6);
            TestInverseTransform(i, 58.88888889, 8.514189811, 1116747.958, 2916122.894, 1E-6);

            ExecuteIterations(d, i, 64.44444444, 2.958634256);
        }
コード例 #9
0
ファイル: DatumTransform.cs プロジェクト: izambakci/tf-net
 /// <summary>
 /// Creates the inverse transform of this object.
 /// </summary>
 /// <returns></returns>
 /// <remarks>This method may fail if the transform is not one to one. However, all cartographic projections should succeed.</remarks>
 public override IMathTransform Inverse()
 {
     if (this._inverse == null)
     {
         this._inverse = new DatumTransform(this._ToWgs94, !this._isInverse);
     }
     return this._inverse;
 }
コード例 #10
0
		/// <summary>
		/// Returns the inverse of this conversion.
		/// </summary>
		/// <returns>IMathTransform that is the reverse of the current conversion.</returns>
		public override IMathTransform Inverse()
		{
			if (_inverse == null)
			{
				_inverse = new ConcatenatedTransform(_CoordinateTransformationList);
				_inverse.Invert();
			}
			return _inverse;
		}
        protected void TestDirectTransform(IMathTransform t, double original, double transformated, double sigma)
        {
            double[] transformado = t.Transform(new double[] { original });

            Assert.AreNotEqual(transformado[0], double.NaN);
            Assert.AreNotEqual(transformado[0], double.PositiveInfinity);
            Assert.AreNotEqual(transformado[0], double.NegativeInfinity);
            Assert.AreEqual(transformated, transformado[0], sigma);
        }
コード例 #12
0
        /// <summary>
        /// Transforms a <see cref="NetTopologySuite.Geometries.Polygon"/>.
        /// </summary>
        /// <param name="p">Polygon to transform</param>
        /// <param name="transform">MathTransform</param>
        /// <returns>Transformed Polygon</returns>
        public static IPolygon TransformPolygon(IPolygon p, IMathTransform transform)
        {
            List <ILinearRing> rings = new List <ILinearRing>(p.InteriorRings.Length);

            for (int i = 0; i < p.InteriorRings.Length; i++)
            {
                rings.Add(TransformLinearRing((ILinearRing)p.InteriorRings[i], transform));
            }
            return(GeometryFactory.CreatePolygon(TransformLinearRing((ILinearRing)p.ExteriorRing, transform), rings.ToArray()));
        }
コード例 #13
0
 /// <summary>
 /// Transforms a <see cref="Point" /> object.
 /// </summary>
 /// <param name="factory"></param>
 /// <param name="p"></param>
 /// <param name="transform"></param>
 /// <returns></returns>
 public static IPoint TransformPoint(IGeometryFactory factory,
                                     IPoint p, IMathTransform transform)
 {
     try
     {
         var transformed = transform.Transform(p.CoordinateSequence);
         return(factory.CreatePoint(transformed));
     }
     catch { return(null); }
 }
コード例 #14
0
        /// <summary>
        /// Transforms a <see cref="NetTopologySuite.Geometries.MultiPolygon"/>.
        /// </summary>
        /// <param name="polys">MultiPolygon to transform</param>
        /// <param name="transform">MathTransform</param>
        /// <returns>Transformed MultiPolygon</returns>
        public static IMultiPolygon TransformMultiPolygon(IMultiPolygon polys, IMathTransform transform)
        {
            List <IPolygon> polygons = new List <IPolygon>(polys.Geometries.Length);

            foreach (IPolygon p in polys.Geometries)
            {
                polygons.Add(TransformPolygon(p, transform));
            }
            return(GeometryFactory.CreateMultiPolygon(polygons.ToArray()));
        }
コード例 #15
0
 /// <summary>
 /// Transforms a <see cref="ILinearRing" /> object.
 /// </summary>
 /// <param name="factory"></param>
 /// <param name="r"></param>
 /// <param name="transform"></param>
 /// <returns></returns>
 public static ILinearRing TransformLinearRing(IGeometryFactory factory,
                                               ILinearRing r, IMathTransform transform)
 {
     try
     {
         var coordSequence = transform.Transform(r.CoordinateSequence);
         return(factory.CreateLinearRing(coordSequence));
     }
     catch { return(null); }
 }
        protected override void ExecuteTests(IMathTransform d, IMathTransform i)
        {
#if _FORMULAS_JHS
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(146, 00, 00.000, CardinalPoint.E), 778711.230, 16661953.040, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(20, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(146, 00, 00.000, CardinalPoint.E), 1023538.687, 12219308.238, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(20, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(146, 00, 00.000, CardinalPoint.E), 1023538.687, 7780691.762, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(40, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(146, 00, 00.000, CardinalPoint.E), 926893.302, 5560253.083, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(80, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(146, 00, 00.000, CardinalPoint.E), 596813.055, 1114251.292, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(136, 00, 00.000, CardinalPoint.E), 221288.770, 3338046.960, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(138, 00, 00.000, CardinalPoint.E), 332705.179, 3344794.516, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(140, 00, 00.000, CardinalPoint.E), 444223.733, 3348167.265, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(142, 00, 00.000, CardinalPoint.E), 555776.267, 3348167.265, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(144, 00, 00.000, CardinalPoint.E), 667294.821, 3344794.516, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(146, 00, 00.000, CardinalPoint.E), 778711.230, 3338046.960, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(148, 00, 00.000, CardinalPoint.E), 889956.701, 3327920.506, 1E-2);

            TestInverseTransform(i, Sexa2DecimalDegrees(80, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(146, 00, 00.000, CardinalPoint.E), 596813.055, 18885748.708, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(40, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(146, 00, 00.000, CardinalPoint.E), 926893.302, 14439746.917, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(0, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(146, 00, 00.000, CardinalPoint.E), 1057087.120, 10000000.000, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(146, 00, 00.000, CardinalPoint.E), 778711.230, 3338046.960, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(137, 00, 00.000, CardinalPoint.E), 276979.926, 3341842.798, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(139, 00, 00.000, CardinalPoint.E), 388455.958, 3346902.565, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(141, 00, 00.000, CardinalPoint.E), 500000.000, 3348588.810, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(143, 00, 00.000, CardinalPoint.E), 611544.042, 3346902.565, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(145, 00, 00.000, CardinalPoint.E), 723020.074, 3341842.798, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(147, 00, 00.000, CardinalPoint.E), 834359.668, 3333406.428, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(149, 00, 00.000, CardinalPoint.E), 945493.565, 3321588.377, 1E-6);
#else
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(146, 00, 00.000, CardinalPoint.E), 778711.230, 16661953.041, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(20, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(146, 00, 00.000, CardinalPoint.E), 1023538.687, 12219308.238, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(20, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(146, 00, 00.000, CardinalPoint.E), 1023538.687, 7780691.762, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(40, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(146, 00, 00.000, CardinalPoint.E), 926893.304, 5560253.083, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(80, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(146, 00, 00.000, CardinalPoint.E), 596813.055, 1114251.292, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(136, 00, 00.000, CardinalPoint.E), 221288.770, 3338046.959, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(138, 00, 00.000, CardinalPoint.E), 332705.179, 3344794.516, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(140, 00, 00.000, CardinalPoint.E), 444223.733, 3348167.264, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(142, 00, 00.000, CardinalPoint.E), 555776.267, 3348167.264, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(144, 00, 00.000, CardinalPoint.E), 667294.821, 3344794.516, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(146, 00, 00.000, CardinalPoint.E), 778711.230, 3338046.959, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(148, 00, 00.000, CardinalPoint.E), 889956.700, 3327920.505, 1E-2);

            TestInverseTransform(i, Sexa2DecimalDegrees(80, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(146, 00, 00.001, CardinalPoint.E), 596813.055, 18885748.708, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(40, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(146, 00, 00.000, CardinalPoint.E), 926893.302, 14439746.917, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(0, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(146, 00, 00.000, CardinalPoint.E), 1057087.120, 10000000.000, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(146, 00, 00.001, CardinalPoint.E), 778711.230, 3338046.960, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(137, 00, 00.000, CardinalPoint.E), 276979.926, 3341842.798, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(139, 00, 00.000, CardinalPoint.E), 388455.958, 3346902.565, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(141, 00, 00.000, CardinalPoint.E), 500000.000, 3348588.810, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(143, 00, 00.000, CardinalPoint.E), 611544.042, 3346902.565, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(145, 00, 00.000, CardinalPoint.E), 723020.074, 3341842.798, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(147, 00, 00.003, CardinalPoint.E), 834359.668, 3333406.428, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(59, 59, 59.999, CardinalPoint.S), Sexa2DecimalDegrees(149, 00, 00.023, CardinalPoint.E), 945493.565, 3321588.377, 1E-6);
#endif
            ExecuteIterations(d, i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(146, 00, 00.000, CardinalPoint.E));
        }
コード例 #17
0
ファイル: GeometryTransform.cs プロジェクト: lishxi/_SharpMap
 /// <summary>
 /// Transforms a <see cref="SharpMap.Geometries.Point"/>.
 /// </summary>
 /// <param name="p">Point to transform</param>
 /// <param name="transform">MathTransform</param>
 /// <returns>Transformed Point</returns>
 public static Point TransformPoint(Point p, IMathTransform transform)
 {
     try
     {
         return new Point(transform.Transform(p.ToDoubleArray()));
     }
     catch
     {
         return null;
     }
 }
 protected override void ExecuteTests(IMathTransform d)
 {
     TestDirectTransform(d, -72, -100, 1E-6);
     TestDirectTransform(d, -66.67, -94.67, 1E-6);
     TestDirectTransform(d, -17, -45, 1E-6);
     TestDirectTransform(d, 0, -28, 1E-6);
     TestDirectTransform(d, 28, 0, 1E-6);
     TestDirectTransform(d, 36, 8, 1E-6);
     TestDirectTransform(d, 44.3, 16.3, 1E-6);
     TestDirectTransform(d, 210, 182, 1E-6);
 }
        protected override void ExecuteTests(IMathTransform d, IMathTransform i)
        {
            TestDirectTransform(d, Sexa2DecimalDegrees(0, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(51, 00, 00.000, CardinalPoint.E), 0.00, 0.00, 3E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(20, 30, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(54, 00, 00.000, CardinalPoint.E), 1724781.50, 248556.44, 3E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(41, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(67, 00, 00.000, CardinalPoint.E), -3709687.25, 1325634.35, 3E-2);

            TestInverseTransform(i, Sexa2DecimalDegrees(42, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(51, 00, 00.000, CardinalPoint.E), 3819897.85, 0.00, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(0, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(57, 00, 00.000, CardinalPoint.E), 0.00, 497112.88, 1E-6);

            ExecuteIterations(d, i, Sexa2DecimalDegrees(0, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(51, 00, 00.000, CardinalPoint.E));
        }
 protected override void ExecuteTests(IMathTransform d)
 {
     TestDirectTransform(d, 100, -72, 1E-6);
     TestDirectTransform(d, 94.67, -66.67, 1E-6);
     TestDirectTransform(d, 45, -17, 1E-6);
     TestDirectTransform(d, 28, 0, 1E-6);
     TestDirectTransform(d, 0, 28, 1E-6);
     TestDirectTransform(d, -8, 36, 1E-6);
     TestDirectTransform(d, -16.3, 44.3, 1E-6);
     TestDirectTransform(d, -182, 210, 1E-6);
 }
コード例 #21
0
        public static Matrix4x4 GetLocation(this IMathTransform transform)
        {
            var data = transform.ArrayData as double[];

            return(new Matrix4x4(
                       (float)data[0], (float)data[1], (float)data[2], (float)data[13],
                       (float)data[3], (float)data[4], (float)data[5], (float)data[14],
                       (float)data[6], (float)data[7], (float)data[8], (float)data[15],
                       (float)data[9], (float)data[10], (float)data[11], (float)data[12]
                       ));
        }
 protected override void ExecuteTests(IMathTransform d)
 {
     TestDirectTransform(d, 72, -72, 1E-6);
     TestDirectTransform(d, 66.67, -66.67, 1E-6);
     TestDirectTransform(d, 17, -17, 1E-6);
     TestDirectTransform(d, 0, 0, 1E-6);
     TestDirectTransform(d, -28, 28, 1E-6);
     TestDirectTransform(d, -36, 36, 1E-6);
     TestDirectTransform(d, -44.3, 44.3, 1E-6);
     TestDirectTransform(d, -210, 210, 1E-6);
 }
        protected override void ExecuteTests(IMathTransform d, IMathTransform i)
        {
            TestDirectTransform(d, Sexa2DecimalDegrees(0, 00, 0, CardinalPoint.N), Sexa2DecimalDegrees(22, 30, 0, CardinalPoint.E), -166998.442, 0, 1E-3);
            TestDirectTransform(d, Sexa2DecimalDegrees(30, 00, 0, CardinalPoint.S), Sexa2DecimalDegrees(20, 30, 0, CardinalPoint.E), 48243.449, 3320218.65, 1E-3);
            TestDirectTransform(d, Sexa2DecimalDegrees(35, 00, 0, CardinalPoint.S), Sexa2DecimalDegrees(19, 30, 0, CardinalPoint.E), 136937.651, 3875621.182, 1E-3);

            TestInverseTransform(i, Sexa2DecimalDegrees(25, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(21, 30, 00.000, CardinalPoint.E), -50475.46, 2766147.248, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(35, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(19, 30, 00.000, CardinalPoint.E), 136937.651, 3875621.182, 1E-6);

            ExecuteIterations(d, i, Sexa2DecimalDegrees(0, 00, 0, CardinalPoint.N), Sexa2DecimalDegrees(22, 30, 0, CardinalPoint.E));
        }
コード例 #24
0
        /// <summary>
        /// Transforms coordinates of the polyline.
        /// </summary>
        /// <param name="polyline">Polyline to transform</param>
        /// <param name="transform">The transformation to apply</param>
        /// <returns>The transformed polyline</returns>
        public static Polyline TransformPolyline(Polyline polyline, IMathTransform transform)
        {
            Polyline result = new Polyline();

            foreach (LinePath path in polyline.Paths)
            {
                result.Paths.Add(TransformLinePath(path, transform));
            }

            return(result);
        }
 protected override void ExecuteTests(IMathTransform d)
 {
     TestDirectTransform(d, 72, 100, 1E-6);
     TestDirectTransform(d, 66.67, 94.67, 1E-6);
     TestDirectTransform(d, 17, 45, 1E-6);
     TestDirectTransform(d, 0, 28, 1E-6);
     TestDirectTransform(d, -28, 0, 1E-6);
     TestDirectTransform(d, -36, -8, 1E-6);
     TestDirectTransform(d, -44.3, -16.3, 1E-6);
     TestDirectTransform(d, -210, -182, 1E-6);
 }
コード例 #26
0
        /// <summary>
        /// Transforms coordinates of the polygon.
        /// </summary>
        /// <param name="polygon">Polygon to transform</param>
        /// <param name="transform">The transformation to apply</param>
        /// <returns>The transformed polygon</returns>
        public static Polygon TransformPolygon(Polygon polygon, IMathTransform transform)
        {
            Polygon result = new Polygon();

            foreach (Contour contour in polygon.Contours)
            {
                result.Contours.Add(TransformContour(contour, transform));
            }

            return(result);
        }
コード例 #27
0
	    /// <summary>
	    /// 
	    /// </summary>
	    /// <param name="ls"></param>
	    /// <param name="transform"></param>
	    /// <returns></returns>
	    private static ICoordinate[] ExtractCoordinates(IGeometry ls, IMathTransform transform)
	    {
	        List<double[]> points = new List<double[]>(ls.NumPoints);
	        foreach (ICoordinate c in ls.Coordinates)
	            points.Add(ToArray(c.X, c.Y));
	        points = transform.TransformList(points);
	        List<ICoordinate> coords = new List<ICoordinate>(points.Count);
	        foreach (double[] p in points)
	            coords.Add(new Coordinate(p[0], p[1]));
	        return coords.ToArray();
	    }
コード例 #28
0
        public static Polygon TransformPolygon(Polygon p, IMathTransform transform)
        {
            Polygon pOut = new Polygon(TransformLinearRing(p.ExteriorRing, transform));

            pOut.InteriorRings = new Collection <LinearRing>();
            for (int i = 0; i < p.InteriorRings.Count; i++)
            {
                pOut.InteriorRings.Add(TransformLinearRing(p.InteriorRings[i], transform));
            }
            return(pOut);
        }
コード例 #29
0
 /// <summary>
 /// Transforms a <see cref="GeoAPI.Geometries.ILinearRing"/>.
 /// </summary>
 /// <param name="r">LinearRing to transform</param>
 /// <param name="transform">MathTransform</param>
 /// <param name="targetFactory">The factory to create the target geometry</param>
 /// <returns>Transformed LinearRing</returns>
 public static ILinearRing TransformLinearRing(ILinearRing r, IMathTransform transform, IGeometryFactory targetFactory)
 {
     try
     {
         return(targetFactory.CreateLinearRing(TransformCoordinates(r.Coordinates, transform)));
     }
     catch
     {
         return(null);
     }
 }
コード例 #30
0
        /// <summary>
        /// Function to transform <paramref name="c"/> using <paramref name="transform"/>
        /// </summary>
        /// <param name="c">The array of coordinates</param>
        /// <param name="transform">The transformation</param>
        /// <returns>An array of transformed coordinates</returns>
        private static Coordinate[] TransformCoordinates(Coordinate[] c, IMathTransform transform)
        {
            var res = new Coordinate[c.Length];

            for (var i = 0; i < c.Length; i++)
            {
                var ordinates = transform.Transform(c[i].ToDoubleArray());
                res[i] = new Coordinate(ordinates[0], ordinates[1]);
            }
            return(res);
        }
コード例 #31
0
        /// <summary>
        /// Transforms a <see cref="MultiPoint"/>.
        /// </summary>
        /// <param name="points">MultiPoint to transform</param>
        /// <param name="transform">MathTransform</param>
        /// <returns>Transformed MultiPoint</returns>
        public static MultiPoint TransformMultiPoint(MultiPoint points, IMathTransform transform)
        {
            List <Point> pointList = new List <Point>(points.Geometries.Length);

            foreach (Point p in points.Geometries)
            {
                pointList.Add(p);
            }
            pointList = transform.TransformList(pointList);
            return(new MultiPoint(pointList.ToArray()));
        }
コード例 #32
0
 /// <summary>
 /// Transforms a <see cref="GeoAPI.Geometries.IPoint"/>.
 /// </summary>
 /// <param name="p">Point to transform</param>
 /// <param name="transform">MathTransform</param>
 /// <param name="targetFactory">The factory to create the target geometry</param>
 /// <returns>Transformed Point</returns>
 public static IPoint TransformPoint(IPoint p, IMathTransform transform, IGeometryFactory targetFactory)
 {
     try
     {
         return(targetFactory.CreatePoint(TransformCoordinate(p.Coordinate, transform)));
     }
     catch
     {
         return(null);
     }
 }
        protected override void ExecuteTests(IMathTransform d, IMathTransform i)
        {
#if _FORMULAS_JHS
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(2, 00, 00.000, CardinalPoint.W), 221288.770, 6661953.041, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(20, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(2, 00, 00.000, CardinalPoint.W), -23538.687, 2219308.238, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(0, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(2, 00, 00.000, CardinalPoint.W), -57087.120, 0.000, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(40, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(2, 00, 00.000, CardinalPoint.W), 73106.698, -4439746.917, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(80, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(2, 00, 00.000, CardinalPoint.W), 403186.945, -8885748.708, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(5, 00, 00.000, CardinalPoint.W), 54506.435, 6678411.623, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(3, 00, 00.000, CardinalPoint.W), 165640.332, 6666593.572, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(1, 00, 00.000, CardinalPoint.W), 276979.926, 6658157.202, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(1, 00, 00.000, CardinalPoint.E), 388455.958, 6653097.435, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(3, 00, 00.000, CardinalPoint.E), 500000.000, 6651411.190, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(5, 00, 00.000, CardinalPoint.E), 611544.042, 6653097.435, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(7, 00, 00.000, CardinalPoint.E), 723020.074, 6658157.202, 1E-2);

            TestInverseTransform(i, Sexa2DecimalDegrees(80, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(2, 00, 00.000, CardinalPoint.W), 403186.945, 8885748.708, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(40, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(2, 00, 00.000, CardinalPoint.W), 73106.698, 4439746.917, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(20, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(2, 00, 00.000, CardinalPoint.W), -23538.687, -2219308.238, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(2, 00, 00.000, CardinalPoint.W), 221288.770, -6661953.041, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(4, 00, 00.000, CardinalPoint.W), 110043.299, 6672079.494, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(2, 00, 00.000, CardinalPoint.W), 221288.770, 6661953.041, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(0, 00, 00.000, CardinalPoint.E), 332705.179, 6655205.484, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(2, 00, 00.000, CardinalPoint.E), 444223.733, 6651832.735, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(4, 00, 00.000, CardinalPoint.E), 555776.267, 6651832.735, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(6, 00, 00.000, CardinalPoint.E), 667294.821, 6655205.484, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(8, 00, 00.000, CardinalPoint.E), 778711.230, 6661953.041, 1E-6);
#else
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(2, 00, 00.000, CardinalPoint.W), 221288.770, 6661953.041, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(20, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(2, 00, 00.000, CardinalPoint.W), -23538.687, 2219308.238, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(40, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(2, 00, 00.000, CardinalPoint.W), 73106.696, -4439746.917, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(80, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(2, 00, 00.000, CardinalPoint.W), 403186.945, -8885748.708, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(5, 00, 00.000, CardinalPoint.W), 54506.437, 6678411.625, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(3, 00, 00.000, CardinalPoint.W), 165640.332, 6666593.573, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(1, 00, 00.000, CardinalPoint.W), 276979.926, 6658157.203, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(1, 00, 00.000, CardinalPoint.E), 388455.958, 6653097.436, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(3, 00, 00.000, CardinalPoint.E), 500000.000, 6651411.191, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(5, 00, 00.000, CardinalPoint.E), 611544.042, 6653097.436, 1E-2);
            TestDirectTransform(d, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(7, 00, 00.000, CardinalPoint.E), 723020.074, 6658157.203, 1E-2);

            TestInverseTransform(i, Sexa2DecimalDegrees(80, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(2, 00, 00.001, CardinalPoint.W), 403186.945, 8885748.708, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(40, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(2, 00, 00.000, CardinalPoint.W), 73106.698, 4439746.917, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(20, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(2, 00, 00.000, CardinalPoint.W), -23538.687, -2219308.238, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.S), Sexa2DecimalDegrees(2, 00, 00.001, CardinalPoint.W), 221288.770, -6661953.041, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(4, 00, 00.009, CardinalPoint.W), 110043.299, 6672079.494, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(2, 00, 00.000, CardinalPoint.W), 221288.770, 6661953.041, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(0, 00, 00.000, CardinalPoint.E), 332705.179, 6655205.484, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(2, 00, 00.000, CardinalPoint.E), 444223.733, 6651832.735, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(4, 00, 00.000, CardinalPoint.E), 555776.267, 6651832.735, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(6, 00, 00.000, CardinalPoint.E), 667294.821, 6655205.484, 1E-6);
            TestInverseTransform(i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(8, 00, 00.001, CardinalPoint.E), 778711.230, 6661953.041, 1E-6);
#endif
            ExecuteIterations(d, i, Sexa2DecimalDegrees(60, 00, 00.000, CardinalPoint.N), Sexa2DecimalDegrees(2, 00, 00.000, CardinalPoint.W));
        }
コード例 #34
0
        /// <summary>
        /// Transforms a <see cref="SharpMap.Geometries.Polygon"/>.
        /// </summary>
        /// <param name="p">Polygon to transform</param>
        /// <param name="transform">MathTransform</param>
        /// <returns>Transformed Polygon</returns>
        public static Polygon TransformPolygon(Polygon p, IMathTransform transform)
        {
            Polygon pOut = new Polygon(TransformLinearRing(p.ExteriorRing, transform));

            pOut.InteriorRings = new List <LinearRing>(p.InteriorRings.Count);            //Pre-inialize array size for better performance
            for (int i = 0; i < p.InteriorRings.Count; i++)
            {
                pOut.InteriorRings.Add(TransformLinearRing(p.InteriorRings[i], transform));
            }
            return(pOut);
        }
コード例 #35
0
 /// <summary>
 /// Transforms a <see cref="RGeos.Geometries.RgPoint"/>.
 /// </summary>
 /// <param name="p">Point to transform</param>
 /// <param name="transform">MathTransform</param>
 /// <returns>Transformed Point</returns>
 public static RgPoint TransformPoint(RgPoint p, IMathTransform transform)
 {
     try
     {
         return(new RgPoint(transform.Transform(p.ToDoubleArray())));
     }
     catch
     {
         return(null);
     }
 }
コード例 #36
0
        public static MultiPolygon TransformMultiPolygon(MultiPolygon polys, IMathTransform transform)
        {
            MultiPolygon pOut = new MultiPolygon();

            pOut.Polygons = new Collection <Polygon>();
            for (int i = 0; i < polys.NumGeometries; i++)
            {
                pOut.Polygons.Add(TransformPolygon(polys[i], transform));
            }
            return(pOut);
        }
 protected override void ExecuteTests(IMathTransform d)
 {
     TestDirectTransform(d, 100, -100, 1E-6);
     TestDirectTransform(d, 94.67, -94.67, 1E-6);
     TestDirectTransform(d, 45, -45, 1E-6);
     TestDirectTransform(d, 28, -28, 1E-6);
     TestDirectTransform(d, 0, 0, 1E-6);
     TestDirectTransform(d, -8, 8, 1E-6);
     TestDirectTransform(d, -16.3, 16.3, 1E-6);
     TestDirectTransform(d, -182, 182, 1E-6);
 }
コード例 #38
0
        /// <summary>
        /// Transforms a <see cref="GeoAPI.Geometries.IMultiPolygon"/>.
        /// </summary>
        /// <param name="polys">MultiPolygon to transform</param>
        /// <param name="transform">MathTransform</param>
        /// <param name="targetFactory">The factory to create the target geometry</param>
        /// <returns>Transformed MultiPolygon</returns>
        public static IMultiPolygon TransformMultiPolygon(IMultiPolygon polys, IMathTransform transform, IGeometryFactory targetFactory)
        {
            var polyList = new IPolygon[polys.NumGeometries];

            for (var i = 0; i < polys.NumGeometries; i++)
            {
                var poly = (IPolygon)polys[i];
                polyList[i] = TransformPolygon(poly, transform, targetFactory);
            }
            return(targetFactory.CreateMultiPolygon(polyList));
        }
コード例 #39
0
        /// <summary>
        /// Transforms a <see cref="SharpMap.Geometries.MultiPolygon"/>.
        /// </summary>
        /// <param name="polys">MultiPolygon to transform</param>
        /// <param name="transform">MathTransform</param>
        /// <returns>Transformed MultiPolygon</returns>
        public static MultiPolygon TransformMultiPolygon(MultiPolygon polys, IMathTransform transform)
        {
            MultiPolygon pOut = new MultiPolygon();

            pOut.Polygons = new List <Polygon>(polys.Polygons.Count);            //Pre-inialize array size for better performance
            for (int i = 0; i < polys.NumGeometries; i++)
            {
                pOut.Polygons.Add(TransformPolygon(polys[i], transform));
            }
            return(pOut);
        }
コード例 #40
0
 /// <summary>
 /// Transforms a <see cref="IGeometryCollection" /> object.
 /// </summary>
 /// <param name="factory">The factory to create the new <see cref="IGeometryCollection"/></param>
 /// <param name="geoms">The input <see cref="IGeometryCollection"/></param>
 /// <param name="transform">The <see cref="IMathTransform"/></param>
 /// <returns>A transformed <see cref="IGeometryCollection"/></returns>
 public static IGeometryCollection TransformGeometryCollection(IGeometryFactory factory, 
     IGeometryCollection geoms, IMathTransform transform)
 {
     var geometries = geoms.Geometries;
     var coll = new List<IGeometry>(geometries.Length);
     foreach (var g in geometries)
     {
         var item = TransformGeometry(factory, g, transform);
         coll.Add(item);
     }
     return factory.CreateGeometryCollection(coll.ToArray());
 }
コード例 #41
0
ファイル: Map.cs プロジェクト: kiwiGX/UnitySlippyMap
        private void Awake()
        {
            // initialize the zoom variables
            CurrentZoom = currentZoom;

            // initialize the coordinate transformation
            epsg900913                 = CoordinateSystemWktReader.Parse(wktEPSG900913) as ICoordinateSystem;
            ctFactory                  = new CoordinateTransformationFactory();
            wgs84ToEPSG900913          = ctFactory.CreateFromCoordinateSystems(GeographicCoordinateSystem.WGS84, epsg900913);
            wgs84ToEPSG900913Transform = wgs84ToEPSG900913.MathTransform;
            epsg900913ToWGS84Transform = wgs84ToEPSG900913Transform.Inverse();
        }
コード例 #42
0
 /// <summary>
 /// Initializes an instance of a CoordinateTransformation
 /// </summary>
 /// <param name="sourceCS">Source coordinate system</param>
 /// <param name="targetCS">Target coordinate system</param>
 /// <param name="transformType">Transformation type</param>
 /// <param name="mathTransform">Math transform</param>
 /// <param name="name">Name of transform</param>
 /// <param name="authority">Authority</param>
 /// <param name="authorityCode">Authority code</param>
 /// <param name="areaOfUse">Area of use</param>
 /// <param name="remarks">Remarks</param>
 internal CoordinateTransformation(ICoordinateSystem sourceCS, ICoordinateSystem targetCS, Topology.CoordinateSystems.Transformations.TransformType transformType, IMathTransform mathTransform, string name, string authority, long authorityCode, string areaOfUse, string remarks)
 {
     this._TargetCS      = targetCS;
     this._SourceCS      = sourceCS;
     this._TransformType = transformType;
     this._MathTransform = mathTransform;
     this._Name          = name;
     this._Authority     = authority;
     this._AuthorityCode = authorityCode;
     this._AreaOfUse     = areaOfUse;
     this._Remarks       = remarks;
 }
コード例 #43
0
        /// <summary>
        /// Returns the inverse of this affine transformation.
        /// </summary>
        /// <returns>IMathTransform that is the reverse of the current affine transformation.</returns>
        public override IMathTransform Inverse()
        {
            if (_inverse == null)
            {
                //find the inverse transformation matrix - use cloned matrix array
                //remarks about dimensionality: if input dimension is M, and output dimension is N, then the matrix will have size [N+1][M+1].
                var invMatrix = InvertMatrix((double[, ])transformMatrix.Clone());
                _inverse = new AffineTransform(invMatrix);
            }

            return(_inverse);
        }
コード例 #44
0
 /// <summary>
 /// Initializes an instance of a CoordinateTransformation
 /// </summary>
 /// <param name="sourceCS">Source coordinate system</param>
 /// <param name="targetCS">Target coordinate system</param>
 /// <param name="transformType">Transformation type</param>
 /// <param name="mathTransform">Math transform</param>
 /// <param name="name">Name of transform</param>
 /// <param name="authority">Authority</param>
 /// <param name="authorityCode">Authority code</param>
 /// <param name="areaOfUse">Area of use</param>
 /// <param name="remarks">Remarks</param>
 internal CoordinateTransformation(ICoordinateSystem sourceCS, ICoordinateSystem targetCS, Topology.CoordinateSystems.Transformations.TransformType transformType, IMathTransform mathTransform, string name, string authority, long authorityCode, string areaOfUse, string remarks)
 {
     this._TargetCS = targetCS;
     this._SourceCS = sourceCS;
     this._TransformType = transformType;
     this._MathTransform = mathTransform;
     this._Name = name;
     this._Authority = authority;
     this._AuthorityCode = authorityCode;
     this._AreaOfUse = areaOfUse;
     this._Remarks = remarks;
 }
コード例 #45
0
ファイル: OsmLineAdderService.cs プロジェクト: arielki/Site
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="elasticSearchGateway"></param>
 /// <param name="itmWgs84MathTransform"></param>
 /// <param name="options"></param>
 /// <param name="geoJsonPreprocessorExecutor"></param>
 /// <param name="httpGatewayFactory"></param>
 public OsmLineAdderService(IElasticSearchGateway elasticSearchGateway,
                            IMathTransform itmWgs84MathTransform,
                            IOptions <ConfigurationData> options,
                            IOsmGeoJsonPreprocessorExecutor geoJsonPreprocessorExecutor,
                            IHttpGatewayFactory httpGatewayFactory)
 {
     _elasticSearchGateway  = elasticSearchGateway;
     _itmWgs84MathTransform = itmWgs84MathTransform;
     _options = options.Value;
     _geoJsonPreprocessorExecutor = geoJsonPreprocessorExecutor;
     _httpGatewayFactory          = httpGatewayFactory;
 }
コード例 #46
0
        /// <summary>
        /// Transforms coordinates of the line path.
        /// </summary>
        /// <param name="linePath">Line path to transform</param>
        /// <param name="transform">The transformation to apply</param>
        /// <returns>The transformed line path</returns>
        public static LinePath TransformLinePath(LinePath linePath, IMathTransform transform)
        {
            List <double[]> points = new List <double[]>();

            for (int i = 0; i < linePath.Vertices.Count; i++)
            {
                points.Add(new double[2] {
                    linePath.Vertices[i].X, linePath.Vertices[i].Y
                });
            }

            return(new LinePath(transform.TransformList(points)));
        }
コード例 #47
0
        /// <summary>
        /// Transforms coordinates of the contour.
        /// </summary>
        /// <param name="contour">Contour to transform</param>
        /// <param name="transform">The transformation to apply</param>
        /// <returns>The transformed contour</returns>
        public static Contour TransformContour(Contour contour, IMathTransform transform)
        {
            List <double[]> points = new List <double[]>();

            for (int i = 0; i < contour.Vertices.Count; i++)
            {
                points.Add(new double[2] {
                    contour.Vertices[i].X, contour.Vertices[i].Y
                });
            }

            return(new Contour(transform.TransformList(points)));
        }
コード例 #48
0
        /// <summary>
        /// Transforms coordinates of the multipoint.
        /// </summary>
        /// <param name="multiPoint">Multipoint to transform</param>
        /// <param name="transform">The transformation to apply</param>
        /// <returns>The transformed multipoint</returns>
        public static MultiPoint TransformMultiPoint(MultiPoint multiPoint, IMathTransform transform)
        {
            List <double[]> points = new List <double[]>();

            for (int i = 0; i < multiPoint.Points.Count; i++)
            {
                points.Add(new double[2] {
                    multiPoint.Points[i].X, multiPoint.Points[i].Y
                });
            }

            return(new MultiPoint(transform.TransformList(points)));
        }
コード例 #49
0
 /// <summary>
 /// Creates an instance of FittedCoordinateSystem using the specified parameters
 /// </summary>
 /// <param name="baseSystem">Underlying coordinate system.</param>
 /// <param name="transform">Transformation from fitted coordinate system to the base one</param>
 /// <param name="name">Name</param>
 /// <param name="authority">Authority name</param>
 /// <param name="code">Authority-specific identification code.</param>
 /// <param name="alias">Alias</param>
 /// <param name="abbreviation">Abbreviation</param>
 /// <param name="remarks">Provider-supplied remarks</param>
 protected internal FittedCoordinateSystem(ICoordinateSystem baseSystem, IMathTransform transform,
                                           string name, string authority, long code, string alias, string remarks, string abbreviation)
     : base(name, authority, code, alias, abbreviation, remarks)
 {
     _BaseCoordinateSystem = baseSystem;
     _ToBaseTransform      = transform;
     //get axis infos from the source
     base.AxisInfo = new List <AxisInfo> (baseSystem.Dimension);
     for (int dim = 0; dim < baseSystem.Dimension; dim++)
     {
         base.AxisInfo.Add(baseSystem.GetAxis(dim));
     }
 }
コード例 #50
0
		/// <summary>
		/// Creates an instance of FittedCoordinateSystem using the specified parameters
		/// </summary>
        /// <param name="baseSystem">Underlying coordinate system.</param>
        /// <param name="transform">Transformation from fitted coordinate system to the base one</param>
		/// <param name="name">Name</param>
		/// <param name="authority">Authority name</param>
		/// <param name="code">Authority-specific identification code.</param>
		/// <param name="alias">Alias</param>
		/// <param name="abbreviation">Abbreviation</param>
		/// <param name="remarks">Provider-supplied remarks</param>
        protected internal FittedCoordinateSystem (ICoordinateSystem baseSystem, IMathTransform transform,
            string name, string authority, long code, string alias, string remarks, string abbreviation)
			: base(name, authority, code, alias, abbreviation, remarks)
		{
            _BaseCoordinateSystem = baseSystem;
            _ToBaseTransform = transform;
            //get axis infos from the source
            base.AxisInfo = new List<AxisInfo> (baseSystem.Dimension);
            for (int dim = 0; dim < baseSystem.Dimension; dim++)
            {
                base.AxisInfo.Add (baseSystem.GetAxis (dim));
            }
		}
コード例 #51
0
ファイル: GeometryTransform.cs プロジェクト: cugkgq/Project
        /// <summary>
        /// Transforms a <see cref="SharpMap.Geometries.MultiPoint"/>.
        /// </summary>
        /// <param name="points">MultiPoint to transform</param>
        /// <param name="transform">MathTransform</param>
        /// <returns>Transformed MultiPoint</returns>
        public static MultiPoint TransformMultiPoint(MultiPoint points, IMathTransform transform)
        {
            List <double[]> pts = new List <double[]>();

            for (int i = 0; i < points.NumGeometries; i++)
            {
                pts.Add(new double[2] {
                    points[0].X, points[1].Y
                });
            }

            return(new MultiPoint(transform.TransformList(pts)));
        }
コード例 #52
0
        /// <summary>
        /// Transforms a <see cref="IMultiPolygon" /> object.
        /// </summary>
        /// <param name="factory">The factory to create the new <see cref="IMultiPolygon"/></param>
        /// <param name="polys">The input <see cref="IMultiPolygon"/></param>
        /// <param name="transform">The <see cref="IMathTransform"/></param>
        /// <returns>A transformed <see cref="IMultiPolygon"/></returns>
        public static IMultiPolygon TransformMultiPolygon(IGeometryFactory factory,
                                                          IMultiPolygon polys, IMathTransform transform)
        {
            var geometries = polys.Geometries;
            var polygons   = new List <IPolygon>(geometries.Length);

            foreach (var p in geometries)
            {
                var item = TransformPolygon(factory, (IPolygon)p, transform);
                polygons.Add(item);
            }
            return(factory.CreateMultiPolygon(polygons.ToArray()));
        }
コード例 #53
0
        /// <summary>
        /// 构建不同的投影变换方法
        /// </summary>
        /// <param name="projection"></param>
        /// <param name="ellipsoid"></param>
        /// <param name="unit"></param>
        /// <returns></returns>
        private static IMathTransform CreateCoordinateOperation(IProjection projection, IEllipsoid ellipsoid, ILinearUnit unit)
        {
            List <ProjectionParameter> parameterList = new List <ProjectionParameter>(projection.NumParameters);

            for (int i = 0; i < projection.NumParameters; i++)
            {
                parameterList.Add(projection.GetParameter(i));
            }

            parameterList.Add(new ProjectionParameter("semi_major", ellipsoid.SemiMajorAxis)); //长轴
            parameterList.Add(new ProjectionParameter("semi_minor", ellipsoid.SemiMinorAxis)); //短轴
            parameterList.Add(new ProjectionParameter("unit", unit.MetersPerUnit));            //单位弧度
            IMathTransform transform = null;

            switch (projection.ClassName.ToLower(CultureInfo.InvariantCulture).Replace(' ', '_'))
            {
            case "mercator":
            case "mercator_1sp":
            case "mercator_2sp":
                //1SP
                transform = new Mercator(parameterList);
                break;

            case "transverse_mercator":
                transform = new TransverseMercator(parameterList);
                break;

            case "gauss_kruger":    //高斯克吕格投影
                transform = new GaussKrugerProjection(parameterList);
                break;

            case "albers":
            case "albers_conic_equal_area":
                transform = new AlbersProjection(parameterList);
                break;

            case "krovak":
                transform = new KrovakProjection(parameterList);
                break;

            case "lambert_conformal_conic":
            case "lambert_conformal_conic_2sp":
            case "lambert_conic_conformal_(2sp)":
                transform = new LambertConformalConic2SP(parameterList);
                break;

            default:
                throw new NotSupportedException(String.Format("Projection {0} is not supported.", projection.ClassName));
            }
            return(transform);
        }
コード例 #54
0
ファイル: GetFeatureInfoJson.cs プロジェクト: cugkgq/Project
        protected override AbstractGetFeatureInfoResponse CreateFeatureInfo(Map map,
                                                                            IEnumerable <string> requestedLayers,
                                                                            float x, float y,
                                                                            int featureCount,
                                                                            string cqlFilter,
                                                                            int pixelSensitivity,
                                                                            WmsServer.InterSectDelegate intersectDelegate)
        {
            List <GeoJSON> items = new List <GeoJSON>();

            foreach (string requestLayer in requestedLayers)
            {
                ICanQueryLayer queryLayer = GetQueryLayer(map, requestLayer);
                FeatureDataSet fds;
                if (!TryGetData(map, x, y, pixelSensitivity, intersectDelegate, queryLayer, cqlFilter, out fds))
                {
                    continue;
                }

                IEnumerable <GeoJSON> data = GeoJSONHelper.GetData(fds);
                // reproject geometries if needed
                IMathTransform transform = null;
                if (queryLayer is VectorLayer)
                {
                    ICoordinateTransformation transformation = (queryLayer as VectorLayer).CoordinateTransformation;
                    if (transformation != null)
                    {
                        transform = transformation.MathTransform;
                    }
                }

                if (transform != null)
                {
#if DotSpatialProjections
                    throw new NotImplementedException();
#else
                    data = data.Select(d =>
                    {
                        IGeometry converted = GeometryTransform.TransformGeometry(d.Geometry, transform, map.Factory);
                        d.SetGeometry(converted);
                        return(d);
                    });
#endif
                }
                items.AddRange(data);
            }

            StringWriter sb = new StringWriter();
            GeoJSONWriter.Write(items, sb);
            return(new GetFeatureInfoResponseJson(sb.ToString()));
        }
コード例 #55
0
ファイル: BodyHelper.cs プロジェクト: yangcongs/codestack
        public CylinderParams GetBoundingCylinder(IBody2 body, double[] dir)
        {
            double[] xAxis = new double[] { 1, 0, 0 };
            double[] yAxis = new double[] { 0, 1, 0 };
            double[] zAxis = new double[] { 0, 0, 1 };

            bool           isAligned      = m_MathHelper.ArrayEqual(dir, yAxis);
            IMathTransform alignTransform = null;

            if (!isAligned)
            {
                alignTransform = m_MathHelper.GetTransformBetweenVectorsAroundPoint(
                    dir, yAxis, new double[] { 0, 0, 0 });

                IBody2 bodyCopy = body.ICopy();

                bodyCopy.ApplyTransform(alignTransform as MathTransform);

                body = bodyCopy;
            }

            double[] rootPt;
            double[] endPt;
            GetExtremePoints(body, yAxis, out rootPt, out endPt);

            double height = Math.Abs(endPt[1] - rootPt[1]);

            dir = new double[] { 0, endPt[1] - rootPt[1], 0 };

            List <double[]> perPoints = GetPerimeterPoints(body, xAxis, zAxis);
            List <Point>    points    = new List <Point>();

            foreach (double[] pt in perPoints)
            {
                points.Add(new Point(pt[0], pt[2]));
            }

            Circle cir = SmallestEnclosingCircle.MakeCircle(points);

            double[] circCenter = new double[] { cir.c.x, rootPt[1], cir.c.y };

            if (!isAligned)
            {
                circCenter = m_MathHelper.TransformPoint(circCenter, alignTransform.IInverse());
                dir        = m_MathHelper.TransformVector(dir, alignTransform.IInverse());
            }

            double radius = cir.r;

            return(new CylinderParams(height, circCenter, dir, radius));
        }
コード例 #56
0
 /// <summary>
 /// Initializes an instance of a CoordinateTransformation
 /// </summary>
 /// <param name="sourceCS">Source coordinate system</param>
 /// <param name="targetCS">Target coordinate system</param>
 /// <param name="transformType">Transformation type</param>
 /// <param name="mathTransform">Math transform</param>
 /// <param name="name">Name of transform</param>
 /// <param name="authority">Authority</param>
 /// <param name="authorityCode">Authority code</param>
 /// <param name="areaOfUse">Area of use</param>
 /// <param name="remarks">Remarks</param>
 internal CoordinateTransformation(ICoordinateSystem sourceCS, ICoordinateSystem targetCS, TransformType transformType, IMathTransform mathTransform, 
     string name, string authority, long authorityCode, string areaOfUse, string remarks)
     : base()
 {
     _TargetCS = targetCS;
     _SourceCS = sourceCS;
     _TransformType = transformType;
     _MathTransform = mathTransform;
     _Name = name;
     _Authority = authority;
     _AuthorityCode = authorityCode;
     _AreaOfUse = areaOfUse;
     _Remarks = remarks;
 }
        protected override void ExecuteTests(IMathTransform d, IMathTransform i)
        {
            TestDirectTransform(d, 1, 21200, 438129.87, 5827554.372, 1E-3);
            TestDirectTransform(d, 8001, 21200, 532099.1321, 5793352.358, 1E-3);
            TestDirectTransform(d, 1, 10000, 414188.46, 5761775.889, 1E-3);
            TestDirectTransform(d, 8001, 10000, 508157.7221, 5727573.875, 1E-3);

            TestInverseTransform(i, 5406.044399, 20442.91044, 500000, 5800000, 1E-3);
            TestInverseTransform(i, -2111.496567, 14970.58815, 400000, 5800000, 1E-3);
            TestInverseTransform(i, 4383.435063, 2671.667361, 450000, 5700000, 1E-3);
            TestInverseTransform(i, 3360.825726, -15099.57572, 400000, 5600000, 1E-3);

            ExecuteIterations(d, i, 1, 21200);
        }
コード例 #58
0
ファイル: GeometryTransform.cs プロジェクト: lishxi/_SharpMap
        /// <summary>
        /// Transforms a <see cref="SharpMap.Geometries.BoundingBox"/>.
        /// </summary>
        /// <param name="box">BoundingBox to transform</param>
        /// <param name="transform">Math Transform</param>
        /// <returns>Transformed object</returns>
        public static BoundingBox TransformBox(BoundingBox box, IMathTransform transform)
        {
            if (box == null)
                return null;
            Point[] corners = new Point[4];
            corners[0] = new Point(transform.Transform(box.Min.ToDoubleArray())); //LL
            corners[1] = new Point(transform.Transform(box.Max.ToDoubleArray())); //UR
            corners[2] = new Point(transform.Transform(new Point(box.Min.X, box.Max.Y).ToDoubleArray())); //UL
            corners[3] = new Point(transform.Transform(new Point(box.Max.X, box.Min.Y).ToDoubleArray())); //LR

            BoundingBox result = corners[0].GetBoundingBox();
            for (int i = 1; i < 4; i++)
                result = result.Join(corners[i].GetBoundingBox());
            return result;
        }
コード例 #59
0
ファイル: GeometryTransform.cs プロジェクト: lishxi/_SharpMap
		/// <summary>
		/// Transforms a <see cref="IEnvelope" /> object.
		/// </summary>
        /// <param name="box"></param>
		/// <param name="transform"></param>
		/// <returns></returns>
		public static IEnvelope TransformBox(IEnvelope box, IMathTransform transform)
		{
			if (box == null) return null;

            double[][] corners = new double[4][];
            corners[0] = transform.Transform(ToArray(box.MinX, box.MinY)); //LL
            corners[1] = transform.Transform(ToArray(box.MaxX, box.MaxY)); //UR
            corners[2] = transform.Transform(ToArray(box.MinX, box.MaxY)); //UL
            corners[3] = transform.Transform(ToArray(box.MaxX, box.MinY)); //LR

			IEnvelope result = new Envelope();
            foreach (double[] p in corners)
				result.ExpandToInclude(p[0], p[1]);
			return result;
		}
コード例 #60
0
ファイル: GeometryTransform.cs プロジェクト: lishxi/_SharpMap
		/// <summary>
		/// Transforms a <see cref="Envelope"/>.
		/// </summary>
		/// <param name="box">BoundingBox to transform</param>
		/// <param name="transform">Math Transform</param>
		/// <returns>Transformed object</returns>
		public static GeoAPI.Geometries.IEnvelope TransformBox(GeoAPI.Geometries.IEnvelope box, IMathTransform transform)
		{
			if (box == null)
				return null;
            double[][] corners = new double[4][];
            corners[0] = transform.Transform(ToLightStruct(box.MinX, box.MinY)); //LL
            corners[1] = transform.Transform(ToLightStruct(box.MaxX, box.MaxY)); //UR
            corners[2] = transform.Transform(ToLightStruct(box.MinX, box.MaxY)); //UL
            corners[3] = transform.Transform(ToLightStruct(box.MaxX, box.MinY)); //LR

			IEnvelope result = GeometryFactory.CreateEnvelope();
            foreach (double[] p in corners)
				result.ExpandToInclude(p[0], p[1]);
			return result;
		}