H1berto

Procurar lugares próximos usando SQL (MySQL)

Por esses dias passei por um problema na programação e achar a solução foi uma necessidade. O que eu precisava era que através das minhas coordenadas de latitude e longitude junto com outra coordenada de um ponto X eu consegui-se calcular uma distância em quilômetros (km).

Pesquisando achei um método eficiente em SQL. Vamos ao que interessa.

Considerando que eu tenha uma tabela (enderecos) desta forma:

CREATE TABLE `enderecos` (
 `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
 `nome` VARCHAR( 60 ) NOT NULL ,
 `lat` FLOAT( 10, 6 ) NOT NULL ,
 `lng` FLOAT( 10, 6 ) NOT NULL
) ;

Tendo em vista que minhas coordenadas de latitude seja (-23.606475) e longitude (-46.692544).
A consulta SQL ficará desta forma:

SELECT id,
(6371 * acos(
 cos( radians(-23.606475) )
 * cos( radians( lat ) )
 * cos( radians( lng ) - radians(-46.692544) )
 + sin( radians(-23.606475) )
 * sin( radians( lat ) ) 
 )
) AS distancia
FROM enderecos
HAVING distancia < 25
ORDER BY distancia ASC
LIMIT 4;

O resultado lhe retornará um campo distância exibindo em km do seu ponto ao ponto no registro da tabela.