全部产品
Search
文档中心

:ST_JaccardSimilarity

更新时间:Jul 02, 2025

Topik ini menjelaskan fungsi ST_JaccardSimilarity, yang menghitung indeks Jaccard berdasarkan dua lintasan atau sub-lintasan.

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

Parameter Deskripsi
tr1 Lintasan nomor 1.
tr2 Lintasan nomor 2.
tol_dist Toleransi yang diizinkan untuk jarak antara sepasang titik lintasan. Satuan: meter.
unit String JSON yang menentukan cara menghitung jarak.
tol_time Toleransi yang diizinkan untuk selisih waktu antara sepasang titik lintasan. Nilai default adalah NULL. Jika Anda menetapkan parameter ini ke NULL atau nilai negatif, fungsi ini menghitung indeks Jaccard hanya berdasarkan jarak dan tidak mempertimbangkan selisih waktu.
ts Awal rentang waktu untuk perhitungan. Nilai default adalah -infinity. Jika Anda menentukan parameter ini, fungsi ini hanya menghitung sub-lintasan antara waktu mulai dan waktu akhir yang ditentukan.
te Akhir rentang waktu untuk perhitungan. Nilai default adalah infinity. Jika Anda menentukan parameter ini, fungsi ini hanya menghitung sub-lintasan antara waktu mulai dan waktu akhir yang ditentukan.

Tabel berikut menjelaskan bidang dalam parameter unit.

Bidang Tipe Nilai default Deskripsi
Projection string Tidak ada Sistem koordinat tempat lintasan atau sub-lintasan yang ditentukan diproyeksikan ulang. Nilai valid:
  • auto: Fungsi ini secara dinamis memilih sistem koordinat yang paling sesuai berdasarkan koordinat lintang dan bujur dari lintasan atau sub-lintasan yang ditentukan. Kemudian, fungsi ini memproyeksikan ulang lintasan atau sub-lintasan yang ditentukan ke sistem koordinat yang dipilih. Sistem koordinat yang didukung termasuk Lambert Azimuthal dan UTM. Anda tidak perlu menentukan parameter Unit lagi. Satuannya adalah meter.
  • srid: Fungsi ini memproyeksikan ulang lintasan atau sub-lintasan yang ditentukan berdasarkan pengenal referensi spasial (SRID) yang ditentukan oleh parameter ini.
Catatan Jika Anda tidak menentukan parameter ini, fungsi ini melakukan perhitungan berdasarkan sistem koordinat asli.
Unit string null Satuan yang digunakan untuk mengukur jarak. Nilai valid:
  • null: Tidak ada satuan yang ditentukan. Fungsi ini menghitung jarak Euclidean antara setiap pasangan titik lintasan berdasarkan koordinat titik-titik lintasan tersebut.
  • M: Fungsi ini menghitung jarak antara setiap pasangan titik lintasan berdasarkan satuan yang digunakan untuk referensi spasial lintasan atau sub-lintasan yang ditentukan. Dalam banyak kasus, jarak diukur dalam satuan meter.
useSpheroid bool true Menentukan apakah akan menggunakan elipsoid. Anda dapat menentukan parameter ini jika Anda menetapkan parameter Unit ke M. Nilai valid:
  • true: Elipsoid digunakan. Fungsi ini dapat memperoleh jarak yang akurat.
  • false: Bola yang mewakili bumi digunakan. Fungsi ini dapat memperoleh jarak perkiraan.

Tabel berikut menjelaskan parameter respons.

Parameter Tipe Deskripsi
nleaf1 int Jumlah titik lintasan di mana Lintasan 1 berpotongan dengan Lintasan 2.
nleaf2 int Jumlah titik lintasan di mana Lintasan 2 berpotongan dengan Lintasan 1.
Catatan Nilai balik parameter ini mungkin berbeda dari nilai balik parameter nleaf1. Anggaplah Lintasan 1 melewati titik lintasan yang sama pada Lintasan 2 dua kali. Dalam hal ini, nilai balik parameter nleaf1 adalah 1, dan nilai balik parameter nleaf2 adalah 2.
inter1 int Jumlah titik lintasan di mana jarak dari Lintasan 1 ke Lintasan 2 memenuhi toleransi waktu dan jarak yang ditentukan.
inter2 int Jumlah titik lintasan di mana jarak dari Lintasan 2 ke Lintasan 1 memenuhi toleransi waktu dan jarak yang ditentukan.
jaccard_lower double Jarak minimum yang dihitung berdasarkan indeks Jaccard. Nilai parameter ini dihitung berdasarkan rumus berikut: Jarak minimum = inter/(nleaf1 + nleaf2 - inter).
Catatan Dalam rumus sebelumnya, nilai parameter inter adalah nilai yang lebih kecil antara parameter inter1 dan inter2.
jaccard_upper double Jarak maksimum yang dihitung berdasarkan indeks Jaccard. Nilai parameter ini dihitung berdasarkan rumus berikut: Jarak maksimum = inter/(nleaf1 + nleaf2 - inter).
Catatan Dalam rumus sebelumnya, nilai parameter inter adalah nilai yang lebih besar antara parameter inter1 dan inter2.

Deskripsi

Indeks Jaccard dari dua himpunan adalah jumlah elemen dalam irisan himpunan-himpunan tersebut dibagi dengan jumlah elemen dalam gabungan himpunan-himpunan tersebut. Untuk dua lintasan, definisi indeks Jaccard diperluas untuk mencakup jumlah titik lintasan di mana Lintasan 1 berpotongan dengan Lintasan 2, jumlah titik lintasan di mana Lintasan 2 berpotongan dengan Lintasan 1, serta jarak antara setiap pasangan titik lintasan. Jarak dihitung menggunakan rumus-rumus sebelumnya yang digunakan untuk menghitung nilai parameter jaccard_lower dan 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;
       st_jaccardsimilarity        
-----------------------------------
 (4,20,4,10,0.2,0.714285714285714)
(1 row)