Eu quero calcular o ângulo entre duas linhas onde elas se cruzam no PostGIS.
O ponto de partida para cálculos de ângulo no PostGIS parece ser ST_Azimuth - mas isso leva pontos como entrada. Meu primeiro pensamento foi pegar os pontos finais das linhas que se cruzam e realizar um cálculo de azimute sobre elas. Isso não é bom o suficiente, porque a maioria dos recursos da linha não é reta e eu estou interessado no ângulo na interseção. Então, o que eu criei é uma operação aninhada que executa as seguintes etapas:
- Identifique todas as interseções entre as duas tabelas de recursos de linha.
- Crie um buffer muito pequeno ao redor do ponto de interseção
- Identifique os pontos em que os recursos da linha cruzam o exterior do buffer (tomando o primeiro ponto se houver mais de um - estou realmente interessado apenas em saber se o ângulo está próximo de 0, 90 ou 180 graus)
- Calcule ST_Azimuth para esses dois pontos.
O SQL completo é demorado para postar aqui, mas eu o gist aqui se você estiver interessado. (A propósito, existe uma maneira melhor do que carregar todos os campos que estão descendo as instruções WITH?)
Os resultados não parecem corretos, então estou claramente fazendo algo errado:
EDIT Refiz os cálculos no EPSG: 3785 e os resultados são um pouco diferentes, mas ainda não estão corretos:
Minha pergunta é onde estão as falhas nesse processo. Estou entendendo mal o que ST_Azimuth faz? Existe um problema de CRS? Algo completamente diferente? Ou talvez haja uma maneira muito, muito mais simples de fazer isso?