Intensità di variazione dell'occorrenza di inondazione

Il livello di dati Intensità della variazione della presenza di acqua fornisce una misura di come l'acqua superficiale è cambiata tra due periodi: 1984-1999 e 2000-2015. Il livello calcola la media della variazione tra coppie di mesi omologhe prese dalle due epoche. Per ulteriori dettagli su questo livello, consulta la guida dell'utente dei dati (v2) .

In questa sezione del tutorial:

  1. aggiungere un livello della mappa con stili per visualizzare l'intensità della variazione della presenza di acqua;
  2. riassumere l'intensità della variazione in una regione di interesse specificata utilizzando un istogramma.

Visualizzazione

Analogamente al livello di presenza dell'acqua, inizieremo aggiungendo alla mappa una visualizzazione di base dell'intensità della variazione della presenza, per poi migliorarla. L'intensità della variazione delle occorrenze viene fornita in due modi, sia come valori assoluti che normalizzati. In questo tutorial utilizzeremo i valori assoluti. Inizia selezionando il livello di intensità della variazione assoluta dell'occorrenza dall'immagine GSW:

Editor di codice (JavaScript)

var change = gsw.select("change_abs");

Nella sezione Constants del codice, aggiungi un'istruzione che crea una nuova variabile che definisce lo stile del livello. Questo stile mostra le aree in cui la presenza di acque superficiali è diminuita/aumentata in rosso/verde. Le aree in cui la presenza di acque superficiali è relativamente invariata sono mostrate in nero.

Editor di codice (JavaScript)

var VIS_CHANGE = {
    min:-50,
    max:50,
    palette: ['red', 'black', 'limegreen']
};

Alla fine della sezione di codice Map Layers, aggiungi un'istruzione che aggiunge un nuovo livello alla mappa.

Editor di codice (JavaScript)

Map.setCenter(-74.4557, -8.4289, 11);  // Ucayali River, Peru
Map.addLayer({
  eeObject: change,
  visParams: VIS_CHANGE,
  name: 'occurrence change intensity'
});
modifica intensità
Figura 6. Screenshot dell'intensità della variazione delle acque di superficie per il fiume Ucayali vicino a Pucallpa, una città nella foresta pluviale amazzonica del Perù orientale. Il rosso/verde indica una diminuzione/un aumento della presenza di acque superficiali tra le epoche.

Riepilogo dei cambiamenti all'interno di una regione di interesse

In questa sezione riassumeremo la quantità di modifiche all'interno di una regione di interesse specificata. Per specificare un'area di interesse, fai clic sullo strumento di disegno poligonale, che è uno degli strumenti di geometria. Verrà creato un nuovo livello Importazioni di geometrie, denominato "geometry" per impostazione predefinita. Per modificare il nome, fai clic sull'icona a forma di ingranaggio situata a destra del nome del livello. Tieni presente che potrebbe essere necessario posizionare il cursore sul nome del livello per visualizzarlo.

Cambia il nome del livello in roi (per regione di interesse o ROI). Possiamo quindi fare clic su una serie di punti sulla mappa per definire una regione di interesse poligonale.

regione di interesse
Figura 7. Screenshot del fiume Ucayali vicino a Pucallpa, in Perù, con una regione di interesse creata utilizzando lo strumento di disegno poligonale.

Ora che la nostra regione di interesse è definita e memorizzata in una variabile, possiamo utilizzarla per calcolare un istogramma dell'intensità della variazione per la ROI. Aggiungi il seguente codice alla sezione Calculations dello script.

Editor di codice (JavaScript)

// Calculate a change intensity for the region of interest.
var histogram = change.reduceRegion({
  reducer: ee.Reducer.histogram(),
  geometry: roi,
  scale: 30,
  bestEffort: true,
});
print(histogram);

La prima istruzione calcola un istogramma dei valori di intensità della variazione di occorrenza all'interno del ROI, campionando su una scala di 30 m. Il secondo stampa l'oggetto risultante nella scheda Console dell'editor di codice. Puoi espandere l'albero degli oggetti per visualizzare i valori dei bucket dell'istogramma. I dati numerici sono presenti, ma esistono modi migliori per visualizzare i risultati.

valori dell'istogramma
Figura 8. Risultati della scheda Console, che mostrano i valori dell'istogramma dell'intensità della variazione delle acque di superficie.

Per migliorare la situazione, possiamo generare un grafico a istogramma. Sostituisci l'istruzione che definisce l'oggetto istogramma con le seguenti istruzioni:

Editor di codice (JavaScript)

// Generate a histogram object and print it to the console tab.
var histogram = ui.Chart.image.histogram({
  image: change,
  region: roi,
  scale: 30,
  minBucketWidth: 10
});
histogram.setOptions({
  title: 'Histogram of surface water change intensity.'
});

Queste istruzioni creano un oggetto grafico istogramma, che sostituisce l'albero degli oggetti istogramma nella scheda Console con un grafico. Il metodo del grafico contiene diversi argomenti, tra cui scale, che definisce la scala spaziale, in metri, in cui viene campionata la regione di interesse, e minBucketWidth, che viene utilizzato per controllare la larghezza dei bucket dell'istogramma.

grafico a istogramma
Figura 9. Risultati della scheda Console, che mostrano un grafico a istogramma dell'intensità della variazione delle acque superficiali.

Puoi esplorare i valori del grafico in modo interattivo posizionando il cursore sulle barre dell'istogramma.

Script finale

Di seguito è riportato lo script completo per questa sezione. Tieni presente che lo script include istruzioni per definire una geometria poligonale (roi), paragonabile alla geometria che hai creato utilizzando gli strumenti di geometria dell'editor di codice.

Editor di codice (JavaScript)

//////////////////////////////////////////////////////////////
// Asset List
//////////////////////////////////////////////////////////////

var gsw = ee.Image('JRC/GSW1_0/GlobalSurfaceWater');
var occurrence = gsw.select('occurrence');
var change = gsw.select("change_abs");
var roi = /* color: 0B4A8B */ee.Geometry.Polygon(
        [[[-74.17213, -8.65569],
          [-74.17419, -8.39222],
          [-74.38362, -8.36980],
          [-74.43031, -8.61293]]]);

//////////////////////////////////////////////////////////////
// Constants
//////////////////////////////////////////////////////////////

var VIS_OCCURRENCE = {
    min:0,
    max:100,
    palette: ['red', 'blue']
};
var VIS_CHANGE = {
    min:-50,
    max:50,
    palette: ['red', 'black', 'limegreen']
};
var VIS_WATER_MASK = {
  palette: ['white', 'black']
};

//////////////////////////////////////////////////////////////
// Calculations
//////////////////////////////////////////////////////////////

// Create a water mask layer, and set the image mask so that non-water areas are transparent.
var water_mask = occurrence.gt(90).mask(1);

// Generate a histogram object and print it to the console tab.
var histogram = ui.Chart.image.histogram({
  image: change,
  region: roi,
  scale: 30,
  minBucketWidth: 10
});
histogram.setOptions({
  title: 'Histogram of surface water change intensity.'
});
print(histogram);

//////////////////////////////////////////////////////////////
// Initialize Map Location
//////////////////////////////////////////////////////////////

// Uncomment one of the following statements to center the map on
// a particular location.
// Map.setCenter(-90.162, 29.8597, 10);   // New Orleans, USA
// Map.setCenter(-114.9774, 31.9254, 10); // Mouth of the Colorado River, Mexico
// Map.setCenter(-111.1871, 37.0963, 11); // Lake Powell, USA
// Map.setCenter(149.412, -35.0789, 11);  // Lake George, Australia
// Map.setCenter(105.26, 11.2134, 9);     // Mekong River Basin, SouthEast Asia
// Map.setCenter(90.6743, 22.7382, 10);   // Meghna River, Bangladesh
// Map.setCenter(81.2714, 16.5079, 11);   // Godavari River Basin Irrigation Project, India
// Map.setCenter(14.7035, 52.0985, 12);   // River Oder, Germany & Poland
// Map.setCenter(-59.1696, -33.8111, 9);  // Buenos Aires, Argentina\
Map.setCenter(-74.4557, -8.4289, 11);  // Ucayali River, Peru

//////////////////////////////////////////////////////////////
// Map Layers
//////////////////////////////////////////////////////////////

Map.addLayer({
  eeObject: water_mask,
  visParams: VIS_WATER_MASK,
  name: '90% occurrence water mask',
  shown: false
});
Map.addLayer({
  eeObject: occurrence.updateMask(occurrence.divide(100)),
  name: "Water Occurrence (1984-2015)",
  visParams: VIS_OCCURRENCE,
  shown: false
});
Map.addLayer({
  eeObject: change,
  visParams: VIS_CHANGE,
  name: 'occurrence change intensity'
});

Nella sezione successiva, esplorerai ulteriormente il modo in cui l'acqua è cambiata nel tempo, lavorando con il livello di transizione della classe dell'acqua.