Python/Folium绘制ERA5日风速报image参数缺失问题排查
错误根因
触发EEException: Image.visualize: Parameter 'image' is required.报错的直接原因是传入渲染接口的影像对象为空(null),具体问题点:
- 你调用的
ECMWF/ERA5/DAILY数据集在GEE平台的公开版本时间覆盖范围为1979-01-02至2020-07-09,你设置的2022-04-28至2022-07-01查询区间无任何可用数据,经filterDate()筛选后得到空影像集合,此时调用.first()会返回null值 - 空值传入自定义的
add_ee_layer方法后,ee.Image()无法将其转换为有效影像对象,最终触发影像参数缺失的报错 - 代码额外存在两处逻辑问题:
- 你选择的
u_component_of_wind_10m是东西向风矢量分量,存在负值,设置min:0的可视化规则会截断所有负向值 - 单风分量不等于实际风速,实际风速需要通过东向(u)、北向(v)两个分量合成计算
- 你选择的
修复方法
按以下步骤调整代码即可正常运行:
- 将查询日期范围调整到数据集覆盖的时间区间内
- 若需要绘制实际风速大小,同时筛选u、v两个10米风分量,先对时间区间做均值合成,再通过平方和开根号的方式计算合风速
- 调整可视化参数的数值范围,匹配近地面10米风速的实际取值区间(0-30m/s可覆盖绝大多数近地面场景)
修正后的完整可运行代码如下:
import ee import folium import webbrowser # 认证并初始化GEE ee.Authenticate() ee.Initialize() # 加载ERA5日值数据集 wind_col = ee.ImageCollection('ECMWF/ERA5/DAILY') # 调整查询日期到数据集覆盖范围内 i_date = '2020-04-28' f_date = '2020-07-01' # 定义folium加载GEE图层的方法 def add_ee_layer(self, ee_image_object, vis_params, name): map_id_dict = ee.Image(ee_image_object).getMapId(vis_params) folium.raster_layers.TileLayer( tiles=map_id_dict['tile_fetcher'].url_format, attr='Map Data © Google Earth Engine', name=name, overlay=True, control=True ).add_to(self) folium.Map.add_ee_layer = add_ee_layer # 筛选时间区间,计算平均风速 wind_filtered = wind_col.filterDate(i_date, f_date) wind_mean = wind_filtered.select(['u_component_of_wind_10m', 'v_component_of_wind_10m']).mean() # 合成10米风速 wind_speed = wind_mean.expression( 'sqrt(u**2 + v**2)', { 'u': wind_mean.select('u_component_of_wind_10m'), 'v': wind_mean.select('v_component_of_wind_10m') } ).rename('wind_speed_10m') # 设置风速可视化参数 wind_vis_params = { 'min': 0, 'max': 30, 'palette': ['white', 'blue', 'green', 'yellow', 'orange', 'red'] } # 创建底图 lat, lon = 45.77, 4.855 my_map = folium.Map(location=[lat, lon], zoom_start=5) # 添加风速图层 my_map.add_ee_layer(wind_speed, wind_vis_params, '10m Wind Speed') # 添加图层控件 folium.LayerControl(collapsed=False).add_to(my_map) # 保存结果并打开 save_path = "c:/data/weather.html" my_map.save(save_path) webbrowser.open(save_path)
补充说明:如果需要使用2022年及之后的ERA5日值数据,更换为平台上持续更新的同类ERA5数据集即可,注意同步核对目标数据集的波段名、时间覆盖、分辨率等元数据信息。
内容的提问来源于stack exchange,提问作者bitterjam
相关产品推荐
相关产品推荐

