全部产品
Search
文档中心

ApsaraDB RDS:ST_StayPoint

更新时间:Jul 02, 2025

Topik ini menjelaskan fungsi ST_StayPoint, yang mengembalikan semua titik tinggal dari sebuah trajektori. Titik tinggal adalah titik di mana objek dalam trajektori berada selama jangka waktu tertentu.

Sintaksis

SETOF trstaypoint ST_StayPoint(trajectory traj, interval resample_int, float dr, interval dt, float thres);
TABLE(point geometry, length interval) ST_stayPointSpatialClustered(trajectory traj, interval resample_int, float dr, interval dt, float thres, float merger)

Parameter

Parameter

Deskripsi

traj

Objek trajektori.

resample_int

Interval di mana trajektori di-resampling. Resampling membuat titik-titik sampling pada trajektori lebih merata. Interval yang lebih pendek menunjukkan titik tinggal yang lebih akurat tetapi membutuhkan waktu perhitungan yang lebih lama. Jika resampling tidak diperlukan, Anda dapat menetapkan parameter ini ke nilai besar, seperti '100000 hari'. Untuk informasi lebih lanjut, lihat ST_Resample.

dr

Toleransi yang diizinkan untuk jarak antara titik-titik trajektori. Toleransi spasial dihitung berdasarkan unit yang digunakan untuk pengenal referensi spasial (SRID) dari trajektori. Sebagai contoh, jika SRID trajektori adalah 0, toleransi spasial dihitung berdasarkan Jarak Euclidean dari titik-titik trajektori. Jika SRID trajektori adalah 4326, toleransi spasial diukur dalam satuan meter.

dt

Toleransi yang diizinkan untuk selisih waktu antara titik-titik trajektori. Tentukan periode waktu yang sedikit lebih lama daripada periode waktu dari satu kali tinggal.

thres

Jika jumlah titik trajektori sampel di sekitar suatu titik melebihi nilai parameter thres, titik tersebut dianggap sebagai titik tinggal. Jika jarak spasial antara titik trajektori sampel dan titik tersebut kurang dari nilai parameter dr dan selisih waktu di antara keduanya kurang dari nilai parameter dt, titik trajektori sampel dianggap berada di sekitar titik tersebut. Jika beberapa titik berturut-turut diidentifikasi sebagai titik tinggal, titik yang dikelilingi oleh paling banyak titik sampel adalah titik tinggal terakhir.

merger

Jika jarak antara dua titik tinggal yang berada pada waktu yang berbeda kurang dari nilai parameter merger, kedua titik tinggal tersebut digabungkan menjadi satu.

Nilai kembaliannya bertipe trstaypoint, yaitu tipe majemuk yang terdiri dari kolom-kolom berikut:

Kolom

Tipe

Deskripsi

point

geometry

Posisi titik tinggal.

startt

timestamp

Waktu ketika tinggal dimulai. Nilainya dihitung berdasarkan titik pertama yang diidentifikasi sebagai titik tinggal.

endt

timestamp

Waktu ketika tinggal berakhir. Nilainya dihitung berdasarkan titik terakhir yang diidentifikasi sebagai titik tinggal.

Deskripsi

Fungsi ini mengidentifikasi titik tinggal dari sebuah trajektori. Sebagai contoh, jika Anda mendefinisikan suatu titik tinggal dalam rentang 500 meter selama lebih dari 30 menit sebagai titik tinggal, Anda dapat menetapkan resample_int ke 5 menit, dr ke 250 meter, dt ke 40 menit, dan thres ke 7. Nilai thres dihitung dengan membagi 30 oleh 5 dan menambahkan 1.

Jika sebuah trajektori memiliki beberapa garis perjalanan bolak-balik, Anda dapat menggunakan fungsi ST_stayPointSpatialClustered untuk menggabungkan titik tinggal yang serupa secara spasial dan mendapatkan jumlah total titik tinggal serta total periode waktu tinggal. Titik tinggal mungkin menunjukkan tempat-tempat di mana objek bergerak sering berada, seperti stasiun pengisian bahan bakar dan tempat parkir.

Contoh

SELECT ST_AsText((ST_StayPoint(traj, '12 hour', 3, '3 day', 3)).point),(ST_StayPoint(traj, '12 hour', 3, '3 day', 3)).*
FROM (SELECT ST_MakeTrajectory('STPOINT'::leaftype,'LINESTRING(1 1, 2 2, 3 3, 10 10, 11 11, 12 12, 13 13, 3 3, 2 2, 2 2, 3 3, 8 8,10 10,9 9,8 8)', '2000-01-01', '2000-01-01'::timestamp+ '1 day'::interval* (ST_NPoints('LINESTRING(1 1, 2 2, 3 3, 10 10, 11 11, 12 12, 13 13, 3 3, 2 2, 2 2, 3 3, 8 8,10 10,9 9,8 8)')-1), '{}') AS traj) tj;
 st_astext      | point                                      |   startt            | endt 
----------------+--------------------------------------------+---------------------+---------------------
 POINT(1 1)     | 0101000000000000000000F03F000000000000F03F | 2000-01-01 00:00:00 | 2000-01-03 00:00:00
 POINT(11 11)   | 010100000000000000000026400000000000002640 | 2000-01-04 00:00:00 | 2000-01-07 00:00:00
 POINT(3 3)     | 010100000000000000000008400000000000000840 | 2000-01-08 00:00:00 | 2000-01-11 00:00:00
 POINT(9.5 9.5) | 010100000000000000000023400000000000002340 | 2000-01-12 00:00:00 | 2000-01-15 00:00:00
 

SELECT ST_AsText((ST_stayPointSpatialClustered(traj, '12 hour', 3, '3 day', 3, 3)).point), (ST_stayPointSpatialClustered(traj, '12 hour', 3, '3 day', 3, 3)).*
FROM (SELECT ST_MakeTrajectory('STPOINT'::leaftype,'LINESTRING(1 1, 2 2, 3 3, 10 10, 11 11, 12 12, 13 13, 3 3, 2 2, 2 2, 3 3, 8 8,10 10,9 9,8 8)', '2000-01-01', '2000-01-01'::timestamp+ '1 day'::interval* (ST_NPoints('LINESTRING(1 1, 2 2, 3 3, 10 10, 11 11, 12 12, 13 13, 3 3, 2 2, 2 2, 3 3, 8 8,10 10,9 9,8 8)')-1), '{}') AS traj) tj;
 st_astext          | point                                      | length 
--------------------+--------------------------------------------+--------
 POINT(10.25 10.25) | 010100000000000000008024400000000000802440 | 6 days
 POINT(2 2)         | 010100000000000000000000400000000000000040 | 5 days