使用folium绘制地图遇ValueError:位置参数格式错误求助
解决folium MarkerCluster的ValueError:Expected two (lat, lon) values for location
错误原因
问题出在MarkerCluster(locations=[df.Latitude, df.Longitude])这行代码:你传入的是两个独立的Pandas Series(整个纬度列和整个经度列),但folium的MarkerCluster组件要求locations参数是包含(lat, lon)坐标对的可迭代对象(比如列表的列表、元组的列表),而非两个单独的列数据。
修复方案
方法1:移除MarkerCluster的locations参数(推荐)
你后续已经通过循环逐个将CircleMarker添加到marker_cluster中,完全不需要提前给MarkerCluster传入locations参数。修改后的代码如下:
import folium from folium.plugins import MarkerCluster # 创建基础地图 Montgomery = [32.35031, -86.26321] map = folium.Map(location=Montgomery, zoom_start=12, tiles="CartoDB positron") # 初始化MarkerCluster,无需传locations参数 marker_cluster = MarkerCluster().add_to(map) # 循环添加带弹窗的标记 for _lat, _lon, _name in zip(df.Latitude, df.Longitude, df['Crime Name1']): folium.CircleMarker(location=[_lat, _lon], radius=9, fill_opacity=0.9, popup=_name # 可选:添加弹窗显示犯罪名称 ).add_to(marker_cluster) f = 'map_station_cluster.html' map.save(f) map
方法2:正确构造locations参数
如果一定要给MarkerCluster传locations,需要将经纬度列组合成坐标对的列表,用df[['Latitude', 'Longitude']].values.tolist()生成符合要求的格式:
import folium from folium.plugins import MarkerCluster # 创建基础地图 Montgomery = [32.35031, -86.26321] map = folium.Map(location=Montgomery, zoom_start=12, tiles="CartoDB positron") # 构造符合要求的locations:每行经纬度组合成坐标对 locations = df[['Latitude', 'Longitude']].values.tolist() marker_cluster = MarkerCluster(locations=locations).add_to(map) # 循环添加带弹窗的标记 for _lat, _lon, _name in zip(df.Latitude, df.Longitude, df['Crime Name1']): folium.CircleMarker(location=[_lat, _lon], radius=9, fill_opacity=0.9, popup=_name ).add_to(marker_cluster) f = 'map_station_cluster.html' map.save(f) map
注:第一种方法更简洁,适配你需要添加自定义CircleMarker和弹窗的场景;第二种方法适合仅批量添加基础标记的需求。
内容的提问来源于stack exchange,提问作者Shah Rukh
相关产品推荐
相关产品推荐

