軌跡の各中間点における曲率半径を、倍精度浮動小数点値の配列として返します。
構文
double precision[] ST_CurvatureRadius(trajectory traj, boolean hasdirection default false);パラメーター
| パラメーター | 説明 |
|---|---|
traj | 軌跡オブジェクト。 |
hasdirection | 軌跡の回転方向を計算するかどうかを指定します。true に設定すると、軌跡が反時計回りに回転している場合に負の値が返されます。デフォルト:false。 |
説明
ST_CurvatureRadius は、軌跡の各中間点における曲率半径を計算します。*n* 個のポイントを持つ軌跡の場合、最初と最後のポイントを除いた *n* − 2 個の中間点があります。
戻り値は以下のルールに従います。
`Infinity` — 該当ポイントで軌跡が直線的に移動している、または静止している場合。
負の値 — 該当ポイントで軌跡が反時計回りにカーブしている場合(
hasdirectionがtrueの場合のみ意味を持ちます)。絶対値が小さいほど — より急なカーブを示します。
使用例
以下の例では、ST_MakeTrajectory を使用して、LINESTRING ジオメトリから軌跡オブジェクトを構築しています。
5 ポイントの軌跡(直線セグメントと 1 つのカーブ)
-- 5 ポイントの軌跡は、3 つの中間点を生成します。
-- 最初の中間ポイントは半径 5 で 90 度の旋回を行います。
-- 残りの 2 つは直線上にあり、Infinity を返します。
SELECT ST_CurvatureRadius(
ST_MakeTrajectory(
'STPOINT'::leaftype,
'LINESTRING(0 0, 0 8, 6 8, 12 8, 12 8)',
'2000-01-01',
'2000-01-01'::timestamp + '1 day'::interval * (ST_NPoints('LINESTRING(0 0, 0 8, 6 8, 12 8, 12 8)') - 1),
'{}'
)
);結果:
st_curvatureradius
-----------------------
{5,Infinity,Infinity}8 ポイントの軌跡(2 つの対称的なカーブ、方向なし)
-- 8 ポイントの軌跡は、6 つの中間点を生成します。
-- 2 つの旋回ポイントの半径は 5、直線および静止セグメントは Infinity を返します。
SELECT ST_CurvatureRadius(
ST_MakeTrajectory(
'STPOINT'::leaftype,
'LINESTRING(0 0, 0 8, 6 8, 12 8, 12 8, 6 8, 0 8, 0 0)',
'2000-01-01',
'2000-01-01'::timestamp + '1 day'::interval * (ST_NPoints('LINESTRING(0 0, 0 8, 6 8, 12 8, 12 8, 6 8, 0 8, 0 0)') - 1),
'{}'
)
);結果:
st_curvatureradius
--------------------------
{5,Infinity,Infinity,Infinity,Infinity,5}8 ポイントの軌跡(2 つのカーブ、方向あり)
-- 上記と同じ軌跡ですが、hasdirection=true を指定しています。
-- 最後の旋回は反時計回りのため、その半径は -5 として返されます。
SELECT ST_CurvatureRadius(
ST_MakeTrajectory(
'STPOINT'::leaftype,
'LINESTRING(0 0, 0 8, 6 8, 12 8, 12 8, 6 8, 0 8, 0 0)',
'2000-01-01',
'2000-01-01'::timestamp + '1 day'::interval * (ST_NPoints('LINESTRING(0 0, 0 8, 6 8, 12 8, 12 8, 6 8, 0 8, 0 0)') - 1),
'{}'
),
true
);結果:
st_curvatureradius
--------------------------
{5,Infinity,Infinity,Infinity,Infinity,-5}10 ポイントの軌跡(複数のカーブ、方向あり)
-- 10 ポイントの軌跡は、8 つの中間点を生成します。
-- 結果には半径 5、-5(反時計回り)、0(瞬間的な方向転換)、および 2.5 が含まれます。
SELECT ST_CurvatureRadius(
ST_MakeTrajectory(
'STPOINT'::leaftype,
'LINESTRING(0 0, 0 8, 6 8, 12 8, 12 8, 6 8, 0 8, 0 0, 0 4, 3 4)',
'2000-01-01',
'2000-01-01'::timestamp + '1 day'::interval * (ST_NPoints('LINESTRING(0 0, 0 8, 6 8, 12 8, 12 8, 6 8, 0 8, 0 0, 0 4, 3 4)') - 1),
'{}'
),
true
);結果:
st_curvatureradius
-----------------------
{5,Infinity,Infinity,Infinity,Infinity,-5,0,2.5}関連項目
ST_MakeTrajectory— ジオメトリと時間範囲から軌跡オブジェクトを構築しますST_NPoints— ジオメトリ内のポイント数を返します