All Products
Search
Document Center

ApsaraDB RDS:ST_StayPoint

Last Updated:Mar 30, 2026

ST_StayPoint mendeteksi semua stay point dalam sebuah trajectory—lokasi di mana objek bergerak tetap berada dalam radius spasial tertentu selama durasi minimum.

Tersedia dua varian:

FunctionUse when
ST_StayPointMengembalikan setiap stay point beserta waktu mulai dan akhirnya. Gunakan varian terklaster jika trajectory berisi beberapa perjalanan pulang-pergi ke area yang sama.
ST_stayPointSpatialClusteredTrajectory berisi beberapa perjalanan pulang-pergi ke area yang sama. Menggabungkan stay point yang tumpang tindih secara spasial dan mengembalikan durasi total di setiap lokasi.

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

ParameterDescription
trajObjek trajectory.
resample_intInterval resampling. Resampling meratakan jarak antar titik pengambilan sampel sepanjang trajectory. Interval yang lebih pendek menghasilkan deteksi stay point yang lebih akurat tetapi meningkatkan waktu komputasi. Untuk melewati resampling, atur nilai ini menjadi nilai besar seperti '100000 day'. Untuk detail selengkapnya, lihat ST_Resample.
drAmbang batas radius spasial. Titik pengambilan sampel dianggap "di sekitar" kandidat stay point jika berada dalam jarak ini. Satuan tergantung pada Spatial Reference Identifier (SRID) dari trajectory: SRID 0 menggunakan satuan Jarak Euclidean; SRID 4326 menggunakan meter.
dtAmbang batas jendela waktu. Titik pengambilan sampel dianggap "di sekitar" kandidat stay point jika selisih waktunya berada dalam interval ini. Atur nilai ini sedikit lebih panjang dari durasi stay tunggal yang diharapkan.
thresJumlah minimum titik pengambilan sampel yang harus "di sekitar" titik kandidat agar memenuhi syarat sebagai stay point. Titik pengambilan sampel dianggap "di sekitar" kandidat jika jaraknya kurang dari dr dan selisih waktunya kurang dari dt. Ketika beberapa titik berurutan memenuhi syarat, titik yang dikelilingi oleh paling banyak titik pengambilan sampel dipilih sebagai stay point akhir.
merger(ST_stayPointSpatialClustered saja) Ambang batas jarak penggabungan. Dua stay point yang terdeteksi pada waktu berbeda digabung menjadi satu jika jarak antara keduanya kurang dari nilai ini.

Nilai kembalian

ST_StayPoint mengembalikan sekumpulan nilai trstaypoint. Tipe komposit trstaypoint memiliki kolom-kolom berikut:

ColumnTypeDescription
pointgeometryPosisi stay point.
startttimestampWaktu saat stay dimulai, berdasarkan titik pengambilan sampel pertama yang diidentifikasi sebagai bagian dari stay.
endttimestampWaktu saat stay berakhir, berdasarkan titik pengambilan sampel terakhir yang diidentifikasi sebagai bagian dari stay.

ST_stayPointSpatialClustered mengembalikan tabel dengan kolom-kolom berikut:

ColumnTypeDescription
pointgeometryPosisi kluster stay yang telah digabung.
lengthintervalDurasi total dari semua stay yang digabung ke dalam kluster ini.

Deskripsi

Sebuah titik dalam trajectory memenuhi syarat sebagai stay point jika terdapat minimal thres titik pengambilan sampel yang berada dalam jarak dr dan rentang waktu dt dari titik tersebut.

Menghitung `thres`: Bagi durasi stay minimum dengan interval resampling, lalu tambahkan 1. Sebagai contoh, untuk mendeteksi stay selama 30 menit atau lebih dengan interval resampling 5 menit:

thres = (30 min / 5 min) + 1 = 7

Dengan parameter tersebut, atur dr menjadi 250 m dan dt menjadi 40 menit (sedikit lebih panjang dari durasi minimum stay 30 menit). Contoh ini mendeteksi stay dalam zona berdiameter 500 m.

Jika sebuah trajectory mencakup beberapa perjalanan pulang-pergi ke area yang sama, gunakan ST_stayPointSpatialClustered untuk mengagregasi stay point yang berdekatan secara spasial. Fungsi ini mengembalikan jumlah total lokasi stay (dalam bentuk jumlah baris) serta durasi total stay di setiap lokasi.

Stay point umumnya berkorespondensi dengan lokasi bermakna—seperti tempat parkir, pompa bensin, atau situs yang sering dikunjungi—di mana objek bergerak berhenti atau berlama-lama.

Contoh

Detect stay points in a single-pass trajectory

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;

Kueri ini mengembalikan empat stay point beserta posisinya (dalam format WKT yang dapat dibaca manusia melalui ST_AsText) dan rentang waktunya:

 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
Kolom point menyimpan koordinat dalam format biner WKB. Gunakan ST_AsText() untuk mengonversinya ke koordinat WKT yang dapat dibaca manusia, seperti yang ditunjukkan dalam kueri di atas.

Aggregate stay points across multiple round trips

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;

Trajectory yang sama menghasilkan dua kluster stay yang telah digabung ketika menggunakan ST_stayPointSpatialClustered dengan jarak penggabungan sebesar 3 (parameter terakhir):

 st_astext          | point                                      | length
--------------------+--------------------------------------------+--------
 POINT(10.25 10.25) | 010100000000000000008024400000000000802440 | 6 days
 POINT(2 2)         | 010100000000000000000000400000000000000040 | 5 days

Empat stay point individual dari contoh sebelumnya dikonsolidasikan menjadi dua kluster berdasarkan kedekatan spasialnya. Kolom length menunjukkan durasi total yang terakumulasi di setiap lokasi.