2011-11-16 61 views
4

我正在使用SQL Server 2008和Geometry數據類型來存儲從Ordanance Survey STRATEGI數據集中導入的英國道路列表。如何將多個LineString行組合到單個行集合中

每條道路被分成多行,每行包含一行(A Linestring由一個段組成)。例如在A369是由18條獨立的線路,如下面的圖所示:

Screen capture of current linestrings

我今天準備這樣做,收集含道路的部分全部單獨的行,並創建一個新的將所有組合的單獨行保存爲一個線串的行。

換句話說,運行代碼SELECT * FROM Structure WHERE Name = 'A369'將只返回一行,但仍然繪製出上圖中看到的道路。

+2

有一個關於這個討論在這裏: http://stackoverflow.com/questions/3293190/union-all-geometry-in-as ql-server-table-like-geomunion-in-postgres – Mikpa

+0

一直在尋找這個,但我看不到任何其他(好)的方式,添加一個CLR函數。 – Asken

回答

6

只需使用.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 
2

在SQL 2012,您可以使用UnionAggregate

SELECT geometry::UnionAggregate(shape) FROM Table 

,或者如果你有一個地理列

SELECT geography ::UnionAggregate(shape) FROM Table 
相關問題