gpt4 book ai didi

sql-server-2008 - 如何在SQL Server 2008空间CLR中的MULTIPOLYGON中填补空缺

转载 作者:行者123 更新时间:2023-12-04 13:53:36 24 4
gpt4 key购买 nike

我有一个多边形,看起来像一个星星,中间有一个空洞:
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.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)))

谢谢你。

最佳答案

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

  • 计算包含输入的几何:使用STConvexHull,它返回包含整个输入几何的单个多边形,包括几何内部的空区域和几何外部的凹面(例如恒星点之间的区域) )。
  • 查找空白区域:使用STDifference,从凸包中减去输入,这将返回前面提到的那些空白区域的多边形。
  • 确定输入的之外的空白区域:使用STBoundary获取凸包的边界。当且仅当一个区域不接触凸包的边界时,该区域才在输入几何图形内。使用STTouches进行检查。
  • 计算几何图形与内部空白区域的并集:使用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

    关于sql-server-2008 - 如何在SQL Server 2008空间CLR中的MULTIPOLYGON中填补空缺,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9090662/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com