Name

ST_SimplifyPolygonHull — 计算多边形几何的简化的保留拓扑的外部或内部外壳。

Synopsis

geometry ST_SimplifyPolygonHull(geometry param_geom, float vertex_fraction, boolean is_outer = true);

描述

计算多边形几何的简化的保留拓扑的外部或内部外壳。 外壳完全覆盖输入几何体。 内部外壳完全被输入几何体覆盖。 结果是由输入顶点的子集形成的多边形几何体。 处理多重多边形和孔并产生与输入结构相同的结果。

顶点数的减少由 vertex_fraction 参数控制,该参数是 0 到 1 范围内的数字。值越低,结果越简单,顶点数越少,凹度也越小。 对于外壳和内壳,顶点分数 1.0 生成原始几何形状。 对于外壳,值 0.0 生成凸包(对于单个多边形); 对于内壳,它会生成一个三角形。

简化过程通过逐步删除包含最少面积的凹角来进行,直到达到顶点数目标。 它可以防止边交叉,因此结果始终是有效的多边形几何体。

为了获得包含相对较长线段的几何图形的更好结果,可能需要“分段”输入,如下所示。

这个函数是由 GEOS 模块执行的。

可用性:3.3.0。

需要GEOS >= 3.11.0。

示例

多边形的外壳

SELECT ST_SimplifyPolygonHull(
  'POLYGON ((131 158, 136 163, 161 165, 173 156, 179 148, 169 140, 186 144, 190 137, 185 131, 174 128, 174 124, 166 119, 158 121, 158 115, 165 107, 161 97, 166 88, 166 79, 158 57, 145 57, 112 53, 111 47, 93 43, 90 48, 88 40, 80 39, 68 32, 51 33, 40 31, 39 34, 49 38, 34 38, 25 34, 28 39, 36 40, 44 46, 24 41, 17 41, 14 46, 19 50, 33 54, 21 55, 13 52, 11 57, 22 60, 34 59, 41 68, 75 72, 62 77, 56 70, 46 72, 31 69, 46 76, 52 82, 47 84, 56 90, 66 90, 64 94, 56 91, 33 97, 36 100, 23 100, 22 107, 29 106, 31 112, 46 116, 36 118, 28 131, 53 132, 59 127, 62 131, 76 130, 80 135, 89 137, 87 143, 73 145, 80 150, 88 150, 85 157, 99 162, 116 158, 115 165, 123 165, 122 170, 134 164, 131 158))',
    0.3);

多边形的内壳

SELECT ST_SimplifyPolygonHull(
  'POLYGON ((131 158, 136 163, 161 165, 173 156, 179 148, 169 140, 186 144, 190 137, 185 131, 174 128, 174 124, 166 119, 158 121, 158 115, 165 107, 161 97, 166 88, 166 79, 158 57, 145 57, 112 53, 111 47, 93 43, 90 48, 88 40, 80 39, 68 32, 51 33, 40 31, 39 34, 49 38, 34 38, 25 34, 28 39, 36 40, 44 46, 24 41, 17 41, 14 46, 19 50, 33 54, 21 55, 13 52, 11 57, 22 60, 34 59, 41 68, 75 72, 62 77, 56 70, 46 72, 31 69, 46 76, 52 82, 47 84, 56 90, 66 90, 64 94, 56 91, 33 97, 36 100, 23 100, 22 107, 29 106, 31 112, 46 116, 36 118, 28 131, 53 132, 59 127, 62 131, 76 130, 80 135, 89 137, 87 143, 73 145, 80 150, 88 150, 85 157, 99 162, 116 158, 115 165, 123 165, 122 170, 134 164, 131 158))',
    0.3, false);

多多边形 的外壳简化,具有分段功能

SELECT ST_SimplifyPolygonHull(
  ST_Segmentize(ST_Letters('xt'), 2.0),
    0.1);