- Catégories :
ST_SIMPLIFY¶
Si l’objet d’entrée GEOGRAPHY ou GEOMETRY représente une ligne ou un polygone, renvoie une approximation plus simple de l’objet. Cette fonction identifie et supprime les sommets sélectionnés, ce qui permet d’obtenir un objet similaire comportant moins de sommets.
Par exemple, si l’objet d’entrée est un polygone avec 50 sommets, ST_SIMPLIFY peut renvoyer un polygone plus simple avec uniquement 20 de ces sommets.
Lors de la simplification d’un objet, la fonction ne supprime un sommet que si la distance entre ce sommet et l’arête résultant de la suppression de ce sommet est dans la tolérance spécifiée.
Syntaxe¶
ST_SIMPLIFY( <geography_expression>, <tolerance> [ , <preserve_collapsed> ] )
ST_SIMPLIFY( <geometry_expression>, <tolerance> )
Arguments¶
Obligatoire :
geography_expression
. OR .geometry_expression
L’objet GEOGRAPHY ou GEOMETRY à simplifier.
Selon le type de l’objet GEOGRAPHY ou GEOMETRY, ST_SIMPLIFY a l’effet suivant :
Type d’objet
Effet de ST_SIMPLIFY
LineString, MultiLineString, polygone ou MultiPolygon
ST_SIMPLIFY applique l’algorithme de simplification
Point ou MultiPoint
ST_SIMPLIFY n’a aucun effet.
GeometryCollection ou FeatureCollection
Pour les objets GEOGRAPHY, ST_SIMPLIFY applique l’algorithme de simplification à chaque objet de la collection. . . Pour les objets GEOMETRY, ST_SIMPLIFY ne prend pas en charge ces types.
tolerance
Distance maximale en mètres entre un sommet et l’arête résultant de la suppression du sommet. Si la distance dépasse cette tolérance pour un sommet, ST_SIMPLIFY conserve ce sommet dans l’objet simplifié.
Facultatif :
preserve_collapsed
(Pour les objets GEOGRAPHY uniquement) Si
TRUE
, conserve les objets qui seraient autrement trop petits compte tenu de la tolérance.Par exemple, lorsque
preserve_collapsed
estFALSE
ettolerance
est10
(mètres), une ligne de 1 m est réduite à un point dans l’objet simplifié. Lorsquepreserve_collapsed
estTRUE
, la ligne est conservée dans l’objet simplifié.Par défaut :
FALSE
.
Renvoie¶
La fonction renvoie une valeur de type GEOGRAPHY ou GEOMETRY.
Exemples¶
Exemples GEOGRAPHY¶
Les exemples de cette section affichent la sortie au format WKT :
alter session set GEOGRAPHY_OUTPUT_FORMAT='WKT';
L’exemple suivant renvoie un LineString simplifié qui a moins de sommets que le LineString d’origine. Dans l’objet simplifié, un sommet est omis si la distance entre le sommet et l’arête qui remplace le sommet est inférieure à 1000 mètres.
SELECT ST_SIMPLIFY( TO_GEOGRAPHY('LINESTRING(-122.306067 37.55412, -122.32328 37.561801, -122.325879 37.586852)'), 1000); +----------------------------------------------------------------------------------------------------+ | ST_SIMPLIFY( | | TO_GEOGRAPHY('LINESTRING(-122.306067 37.55412, -122.32328 37.561801, -122.325879 37.586852)'), | | 1000) | |----------------------------------------------------------------------------------------------------| | LINESTRING(-122.306067 37.55412,-122.325879 37.586852) | +----------------------------------------------------------------------------------------------------+
Exemples GEOMETRY¶
Les exemples de cette section affichent la sortie au format WKT :
ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='WKT';
L’exemple suivant renvoie un LineString simplifié qui a moins de sommets que le LineString d’origine. Dans l’objet simplifié, un sommet est omis si la distance entre le sommet et l’arête qui remplace le sommet est inférieure à 500 mètres.
SELECT ST_SIMPIFY(
TO_GEOMETRY('LINESTRING(1100 1100, 2500 2100, 3100 3100, 4900 1100, 3100 1900)'),
500);
+----------------------------------------------------------------------------------------------------+
| ST_SIMPLIFY(TO_GEOMETRY('LINESTRING(1100 1100, 2500 2100, 3100 3100, 4900 1100, 3100 1900)'), 500) |
|----------------------------------------------------------------------------------------------------|
| LINESTRING(1100 1100,3100 3100,4900 1100,3100 1900) |
+----------------------------------------------------------------------------------------------------+
L’exemple suivant simplifie une ellipse qui a 36 sommets initiaux en une forme avec 16 ou 10 sommets, selon l’argument tolerance
:
SELECT ST_NUMPOINTS(geom) AS numpoints_before,
ST_NUMPOINTS(ST_Simplify(geom, 0.5)) AS numpoints_simplified_05,
ST_NUMPOINTS(ST_Simplify(geom, 1)) AS numpoints_simplified_1
FROM
(SELECT ST_BUFFER(to_geometry('LINESTRING(0 0, 1 1)'), 10) As geom);
+------------------+-------------------------+------------------------+
| NUMPOINTS_BEFORE | NUMPOINTS_SIMPLIFIED_05 | NUMPOINTS_SIMPLIFIED_1 |
|------------------+-------------------------+------------------------|
| 36 | 16 | 10 |
+------------------+-------------------------+------------------------+