Boa tarde,
estou tentando fazer um mapa que usa a divisão de bairros de Belo Horizonte pelo Folium, no Python. Já fiz esse tipo de gráfico antes mas o geojson que encontrei no site da prefeitura de Belo Horizonte parece ter algo errado. Alguém sabe o que pode ser, ou tem um geojson com os limites da cidade disponível?
Ps: Uma coisa que percebi é que as coordenadas talves precisem do negativo na frente para indicar os hemisférios. Se souberem uma forma fácil de inverter isso talvez dê certo.
Eu conversei com um colega da Hungria fera em mapas, Mór Kapronczay. Uma das abordagens possíveis é primeiro ler a URL com o geopandas, testar com o matplotlib e aí usar o folium
Mas precisa de algumas tarefas:
O folium espera coordenadas de latitude longitude, mas esses dados da Prefeitura estão no EPSG 31983, que é um sistema de referência de coordenadas específico do Brasil (crs)
Você pode verificar isso com: gdf.crs
Para converter em coordenadas lat-long, é necessário: gdf=gdf.to_crs(epsg=4326)
Também você precisa fornecer um parâmetro de bloco para o seu mapa funcionar. O Mór mostrou um exemplo com OpenStreetMap
Para ver também seus polígonos no mapa, você precisa adicioná-los ao mapa
Para adicionar os polígonos necessários:
folium.GeoJson(
gdf
).add_to(mymap)
O código ficou assim inteiro (usei Ubuntu):
import geopandas as gpd
import folium
import matplotlib.pyplot as plt
# Lê os dados
url = 'https://geoservicos.pbh.gov.br/geoserver/wfs?service=WFS&version=1.0.0&request=GetFeature&typeName=ide_bhgeo:BAIRRO&srsName=EPSG:31983&outputFormat=application%2Fjson'
gdf = gpd.read_file(url)
# Você pode agora ver os dados em formato df
gdf
# Verifica se os dados estão certos
fig, ax = plt.subplots(figsize=(10,10))
gdf.plot(ax=ax)
# Converte para lat-long
gdf = gdf.to_crs(epsg=4326)
# Faz o mapa
bh = gdf[['id','geometry', 'NOME']]
x_map=bh.geometry.centroid.x.mean()
y_map=bh.geometry.centroid.y.mean()
mymap = folium.Map(location=[y_map, x_map], zoom_start=11,tiles='OpenStreetMap')
# Adiciona polígonos
folium.GeoJson(
gdf
).add_to(mymap)
mymap
@reichaves muito obrigado pela resposta e dedicação. Já tinha até desistido do meu mapa haha. Vou retomar a visualização aqui testando as orientação dos códigos. Realmente não era algo muito simples. Obrigado ao @bernardol também pela dica
Editado:
Voltei para dizer que rodei aqui e deu tudo certo. Obrigado mais uma vez