Как объединить несколько строк LineString в одну коллекцию строк - PullRequest
4 голосов
/ 16 ноября 2011

Я использую SQL Server 2008 и тип данных Geometry для хранения списка дорог Великобритании, которые я импортировал из набора данных STRATEGI *1003* Ordanance Survey.

Каждая дорога разбита на несколько строк, каждая из которых содержит одну линию (A Linestring, составленную из одного сегмента) . Например, A369 состоит из 18 отдельных линий, как показано на рисунке ниже:

Screen capture of current linestrings

Что бы я хотел сделать, это собрать все отдельные строки, содержащие участки дороги, и создать новую строку, в которой все объединенные отдельные линии будут объединены в одну линию.

Другими словами, выполнение кода SELECT * FROM Structure WHERE Name = 'A369' вернет только одну строку, но все равно проведет дорогу, показанную на рисунке выше.

Ответы [ 2 ]

6 голосов
/ 23 ноября 2011

Просто используйте .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 голосов
/ 19 декабря 2013

В SQL 2012 вы можете использовать UnionAggregate

SELECT geometry::UnionAggregate(shape) FROM Table

или, если у вас есть столбец географии

SELECT geography ::UnionAggregate(shape) FROM Table
...