Script Library
AdvancedClimateAdvanced
ERA5-Land Growing/Cooling/Heating Degree Days
Daily GDD/HDD/CDD from ERA5-Land — fundamental for agronomy and energy demand studies.
Pipeline (4 steps)
- ERA5-Land daily 2 m temperature, K → °C
- GDD = max(T − 10, 0)
- HDD = max(18 − T, 0); CDD = max(T − 18, 0)
- Sum to annual; export COG; chart annual trends
Datasets
- era5-daily
Simulated previewPaste the script in Earth Engine for live results
Outputs the script produces
map Annual GDD
map HDD / CDD
chart Annual trend chart
var startYear = 2000, endYear = 2024;
var t = ee.ImageCollection('ECMWF/ERA5_LAND/DAILY_AGGR')
.select('temperature_2m').filterBounds(aoi)
.map(function(i){ return i.subtract(273.15).rename('Tc').copyProperties(i, ['system:time_start']); });
var years = ee.List.sequence(startYear, endYear);
var annual = ee.ImageCollection(years.map(function(y){
y = ee.Number(y);
var year = t.filter(ee.Filter.calendarRange(y,y,'year'));
var gdd = year.map(function(i){return i.subtract(10).max(0)}).sum().rename('GDD');
var hdd = year.map(function(i){return ee.Image(18).subtract(i).max(0)}).sum().rename('HDD');
var cdd = year.map(function(i){return i.subtract(18).max(0)}).sum().rename('CDD');
return gdd.addBands(hdd).addBands(cdd).set('year', y).set('system:time_start', ee.Date.fromYMD(y,7,1).millis());
}));
Map.centerObject(aoi, 5);
Map.addLayer(annual.filter(ee.Filter.eq('year', endYear)).first().select('GDD'),
{min: 1000, max: 4000, palette: ['#1d4ed8','#22c55e','#facc15','#ef4444']}, 'GDD ' + endYear);
print(ui.Chart.image.series({
imageCollection: annual.select('GDD'),
region: aoi, reducer: ee.Reducer.mean(), scale: 11000
}).setOptions({title: 'Annual GDD trend'}));
Export.image.toDrive({
image: annual.filter(ee.Filter.eq('year', endYear)).first().clip(aoi),
description: 'DegreeDays_' + endYear, folder: 'gee_exports',
region: aoi, scale: 11000, maxPixels: 1e13,
fileFormat: 'GeoTIFF', formatOptions: {cloudOptimized: true}
});import ee
ee.Initialize()