1 votos

Extracción de series temporales del producto Modis LAI (cada 3 días una nueva imagen de satélite) en una pequeña zona de estudio

En este momento estoy luchando con una serie temporal y la extracción de datos MODIS LAI. Estoy utilizando la banda "Lai" de MODIS/006/MCD15A3H. Mi área de estudio es pequeña, así que presumiblemente, dado que el pixeldata de MODIS Lai tiene una resolución espacial de 500x500, sólo tengo un píxel para extraer con respecto a la serie temporal de la misma (los 3 días un valor de Lai para mi geometría).

Ya tengo un código similar para extraer el NDVI de mi área de estudio que funciona, sin embargo, no consigo cómo hacerlo con los datos LAI de MODIS. Abajo está mi código para los datos LAI. Funciona para mostrarlo en el gráfico, sin embargo, parece que la escala está apagado, ya que los valores de Lai no son superiores a 8 por lo que yo soy consciente de. (NDVI sería -1 a 1) (Lai es 0 a 8ish). Pero en mi escala tiene valores más allá (hasta 60), excediendo el rango habitual que debería mostrar. No estoy seguro de qué parte del código podría resolver el problema.

Además, si filtro la nubosidad (lo que también suavizaría el gráfico lineal), parece que no quedan datos. ¿Existe la posibilidad de filtrar la nubosidad (para obtener una línea más suave), pero seguir obteniendo resultados?

var geometry = /* color: #d63000 */ee.Geometry.Polygon(
        [[[16.62138331919588, 48.21312568441956],
          [16.619409213360917, 48.20875013496642],
          [16.620696673688066, 48.2084927380614],
          [16.623915324505937, 48.20803514036929],
          [16.624644885357988, 48.209522317919415],
          [16.624215731915605, 48.20995130341788],
          [16.624988208111894, 48.21135263100322]]]);

//draw polygon of area interested on map//draw polygon of area interested on map
var polygon = ee.Geometry.Polygon

// which dataset + where + when
var imageCollection = ee.ImageCollection("MODIS/006/MCD15A3H")
                .filterDate('2018-01-01','2020-09-23')
                .filterBounds(geometry)
                .select(['Lai'])
                //.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20));

//print collection
print(imageCollection);

//zoom to geometry
Map.centerObject(geometry, 10);

// Create palettes for display of Lai
var Lai_pal = ['e1e4b4', '999d60', '2ec409', '0a4b06'];

var Lai = imageCollection.select(['Lai']);
var Laimed = Lai.mean(); 

// Create a time series chart.
var plotLai = ui.Chart.image.seriesByRegion(imageCollection, geometry,ee.Reducer.mean(),
'Lai',0.1,'system:time_start', 'system:index')
              .setChartType('LineChart').setOptions({
                title: 'Lai time series',
                hAxis: {title: 'Date'},
                vAxis: {title: 'Lai'}
});

// Display of lai values, however it seems like it doesn't do anyting afterall to display on the map
print(plotLai);

Map.addLayer(plotLai.clip(geometry), {min:0.0, max:100.0, palette: Lai_pal}, 'Lai');

0voto

JonasV Puntos 41

Los valores LAI en MODIS se guardan como un número entero con un factor de escala. En este caso, el factor de escala es 0,1

Esto significa que, para obtener el verdadero valor del LAI, es necesario aplicar el factor de escala al valor. Así, para un valor de 63, el LAI sería de 6,3.

Su filtrado en la nube no funciona porque CLOUDY_PIXEL_PERCENTAGE no existe para el producto MODIS que ha elegido. En su lugar existen Bits de Control de Calidad que ofrecen información sobre los píxeles. Le sugiero que siempre eche un vistazo a la página del conjunto de datos para obtener una visión general del mismo. Aquí está la de MODIS_006_MCD15A3H .

Enmascarar usando bits QA es un poco más complicado, aquí estoy usando Code by Daniell Wiell de este respuesta.

// which dataset + where + when
var imageCollection = ee.ImageCollection("MODIS/006/MCD15A3H")
                .filterDate('2018-01-01','2020-09-23')
                .filterBounds(geometry)

function bitwiseExtract(value, fromBit, toBit) {
  if (toBit === undefined)
    toBit = fromBit
  var maskSize = ee.Number(1).add(toBit).subtract(fromBit)
  var mask = ee.Number(1).leftShift(maskSize).subtract(1)
  return value.rightShift(fromBit).bitwiseAnd(mask)
}

var masked = imageCollection.map(function(image){
  var qa = image.select('FparLai_QC')
  var good = bitwiseExtract(qa, 0) // returns 0 for good quality
  return image.updateMask(good.not())  // needs to be inverted to mask pixels with bad quality
              .select(["Lai"])

})

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