SQL:多边形的并集

4

我有一个仅有一列geometry类型的表,其中包含多边形。如何获得表中所有多边形的并集?


请问您能否给我们发送一些您表格中的几行样本?听到几何形状却没有看到任何一个形状名称实在令人沮丧。 - Skippy Fastol
1
“the union of all the polygons” 是什么意思?您是想要一个最小的单个多边形,它可以包含表中的所有多边形吗? - MatBailie
@SkippyFastol 我不确定粘贴几行以WKB格式编码的几千字节长的几何数据能够澄清任何问题。 - Imp
@Arion 我知道MSSQL中有存储的几何运算函数,但我对SQL的经验很少,不知道如何将它们应用于整个列作为参数。 - Imp
@Dems 这些多边形实际上是相邻的,一起形成一个更大的多边形,所以是的,这是合理的。但即使是多重多边形几何对象也可以。 - Imp
啊哈...你没有提到WKB格式部分... - Skippy Fastol
4个回答

14

在 SQL Server 2012 中:

SELECT geometry::UnionAggregate(geomcolumn) FROM YourTable;
在SQL Server 2008/R2中:
DECLARE @g = geometry::STGeomFromText('GEOMETRYCOLLECTION EMPTY', YourSRID);
SELECT @g = @g.STUnion(geomcolum) FROM YourTable;

谢谢,很好用 :) 但是如果接受的话还是应该给先回答的同事更公平一些 ;) - Imp
3
实际上,@imp,我接受这个答案。你有我的许可从我这里收回虚拟的网络积分并将它们给予这个答案。 :) - Ben Thul

4
这对我有用:

这对我有用:

CREATE TABLE #g (i INT IDENTITY, a geometry)
INSERT INTO #g (a)
VALUES
    (geometry::STGeomFromText(
        'POLYGON((0 0, 3 0, 3 3, 0 3, 0 0))', 0)
    ),
    (geometry::STGeomFromText(
        'POLYGON((5 2, 7 2, 7 0, 5 0, 5 2))', 0)
    )

DECLARE @g geometry
SELECT TOP 1 @g = a FROM [#g]
SELECT @g = @g.STUnion(a) FROM #g

SELECT @g

显然,当其中一个实例或操作数为空时,STUnion方法返回null,因此需要使用select top 1技巧。


很抱歉耽搁了。这正是我想要的,非常感谢 :) - Imp

0

你的意思是,如果你有2个正方形,比如说

(0 0 , 1 0 , 0 1 , 1 1) 

并且

(1 0 , 1 1 , 2 0 , 2 1)

你最终得到一个矩形:

(0 0, 2 0 ,0 1, 2 1)

如果是的话,可以尝试使用GPC(通用多边形剪辑库)

这个链接也可能对您有所帮助


-3

从[你的表]选择不同的几何图形


尊敬的您,您的建议有几个问题:几何数据不可比较,因此不能与DISTINCT一起使用。即使可以,从此查询中获得的所有内容都将是单个几何体的集合 - 这里没有任何尝试创建它们的UNION。 - Alastair Aitchison
@AlastairAitchison:确实。对于这个错误的建议,我表示歉意。 - Skippy Fastol

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