如何将多个LineString行合并为单个行集合

4
我正在使用SQL Server 2008和Geometry数据类型来存储一系列英国A级公路,这些公路是我从Ordnance Survey STRATEGI数据集中导入的。
每条公路都被分成多行,每行包含一个单独的线段(由一个Linestring组成)。例如,A369由18个不同的线段组成,如下图所示:

Screen capture of current linestrings

我想做的是收集所有包含公路部分的单独行,创建一个新行,将所有单独的线段组合成一个线段。
换句话说,运行代码SELECT * FROM Structure WHERE Name = 'A369'将只返回一行,但仍会绘制上图中的道路。

2
这里有一个关于此问题的讨论:https://dev59.com/73A75IYBdhLWcg3wdIl0 - Mikpa
我也一直在寻找这个,但是除了添加CLR函数之外,我看不到其他(好的)方法。 - Asken
2个回答

7
只需使用.STUnion。
BEGIN
-- create a test table
DECLARE @test TABLE(seg GEOMETRY);
INSERT INTO @test VALUES(geometry::STGeomFromText('LINESTRING (0 0, 50 100)', 0))
INSERT INTO @test VALUES(geometry::STGeomFromText('LINESTRING (50 100, 100 200)', 0))
INSERT INTO @test VALUES(geometry::STGeomFromText('LINESTRING (100 200, 150 300)', 0))
--SELECT seg.STAsText() FROM @test
DECLARE @geom GEOMETRY
SELECT @geom = (SELECT TOP 1 seg FROM @test)
-- union all the linestring points
SELECT @geom = @geom.STUnion([seg]) FROM @test
-- do what you want with the results
SELECT @geom
print(@geom.STAsText())
END

3

在 SQL 2012 中,您可以使用 UnionAggregate。

SELECT geometry::UnionAggregate(shape) FROM Table

或者如果你有一个地理信息列

SELECT geography ::UnionAggregate(shape) FROM Table

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