すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:ST_CurvatureRadius

最終更新日:Aug 22, 2026

トラジェクトリの各中間点における曲率半径を、倍精度浮動小数点値の配列として返します。

構文

double precision[] ST_CurvatureRadius(trajectory traj, boolean hasdirection default false);

パラメーター

パラメーター説明
trajトラジェクトリオブジェクト。
hasdirectiontruefalseトラジェクトリの回転方向を考慮するかどうかを指定します。 に設定すると、トラジェクトリが反時計回りに回転する場合に負の値が返されます。 デフォルト値は です。

説明

ST_CurvatureRadius は、軌跡の各中間点における曲率半径を算出します。n 個の点からなる軌跡には、n − 2 個の中間点 (最初と最後の点を除くすべての点) があります。

戻り値は、以下のルールに従います:

  • Infinity は、トラジェクトリがそのポイントで直線上を移動しているか、静止していることを示します。

  • 負の値:その地点で軌跡が反時計回りにカーブします (hasdirectiontrue の場合にのみ有効です)。

  • 小さい絶対値 は、より急なカーブを示します。

以下の例では、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 — ジオメトリ内の点の数を返します