Ответ 1
То, как я закончил это, - это переменные:
DECLARE @Shape GEOMETRY
SET @Shape = GEOMETRY::STGeomFromText('GEOMETRYCOLLECTION EMPTY', @MySrid)
SELECT @Shape = @Shape.STUnion(Shape)
FROM MyShapeTable
Это не так хорошо, но он работает.
Просто для уточнения переднего плана: я говорю об объединении геометрии, а не ключевое слово SQL UNION
.
Я пытаюсь перенести некоторые пространственные данные из Postgres с PostGIS на SQL Server 2008. Это было нормально, пока я не увидел такое выражение:
SELECT GeomUnion(the_geom) FROM some_table
Это объединяет всю геометрию в этом столбце и возвращает его как один результат (аналогично тому, как работает COUNT
). Насколько я знаю, SQL Server имеет только функцию STUnion
, которая объединяет одну геометрию с другой. Есть ли способ сделать что-то похожее на способ Postgres?
Если это помогает, функция STUnion
работает следующим образом:
SELECT first_geometry_column.STUnion(second_geometry_column) FROM some_table
То, как я закончил это, - это переменные:
DECLARE @Shape GEOMETRY
SET @Shape = GEOMETRY::STGeomFromText('GEOMETRYCOLLECTION EMPTY', @MySrid)
SELECT @Shape = @Shape.STUnion(Shape)
FROM MyShapeTable
Это не так хорошо, но он работает.
Только функция UnionAggregate SQL2012?
SELECT geography::UnionAggregate( geometry ) FROM some_table
Хм догадаться. http://technet.microsoft.com/en-us/library/ff929095.aspx
Ваш лучший вариант - создать функцию CLR для поддержки агрегата. Существует несколько существующих решений: