2013-05-07 249 views
6

我的表格中有大約40,000個多邊形存儲爲幾何圖形。現在我想在該幾何列上創建空間索引。創建空間索引時,它會詢問我是否包含邊界框值。你能幫我找到我的界限嗎?爲了得到我的邊界框我需要找到我的xmin,ymin,xmax,ymax。多邊形的邊界框

感謝

+1

遍歷所有頂點,跟蹤最遠的左,右最遠,最遠起來,爲你做最遠下來X和Y。 (或者在第一次創建時做,如果太慢) – Patashu 2013-05-07 03:43:06

回答

7

編輯:您可以代替UnionAggregate當然STEnvelope的使用EnvelopeAggregate ...


您可以在所有的多邊形進行UnionAggregate,把一個STEnvelope他們周圍,直觀地選出XMin,YMin,XMax,YMax值。當然,你可以對邊界框的STAsText做一些TSQL操作,但是我會把它作爲一個手動練習。

這爲您提供了一個覆蓋您現有多邊形的框,但您應該考慮您需要多少填充或未來數據需要哪些邊界。

樣品:

use tempdb; 
create table GeometryTest(id int identity primary key, geom Geometry); 
insert GeometryTest values ('POLYGON((-130 54, -130 23, -60 23, -60 54, -130 54))'); 
insert GeometryTest values ('POLYGON((1 0, 0 0, 0 1, 1 1, 3 5, 1 0))'); 
insert GeometryTest values ('POLYGON((0 0, -100 5, 0 60, 70 70, 3 5, 0 0))'); 

select geometry::UnionAggregate (geom).STEnvelope().STAsText() 
from GeometryTest; 

--------------------------------------------------------------- 
POLYGON ((-130 0, 70 0, 70 70, -130 70, -130 0)) 
--------------------------------------------------------------- 

create spatial index six_GeometryTest_geom on GeometryTest(geom) 
    WITH (BOUNDING_BOX = (-130, 0, 70, 70)); 
+0

天才!感謝那。我來自惠靈頓 – 2013-05-07 22:29:33

+0

有沒有辦法在SQL Server 2008中做到這一點? UnionAggregate和EnvelopeAggregate不存在那裏.. – Philipp 2015-03-13 13:07:06

+0

@ Philipp這***是*** SQL服務器2008.也許你的意思是2005或2008與另一種兼容模式? – RichardTheKiwi 2015-03-16 08:52:07