All Products
Search
Document Center

ApsaraDB RDS:ST_Angle

Last Updated:Mar 28, 2026

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

ParameterTypeDefaultDescription
trajtrajectoryObjek trajectory.
hasdirectionbooleanfalseMenentukan 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.