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é ?

#1 Thu 28 February 2013 17:27

simo lay
Membre
Date d'inscription: 8 Dec 2011
Messages: 170

[PostGIS] : Fusionner les parcelles qui se touchent

Bonjour,
j'ai une table des parcelles sous postgis, mon objectif est de fusionner uniquement les parcelles qui se touchent j'utilise la fonction st_union lorsque les parcelles se touchent (st_touches) le problème c'est que   quand j'ai uniquement 2 parcelles qui se touchent je les fusionne et j’obtiens un seul objet sans problème (c'est bon) mais dans le cas où j'ai 3 parcelle (ou plus) qui se touchent la fusion se fait par deux objets (parcelles) et du coup j’obtiens  2 objets au lieu d'avoir un seul.
avec une boucle je pense que c'est possible mais j'ai besoin de quelques pistes

sur l'image jointe le problème est plus claire

merci

Dernière modification par simo lay (Fri 01 March 2013 09:14)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#2 Fri 01 March 2013 20:16

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

Re: [PostGIS] : Fusionner les parcelles qui se touchent

bonjour,

a priori je vois pas trop, pour ma part j'ai solutionné ce problème en passant par la topologie sous postgis 2.0

avec un :

topology.TopoGeo_AddPolygon


pour transformer vos polygone en face, arc, nœud et récupérer la géométrie comme étant la composée des trois faces c'est trivial.


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

Hors ligne

 

#3 Sat 02 March 2013 00:51

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1019

Re: [PostGIS] : Fusionner les parcelles qui se touchent

Bonsoir,
peut être que ça répondra à ta problématique :

Tu peux utiliser la fonction st_Union en prenant un tableau de géométries comme argument.
Cette fonction va te renvoyer un polygone avec un ring pour chaque groupe de parcelle contigües.
Ensuite grâce a St_Dump, tu vas extraire un à un chaque ring de ton polygone.

Code:

SELECT geom into "testUnion" FROM 
    (SELECT (St_dump
                 (St_Union
                      (ARRAY( SELECT geom FROM data)
                      )
                  )
               ).geom AS geom
    ) AS t ;

Dernière modification par tumasgiu (Sat 02 March 2013 00:52)

En ligne

 

#4 Mon 04 March 2013 09:07

simo lay
Membre
Date d'inscription: 8 Dec 2011
Messages: 170

Re: [PostGIS] : Fusionner les parcelles qui se touchent

Bonjour,

merci à vous ChristopheV  et tumasgiu j'ai testé la solution de tumasgiu et ça répond exactement à ce que je voulais faire.

merci beaucoup

Hors ligne

 

#5 Sat 10 October 2020 11:58

Jkerebel04
Membre
Date d'inscription: 21 Apr 2020
Messages: 12

Re: [PostGIS] : Fusionner les parcelles qui se touchent

Bonjour
Je reviens vers vous pour une question complémentaire concernant ce sujet. Je souhaiterai ajouter une ou plusieurs conditions indexées sur des colonnes de la table "data". Est-il possible d'ajouter une commande GROUP BY. l'essai ci-dessous le fonctionne pas.

Pourriez-vous m'indiquer des pistes SVP ?

CREATE TABLE test_union AS SELECT geom
    FROM
        (SELECT (St_dump
                     (St_Union
                             (    ARRAY( SELECT geom FROM data )
                     )
                        )
                 ).geom AS geom
         GROUP BY data.num
    ) AS t ;

Hors ligne

 

#6 Mon 12 October 2020 09:35

JP LLORENS
Membre
Date d'inscription: 12 Nov 2008
Messages: 204

Re: [PostGIS] : Fusionner les parcelles qui se touchent

Bonjour
Votre requêt peut être simplifiée

Code:

SELECT (St_dump(St_Union(geom)).geom AS geom
from  FROM data
GROUP BY data.num

Cordialement
JP

Hors ligne

 

#7 Mon 12 October 2020 19:21

Jkerebel04
Membre
Date d'inscription: 21 Apr 2020
Messages: 12

Re: [PostGIS] : Fusionner les parcelles qui se touchent

Effectivement ! Cela fonctionne bien mieux. merci.
Est_il possible dans la même requête d'ajouter une condition st_intersect ?

Pour l'instant je réalise la requête en deux temps :

d'abord je met a jour une colonne de la table bâtiment'tab_bat' qui recupère id de la table parcelle 'tab_par' accueillant le batiment
UPDATE tab_bat SET id_par_asso = tab_par.id
    FROM tab_par
    -- lorsque le centroide sur la surface intersecte la geométrie de tab_bat.
    WHERE st_intersects(ST_PointOnSurface(tab_bat.geom),tab_par.geom);


Ensuite je crée la table en unissant tout les batiment qui se touche issus de la même parcelle.
DROP TABLE IF EXISTS tab_union CASCADE;
-- creer la table tab_union avec la géomètrie issue de toutes les partie jointe
CREATE TABLE tab_union AS SELECT
-- Créé la géomètrie unique à partie des différents polygone
    (st_dump(st_union(geom))).geom as singlegeom,
    id_par_asso
FROM tab_bat
GROUP BY id_par_asso;

A+

Hors ligne

 

#8 Tue 13 October 2020 21:34

JD
Membre du bureau
Date d'inscription: 8 Aug 2013
Messages: 480

Re: [PostGIS] : Fusionner les parcelles qui se touchent

Bonsoir,
quelque chose dans le genre :

Code:

CREATE TABLE tab_union AS SELECT
-- Créé la géomètrie unique à partie des différents polygone
    (st_dump(st_union(a.geom))).geom as singlegeom,
    b.id
FROM tab_bat a
LEFT JOIN tab_par b ON  st_intersects(ST_PointOnSurface(a.geom),b.geom);
GROUP BY b.id

Hors ligne

 

#9 Sat 17 October 2020 08:07

Jkerebel04
Membre
Date d'inscription: 21 Apr 2020
Messages: 12

Re: [PostGIS] : Fusionner les parcelles qui se touchent

Exactement. Et redoutable d'efficacité.
Merci.

Jérome

Hors ligne

 

Pied de page des forums

Powered by FluxBB

Partagez  |