基于前面的代码,对于计算月度气温最高、最低数据进行了代码优化,可供参考。
var roi = ee.FeatureCollection("projects/ee-jiarui25789/assets/hb"); Map.centerObject(roi, 10) var startYear = 2002; var endYear = 2003; // 定义ERA5-Land数据集 var data = ee.ImageCollection("ECMWF/ERA5_LAND/HOURLY") .select("temperature_2m"); // 设置可视化参数 var visParams = { min: -30.0, max: 30.0, palette: ['blue', 'green', 'red'] }; // 定义一个函数来处理每个月的数据 function processMonth(year, month) { var startDate = ee.Date.fromYMD(year, month, 1); var endDate = startDate.advance(1, 'month'); var filteredData = data.filter(ee.Filter.date(startDate, endDate)); var maxTemp = filteredData.reduce(ee.Reducer.max()); var minTemp = filteredData.reduce(ee.Reducer.min()); var maxTempCelsius = maxTemp.subtract(273.15); var minTempCelsius = minTemp.subtract(273.15); Map.addLayer(maxTempCelsius, visParams, 'Max Temp ' + year + '-' + month); Map.addLayer(minTempCelsius, visParams, 'Min Temp ' + year + '-' + month); var exportMax = Export.image.toDrive({ image: maxTempCelsius, description: 'MonthlyMaxTemp_' + year + '_' + month, scale: 1000, region: roi, fileNamePrefix: 'MonthlyMaxTemp_' + year + '_' + month, folder: 'MonthlyMaxTemp_' + year, maxPixels: 1e13 }); var exportMin = Export.image.toDrive({ image: minTempCelsius, description: 'MonthlyMinTemp_' + year + '_' + month, scale: 1000, region: roi, fileNamePrefix: 'MonthlyMinTemp_' + year + '_' + month, folder: 'MonthlyMinTemp_' + year, maxPixels: 1e13 }); } // 使用一个循环来遍历每一年 for (var year = startYear; year <= endYear; year++) { // 使用一个循环来遍历每个月 for (var month = 1; month <= 12; month++) { processMonth(year, month); } }
这段代码有一些地方进行改进和优化:
- 通过定义
processMonth
函数,代码实现了模块化,使得每个月的处理逻辑封装在一个函数中,提高了代码的可读性和可重用性。利用循环遍历每一年和每个月,自动化处理大量数据,无需手动干预,提高了效率