使用folium的TimestampedGeoJson加载MultiPolygon提示Time Not Available求助
问题原因
Time Not Available报错是因为TimestampedGeoJson插件无法识别你要素中time属性的格式,核心原因有两个:
- 你的
outputfile.json中date字段不符合插件要求的ISO 8601标准时间格式:插件仅支持字符串类型的标准时间,比如2020、2020-01-01,如果你的date是整数类型、或者是2020年、01/2020这类非标准格式,都会触发解析失败 - 部分要素的
date字段为空、或缺失,也会导致时间读取失败
解决方案
第一步:先校验你的时间字段格式
先运行以下代码确认date字段的类型和值:
with open('outputfile.json') as f: poly = json.load(f) for idx, pol in enumerate(poly): print(f"第{idx}条数据date值:{pol['date']},类型:{type(pol['date'])}")
第二步:针对性调整格式
根据校验结果调整time属性的赋值逻辑,同时过滤无效数据,修改后的完整代码如下:
import folium from folium.plugins import TimestampedGeoJson import json with open('outputfile.json') as f: poly = json.load(f) features = [] for pol in poly: # 过滤date为空的无效要素 if not pol.get('date'): continue # 把date转成标准字符串格式 # 如果是整数年份,直接转字符串即可 time_val = str(pol['date']) # 如果需要更规范的ISO格式,可以补全为年月日格式,比如2020转成2020-01-01 # time_val = f"{pol['date']}-01-01" features.append({ 'type': 'Feature', 'geometry': { 'type': 'MultiPolygon', 'coordinates': pol['coordinates'], }, 'properties': { 'ABBREVNAME': pol['ABBREVNAME'], 'time': time_val, } }) mapa = folium.Map( location = [56.130,-106.35], tiles='openstreetmap', zoom_start = 3 ) TimestampedGeoJson( {'type': 'FeatureCollection', 'features': features}, period='P1Y', # 按年切换时间,和你的数据时间单位匹配即可 add_last_point=False # 面要素无需保留最后点位,关闭即可 ).add_to(mapa) # 导出为本地html文件打开测试,比直接在notebook中渲染更稳定 mapa.save('canada_time_map.html')
如果调整后还是报错,可以额外指定duration参数,和你的时间间隔匹配即可,比如按年展示的话设置duration='P1Y'。
内容的提问来源于stack exchange,提问作者Ericson Mattoso
相关产品推荐
相关产品推荐

