Элемент управления слоями FeatureGroup в Folium - только один активный слой - PullRequest
1 голос
/ 21 апреля 2020

Я пытаюсь отобразить несколько слоев с информацией на карте Choropleth, имеющей в качестве базового слоя Stamen Terrain и отображающей слои в виде FeatureGroup. Вот мой исходный код без элемента управления наложением:

map = folium.Map(location=[38.58, 0], zoom_start=3, tiles="Stamen Terrain")

fg_tc = folium.FeatureGroup(name="Totalc")

fg_tc.add_child(folium.GeoJson(data=open('world.json', 'r',
                                          encoding='utf-8-sig').read(),
                               style_function=lambda x: {
                                   'fillColor': get_at_once(x['properties']['NAME'], 'totalc'),
                                   'color': 'black',
                                   'weight': 1,
                                   'dashArray': '5, 5',
                                   'fillOpacity': 0.75}))

fg_nc = folium.FeatureGroup(name="New", show=False)

fg_nc.add_child(folium.GeoJson(data=open('world.json', 'r',
                                          encoding='utf-8-sig').read(),
                               style_function=lambda x: {
                                   'fillColor': get_at_once(x['properties']['NAME'], 'new'),
                                   'color': 'black',
                                   'weight': 1,
                                   'dashArray': '5, 5',
                                   'fillOpacity': 0.75}))

fg_td = folium.FeatureGroup(name="Totald", show=False)

fg_td.add_child(folium.GeoJson(data=open('world.json', 'r',
                                          encoding='utf-8-sig').read(),
                               style_function=lambda x: {
                                   'fillColor': get_at_once(x['properties']['NAME'], 'totald'),
                                   'color': 'black',
                                   'weight': 1,
                                   'dashArray': '5, 5',
                                   'fillOpacity': 0.75}))

fg_ac = folium.FeatureGroup(name="Active", show=False)

fg_ac.add_child(folium.GeoJson(data=open('world.json', 'r',
                                          encoding='utf-8-sig').read(),
                               style_function=lambda x: {
                                   'fillColor': get_at_once(x['properties']['NAME'], 'active_cases'),
                                   'color': 'black',
                                   'weight': 1,
                                   'dashArray': '5, 5',
                                   'fillOpacity': 0.75}))


map.add_child(fg_tc)

map.add_child(fg_nc)

map.add_child(fg_td)

map.add_child(fg_ac)

map.add_child(folium.LayerControl())

map.save("map1.html")

Моя проблема в том, что слои FeatureGroup можно выбрать с помощью флажка, позволяющего выбирать несколько слоев в определенное время. В моем случае мне нужно было бы одно время отображать местность тычинки в качестве фона и только один активный слой, и я не знаю, как это сделать.

Я также пытался управлять наложением, но только тогда один единственный слой может быть виден, и я теряю местность тычинки как фон, то есть слои управляются переключателями, но есть только одна группа, которая включает в себя слой тычинки и слои FeatureGroup данных ...

Любая идея, как я мог бы отображать, как хотелось бы: Stamen Terrain в качестве фона и только один активный в данный момент слой данных? Я не могу использовать FeatureGroup, но на данный момент мои знания ограничены этим, и пока мой гугл-фу подвел меня ...

Спасибо!

ps здесь также есть несколько экранов печати с пробными выходами: 1 и 2 без контроля наложения, и можно увидеть, что происходит в «2», где выбрано больше слоев. 3 и 4 с оверлеем = False, и тогда может быть активен только один слой.

экран печати с результатами опробования

...