Todos os produtos
Search
Central de documentação

ApsaraDB RDS:ST_StayPoint

Última atualização: Sep 02, 2026

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

ST_StayPoint

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.

ST_stayPointSpatialClustered

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

traj

O objeto de trajetória.

resample_int

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 '100000 day'. Para mais detalhes, consulte ST_Resample.

dr

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.

dt

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.

thres

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 dr e a diferença temporal for menor que dt. Quando vários pontos consecutivos se qualificam, aquele cercado pelo maior número de pontos de amostragem é selecionado como ponto final de permanência.

merger

(Apenas para ST_stayPointSpatialClustered) Limiar de distância de mesclagem. Dois pontos de permanência detectados em momentos diferentes são mesclados em um só se a distância entre eles for inferior a esse valor.

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

point

geometry

Posição do ponto de permanência.

startt

timestamp

Horário de início da permanência, baseado no primeiro ponto de amostragem identificado como parte dela.

endt

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

point

geometry

Posição do cluster de permanência mesclado.

length

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 coluna point armazena coordenadas no formato binário WKB. Use ST_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.