2016-03-10 75 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,你是对的,我相应地编辑了我的答案 –