Name

ST_ChaikinSmoothing — Renvoie une version lissée d'une géométrie, en utilisant l'algorithme Chaikin

Synopsis

geometry ST_ChaikinSmoothing(geometry geom, integer nIterations = 1, boolean preserveEndPoints = false);

Description

Lisse une géométrie linéaire ou polygonale en utilisant Chaikin's algorithm. Le degré de lissage est contrôlé par le paramètre nIterations. À chaque itération, chaque sommet intérieur est remplacé par deux sommets situés à 1/4 de la longueur des segments de ligne précédant et suivant le sommet. Un degré raisonnable de lissage est fourni par 3 itérations ; le maximum est limité à 5.

Si preserveEndPoints est égal à true, les extrémités des anneaux de polygone ne sont pas lissées. Les extrémités des lignes sont toujours préservées.

[Note]

Le nombre de sommets double à chaque itération, de sorte que la géométrie résultante peut comporter beaucoup plus de points que la géométrie d'entrée. Pour réduire le nombre de points, utilisez une fonction de simplification sur le résultat (voir ST_Simplify, ST_SimplifyPreserveTopology et ST_SimplifyVW).

Le résultat comporte des valeurs interpolées pour les dimensions Z et M lorsqu'elles sont présentes.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Disponibilité : 2.5.0

Exemples

Lissage d'un triangle :

SELECT ST_AsText(ST_ChaikinSmoothing(geom)) smoothed
FROM (SELECT  'POLYGON((0 0, 8 8, 0 16, 0 0))'::geometry geom) AS foo;

                 smoothed
───────────────────────────────────────────
 POLYGON((2 2,6 6,6 10,2 14,0 12,0 4,2 2))

Lissage d'un polygone en utilisant 1, 2 et 3 itérations :

nIterations = 1

nIterations = 2

nIterations = 3

SELECT ST_ChaikinSmoothing(
            'POLYGON ((20 20, 60 90, 10 150, 100 190, 190 160, 130 120, 190 50, 140 70, 120 10, 90 60, 20 20))',
            generate_series(1, 3) );

Lissage d'une LineString en utilisant 1, 2 et 3 itérations :

nIterations = 1

nIterations = 2

nIterations = 3

SELECT ST_ChaikinSmoothing(
            'LINESTRING (10 140, 80 130, 100 190, 190 150, 140 20, 120 120, 50 30, 30 100)',
            generate_series(1, 3) );

Voir aussi

ST_Simplify, ST_SimplifyPreserveTopology, ST_SimplifyVW