Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Wed 19 September 2018 11:32

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3199
Site web

Obtenir toutes les polygones qui ont une intersection entre eux

Bonjour,

Pour faire suite à la discussion :
https://georezo.net/forum/viewtopic.php?id=112438

et en prenant exemple sur l'exemple image fourni par Nicolas je souhaites obtenir 1,2,3,4,5,6

J'arrive actuellement au résultat suivant : (là c'est le résultat de ma requête perso sans lien avec l'exemple précédemment cité)

"2"    "659"    "{1760,3068}"    "{1760,2025,3326}"
"2"    "1760"    "{1760,3068}"    "{3068,3326}"

Je cherche donc à obtenir :

2, 659, 1760, 3068, 3326, 2025

Si qqu'un a une idée ...

Ou comment concaténer deux tableaux sans avoir de doublons dans les valeurs ?


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#2 Wed 19 September 2018 13:40

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3199
Site web

Re: Obtenir toutes les polygones qui ont une intersection entre eux

Bonjour,

Je me réponds des fois que cela puisse servir à d'autres la première CTE (p) étant volontairement anonyme :

Code:

 WITH p as (SELECT row_number() over() as id FROM monschema.matable ORDER BY id),
p1 as (SELECT a.id as ida,b.id as idb,a.nbbat as nbbata,b.nbbat as nbbatb,a.geom as geoma,b.geom as geomb 
       FROM p as a JOIN p as b ON st_intersects(a.geom,b.geom) AND a.id<b.id),
p2 as (SELECT ida,array_agg(idb) as idb FROM p1 
        GROUP BY ida ORDER BY ida),
p3 as (SELECT c.ida idac,d.ida idad,c.idb idbc,d.idb idbd, c.idb||d.idb FROM p2 as c, p2 as d WHERE  c.ida<d.ida AND c.idb && d.idb),
p4 as (select idac,idad,idbc,unnest(idbd) as uidbc FROM p3 order by idac),
p5 as (SELECT idac,array[idac]||array[idad]||idbc||uidbc as uu FROM p4 ORDER BY idac),
p6 as (SELECT idac,unnest(uu) u3 FROM p5 ORDER BY idac)

SELECT idac,array_agg(DISTINCT u3) as res FROM p6 GROUP BY idac ORDER BY idac

Dans le champ res on obtient le tableau contenant toutes les id (valeurs uniques) de polygones ayant une relation d'intersection entre eux.

Dernière modification par ChristopheV (Wed 19 September 2018 16:11)


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

Pied de page des forums

Powered by FluxBB