Catégories :

Fonctions géospatiales

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> )
Copy

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 est FALSE et tolerance est 10 (mètres), une ligne de 1 m est réduite à un point dans l’objet simplifié. Lorsque preserve_collapsed est TRUE, 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';
Copy

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)                                             |
+----------------------------------------------------------------------------------------------------+
Copy

Exemples GEOMETRY

Les exemples de cette section affichent la sortie au format WKT :

ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='WKT';
Copy

The following example returns a simplified LineString that has fewer vertices than the original LineString. In the simplified object, a vertex is omitted if the distance between the vertex and the edge that replaces the vertex is less than 500 meters.

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)                                                |
+----------------------------------------------------------------------------------------------------+
Copy

The following example simplifies an ellipse that has 36 initial vertices to a shape with 16 or 10 vertices, depending on the tolerance argument:

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 |
+------------------+-------------------------+------------------------+
Copy