2016-03-10 2 views
0

J'essaie de déterminer si certains polygones se chevauchent. Tous les polygones sont dans la même couche.Vérifier si certains polygones se chevauchent

La fonction PostGis ST_OVERLAPS permet de déterminer si deux éléments géométriques se chevauchent. Mais je ne peux pas trouver un moyen d'appliquer cette fonction afin de vérifier si un ou plusieurs polygones se chevauchent.

Je voudrais quelque chose comme:

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 contient des exemples 100 polygones.

Merci

Répondre

2

Vous devez le faire avec la multiplication Descartes, comme ceci:

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

Pour appliquer l'amélioration de John Barça, nous pouvons faire ce qui suit:

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

Encore mieux, vous peut couper le temps d'exécution de moitié avec 'Select g1.id .... AND gi.id> g2.id;' –

+0

@ JohnBarça, vous avez raison, j'ai édité ma réponse en conséquence –