2017-07-26 201 views
1

有没有更好的方法来创建多边形而不是文本连接?从多边形构造多边形

我的数据库中有多个多边形(数据库中每行一个)以及我需要创建多面体的那些多边形。我能看到的唯一的解决办法是创建将功能:

  1. 删除“多边形”从几何文字显示为文本
  2. 以显示为文本的其他多边形
  3. 添加“MULTIPOLYGON”文本
  4. 之前串连它
  5. 将其转换为几何类型

我从两个多边形

polygon1: 'POLYGON((1 1, 1 -1, -1 -1, -1 1, 1 1))' 
polygon2: 'POLYGON((1 1, 3 1, 3 3, 1 3, 1 1))' 

创建一个多面:

result: 'MULTIPOLYGON(((1 1, 1 -1, -1 -1, -1 1, 1 1)), ((1 1, 3 1, 3 3, 1 3, 1 1)))' 

它听起来并不像一个完美的解决方案,所以我想知道是否有更好的方法来做到这一点。

回答

2

你可以使用STUnion

CREATE TABLE t(ID INT IDENTITY(1,1), c GEOMETRY); 

INSERT INTO t(c) 
VALUES ('POLYGON((1 1, 1 -1, -1 -1, -1 1, 1 1))') 
     ,('POLYGON((1 1, 3 1, 3 3, 1 3, 1 1))'); 

DECLARE @g geometry = geometry::STGeomFromText('GEOMETRYCOLLECTION EMPTY', 0); 
SELECT @g = @g.STUnion(c) FROM t 

SELECT @g; 

Rextester Demo

+1

这是完美的!非常感谢你。 – blaballong

+0

我开始使用真实数据,似乎这种解决方案并不符合我的预期。它在两个(或更多)多边形共享边界的情况下创建一个大多边形。我不想创建一个大的区域 - 我需要将它保存为多边形的集合。我想没有什么可以做的呢? – blaballong