Folium调用add_child添加CircleMarker时location参数报错
问题根因
报错出在CircleMarker的location参数类型不符合Folium的校验规则。
你通过data[['LAT','LON']].values拿到的是NumPy ndarray数组,数组内的元素是NumPy自定义的float64类型,不是Python原生浮点数。哪怕打印出来的数值和格式看起来和要求的[纬度, 经度]列表完全一致,Folium无法识别NumPy类型的序列和数值,就会抛出参数相关错误。
修复方案
两种改法二选一即可:
- 方案1:将NumPy数组转为Python原生列表,在
.values后追加.tolist()方法即可,对应代码修改为:
fg_volcanoes.add_child(folium.CircleMarker(location=data[['LAT','LON']].values.tolist(), radius=6, popup=f"{data['ELEV']} mts", fill_color='green' if data['ELEV'] < 1000 else 'orange' if data['ELEV'] < 3000 else 'red', color="grey", fill_opacity=1))
- 方案2:手动取字段值转为原生浮点后拼接列表,不依赖
.values属性:
location=[float(data['LAT']), float(data['LON'])]
额外遗漏修复
你的代码里创建完fg_volcanoes要素组、循环添加完火山标记后,没有把该要素组添加到地图实例中,修复完类型问题后记得补加一行代码,否则火山标记不会在最终生成的地图里显示:
map.add_child(fg_volcanoes)
补加位置放在map.add_child(fg.LayerControl())这行之前即可。
内容的提问来源于stack exchange,提问作者Carlos Escobar
相关产品推荐
相关产品推荐

