全部产品
Search
文档中心

ApsaraDB RDS:ST_CurvatureRadius

更新时间:Jun 25, 2025

Topik ini menjelaskan fungsi ST_CurvatureRadius, yang menghitung radius rotasi lintasan di setiap titik perantara dan mengembalikan larik bilangan floating-point.

Sintaksis

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

Parameter

Parameter

Deskripsi

traj

Objek lintasan.

hasdirection

Menentukan apakah akan menghitung arah rotasi lintasan.

Jika arah rotasi lintasan dihitung, nilai negatif akan dikembalikan ketika lintasan berotasi dalam arah berlawanan jarum jam.

Deskripsi

Fungsi ini menghitung radius rotasi lintasan di setiap titik perantara. Jika lintasan memiliki n titik, jumlah titik perantara adalah n dikurangi 2. Apabila lintasan bergerak lurus atau tetap tidak berubah di titik perantara, radius rotasi menjadi tak terbatas. Semakin kecil radius rotasi, semakin tajam kurva lintasan tersebut.

Contoh

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), '{}'));
  st_curvatureradius   
-----------------------
 {5,Infinity,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), '{}'));
st_curvatureradius 
-----------
 {5,Infinity,Infinity,Infinity,Infinity,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);
 st_curvatureradius 
-----------
 {5,Infinity,Infinity,Infinity,Infinity,-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);
st_curvatureradius
-----------
 {5,Infinity,Infinity,Infinity,Infinity,-5,0,2.5}