如何在Folium中叠加多位置标签并简化重复代码?
把多个Folium标记叠加到单张地图+代码简化方案
核心思路
- 单地图实例:放弃为每个位置单独创建地图,只初始化一张基础地图,所有标记都挂载到这张图上。
- 结构化数据+循环:把所有位置的坐标、弹窗文本、标签文本整理成统一的数据结构,通过循环批量生成标记,彻底消除重复代码。
完整简化代码
from folium import Map, Circle, Popup, Marker from folium.features import DivIcon # 统一存储所有发射站点的信息 launch_sites = [ { "coordinate": [29.559684888503615, -95.0830971930759], "popup_text": "NASA Johnson Space Center", "label_text": "NASA JSC" }, { "coordinate": [28.562302, -80.577356], "popup_text": "CCAFS LC-40", "label_text": "CCAFS LC-40" }, { "coordinate": [28.563197, -80.576820], "popup_text": "CCAFS SLC-40", "label_text": "CCAFS SLC-40" }, { "coordinate": [28.573255, -80.646895], "popup_text": "KSC LC-39A", "label_text": "KSC LC-39A" }, { "coordinate": [34.632834, -120.610745], "popup_text": "VAFB SLC-4E", "label_text": "VAFB SLC-4E" } ] # 创建基础地图,选择覆盖所有站点的中心坐标和缩放级别 main_map = Map(location=[31, -98], zoom_start=4) # 循环批量添加所有标记 for site in launch_sites: # 添加圆形弹窗标记 circle_marker = Circle( site["coordinate"], radius=1000, color='#d35400', fill=True ).add_child(Popup(site["popup_text"])) main_map.add_child(circle_marker) # 添加文本标签标记 text_marker = Marker( site["coordinate"], icon=DivIcon( icon_size=(20, 20), icon_anchor=(0, 0), html='<div style="font-size: 12; color:#d35400;"><b>%s</b></div>' % site["label_text"] ) ) main_map.add_child(text_marker) # 保存地图到HTML文件(Jupyter环境可直接输出main_map查看) main_map.save("launch_sites_map.html")
代码优势
- 可维护性:新增/修改站点只需要在
launch_sites列表里调整,无需修改逻辑代码。 - 简洁性:消除了大量重复的复制粘贴代码,逻辑清晰易读。
- 可视化效果:所有位置集中在同一张地图,方便整体查看和对比。
内容的提问来源于stack exchange,提问作者Ramsey A.
相关产品推荐
相关产品推荐

