ET promedio historico en Google Earth Engine

En una entrada anterior vimos cómo obtener la evapotranspiración (ET) acumulada en un año agrícola utilizando el conjunto de datos de evapotranspiración/flujo de calor latente MOD16A2 versión 6 (ver entrada anterior).

En esta nueva publicación vamos a ir un paso más allá: aprenderemos a calcular la ET promedio anual histórica, es decir, el valor promedio de evapotranspiración en un lugar determinado a lo largo de varios años.

Este análisis es útil para:

  • Estimar el consumo promedio de agua en diferentes regiones o cultivos.

  • Evaluar la disponibilidad hídrica en el largo plazo.

  • Comparar condiciones normales con años específicos (por ejemplo, para detectar sequías o excesos de lluvia).

Podemos definir el período histórico según nuestras necesidades: 5, 10, 15 años, o incluso usar todos los años disponibles del conjunto MOD16A2 (que comienza en el año 2000).

En esta entrada exploraremos cómo hacerlo paso a paso en Google Earth Engine (GEE), filtrando los datos, calculando promedios y visualizándolos en el mapa o exportándolos para su análisis.

1. Definir capas de referencia, país y años de analisis

Usamos una capa de límites nacionales de México y dos módulos personalizados (de VICAL) para agregar estilos y leyendas. Ademas, ingresamos una lista con los años que queremos analizar.

var NA = ee.FeatureCollection("USDOS/LSIB\_SIMPLE/2017") .filter(ee.Filter.eq('country\_co', 'MX')); // México
var imp = require('users/InifapCenidRaspa/VICAL:Exportaciones'); 
var St = require('users/InifapCenidRaspa/VICAL:Style');
var anuario = ee.List(\[2010, 2011, 2012, 2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023\]);
var fechas = anuario.map(function(y) {
  return ee.Date.fromYMD({
    year: y, 
    month: 1, 
    day: 1
  });
});

2. Importar las colecciones MODIS, y seleccionar la banda ET y unir Agregamos las dos colleciones de imagenes y lo unimos en uno solo para poder generar la serie de tiempo de cualquier punto que desemos

var collection_i = ee.ImageCollection("MODIS/061/MOD16A2")
  .filterDate('2022-01-01', '2025-12-31')
  .select('ET');
var collection_f = ee.ImageCollection('MODIS/006/MOD16A2')
 .filterDate('2010-01-01', '2021-12-31')
  .select('ET');
var collection2=collection_i.merge(collection_f).sort('system:time_start')

3. Suma anual de ET por cada año Aquí filtramos los datos de cada año, sumamos los valores de ET para obtener la ET anual acumulada por píxel y guardamos la propiedad year para poder filtrar después.

var compuestos = ee.ImageCollection.fromImages(anuario.map(function(y) {
  var anual = collection2.filter(ee.Filter.calendarRange(y, y, 'year'));
  return anual.sum()
              .set('year', y)
              .set('system:time_start', ee.Date.fromYMD(y, 1, 1).millis());
}));

4. Calcular la media histórica y convertir unidades

var etPromedioHistorico = compuestos.mean().multiply(0.1).clip(NA).float();

5. Filtrar años individuales para visualización Puedes visualizar años individuales seleccionando con el filtro por propiedad year.

var media2020 = ee.Image(compuestos.filter(ee.Filter.eq('year', 2020)).first());

6. Crear gráfico de serie de tiempo de ET Esto genera una gráfica para una región de interés (geometry) mostrando la ET anual a lo largo de los años. cabe recordar que los valores en la gráfica los debe afectar por 0.1 que es la escala a lo que esta la colección imagenes

var chart = ui.Chart.image.series({
  imageCollection: compuestos.select('ET'), 
  region: geometry, 
  reducer: ee.Reducer.first(), 
  scale: 30
});

var options = { 
  title: 'Serie de tiempo de Evapotranspiración x 10', 
  hAxis: { title: 'fecha' },
  vAxis: { title: 'ET (mm/año' },
  series: {
    0: { color: 'green' }
  }
};

// Configure las opciones del gráfico e imprímalo.
chart = chart.setOptions(options);
print(chart);

7. Visualizar y exportar resultados

var paletaCl = {min: 100, max: 600, palette:St.ETO};
var panL = imp.Leyenda('ET (mm)', paletaCl);
//Mostrar en el mapa
Map.centerObject(NA)//centrar a la region
Map.addLayer(etPromedioHistorico, paletaCl, 'ET promedio 2010–2022');
Map.addLayer((media2020.multiply(0.1)).clip(NA), paletaCl, ' Suma_ET2020');
Map.add(panL);// leyenda
//Exportar Img
Export.image.toDrive({
  image: etPromedioHistorico.select('ET'),
  description: 'ET_promedio_historico_2010_2025',
  folder: 'earthengine',
  fileNamePrefix: 'ET',
  scale: 500,
  maxPixels: 1e10,
  crs: 'EPSG:4326',
  formatOptions: {
    cloudOptimized: true
  }
})

El codigo completo lo puedes encontrar aqui:

Puedes modificar el codigo o compartirlo, dejanos tus comentarios de que variable quiere y cual es el objetivo.

0
Subscribe to my newsletter

Read articles from SERGIO IVÁN JIMÉNEZ JIMÉNEZ directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

SERGIO IVÁN JIMÉNEZ JIMÉNEZ
SERGIO IVÁN JIMÉNEZ JIMÉNEZ