Introducción a los datos de Forest Monitoring for Action (FORMA)

FORMA es un sistema de alertas de deforestación quincenal de 500 x 500 metros basado en MODIS para los bosques tropicales húmedos. El conjunto de datos FORMA 500 en Earth Engine es una imagen con alertas que comienzan en enero de 2006 y se actualizan mensualmente. Cada alerta tiene una hora asociada en una sola banda llamada alert_date en unidades de segundos de época. Filtrar los datos de FORMA por fechas y calcular alertas dentro de áreas de interés son dos de las acciones más importantes que puedes realizar con el conjunto de datos de FORMA.

Cómo filtrar FORMA por fecha

Para mostrar solo las alertas que se producen en 2012, busca los píxeles que tengan horas entre el primer día de 2012 y el primer día de 2013, expresadas en segundos desde la medianoche del 1 de enero de 1970:

Editor de código (JavaScript)

// Convert dates from milliseconds to seconds.
var start = ee.Date('2012-01-01').millis().divide(1000);
var end = ee.Date('2013-01-01').millis().divide(1000);

// Load the FORMA 500 dataset.
var forma = ee.Image('FORMA/FORMA_500m');

// Create a binary layer from the dates of interest.
var forma2012 = forma.gte(start).and(forma.lte(end));

Map.setCenter(15.87, -0.391, 7);
Map.addLayer(
  forma2012.mask(forma2012),
  {palette: ['FF0000']},
  'FORMA alerts in 2012'
);

En este ejemplo, forma2012 es una imagen binaria que contiene solo los píxeles que tienen horas que ocurren en 2012 (es decir, todos los demás píxeles están enmascarados).

Cómo contar las alertas de FORMA en una región de interés

Al igual que en la sección anterior con los datos de Hansen et al., podemos comenzar por contar la cantidad de alertas de FORMA (píxeles) en un área de interés. Por ejemplo, para contar la cantidad de alertas en las áreas protegidas de la República del Congo en 2012, continúa con el ejemplo anterior de la siguiente manera:

Editor de código (JavaScript)

// Load country features from Large Scale International Boundary (LSIB) dataset.
var countries = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017');

// Subset the Congo Republic feature from countries.
var congo = ee.Feature(
  countries
    .filter(ee.Filter.eq('country_na', 'Rep of the Congo'))
    .first()
);

// Subset protected areas to the bounds of the congo feature
// and other criteria. Clip to the intersection with congo.
var protectedAreas = ee.FeatureCollection('WCMC/WDPA/current/polygons')
  .filter(ee.Filter.and(
    ee.Filter.bounds(congo.geometry()),
    ee.Filter.neq('IUCN_CAT', 'VI'),
    ee.Filter.neq('STATUS', 'proposed'),
    ee.Filter.lt('STATUS_YR', 2010)
  ))
  .map(function(feat){
    return congo.intersection(feat);
  });

// Display protected areas on the map.
Map.addLayer(
  protectedAreas,
  {color: '000000'},
  'Congo Republic protected areas'
);

// Calculate the number of FORMA pixels in protected
// areas of the Congo Republic, 2012.
var stats = forma2012.reduceRegion({
  reducer: ee.Reducer.sum(),
  geometry: protectedAreas.geometry(),
  scale: 500
});
print('Number of FORMA pixels, 2012: ', stats.get('constant'));

Cómo contar las alertas de FORMA en varias regiones de interés

Hasta ahora, hemos calculado estadísticas en una sola región a la vez. Para calcular estadísticas en varias regiones a la vez, puedes usar reduceRegions(). Nuevamente, basándonos en el ejemplo anterior:

Editor de código (JavaScript)

var regionsStats = forma2012.reduceRegions({
  collection: protectedAreas,
  reducer: ee.Reducer.sum(),
  scale: forma2012.projection().nominalScale()
});
print(regionsStats);

Examina el objeto impreso en la consola y observa que el resultado de reduceRegions() es otro FeatureCollection. Ten en cuenta que cada región de la colección de áreas protegidas de la República del Congo ahora tiene una propiedad adicional, sum, que lleva el nombre del reductor. El valor de esta propiedad es el resultado del reductor o la cantidad de alertas de 2012 en las áreas protegidas.

Comparación de los conjuntos de datos de FORMA y Hansen et al.

Para comparar los conjuntos de datos de FORMA y Hansen et al., puedes usar operadores lógicos. (Obtén más información sobre las operaciones lógicas). Específicamente, nos gustaría crear una imagen en la que los píxeles marcados como deforestación tanto por FORMA como por los datos de Hansen et al. sean 1 y el resto sean cero. Este código genera una imagen de ese tipo para el año 2012 y la muestra junto con otras capas de deforestación previstas:

Editor de código (JavaScript)

// Convert dates from milliseconds to seconds.
var start = ee.Date('2012-01-01').millis().divide(1000);
var end = ee.Date('2013-01-01').millis().divide(1000);
var region = ee.Geometry.Rectangle([-59.81163, -9.43348, -59.27561, -9.22818]);

// Load the FORMA 500 dataset.
var forma = ee.Image('FORMA/FORMA_500m');

// Create a binary layer from the dates of interest.
var forma2012 = forma.gte(start).and(forma.lte(end));

// Load Hansen et al. data and get change in 2012.
var gfc = ee.Image('UMD/hansen/global_forest_change_2015');
var gfc12 = gfc.select(['lossyear']).eq(12);

// Create an image which is one where the datasets
// both show deforestation and zero elsewhere.
var gfc_forma = gfc12.eq(1).and(forma2012.eq(1));

// Display data on the map.
Map.setCenter(-59.58813, -9.36439, 11);
Map.addLayer(forma.updateMask(forma), {palette: '00FF00'}, 'Forma (green)');
Map.addLayer(gfc12.updateMask(gfc12), {palette: 'FF0000'}, 'Hansen (red)');
Map.addLayer(
  gfc_forma.updateMask(gfc_forma),
  {palette: 'FFFF00'},
  'Hansen & FORMA (yellow)'
);

Con esto concluye la descripción general de los conjuntos de datos de cambios forestales en Earth Engine. Esperamos con ansias ver lo que puedes hacer con ellos.