All Products
Search
Document Center

ApsaraDB RDS:ST_JaccardSimilarity

Last Updated:Mar 28, 2026

Menghitung indeks Jaccard antara dua trajectory atau sub-trajectory, serta mengembalikan batas bawah dan batas atas skor kemiripan.

Sintaksis

record ST_JaccardSimilarity(trajectory tr1, trajectory tr2, double tol_dist,
                            text unit default '{}', interval tol_time default NULL,
                            timestamp ts default '-infinity', timestamp te default 'infinity');

Fungsi ini mengembalikan record dengan bidang-bidang berikut:

FieldTypeDescription
nleaf1intJumlah titik trajectory pada tr1 yang berpotongan dengan tr2.
nleaf2intJumlah titik trajectory pada tr2 yang berpotongan dengan tr1. Nilai ini dapat berbeda dari nleaf1. Misalnya, jika tr1 melewati titik yang sama pada tr2 sebanyak dua kali, nleaf1 bernilai 1 dan nleaf2 bernilai 2.
inter1intJumlah titik trajectory pada tr1 yang jaraknya ke tr2 memenuhi toleransi jarak dan waktu.
inter2intJumlah titik trajectory pada tr2 yang jaraknya ke tr1 memenuhi toleransi jarak dan waktu.
jaccard_lowerdoubleBatas bawah indeks Jaccard. Dihitung sebagai min(inter1, inter2) / (nleaf1 + nleaf2 - min(inter1, inter2)).
jaccard_upperdoubleBatas atas indeks Jaccard. Dihitung sebagai max(inter1, inter2) / (nleaf1 + nleaf2 - max(inter1, inter2)).

Parameter

ParameterTypeDefaultDescription
tr1trajectoryTrajectory pertama.
tr2trajectoryTrajectory kedua.
tol_distdoubleJarak maksimum yang diizinkan antara pasangan titik trajectory yang sesuai, dalam meter.
unittext'{}'String JSON yang mengontrol cara perhitungan jarak. Lihat bidang parameter unit.
tol_timeintervalNULLSelisih waktu maksimum yang diizinkan antara pasangan titik trajectory yang sesuai. Jika NULL atau negatif, fungsi mencocokkan titik hanya berdasarkan jarak, tanpa mempertimbangkan timestamp.
tstimestamp-infinityAwal rentang waktu. Jika ditentukan, fungsi hanya membandingkan sub-trajectory antara ts dan te.
tetimestampinfinityAkhir rentang waktu. Jika ditentukan, fungsi hanya membandingkan sub-trajectory antara ts dan te.

bidang parameter unit

FieldTypeDefaultDescription
ProjectionstringNoneSistem koordinat untuk mereproyeksi trajectory sebelum menghitung jarak. Nilai yang valid: auto (secara dinamis memilih Lambert Azimuthal atau UTM berdasarkan bujur dan lintang; satuan jarak adalah meter), srid (mereproyeksi menggunakan spatial reference identifier (SRID) yang ditentukan). Jika dihilangkan, perhitungan menggunakan sistem koordinat asli.
UnitstringnullSatuan pengukuran jarak. Nilai yang valid: null (jarak Euclidean berdasarkan koordinat mentah), M (jarak berdasarkan referensi spasial trajectory, biasanya dalam meter).
useSpheroidbooltrueMenentukan apakah akan menggunakan model ellipsoid ketika Unit bernilai M. true: menggunakan ellipsoid untuk jarak yang akurat. false: menggunakan bola untuk jarak perkiraan.

Cara kerja

Indeks Jaccard klasik untuk dua himpunan dihitung sebagai ukuran irisan dibagi ukuran gabungan. Untuk trajectory, konsep ini diperluas ke pencocokan spasial (dan opsional temporal): titik pada tr1 dianggap beririsan dengan tr2 jika terdapat titik pada tr2 dalam jarak tol_dist meter (dan, jika tol_time ditentukan, dalam jendela waktu yang ditetapkan).

Karena hubungan pencocokan tidak simetris—tr1 yang melewati dekat suatu titik pada tr2 satu kali dihitung berbeda dari tr2 yang melewati titik yang sama dua kali—fungsi ini mengembalikan dua batas alih-alih satu nilai tunggal:

  • `jaccard_lower` menggunakan jumlah irisan yang lebih kecil (min(inter1, inter2)), memberikan estimasi konservatif tumpang tindih. Gunakan nilai ini ketika diperlukan tingkat minimum kemiripan yang pasti.

  • `jaccard_upper` menggunakan jumlah irisan yang lebih besar (max(inter1, inter2)), memberikan estimasi optimistik tumpang tindih. Gunakan nilai ini untuk menangkap kecocokan paling luas antara kedua trajectory.

Kedua nilai tersebut berkisar dari 0 (tidak ada tumpang tindih) hingga 1 (tumpang tindih sempurna).

Contoh

Contoh berikut membandingkan dua trajectory dalam jendela waktu tiga hari, menggunakan toleransi jarak 100 meter dan toleransi waktu 20 detik.

WITH traj AS (
  SELECT
    ST_makeTrajectory('STPOINT'::leaftype,
      'SRID=4326;LINESTRING(114.49211 37.97921,114.49211 37.97921,114.49211 37.97921,114.49211 37.97921)'::geometry,
      ARRAY[
        to_timestamp(1590287775) AT TIME ZONE 'UTC',
        to_timestamp(1590287778) AT TIME ZONE 'UTC',
        to_timestamp(1590302169) AT TIME ZONE 'UTC',
        to_timestamp(1590302171) AT TIME ZONE 'UTC'
      ], '{}') a,
    ST_makeTrajectory('STPOINT'::leaftype,
      'SRID=4326;LINESTRING(114.49211 37.97921,114.49211 37.97921,114.49211 37.97921,114.49211 37.97921,114.49145 37.97781,114.49145 37.97781,114.49145 37.97781,114.49145 37.97781,114.49145 37.97781,114.49145 37.97781,114.49145 37.97781,114.49145 37.97781,114.49145 37.97781,114.49145 37.97781,114.49211 37.97921,114.49211 37.97921,114.49211 37.97921,114.49211 37.97921,114.49211 37.97921,114.49211 37.97921)'::geometry,
      ARRAY[
        to_timestamp(1590287765) AT TIME ZONE 'UTC',
        to_timestamp(1590287771) AT TIME ZONE 'UTC',
        to_timestamp(1590287778) AT TIME ZONE 'UTC',
        to_timestamp(1590287780) AT TIME ZONE 'UTC',
        to_timestamp(1590295992) AT TIME ZONE 'UTC',
        to_timestamp(1590295997) AT TIME ZONE 'UTC',
        to_timestamp(1590296013) AT TIME ZONE 'UTC',
        to_timestamp(1590296018) AT TIME ZONE 'UTC',
        to_timestamp(1590296025) AT TIME ZONE 'UTC',
        to_timestamp(1590296032) AT TIME ZONE 'UTC',
        to_timestamp(1590296055) AT TIME ZONE 'UTC',
        to_timestamp(1590296073) AT TIME ZONE 'UTC',
        to_timestamp(1590296081) AT TIME ZONE 'UTC',
        to_timestamp(1590296081) AT TIME ZONE 'UTC',
        to_timestamp(1590302169) AT TIME ZONE 'UTC',
        to_timestamp(1590302174) AT TIME ZONE 'UTC',
        to_timestamp(1590302176) AT TIME ZONE 'UTC',
        to_timestamp(1590302176) AT TIME ZONE 'UTC',
        to_timestamp(1590302172) AT TIME ZONE 'UTC',
        to_timestamp(1590302176) AT TIME ZONE 'UTC'
      ], '{}') b
)
SELECT ST_JaccardSimilarity(a, b, 100, '{"unit":"M"}', '20 second',
  '2020-05-23'::timestamptz AT TIME ZONE 'UTC',
  '2020-05-26'::timestamptz AT TIME ZONE 'UTC')
FROM traj;

Output:

       st_jaccardsimilarity
-----------------------------------
 (4,20,4,10,0.2,0.714285714285714)
(1 row)

Hasil tersebut dipetakan ke bidang return sebagai berikut:

FieldValueMeaning
nleaf144 titik pada tr1 berpotongan dengan tr2
nleaf22020 titik pada tr2 berpotongan dengan tr1
inter144 titik pada tr1 memenuhi toleransi jarak dan waktu
inter21010 titik pada tr2 memenuhi toleransi jarak dan waktu
jaccard_lower0.2Kemiripan konservatif: 4 / (4 + 20 - 4)
jaccard_upper0.714...Kemiripan optimistik: 10 / (4 + 20 - 10)