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 |
|
|
|
Primeiro objeto de trajetória. |
|
|
|
Segundo objeto de trajetória. |
|
|
|
Tolerância de distância entre dois pontos da trajetória. Unidade: metros. |
|
|
|
Tolerância de tempo entre dois pontos da trajetória. |
|
|
|
Unidade de medida de |
O valor'D'paraunitsó é 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.

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