news 2026/5/16 9:44:15

基于 GEE 实现 ERA5-Land 年度数据单个年份单波段下载——以土壤水分数据为例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于 GEE 实现 ERA5-Land 年度数据单个年份单波段下载——以土壤水分数据为例

目录

一、参数定义模块:全局配置核心参数

二、空间区域定义模块:按半球划分导出范围

三、数据处理核心模块:从加载到均值计算

四、导出模块:分区域导出至 Google Drive

五、关键设计思路与优势

六、注意事项

七、运行结果


若觉得代码对您的研究 / 项目有帮助,欢迎点击打赏支持!需要完整代码的朋友,打赏后可在后台私信(复制文章标题发给我),我会尽快发您完整可运行代码,感谢支持!

本代码基于 Google Earth Engine(GEE)平台,实现 ERA5-Land 数据集指定年份、指定波段(以表层土壤体积含水量为例)的年度均值计算,并按东西半球划分区域,将结果以 GeoTIFF 格式导出至 Google Drive,核心是完成“数据筛选 - 均值计算 - 分区域导出”的全流程自动化处理。

一、参数定义模块:全局配置核心参数

该模块集中定义了代码运行所需的各类基础参数,便于后续维护和修改,无需在代码中逐个查找调整。

参数类别关键参数说明设计逻辑关键代码片段
数据集配置collection_id:指定 ERA5-Land 每日聚合数据集 ID明确数据来源,GEE 平台中每个官方数据集都有唯一 ID,确保加载正确数据var collection_id = 'ECMWF/ERA5_LAND/DAILY_AGGR';
变量与波段配置-target_source_variable:目标原始变量(如表层土壤含水量)-calculated_band_name:结果波段名(拼接 “_annual_mean” 标识年均值)区分原始数据和处理后数据,波段名语义化,便于后续识别数据属性var target_source_variable = 'volumetric_soil_water_layer_1';var calculated_band_name = target_source_variable + '_annual_mean';
时间范围配置start_year(起始年)、end_year(结束年)限定数据处理的时间区间,支持根据需求调整年份跨度var start_year = 1985;var end_year = 2000;
输出属性配置-output_scale_meters:输出分辨率(约 0.1 度对应 11132 米)-output_folder:Google Drive 目标文件夹名控制输出数据的空间精度,指定存储路径,避免文件杂乱var output_scale_meters = 11132;var output_folder = 'ERA5_Land_SM_1m_AnnualMean_Commented';

二、空间区域定义模块:按半球划分导出范围

由于 ERA5-Land 数据覆盖全球,直接导出易因数据量过大导致任务失败,因此按经度将全球划分为东西两个半球,分别处理:

  • 西半球:经度范围 - 180~0°,纬度范围 - 90~90°(覆盖美洲、大西洋西部等区域)
  • 东半球:经度范围 0~180°,纬度范围 - 90~90°(覆盖欧亚大陆、非洲、大洋洲等区域)
  • 半球字典:将半球名称与对应几何区域封装为字典,便于后续循环遍历,减少重复代码
// 西半球:经度-180~0,纬度-90~90 var western_hemisphere = ee.Geometry.Rectangle([-180, -90, 0, 90], null, false); // 东半球:经度0~180,纬度-90~90 var eastern_hemisphere = ee.Geometry.Rectangle([0, -90, 180, 90], null, false); // 半球字典:便于循环遍历导出 var hemispheres = { 'Western': western_hemisphere, 'Eastern': eastern_hemisphere };

三、数据处理核心模块:从加载到均值计算

数据加载:通过ee.ImageCollection(collection_id)加载 ERA5-Land 每日聚合影像集合,这是 GEE 中加载批量影像数据的标准方式。

// 加载影像集合 var era5_land_daily = ee.ImageCollection(collection_id);

时间筛选:针对每一年,定义 “1 月 1 日 - 12 月 31 日” 的完整时间范围,使用filterDate(start_date, end_date)筛选出该年份的所有影像,确保数据时间完整性。

// 定义当前年份的时间范围(全年) var start_date = ee.Date(year + '-01-01'); var end_date = ee.Date(year + '-12-31'); // 筛选当前年份的目标变量数据 var collection_year_target_band = era5_land_daily .filterDate(start_date, end_date)

波段筛选:select(target_source_variable)仅保留目标变量对应的波段,剔除其他无关波段,减少数据处理量。

.select(target_source_variable); // 仅保留目标变量波段

年均值计算:通过collection_year_target_band.mean()对筛选后的年度影像集合进行像素级时间序列平均,即每个像素的年度均值由该像素全年每日数据计算得出,实现 “日数据→年均值” 的转换。

// 计算目标变量的年均值(像素级时间序列平均) var annual_mean_image = collection_year_target_band.mean();

波段重命名:将计算结果波段重命名为calculated_band_name(含 “annual_mean” 标识),避免与原始波段名混淆,提升数据可读性。

// 重命名结果波段(明确标识为年均值) annual_mean_image = annual_mean_image.rename(calculated_band_name);

四、导出模块:分区域导出至 Google Drive

循环遍历半球:通过字典遍历功能,依次处理东西半球的导出任务,实现代码复用。

// 循环遍历半球,分别导出数据 for (var h_name in hemispheres) { var h_geometry = hemispheres[h_name];

影像裁剪:clip(h_geometry)将年度均值影像裁剪至当前半球的地理范围,确保导出数据仅包含目标区域,减少文件体积。

// 裁剪影像到当前半球范围 var clipped_image = annual_mean_image.clip(h_geometry);

description导出任务描述,将在 GEE 的 Tasks 面板显示,便于区分不同任务(包含变量名、年份、半球信息)。

fileNamePrefix文件名前缀,包含核心信息,便于在 Google Drive 中查找文件。

scale输出分辨率,与前文定义的output_scale_meters一致,确保空间精度统一。

region导出地理范围,即当前半球的几何区域。

fileFormat文件格式指定为 GeoTIFF,这是地理空间数据的标准格式,支持后续在 ArcGIS、QGIS 等软件中进一步处理。

crs坐标参考系指定为 EPSG:4326(WGS84),是全球通用的地理坐标系统,确保数据空间参考统一。

// 定义导出相关参数 var description = 'AnnualMean_' + calculated_band_name + '_' + year + '_' + h_name; var file_name_prefix = target_source_variable + '_annual_mean_' + year + '_' + h_name; // 导出影像到Google Drive Export.image.toDrive({ image: clipped_image, description: description, folder: output_folder, fileNamePrefix: file_name_prefix, scale: output_scale_meters, region: h_geometry, fileFormat: 'GeoTIFF', crs: 'EPSG:4326' });

任务触发提示:代码末尾打印提示信息,告知用户需在 GEE 代码编辑器的 Tasks 面板手动运行导出任务,因 GEE 导出任务需用户手动确认触发,避免用户遗漏操作。

// 打印任务定义完成提示 print('所有导出任务已定义。请检查 GEE 代码编辑器右侧的 "Tasks" 选项卡以运行任务。');

五、关键设计思路与优势

  • 模块化设计:参数集中定义、功能模块分离(区域定义、数据处理、导出),便于后续修改参数(如更换变量、调整年份、修改导出路径),降低维护成本。
  • 分区域处理:按半球划分导出范围,解决了全球数据单次导出量过大导致的任务超时或失败问题,提升导出成功率。
  • 语义化命名:变量名、波段名、文件名均包含关键信息(如变量类型、年份、半球),增强代码可读性和数据可识别性。
  • 自动化流程:通过嵌套循环(年份循环 + 半球循环),实现多年份、多区域的自动化处理,无需手动逐个年份、逐个区域配置任务,大幅提升效率。

六、注意事项

  • 数据集可用性:ERA5-Land 数据集的时间跨度有限,需确保start_yearend_year在数据集的可用时间范围内,否则会筛选出空集合,导致计算失败。
  • 任务运行:代码仅定义导出任务,需用户在 GEE Tasks 面板手动启动任务,且导出速度受网络状况、GEE 服务器负载影响,大年份跨度的任务可能需要较长时间。
  • 存储容量:导出的 GeoTIFF 文件会占用 Google Drive 存储空间,需提前确保 Drive 有足够容量,尤其是年份跨度大、分辨率高的场景。
  • 权限设置:需确保 GEE 账户已授权访问 Google Drive,否则导出任务会因权限不足失败。

七、运行结果

点击RUN即可下载数据
控制台输出的相关信息

下面展示的是部分数据的制图结果:

1985年全球土壤湿度
1990年全球土壤湿度
1995年全球土壤湿度
2000年全球土壤湿度

若觉得代码对您的研究 / 项目有帮助,欢迎点击打赏支持!需要完整代码的朋友,打赏后可在后台私信(复制文章标题发给我),我会尽快发您完整可运行代码,感谢支持!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 12:57:47

Miniconda-Python3.10镜像中配置SSH免密登录跳板机

Miniconda-Python3.10 镜像中配置 SSH 免密登录跳板机 在现代 AI 工程实践中,一个常见的痛点是:你已经写好了训练脚本、环境也配好了,却卡在“怎么安全又高效地连上远程 GPU 节点”这件事上。每次输入密码不仅繁琐,还让自动化成了…

作者头像 李华
网站建设 2026/5/10 2:08:02

在云服务器上部署Miniconda-Python3.11并运行PyTorch训练任务

在云服务器上部署 Miniconda-Python3.11 并运行 PyTorch 训练任务 在当今 AI 研发节奏日益加快的背景下,一个常见却令人头疼的问题浮出水面:为什么代码在本地能跑,在服务器上却报错?依赖版本不一致、Python 环境混乱、GPU 驱动不匹…

作者头像 李华
网站建设 2026/5/16 0:07:03

Miniconda-Python3.10镜像中设置ulimit提升文件句柄数

Miniconda-Python3.10镜像中设置ulimit提升文件句柄数 在构建大规模AI训练环境或运行高并发数据处理任务时,你是否曾遇到过这样的报错? OSError: [Errno 24] Too many open files这行看似简单的错误,往往出现在最不该出现的时刻——模型已经跑…

作者头像 李华
网站建设 2026/5/15 20:27:07

Miniconda-Python3.10镜像配合GitHub Actions实现CI/CD流水线

Miniconda-Python3.10镜像配合GitHub Actions实现CI/CD流水线 在数据科学与AI开发的日常中,你是否曾遇到这样的场景:本地训练模型一切正常,推送到仓库后CI却报错“找不到模块”?或者团队成员反复追问“你的环境是怎么装的&#xf…

作者头像 李华
网站建设 2026/5/3 10:39:58

Miniconda-Python3.10镜像中安装OpenCV进行图像处理

在 Miniconda-Python3.10 镜像中高效部署 OpenCV 实现图像处理 在当今计算机视觉技术迅猛发展的背景下,图像处理早已不再是实验室里的小众研究方向,而是深入到了自动驾驶、工业质检、医疗影像分析乃至消费级智能设备的方方面面。越来越多的开发者和研究…

作者头像 李华