0

以下代码生成一个 web 地图,其中国家/地区按人口着色,其值来自 world.json。

import folium

map=folium.Map(location=[30,30],tiles='Stamen Terrain')

map.add_child(folium.GeoJson(data=open('world.json', encoding='utf-8-sig'),
name="Unemployment",
style_function=lambda x: {'fillColor':'green' if x['properties']['POP2005'] <= 10000000 else 'orange' if 10000000 < x['properties']['POP2005'] < 20000000 else 'red'}))

map.save('file.html')

world.json的链接。

我想知道是否可以使用创建的普通函数def而不是 lambda 函数作为style_function参数的值。我尝试为此创建一个函数:

def feature(x):
    file = open("world.json", encoding='utf-8-sig')
    data = json.load(file)
    population = data['features'][x]['properties']['POP2005']
    d ={'fillColor':'green' if x['properties']['POP2005'] <= 10000000 else 'orange' if 10000000 < x['properties']['POP2005'] < 20000000 else 'red'}
    return d

但是,我想不出如何在style_function. 这是可能的还是 lambda 函数在这里不可替代?

4

2 回答 2

2

style_functionlambda 可以用这样的函数替换:

def style_function(x):
    return {'fillColor':'green' if x['properties']['POP2005'] <= 10000000 else 'orange' if 10000000 < x['properties']['POP2005'] < 20000000 else 'red'}))

然后您可以将函数名称传递给 kwarg:

folium.GeoJson(
    data=...,
    name=...,
    style_function=style_function
)
于 2017-08-30T13:37:35.813 回答
0

如果我理解正确,您需要制作这样的功能(x是geojson):

def my_style_function(x):
    color = ''
    if x['properties']['POP2005'] <= 10e6:
        color = 'green'
    elif x['properties']['POP2005'] < 2*10e6:
        color = 'orange'
    return {'fillColor': color if color else 'red'}

并简单地将其分配给style_function参数(不带括号):

map.add_child(folium.GeoJson(data=open('world.json', encoding='utf-8-sig'),
                             name="Unemployment",
                             style_function=my_style_function))
于 2017-08-30T14:10:38.103 回答