使用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
相关产品推荐
相关产品推荐

