1 votos

GEE: Cómo ordenar correctamente ImageCollection por system:index

Soy muy nuevo en GEE y tengo el siguiente Problema: Tengo que crear series temporales de NDVI (con índices de vegetación MODIS) y comparar el valor medio mensual entre 2001 y 2021 con la media mensual en 2022.

Todo funcionaba bien, después de calcular la media mensual tenía dos ImageCollections con 12 imágenes cada una. Luego intenté restar la serie temporal de 2022 de la otra para obtener la diferencia de NDVI. La resta funciona, pero el orden de las imágenes está roto.

Ordenar antes de restar: 0, 1, 2, 3, .... 10, 11

Orden después de restar: 0, 1, 10, 11, 2, 3, ...

No se como solucionarlo porque quizás no entiendo muy bien como funciona la estructura de datos de los objetos/imágenes en GEE. Tampoco entiendo por qué las ImageCollections antes de restarlas estaban ordenadas correctamente incluso si no había ningún cero inicial en system:index (las etiquetas de las series temporales son las mismas en el inspector) pero después de restar esto(?) de repente era un problema.

Ya he intentado crear una nueva propiedad con el valor de system:index e insertar un cero inicial a los índices 0-9 pero parece que el valor no es ni una cadena normal ni un número por lo que no hace lo que quiero.

var ndviReference = ee.ImageCollection("MODIS/061/MOD13A2").filterDate('2001-01-01', '2021-12-31').select('NDVI')

var ndvi2022 = ee.ImageCollection("MODIS/061/MOD13A2").filterDate('2022-01-01', '2022-12-31').select('NDVI')

var months = ee.List.sequence(1, 12);

var ndvi2022byMonth = ee.ImageCollection.fromImages(
      months.map(function (m) {
        return ndvi2022.filter(ee.Filter.calendarRange(m, m, 'month'))
                    .select(0).median()
                    .set('month', m);
}));

var ndviReferencebyMonth = ee.ImageCollection.fromImages(
      months.map(function (m) {
        return ndviReference.filter(ee.Filter.calendarRange(m, m, 'month'))
                    .select(0).median()
                    .set('month', m);

var ndviDiffboth = ndvi2022byMonth.combine(ndviReferencebyMonth)
var ndviDiffsubtracted = ndviDiffboth.map(function(img){
  var ndvi = img.select(0).subtract(img.select(1))
  return ee.Image([ndvi])
})

0voto

InquilineKea Puntos 525

Puede ordenar por month propiedad:

https://code.earthengine.google.com/b42362a66d2a451ab2d7b99cdd74fe16

var ndviReference = ee.ImageCollection("MODIS/061/MOD13A2").filterDate('2001-01-01', '2021-12-31').select('NDVI')
var ndvi2022 = ee.ImageCollection("MODIS/061/MOD13A2").filterDate('2022-01-01', '2022-12-31').select('NDVI')

var months = ee.List.sequence(1, 12);
print("Months: ", months)

var ndvi2022byMonth = ee.ImageCollection.fromImages(
      months.map(function (m) {
        return ndvi2022.filter(ee.Filter.calendarRange(m, m, 'month'))
                    .select(0).median()
                    .set('month', m);
}))
.sort("month");

print("Order in ndvi2022byMonth",ndvi2022byMonth.aggregate_array("system:index"))

var ndviReferencebyMonth = ee.ImageCollection.fromImages(
      months.map(function (m) {
        return ndviReference.filter(ee.Filter.calendarRange(m, m, 'month'))
                    .select(0).median()
                    .set('month', m);
}))
.sort("month");
print("Order in ndviReferencebyMonth:", ndviReferencebyMonth.aggregate_array("system:index"))

var ndviDiffboth = ndvi2022byMonth.combine(ndviReferencebyMonth)
.sort("month");

print("Order in ndviDiffboth:",ndviDiffboth.aggregate_array("system:index"))  // Bands: NDVI and NDVI_1  Properties: month, and system:index

var ndviDiffsubtracted = ndviDiffboth.map(function(img){
  var ndvi = img.select("NDVI").subtract(img.select("NDVI_1"))
  return ee.Image([ndvi])
})
print("Order in ndviDiffsubtracted:", ndviDiffsubtracted.aggregate_array("system:index"))

Pruébelo con y sin el .sort(month) . Su colección de imágenes en su código original fue reordenada incluso antes -- justo después de usar .combine() pero utilizando .sorth(month) puede especificar el orden que desee.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X