Folium GroupedLayerControl报错:如何构造含FeatureGroup的分组字典?
解决Folium GroupedLayerControl的AttributeError问题
你的猜测完全正确——报错是因为fgslice里存的是FeatureGroup的名称字符串,而GroupedLayerControl需要接收实际的FeatureGroup对象实例,不是字符串。要解决这个问题,需要把字符串映射到对应的FeatureGroup对象上,有两种常用方法:
方法1:通过全局/局部命名空间获取对象
如果fg1、fg2等已经在全局或当前局部作用域中定义为FeatureGroup实例,可以用globals()(全局作用域)或locals()(局部作用域)直接根据字符串名称获取对象:
修改循环代码如下:
mapfg = {} for a, fgsingle in zip(cat1, fgslice): # 把每个字符串转换成对应的FeatureGroup对象 fg_objects = [globals()[fg_name] for fg_name in fgsingle] mapfg[a] = fg_objects
方法2:提前用字典管理FeatureGroup对象(更安全规范)
如果不想依赖全局命名空间,建议提前把所有FeatureGroup对象存入一个字典,后续直接从字典中取值,避免命名冲突:
# 先定义所有FeatureGroup并存入字典 fg_dict = { 'fg1': fg1, 'fg2': fg2, 'fg3': fg3, 'fg4': fg4, 'fg5': fg5, # ... 补充其他fg对象 } # 构建分组字典 mapfg = {} for a, fgsingle in zip(cat1, fgslice): fg_objects = [fg_dict[fg_name] for fg_name in fgsingle] mapfg[a] = fg_objects
修改后,mapfg里的列表就都是实际的FeatureGroup对象了,再传入GroupedLayerControl就能正常运行。
内容的提问来源于stack exchange,提问作者Laifat
相关产品推荐
相关产品推荐

