类别:

地理空间函数

ST_SIMPLIFY

给定一个表示直线或多边形的 GEOGRAPHYGEOMETRY 输入对象,返回该对象的简化近似对象。该函数会识别并移除选中的顶点,从而生成一个顶点数量更少的类似对象。

例如,如果输入对象是具有 50 个顶点的多边形,则 ST_SIMPLIFY 可以返回只有其中 20 个顶点的更简单的多边形。

在简化对象时,仅当某个顶点与因移除该顶点而产生的边之间的距离在指定的容差范围内,函数才会移除该顶点。

语法

ST_SIMPLIFY( <geography_expression>, <tolerance> [ , <preserve_collapsed> ] )
ST_SIMPLIFY( <geometry_expression>, <tolerance> )
Copy

实参

必填:

geography_expression . OR . geometry_expression

要简化的 GEOGRAPHY 或 GEOMETRY 对象。

根据 GEOMETRY 或 GEOGRAPHY 对象的类型,ST_SIMPLIFY 具有以下作用:

对象类型

ST_SIMPLIFY 的作用

LineString、MultiLineString、多边形或 MultiPolygon

ST_SIMPLIFY 应用简化算法

点或 MultiPoint

ST_SIMPLIFY 没有任何作用。

GeometryCollection 或 FeatureCollection

对于 GEOGRAPHY 对象,ST_SIMPLIFY 将简化算法应用于集合中的每个对象。. . 对于 GEOMETRY 对象,ST_SIMPLIFY 不支持这些类型。

tolerance

某顶点与因移除该顶点而产生的边之间的最大距离(以米为单位)。如果距离超过某顶点的此容差范围,则 ST_SIMPLIFY 将该顶点保留在简化对象中。

可选:

preserve_collapsed

(仅适用于 GEOGRAPHY 对象)如果 TRUE,则保留在给定公差的情况下太小的对象。

例如,当 preserve_collapsedFALSEtolerance10 (米)时,1 米长的线在简化对象中会缩小为一个点。当 preserve_collapsedTRUE 时,该线会保留在简化对象中。

默认:FALSE

返回

该函数返回类型 GEOGRAPHY 或 GEOMETRY 的值。

示例

GEOGRAPHY 示例

本部分中的示例使用 WKT 格式显示输出:

alter session set GEOGRAPHY_OUTPUT_FORMAT='WKT';
Copy

以下示例会返回一个简化的 LineString,其所含顶点少于原来的 LineString。在简化对象中,如果某个顶点与替换该顶点的边之间的距离小于 1000 米,则忽略该顶点。

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

GEOMETRY 示例

本部分中的示例使用 WKT 格式显示输出:

ALTER SESSION SET GEOMETRY_OUTPUT_FORMAT='WKT';
Copy

以下示例会返回一个简化的 LineString,其所含顶点少于原来的 LineString。在简化对象中,如果某个顶点与替换该顶点的边之间的距离小于 500 米,则忽略该顶点。

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

以下示例将具有 36 个初始顶点的椭圆简化为具有 16 或 10 个顶点的形状,具体取决于 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 |
+------------------+-------------------------+------------------------+
Copy
语言: 中文