2010-07-20 22 views
11

Chỉ cần làm rõ mặt trước: Tôi đang nói về hình học kết hợp, không phải từ khóa SQL UNION.Liên kết tất cả hình học trong bảng SQL Server như GeomUnion trong Postgres

Tôi đang cố gắng để di chuyển một số dữ liệu không gian từ Postgres với PostGIS để SQL Server 2008. Nó là tốt cho đến khi tôi nhìn thấy một tuyên bố như thế này:

SELECT GeomUnion(the_geom) FROM some_table 

này đoàn tất cả các hình học trong cột đó và gửi lại là một kết quả (tương tự như cách hoạt động của COUNT). Theo tôi biết, SQL Server chỉ có chức năng STUnion, kết hợp một hình học với nhau. Có cách nào để làm một cái gì đó tương tự như cách Postgres?

Nếu nó giúp, các STUnion chức năng làm việc như thế này:

SELECT first_geometry_column.STUnion(second_geometry_column) FROM some_table 
+1

Tuyên bố từ chối trách nhiệm: Tôi chưa làm việc với dữ liệu không gian :). Bạn không thể sử dụng biểu thức bảng chung và STUnion kết hợp để có được chức năng GeomUnion mong muốn? –

Trả lời

9

Con đường tôi đã kết thúc làm điều này là với các biến:

DECLARE @Shape GEOMETRY 
SET @Shape = GEOMETRY::STGeomFromText('GEOMETRYCOLLECTION EMPTY', @MySrid) 

SELECT @Shape = @Shape.STUnion(Shape) 
    FROM MyShapeTable 

Nó không phải là tốt đẹp, nhưng nó hoạt động.

+3

Và nó được * thực sự * đắt tiền cho hơn một số ít các hình học. –

5

Tùy chọn tốt nhất của bạn là tạo một hàm CLR để hỗ trợ tổng hợp. Có một vài giải pháp hiện có:

+0

Bạn đúng - đó là tùy chọn tốt nhất cho SQL 2008 nhưng nó rất chậm và gây ra lỗi hình học nhỏ. Rất may, SQL2012 nhanh và không có vấn đề về hình học. MS đã tuyên bố rằng họ sẽ không sửa chữa các vấn đề hình học trong SQL2008. – Damien

9

Là UnionAggregate chức năng chỉ SQL2012?

SELECT geography::UnionAggregate(geometry) FROM some_table 

Hmm đoán vậy. http://technet.microsoft.com/en-us/library/ff929095.aspx

+0

Cảm ơn bạn đã thông tin. Đã tiết kiệm rất nhiều thời gian! FYI: Đối với dữ liệu hình học, nó là hình học :: UnionAggregate (hình học). –

+0

Đây hoàn toàn là câu trả lời cho câu hỏi ban đầu, cho SQL 2012 trở lên. – mdisibio

Các vấn đề liên quan