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

ApsaraDB RDS:ST_Angle

最終更新日:Mar 28, 2026

軌道の各中間点における旋回角度を計算し、結果を倍精度浮動小数点数の配列で返します。

構文

double precision[] ST_Angle(trajectory traj, boolean hasdirection DEFAULT false);

パラメーター

パラメーターデフォルト値説明
trajtrajectory軌道オブジェクトです。
hasdirectionbooleanfalse旋回方向を考慮するかどうかを指定します。true に設定すると、反時計回りの旋回に対して負の値が返されます。

説明

n 個のポイントからなる軌道について、ST_Angle は先頭および末尾のポイントを除いた n − 2 個の中間ポイントそれぞれにおける旋回角度を計算します。

各中間ポイントにおける戻り値は、以下の規則に従います:

  • 0 — そのポイントで軌道が直線的に進んでいる場合。

  • NaN — そのポイントで軌道が同一位置に留まっている場合(変位がゼロ)。

hasdirectionfalse(デフォルト)の場合、旋回方向に関わらずすべての角度が正の値として返されます。hasdirectiontrue の場合、反時計回りの旋回に対して負の角度が返されます。

使用例

以下の例では、いずれも同じ 9 ポイントの軌道を使用しています。この軌道には 7 個の中間ポイントがあるため、両方のクエリは 7 個の値からなる配列を返します。

例 1:方向を考慮しない(デフォルト)

SELECT ST_Angle(
  ST_MakeTrajectory(
    'STPOINT'::leaftype,
    'LINESTRING(0 0, 0 10, 10 10, 20 10, 30 0, 30 0, 20 10, 0 10, 0 0)',
    '2000-01-01',
    '2000-01-01'::timestamp + '1 day'::interval
      * (ST_NPoints('LINESTRING(0 0, 0 10, 10 10, 20 10, 30 0, 30 0, 20 10, 0 10, 0 0)') - 1),
    '{}'
  )
);

実行結果:

      st_angle
-------------------------
 {90,0,45,NaN,NaN,45,90}

例 2:方向を考慮する

SELECT ST_Angle(
  ST_MakeTrajectory(
    'STPOINT'::leaftype,
    'LINESTRING(0 0, 0 10, 10 10, 20 10, 30 0, 30 0, 20 10, 0 10, 0 0)',
    '2000-01-01',
    '2000-01-01'::timestamp + '1 day'::interval
      * (ST_NPoints('LINESTRING(0 0, 0 10, 10 10, 20 10, 30 0, 30 0, 20 10, 0 10, 0 0)') - 1),
    '{}'
  ),
  true
);

実行結果:

       st_angle
---------------------------
 {90,0,45,NaN,NaN,-45,-90}

最後の 2 つの値が 45, 90 から -45, -90 に変化したのは、これらのポイントで軌道が反時計回りに旋回しているためです。