news 2026/4/18 10:59:54

基于 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/4/16 12:36:31

Java+TestNG+Maven+Selenium的web自动化测试脚本环境的搭建

一、环境搭建 1、安装java环境 a、 安装JDK b、安装eclipse c、安装maven 参考:http://www.cnblogs.com/s1328/p/4620812.html 2、安装eclipse下的testng插件 Eclipse中点击Help->Install new software -> 点击Add 在Location输入 http://beust.com/e…

作者头像 李华
网站建设 2026/4/18 10:41:16

大模型学习指南:“人工智能+“战略下的机遇与挑战!

简介 文章阐述了"人工智能"战略的重大意义,强调人工智能作为数字经济时代的关键技术正引领全球科技革命。我国虽处全球第一方阵,但仍需突破基础理论和技术瓶颈。随着大模型等技术发展,人工智能正从实验室走向实际应用,创…

作者头像 李华
网站建设 2026/4/17 23:25:06

知识点总结:四:数组

1_数组的概念数组是⼀组相同类型元素的集合,由此可知数组的元素数量要比0大,且都是相同的类型。数组相当于在栈区申请一块连续的、大的(相较于其中的一个元素)内存空间,依照定义的数组的类型将这一块内存进行定义1_一维…

作者头像 李华
网站建设 2026/4/18 10:29:27

接口自动化测试学习 —— Fiddler的运用

1.接口介绍(基础部分) 接口是一种用来定义程序的协议,它描述可属于任何类或结构的一组相关行为应用程序编程接口,它是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力接口测…

作者头像 李华
网站建设 2026/4/18 8:13:58

【详细解读】vivado时序分析报告怎么看?

目录 概念 IO输入延时约束 时序分析报告长什么样 模型 数据 时钟 建立时间裕量 数据路径(到达时间) 时钟路径(需求时间) 概念 时序分析报告,是时序分析器对于约束后的设计进行时序分析,得出的结论。可以查看约束后的效果是否满足时序要求。 IO输入延时约束 IO输入延时约束…

作者头像 李华
网站建设 2026/4/18 8:44:43

对比淘宝、京东、拼多多API,开启电商多元化运营模式!

在当今竞争激烈的电商环境中,商家往往需要同时布局多个平台(如淘宝、京东、拼多多)以最大化触达用户、分散风险并提升销售潜力。然而,多平台运营意味着需要对接多个不同的应用程序接口(API),这带…

作者头像 李华