Google Earth Engine (GEE):提取ERA5气象数据至点/面要素集,导出为SHP/CSV

**

Google Earth Engine (GEE):提取ERA5气象数据至点/面要素集,导出为SHP/CSV

**

ERA5气象再分析数据

ERA5 是第五代 ECMWF 全球气候大气再分析。 再分析将模型数据与世界各地的观测结果结合起来,形成全球完整且一致的数据集。
数据范围:全球
数据可用时间:1979/1/1 - 现在
GEE已存储ERA5月值、日值、小时等分辨率数据:
在这里插入图片描述

GEE获取ERA5数据

实际使用气象数据时往往只取点/面等感兴趣区的数据,如果去CDS官网下载数据,往往是几十个G,但是只提取一小部分使用,GEE能够提供云端ERA5数据的查询、处理和导出等服务,节约科学研究的数据处理时间。废话不多说,直接上代码(提取142个湖泊中心点要素数据集2005-2022年温度、降水、辐射、气压等日值):
在这里插入图片描述

// 数据提取时间范围
var startDate = '2005-01-01';
var endDate = '2023-01-01';
// 矢量数据,每个要素是一个提取单元
var regions = Lake142CenterPoints;
// 确定提取值的统计方式,比如min/max/median....,reduceName也需要修改
var reduce = ee.Reducer.mean();
var reduceName = 'mean';


// ---------------------------------calc daily data----------------------------------
// 按照时间范围筛选数据
var ERA5DailyLatest_filterdate = ERA5DailyLatest.filterDate(startDate, endDate);
var ERA5Daily_filterdate = ERA5Daily.filterDate(startDate, endDate);
print(ERA5DailyLatest_filterdate, ERA5Daily_filterdate);

// 空的结果要素集合
var regions_data_modify = ee.FeatureCollection(ee.List([]));

// 提取ee.ImageCollection("ECMWF/ERA5/DAILY")数据的函数
var getERA5DailyLatest = function(image, regions) {
  var varName = image.bandNames().get(0);
  // add a column named reduceName
  var regions_data = image.reduceRegions(ee.FeatureCollection(regions), reduce);
  var date = image.date().format().slice(0,10);
  
  
  // writes the date in each feature as a new column named date
  // get temp with unit oC
  if (['mean_2m_air_temperature', 'minimum_2m_air_temperature', 'maximum_2m_air_temperature', 'dewpoint_2m_temperature'].indexOf(varName) !== -1) {
    regions_data_modify = regions_data.map(function(feature) {
      return feature.set(date, feature.get(reduceName).subtract(ee.Number(273.15)));
      });
    return regions_data_modify;
  }
  
  // get pr with unit mm
  else if (['total_precipitation'].indexOf(varName) !== -1) {
    regions_data_modify = regions_data.map(function(feature) {
      return feature.set(date, feature.get(reduceName).multiply(ee.Number(1000.0)));
      });
    return regions_data_modify;
  }
  
  // get pres with unit hPa
  else if (['surface_pressure'].indexOf(varName) !== -1) {
    regions_data_modify = regions_data.map(function(feature) {
      return feature.set(date, feature.get(reduceName).multiply(ee.Number(0.01)));
      });
    return regions_data_modify;
  }
  
  // get ws with unit m/s, unit did not need change
  else {
    regions_data_modify = regions_data.map(function(feature) {
      return feature.set(date, feature.get(reduceName));
      });
    return regions_data_modify;
  }
};

// 提取ee.ImageCollection("ECMWF/ERA5/DAILY")数据的函数
var getERA5Daily = function(image, regions) {
  var varName = image.bandNames().get(0);
  // add a column named mean
  var regions_data = image.reduceRegions(ee.FeatureCollection(regions), reduce);
  var date = image.date().format().slice(0,10);
  
  
  // get sr with unit MJ/m2
  if (['surface_solar_radiation_downwards_sum'].indexOf(varName) !== -1) {
    regions_data_modify = regions_data.map(function(feature) {
      return feature.set(date, feature.get(reduceName).multiply(ee.Number(1e-6)));
      });
    return regions_data_modify;
  }
  
  // unit did not need change
  else {
    regions_data_modify = regions_data.map(function(feature) {
      return feature.set(date, feature.get(reduceName));
      });
    return regions_data_modify;
  }
};


var ERA5DailyLatest_varNameLs = ['mean_2m_air_temperature', 'minimum_2m_air_temperature', 'maximum_2m_air_temperature', 'dewpoint_2m_temperature', 
                 'total_precipitation', 'surface_pressure', 'u_component_of_wind_10m', 'v_component_of_wind_10m'];
var _ = ERA5DailyLatest_varNameLs.map(function (varName){
  var fc_data = ee.FeatureCollection(ERA5DailyLatest_filterdate.select([varName]).iterate(getERA5DailyLatest, regions));
  Export.table.toDrive({
      collection: fc_data, 
      description: startDate + '_' + endDate + '_' + varName, 
      folder: 'GEE', 
      fileNamePrefix: startDate + '_' + endDate + '_' + varName,
      fileFormat: 'CSV',
      maxVertices: 1e13,
  });
  return null;
}, true);

var ERA5Daily_varNameLs = ['surface_solar_radiation_downwards_sum'];
var _ = ERA5Daily_varNameLs.map(function (varName){
  var fc_data = ee.FeatureCollection(ERA5Daily_filterdate.select([varName]).iterate(getERA5Daily, regions));
  Export.table.toDrive({
      collection: fc_data, 
      description: startDate + '_' + endDate + '_' + varName,
      folder: 'GEE', 
      fileNamePrefix: startDate + '_' + endDate + '_' + varName,
      fileFormat: 'CSV',
      maxVertices: 1e13,
    });
  return null;
}, true);
// ---------------------------------calc daily data----------------------------------

核心处理部分

基础代码不懂的自己搜,下面说一下核心的处理部分

1、读取区域矢量数据,使用ee.Image.reduceRegions()将每幅影像的区域至提取处出来,注意,这个函数会在FeatureCollection加一列属性,reduceName需要与这个属性名称一致

2、使用ee.ImageCollection.iterate()迭代写入提取数据,每次迭代一个影像,获取影像时间,然后把FeatureCollection加一列数据,把属性reduceName的临时数据保存到以日期为名的列中,然后再把加了属性的FeatureCollection作为下一个迭代的输入,所以最后导出数据的结果CSV格式为(CSV名字为日期范围+提取要素名称):

Index2005-01-012005-01-02
0xxxxxx
1xxxxxx
2xxxxxx

在这里插入图片描述

3、当然最后结果也可以导出为shp、kml等格式,简单修改即可,需要获取其他指标可以查看数据集的介绍。

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值