我在Python代码中有一个循环,用于向我的Folium地图添加功能。每个功能都包含在一个字典中(称为产品),每个功能都有一个参数字典(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))])
接下来,我创建一个循环,在循环中获取特征参数值对应的颜色和填充颜色,并在样式函数中使用它们:
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)
我原以为这个方法可以奏效,但是我的循环中似乎所有的特征都被最后一次“fillColor”和“color”所着色。有人能解释一下这是为什么吗?我猜想所有的特征直到所有循环结束后才被渲染,因此最后一个“color”和“fillColor”的值被用于所有的特征。你能建议如何修改我的代码来解决这个问题吗?或者也许我走了一条错误的路,你能提供一个更加简洁的方法吗?