Todos os produtos
Search
Central de documentação

ApsaraDB RDS:ST_Angle

Última atualização: Sep 02, 2026

Calcula o ângulo de rotação em cada ponto intermediário de uma trajetória e retorna os resultados como um array de números de ponto flutuante de precisão dupla.

Sintaxe

double precision[] ST_Angle(trajectory traj, boolean hasdirection DEFAULT false);

Parâmetros

Parâmetro

Tipo

Padrão

Descrição

traj

trajectory

O objeto de trajetória.

hasdirection

boolean

false

Especifica se a direção da rotação deve ser considerada. Quando defina como true, a rotação no sentido anti-horário retorna um valor negativo.

Descrição

Para uma trajetória com n pontos, a função ST_Angle calcula o ângulo de rotação em cada um dos n - 2 pontos intermediários (excluindo o primeiro e o último).

O valor retornado para cada ponto intermediário segue estas regras:

  • 0 — a trajetória move-se em linha reta nesse ponto.

  • NaN — a trajetória permanece na mesma posição nesse ponto (deslocamento zero).

Se hasdirection for false (padrão), todos os ângulos retornam como valores positivos, independentemente da direção da rotação. Caso hasdirection seja true, rotações no sentido anti-horário resultam em ângulo negativo.

Exemplos

Os exemplos a seguir usam a mesma trajetória de nove pontos. Como há 7 pontos intermediários, ambas as consultas retornam um array com 7 valores.

Exemplo 1: Sem direção (padrão)

SELECT ST_Angle(
  ST_MakeTrajectory(
    'STPOINT'::leaftype,
    'LINESTRING(0 0, 0 10, 10 10, 20 10, 30 0, 30 0, 20 10, 0 10, 0 0)',
    '2000-01-01',
    '2000-01-01'::timestamp + '1 day'::interval
      * (ST_NPoints('LINESTRING(0 0, 0 10, 10 10, 20 10, 30 0, 30 0, 20 10, 0 10, 0 0)') - 1),
    '{}'
  )
);

Resultado:

      st_angle
-------------------------
 {90,0,45,NaN,NaN,45,90}

Exemplo 2: Com direção

SELECT ST_Angle(
  ST_MakeTrajectory(
    'STPOINT'::leaftype,
    'LINESTRING(0 0, 0 10, 10 10, 20 10, 30 0, 30 0, 20 10, 0 10, 0 0)',
    '2000-01-01',
    '2000-01-01'::timestamp + '1 day'::interval
      * (ST_NPoints('LINESTRING(0 0, 0 10, 10 10, 20 10, 30 0, 30 0, 20 10, 0 10, 0 0)') - 1),
    '{}'
  ),
  true
);

Resultado:

       st_angle
---------------------------
 {90,0,45,NaN,NaN,-45,-90}

Os dois últimos valores mudam de 45, 90 para -45, -90 porque a trajetória vira no sentido anti-horário nesses pontos.