Nada de Google! Faça por conta própria (DIY)
Quer fazer por conta própria? Você terá que pagar o uso da maioria desses serviços com milhares de limitações. Que tal ter sua própria lista de estados e cidades, juntamente com a latitude e longitude conhecidas?
Use uma base de dados brasileira que já está pronta
Não tente construir a lista sozinho. Este projeto, 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 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;