Olá @gmg16
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
Ele sugeriu ler este texto para aprender mais
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
Ele também colocou o código aqui