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
| Parameter | Deskripsi |
|---|---|
traj | Objek trajectory. |
hasdirection | Menentukan 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
hasdirectionbernilaitrue).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 waktuST_NPoints— mengembalikan jumlah titik dalam geometri