Tous les produits
Search
Centre de documentation

ApsaraDB RDS:ST_lcsSimilarity

Dernière mise à jour :Aug 26, 2026

Calcule la similarité entre deux objets de trajectoire à l'aide de l'algorithme de la plus longue sous-séquence commune (LCSS). Renvoie le nombre de points de trajectoire cohérents.

Syntaxe

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');

Deux surcharges sont disponibles : l'une sans tolérance temporelle (paramètre lag) et l'autre avec.

Paramètres

Paramètre Type Description
traj1 trajectory Premier objet de trajectoire.
traj2 trajectory Deuxième objet de trajectoire.
dist float8 Tolérance de distance entre deux points de trajectoire. Unité : mètres.
lag interval Tolérance temporelle entre deux points de trajectoire.
unit distanceUnit Unité de dist. Par défaut : 'M'. Valeurs valides : 'M' (mètres), 'KM' (kilomètres), 'D' (degrés).
La valeur 'D' du paramètre unit n'est valide que si l'identifiant du système de référence spatiale (SRID) de l'objet de trajectoire est WGS 84 (code EPSG 4326). Le SRID par défaut est 4326 s'il n'est pas spécifié.

Algorithme

L'algorithme LCSS détermine la similarité maximale entre deux objets de trajectoire en identifiant les points cohérents dans l'espace et dans le temps. Deux points sont considérés comme cohérents si la distance spatiale qui les sépare est inférieure ou égale à dist et, si le paramètre lag est spécifié, si la différence temporelle est inférieure ou égale à lag.

La fonction renvoie le nombre de points de trajectoire cohérents, et non un score de similarité normalisé.

Similarity calculation algorithm

Dans la figure ci-dessus, les points de trajectoire 1, 3 et 6 satisfont aux conditions de cohérence ; la fonction renvoie donc 3.

Exemples

Exemple 1 : Tolérance de distance uniquement

Cet exemple utilise une tolérance de distance de 100 mètres sans contrainte temporelle.

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

Exemple 2 : Tolérance de distance avec tolérance temporelle

Cet exemple ajoute une tolérance temporelle de 30 secondes. Les points situés à moins de 100 mètres dans l'espace mais séparés de plus de 30 secondes ne sont pas comptés comme cohérents.

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

Voir aussi