Obter nome da cidade via latitude e longitude (e bônus)

GEO
Tempo de leitura: 2 minuto(s)
Uma solução própria cruzando base brasileira e OpenLayers
Problemas ao obter nome da cidade via latitude e longitude
  • Muitos usuários não autorizam a coleta dos dados
  • É necessário pagar pelos serviços de geolocalização por IP ou do Google
  • Não existe serviço gratuito de geolicalização
  • Não existe uma lib que faça toda a parte de geolocalização

Você terá que pagar o uso da maioria desses serviços com diversas limitações. Que tal ter sua própria lista de estados e cidades, juntamente com a latitude e longitude conhecidas?

A base de dados brasileira que já está pronta

Não tente construir a lista sozinho. Este projeto GRATUITO, por exemplo, é um banco de dados brasileiro de estados e cidades: Uma lista de 5.568 cidades e 27 estados tem o tamanho de 430 KB!

Vale muito a pena, considerando a quantidade de dados que você precisa armazenar e os benefícios que obtém com eles.

API

É necessário configurar uma rota/endpoint em seu framework pra receber latitude e longitude, e retornar os dados da cidade, através da consulta detalhada no final do artigo.

Agora que tenho minha própria lista de cidades, e uma API, posso indicar ao usuário o nome da cidade dele, ou ainda outras cidades próximas, como detalhado no BÔNUS.

BÔNUS

Posso mostrar apenas a cidade do usuário, mas também consigo exibir pra ele os nomes das 5 cidades mais próximas pra expandir resultados ou fazer qualquer outra coisa que eu quiser. Com esta consulta simples ao banco de dados MySQL do meu aplicativo! Veja como é simples, mas poderoso

set @lat=-20.0080509185791;
set @lng=-44.003021240234375;

-- The main SQL query that returns the closest 5 airports.
SELECT id, nome, lat, lng, 111.045 * DEGREES(ACOS(COS(RADIANS(@lat))
 * COS(RADIANS(lat))
 * COS(RADIANS(lng) - RADIANS(@lng))
 + SIN(RADIANS(@lat))
 * SIN(RADIANS(lat))))
 AS distance_in_km
FROM cities
ORDER BY distance_in_km ASC
LIMIT 0,5;

OpenLayers

Através da biblioteca OpenLayers é possível desenhar pontos ou polígonos no mapa. Isso abre possibilidade para uma ampla gama de aplicações. Saiba mais sobre o projeto

Quer saber mais sobre como funciona? Fale com um desenvolvedor agora mesmo!