Como posso calcular o rumo entre dois pontos no PostGIS?

19

Como posso encontrar o rumo entre dois pontos no PostGIS?

Especifique na sua resposta se o método que produz um rolamento no esferóide ou um rolamento plano.

fmark
fonte

Respostas:

21

Usando ST_Azimuth

O rolamento plano pode ser calculado usando ST_Azimuth:

SELECT ST_Azimuth(ST_MakePoint(1,2), 
           ST_MakePoint(3,4))/(2*pi())*360 as degAz,
       ST_Azimuth(ST_MakePoint(3,4), 
           ST_MakePoint(1,2))/(2*pi())*360 As degAzrev

degaz   degazrev
------  ---------
45      225

Para azimute esférico (grupo Citando potgis-users ):

A função azimute do PostGIS parece usar uma função arctan simples para determinar o azimute. Se você converter suas coordenadas em um sistema de coordenadas projetado e executar a consulta, seus resultados ficarão muito mais próximos dos resultados do site da FCC.
Aqui está uma conversão rápida para a Zona 31 da UTM:

select degrees(azimuth(
'POINT(634714.442133176 5802006.052402816)',
'POINT(634731.2410598891 5801981.648284801)'
));

que gera um azimute de 145.457858825445. Pontos no centro da zona UTM, ou uma projeção mais adequada, dariam melhores resultados.

Usando funções trigonométricas e ST_distance_sphere

Esta é a solução que eu escolhi quando tive que lidar com esses problemas, principalmente por motivos de legado (eu tinha uma função Python que calcula o azimute). Primeiro, precisamos encontrar uma função que nos diga a distância exata entre dois pontos. Citando o manual do postgis :

ST_distance_sphere (ponto, ponto) Retorna a distância linear em metros entre dois pontos lat / lon. Usa uma terra esférica e raio de 6370986 metros. Mais rápido que distance_spheroid (), mas menos preciso. Implementado apenas para pontos.

Meça a distância da longitude e latitude entre os pontos e use a arctanfunção para recuperar o ângulo.

Adam Matan
fonte
Vou tentar postar o código python depois, e talvez fazer algumas comparações entre os métodos - Se eu puder achar que o código legado ...
Adam Matan
Você pode esclarecer como você se distancia de um ângulo atan? Minha trigonometria é um pouco nebulosa ...
fmark
11

Para qualquer pessoa que se deparar com essa pergunta agora - o PostGIS suporta ST_Azimuth na geografia (esferóide) a partir do 2.0.0.

EM0
fonte