Postgis: ne garder que les plus petit polygones

Je m’amuse a analyser des différences entre les données de skimap.org et celle d’OSM pour avoir une idée de la complétude de ces 2 projets.

Je bute sur un problème Postgis: j’ai des polygones qui se superposent dans une table, et je ne voudrais garder que les plus petits. Comme analogie, mettons que j’ai une table ‘tout’ avec des régions (pas toutes) + tout les départments, et je voudrais ne garder que les départements.

J’ai tenté plusieurs trucs dans ce goût là sans succès:

     INSERT INTO departements (geom)
         SELECT DISTINCT b.geom
         FROM tout as a, tout as b
         WHERE 
            NOT ST_Covers(a.geom, b.geom) 
            AND a.id <> b.id;

J’ai un peu de mal à comprendre l’énoncé :wink:

Dans quel cas garderais-tu une région si tu as tout les départements ? Si il n’y a aucun département qui la recouvre ?

Il me semble que tu ne veux conserver que les polygones qui ne contiennent pas un autre polygone plus petit.

SELECT grand.geom
FROM tout AS grand
LEFT JOIN tout AS petit ON (petit.id != grand.id AND ST_Covers(grand.geom, petit.geom))
WHERE petit.geom IS NULL;

Sauf erreur, ça devrait sélectionner uniquement les polygones qui ne contiennent pas de plus petits polygones (donc les plus petits)

La règle de sélection a peut être besoin d’être affinée, car ça ne fonctionnera que si il y a vraiment un recouvrement complet.

Juste pas, je veux garder les petits recouverts et virer les grand recouvrant, sinon j’aurai fait dump(union())

Tu m’as fait réfléchir, en fait je veux bien seulement les grands.
J’ai abandonné le left join avec lequel je n’ai pas de bons résultats pour un marteau à coup de dump(union).
Merci !