#1 Fri 06 December 2013 11:20
- mlascaray
- Juste Inscrit !
- Lieu: Carcassonne
- Date d'inscription: 27 Nov 2013
- Messages: 9
Union des buffers qui se superposent
Bonjour,
J'ai une couche multilignes et j'ai crée des buffers pour toutes les lignes. J'ai donc les buffers qui se superposent et je voudrais que ces buffers n'en forment qu'un car sinon mon st_within ne marchera par. Savez-vous comment faire une union de ces buffers? J'ai essayé st_union mais ça ne marche pas.
Merci
Dernière modification par mlascaray (Fri 06 December 2013 11:22)
Hors ligne
#2 Fri 06 December 2013 11:37
- cyrille
- Participant assidu
- Date d'inscription: 7 Feb 2006
- Messages: 401
Re: Union des buffers qui se superposent
Bonjour quel logiciel utilisez vous ?
Hors ligne
#3 Fri 06 December 2013 11:51
- mlascaray
- Juste Inscrit !
- Lieu: Carcassonne
- Date d'inscription: 27 Nov 2013
- Messages: 9
Re: Union des buffers qui se superposent
J'utilise pgAdminIII. Excusez-moi j'ai oublié de le dire.
Hors ligne
#4 Fri 06 December 2013 12:00
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3945
Re: Union des buffers qui se superposent
Bonjour,
Si vous faites l'opération dans l'interface de QGIS, lors de la création du buffer, il faut choisir (menu Vecteur > Outils de géotraitement > Tampon et penser à cocher "union des résultats du tampon". Par contre, cela va vous générer une seule ligne dans la table, pour tous les polygones.
Si vous le faites depuis votre base de données, vous pouvez faire
Code:
insert into matablebuffer(champ1, champ2, ..., geom) select champ1, champ2, ..., st_union (st_buffer(geom, distance)) from matablelineaire group by champx --- optionnel selon que vous voulez regrouper vos buffers à partir d'un champ ou avoir un seul objet
.
Il vous faudra par contre penser à supprimer les buffers existants
PS : Il faudra peut-être un st_multi(st_union(st_buffer(geom, distance))) selon que votre table autorise les multipolygones ou pas.
PS2 : pensez au forum GeoBD pour ce genre de requêtes
Hors ligne
#5 Fri 06 December 2013 13:10
- mlascaray
- Juste Inscrit !
- Lieu: Carcassonne
- Date d'inscription: 27 Nov 2013
- Messages: 9
Re: Union des buffers qui se superposent
Bonjour,
Je le fait via la base de données et j'ai mis exactement le même code que vous m'avez proposé mais ça ne veut tout de même pas me faire d'union.
J'ai les buffer qui sont un peu modifiés mais c'est tout. C'est vraiment bizarre.
Edit:
En fait vu que je veux unir tous les buffer, j'ai mis un count(index) dans le SELECT pour avoir une seule entité parce qu'en mettant index chaque buffer fesait l'union de lui-même je crois. Donc maintenant c'est bon.
Dernière modification par mlascaray (Fri 06 December 2013 14:01)
Hors ligne
#6 Fri 06 December 2013 14:39
Re: Union des buffers qui se superposent
Bonjour,
ceci devrait vous permettre d'obtenir le résultat escompté (un seul objet pour les tampons qui se chevauchent).
st_union crée un seul objet pour l'ensemble des buffers de toute la couche et la fonction st_dump "éclate" le multiploygone obtenu en polygones simples.
http://postgis.refractions.net/docs/ST_Dump.html
Code:
SELECT (st_dump(st_union(st_buffer(geom, distance)))).geom FROM votre_table
Mathieu BOSSAERT
Association GeoRezo
Hors ligne
#7 Fri 06 December 2013 15:06
- mlascaray
- Juste Inscrit !
- Lieu: Carcassonne
- Date d'inscription: 27 Nov 2013
- Messages: 9
Re: Union des buffers qui se superposent
Bonjour,
Une fois la requête lancée ça me met "la colonne « geom » est de type geometry mais l'expression est de type geometry_dump".
Vous avez une solution s'il vous plait?
Merci
Hors ligne
#8 Fri 06 December 2013 15:25
Re: Union des buffers qui se superposent
st_dump retourne un objet composite de type geometry_dump[] contenant d'une par un numéro de geometrie (.path) et d'autre part la géometrie (.geom)
C'est pourquoi il faut bien demander la partie "geometrie" du résultat de st_dump :
select (st_dump(...)).geom from
Mathieu BOSSAERT
Association GeoRezo
Hors ligne
#9 Fri 06 December 2013 15:34
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: Union des buffers qui se superposent
Bonjour,
Quelle est votre requête ?. Celle donnée par Mathieu sort bien l'objet geometry du dump: (st_dump(geom)).geom
L'utilisation des parenthèses autour de st_dump est obligatoire dans ce cas.
Le st_within que vous voulez lancer après doit vous permettre de trouver tous les objets dans les buffers, c'est à dire tous les objets situés à une certaine distance des lignes ?
Si c'est le cas, ne passez par un buffer, c'est long !
La fonction st_dwithin(geom, distance) permet de répondre à ces requêtes de façon très performante.
Nicolas
Hors ligne
#10 Mon 09 December 2013 12:19
- mlascaray
- Juste Inscrit !
- Lieu: Carcassonne
- Date d'inscription: 27 Nov 2013
- Messages: 9
Re: Union des buffers qui se superposent
Merci à tous pour vos propositions, elles sont toutes bien. En fait quand je voulais visualiser mes tables sur QGIS j'ouvrai la mauvaise couche et je croyais que ça marchait pas bien alors que ça marche impeccable.
Merci encore et désolé.
Hors ligne