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

使用Folium加载GeoJSON时如何修改Point点要素的自定义图标

问题原因
  • folium 中 GeoJson 类的 style_function 仅支持配置线、面类矢量要素的样式(颜色、线宽、填充色等),无法通过返回 icon 参数实现点要素的自定义图标渲染
  • 点要素的自定义图标需要通过 GeoJson 的专属参数 point_to_layer 配置实现
修复后可运行代码
import pandas as pd
import geopandas as gpd
import folium
from shapely.geometry import Point, LineString


def style_function(feature):
    # 仅处理线、面类要素的样式
    if 'LineString' == feature.get('geometry').get('type'):
        return {"color" : "#00FF00"}
    # 点要素的样式不在此处配置
    return {}

def point_to_layer(feature, latlng):
    # 专门处理点要素的渲染逻辑
    if 'Point' == feature.get('geometry').get('type'):
        # 注意图标文件路径要正确,此处为同级目录的Flamme.PNG
        icon = folium.features.CustomIcon(icon_image="Flamme.PNG", icon_size =(15,15))
        return folium.Marker(location=latlng, icon=icon)

xy1 = Point((10,10))
line1 = LineString([(30,-30), (30, 30), (-30, 30), (-30, -30), (30,-30)])

df = pd.DataFrame({'geometry':[xy1, line1]})
gdf = gpd.GeoDataFrame(df, geometry=df['geometry'], crs="EPSG:4326")

m = folium.Map(location=[0, 0], zoom_start=2)
# 新增point_to_layer参数传入点要素处理函数
folium.GeoJson(gdf, name="geojson_layer", style_function=style_function, point_to_layer=point_to_layer).add_to(m)
folium.LayerControl().add_to(m)

# 可保存为html查看效果
m.save("map.html")
补充说明
  • 确保你的Flamme.PNG图标文件放在代码运行的同级目录下,若放在其他位置请填写完整的绝对路径
  • 运行代码后可以直接打开生成的map.html文件查看渲染效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:15:10