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的函数去导出。