Como identificar e mapear cidades circunvizinhas na prática
O problema é simples no papel e irritante na execução. Você precisa saber quais cidades ficam num raio de 30 ou 50 quilômetros de um ponto de referência — seja pra análise de mercado, logística, estudos demográficos ou qualquer coisa parecida. A maioria das pessoas abre o Google Maps, mede distâncias manualmente e gasta duas horas com isso. Eu aprendi na marra que existe caminho melhor.
Ferramentas e métodos para cidades circunvizinhas
Você tem basicamente três abordagens. A primeira é o QGIS, software livre, carregando os dados do IBGE e usando a ferramenta Buffer com projeção métrica. A segunda é uma API como Geoapify ou Mapbox, mais rápida mas com custo por requisição. A terceira, e a que eu mais uso no dia a dia, é Python com geopandas e a base oficial do IBGE. O passo a passo real, do jeito que eu faço:
Baixe os shapefiles dos municípios brasileiros no site do IBGE — são cerca de 5.570 registros. Abre no QGIS, seleciona o município de referência, cria um buffer de 50km com projeção UTM adequada à sua região, e usa a ferramenta Intersect. O resultado são os municípios que cortam ou estão dentro desse raio. A parte que ninguém avisa na hora que começa: a precisão depende entirely do sistema de referência. Se você usar WGS84 (EPSG:4326) sem transformar, o buffer vem em graus, não em quilômetros. Perdi horas com isso numa análise de região metropolitana de SP e tive que refazer tudo. A correção é direta — converta para uma projeção local com unidade em metros antes de qualquer operação espacial. EPSG:4674 não serve pro buffer, use o EPSG correspondente ao zona UTM da sua área.
👉 Clique no botão abaixo para saber mais sobre o assunto!
O problema que eu encontrei e como resolvi
Fiz esse mapeamento pra uma consultoria de logística no interior de Minas. O software marcou sete cidades circunvizinhas como válidas. Só que três delas eram absurdas — o município de Ouro Preto, por exemplo, tem um distrito que fica a mais de 100km do resto do território. O buffer intersectou com essa extensão desconectada, não com a sede. A solução foi filtrar pelo centroide do município e não pelo polígono completo, e depois validar manualmente os resultados contra a tabela de distâncias rodoviárias do DNIT. Outro detalhe que todo mundo deixa passar: o conceito de cidade circunvizinha muda conforme o critério. Raio geodésico não é a mesma coisa que distância rodoviária. Duas cidades podem estar a 20km em linha reta mas a 65km de estrada. Pra análise de mercado ou logística, o segundo critério é muito mais útil. O ideal é cruzar os dois dados — use o buffer pra triagem inicial e depois aplique uma matriz de origens e destinos com dados reais de rede viária.
Limitações e quando esse método falha
Esse fluxo funciona bem pra regiões planas e com malha rodoviária densa. Em áreas de serrania, como a Serra da Mantiqueira ou o sertão nordestino, a distância rodoviária pode triplicar a distância em linha reta. Nesses casos, o buffer sozinho não é suficiente — você precisa do módulo networkx com dados do OpenStreetMap pra calcular rotas reais pela malha. Também tem o problema dos limites municipais que mudam. O IBGE atualiza anualmente, e municípios se originam de divisões, fusões ou retificações de área. Se você tá reproduzindo um estudo ou comparando com dados anteriores, anote a versão do shapefile. Dados de 2019 não batem com os de 2024, e a diferença às vezes é um município inteiro que deixou de existir.
Se você não quer configurar ambiente Python e quer algo mais rápido, o plugin MMQGIS no QGIS faz buffer e intersect sem código. O problema é que ele engasga com volumes maiores — acima de 500 municípios por operação, o processamento fica lento e instável. A versão em Python com geopandas aguenta muito mais sem reclamar. Em resumo, pra quem precisa de cidades circunvizinhas de forma repetitiva, o caminho mais sólido é automatizar com Python, usar projeção métrica, validar centrospopulacionais separadamente e nunca confiar cegamente no resultado do intersect sem checar a rede viária real.