У меня есть код в моем коде 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))])
Затем я создаю цикл, в котором извлекаю цвет и fillColor, соответствующий значению параметра объекта, и использую его в 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)
Я думал, что это будет работать, однако все функции, кажется, окрашены последними "fillColor" и "color" в моем цикле.Кто-нибудь может объяснить, почему это так?Я предполагаю, что объекты не отображаются до завершения всех циклов, поэтому последние значения «color» и «fillColor» используются для всех объектов.Можете ли вы предложить, как мой код должен быть изменен, чтобы обойти эту проблему?Или, может быть, я все делаю неправильно, и вы можете предложить более чистый метод?