예제 #1
0
        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);
            }
        }
예제 #2
0
        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);
        }