小编ste*_*e_j的帖子

Folium:将 GeoJson 添加到地图时的颜色映射

我的 python 代码中有一个循环,它为我的大叶地图添加了功能。每个功能都保存在一个字典中(称为产品),每个功能都有一个参数字典(GeoJson 字符串和属性)。我想根据其中一个参数为特征着色。

我首先为参数创建一个唯一值列表。然后我将颜色映射到每个唯一值:

orb_list = [value['relativeorbitnumber'] for key, value in products.items()]
orb_list = list(set(orb_list))

color_cycle = cycler(color=['#8e0038', '#8e0073', '#59008e'], fillColor=['#8e0038', '#8e0073', '#59008e'])

orb_colors=dict([[i, sty] for i, sty in zip(orb_list, cycle(color_cycle))])
Run Code Online (Sandbox Code Playgroud)

接下来,我创建一个循环,在该循环中检索与特征参数值对应的颜色和填充颜色,并在 style_function 中使用它:

for key,value in products.items():
    footprint = json.dumps(wkt.loads(products[key]['footprint']))
    fillColor = orb_colors[products[key]['relativeorbitnumber']]['fillColor']
    color = orb_colors[products[key]['relativeorbitnumber']]['color']
    feat = folium.GeoJson(footprint,
               style_function=lambda x: {'fillColor':fillColor,'color':color},
               highlight_function=lambda feature: {'fillcolor':'green','color':'green'},
               name='Footprint')

    feat.add_to(mapa)
Run Code Online (Sandbox Code Playgroud)

我认为这会起作用,但是所有功能似乎都由我循环中的最后一个“fillColor”和“color”着色。谁能解释这是为什么?我假设在所有循环完成之前不会渲染这些特征,因此“color”和“fillColor”的最后一个值用于所有特征。你能建议我应该如何修改我的代码来解决这个问题吗?或者,也许我以错误的方式处理它,您可以建议一种更清洁的方法?

python folium

3
推荐指数
1
解决办法
3254
查看次数

标签 统计

folium ×1

python ×1