すべてのプロダクト
Search
ドキュメントセンター

PolarDB:ST_JaccardSimilarity

最終更新日:Jul 02, 2024

このトピックでは、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

計算の時間範囲の開始。 デフォルト値は -infinityです。 このパラメーターを指定すると、この関数は、指定された開始時間と終了時間の間のサブ軌道のみを計算します。

te

計算の時間範囲の終わり。 デフォルト値はinfinityです。 このパラメーターを指定すると、この関数は、指定された開始時間と終了時間の間のサブ軌道のみを計算します。

次の表に、unitパラメーターのフィールドを示します。

フィールド

データ型

デフォルト値

説明

Projection

String

なし

指定された軌道またはサブ軌道が再投影される座標系。 有効な値:

  • auto: この関数は、指定された軌道またはサブ軌道の経度と緯度の座標に基づいて、最適な座標系を動的に選択します。 次に、この関数は、指定された軌跡またはサブ軌跡を選択された座標系に再投影します。 サポートされる座標系には、LambertAzimuthalとUTMが含まれます。Unitパラメーターを再度指定する必要はありません。 単位はメートルです。

  • srid: この関数は、このパラメーターで指定された空間参照識別子 (SRID) に基づいて、指定された軌道またはサブ軌道を再投影します。

説明

このパラメーターを指定しない場合、この関数は元の座標系に基づいて計算を実行します。

Unit

String

null

距離を測定するために使用される単位。 有効な値:

  • null: 単位が指定されていません。 この関数は、これらの軌道点の座標に基づいて、軌道点の各ペア間のユークリッド距離を計算します。

  • M: この関数は、指定された軌道またはサブ軌道の空間参照に使用される単位に基づいて、軌道点の各ペア間の距離を計算します。 ほとんどの場合、距離はメートル単位で測定されます。

usesSpheroid

bool

true

楕円体を使用するかどうかを指定します。 UnitパラメーターをMに設定した場合、このパラメーターを指定できます。有効な値:

  • true: 楕円が使用されます。 この関数は正確な距離を得ることができる。

  • false: 地球を表す球が使用されます。 この関数は、おおよその距離を得ることができる。

下表にレスポンスパラメーターを示します。

パラメーター

データ型

説明

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インデックスに基づいて計算される最小距離。 このパラメータの値は、最小距離= inter/(nleaf1 + nleaf2 − inter) の式に基づいて計算される。

説明

上式では、インターパラメーターの値は、inter1パラメーターとinter2パラメーターの間で小さい値になります。

jaccard_upper

double

Jaccardインデックスに基づいて計算される最大距離。 このパラメータの値は、次の式に基づいて計算されます。最大距離= inter/(nleaf1 + nleaf2 - inter)

説明

上記の式では、インターパラメーターの値は、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)