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

PolarDB:ST_JaccardSimilarity

最終更新日:Mar 28, 2026

2つの軌跡またはサブ軌跡について、オプションの時間範囲内におけるジャカードインデックスを計算します。

構文

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トラジェクトリ最初のトラジェクトリです。
tr2トラジェクトリ2 番目のトラジェクトリです。
tol_distdoubleトラジェクトリ上の 2 点間で許容される最大距離です。単位:メートル。
unitテキスト'{}'距離計算方法を制御する JSON 文字列です。「unit フィールド」をご参照ください。
tol_time間隔NULLトラジェクトリ上の 2 点間で許容される最大時間差です。この値が NULL または負の値に設定された場合、関数は距離のみに基づいてジャッカードインデックスを計算します。
tsタイムスタンプ'-infinity'時間範囲の開始時刻です。te と併用した場合、指定された範囲内のサブトラジェクトリについてジャッカードインデックスを計算します。
teタイムスタンプ'infinity'時間範囲の終了時刻です。ts と併用した場合、指定された範囲内のサブトラジェクトリについてジャッカードインデックスを計算します。

unit フィールド

フィールドデフォルト値説明
Projection文字列なし距離を計算する前に、軌跡を再投影する座標系。有効な値: auto(軌跡の経度および緯度に基づき、ラムベルト方位図法および UTM を動的に選択;単位はメートル)、srid(指定した空間参照識別子 (SRID) に基づいて再投影)。未設定の場合、関数は元の座標系を使用します。
Unit文字列null距離測定の単位。有効な値: null(座標に基づくユークリッド距離)、M(空間参照の単位、通常はメートル)。
useSpheroidブール値true距離計算に楕円体を使用するかどうかを指定します。UnitM の場合にのみ適用されます。有効な値: true(楕円体;正確な距離を返します)、false(球体;近似距離を返します)。

レスポンスパラメーター

パラメーター説明
nleaf1inttr1 の軌道ポイントのうち、tr2 と交差するものの数です。
nleaf2inttr2 の軌道ポイントのうち、tr1 と交差するものの数です。この値は nleaf1 と異なる場合があります。たとえば、tr1 が tr2 上の同一ポイントを 2 回通過する場合、nleaf1 は 1、nleaf2 は 2 となります。
inter1inttr1 の軌道ポイントのうち、tr2 との距離が距離許容誤差および時間許容誤差の両方を満たすものの数です。
inter2inttr2 の軌道ポイントのうち、tr1 との距離が距離許容誤差および時間許容誤差の両方を満たすものの数です。
jaccard_lowerdoubleジャカード類似度の下限値です。min(inter1, inter2) / (nleaf1 + nleaf2 - min(inter1, inter2)) で算出されます。
jaccard_upperdoubleジャカード類似度の上限値です。max(inter1, inter2) / (nleaf1 + nleaf2 - max(inter1, inter2)) で算出されます。

説明

ジャカードインデックスは、2つの集合の類似度を、その積集合のサイズと和集合のサイズの比率として測定します。軌跡の場合、この関数はその定義を拡張します。`tr1` が `tr2` と交差する軌跡ポイントと、`tr2` が `tr1` と交差する軌跡ポイントをカウントし、上記の数式を使用してジャカード類似度の下限と上限を計算します。

比較の方向 (tr1→tr2 vs. tr2→tr1) に応じて交差数が異なる場合があるため、この関数は下限 (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)

出力は、順にレスポンスパラメーターに対応します: (nleaf1, nleaf2, inter1, inter2, jaccard_lower, jaccard_upper)