Postgis: ne garder que les plus petit polygones

Extraire des données OSM, créer sa carte, uMap, utiliser sur un GPS ou un smartphone...
yvecai
Messages : 43
Inscription : ven. févr. 26, 2016 4:49 pm

Postgis: ne garder que les plus petit polygones

Message par yvecai » jeu. sept. 06, 2018 3:28 pm

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:

Code : Tout sélectionner

     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;

Avatar de l’utilisateur
cquest
Messages : 1845
Inscription : ven. avr. 16, 2010 12:22 am
Localisation : Val de Marne
Contact :

Re: Postgis: ne garder que les plus petit polygones

Message par cquest » jeu. sept. 06, 2018 6:24 pm

J'ai un peu de mal à comprendre l'énoncé ;)

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.

yvecai
Messages : 43
Inscription : ven. févr. 26, 2016 4:49 pm

Re: Postgis: ne garder que les plus petit polygones

Message par yvecai » jeu. sept. 06, 2018 6:49 pm

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

yvecai
Messages : 43
Inscription : ven. févr. 26, 2016 4:49 pm

Re: Postgis: ne garder que les plus petit polygones

Message par yvecai » ven. sept. 07, 2018 7:14 am

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 !

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 6 invités