Todos os produtos
Search
Central de documentação

ApsaraDB RDS:ST_lcsSimilarity

Última atualização: Aug 26, 2026

Calcula a similaridade entre dois objetos de trajetória com o algoritmo Longest Common Subsequence (LCSS). Retorna a quantidade de pontos de trajetória consistentes.

Sintaxe

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

Há duas sobrecargas: uma sem tolerância de tempo (lag) e outra com essa tolerância.

Parâmetros

Parâmetro

Tipo

Descrição

traj1

trajectory

Primeiro objeto de trajetória.

traj2

trajectory

Segundo objeto de trajetória.

dist

float8

Tolerância de distância entre dois pontos da trajetória. Unidade: metros.

lag

interval

Tolerância de tempo entre dois pontos da trajetória.

unit

distanceUnit

Unidade de medida de dist. Padrão: 'M'. Valores válidos: 'M' (metros), 'KM' (quilômetros) e 'D' (graus).

O valor 'D' para unit só é válido quando o Identificador do Sistema de Referência Espacial (SRID) do objeto de trajetória for WGS 84 (código EPSG 4326). Se não especificado, o SRID padrão será 4326.

Algoritmo

O algoritmo LCSS determina a similaridade máxima entre dois objetos de trajetória ao identificar pontos consistentes no espaço e no tempo. Dois pontos são considerados consistentes quando a distância espacial entre eles está dentro de dist. Se lag for especificado, a diferença temporal também deve estar dentro de lag.

A função retorna a contagem de pontos de trajetória consistentes, não uma pontuação de similaridade normalizada.

Similarity calculation algorithm

Na figura acima, os pontos de trajetória 1, 3 e 6 atendem às condições de consistência; portanto, a função retorna 3.

Exemplos

Exemplo 1: Apenas tolerância de distância

Este exemplo aplica uma tolerância de distância de 100 metros, sem restrição de tempo.

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

Exemplo 2: Tolerância de distância com tolerância de tempo

Este exemplo adiciona uma tolerância de tempo de 30 segundos. Pontos com distância espacial inferior a 100 metros, mas separados por mais de 30 segundos, não são contabilizados como consistentes.

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

Veja também