关于Folium中TimestampedGeoJson插件的两项技术问题咨询
Folium TimestampedGeoJson 问题解决方案
1. 隐藏路线最后一个点的标记
你代码中已经在TimestampedGeoJson初始化时设置了add_last_point=False,这个参数就是用来控制是否显示路线终点标记的,设置为False即可隐藏该标记。
如果设置后标记仍未消失,可排查以下情况:
- 确认folium版本是否支持该参数(推荐使用0.14.0及以上版本)
- 检查路线坐标列表是否存在重复的终点,导致标记被重复渲染
2. 配置自定义图标
TimestampedGeoJson对自定义图标的配置有特定格式要求,你当前的写法需要调整,以下是修正后的代码示例:
features = [ { 'type': 'Feature', 'geometry': { 'type': 'LineString', 'coordinates': line['coordinates'] }, 'properties': { 'times': line['dates'], 'icon': 'marker', # 必须设为'marker'才能启用自定义图标逻辑 'iconstyle': { 'iconUrl': "./data/test.png", # 确保路径相对于最终生成的HTML文件 'iconSize': [32, 32], # 必填,定义图标尺寸,否则可能无法显示 'iconAnchor': [16, 32] # 可选,设置图标锚点对应地图上的坐标点 }, 'style': { 'color': line['color'], } } } for line in lines ]
关键注意事项:
icon字段必须设置为'marker',插件才会识别并应用自定义图标iconstyle中的iconSize是必填项,缺失会导致图标无法正常渲染- 本地图标路径需与最终生成的HTML文件位置对应,若路径错误,可打开浏览器开发者工具查看控制台的404错误来定位问题
完整代码参考
import folium from folium.plugins import TimestampedGeoJson import osmnx as ox import geopandas as gpd def f(frame): xy = frame.xy longs = xy[0].tolist() lats = xy[1].tolist() return [list(z) for z in zip(longs, lats)] # 初始化地图 portici_gdf = ox.geocode_to_gdf("Portici, Italy") map = folium.Map( location = [portici_gdf.centroid.y, portici_gdf.centroid.x], tiles='cartodbpositron', zoom_start= 15 ) folium.GeoJson(portici_gdf, style_function= lambda x: {'fillcolor':'blue'}).add_to(map) # 构造路线数据 lines = [ { 'coordinates': f(gdf_f.loc['Piazza San Pasquale']['line']), 'dates':['2023-03-31T10:00:00']*len(f(gdf_f.loc['Piazza San Pasquale']['line'])), 'color': 'red', }, ] # 构造Feature集合 features = [ { 'type': 'Feature', 'geometry': { 'type': 'LineString', 'coordinates': line['coordinates'] }, 'properties': { 'times': line['dates'], 'icon': 'marker', 'iconstyle': { 'iconUrl': "./data/test.png", 'iconSize': [32, 32], 'iconAnchor': [16, 32] }, 'style': { 'color': line['color'], } } } for line in lines ] # 添加TimestampedGeoJson插件 TimestampedGeoJson( { 'type':'FeatureCollection', 'features': features, }, period='PT5M', add_last_point=False, ).add_to(map) # 保存地图 map.save('map.html')
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

