Name

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

Synopsis

geometry ST_SimplifyPreserveTopology(geometry geom, float tolerance);

Description

Calcule une représentation simplifiée d'une géométrie en utilisant une variante de l'algorithme Douglas-Peucker qui limite la simplification pour garantir que le résultat a la même topologie que l'entrée. Le paramètre de 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ée est inférieure à la distance de tolérance, tant que la topologie est préservée. Le résultat sera valide et simple si l'entrée est.

La fonction peut être appelée avec n'importe quel type de géométrie (y compris les GeometryCollections), mais seuls les éléments linéaires et polygonaux sont simplifiés. Pour les éléments polygonaux, le résultat aura le même nombre d'anneaux (coquilles et trous), et les anneaux ne se croiseront pas. Les extrémités des anneaux peuvent être simplifiées. Pour les entrées linéaires, le résultat aura le même nombre de lignes et les lignes ne se croiseront pas si elles ne le faisaient pas dans la géométrie d'origine. Les extrémités de la géométrie linéaire sont préservées.

[Note]

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

Effectué par le module GEOS.

Disponibilité : 1.3.3

Exemples

Pour le même exemple que ST_Simplify, ST_SimplifyPreserveTopology empêche toute simplification excessive. Le cercle peut au maximum devenir un carré.

SELECT  ST_Npoints(geom) AS np_before, 
        ST_NPoints(ST_SimplifyPreserveTopology(geom, 0.1)) AS np01_notbadcircle, 
        ST_NPoints(ST_SimplifyPreserveTopology(geom, 0.5)) AS np05_notquitecircle,
        ST_NPoints(ST_SimplifyPreserveTopology(geom, 1))   AS np1_octagon, 
        ST_NPoints(ST_SimplifyPreserveTopology(geom, 10))  AS np10_square,
        ST_NPoints(ST_SimplifyPreserveTopology(geom, 100)) AS np100_stillsquare
FROM (SELECT ST_Buffer('POINT(1 3)', 10,12) AS geom) AS t;

 np_before | np01_notbadcircle | np05_notquitecircle | np1_octagon | np10_square | np100_stillsquare
-----------+-------------------+---------------------+-------------+-------------+-------------------
        49 |                33 |                  17 |           9 |           5 |                 5

Simplification d'un ensemble de lignes, en préservant la topologie des lignes qui ne se croisent pas.

SELECT ST_SimplifyPreserveTopology(
  '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 multipolygone, en préservant la topologie des coquilles et des trous.

SELECT ST_SimplifyPreserveTopology(
  '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);