最長共通部分列 (LCSS) アルゴリズムを使用して、2 つの軌跡オブジェクト間の類似度を計算します。一致する軌跡ポイントの数を返します。
構文
integer ST_lcsSimilarity(trajectory traj1, trajectory traj2, float8 dist, distanceUnit unit default 'M');
integer ST_lcsSimilarity(trajectory traj1, trajectory traj2, float8 dist, interval lag, distanceUnit unit default 'M');時間許容差 (lag) を含まないものと、含むものの 2 つのオーバーロードが利用可能です。
パラメーター
| パラメーター | 型 | 説明 |
|---|---|---|
traj1 | trajectory | 1 つ目の軌跡オブジェクト。 |
traj2 | trajectory | 2 つ目の軌跡オブジェクト。 |
dist | float8 | 2 つの軌跡ポイント間の距離許容差。単位:メートル。 |
lag | interval | 2 つの軌跡ポイント間の時間許容差。 |
unit | distanceUnit | dist の単位。デフォルト:'M'。有効な値:'M' (メートル)、'KM' (キロメートル)、'D' (度)。 |
unitの値'D'は、軌跡オブジェクトの空間参照系識別子 (SRID) が WGS 84 (EPSG コード 4326) の場合にのみ有効です。SRID が指定されていない場合、デフォルトは 4326 です。
アルゴリズム
LCSS アルゴリズムは、空間と時間の両方で一致する軌跡ポイントを特定することにより、2 つの軌跡オブジェクト間の最大類似度を検出します。2 つのポイント間の空間距離が dist 以内であり、lag が指定されている場合は時間差が lag 以内であるときに、これら 2 つのポイントは一致すると見なされます。
この関数は、正規化された類似度スコアではなく、一致する軌跡ポイントの数を返します。

上の図では、軌跡ポイント 1、3、6 が一致条件を満たしているため、この関数は 3 を返します。
例
例 1:距離許容差のみ
この例では、時間制約なしで 100 メートルの距離許容差を使用します。
With traj AS (
Select ST_makeTrajectory('STPOINT', 'LINESTRINGZ(114.000528 33.588163 54.87, 114.000535 33.588235 54.85, 114.000447 33.588272 54.69, 114.000348 33.588287 54.73, 114.000245 33.588305 55.26, 114.000153 33.588305 55.3)'::geometry,
ARRAY['2010-01-01 11:30'::timestamp, '2010-01-01 11:31', '2010-01-01 11:32', '2010-01-01 11:33','2010-01-01 11:34','2010-01-01 11:35'], NULL) a,
ST_makeTrajectory('STPOINT', 'LINESTRINGZ(114.000529 33.588163 54.87, 114.000535 33.578235 54.85, 114.000447 33.578272 54.69, 114.000348 33.578287 54.73, 114.000245 33.578305 55.26, 114.000163 33.588305 55.3)'::geometry,
ARRAY['2010-01-01 11:29:58'::timestamp, '2010-01-01 11:31:02', '2010-01-01 11:33', '2010-01-01 11:33:09','2010-01-01 11:34','2010-01-01 11:34:30'], NULL) b)
Select st_LCSSimilarity(a, b, 100) from traj;
-- 2例 2:距離許容差と時間許容差
この例では、30 秒の時間許容差を追加します。空間的に 100 メートル以内であっても、時間差が 30 秒を超えているポイントは一致としてカウントされません。
With traj AS (
Select ST_makeTrajectory('STPOINT', 'LINESTRINGZ(114.000528 33.588163 54.87, 114.000535 33.588235 54.85, 114.000447 33.588272 54.69, 114.000348 33.588287 54.73, 114.000245 33.588305 55.26, 114.000153 33.588305 55.3)'::geometry,
ARRAY['2010-01-01 11:30'::timestamp, '2010-01-01 11:31', '2010-01-01 11:32', '2010-01-01 11:33','2010-01-01 11:34','2010-01-01 11:35'], NULL) a,
ST_makeTrajectory('STPOINT', 'LINESTRINGZ(114.000529 33.588163 54.87, 114.000535 33.578235 54.85, 114.000447 33.578272 54.69, 114.000348 33.578287 54.73, 114.000245 33.578305 55.26, 114.000163 33.588305 55.3)'::geometry,
ARRAY['2010-01-01 11:29:58'::timestamp, '2010-01-01 11:31:02', '2010-01-01 11:33', '2010-01-01 11:34:15','2010-01-01 11:34:50','2010-01-01 11:34:30'], NULL) b)
Select st_LCSSimilarity(a, b, 100, interval '30 seconds') from traj;
-- 2