ST_SIMPLIFY
📄字数 1.3K
👁️阅读量 加载中...
功能描述
使用Douglas-Peucker算法计算几何图形的简化表示。
语法格式
sql
GEOMETRY ST_SIMPLIFY(GEOMETRY geom, DOUBLE tolerance);
GEOMETRY ST_SIMPLIFY(GEOMETRY geom, DOUBLE tolerance, BOOLEAN preserveCollapsed);参数说明
- geom:目标 GEOMETRY 对象。
- tolerance:容差距离。一个距离值,以输入SRS的单位为准。
- preserveCollapsed:是否保留过小的几何图形。例如,如果将一个1米长的线条使用10米的公差进行简化,当
preserveCollapsed = TRUE时,该线条将不会消失。这个标志对于渲染目的很有用,以防止地图上非常小的特征消失。
函数返回类型
GEOMETRY 类型
使用说明
- 简化会移除在简化线条的公差距离内的顶点。即使输入是有效的,结果可能不是有效的。
- 该函数可用于任何类型的几何图形(包括GeometryCollections),但只有线和多边形元素会被简化。
- 线性几何的端点将被保留。
- 返回的几何图形可能会失去其简单性(参见ST_IsSimple),拓扑可能不会被保留,并且多边形结果可能是无效的(参见ST_IsValid)。
- 使用 ST_SimplifyPreserveTopology 来保留拓扑并确保有效性。
- 该函数不保留多边形之间共享的边界。如果需要保留共享边界,请使用ST_CoverageSimplify。
示例
一个经过简化后变成三角形或八角形的圆:
sql
SQL> 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) 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 | <NULL> |
+-----------+-------------------+---------------------+-------------+---------------+------------------------+
(1 row)简化一组线。简化后,线可能会相交。
sql
SQL> SELECT ST_AsText(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));
+-----------------------------------------------------------------------------------------------------------------------------+
| EXPR1 |
+-----------------------------------------------------------------------------------------------------------------------------+
| MULTILINESTRING((20 180,50 100,170 120),(20 10,90 120),(90 120,130 130),(130 130,160 40,180 90,140 80),(50 40,80 70,50 40)) |
+-----------------------------------------------------------------------------------------------------------------------------+
(1 row)