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