2010-07-20 24 views
11

Sadece açıklığı netleştirmek için: Ben birleştirme geometrisi hakkında konuşuyorum, SQL anahtar sözcüğü UNION.Tüm geometri, Postgres'te GeomUnion gibi bir SQL Server tablosundaki tüm geometri

ben SQL Server 2008 böyle bir açıklama görene kadar İyiydi için PostGIS ile Postgres bazı mekansal veri taşımak çalışıyorum:

SELECT GeomUnion(the_geom) FROM some_table 

Bu sendikalar tüm geometri o sütundaki ve iade Bir sonuç olarak (COUNT'un nasıl çalıştığı gibi). Bildiğim kadarıyla, SQL Server yalnızca bir geometriyi diğeriyle birleştiren STUnion işlevine sahiptir. Postgres'e benzer bir şey yapmanın bir yolu var mı? Eğer yardımcı olur

, STUnion fonksiyonu şu şekilde çalışır: Ben bunu sona erdi

SELECT first_geometry_column.STUnion(second_geometry_column) FROM some_table 
+1

Yasal Uyarı: Mekansal verilerle çalışmadım :). İstenen GeomUnion işlevselliğini elde etmek için ortak tablo ifadesi ve STUnion'u birlikte kullanamaz mısınız? –

cevap

9

yolu değişkenler geçerli:

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

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

O kadar güzel değil, ama işe yarıyor.

+3

Ve bir avuç geometriden daha fazlası için * gerçekten * pahalıdır. –

5

En iyi seçeneğiniz, toplamı desteklemek için CLR işlevi oluşturmaktır.

+0

Haklısınız - bu SQL 2008 için en iyi seçenek ancak çok yavaş ve küçük geometri hatalarına neden oluyor. Neyse ki, SQL2012 yıldırım hızlı ve geometri sorunları yok. MS, SQL2008'deki geometri sorunlarını düzeltmeyeceklerini belirtti. – Damien

9

sadece UnionAggregate fonksiyonu SQL2012 mı: mevcut çözümlerden bir çift vardır?

SELECT geography::UnionAggregate(geometry) FROM some_table 

Hmm bunu tahmin edin. http://technet.microsoft.com/en-us/library/ff929095.aspx

+0

Bilgi için teşekkürler. Çok zaman kazandı! FYI: Geometri verileri için geometridir :: UnionAggregate (geometri). –

+0

Bu, SQL 2012 ve üstü için kesinlikle orijinal soruya verilen cevaptır. – mdisibio

İlgili konular