Exemplo n.º 1
0
        public void NormalizeMultiPolygonOneHole()
        {
            var verts = MakeGeoCoordArray(new decimal[, ] {
                { 0, 0 }, { 0, 3 }, { 3, 3 }, { 3, 0 }
            });
            var outer = CreateLinkedLoop(verts);

            var verts2 = MakeGeoCoordArray(new decimal[, ] {
                { 1, 1 }, { 2, 2 }, { 1, 2 }
            });
            var inner = CreateLinkedLoop(verts2);

            var polygon = new LinkedGeoPolygon();

            polygon.AddLinkedLoop(inner);
            polygon.AddLinkedLoop(outer);

            int result;

            (result, polygon) = polygon.NormalizeMultiPolygon();

            Assert.AreEqual(result, Constants.LinkedGeo.NormalizationSuccess);
            Assert.AreEqual(polygon.CountPolygons, 1);
            Assert.AreEqual(polygon.CountLoops, 2);

            Assert.IsNotNull(polygon.Loops.First());
            Assert.AreEqual(polygon.Loops.First(), outer);

            Assert.IsNotNull(polygon.Loops[1]);
            Assert.AreEqual(polygon.Loops[1], inner);

            polygon.Clear();
        }
Exemplo n.º 2
0
        public void NormalizeMultiPolygonNoOuterLoops()
        {
            var verts = MakeGeoCoordArray(new  decimal[, ] {
                { 0, 0 }, { 1, 1 }, { 0, 1 }
            });
            var outer1 = CreateLinkedLoop(verts);

            var verts2 = MakeGeoCoordArray(new  decimal[, ] {
                { 2, 2 }, { 3, 3 }, { 2, 3 }
            });
            var outer2 = CreateLinkedLoop(verts2);

            var polygon = new LinkedGeoPolygon();

            polygon.AddLinkedLoop(outer1);
            polygon.AddLinkedLoop(outer2);

            int result;

            (result, polygon) = polygon.NormalizeMultiPolygon();

            Assert.AreEqual(H3Lib.Constants.LinkedGeo.NormalizationErrUnassignedHoles, result);

            Assert.AreEqual(1, polygon.CountPolygons);
            Assert.AreEqual(0, polygon.CountLoops);

            //polygon.Clear();
        }
Exemplo n.º 3
0
        public void NormalizeMultiPolygonTwoOuterLoops()
        {
            var verts1 = MakeGeoCoordArray(new decimal[, ] {
                { 0, 0 }, { 0, 1 }, { 1, 1 }
            });
            var outer1 = CreateLinkedLoop(verts1);

            var verts2 = MakeGeoCoordArray(new decimal[, ] {
                { 2, 2 }, { 2, 3 }, { 3, 3 }
            });
            var outer2 = CreateLinkedLoop(verts2);

            var polygon = new LinkedGeoPolygon();

            polygon.AddLinkedLoop(outer1);
            polygon.AddLinkedLoop(outer2);

            int result;

            (result, polygon) = polygon.NormalizeMultiPolygon();

            Assert.AreEqual(result, Constants.LinkedGeo.NormalizationSuccess);
            Assert.AreEqual(polygon.CountPolygons, 2);
            Assert.AreEqual(polygon.CountLoops, 1);
            Assert.AreEqual(polygon.Next.CountLoops, 1);

            polygon.Clear();
        }
Exemplo n.º 4
0
        public void NormalizeMultiPolygonSingle()
        {
            var verts = MakeGeoCoordArray(new decimal[, ] {
                { 0, 0 }, { 0, 1 }, { 1, 1 }
            });

            var outer = CreateLinkedLoop(verts);

            var polygon = new LinkedGeoPolygon();

            polygon.AddLinkedLoop(outer);

            int result;

            (result, polygon) = polygon.NormalizeMultiPolygon();

            Assert.AreEqual(result, Constants.LinkedGeo.NormalizationSuccess);
            Assert.AreEqual(polygon.CountPolygons, 1);
            Assert.AreEqual(polygon.CountLoops, 1);
            if (polygon.Loops.First() != null)
            {
                Assert.AreEqual(polygon.Loops.First(), outer);
            }

            polygon.Clear();
        }
Exemplo n.º 5
0
        public void NormalizeMultiPolygonNestedDonuts()
        {
            var verts = MakeGeoCoordArray(new[, ] {
                { 0.2m, 0.2m }, { 0.2m, -0.2m }, { -0.2m, -0.2m }, { -0.2m, 0.2m }
            });
            var outer = CreateLinkedLoop(verts);

            var verts2 = MakeGeoCoordArray(new[, ] {
                { 0.1m, 0.1m }, { -0.1m, 0.1m }, { -0.1m, -0.1m }, { 0.1m, -0.1m }
            });
            var inner = CreateLinkedLoop(verts2);

            var verts3 = MakeGeoCoordArray(new[, ] {
                { 0.6m, 0.6m }, { 0.6m, -0.6m }, { -0.6m, -0.6m }, { -0.6m, 0.6m }
            });
            var outerBig = CreateLinkedLoop(verts3);

            var verts4 = MakeGeoCoordArray(new[, ] {
                { 0.5m, 0.5m }, { -0.5m, 0.5m }, { -0.5m, -0.5m }, { 0.5m, -0.5m }
            });
            var innerBig = CreateLinkedLoop(verts4);

            var polygon = new LinkedGeoPolygon();

            polygon.AddLinkedLoop(inner);
            polygon.AddLinkedLoop(outerBig);
            polygon.AddLinkedLoop(innerBig);
            polygon.AddLinkedLoop(outer);

            int result;

            (result, polygon) = polygon.NormalizeMultiPolygon();

            Assert.AreEqual(result, Constants.LinkedGeo.NormalizationSuccess);
            Assert.AreEqual(polygon.CountPolygons, 2);
            Assert.AreEqual(polygon.CountLoops, 2);

            Assert.IsNotNull(polygon.Loops.First());
            Assert.AreEqual(polygon.Loops.First(), outerBig);

            Assert.IsNotNull(polygon.Loops[1]);
            Assert.AreEqual(polygon.Loops[1], innerBig);

            Assert.AreEqual(polygon.Next.CountLoops, 2);

            Assert.IsNotNull(polygon.Next.Loops.First());
            Assert.AreEqual(polygon.Next.Loops.First(), outer);

            Assert.IsNotNull(polygon.Next.Loops[1]);
            Assert.AreEqual(polygon.Next.Loops[1], inner);

            polygon.Clear();
        }
Exemplo n.º 6
0
        public void NormalizeMultiPolygonTwoDonuts()
        {
            var verts = MakeGeoCoordArray(new decimal[, ] {
                { 0, 0 }, { 0, 3 }, { 3, 3 }, { 3, 0 }
            });
            var outer = CreateLinkedLoop(verts);

            var verts2 = MakeGeoCoordArray(new decimal[, ] {
                { 1, 1 }, { 2, 2 }, { 1, 2 }
            });
            var inner = CreateLinkedLoop(verts2);

            var verts3 = MakeGeoCoordArray(new decimal[, ] {
                { 0, 0 }, { 0, -3 }, { -3, -3 }, { -3, 0 }
            });
            var outer2 = CreateLinkedLoop(verts3);

            var verts4 = MakeGeoCoordArray(new decimal[, ] {
                { -1, -1 }, { -2, -2 }, { -1, -2 }
            });
            var inner2 = CreateLinkedLoop(verts4);

            var polygon = new LinkedGeoPolygon();

            polygon.AddLinkedLoop(inner2);
            polygon.AddLinkedLoop(inner);
            polygon.AddLinkedLoop(outer);
            polygon.AddLinkedLoop(outer2);

            int result;

            (result, polygon) = polygon.NormalizeMultiPolygon();

            Assert.AreEqual(result, Constants.LinkedGeo.NormalizationSuccess);
            Assert.AreEqual(polygon.CountPolygons, 2);
            Assert.AreEqual(polygon.CountLoops, 2);

            Assert.IsNotNull(polygon.Loops.First());
            Assert.AreEqual(polygon.Loops.First().Count, 4);

            Assert.IsNotNull(polygon.Loops[1]);
            Assert.AreEqual(polygon.Loops[1].Count, 3);

            Assert.AreEqual(polygon.Next.CountLoops, 2);

            Assert.IsNotNull(polygon.Next.Loops.First());
            Assert.AreEqual(polygon.Next.Loops.First().Count, 4);

            Assert.IsNotNull(polygon.Next.Loops[1]);
            Assert.AreEqual(polygon.Next.Loops[1].Count, 3);

            polygon.Clear();
        }
Exemplo n.º 7
0
        public void NormalizeMultiPolygonAlreadyNormalized()
        {
            var verts1 = MakeGeoCoordArray(new  decimal[, ] {
                { 0, 0 }, { 0, 1 }, { 1, 1 }
            });
            var outer1 = CreateLinkedLoop(verts1);

            var verts2 = MakeGeoCoordArray(new  decimal[, ] {
                { 2, 2 }, { 2, 3 }, { 3, 3 }
            });
            var outer2 = CreateLinkedLoop(verts2);

            var polygon = new LinkedGeoPolygon();

            polygon.AddLinkedLoop(outer1);
            var next = polygon.AddNewLinkedGeoPolygon();

            next.AddLinkedLoop(outer2);

            // Should be a no-op
            int result;

            (result, polygon) = polygon.NormalizeMultiPolygon();

            Assert.AreEqual(H3Lib.Constants.LinkedGeo.NormalizationErrMultiplePolygons, result);

            Assert.AreEqual(2, polygon.CountPolygons);
            Assert.AreEqual(1, polygon.CountLoops);

            Assert.IsNotNull(polygon.Loops.First());
            Assert.AreEqual(outer1, polygon.Loops.First());

            Assert.AreEqual(1, polygon.Next.CountLoops);
            Assert.IsNotNull(polygon.Next.Loops.First());
            Assert.AreEqual(outer2, polygon.Next.Loops.First());

            polygon.Clear();
        }
Exemplo n.º 8
0
        public void NormalizeMultiPolygonTwoHoles()
        {
            var verts = MakeGeoCoordArray(new decimal[, ] {
                { 0, 0 }, { 0, 0.4m }, { 0.4m, 0.4m }, { 0.4m, 0 }
            });
            var outer = CreateLinkedLoop(verts);

            var verts2 = MakeGeoCoordArray(new decimal[, ] {
                { 0.1m, 0.1m }, { 0.2m, 0.2m }, { 0.1m, 0.2m }
            });
            var inner1 = CreateLinkedLoop(verts2);

            var verts3 = MakeGeoCoordArray(new decimal[, ] {
                { 0.2m, 0.2m }, { 0.3m, 0.3m }, { 0.2m, 0.3m }
            });
            var inner2 = CreateLinkedLoop(verts3);

            var polygon = new LinkedGeoPolygon();

            polygon.AddLinkedLoop(inner2);
            polygon.AddLinkedLoop(outer);
            polygon.AddLinkedLoop(inner1);

            int result;

            (result, polygon) = polygon.NormalizeMultiPolygon();

            Assert.AreEqual(result, Constants.LinkedGeo.NormalizationSuccess);
            Assert.AreEqual(polygon.CountPolygons, 1);

            Assert.IsNotNull(polygon.Loops.First());
            Assert.AreEqual(polygon.Loops.First(), outer);

            Assert.AreEqual(polygon.CountLoops, 3);

            polygon.Clear();
        }