Folium: отображение информации о фрейме данных pandas во всплывающем окне geojson

#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