Как отобразить название страны и население при наведении курсора на карту мира с помощью библиотеки Python folium? - PullRequest
1 голос
/ 01 апреля 2020

Я сделал веб-карту с python, используя фолиум. Карта считывается в население. json файл, который содержит названия стран и номер населения и отображает карту в браузере.

Вот код:

import pandas
import folium

map = folium.Map(location=[32, 0], zoom_start=4.3, tiles = "CartoDB positron", max_zoom = 100)


fgp = folium.FeatureGroup(name="Population" )

def colorPicker(population):
    if population < 10000000:
        return 'green'
    elif population >= 10000000 and population < 500000000:
        return 'orange'
    else:
        return 'red'


fgp.add_child(folium.GeoJson(data=open('population.json', 'r', encoding='utf-8-sig').read(), 
style_function=lambda x: {'fillColor': colorPicker(x['properties']['POP2005'])},
tooltip=lambda x: '%s\n%s' % (x['properties']['Name'], x['properties']['POP2005'])

))


map.add_child(fgp)

map.save("index.html")

Я создал группу объектов и add_child, чтобы добавить цвета для каждой страны на карте на основе их численности населения с помощью этого кода:

style_function=lambda x: {'fillColor': colorPicker(x['properties']['POP2005'])}

В таком случае я хотел бы, чтобы каждый раз, когда пользователь наводил курсор на страну, я хотел отобразить название страны и численность населения страны. Для этого я написал:

tooltip=lambda x: '%s\n%s' % (x['properties']['Name'], x['properties']['POP2005'])

Вместо того, чтобы дать мне название страны, он дает мне это ... Изображение карты

Предполагается, что сказать «Китай:« численность населения », но вместо этого показывает« в 0x24 .... »

Я не уверен, почему. Я пробовал несколько вариантов всплывающей подсказки, например:

tooltip=lambda x: '{0}\n{1}'.format(x['properties']['Name'], x['properties']['POP2005']) 
tooltip=lambda x: '%s\n%s' % (x['properties']['Name'], x['properties']['POP2005']) 
tooltip= lambda x: {'text': x['properties']['Name']}))
tooltip= lambda x: {'%s': x['properties']['Name']}))

Но, тем не менее, показывает тот же вывод

Вот ссылка на заполнение. json file: file

1 Ответ

0 голосов
/ 03 апреля 2020

Используйте GeoJson и GeoJsonTooltip классов:

import folium

m = folium.Map(location=[32, 0],
               zoom_start=4.3,
               tiles = "CartoDB positron",
               max_zoom = 100)

def colorPicker(population):
    if population < 10000000:
        return 'green'
    elif population >= 10000000 and population < 500000000:
        return 'orange'
    else:
        return 'red'

folium.GeoJson(open('population.json', 'r', encoding='utf-8-sig').read(),
               name = 'Population',
               style_function = lambda x: {'fillColor': colorPicker(x['properties']['POP2005'])},
               tooltip = folium.GeoJsonTooltip(fields=('NAME', 'POP2005',),
                                               aliases=('Country','Population')),
               show = True).add_to(m)


#folium.LayerControl().add_to(m)
m

и вы получите:

enter image description here

...