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 27 July 2017 10:06

felixd
Participant occasionnel
Date d'inscription: 20 Jun 2017
Messages: 46

Buffer sur polyligne qui ne dépasse pas la ligne

Bonjour,

Je souhaiterais faire un buffer autour d'une géométrie du type polyligne. Ce buffer ne devant pas dépassant les extrémités de ligne.
il faudrait je pense régénérer les polylignes avec un décalage des St_Startpoint et st_endpoint de la longueur du buffer.

Merci pour votre aide.

Hors ligne

 

#2 Thu 27 July 2017 10:42

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

Re: Buffer sur polyligne qui ne dépasse pas la ligne

Bonjour,

La doc, la doc... smile

http://postgis.net/docs/ST_Buffer.html

Nico

Hors ligne

 

#3 Thu 27 July 2017 12:03

felixd
Participant occasionnel
Date d'inscription: 20 Jun 2017
Messages: 46

Re: Buffer sur polyligne qui ne dépasse pas la ligne

Bonjour Nico et merci,

La doc Mon capitaine.
Alors c'est encore pas tout a fait ce que je souhaite. il me faudrait un retrait aux extrémités.

Dernière modification par felixd (Thu 27 July 2017 12:03)

Hors ligne

 

#4 Thu 27 July 2017 13:43

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

Re: Buffer sur polyligne qui ne dépasse pas la ligne

Hello
Ah, alors il faut retirer une partie à la linestring, par exemple avec une fonction de référencement linéaire:

Code:

WITH tmp AS (
    SELECT 'LINESTRING(0 0, 5 5)' :: GEOMETRY AS geom
), tmp1 AS (
    SELECT st_lineSubstring(geom, 2.0 / st_length(geom), 1 - (2.0 / st_length(geom))) AS geom
    FROM tmp
) SELECT st_buffer(geom, 2, 'endcap=flat')
  FROM tmp1;

-- avec une fonction, si on doit réutiliser ce code SQL:
create or replace function st_coupeLesBouts(geom geometry, dist DOUBLE PRECISION)
  returns geometry as $$
    select st_lineSubstring(geom, dist / st_length(geom), 1 - (dist / st_length(geom)));
  $$ LANGUAGE SQL;

WITH tmp AS (
    SELECT 'LINESTRING(0 0, 5 5)' :: GEOMETRY AS geom
) SELECT st_buffer(st_coupeLesBouts(geom, 2), 2, 'endcap=flat')
  FROM tmp;

On découpe la ligne (ici, 2 unités) en calculant les fractions de lignes à retirer en début et fin de ligne.

Nico

Hors ligne

 

Pied de page des forums

Powered by FluxBB