Annonce
Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).
En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.
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: 3163
- 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: 3163
- 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