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

ApsaraDB RDS:ST_lcsSimilarity

最終更新日:Mar 29, 2026

最長共通部分列 (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 つのオーバーロードが利用可能です。

パラメーター

パラメーター説明
traj1trajectory1 つ目の軌跡オブジェクト。
traj2trajectory2 つ目の軌跡オブジェクト。
distfloat82 つの軌跡ポイント間の距離許容差。単位:メートル。
laginterval2 つの軌跡ポイント間の時間許容差。
unitdistanceUnitdist の単位。デフォルト:'M'。有効な値:'M' (メートル)、'KM' (キロメートル)、'D' (度)。
unit の値 'D' は、軌跡オブジェクトの空間参照系識別子 (SRID) が WGS 84 (EPSG コード 4326) の場合にのみ有効です。SRID が指定されていない場合、デフォルトは 4326 です。

アルゴリズム

LCSS アルゴリズムは、空間と時間の両方で一致する軌跡ポイントを特定することにより、2 つの軌跡オブジェクト間の最大類似度を検出します。2 つのポイント間の空間距離が dist 以内であり、lag が指定されている場合は時間差が lag 以内であるときに、これら 2 つのポイントは一致すると見なされます。

この関数は、正規化された類似度スコアではなく、一致する軌跡ポイントの数を返します。

Similarity calculation algorithm

上の図では、軌跡ポイント 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

関連ドキュメント