Pages: 1
- Sujet précédent - [POSTGIS] : créer des géométries après st_clusterIntersecting - Sujet suivant
#1 Thu 10 November 2022 17:13
- gregorybodet
- Participant occasionnel
- Date d'inscription: 9 Oct 2015
- Messages: 18
[POSTGIS] : créer des géométries après st_clusterIntersecting
Bonjour,
Je bloque sur quelque chose qui doit être simple.
J'ai utilisé la fonction st_clusterIntersecting pour déterminer les intersections de polygones contenus dans une même couche.
Requête :
Code:
SELECT ST_AsText(unnest(st_clusterIntersecting(geom))) FROM ma_table
cette requête me permet à priori de récupérer les géométries des croisements.
Résultat :
Code:
GEOMETRYCOLLECTION(MULTIPOLYGON(((682657.989560889 6919563.76339561,682666.463386286 6919558.52245039,682668.613657195 6919562.96438315,682662.641048622 6919565.9347772,682660.109942907 6919567.19494465,682657.989560889 6919563.76339561)))))))
Est-il possible de transformer ce résultat de nouveau en géométrie ?
Ou sinon, comment obtenir les chevauchements de polygones contenus dans une même table ?
Merci
Cordialement
Hors ligne
#2 Thu 10 November 2022 17:30
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [POSTGIS] : créer des géométries après st_clusterIntersecting
Bonsoir,
Le résultat de unnest_st_clusterIntersecting(... renvoie déja une géométrie: vous avez une geometryCollection contenant tous les objets qui s'intersectent entre eux.
Si vous etes interessés par la partie surfacique de ce résultat, il faut utiliser st_collectionExtract(geom, 3) pour renvoyer les polygones et multipolygones contenus dans la geometryCollection:
(https://postgis.net/docs/ST_CollectionExtract.html)
Code:
SELECT ST_CollectionExtract(unnest(st_clusterIntersecting(geom))), 3) FROM ma_table
Nicolas
Hors ligne
#3 Thu 10 November 2022 17:32
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: [POSTGIS] : créer des géométries après st_clusterIntersecting
Le "ST_AsText" sert à afficher le résultat sous forme de texte. Il est donc inutile.
Dans votre cas, je pense que ceci devrait fonctionner :
Code:
SELECT ST_CollectionExtract(unnest(st_clusterIntersecting(geom))) as geom FROM ma_table
edit : grillé par Nicolas
Dernière modification par Sylvain M. (Thu 10 November 2022 17:35)
Sylvain M.
Hors ligne
#4 Thu 10 November 2022 17:36
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [POSTGIS] : créer des géométries après st_clusterIntersecting
de peu
Hors ligne
#5 Mon 14 November 2022 09:18
- gregorybodet
- Participant occasionnel
- Date d'inscription: 9 Oct 2015
- Messages: 18
Re: [POSTGIS] : créer des géométries après st_clusterIntersecting
Bonjour,
Merci pour vos retours respectifs. cela fonctionne, je n'étais pas loin. En revanche, cela me remonte le même jeu de données et pas seulement, à priori, les croisements. Ma table de départ est une table de parcelle d'une commune dont je souhaite récupérer les polygones résultants des parcelles qui se chevauchent. Faut-il éclater le résultat avec un st_dump ou adopter une autre méthode ?
Cordialement
Hors ligne
#6 Mon 14 November 2022 14:37
- gregorybodet
- Participant occasionnel
- Date d'inscription: 9 Oct 2015
- Messages: 18
Re: [POSTGIS] : créer des géométries après st_clusterIntersecting
Bonjour, après plusieurs tests, j'ai explosé le st_clusterIntersecting avec un st_dump. Le résultat me paraît incertain. En effet le résultat ne me donne pas les géométries qui s'intersectent. Pour 2 parcelles qui se croisent dans ma couche, je devrais avoir un polygone se limitant au croisement. Le résultat me donne un polygone englobant l'intersection + parcelle et l'autre la parcelle sans l'intersection.
Cordialement
Hors ligne
#7 Mon 14 November 2022 14:53
- gregorybodet
- Participant occasionnel
- Date d'inscription: 9 Oct 2015
- Messages: 18
Re: [POSTGIS] : créer des géométries après st_clusterIntersecting
Bonjour,
Pour être plus clair, voici la requête qui me renvoie bien le résultat de l'intersection que je souhaites, à savoir l'intersection de parcelles contenues dans une même table. Pour réaliser cela, j'ai isolé dans 2 sous-requêtes les parcelles de chaque section. J'aimerais pouvoir effectuer le même procédé sans devoir décomposer par section et sur l'ensemble de mes parcelles.
Cordialement
Code:
WITH req_aa AS ( SELECT * FROM [ma table parcelle] WHERE insee = 'nnnnn' and geo_section = 'AA' ), req_a AS ( SELECT * FROM [ma table parcelle] WHERE insee = 'nnnnn' and geo_section = 'A' ) SELECT row_number() over() as gid, st_intersection(req_aa.geom,req_a.geom) as geom FROM req_aa, req_a
Hors ligne
#8 Tue 15 November 2022 12:30
- gregorybodet
- Participant occasionnel
- Date d'inscription: 9 Oct 2015
- Messages: 18
Re: [POSTGIS] : créer des géométries après st_clusterIntersecting
Bonjour,
Pour le suivi, j'ai réussi à trouver une solution à mon problème avec cette requête ;
Code:
-- gestion des intersections WITH req_inter AS ( SELECT row_number() over() AS gid, -- je garde uniquement ici les polygones d'intersections (avec un buffer pour éliminer les artéfacts) st_buffer(st_union(ST_CollectionExtract(St_intersection(p1.geom,p2.geom),3)),0.5) as geom FROM [ma_table_parcelle] p1, [ma_table_parcelle] p2 WHERE - - condition que le résultat du croisement soit une géométrie ST_Overlaps(p1.geom,p2.geom) is true AND p1.insee = p2.insee AND p1.insee = 'nnnnn' GROUP BY p1.insee, p2.insee ) SELECT row_number() over() as gid, p.* -- je supprime de ma table parcelle les intersections calculées ci-avant st_difference(p.geom,i.geom) as geom FROM req_inter i, [ma_table_parcelle] p WHERE p.insee = 'nnnnn'
Ce résultat de parcelles sans intersection, va me permettre de déterminer les zonages de notre PLU sans remonter des erreurs dues au chevauchement présent dans les données de la DGFIP (en attendant le RPCU !)
Cordialement
Hors ligne
Pages: 1
- Sujet précédent - [POSTGIS] : créer des géométries après st_clusterIntersecting - Sujet suivant