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 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 wink

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

wink 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

 

Pied de page des forums

Powered by FluxBB