A função ST_StayPoint detecta todos os pontos de permanência em uma trajetória, ou seja, locais onde um objeto em movimento permaneceu dentro de um raio espacial definido durante uma duração mínima.
Há duas variantes disponíveis:
|
Função |
Quando usar |
|
|
Retorna cada ponto de permanência com seus horários de início e fim. Use a variante agrupada quando a trajetória contiver múltiplas idas e vindas na mesma área. |
|
|
A trajetória contém múltiplas idas e vindas na mesma área. Mescla pontos de permanência espacialmente sobrepostos e retorna a duração total em cada local. |
Sintaxe
SETOF trstaypoint ST_StayPoint(trajectory traj, interval resample_int, float dr, interval dt, float thres);
TABLE(point geometry, length interval) ST_stayPointSpatialClustered(trajectory traj, interval resample_int, float dr, interval dt, float thres, float merger)
Parâmetros
|
Parâmetro |
Descrição |
|
|
O objeto de trajetória. |
|
|
Intervalo de reamostragem. A reamostragem uniformiza o espaçamento dos pontos ao longo da trajetória. Um intervalo menor gera detecção mais precisa de pontos de permanência, mas aumenta o tempo de computação. Para ignorar a reamostragem, defina um valor alto, como |
|
|
Limiar do raio espacial. Um ponto de amostragem é considerado "ao redor" de um ponto candidato se estiver dentro dessa distância. A unidade depende do Identificador de Referência Espacial (SRID) da trajetória: SRID 0 usa unidades de distância euclidiana; SRID 4326 usa metros. |
|
|
Limiar da janela de tempo. Um ponto de amostragem é considerado "ao redor" de um ponto candidato se a diferença temporal estiver dentro desse intervalo. Defina um valor ligeiramente maior que a duração esperada de uma única permanência. |
|
|
Número mínimo de pontos de amostragem que devem estar "ao redor" de um ponto candidato para qualificá-lo como ponto de permanência. Um ponto está "ao redor" do candidato se sua distância for menor que |
|
|
(Apenas para |
Valor de retorno
A função ST_StayPoint retorna um conjunto de valores trstaypoint. O tipo trstaypoint é composto pelas seguintes colunas:
|
Coluna |
Tipo |
Descrição |
|
|
geometry |
Posição do ponto de permanência. |
|
|
timestamp |
Horário de início da permanência, baseado no primeiro ponto de amostragem identificado como parte dela. |
|
|
timestamp |
Horário de término da permanência, baseado no último ponto de amostragem identificado como parte dela. |
A função ST_stayPointSpatialClustered retorna uma tabela com as seguintes colunas:
|
Coluna |
Tipo |
Descrição |
|
|
geometry |
Posição do cluster de permanência mesclado. |
|
|
interval |
Duração total acumulada de todas as permanências mescladas neste cluster. |
Descrição
Um ponto na trajetória qualifica-se como ponto de permanência quando pelo menos thres pontos de amostragem estão dentro da distância dr e do intervalo de tempo dt desse ponto.
Cálculo de thres: divida a duração mínima de permanência pelo intervalo de reamostragem e some 1. Por exemplo, para detectar permanências de 30 minutos ou mais com um intervalo de reamostragem de 5 minutos:
thres = (30 min / 5 min) + 1 = 7
Com esses parâmetros, defina dr como 250 m e dt como 40 minutos (ligeiramente superior à permanência mínima de 30 minutos). Este exemplo detecta permanências dentro de uma zona de 500 m.
Quando uma trajetória possui múltiplas idas e vindas na mesma área, use ST_stayPointSpatialClustered para agregar pontos de permanência espacialmente similares. A função retorna o número total de locais de permanência (como quantidade de linhas) e a duração total em cada local.
Pontos de permanência geralmente correspondem a locais significativos, como estacionamentos, postos de combustível ou locais visitados frequentemente, onde o objeto em movimento parou ou permaneceu por algum tempo.
Exemplos
Detectar pontos de permanência em uma trajetória de passagem única
SELECT ST_AsText((ST_StayPoint(traj, '12 hour', 3, '3 day', 3)).point),
(ST_StayPoint(traj, '12 hour', 3, '3 day', 3)).*
FROM (
SELECT ST_MakeTrajectory(
'STPOINT'::leaftype,
'LINESTRING(1 1, 2 2, 3 3, 10 10, 11 11, 12 12, 13 13, 3 3, 2 2, 2 2, 3 3, 8 8,10 10,9 9,8 8)',
'2000-01-01',
'2000-01-01'::timestamp + '1 day'::interval * (ST_NPoints('LINESTRING(1 1, 2 2, 3 3, 10 10, 11 11, 12 12, 13 13, 3 3, 2 2, 2 2, 3 3, 8 8,10 10,9 9,8 8)') - 1),
'{}'
) AS traj
) tj;
A consulta retorna quatro pontos de permanência com suas posições (em formato WKT legível via ST_AsText) e intervalos de tempo:
st_astext | point | startt | endt
----------------+--------------------------------------------+---------------------+---------------------
POINT(1 1) | 0101000000000000000000F03F000000000000F03F | 2000-01-01 00:00:00 | 2000-01-03 00:00:00
POINT(11 11) | 010100000000000000000026400000000000002640 | 2000-01-04 00:00:00 | 2000-01-07 00:00:00
POINT(3 3) | 010100000000000000000008400000000000000840 | 2000-01-08 00:00:00 | 2000-01-11 00:00:00
POINT(9.5 9.5) | 010100000000000000000023400000000000002340 | 2000-01-12 00:00:00 | 2000-01-15 00:00:00
A colunapointarmazena coordenadas no formato binário WKB. UseST_AsText()para converter para coordenadas WKT legíveis, conforme demonstrado na consulta acima.
Agregar pontos de permanência em múltiplas idas e vindas
SELECT ST_AsText((ST_stayPointSpatialClustered(traj, '12 hour', 3, '3 day', 3, 3)).point),
(ST_stayPointSpatialClustered(traj, '12 hour', 3, '3 day', 3, 3)).*
FROM (
SELECT ST_MakeTrajectory(
'STPOINT'::leaftype,
'LINESTRING(1 1, 2 2, 3 3, 10 10, 11 11, 12 12, 13 13, 3 3, 2 2, 2 2, 3 3, 8 8,10 10,9 9,8 8)',
'2000-01-01',
'2000-01-01'::timestamp + '1 day'::interval * (ST_NPoints('LINESTRING(1 1, 2 2, 3 3, 10 10, 11 11, 12 12, 13 13, 3 3, 2 2, 2 2, 3 3, 8 8,10 10,9 9,8 8)') - 1),
'{}'
) AS traj
) tj;
A mesma trajetória produz dois clusters de permanência mesclados ao usar ST_stayPointSpatialClustered com uma distância de mesclagem de 3 (o último parâmetro):
st_astext | point | length
--------------------+--------------------------------------------+--------
POINT(10.25 10.25) | 010100000000000000008024400000000000802440 | 6 days
POINT(2 2) | 010100000000000000000000400000000000000040 | 5 days
Os quatro pontos de permanência individuais do exemplo anterior são consolidados em dois clusters com base na proximidade espacial. A coluna length exibe a duração total acumulada de permanência em cada local.