Menghitung sudut rotasi di setiap titik antara suatu trajectory dan mengembalikan hasilnya sebagai array bilangan titik mengambang presisi ganda.
Sintaksis
double precision[] ST_Angle(trajectory traj, boolean hasdirection DEFAULT false);Parameter
| Parameter | Type | Default | Description |
|---|---|---|---|
traj | trajectory | — | Objek trajectory. |
hasdirection | boolean | false | Menentukan apakah arah rotasi diperhitungkan. Jika diatur ke true, rotasi berlawanan arah jarum jam menghasilkan nilai negatif. |
Deskripsi
Untuk trajectory dengan n titik, ST_Angle menghitung sudut rotasi di masing-masing dari n – 2 titik antara (tidak termasuk titik pertama dan terakhir).
Nilai kembali di setiap titik antara mengikuti aturan berikut:
0 — trajectory bergerak lurus di titik tersebut.
NaN — trajectory tetap berada di posisi yang sama di titik tersebut (perpindahan nol).
Ketika hasdirection bernilai false (nilai default), semua sudut dikembalikan sebagai nilai positif tanpa mempertimbangkan arah rotasi. Ketika hasdirection bernilai true, rotasi berlawanan arah jarum jam menghasilkan sudut negatif.
Contoh
Contoh berikut menggunakan trajectory sembilan titik yang sama. Trajectory tersebut memiliki tujuh titik antara, sehingga kedua kueri mengembalikan array berisi tujuh nilai.
Contoh 1: Tanpa arah (default)
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),
'{}'
)
);Hasil:
st_angle
-------------------------
{90,0,45,NaN,NaN,45,90}Contoh 2: Dengan arah
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
);Hasil:
st_angle
---------------------------
{90,0,45,NaN,NaN,-45,-90}Dua nilai terakhir berubah dari 45, 90 menjadi -45, -90 karena trajectory berbelok berlawanan arah jarum jam di titik-titik tersebut.