#python #leaflet #mapping #folium
#python #брошюра #отображение #folium
Вопрос:
У меня возникли проблемы с созданием всплывающих окон для полигонов в Folium. У меня есть файл GeoJSON всех стран мира, и для каждой страны я хотел бы отобразить всплывающее окно. Однако моя проблема заключается в том, что информация, которая мне нужна во всплывающем окне, содержится в отдельном фрейме данных pandas.
Я загрузил GeoJSON со всеми странами мира здесь и отобразил это в Folium следующим образом:
# Create a Map instance
m = folium.Map(location=[40.7, -74.0], tiles = 'cartodbpositron', zoom_start=11, control_scale=True)
## add chloropleth layer
m.choropleth(
geo_data='path-to-geojson-file-i-downloaded',
name='Countries',
)
Затем я добавил маркеры на свою карту на основе фрейма данных pandas, который содержит координаты стран вместе с html-страницей для каждой страны в качестве всплывающих данных:
# add markers with basic information
fg = folium.FeatureGroup(name='Articles by Country')
for loc,html in zip(countries,countries_htmls):
fg.add_child(folium.Marker(location=loc, popup=html))
m.add_child(fg)
# enable layers to be turned in or out
folium.LayerControl().add_to(m)
Нажатие на маленькие синие маркеры дает мне правильное всплывающее окно, но в идеале я хочу, чтобы полигон самого слоя хлороплета выдавал мне всплывающее окно, поскольку каждой стране требуется только одно всплывающее окно.
Кто-нибудь знает, есть ли способ, которым я могу отобразить свою карту, чтобы маркер можно было каким-то образом подключить к слою chloropleth geojson, чтобы у каждого полигона страны было всплывающее окно? Пример здесь:
Был бы очень признателен за любую помощь! Большое вам спасибо.
Ответ №1:
Поскольку вы не используете карту Choropleth для визуализации данных, вам лучше использовать GeoJson
объект. В последней версии Folium (0.11.0) появилась новая функция, GeoJsonPopup
которую вы можете использовать, чтобы делать то, что хотите (добавлять всплывающие окна для каждой страны). Вы можете использовать его так :
import folium
m = folium.Map(location=[40.7, -74.0], tiles = 'cartodbpositron', zoom_start=11, control_scale=True)
folium.features.GeoJson('carto.json', name="Countries", popup=folium.features.GeoJsonPopup(fields=['name_long'])).add_to(m)
m