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.