朋友们好!今天我们将基于GEE平台,对FLDAS、MODIS、PML和TerraClimate数据集的蒸散发(ET)数据进行对比分析。各位同学可以根据自己的需求,更改研究区和数据集!
一、GEE结果
var ET_region = table;
var collectionFLDAS = ee.ImageCollection("NASA/FLDAS/NOAH01/C/GL/M/V001")
.filterDate('2001-01-01', '2020-12-31')
.select('Evap_tavg');
var collectionMODIS = ee.ImageCollection("MODIS/006/MOD16A2")
.filterDate('2001-01-01', '2020-12-31')
.select('ET');
var collectionPML = ee.ImageCollection("CAS/IGSNRR/PML/V2_v018")
.filterDate('2001-01-01', '2020-12-31');
var collectionTerraClimate = ee.ImageCollection("IDAHO_EPSCOR/TERRACLIMATE")
.filterDate('2001-01-01', '2020-12-31')
.select('aet');
function getYearlyET(collection, datasetName, bandName, factor) {
var range = collection.reduceColumns(ee.Reducer.minMax(), ['system:time_start']);
var diff = ee.Date(range.get('max')).difference(ee.Date(range.get('min')), 'year');
var yearlyData = ee.List.sequence(0, diff).map(function(n) {
var start = ee.Date(range.get('min')).advance(n, 'year');
var end = start.advance(1, 'year');
var yearlyImage = collection
.filterDate(start, end)
.sum()
.multiply(factor)
.set('system:time_start', start);
var year = ee.Date(yearlyImage.get('system:time_start')).get('year');
var meanValue = yearlyImage.reduceRegion({
reducer: ee.Reducer.mean(),
geometry: ET_region,
scale: 50000
}).get(bandName);
return ee.Feature(null, {
'Year': year,
'Dataset': datasetName,
'ET (mm/year)': meanValue
});
});
return ee.List(yearlyData);
}
var yearlyFLDAS = getYearlyET(collectionFLDAS, 'FLDAS', 'Evap_tavg', 24 * 60 * 60 * 30);
var yearlyMODIS = getYearlyET(collectionMODIS, 'MODIS', 'ET', 0.1);
var yearlyTerraClimate = getYearlyET(collectionTerraClimate, 'TerraClimate', 'aet', 0.1);
function getYearlyPML() {
var range = collectionPML.reduceColumns(ee.Reducer.minMax(), ['system:time_start']);
var diff = ee.Date(range.get('max')).difference(ee.Date(range.get('min')), 'year');
var yearlyData = ee.List.sequence(0, diff).map(function(n) {
var start = ee.Date(range.get('min')).advance(n, 'year');
var end = start.advance(1, 'year');
var yearlyImage = collectionPML
.filterDate(start, end)
.map(function(image) {
return image.expression(
'(Ec + Es + Ei) * 8', {
'Ec': image.select('Ec'),
'Es': image.select('Es'),
'Ei': image.select('Ei')
}).rename('ET');
})
.sum()
.set('system:time_start', start);
var year = ee.Date(yearlyImage.get('system:time_start')).get('year');
var meanValue = yearlyImage.reduceRegion({
reducer: ee.Reducer.mean(),
geometry: ET_region,
scale: 50000
}).get('ET');
return ee.Feature(null, {
'Year': year,
'Dataset': 'PML',
'ET (mm/year)': meanValue
});
});
return ee.List(yearlyData);
}
var yearlyPML = getYearlyPML();
var allYearlyET = ee.List(yearlyFLDAS)
.cat(yearlyMODIS)
.cat(yearlyTerraClimate)
.cat(yearlyPML);
var etCollection = ee.FeatureCollection(allYearlyET);
function printRegressionSlope(featureCollection, datasetName) {
var regression = featureCollection
.filter(ee.Filter.eq('Dataset', datasetName))
.reduceColumns({
selectors: ['Year', 'ET (mm/year)'],
reducer: ee.Reducer.linearFit()
});
var slope = regression.get('scale');
print('Slope of ' + datasetName + ' (mm):', slope);
}
printRegressionSlope(etCollection, 'FLDAS');
printRegressionSlope(etCollection, 'MODIS');
printRegressionSlope(etCollection, 'PML');
printRegressionSlope(etCollection, 'TerraClimate');
function addLinearRegression(featureCollection, datasetName) {
var regression = featureCollection
.filter(ee.Filter.eq('Dataset', datasetName))
.reduceColumns({
selectors: ['Year', 'ET (mm/year)'],
reducer: ee.Reducer.linearFit()
});
var slope = regression.get('scale');
var intercept = regression.get('offset');
return featureCollection.map(function(feature) {
var year = feature.getNumber('Year');
var predictedET = ee.Number(slope).multiply(year).add(intercept);
return feature.set(datasetName + '_predicted', predictedET);
});
}
etCollection = addLinearRegression(etCollection, 'FLDAS');
etCollection = addLinearRegression(etCollection, 'MODIS');
etCollection = addLinearRegression(etCollection, 'PML');
etCollection = addLinearRegression(etCollection, 'TerraClimate');
var chartData = etCollection.map(function(feature) {
var year = feature.getNumber('Year');
var dataset = feature.getString('Dataset');
var et = feature.getNumber('ET (mm/year)');
var predictedET = feature.getNumber(dataset + '_predicted');
return ee.Feature(null, {
'Year': year,
'Dataset': dataset,
'ET (mm/year)': et,
'Predicted ET (mm/year)': predictedET
});
});
var chart = ui.Chart.feature.groups({
features: chartData,
xProperty: 'Year',
yProperty: 'ET (mm/year)',
seriesProperty: 'Dataset'
})
.setChartType('LineChart')
.setOptions({
title: 'Annual ET Trends (2001-2020)',
hAxis: {title: 'Year'},
vAxis: {title: 'ET (mm)'},
lineWidth: 2,
pointSize: 4,
series: {
0: {lineDashStyle: [1, 1]},
1: {lineDashStyle: [2, 2]},
2: {lineDashStyle: [4, 4]},
3: {lineDashStyle: [8, 8]}
}
});
print(chart);
二、成为会员