2016-03-10 123 views
0

我試圖確定一些多邊形是否相互重疊。所有多邊形都在同一圖層中。檢查一些多邊形是否相互重疊

PostGis函數ST_OVERLAPS可以確定兩個幾何元素是否重疊。但是我找不到一種方法來應用這個函數來檢查一個或多個多邊形是否相互重疊。

我想是這樣的:

SELECT * 
FROM MyGeometricTable g 
WHERE ST_OVERLAPS(g.geom,g.geom) = 1 
AND g.id <> g.id      --The polygon that overlap another polygon is not the same. 

MyGeomtricTable包含實例100個多邊形。

感謝

回答

2

你需要用笛卡爾乘積要做到這一點,是這樣的:

SELECT * 
FROM MyGeometricTable g1, MyGeometricTable g2 
WHERE ST_OVERLAPS(g1.geom,g2.geom) = TRUE 
AND g1.id <> g2.id; 

要申請約翰·巴薩的改進,我們可以做到以下幾點:

select g1.id, g2.id 
from MyGeometricTable g1, MyGeometricTable g2 
where ST_OVERLAPS(g1.geom,g2.geom) = TRUE 
AND g1.id > g2.id 
+2

更妙的是,你可以將運行時間減半,選擇g1.id .... AND gi.id> g2.id;' –

+0

@JohnBarça,你是對的,我相應地編輯了我的答案 –