All Products
Search
Document Center

PolarDB:ST_JaccardSimilarity

Last Updated:Mar 28, 2026

Menghitung indeks Jaccard untuk dua trajectory atau sub-trajectory dalam rentang waktu opsional.

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'
);

Parameter

ParameterTypeDefaultDescription
tr1trajectoryTrajectory pertama.
tr2trajectoryTrajectory kedua.
tol_distdoubleJarak maksimum yang diizinkan antara sepasang titik trajectory. Satuan: meter.
unittext'{}'String JSON yang mengontrol cara perhitungan jarak. Lihat bidang unit.
tol_timeintervalNULLSelisih waktu maksimum yang diizinkan antara sepasang titik trajectory. Jika diatur ke NULL atau nilai negatif, fungsi menghitung indeks Jaccard hanya berdasarkan jarak.
tstimestamp'-infinity'Awal rentang waktu. Saat ditentukan bersama dengan te, fungsi menghitung indeks Jaccard untuk sub-trajectory dalam rentang tersebut.
tetimestamp'infinity'Akhir rentang waktu. Saat ditentukan bersama dengan ts, fungsi menghitung indeks Jaccard untuk sub-trajectory dalam rentang tersebut.

bidang unit

FieldTypeDefaultDescription
ProjectionstringNoneSistem koordinat tempat trajectory diproyeksikan ulang sebelum menghitung jarak. Nilai yang valid: auto (secara dinamis memilih Lambert Azimuthal dan UTM berdasarkan bujur dan lintang trajectory; satuan dalam meter), srid (memproyeksikan ulang berdasarkan spatial reference identifier (SRID) yang Anda tentukan). Jika tidak diatur, fungsi menggunakan sistem koordinat asli.
UnitstringnullSatuan pengukuran jarak. Nilai yang valid: null (Jarak Euclidean berdasarkan koordinat), M (jarak dalam satuan referensi spasial, biasanya meter).
useSpheroidbooltrueMenentukan apakah akan menggunakan ellipsoid untuk perhitungan jarak. Hanya berlaku saat Unit bernilai M. Nilai yang valid: true (ellipsoid; menghasilkan jarak akurat), false (sphere; menghasilkan jarak perkiraan).

Parameter respons

ParameterTypeDescription
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 dua kali, nleaf1 bernilai 1 dan nleaf2 bernilai 2.
inter1intJumlah titik trajectory pada tr1 yang jaraknya ke tr2 memenuhi toleransi jarak dan toleransi waktu.
inter2intJumlah titik trajectory pada tr2 yang jaraknya ke tr1 memenuhi toleransi jarak dan toleransi waktu.
jaccard_lowerdoubleBatas bawah kemiripan Jaccard. Dihitung sebagai min(inter1, inter2) / (nleaf1 + nleaf2 - min(inter1, inter2)).
jaccard_upperdoubleBatas atas kemiripan Jaccard. Dihitung sebagai max(inter1, inter2) / (nleaf1 + nleaf2 - max(inter1, inter2)).

Deskripsi

Indeks Jaccard mengukur kemiripan dua himpunan sebagai rasio antara ukuran irisan dan ukuran gabungan. Untuk trajectory, fungsi ini memperluas definisi tersebut dengan menghitung titik-titik pada trajectory tempat tr1 berpotongan dengan tr2 dan sebaliknya, lalu menentukan batas bawah dan batas atas kemiripan Jaccard menggunakan rumus di atas.

Karena ukuran irisan dapat berbeda tergantung arah perbandingan (tr1→tr2 vs. tr2→tr1), fungsi ini mengembalikan kedua nilai: batas bawah (jaccard_lower) dan batas atas (jaccard_upper).

Contoh

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)

Output tersebut dipetakan ke parameter respons sesuai urutan: (nleaf1, nleaf2, inter1, inter2, jaccard_lower, jaccard_upper).