如何填充SQL Server 2008空间CLR中的MULTIPOLYGON中的漏洞

Ros*_*oss 6 spatial sql-server-2008

我的多边形看起来像一个中间有空洞的星形: 图像

如何将此多面转换为单个多边形或多边形,同时还包括中间的孔,例如填充孔(使用SQL Server 2008 CLR)?

空星WKT:MULTIPOLYGON(((-75.850724788384952 39.781027647924496,-75.847514688412119 39.777165541462658,-75.835440819564724 39.781232982437771,-75.850724788384952 39.781027647924496)),((-75.861083592601616 39.772592386436379,-75.836642464570019 39.764081172000729,-75.847514688412119 39.777165541462658,-75.861083592601616 39.772592386436379,-75.861083592601616 39.772592386436379) ),((-75.866832035574916 39.780809081927849,-75.850724788384952 39.781027647924496,-75.857585145413083 39.78927966926625,-75.866832035574916 39.780809081927849)),((-75.8843643235475 39.764740937261692,-75.861083592601616 39.772592386436379,-75.8717486771904 39.776304058191712,-75.8843643235475 39.764740937261692)),((-75.884021002483152 39.780573380153484,-75.8717486771904 39.776304058191712,-75.866832035574916 39.780809081927849,-75.884021002483152 39.780573380153484)))

谢谢.

Mic*_*ito 11

也许不是最快的方式,但有一种方法可以做到:

  1. 计算包含输入的几何:使用STConvexHull,它返回包含整个输入几何的单个多边形,包括几何内部的空区域和几何外部的凹陷(例如星形点之间的区域).
  2. 找到空区域:使用STDifference,从凸包中减去输入,这将返回前面提到的那些空区域的多边形.
  3. 确定输入外的空白区域:使用STBoundary获取凸包的边界.区域位于输入几何体内部,当且仅当它不接触凸包的边界时.使用STTouches进行检查.
  4. 计算几何和内部空区域的并集:使用STUnion.

这是一个示例脚本:

DECLARE @g geometry;
DECLARE @hull geometry;
DECLARE @regions geometry;
DECLARE @boundary geometry;

SET @g = geometry::STGeomFromText(...);
SET @hull = @g.STConvexHull();
SET @regions = @hull.STDifference(@g);
SET @boundary = @hull.STBoundary();

WITH Geoms AS
(
    SELECT 1 i

    UNION ALL 

    SELECT i + 1
    FROM Geoms
    WHERE i < @regions.STNumGeometries()
)
SELECT @g = @g.STUnion(@regions.STGeometryN(i))
FROM Geoms
WHERE @regions.STGeometryN(i).STTouches(@boundary) = 0

SELECT @g
Run Code Online (Sandbox Code Playgroud)