このトピックでは、2つの軌道またはサブ軌道に基づいてJaccardインデックスを計算するST_JaccardSimilarity関数について説明します。
構文
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または負の値に設定した場合、この関数は距離のみに基づいてJaccardインデックスを計算し、時間差は考慮しません。 |
ts | 計算の時間範囲の開始。 デフォルト値は |
te | 計算の時間範囲の終わり。 デフォルト値は |
次の表に、unitパラメーターのフィールドを示します。
フィールド | データ型 | デフォルト値 | 説明 |
Projection | String | なし | 指定された軌道またはサブ軌道が再投影される座標系。 有効な値:
説明 このパラメーターを指定しない場合、この関数は元の座標系に基づいて計算を実行します。 |
Unit | String | null | 距離を測定するために使用される単位。 有効な値:
|
usesSpheroid | bool | true | 楕円体を使用するかどうかを指定します。 UnitパラメーターをMに設定した場合、このパラメーターを指定できます。有効な値:
|
下表にレスポンスパラメーターを示します。
パラメーター | データ型 | 説明 |
nleaf1 | int | 軌道1と軌道2が交差する軌道点の数。 |
nleaf2 | int | 軌道2と軌道1が交差する軌道点の数。 説明 このパラメーターの戻り値は、nleaf1パラメーターの戻り値と異なる場合があります。 軌道1が軌道2上の同じ軌道点を2回通過すると仮定する。 この場合、nleaf1パラメーターの戻り値は1、nleaf2パラメーターの戻り値は2です。 |
inter1 | int | 軌道1から軌道2までの距離が指定された時間と距離の両方の許容範囲を満たす軌道点の数。 |
inter2 | int | 軌道2から軌道1までの距離が指定された時間と距離の両方の許容範囲を満たす軌道点の数。 |
jaccard_lower | double | Jaccardインデックスに基づいて計算される最小距離。 このパラメータの値は、最小距離= 説明 上式では、インターパラメーターの値は、inter1パラメーターとinter2パラメーターの間で小さい値になります。 |
jaccard_upper | double | Jaccardインデックスに基づいて計算される最大距離。 このパラメータの値は、次の式に基づいて計算されます。最大距離= 説明 上記の式では、インターパラメーターの値は、inter1パラメーターとinter2パラメーターの間で大きい値になります。 |
説明
2つのセットのJaccardインデックスは、これらのセットの共通部分の要素の数を、これらのセットの和集合の要素の数で割ったものです。 2つの軌道の場合、Jaccardインデックスの定義を拡張して、軌道1が軌道2と交差する軌道点の数、軌道2が軌道1と交差する軌道点の数、および軌道点の各ペア間の距離を計算します。 距離は、jaccard_lowerおよびjaccard_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)