軌道の各中間点における旋回角度を計算し、結果を倍精度浮動小数点数の配列で返します。
構文
double precision[] ST_Angle(trajectory traj, boolean hasdirection DEFAULT false);パラメーター
| パラメーター | 型 | デフォルト値 | 説明 |
|---|---|---|---|
traj | trajectory | — | 軌道オブジェクトです。 |
hasdirection | boolean | false | 旋回方向を考慮するかどうかを指定します。true に設定すると、反時計回りの旋回に対して負の値が返されます。 |
説明
n 個のポイントからなる軌道について、ST_Angle は先頭および末尾のポイントを除いた n − 2 個の中間ポイントそれぞれにおける旋回角度を計算します。
各中間ポイントにおける戻り値は、以下の規則に従います:
0 — そのポイントで軌道が直線的に進んでいる場合。
NaN — そのポイントで軌道が同一位置に留まっている場合(変位がゼロ)。
hasdirection が false(デフォルト)の場合、旋回方向に関わらずすべての角度が正の値として返されます。hasdirection が true の場合、反時計回りの旋回に対して負の角度が返されます。
使用例
以下の例では、いずれも同じ 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 に変化したのは、これらのポイントで軌道が反時計回りに旋回しているためです。