Name

ST_CatmullRomSmoothing — Catmull-Romスプライン曲線を用いて平滑化されたジオメトリーを返します。

Synopsis

geometry ST_CatmullRomSmoothing(geometry geom, integer nSegments = 5);

説明

Catmull-Romスプラインアルゴリズムを用いた、ラインまたはポリゴンジオメトリーの平滑化を行います。ST_ChaikinSmoothingと違い、これは補間 スプラインで、出力曲線は元の頂点の全てを通ります。連続する頂点の間にはnSegments - 1個の補間ポイントが挿入されます。

nSegmentsパラメーターで出力の密度を制御します。nSegments = 5 (デフォルト)では、スパンごとに5個の辺に分かれます (スパンごとに4個のポイントが新設されます)。最小値は2です。

平滑化には少なくとも4個の頂点が必要です。頂点数が少ないジオメトリーが与えられると変更せずに返します。ポイントとマルチポイントが与えられると、常に変更せずに返します。

[Note]

出力曲線の頂点数は、閉じていないラインストリングの場合は1 + (N-1) * nSegmentsで、閉じてリングになっている場合には 1 + N * nSegmentsです。ここでNは入力頂点数です。大きなジオメトリの場合には、ポイント数を減らすために結果に対して単純化を施します (ST_Simplify, ST_SimplifyPreserveTopology, ST_SimplifyVWを参照して下さい)。

結果には、Z値とM値が存在する場合には、これらの補間値が入ります。

この関数は3次元に対応し、Z値を削除しません。

Availability: 3.6.0

4点が共線であるラインストリングの平滑化 (nSegments=5):

SELECT ST_AsText(ST_CatmullRomSmoothing('LINESTRING(0 0, 5 0, 10 0, 15 0)'));

 LINESTRING(0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,10 0,11 0,12 0,13 0,14 0,15 0)

ポリゴンの平滑化 (nSegments = 5 と 10):

nSegments = 5

nSegments = 10

SELECT ST_CatmullRomSmoothing('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(5, 10, 5) );

ラインストリングの平滑化 (nSegments = 5 と 10):

nSegments = 5

nSegments = 10

SELECT ST_CatmullRomSmoothing('LINESTRING (10 140, 80 130, 100 190, 190 150, 140 20, 120 120, 50 30, 30 100)',
            generate_series(5, 10, 5) );