ST_ChaikinSmoothing — 使用 Chaikin 算法返回几何图形的平滑版本
geometry ST_ChaikinSmoothing(
geometry geom, integer nIterations = 1, boolean preserveEndPoints = false)
;
使用 Chaikin 算法平滑线性或多边形几何体。 平滑程度由 nIterations
参数控制。 在每次迭代中,每个内部顶点都被位于顶点前后线段长度 1/4 处的两个顶点替换。 3次迭代提供了合理的平滑度; 最大限制为 5。
如果preserveEndPoints
为true,则多边形环的端点不会被平滑。 LineStrings 的端点始终被保留。
每次迭代顶点数量都会加倍,因此结果几何图形的点可能比输入多得多。 要减少点数,请对结果使用简化函数(请参阅 ST_Simplify、ST_SimplifyPreserveTopology 和 ST_SimplifyVW)。 |
结果具有 Z 和 M 维度(如果存在)的插值。
该函数支持 3d 并且不会丢失 z-index。
可用性:2.5.0
平滑triangle(三角形):
SELECT ST_AsText(ST_ChaikinSmoothing(geom)) smoothed FROM (SELECT 'POLYGON((0 0, 8 8, 0 16, 0 0))'::geometry geom) AS foo; smoothed ─────────────────────────────────────────── POLYGON((2 2,6 6,6 10,2 14,0 12,0 4,2 2))
使用 1、2 和 3 次迭代平滑Polygon:
|
|
|
SELECT ST_ChaikinSmoothing( 'POLYGON ((20 20, 60 90, 10 150, 100 190, 190 160, 130 120, 190 50, 140 70, 120 10, 90 60, 20 20))', generate_series(1, 3) );
使用 1、2 和 3 次迭代平滑 LineString:
|
|
|
SELECT ST_ChaikinSmoothing( 'LINESTRING (10 140, 80 130, 100 190, 190 150, 140 20, 120 120, 50 30, 30 100)', generate_series(1, 3) );