V1 - Calculando a distância entre latitude e longitude de dois pontos utilizando o PostgreSQL
Salve lindus e lindas..
Neste artigo, quero ajuda para todos que precisam calcular a distância entre dois pontos usando latitude e longitude.
Recentemente, estudei como posso calcular essa distância, e inicialmente estava criando um serviço a partir da linguagem PHP, calculando origem e destino, obtendo distância em milhas da fórmula de Havesine.
Mas um amigo sugeriu calcular em SQL, e encontrei alguns fóruns que fazem isso e resolvi fazer também.
Então, abaixo estou compartilhando como fazer isso.
É simples. Primeiro, você precisa instalar as extensões em seu banco de dados.
create extension cube;
create extension earthdistance;
Depois, você pode fazer você selecionar a consulta.
select to_char(float8 (point(-23.3871316,-51.952356) <@> point(-23.412796,-51.9260049)), 'FM999999999.00') as distance;
to_char: para converter e retornar analisado com formato de 2 decimais (FM)
float8: para converter o tipo em float.
point: é uma função de postgres para calcular a distância em milhas terrestres entre dois pontos na superfície da Terra.
Este exemplo é com dois pontos fixos, mas você pode usar latitude e longitude da sua tabela quando tiver definido, exemplo:
# você pode obter a localização (latitude e longitude) do usuário, por exemplo:
$latitude = -23.3871316;
$longitude = -51.952356;
e, em seguida, você pode usar esses atributos em sua consulta montada em seu aplicativo.
"
select to_char(float8 (point($latitude,$longitude) <@> point(addresses.latitude,address.longitude)), 'FM999999999.00') as distance;
"
O resultado é a distância da localização do usuário até o endereço definido em sua tabela.
Ok, isso retornará a distância em milhas, para transformar em KM, multiplique o resultado por 1.609344
Obrigado. espero te ajudar.
Até logo.
Reference: https://www.postgresql.org/docs/current/earthdistance.html