首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SQL Server 2008 Server中填充MULTIPOLYGON中的漏洞

如何在SQL Server 2008 Server中填充MULTIPOLYGON中的漏洞
EN

Stack Overflow用户
提问于 2012-02-01 12:09:42
回答 1查看 3.3K关注 0票数 6

我有一个多重多边形,它看起来像一个中间有一个空洞的星星:image

如何将此多重多边形转换为一个或多个多边形,其中还包括中间的孔,例如填充该孔(使用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.861083592601639.772592386436379,-75.86108108359260161639.772592386436379),(-75.86832035574939.780808081927849,-75.850724788384952 39.781027647924496,-75.857585146436379,-75.8575851414924496-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.7805780153484))

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-01 13:49:02

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

使用包含输入几何体的几何体:使用

  1. Compute,它返回包含整个输入几何体的单个多边形,包括几何体内部的空区域和几何体外部的凹面(例如,在star).
  2. Find的点之间的区域)。空区域:使用STDifference,从凸包中减去输入,这将返回以前为输入之外的那些空区域返回多边形的先前为空区域mentioned.
  3. Determine的多边形:使用STBoundary获得凸壳的边界。当且仅当区域不接触凸包的边界时,区域才在输入几何体内部。使用STTouches来使用几何图形和内部空区域的并集:check.
  4. Compute STUnion。

下面是一个示例脚本:

代码语言:javascript
复制
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
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9090662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档