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 CreateLinkedGeo()
        {
            var polygon = new LinkedGeoPolygon();

            var loop = polygon.AddNewLinkedLoop();

            Assert.IsNotNull(loop);
            var coord = loop.AddLinkedCoord(Vertex1);

            Assert.IsNotNull(coord);
            coord = loop.AddLinkedCoord(Vertex2);
            Assert.IsNotNull(coord);
            coord = loop.AddLinkedCoord(Vertex3);
            Assert.IsNotNull(coord);

            loop = polygon.AddNewLinkedLoop();
            Assert.IsNotNull(loop);
            coord = loop.AddLinkedCoord(Vertex2);
            Assert.IsNotNull(coord);
            coord = loop.AddLinkedCoord(Vertex4);
            Assert.IsNotNull(coord);

            Assert.AreEqual(1, polygon.CountPolygons);
            Assert.AreEqual(2, polygon.CountLoops);
            Assert.AreEqual(3, polygon.First.Count);
            Assert.AreEqual(2, polygon.Last.Count);

            var nextPolygon = polygon.AddNewLinkedGeoPolygon();

            Assert.IsNotNull(nextPolygon);
            Assert.AreEqual(2, polygon.CountPolygons);

            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 Contiguous2()
        {
            List <H3Index> set = new List <H3Index> {
                0x8928308291bffff, 0x89283082957ffff
            };
            LinkedGeoPolygon polygon = set.ToLinkedGeoPolygon();

            Assert.AreEqual(1, polygon.CountLoops);
            Assert.IsNotNull(polygon.Loops.First());
            Assert.AreEqual(10, polygon.Loops.First().Count);

            polygon.Clear();
        }
Exemplo n.º 8
0
            public void Clear()
            {
                if (First != null)
                {
                    First.Clear();
                    First = null;
                }

                if (Last != null)
                {
                    Last.Clear();
                    Last = null;
                }

                if (Next == null)
                {
                    return;
                }
                Next.Clear();
                Next = null;
            }
Exemplo n.º 9
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.º 10
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();
        }
Exemplo n.º 11
0
        public void NormalizeMultiPolygonUnassignedHole()
        {
            var verts = MakeGeoCoordArray(new  decimal[, ] {
                { 0, 0 }, { 0, 1 }, { 1, 1 }, { 1, 0 }
            });
            var outer = CreateLinkedLoop(verts);

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

            var polygon = new LinkedGeoPolygon();

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

            int result;

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

            Assert.AreEqual(H3Lib.Constants.LinkedGeo.NormalizationErrUnassignedHoles, result);
            polygon.Clear();
        }
Exemplo n.º 12
0
 public static void DestroyLinkedPolygon(ref LinkedGeoPolygon polygon)
 {
     polygon.Clear();
     polygon = null;
 }