Introduzione ai dati Forest Monitoring for Action (FORMA)

FORMA è un sistema di avviso di deforestazione bisettimanale di 500 x 500 metri basato su MODIS per le foreste tropicali umide. Il set di dati FORMA 500 in Earth Engine è un'immagine con avvisi a partire da gennaio 2006 e aggiornata mensilmente. A ogni avviso è associato un orario in una singola banda denominata alert_date in unità di secondi epoch. Il filtraggio di FORMA per date e il calcolo degli avvisi all'interno delle aree di interesse sono due delle operazioni più importanti che puoi eseguire con il set di dati FORMA.

Filtrare FORMA per data

Per mostrare solo gli avvisi che si verificano nel 2012, trova i pixel con orari compresi tra il primo giorno del 2012 e il primo giorno del 2013, espressi in secondi dalla mezzanotte del 1° gennaio 1970:

Editor di codice (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'
);

In questo esempio, forma2012 è un'immagine binaria contenente solo i pixel con orari che si verificano nel 2012 (ovvero tutti gli altri pixel sono mascherati).

Conteggio degli avvisi FORMA in una regione di interesse

Come abbiamo fatto nella sezione precedente con i dati di Hansen et al., possiamo iniziare contando il numero di avvisi FORMA (pixel) in un'area di interesse. Ad esempio, per conteggiare il numero di avvisi nelle aree protette della Repubblica del Congo nel 2012, basati sull'esempio precedente come segue:

Editor di codice (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'));

Conteggio degli avvisi FORMA in diverse regioni di interesse

Finora abbiamo calcolato le statistiche in una sola regione alla volta. Per calcolare le statistiche in più regioni contemporaneamente, puoi utilizzare reduceRegions(). Ancora una volta, basandoci sull'esempio precedente:

Editor di codice (JavaScript)

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

Esamina l'oggetto stampato nella console e osserva che l'output di reduceRegions() è un altro FeatureCollection. Tieni presente che ogni regione nella raccolta delle aree protette della Repubblica del Congo ora ha una proprietà aggiuntiva, sum, denominata in base al riduttore. Il valore di questa proprietà è l'output del reducer o il numero di avvisi del 2012 nelle aree protette.

Confronto tra i set di dati FORMA e Hansen et al.

Per confrontare i set di dati FORMA e Hansen et al., puoi utilizzare gli operatori logici. Scopri di più sulle operazioni logiche. Nello specifico, vorremmo creare un'immagine in cui i pixel contrassegnati sia da FORMA sia dai dati di Hansen et al. come deforestazione siano 1 e gli altri siano zero. Questo codice crea un'immagine di questo tipo per il 2012 e la mostra insieme ad altri livelli di deforestazione previsti:

Editor di codice (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)'
);

La panoramica dei set di dati sui cambiamenti delle foreste in Earth Engine è terminata. Non vediamo l'ora di scoprire cosa riuscirai a fare con questi strumenti.