news 2026/6/23 6:28:37

基于 GEE 的 ERA5-Land 数据集获取全球 0.1° 空间分辨率的相对湿度与比湿数据

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于 GEE 的 ERA5-Land 数据集获取全球 0.1° 空间分辨率的相对湿度与比湿数据

目录

一、基础参数与数据集初始化

二、湿度参数计算(核心处理步骤)

三、年度均值合成

四、导出范围定义与影像导出

五、关键技术要点总结与注意事项

六、运行结果


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

本代码基于 Google Earth Engine(GEE)平台,利用 ECMWF/ERA5_LAND/MONTHLY_AGGR 数据集(ERA5-Land 月度聚合数据),计算 1960-2020 年全球范围内的相对湿度(RH)和比湿(q),并按年份生成年度均值影像,最终将各年份的相对湿度和比湿影像导出至 Google Drive。

一、基础参数与数据集初始化

var startYear = 1960, endYear = 2020; var col = ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR') .filterDate(startYear + '-01-01', (endYear + 1) + '-01-01') .select(['temperature_2m', 'dewpoint_temperature_2m', 'surface_pressure']);
  • 参数定义:明确数据时间范围为 1960 年至 2020 年,通过startYearendYear两个变量固定起止年份,方便后续代码复用和修改。
  • 数据集调用
    • ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR'):加载 GEE 内置的 ERA5-Land 月度聚合数据集,该数据集包含全球地表及近地面多种气象要素的月度统计数据,精度和完整性较高。
    • filterDate(...):对数据集进行时间筛选。由于 GEE 的filterDate为左闭右开区间(包含起始日期,不包含结束日期),因此结束日期设置为endYear + 1的 1 月 1 日,确保 2020 年 12 月的月度数据被完整包含。
    • select(...):筛选数据集所需的 3 个核心气象变量,避免加载冗余数据,提升计算效率:
      • temperature_2m:2 米高度气温(单位:开尔文 K);
      • dewpoint_temperature_2m:2 米高度露点温度(单位:开尔文 K);
      • surface_pressure:地表气压(单位:帕斯卡 Pa)。

二、湿度参数计算(核心处理步骤)

var withHum = col.map(function(img) { var T = img.select('temperature_2m').subtract(273.15); var Td = img.select('dewpoint_temperature_2m').subtract(273.15); var sp = img.select('surface_pressure'); // 饱和水汽压计算 var es = T.expression('611.2 * exp(17.62 * tc / (243.12 + tc))', {tc: T}); // 实际水汽压计算 var e = Td.expression('611.2 * exp(17.62 * td / (243.12 + td))', {td: Td}); // 相对湿度计算 var rh = e.divide(es).multiply(100).rename('RH'); // 比湿计算 var q = e.multiply(0.622).divide(sp.subtract(e.multiply(0.378))).rename('q'); return img.select(0).addBands([rh, q]); });

该部分通过map函数遍历数据集中的每一幅月度影像,逐像元计算相对湿度(RH)和比湿(q),是代码的核心逻辑:

  • 温度单位转换:原始气温(T)和露点温度(Td)均为开尔文(K),通过subtract(273.15)转换为摄氏度(℃),符合后续水汽压计算公式的单位要求。
  • 水汽压计算
    • 饱和水汽压(es):基于气温(T),采用世界气象组织(WMO)推荐的 Magnus-Tetens 公式计算,表征某一温度下空气所能容纳的最大水汽量。公式中611.2为 0℃时的饱和水汽压(Pa),17.62243.12为经验常数。
    • 实际水汽压(e):基于露点温度(Td),采用与饱和水汽压相同的公式计算,表征空气实际含有的水汽量(露点温度是空气水汽达到饱和时的温度)。
  • 目标湿度参数计算
    • 相对湿度(RH):定义为实际水汽压与同温度下饱和水汽压的比值(百分比形式),反映空气接近饱和的程度。通过e.divide(es)计算比值,再multiply(100)转换为百分比,最后用rename('RH')为新波段命名。
    • 比湿(q):定义为水汽质量与湿空气总质量的比值(单位:kg/kg),是气象和气候研究中常用的湿度指标(不受气压影响)。计算公式中0.6220.378为水汽与干空气的分子量相关常数,通过该公式将水汽压和地表气压转换为比湿,命名为q
  • 影像输出return img.select(0).addBands([rh, q])表示保留原始数据集中的第一个波段(此处为 2 米气温),并将计算得到的 RH 和 q 作为新波段添加到影像中,形成包含原始气温和两个湿度参数的新影像集合withHum

三、年度均值合成

var years = ee.List.sequence(startYear, endYear); var annual = ee.ImageCollection.fromImages( years.map(function(y) { y = ee.Number(y); var mean = withHum.filter(ee.Filter.calendarRange(y, y, 'year')) .mean() .set('year', y) .set('system:index', y.format('%d')); return mean; }) );
  • 年份序列生成ee.List.sequence(startYear, endYear)生成 1960-2020 年的年份列表(整数序列),作为后续按年份筛选数据的依据。
  • 年度均值计算
    • 通过years.map(...)遍历每一个年份,对withHum影像集合进行按年筛选和均值计算:
      • filter(ee.Filter.calendarRange(y, y, 'year')):筛选出当前年份(y)的所有月度影像;
      • .mean():对该年份的月度影像进行逐像元均值计算,得到年度平均影像(包含气温、RH、q 三个波段的年度均值);
      • .set('year', y).set('system:index', y.format('%d')):为生成的年度影像添加属性(year字段记录年份)和索引(以年份作为影像索引),方便后续按年份筛选和导出。
    • ee.ImageCollection.fromImages(...):将所有年份的年度均值影像整合为新的影像集合annual,该集合包含 61 幅影像(1960-2020 年每年 1 幅)。

四、导出范围定义与影像导出

var region = ee.Geometry.Rectangle([-180, -90, 180, 90], null, false); years.evaluate(function(yearList) { yearList.forEach(function(y) { var img = annual.filter(ee.Filter.eq('year', y)).first(); // 相对湿度导出 Export.image.toDrive({ image: img.select('RH'), description: 'ERA5Land_RH_' + y, folder: 'ERA5Land_RH', scale: 11132, region: region, maxPixels: 1e13 }); // 比湿导出 Export.image.toDrive({ image: img.select('q'), description: 'ERA5Land_q_' + y, folder: 'ERA5Land_q', scale: 11132, region: region, maxPixels: 1e13 }); }); });
  • 导出范围定义ee.Geometry.Rectangle([-180, -90, 180, 90], null, false)定义导出的空间范围为全球(经度:-180°~180°,纬度:-90°~90°)。其中null表示使用默认投影,false表示不闭合几何图形(矩形本身已闭合,此处不影响结果)。
  • 客户端与服务器端数据交互years.evaluate(function(yearList) { ... }):GEE 中ee.List是服务器端对象,无法直接在客户端(如浏览器)进行遍历,evaluate方法将服务器端的年份列表years转换为客户端可识别的普通数组yearList,从而实现逐年份循环导出。
  • 影像导出配置:对每一年的年度影像,分别筛选出RH(相对湿度)和q(比湿)波段,通过Export.image.toDrive导出至 Google Drive:
    • image: img.select('RH')/img.select('q'):指定导出的目标波段;
    • description: 'ERA5Land_RH_' + y/'ERA5Land_q_' + y:导出文件的名称(包含数据集名称、参数类型和年份,如ERA5Land_RH_1960),便于区分和管理;
    • folder: 'ERA5Land_RH'/'ERA5Land_q':指定导出文件在 Google Drive 中的存储文件夹(会自动创建该文件夹),将不同参数的文件分类存储;
    • scale: 11132:导出影像的空间分辨率(单位:米),约等于 1°×1°(赤道处 1° 经度约为 111320 米,此处scale=11132对应约 0.1° 分辨率),该分辨率与 ERA5-Land 数据集的原始分辨率匹配;
    • region: region:指定导出的空间范围(全球);
    • maxPixels: 1e13:设置导出影像的最大像元数限制(1×10¹³,远大于全球 0.1° 分辨率影像的像元数,避免因像元数超限导致导出失败)。

五、关键技术要点总结与注意事项

关键技术要点总结:

  • GEE 数据处理逻辑:遵循 “服务器端处理为主、客户端交互为辅” 的原则,通过mapfilter等方法实现批量数据处理,利用evaluate实现服务器端与客户端的数据转换。
  • 气象参数计算原理:基于经典的 Magnus-Tetens 公式计算水汽压,再通过水汽压、地表气压等基础参数推导相对湿度和比湿,确保计算结果的科学性和准确性。
  • 导出优化配置:通过合理设置scale(分辨率)、maxPixels(最大像元数)、folder(存储文件夹)等参数,保证导出过程的稳定性和结果的可用性。
  • 数据完整性保障:时间筛选时采用 “左闭右开” 区间设计,确保包含完整的目标年份数据;导出参数时分类存储、命名规范,便于后续数据管理和分析。

注意事项:

  • 该代码运行依赖 Google Earth Engine 账号和稳定的网络环境,且导出大量影像(61 年 ×2 个参数 = 122 幅影像)需要一定的时间(取决于 GEE 服务器负载),需耐心等待导出完成。
  • 导出的影像格式默认为 GeoTIFF(GEE 导出的默认 raster 格式),可直接用于 ArcGIS、QGIS 等 GIS 软件的空间分析。
  • 若需调整时间范围(如延长至 2023 年)或空间范围(如仅导出某一区域),可修改startYearendYearregion的定义,无需改动核心计算逻辑。

六、运行结果

点击RUN即可下载数据
部分相对湿度(Relative Humidity,RH)数据制图结果
部分比湿(Specific Humidity,q)数据制图结果

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

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

关于Comtos Linux (朱雀)主体源码的选择

关于Comtos Linux (朱雀) 主体源码的选择问: 为什么Comtos Linux 9 (朱雀)不以RHEL 9或 Rocky Linux 9或AlmaLinux 9的稳定的源码为主体,而使用滚动的CentOS Stream 9的源码为主体呢? 使用稳定的RHEL 9或Rocky Linux 9或AlmaLinux 9的源码为…

作者头像 李华
网站建设 2026/6/23 15:52:29

超级Mini小车功能说明

巴掌车模01 超Mini小车功能说明1. 按键说明 小车左侧按键为启动按键,启动时需小车前方传感器处于背景布上(自动校准传感器数据),启动后小车会自行往前移动,若遇到赛道(白色胶带),则会沿着赛道行驶。 小车右侧为关机按键&#xff…

作者头像 李华
网站建设 2026/6/22 21:32:32

STC32G12单片机替换成STC32F12单片机,直接替换的结果

简 介: 本文测试了STC32F12单片机替换STC32G12单片机的可行性。实验表明,虽然两款单片机管脚兼容,但32F12增加了硬件数学运算单元。测试发现,直接下载32G12程序无法运行,需重新编译工程。使用硬件数学运算后&#xff0…

作者头像 李华
网站建设 2026/6/23 17:16:00

SIEMENS 6SL3210-1PE33-0CL0 变频器

常见故障及解决方法‌通信故障‌‌原因‌:通信线路松动、参数设置错误(如波特率、设备名称不匹配)或接口损坏。‌解决‌:检查线路连接,核对参数一致性,更换损坏接口。‌过流/过压/欠压‌‌过流‌&#xff1…

作者头像 李华
网站建设 2026/6/23 13:11:40

软件测试常用的7种方法,最后一个是升职加薪关键!(零基础小白转行IT互联网高效进阶)

一般而言,软件测试方法分为黑盒测试、白盒测试、灰盒测试、静态测试、动态测试、手动测试、自动化测试和探索性测试等类型。 【1】黑盒测试 黑盒测试又称功能测试、数据驱动测试或基于需求规格说明书的功能测试。该测试方法验证被测对象使用质量及外部质量表现。 …

作者头像 李华
网站建设 2026/6/23 17:16:02

【RTOS】EasyLog的移植与使用

当前log的突出问题: ①log不方便定位到源程序所在位置 ②log不分主次,比较难生成想要的信息 1. 彩色log 1.1 编译器内置宏:__FILE__,__LINE__ led1下直接打印出当前文件的行号和名字 led2复制粘贴过来,改一下引脚 实验现象 哎…

作者头像 李华