GEE | 多源蒸散发ET年数据对比分析

职场   2025-01-27 09:50   广东  

朋友们好!今天我们将基于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);

二、成为会员

GIS遥感数据处理应用
会员:数据处理,ArcGIS/Python/MATLAB/R/GEE教学,指导作图和论文。
 最新文章