You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Streamlit中结合Folium实现Marker悬停显示图片弹窗?

解决方案

要实现鼠标悬停Marker时显示对应S3图片,你需要手动遍历DataFrame创建标记并绑定悬停提示框(Tooltip),因为add_circle_markers_from_xy方法无法直接自定义悬停内容。以下是修改后的代码:

import streamlit as st
import leafmap.foliumap as leafmap
import folium  # 直接调用folium的Tooltip和CircleMarker组件

st.dataframe(df)

m = leafmap.Map(center=(-31.416668, -64.183334), zoom=5)

# 遍历DataFrame每行数据,创建带悬停图片的标记
for idx, row in df.iterrows():
    # 提取经纬度和对应S3图片地址
    lon, lat = row["longitude"], row["latitude"]
    img_url = row["image"]
    
    # 构建悬停提示框:用HTML嵌入图片,可调整width/height适配显示
    tooltip = folium.Tooltip(f'<img src="{img_url}" width="200" height="150">')
    
    # 创建圆形标记并绑定悬停提示
    marker = folium.CircleMarker(
        location=[lat, lon],
        radius=5,  # 标记大小可按需调整
        color='blue',
        fill=True,
        fill_color='blue',
        fill_opacity=0.7
    ).add_child(tooltip)
    
    m.add_child(marker)

# 渲染地图到Streamlit页面
m.to_streamlit(width=700, height=500)

注意事项:

  • 若图片无法加载,需检查你的S3存储桶是否配置了CORS规则,允许Streamlit应用所在域名访问图片资源
  • 可根据需求调整<img>标签的width和height参数,优化图片显示尺寸

内容的提问来源于stack exchange,提问作者Juan Cruz Alric Cortabarria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 22:25:25