All Products
Search
Document Center

ApsaraDB RDS:ST_lcsSimilarity

Last Updated:Mar 29, 2026

Menghitung kemiripan antara dua objek trajectory menggunakan algoritma Longest Common Subsequence (LCSS) dan mengembalikan jumlah titik trajectory yang konsisten.

Sintaksis

integer ST_lcsSimilarity(trajectory traj1, trajectory traj2, float8 dist, distanceUnit unit default 'M');
integer ST_lcsSimilarity(trajectory traj1, trajectory traj2, float8 dist, interval lag, distanceUnit unit default 'M');

Tersedia dua overload: satu tanpa toleransi waktu (lag) dan satu dengan toleransi tersebut.

Parameter

ParameterTipeDeskripsi
traj1trajectoryObjek trajectory pertama.
traj2trajectoryObjek trajectory kedua.
distfloat8Toleransi jarak antara dua titik trajectory. Satuan: meter.
lagintervalToleransi waktu antara dua titik trajectory.
unitdistanceUnitSatuan untuk dist. Nilai default: 'M'. Nilai yang valid: 'M' (meter), 'KM' (kilometer), 'D' (derajat).
Nilai 'D' untuk parameter unit hanya berlaku ketika Spatial Reference System Identifier (SRID) objek trajectory adalah WGS 84 (kode EPSG 4326). SRID default adalah 4326 jika tidak ditentukan.

Algoritma

Algoritma LCSS menentukan kemiripan maksimum antara dua objek trajectory dengan mengidentifikasi titik-titik trajectory yang konsisten dalam ruang dan waktu. Dua titik dianggap konsisten jika jarak spasial di antara keduanya berada dalam batas dist, dan—jika parameter lag ditentukan—selisih waktunya tidak melebihi batas lag.

Fungsi ini mengembalikan jumlah titik trajectory yang konsisten, bukan skor kemiripan yang ternormalisasi.

Similarity calculation algorithm

Pada gambar di atas, titik trajectory 1, 3, dan 6 memenuhi kondisi konsistensi, sehingga fungsi mengembalikan 3.

Contoh

Contoh 1: Hanya toleransi jarak

Contoh ini menggunakan toleransi jarak sebesar 100 meter tanpa batasan waktu.

With traj AS (
    Select ST_makeTrajectory('STPOINT', 'LINESTRINGZ(114.000528 33.588163 54.87, 114.000535 33.588235 54.85, 114.000447 33.588272 54.69, 114.000348 33.588287 54.73, 114.000245 33.588305 55.26, 114.000153 33.588305 55.3)'::geometry,
                             ARRAY['2010-01-01 11:30'::timestamp, '2010-01-01 11:31', '2010-01-01 11:32', '2010-01-01 11:33','2010-01-01 11:34','2010-01-01 11:35'], NULL) a,
           ST_makeTrajectory('STPOINT', 'LINESTRINGZ(114.000529 33.588163 54.87, 114.000535 33.578235 54.85, 114.000447 33.578272 54.69, 114.000348 33.578287 54.73, 114.000245 33.578305 55.26, 114.000163 33.588305 55.3)'::geometry,
                             ARRAY['2010-01-01 11:29:58'::timestamp, '2010-01-01 11:31:02', '2010-01-01 11:33', '2010-01-01 11:33:09','2010-01-01 11:34','2010-01-01 11:34:30'], NULL) b)
Select st_LCSSimilarity(a, b, 100) from traj;
-- 2

Contoh 2: Toleransi jarak dengan toleransi waktu

Contoh ini menambahkan toleransi waktu sebesar 30 detik. Titik-titik yang berjarak kurang dari 100 meter secara spasial tetapi terpisah lebih dari 30 detik tidak dihitung sebagai konsisten.

With traj AS (
    Select ST_makeTrajectory('STPOINT', 'LINESTRINGZ(114.000528 33.588163 54.87, 114.000535 33.588235 54.85, 114.000447 33.588272 54.69, 114.000348 33.588287 54.73, 114.000245 33.588305 55.26, 114.000153 33.588305 55.3)'::geometry,
                             ARRAY['2010-01-01 11:30'::timestamp, '2010-01-01 11:31', '2010-01-01 11:32', '2010-01-01 11:33','2010-01-01 11:34','2010-01-01 11:35'], NULL) a,
           ST_makeTrajectory('STPOINT', 'LINESTRINGZ(114.000529 33.588163 54.87, 114.000535 33.578235 54.85, 114.000447 33.578272 54.69, 114.000348 33.578287 54.73, 114.000245 33.578305 55.26, 114.000163 33.588305 55.3)'::geometry,
                             ARRAY['2010-01-01 11:29:58'::timestamp, '2010-01-01 11:31:02', '2010-01-01 11:33', '2010-01-01 11:34:15','2010-01-01 11:34:50','2010-01-01 11:34:30'], NULL) b)
Select st_LCSSimilarity(a, b, 100, interval '30 seconds') from traj;
-- 2

Lihat juga