在SQL Server 2008中计算多个几何对象的外部边界

5

我在 SQL Server 2008 中有许多数据类型为 GeometryPolygons。下面的图片展示了所有这些几何图形的可视化选择结果。

Lots of Geometrys

我需要做的是创建一个多边形,它代表了所有这些多边形的外边界。因此,我使用了我之前提出的空间问题所给出的响应来创建以下代码:
DECLARE @test TABLE(geom GEOMETRY);

INSERT INTO @test SELECT geom FROM ForceBoundary

DECLARE @geom GEOMETRY
SELECT @geom = (SELECT TOP 1 geom FROM @test)
SELECT @geom = @geom.STUnion(geom) FROM @test

SELECT @geom

这样产生的结果如下,由于多边形之间的空洞而出现了裂缝

Combined polygons with cracks

所以我用以下更改更新了我的查询:

INSERT INTO @test SELECT geom.Reduce(0.001).STBuffer(100) FROM ForceBoundary

虽然这种方法改善了结果,但并没有完全解决问题,还会损害外部边界的精度。

Combined polygons with less cracks

如何正确实现这个目标? 从查看 STxxxx 函数列表中,我没有找到一个似乎能提供所需结果的函数。

2个回答

2

geographikaGIS StackExchange提供的答案:

看起来你想要移除窄长三角形。在SQL Server Spatial Tools项目中有一个用于此目的的函数 - FilterArtifactsGeometry

关于如何使用该函数的博客文章可以在这里找到。

该函数有一个用于过滤小多边形的ringTolerance参数:

移除所有比提供公差更细的多边形环(例如,ring.STArea < ringTolerance x ring.STLength)。值为0将不会删除任何环。

实际上,这允许检测并移除非常窄的多边形环(窄长三角形),同时保留通常形状的多边形环。假设是,窄长三角形是不可取的,而非窄长三角形则是可取的。


0
你尝试过 [geom].STExteriorRing() 命令吗?

好的建议 - 但在我的情况下,它似乎没有返回任何内容。 SELECT @geom 返回如上所示的合并多边形。 SELECT @geom.STExteriorRing() 没有返回任何内容。将其附加到 .STAsText() 将返回 null。 - Peter Bridger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接