public void CanGetCrossingGapsCombined() { const double maxArea = 200; Box allBox = GeomUtils.CreateBox(0, 0, 100, 100); var knownGaps = new KnownGaps(maxArea, _tolerance, allBox); var gapPolygons = new[] { CreatePoly(-5, 10, 5, 20), // < limit, cross L t11 (no gap) CreatePoly(10, 10, 15, 20), // < limit, inside t11 (gap) CreatePoly(10, 10, 51, 20), // > limit, cross t11 and t12, <limit in t12 CreatePoly(49, 40, 51, 41), // < limit, cross t11 and t12 (gap) CreatePoly(50, 49, 51, 51), // < limit, cross t12 and t22 (gap) CreatePoly(10, 49, 11, 51), // < limit, cross t11 and t21 (gap) CreatePoly(80, 80, 110, 110), // > limit, exceed allbox (no gap) CreatePoly(99, 99, 101, 101) // < limit, exceed allbox (no gap) }; IList <IPolygon> gaps11 = GetGaps(knownGaps, _tile11, gapPolygons); IList <IPolygon> gaps12 = GetGaps(knownGaps, _tile12, gapPolygons); IList <IPolygon> gaps21 = GetGaps(knownGaps, _tile21, gapPolygons); IList <IPolygon> gaps22 = GetGaps(knownGaps, _tile22, gapPolygons); LogGaps(gaps11, gaps12, gaps21, gaps22); Assert.AreEqual(1, gaps11.Count); Assert.AreEqual(1, gaps12.Count); Assert.AreEqual(1, gaps21.Count); Assert.AreEqual(1, gaps22.Count); }
public void CanGetCrossingGaps() { const double maxArea = 1000; // larger than all polygons Box allBox = GeomUtils.CreateBox(0, 0, 100, 100); var knownGaps = new KnownGaps(maxArea, _tolerance, allBox); // 4 polygons 20x20, each one centered on the LL corner of a tile var gapPolygons = new[] { CreatePoly(-10, -10, 10, 10), CreatePoly(40, -10, 60, 10), CreatePoly(-10, 40, 10, 60), CreatePoly(40, 40, 60, 60) }; IList <IPolygon> gaps11 = GetGaps(knownGaps, _tile11, gapPolygons); IList <IPolygon> gaps12 = GetGaps(knownGaps, _tile12, gapPolygons); IList <IPolygon> gaps21 = GetGaps(knownGaps, _tile21, gapPolygons); IList <IPolygon> gaps22 = GetGaps(knownGaps, _tile22, gapPolygons); LogGaps(gaps11, gaps12, gaps21, gaps22); Assert.AreEqual(0, gaps11.Count); Assert.AreEqual(0, gaps12.Count); Assert.AreEqual(0, gaps21.Count); Assert.AreEqual(1, gaps22.Count); }
private IList <IPolygon> GetGaps( [NotNull] KnownGaps knownGaps, [NotNull] IEnvelope tileEnvelope, params IPolygon[] gaps) { IEnvelope clipEnvelope = GetClipEnvelope(tileEnvelope, knownGaps.Tolerance); var clippedGaps = new List <IPolygon>(); foreach (IPolygon polygon in gaps) { IPolygon clippedPolygon = GeometryUtils.GetClippedPolygon(polygon, clipEnvelope); if (!clippedPolygon.IsEmpty) { clippedGaps.Add(GeometryFactory.Clone(clippedPolygon)); } } return(new List <IPolygon>( knownGaps.GetCompletedGaps(clippedGaps, clipEnvelope, tileEnvelope))); }
public void CanIgnoreLargeCrossingGap3() { const double maxArea = 100; Box allBox = GeomUtils.CreateBox(0, 0, 100, 100); var knownGaps = new KnownGaps(maxArea, _tolerance, allBox); // t22 intersection is larger than limit, t12 is smaller than limit var gapPolygons = new[] { CreatePoly(60, 49, 70, 90) }; IList <IPolygon> gaps11 = GetGaps(knownGaps, _tile11, gapPolygons); IList <IPolygon> gaps12 = GetGaps(knownGaps, _tile12, gapPolygons); IList <IPolygon> gaps21 = GetGaps(knownGaps, _tile21, gapPolygons); IList <IPolygon> gaps22 = GetGaps(knownGaps, _tile22, gapPolygons); LogGaps(gaps11, gaps12, gaps21, gaps22); Assert.AreEqual(0, gaps11.Count); Assert.AreEqual(0, gaps12.Count); Assert.AreEqual(0, gaps21.Count); Assert.AreEqual(0, gaps22.Count); }
public void CanIgnoreLargeCrossingGap1() { const double maxArea = 100; Box allBox = GeomUtils.CreateBox(0, 0, 100, 100); var knownGaps = new KnownGaps(maxArea, _tolerance, allBox); // tile intersections are all smaller than limit, but the entire gap is larger var gapPolygons = new[] { CreatePoly(45, 45, 55, 55.1) }; IList <IPolygon> gaps11 = GetGaps(knownGaps, _tile11, gapPolygons); IList <IPolygon> gaps12 = GetGaps(knownGaps, _tile12, gapPolygons); IList <IPolygon> gaps21 = GetGaps(knownGaps, _tile21, gapPolygons); IList <IPolygon> gaps22 = GetGaps(knownGaps, _tile22, gapPolygons); LogGaps(gaps11, gaps12, gaps21, gaps22); Assert.AreEqual(0, gaps11.Count); Assert.AreEqual(0, gaps12.Count); Assert.AreEqual(0, gaps21.Count); Assert.AreEqual(0, gaps22.Count); }
public void CanGetSmallGapTouchingTileBoundary() { const double maxArea = 200; Box allBox = GeomUtils.CreateBox(0, 0, 100, 100); var knownGaps = new KnownGaps(maxArea, _tolerance, allBox); // < limit, in UR corner of t11 var gapPolygons = new[] { CreatePoly(49, 49, 50, 50) }; IList <IPolygon> gaps11 = GetGaps(knownGaps, _tile11, gapPolygons); IList <IPolygon> gaps12 = GetGaps(knownGaps, _tile12, gapPolygons); IList <IPolygon> gaps21 = GetGaps(knownGaps, _tile21, gapPolygons); IList <IPolygon> gaps22 = GetGaps(knownGaps, _tile22, gapPolygons); LogGaps(gaps11, gaps12, gaps21, gaps22); Assert.AreEqual(0, gaps11.Count); Assert.AreEqual(0, gaps12.Count); Assert.AreEqual(0, gaps21.Count); Assert.AreEqual(1, gaps22.Count); // reported in last tile }
public void CanGetSmallCrossingGapAtTileBoundary2() { const double maxArea = 200; Box allBox = GeomUtils.CreateBox(0, 0, 100, 100); var knownGaps = new KnownGaps(maxArea, _tolerance, allBox); // < limit, xmin at left boundary of t12 var gapPolygons = new[] { CreatePoly(50, 10, 51, 11) }; IList <IPolygon> gaps11 = GetGaps(knownGaps, _tile11, gapPolygons); IList <IPolygon> gaps12 = GetGaps(knownGaps, _tile12, gapPolygons); IList <IPolygon> gaps21 = GetGaps(knownGaps, _tile21, gapPolygons); IList <IPolygon> gaps22 = GetGaps(knownGaps, _tile22, gapPolygons); LogGaps(gaps11, gaps12, gaps21, gaps22); Assert.AreEqual(0, gaps11.Count); Assert.AreEqual(1, gaps12.Count); Assert.AreEqual(0, gaps21.Count); Assert.AreEqual(0, gaps22.Count); }