1 背景
ERA5数据集提供了逐小时的气象产品,最近做实验需要用到指定日期的14点的气象数据,所以学习了一下。
我的目的:获取2003年每月5,15,25日 14点的空气温度
2 代码
var roi = table.geometry(); // table是我上传的研究区矢量
var batch = require('users/fitoprincipe/geetools:batch');
function ExtractByMask(Image)
{return Image.clip(roi)
}// 假设有年份和每月值的两个列表
var years = [2003];
var months = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
var days=[5,15,25]// 创建一个空的列表来存储所有日期
var startDates = [];
var endDates=[];
// 循环遍历年份和月份,将它们结合成日期,并添加到列表中
for (var i = 0; i < years.length; i++) {for (var j = 0; j < months.length; j++)for (var k=0;k<days.length; k++){var year = years[i];var month = months[j];var day=days[k];// 使用 ee.Date 对象创建日期var startdate = ee.Date.fromYMD(year, month, day); var enddate=ee.Date.fromYMD(year, month, day+1);// 将日期添加到列表中startDates.push(startdate);endDates.push(enddate);}
}// 用 for 循环遍历日期
for (var i = 0; i < startDates.length; i++) {var startDate = startDates[i];var endDate = endDates[i];// 从 ERA5_LAND 数据集中筛选出指定日期和时刻的温度数据var dataset = ee.ImageCollection("ECMWF/ERA5_LAND/HOURLY").filterDate(startDate, endDate).select('temperature_2m').filterBounds(roi).filter(ee.Filter.equals({leftField: 'hour',rightValue: 14}));var dataset_ExtractByMask=dataset.map(ExtractByMask) //裁剪// 导出数据batch.Download.ImageCollection.toDrive(dataset_ExtractByMask, "2003_TA", {scale: 1000,crs: "EPSG:4326",type: "float"});
}
3 结果展示
把影像下载下来放进arcgis的结果如下:
4 问题讨论
我这个代码挑选出来的是数据集,所以需要使用到裁剪函数clip,进行每一个影像的循环。
实际上指定日期指定时间指定波段的影像只有一张,后续可以考虑使用image的函数去导出。