You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动