Exemplo n.º 1
0
        public void Planimeter0()
        {
            // Check fix for pole-encircling bug found 2011-03-16
            var           pa = new double[][] { new double[] { 89, 0 }, new double[] { 89, 90 }, new double[] { 89, 180 }, new double[] { 89, 270 } };
            PolygonResult a  = Planimeter(pa);

            AssertEquals(a.Perimeter, 631819.8745, 1e-4);
            AssertEquals(a.Area, 24952305678.0, 1);

            var pb = new double[][] { new double[] { -89, 0 }, new double[] { -89, 90 }, new double[] { -89, 180 }, new double[] { -89, 270 } };

            a = Planimeter(pb);
            AssertEquals(a.Perimeter, 631819.8745, 1e-4);
            AssertEquals(a.Area, -24952305678.0, 1);

            var pc = new double[][] { new double[] { 0, -1 }, new double[] { -1, 0 }, new double[] { 0, 1 }, new double[] { 1, 0 } };

            a = Planimeter(pc);
            AssertEquals(a.Perimeter, 627598.2731, 1e-4);
            AssertEquals(a.Area, 24619419146.0, 1);

            var pd = new double[][] { new double[] { 90, 0 }, new double[] { 0, 0 }, new double[] { 0, 90 } };

            a = Planimeter(pd);
            AssertEquals(a.Perimeter, 30022685, 1);
            AssertEquals(a.Area, 63758202715511.0, 1);
            a = PolyLength(pd);
            AssertEquals(a.Perimeter, 20020719, 1);
            Assert.True(IsNaN(a.Area));
        }
Exemplo n.º 2
0
        public void Planimeter12()
        {
            // Area of arctic circle (not really -- adjunct to rhumb-area test)
            double[][]    points = new double[][] { new double[] { 66.562222222, 0 }, new double[] { 66.562222222, 180 } };
            PolygonResult a      = Planimeter(points);

            Assert.Equal(10465729, a.Perimeter, 0);
            Assert.Equal(0, a.Area, 0);
        }
Exemplo n.º 3
0
        public void Planimeter5()
        {
            // Check fix for Planimeter pole crossing bug found 2011-06-24
            var           points = new double[][] { new double[] { 89, 0.1 }, new double[] { 89, 90.1 }, new double[] { 89, -179.9 } };
            PolygonResult a      = Planimeter(points);

            AssertEquals(539297, a.Perimeter, 1);
            AssertEquals(12476152838.5, a.Area, 1);
        }
Exemplo n.º 4
0
        public void Planimeter13()
        {
            // Check encircling pole twice
            double[][] points = new double[][] { new double[] { 89, -360 }, new double[] { 89, -240 }, new double[] { 89, -120 },
                                                 new double[] { 89, 0 }, new double[] { 89, 120 }, new double[] { 89, 240 } };
            PolygonResult a = Planimeter(points);

            AssertEquals(1160741, a.Perimeter, 1);
            AssertEquals(32415230256.0, a.Area, 1);
        }
Exemplo n.º 5
0
        static PolygonResult STPolygonResult(Geometry instance, bool IsLine)
        {
            Geodesic g      = Geodesic.WGS84;
            var      line   = new GeographicLib.PolygonArea(g, IsLine);
            int      points = NTSGeographyWrapper.STNumPoinst(instance);

            for (int i = 1; i < points; i++)
            {
                Coordinate currentPoint = NTSGeographyWrapper.STPoints(instance)[i];
                line.AddPoint(currentPoint.Y, currentPoint.X);
            }
            PolygonResult r = line.Compute();

            return(r);
        }
Exemplo n.º 6
0
        public static void main(string[] args)
        {
            PolygonArea p = new PolygonArea(Geodesic.WGS84, false);

            try
            {
                var inp = (from arg in args select double.Parse(arg)).GetEnumerator();
                while (inp.MoveNext())
                {
                    double lat = inp.Current;
                    inp.MoveNext();
                    double lon = inp.Current;
                    p.AddPoint(lat, lon);
                }
            }
            catch (Exception e) { }
            PolygonResult r = p.Compute();

            Console.WriteLine(r.Num + " " + r.Perimeter + " " + r.Area);
        }
Exemplo n.º 7
0
        public void Planimeter6()
        {
            // Check fix for Planimeter lon12 rounding bug found 2012-12-03
            var           pa = new double[][] { new double[] { 9, -0.00000000000001 }, new double[] { 9, 180 }, new double[] { 9, 0 } };
            PolygonResult a  = Planimeter(pa);

            AssertEquals(a.Perimeter, 36026861, 1);
            AssertEquals(a.Area, 0, 1);
            var pb = new double[][] { new double[] { 9, 0.00000000000001 }, new double[] { 9, 0 }, new double[] { 9, 180 } };

            a = Planimeter(pb);
            AssertEquals(a.Perimeter, 36026861, 1);
            AssertEquals(a.Area, 0, 1);
            var pc = new double[][] { new double[] { 9, 0.00000000000001 }, new double[] { 9, 180 }, new double[] { 9, 0 } };

            a = Planimeter(pc);
            AssertEquals(a.Perimeter, 36026861, 1);
            AssertEquals(a.Area, 0, 1);
            var pd = new double[][] { new double[] { 9, -0.00000000000001 }, new double[] { 9, 0 }, new double[] { 9, 180 } };

            a = Planimeter(pd);
            AssertEquals(a.Perimeter, 36026861, 1);
            AssertEquals(a.Area, 0, 1);
        }
Exemplo n.º 8
0
        internal static double STArea(object instance)
        {
            PolygonResult r = STPolygonResult((Geometry)instance, false);

            return(r.Area);
        }