目录
一、区域定义与地图初始化
二、数据集加载
三、年份筛选与数据计算
四、数据导出到 Google Drive
五、代码关键特性与注意事项
六、运行结果
若觉得代码对您的研究 / 项目有帮助,欢迎点击打赏支持!需要完整代码的朋友,打赏后可在后台私信(复制文章标题发给我),我会尽快发您完整可运行代码,感谢支持!
本代码基于 Google Earth Engine(GEE)平台,利用 ECMWF(欧洲中期天气预报中心)发布的 ERA5-LAND 月度聚合数据集,自动提取 2024 年全球指定区域(北纬 90° 至南纬 60°、东经 180° 至西经 180°)的三类径流数据,并将其导出为 GeoTIFF 格式存储到 Google Drive 中,数据单位最终转换为毫米(mm),具体包括:
- 总径流总和(runoff_sum)
- 地下径流总和(sub_surface_runoff_sum)
- 地表径流总和(surface_runoff_sum)
一、区域定义与地图初始化
var geometry = ee.Geometry.Polygon( [[[-180, 90], [-180, -60], [180, -60], [180, 90]]], null, false); Map.centerObject(geometry, 3);- 区域几何对象创建:
ee.Geometry.Polygon():GEE 中用于创建多边形区域的核心函数,参数为顶点坐标数组、投影信息(此处为null,默认采用 GEE 内部投影)、是否闭合(false表示按顶点顺序自动闭合)。- 顶点坐标含义:四个顶点分别定义了全球范围的矩形区域 —— 西经 180° 北纬 90°(北极点附近)、西经 180° 南纬 60°、东经 180° 南纬 60°、东经 180° 北纬 90°,覆盖了除南极洲大部分区域外的全球陆地与海洋范围。
- 地图居中设置:
Map.centerObject(geometry, 3):将地图视图中心定位到上述定义的区域,第二个参数3为地图缩放级别(GEE 缩放级别 1-20,数值越小视野越广,3 级可显示全球全貌),方便在 GEE 编辑器中可视化查看研究区域。
二、数据集加载
var runoff = ee.ImageCollection("ECMWF/ERA5_LAND/MONTHLY_AGGR");ee.ImageCollection():GEE 中用于加载影像集合(多幅影像组成的数据集)的函数,参数为数据集的 GEE 内置 ID。- 数据集说明:
ECMWF/ERA5_LAND/MONTHLY_AGGR是 ERA5-LAND 数据集的月度聚合版本,与原始逐小时数据相比,已提前完成月度尺度的统计聚合,包含降水、蒸发、径流等多个水文气象变量,适合长时间尺度的区域水文分析。
三、年份筛选与数据计算
for (var year = 2024; year <= 2024; year++) { var yearly = runoff.filterDate(year + '-01-01', year + '-12-31'); // 总径流计算(关键步骤示例) var runoffSum = yearly.select('runoff_sum').sum().multiply(1000).rename('runoff_sum_' + year).clip(geometry); // 地下径流、地表径流计算逻辑与总径流一致,仅筛选的变量名不同 }- 年份循环:此处为单年份循环(2024 年),通过
for循环限定数据提取的时间范围,若需扩展到多年(如 2000-2024 年),可修改循环条件为var year = 2000; year <= 2024; year++。 - 时间筛选:
yearly = runoff.filterDate(...):对加载的月度影像集合按时间筛选,提取指定年份 1 月 1 日至 12 月 31 日的所有月度影像(共 12 幅,对应全年 12 个月)。 - 径流数据计算(核心步骤):
select('runoff_sum'):从月度影像集合中筛选出 “总径流总和” 对应的波段(ERA5-LAND 数据集中,不同变量以不同波段存储,runoff_sum为总径流波段名,sub_surface_runoff_sum为地下径流波段名,surface_runoff_sum为地表径流波段名)。sum():对筛选后的 12 幅月度影像进行像素级求和运算,得到全年的径流总和(原始单位为米,m)。multiply(1000):单位转换,将米(m)转换为毫米(mm)(1m=1000mm),符合水文数据常用单位习惯。rename(...):为计算后的影像波段重命名,添加年份后缀(如runoff_sum_2024),避免多年份数据导出时波段名冲突。clip(geometry):按之前定义的geometry区域对影像进行裁剪,只保留目标区域内的数据,去除区域外的无效值,减少数据存储量。
四、数据导出到 Google Drive
以总径流数据导出为例,地下径流、地表径流导出逻辑完全一致,仅参数细节不同:
Export.image.toDrive({ image: runoffSum, description: year + '_runoff_sum_mm', fileNamePrefix: year + '_runoff_sum_mm', folder: 'ERA5L-runoff-mm', region: geometry, scale: 5000, crs: 'EPSG:4326', maxPixels: 1e13 });- 导出函数说明:
Export.image.toDrive():GEE 中用于将单幅影像导出到 Google Drive 的核心函数,参数以键值对形式传入,定义导出的各项配置。 - 关键参数解析:
image:指定待导出的影像对象(此处为计算后的全年总径流影像runoff_sum)。description:导出任务的描述名称(在 GEE 任务列表中显示,便于区分不同任务)。fileNamePrefix:导出文件的前缀名,最终导出的 GeoTIFF 文件名为 “前缀名.tif”(如2024_runoff_sum_mm.tif)。folder:Google Drive 中存储文件的文件夹名称(需提前在 Google Drive 中创建,或由导出任务自动创建)。region:导出的数据区域,与之前裁剪的geometry保持一致,确保导出范围准确。scale:导出影像的空间分辨率,单位为米(m),此处5000表示影像像素大小为 5000m×5000m(约 25 平方公里 / 像素),ERA5-LAND 数据集的原生空间分辨率为 0.1°(约 11km),此处设置为 5km 是平衡分辨率与数据量的选择。crs:导出影像的投影坐标系,EPSG:4326为 WGS84 地理坐标系(经纬度投影),是全球通用的地理坐标系,便于后续在 ArcGIS、QGIS 等软件中处理。maxPixels:允许导出的最大像素数量,GEE 默认限制导出像素数为 1e13(10 万亿),此处设置为 1e13 是为了避免因全球范围数据量过大导致导出失败(5km 分辨率的全球区域像素数约为 1e8 级别,远小于 1e13)。
五、代码关键特性与注意事项
关键特性:
- 自动化程度高:通过循环与筛选逻辑,可快速批量提取指定年份的三类径流数据,无需手动逐幅影像处理。
- 数据标准化:统一完成单位转换(m→mm)、投影设置(EPSG:4326)和区域裁剪,导出数据可直接用于后续水文模型、空间分析等工作。
- 可扩展性强:修改循环年份范围可扩展到多年数据提取,修改
geometry参数可调整研究区域(如某一流域、某一国家),修改scale参数可调整导出分辨率。
注意事项:
- GEE 权限与资源:使用前需拥有 Google 账号并登录 GEE 平台,导出全球范围数据时需确保 GEE 账户有足够的计算资源(批量导出多年数据时建议分批次执行,避免任务队列拥堵)。
- 文件夹创建:需提前在 Google Drive 中创建名为
ERA5L-runoff-mm的文件夹,否则导出文件会存储在 Google Drive 根目录,不利于文件管理。 - 数据精度说明:ERA5-LAND 是再分析数据集,基于观测数据与数值模型融合生成,径流数据为模拟结果,使用时需结合实地观测数据进行验证,尤其适用于大尺度区域分析,小尺度区域需谨慎使用。
- 变量名准确性:ERA5-LAND 数据集的波段名(如
runoff_sum)是固定的,修改时需参考 GEE 数据集的官方文档,避免因波段名错误导致数据提取失败。
六、运行结果
若觉得代码对您的研究 / 项目有帮助,欢迎点击打赏支持!需要完整代码的朋友,打赏后可在后台私信(复制文章标题发给我),我会尽快发您完整可运行代码,感谢支持!