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 |
|
|
trajectory |
— |
O objeto de trajetória. |
|
|
boolean |
false |
Especifica se a direção da rotação deve ser considerada. Quando defina como |
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.