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:
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:
|
| useSpheroid | bool | true | Menentukan apakah akan menggunakan elipsoid. Anda dapat menentukan parameter ini jika Anda menetapkan parameter Unit ke M. Nilai valid:
|
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)