#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: 3199
- 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: 1554
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
En ligne
#4 Tue 18 June 2019 11:25
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3199
- Site web
Re: PostGis: assembler des polygones
Bonjour,
@Nicolas : je voulais commencer par du simple 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: 1554
Re: PostGis: assembler des polygones
@Christophe: ok 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
En ligne
#6 Tue 18 June 2019 14:29
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
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: 3199
- 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
super pour la requete "select st_unaryunion(unnest(st_clusterintersecting(geom))) as geom
from testpg;"
ça marche nickel!
Bonne soirée
Hors ligne