Pages: 1
- Sujet précédent - Obtenir toutes les polygones qui ont une intersection entre eux - Sujet suivant
#1 Wed 19 September 2018 11:32
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3197
- 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: 3197
- 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
Pages: 1
- Sujet précédent - Obtenir toutes les polygones qui ont une intersection entre eux - Sujet suivant