全部產品
Search
文件中心

PolarDB:ST_JaccardSimilarity

更新時間:Jul 06, 2024

計算軌跡或子軌跡的Jaccard相似係數(Jaccard index)。

文法

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

參數

參數名稱描述
tr1軌跡對象1。
tr2軌跡對象2。
tol_dist空間容差,單位為米。
unit描述距離計算方式的JSON字串。
tol_time時間容差。預設為NULL,當值為NULL或負值時表示只進行空間匹配不考慮時間。
ts開始時間。預設為-infinity,只關注在起止時間之間的子軌跡。
te結束時間。預設為infinity,只關注在起止時間之間的子軌跡。

unit參數說明如下。

參數名稱類型預設值說明
Projectionstring重新投影的目標座標系。取值:
  • auto:根據經緯度座標動態選擇最合適的座標系(Lambert Azimuthal、UTM等),並投影到此座標系進行計算。不需要額外指定Unit,單位為米。
  • srid:需要重投影到的空間參考系ID。
說明 不傳本參數時,依照原有座標系計算。
Unitstringnull度量單位。取值:
  • null:即無單位,直接按照軌跡點座標的歐式距離進行計算。
  • M:按照所在空間參考系基於的單位進行距離計算,通常為米。
useSpheroidbooltrue是否使用橢球體計算。當Unit設定為M時,可以指定此項。取值:
  • true:使用橢球體並計算更精確的距離。
  • false:使用球體表示地球並計算近似的距離。

返回參數說明如下。

參數名稱類型說明
nleaf1int軌跡1與軌跡2相交的點數量。
nleaf2int軌跡2與軌跡1相交的點數量。
說明 nleaf1不一定相同,例如可能軌跡1兩次經過軌跡2的同一個點,則nleaf1為1,nleaf2為2。
inter1int軌跡1到軌跡2的距離同時滿足時間容差和空間容差的點數量。
inter2int軌跡2到軌跡1的距離同時滿足時間容差和空間容差的點數量。
jaccard_lowerdoubleJaccard距離下限。計算公式:inter/(nleaf1+nleaf2-inter)
說明 inter為inter1inter2中較小的值。
jaccard_upperdoubleJaccard距離上限。計算公式:inter/(nleaf1+nleaf2-inter)
說明 inter為inter1inter2中較大的值。

描述

兩個集合的Jaccard index指兩個集合交集的元素數量除以兩個集合并集的元素數量。對於兩條軌跡,我們擴充了Jaccard index的定義,分別計算在軌跡1與軌跡2相交的點數量,以及在軌跡2上與軌跡1相交的點數量,並通過上文jaccard_lowerjaccard_upper的公式計算距離。

樣本

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)