Name

ST_Simplify — Renvoie une représentation simplifiée d'une géométrie, en utilisant l'algorithme de Douglas-Peucker.

Synopsis

geometry ST_Simplify(geometry geom, float tolerance);

geometry ST_Simplify(geometry geom, float tolerance, boolean preserveCollapsed);

Description

Calcule une représentation simplifiée d'une géométrie en utilisant l'algorithme Douglas-Peucker. La variable tolerance de simplification est une valeur de distance, dans les unités du SRS d'entrée. La simplification supprime les sommets dont la distance au réseau simplifié est inférieure à la distance de tolérance. Le résultat peut ne pas être valide même si l'entrée l'est.

La fonction peut être appelée avec n'importe quel type de géométrie (y compris les GeometryCollections), mais seuls les lignes et polygones sont simplifiés. Les extrémités des lignes sont préservées.

L'indicateur preserveCollapsed permet de conserver les petites géométries qui seraient autrement supprimées à la tolérance donnée. Par exemple, si une ligne de 1 m de long est simplifiée avec une tolérance de 10 m, lorsque preserveCollapsed est vrai, la ligne ne disparaîtra pas. Cette option est utile pour le rendu, afin d'éviter que de très petits éléments ne disparaissent de la carte.

[Note]

La géométrie renvoyée peut perdre sa simplicité (voir ST_IsSimple), la topologie peut ne pas être préservée et les résultats polygonaux peuvent être invalides (voir ST_IsValid). Utilisez ST_SimplifyPreserveTopology pour préserver la topologie et garantir la validité.

[Note]

Cette fonction ne préserve pas les limites partagées entre les polygones. Utilisez ST_CoverageSimplify si cela est nécessaire.

Disponibilité : 1.2.2

Exemples

Un cercle trop simplifié devient un triangle, moyennement un octogone,

SELECT ST_Npoints(geom) AS np_before,
       ST_NPoints(ST_Simplify(geom, 0.1)) AS np01_notbadcircle,
       ST_NPoints(ST_Simplify(geom, 0.5)) AS np05_notquitecircle,
       ST_NPoints(ST_Simplify(geom, 1)) AS np1_octagon,
       ST_NPoints(ST_Simplify(geom, 10)) AS np10_triangle,
       (ST_Simplify(geom, 100) is null) AS  np100_geometrygoesaway
  FROM (SELECT ST_Buffer('POINT(1 3)', 10,12) As geom) AS t;

 np_before | np01_notbadcircle | np05_notquitecircle | np1_octagon | np10_triangle | np100_geometrygoesaway
-----------+-------------------+---------------------+-------------+---------------+------------------------
        49 |                33 |                  17 |           9 |             4 | t

Simplification d'un ensemble de lignes. Les lignes peuvent s'intersecter après simplification.

SELECT ST_Simplify(
  'MULTILINESTRING ((20 180, 20 150, 50 150, 50 100, 110 150, 150 140, 170 120), (20 10, 80 30, 90 120), (90 120, 130 130), (130 130, 130 70, 160 40, 180 60, 180 90, 140 80), (50 40, 70 40, 80 70, 70 60, 60 60, 50 50, 50 40))',
    40);

Simplification d'un polygone multiple. Les résultats polygonaux peuvent être invalides.

SELECT ST_Simplify(
  'MULTIPOLYGON (((90 110, 80 180, 50 160, 10 170, 10 140, 20 110, 90 110)), ((40 80, 100 100, 120 160, 170 180, 190 70, 140 10, 110 40, 60 40, 40 80), (180 70, 170 110, 142.5 128.5, 128.5 77.5, 90 60, 180 70)))',
    40);