ST_SIMPLIFYVW
📄字数 1.1K
👁️阅读量 加载中...
功能描述
使用 Visvalingam-Whyatt 算法返回几何图形的简化表示。
语法格式
sql
GEOMETRY ST_SIMPLIFYVW(GEOMETRY geom, DOUBLE tolerance);参数说明
- geom:目标 GEOMETRY 对象。
- tolerance:容差。一个面积值,以输入SRS的单位为准。
函数返回类型
GEOMETRY 类型
使用说明
- 简化会移除与面积小于公差的顶点。即使输入是有效的,结果可能也不是有效的。
- 该函数可用于任何类型的几何图形(包括GeometryCollections),但只有线和多边形元素会被简化。
- 线性几何的端点将被保留。
- 返回的几何图形可能会失去其简单性(参见ST_IsSimple),拓扑可能不会被保留,并且多边形结果可能是无效的(参见ST_IsValid)。
- 使用 ST_SimplifyPreserveTopology 来保留拓扑并确保有效性。
- 该函数不保留多边形之间共享的边界。如果需要保留共享边界,请使用 ST_CoverageSimplify。
- 该函数处理 3D,第三维将影响结果。
示例
使用最小面积公差为30,对 LineString 进行简化:
sql
SQL> SELECT ST_AsText(ST_SimplifyVW(geom,30)) simplified
FROM (SELECT 'LINESTRING(5 2, 3 8, 6 20, 7 25, 10 10)'::geometry AS geom) AS t;
+----------------------------+
| SIMPLIFIED |
+----------------------------+
| LINESTRING(5 2,7 25,10 10) |
+----------------------------+
(1 row)对一条线进行简化。
sql
SQL> SELECT ST_AsText(ST_SimplifyVW(
'LINESTRING (10 10, 50 40, 30 70, 50 60, 70 80, 50 110, 100 100, 90 140, 100 180, 150 170, 170 140, 190 90, 180 40, 110 40, 150 20)',
1600));
+---------------------------------------------------------+
| EXPR1 |
+---------------------------------------------------------+
| LINESTRING(10 10,100 100,100 180,150 170,190 90,150 20) |
+---------------------------------------------------------+
(1 row)对多边形进行简化。
sql
SQL> SELECT ST_AsText(ST_SimplifyVW(
'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));
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| EXPR1 |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 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))) |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
(1 row)