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

Folium自定义企业CI图标问题:图标不显示、聚类失效及位置偏移

Folium替换自定义图标后出现的显示与聚类问题

原本通过Folium实现了MarkerCluster聚类,标记使用紫色星标,现在想要将标记替换为企业CI图标hci.png,但修改后出现以下问题:

  • 自定义图标无法显示
  • MarkerCluster聚类功能失效
  • 标记位置存在偏移

原正常运行代码

import folium
import pandas as pd
df = pd.read_excel('p대리점.xlsx')

latitude = 37.58
longitude = 127.0

m = folium.Map(location=[latitude, longitude],
           zoom_start=11.5)

sub_df = df

from folium.plugins import MarkerCluster
m = folium.Map(
location=[latitude, longitude],
zoom_start=15
)

coords = sub_df[['Latitude', 'Longitude']]

marker_cluster = MarkerCluster().add_to(m)

for lat, long in zip(coords['Latitude'], coords['Longitude']):
    folium.Marker([lat, long], 
    icon=folium.Icon(color='purple',icon='star')).add_to(marker_cluster)
m

尝试替换自定义图标的代码

import folium
import pandas as pd
from folium.plugins import MarkerCluster
from folium.features import CustomIcon

df = pd.read_excel('p대리점.xlsx')
sub_df = df

latitude = 37.58
longitude = 127.0

icon_image = 'hci.png'
icon = CustomIcon(
    icon_image,
    icon_size=(75, 95),
    icon_anchor=(10, 30),
)

mm = folium.Map(
    location=[latitude, longitude],
    zoom_start=15
)

coords = sub_df[['Latitude', 'Longitude']]

marker_cluster = MarkerCluster().add_to(mm)

for lat, long in zip(coords['Latitude'], coords['Longitude']):
    folium.Marker([lat, long], icon=icon).add_to(marker_cluster)
mm

解决方案及修正代码

问题原因及修复点

  1. 图标路径问题:确保图标文件和代码脚本在同一目录,或者使用绝对路径避免解析错误
  2. 锚点参数错误:icon_anchor设置不当导致标记位置偏移,应设为图标底部中心
  3. 代码结构问题:重复导入、变量覆盖可能影响聚类功能

完整修正代码

import folium
import pandas as pd
from folium.plugins import MarkerCluster
from folium.features import CustomIcon
import os

# 读取代理点数据
df = pd.read_excel('p대리점.xlsx')
sub_df = df

# 地图中心坐标
latitude = 37.58
longitude = 127.0

# 获取图标绝对路径,避免路径解析错误
icon_image = os.path.abspath('hci.png')

# 创建自定义图标,设置底部中心为锚点解决位置偏移
icon = CustomIcon(
    icon_image,
    icon_size=(75, 95),
    icon_anchor=(37, 95),  # 75宽度的一半是37,95高度的底部位置是95
)

# 初始化地图和聚类层
m = folium.Map(
    location=[latitude, longitude],
    zoom_start=15
)
marker_cluster = MarkerCluster().add_to(m)

# 遍历坐标添加标记到聚类层
coords = sub_df[['Latitude', 'Longitude']]
for lat, long in zip(coords['Latitude'], coords['Longitude']):
    folium.Marker([lat, long], icon=icon).add_to(marker_cluster)

# 显示地图
m

内容的提问来源于stack exchange,提问作者pyinfent

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:51:12