Estadísticas resumidas sobre una región GRANDE en Google Earth Engine

Aug 18 2020

Estoy lidiando con un problema en la reducción de los valores de NDVI para América del Sur. Me interesa saber cuál es el NDVI medio para este continente (valor único), sin tener que perder resolución al aumentar mi escala de píxeles a un número muy grande. Mi pensamiento fue intentar colocar algún tipo de cuadrícula que pudiera crear regiones más pequeñas y luego hacer un diccionario y tomar la media de los medios de la cuadrícula. No estoy seguro de si mi lógica es totalmente sólida aquí, pero espero estar en un buen camino. ¿GEE podría hacer esto? Si es así, ¿hay alguna manera de crear una función para simplificar esta tarea?

Este código no funciona por razones obvias ... tiempo de espera del sistema y límites de memoria.

var sam_mean = fit_year_ndvi.clip(sam).reduceRegion({
  reducer: ee.Reducer.mean(),
  geometry: sam,
  scale: 1000,
  maxPixels: 1e12
});

Aquí está mi enlace: https://code.earthengine.google.com/b8486d4ef347cde7555614254b143ec7

Aquí está mi enlace de activos: https://code.earthengine.google.com/?asset=users/anna_odell/continents

Respuestas

1 KevinReid Aug 19 2020 at 03:05

Mi pensamiento fue intentar colocar algún tipo de cuadrícula que pudiera crear regiones más pequeñas y luego hacer un diccionario y tomar la media de los medios de la cuadrícula.

Esto no debería ser necesario: Earth Engine ya subdividirá su reduceRegionoperación para calcularla de manera eficiente. Sin embargo, es posible que necesite más tiempo para completarlo. La solución a esto es ejecutar la operación como un trabajo por lotes (exportación). Si su resultado final es solo el número y no algunos datos más complejos, puede ponerlo dentro de una función para que sea exportable:

var collection_for_export = ee.FeatureCollection([
  ee.Feature(null, {'sam_mean': sam_mean})
]);
Export.table.toDrive({
  collection: collection_for_export,
  fileFormat: 'CSV',
});

También noto que tienes:

var sam_mean = fit_year_ndvi.clip(sam).reduceRegion({
  geometry: sam,
  ...

El .clip(sam)es innecesario porque reduceRegionya funciona solo en la región especificada, y recortarlo por separado hará un cálculo adicional sin ningún beneficio.