2014-01-16 73 views
1

我有數據庫表,其中包含許多(70,000+)多邊形GEOGRAPHY多邊形。 (這些多邊形是屬性地塊。)我們需要對聚合形狀(一個MULTIPOLYGON)執行多次計算,其中包含所有這些地塊的地理聯合,例如「這些多邊形覆蓋的凸包的百分比「? (注意:這不像聽起來那麼簡單,重疊的包裹確實發生了,我們不希望對它們進行重複計數,所以我們不能簡單地將這些包裹的面積加起來。)計算多邊形地理聯盟的高效技巧

In爲了執行這些計算,我們希望生成一個表示所有多邊形的地理聯合的新形狀。基於答案this question,我想下面的查詢:

DECLARE @Shape GEOGRAPHY 
SET @Shape = GEOGRAPHY::STGeomFromText('MULTIPOLYGON EMPTY', 4326) 

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

但查詢需要永遠(60分和計數,到目前爲止,沒有答案了)。我想知道其他什麼技術可以想到哪些更有效。這個查詢不需要是實時查詢,但60+分鐘也不會起作用。

+0

我的感覺是,這樣的優化是滿足這個請求是取g1∪g2,取這個結果∪g3,取* that * result∪g4等等。作爲一個測試,看看1,10和100行需要多長時間。如果它大致是線性的,我會說我的理論是有效的,我們將不得不欺騙引擎來有效地做到這一點。 –

回答

2

理想情況下,你應該使用UnionAggregate功能,但只因爲SQL Server中存在的一個鏈接2012年

http://technet.microsoft.com/en-us/library/ff929095.aspx

例子:

SELECT City, 
geography::UnionAggregate(SpatialLocation) AS SpatialLocation 
FROM Person.Address 
WHERE PostalCode LIKE('981%') 
GROUP BY City; 
+0

+1爲了讓我知道這個方法!我唯一需要補充的是還有一個ConvexHullAggregate,它似乎與OPs問題一致。 –

+0

謝謝,這個伎倆! – jbeldock