public static bool IsCovered(this BoundingBox bbox, IEnumerable <BoundingBox> bboxTiles) { if (bboxTiles == null || !bboxTiles.Any()) { return(false); } IGeometry bboxPoly = bbox.ToPolygon(); IGeometry tilesPolygon = UnaryUnionOp.Union(bboxTiles.Select(t => t.ToPolygon()).ToList()); var inside = tilesPolygon.Contains(bboxPoly); if (inside) { return(inside); } else { tilesPolygon = UnaryUnionOp.Union(bboxTiles.Select(t => (IGeometry)(new LineString(t.ToRing().Coordinates))).ToList()); var dbgString = @"declare @b geometry = geometry::STGeomFromText('{bbox.WKT}',2154) select @b,'Bbox'"; var wkts = bboxTiles.Select(t => new Polygon(t.ToRing()).ToText()); dbgString = dbgString.Replace("{bbox.WKT}", bbox.WKT); dbgString += string.Join(" ", wkts.Select(s => $"union all select geometry::STGeomFromText('{s}',2154) , 'Tiles'")); System.Diagnostics.Debug.WriteLine(dbgString); return(inside); } }
public static bool IsCovered(this BoundingBox bbox, IEnumerable <BoundingBox> bboxTiles) { if (bboxTiles == null || !bboxTiles.Any()) { return(false); } IGeometry bboxPoly = bbox.ToPolygon(); IGeometry tilesPolygon = UnaryUnionOp.Union(bboxTiles.Select(GeometryService.ToPolygon).ToList()); var inside = tilesPolygon.Contains(bboxPoly); return(inside); }