All Products
Search
Document Center

ApsaraDB RDS:ST_CurvatureRadius

Last Updated:Mar 29, 2026

Mengembalikan jari-jari kelengkungan di setiap titik antara pada sebuah trajectory sebagai array nilai floating-point presisi ganda.

Sintaksis

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

Parameter

ParameterDeskripsi
trajObjek trajectory.
hasdirectionMenentukan apakah akan menghitung arah rotasi trajectory. Jika diatur ke true, nilai negatif dikembalikan ketika trajectory berotasi berlawanan arah jarum jam. Nilai default: false.

Deskripsi

ST_CurvatureRadius menghitung jari-jari kelengkungan di setiap titik antara pada sebuah trajectory. Untuk trajectory dengan *n* titik, terdapat *n* − 2 titik antara (semua titik kecuali titik pertama dan terakhir).

Nilai yang dikembalikan mengikuti aturan berikut:

  • `Infinity` — trajectory bergerak lurus atau diam di titik tersebut.

  • Nilai negatif — trajectory melengkung berlawanan arah jarum jam di titik tersebut (hanya berlaku jika hasdirection bernilai true).

  • Nilai absolut lebih kecil — lengkungan lebih tajam.

Contoh

Contoh berikut menggunakan ST_MakeTrajectory untuk membuat objek trajectory dari geometri LINESTRING.

Trajectory 5 titik (segmen lurus dan satu lengkungan)

-- Trajectory 5 titik menghasilkan 3 titik antara.
-- Titik antara pertama memiliki belokan 90 derajat dengan jari-jari 5;
-- dua titik lainnya berada pada garis lurus dan mengembalikan 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),
    '{}'
  )
);

Hasil:

  st_curvatureradius
-----------------------
 {5,Infinity,Infinity}

Trajectory 8 titik (dua lengkungan simetris, tanpa arah)

-- Trajectory 8 titik menghasilkan 6 titik antara.
-- Dua belokan memiliki jari-jari 5; segmen lurus dan diam mengembalikan 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),
    '{}'
  )
);

Hasil:

    st_curvatureradius
--------------------------
 {5,Infinity,Infinity,Infinity,Infinity,5}

Trajectory 8 titik (dua lengkungan, dengan arah)

-- Trajectory sama seperti di atas, tetapi dengan hasdirection=true.
-- Belokan terakhir berlawanan arah jarum jam, sehingga jari-jarinya dikembalikan sebagai -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
);

Hasil:

    st_curvatureradius
--------------------------
 {5,Infinity,Infinity,Infinity,Infinity,-5}

Trajectory 10 titik (multiple lengkungan, dengan arah)

-- Trajectory 10 titik menghasilkan 8 titik antara.
-- Hasil mencakup jari-jari 5, -5 (berlawanan arah jarum jam), 0 (pembalikan instan), dan 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
);

Hasil:

   st_curvatureradius
-----------------------
 {5,Infinity,Infinity,Infinity,Infinity,-5,0,2.5}

Lihat juga

  • ST_MakeTrajectory — membuat objek trajectory dari geometri dan rentang waktu

  • ST_NPoints — mengembalikan jumlah titik dalam geometri