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
解决方案及修正代码
问题原因及修复点
- 图标路径问题:确保图标文件和代码脚本在同一目录,或者使用绝对路径避免解析错误
- 锚点参数错误:
icon_anchor设置不当导致标记位置偏移,应设为图标底部中心 - 代码结构问题:重复导入、变量覆盖可能影响聚类功能
完整修正代码
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
相关产品推荐
相关产品推荐

