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

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.

#1 Mon 17 June 2019 20:57

Tonio
Juste Inscrit !
Date d'inscription: 5 Feb 2019
Messages: 6

PostGis: assembler des polygones

Bonsoir,

J'ai une table avec 500 polygones qui disposent tous d'un id. Il y a environ 300 polygones qui se chevauchent je cherche une fonction me permettant de faire une union de ces polygones lorsqu'ils s'intersectent uniquement.

Je pensais à quelque chose du genre

CREATE TABLE fusion_polygones AS
SELECT ST_Union (geom)
WHERE ST_Intersect(geom)
FROM data

Je débute en sql donc je me retrouve avec une nouvelle entité qui est la fusion de mes 500 polygones... ahah

Est-ce que quelqu'un peut m'éclairer sur la requête à effectuer s'il vous plait?

Je souhaiterais obtenir une nouvelle table avec des entités qui sont issues de l'union de plusieurs polygones lorsqu'ils s'intersectaient et également les polygones qui ne se touchaient pas et n'ont donc pas été fusionnés

Merci d'avance!!

Dernière modification par Tonio (Mon 17 June 2019 22:05)

Hors ligne

 

#2 Tue 18 June 2019 09:25

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

Re: PostGis: assembler des polygones

Bonjour,

Plusieurs points :
st_intersectS(geoma, geomb)

Ensuite il faut un ensemble A : data et un ensemble B : data donc

FROM data as a, data as b et pour éviter de comparer deux géométries équivalentes : WHERE a.id<>b.id

Sachant qu'en l'état vous aurez des doublons car SI geoma intersects geomb ALORS geomb intersects geoma

Résultat :

Code:

WITH p as (SELECT a.id,a.geom FROM data a, data b WHERE st_intersects(a.geom,b.geom) AND a.id<>b.id )
SELECT arrayagg(id), st_union(geom) as geom  FROM p

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

Hors ligne

 

#3 Tue 18 June 2019 10:50

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1534

Re: PostGis: assembler des polygones

Bonjour,

Les "nouvelles" fonctions de postgis de clustering marchent bien dans ce cas. Ici st_clusterIntersecting:

Code:

select st_unaryunion(unnest(st_clusterintersecting(geom))) as geom
from testpg;

Pas de self-join a faire sur la table, écriture en une seule requête, mais on perd les id (qu'on peut retrouver par assoc spatiale (pointOnSurface) si on le désire).

Nicolas


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

Hors ligne

 

#4 Tue 18 June 2019 11:25

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

Re: PostGis: assembler des polygones

Bonjour,

@Nicolas : je voulais commencer par du simple wink car la clause FROM était pas vraiment comprise.

NB : un petit st_accum(geom) avant la fonction de cluster c'est mieux non ?


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

Hors ligne

 

#5 Tue 18 June 2019 13:13

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1534

Re: PostGis: assembler des polygones

@Christophe: ok wink Non pas besoin du st_accum je pense: clusterIntersecting renvoie un array de geometryCollection, chaque element du tableau étant l'ensemble des geom en intersection. unnest explose le tableau en geom (geocol) et unaryUnion fait l'union des geom de la collection (dans mon exemple, la couche ne contenait que des polygones)

Nico

Hors ligne

 

#6 Tue 18 June 2019 14:29

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

Re: PostGis: assembler des polygones

st_accum n'est en effet pas nécessaire, mais valide,
st_clusterintersecting possèdent deux signatures,
l'une acceptant un setof geometry et l'autre un geometry[].

La seconde est manquante sur la doc...

Dernière modification par tumasgiu (Tue 18 June 2019 15:04)

Hors ligne

 

#7 Tue 18 June 2019 14:34

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

Re: PostGis: assembler des polygones

On en apprend tous les jours !!! Je savais pas que si tu écris SELECT st_clusterintersecting(geom) FROM p il groupait automatiquement les géométries.


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

Hors ligne

 

#8 Tue 18 June 2019 20:34

Tonio
Juste Inscrit !
Date d'inscription: 5 Feb 2019
Messages: 6

Re: PostGis: assembler des polygones

Bonsoir!

Je vous remercie de vos réponses Christophe et Nicolas!
@ Christophe effectivement dans mon énoncé je n'ai pas placé "FROM" au bon endroit wink

super pour la requete "select st_unaryunion(unnest(st_clusterintersecting(geom))) as geom
from testpg;"

ça marche nickel!

Bonne soirée

Hors ligne

 

Pied de page des forums

Powered by FluxBB