Python Folium地图仅显示1个弹窗标记,求助排查原因
解决Folium地图仅显示第一个标记弹窗的问题
嘿,我一眼就发现问题所在啦!你把经度和纬度的对应关系搞反了,这才导致后面两个标记不在当前地图的可视范围内,看起来像是没显示出来~
问题根源分析
你的CSV数据列顺序是LON,LAT,但代码里错误地把LON列赋值给了lat变量,LAT列赋值给了lon变量:
# 错误的赋值逻辑 lat = list(data["LON"]) lon = list(data["LAT"])
这相当于把经度当作纬度、纬度当作经度来放置标记,后面两个点的坐标被放到了和初始化地图中心[24.77,55.52]相差极远的位置,超出了当前缩放级别下的视野,所以看不到——并不是没添加成功哦。
修正后的完整代码
import folium import pandas data = pandas.read_csv("test2.txt") # 修正经度和纬度的对应关系 lon = list(data["LON"]) lat = list(data["LAT"]) name = list(data["NAME"]) stat = list(data["STATUS"]) # 初始化地图,也可以用数据的平均坐标作为中心,适配性更好 map = folium.Map(location=[24.771901, 55.528385], zoom_start=7) fg = folium.FeatureGroup(name="My Map") # 遍历所有数据,同时把状态信息加入弹窗(可选优化) for ln, lt, na, st in zip(lon, lat, name, stat): # 用HTML格式化弹窗内容,更清晰易读 popup_content = f"<strong>名称:</strong> {na}<br><strong>状态:</strong> {st}" # 用Popup包装内容,避免长文本被截断 fg.add_child(folium.Marker( location=[lt, ln], popup=folium.Popup(popup_content, max_width=300), icon=folium.Icon(color='green') )) map.add_child(fg) # 可选:让地图自动适配所有标记的范围,打开时自动显示全部标记 # map.fit_bounds(fg.get_bounds()) map.save("Map3.html")
额外优化建议
- 加上
map.fit_bounds(fg.get_bounds())后,打开地图时会自动调整缩放级别和中心,确保所有标记都在可视范围内 - 用HTML格式化弹窗内容,能让信息层级更清晰,提升查看体验
内容的提问来源于stack exchange,提问作者DII




