Oefeningen
Oefening 3.1 - Brand-index
Niveau: gemiddeld
In volgende oefening bekijken we een index die de gebieden aangetast door bosbranden belicht: de Normalized Burn Ratio (NBR). Door de NBI te berekenen voor en na natuurbranden, kan een spatiale inschatting worden gemaakt van de ernst van beschadiging aan de omgeving.
De NBR wordt op een vergelijkbare manier als de NDVI berekend, waarbij het de rode band vervangen werd door een SWIR-band:
In volgende oefening maken we een analyse van een grote bosbrand (genaamd 'Camp Fire') die op 8 november nabij Paradise in Californië woedde (info hier). Dit doen we aan de hand van Landsat-8 beelden.
Stappenplan
-
Start met een nieuwe script. Kopieer en plak alvast de Cloud-mask functie voor Landsat-8 (zie vorig practicum):
function maskL8sr(image) { // Gebaseerd op de QA-waarde, wat de uitkomst is van het FMASK algoritme // QA-waarde 4 komt overeen met wolken var cloudShadowBitMask = (1 << 3); var cloudsBitMask = (1 << 4); // Get the pixel QA band. var qa = image.select('QA_PIXEL'); // Both flags should be set to zero, indicating clear conditions. var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0) .and(qa.bitwiseAnd(cloudsBitMask).eq(0)); return image.updateMask(mask).copyProperties(image, ["system:time_start"]); }
-
Filter de L8 (Surface Reflectance, Tier 1) collectie op basis van volgende ROI:
var ROI = ee.Geometry.Polygon( [[[-121.63966294798034, 39.877127888100304], [-121.63966294798034, 39.71622101257041], [-121.35470506223815, 39.71622101257041], [-121.35470506223815, 39.877127888100304]]], null, false);
-
Maak een functie aan waarin de NBR-index wordt berekend voor de Landsat 8 banden. Gebruik de SWIR-2 band. (tip). Voeg de index toe aan de collectie met de .map()-functie.
-
Filter de collectie verder met een maximale wolkbedekking van 30% en verwijder de resterende wolken uit de overgebleven beelden.
-
Maak nu 2 beelden aan binnen dezelfde periode van het jaar. Clip naar de ROI (met .clip()) en voeg ze toe als Normale Kleuren:
- 1 Beeld voor de brand: mediaan-composiet binnen de periode 1 mei 2018 - 30 juni 2018
- 1 Beeld na de brand: mediaan-composiet binnen de periode 1 mei 2019 - 30 juni 2019
-
Visualiseer nu ook de NBR's voor beide beelden (herschaal naar [0,1])
-
Om een indicatie te krijgen van de brandernst, dient het verschil tussen beide NBR's te worden berekend. Voer hiervoor de som NBR_voor - NBR_na. Vermenigvuldig het resultaat met 1000. Geef het de naam "NBR_verschil". Voeg de index ook als zwart-wit beeld toe aan je kaartvenster. Gebruik een histrogram stretch van [-200, 1000]
-
Visueel vallen er alvast heel wat zaken af te leiden. Echter voor verdere toepassing is het beter om de index verder in burn severity klassen te categoriseren, zoals in onderstaande tabel, opgesteld door de United States Geological Survey (USGS).
Burn severity klassen, met bijhorende grenzen volgens het verschil in NBR-index (dNBR). Opgesteld door de USGS. (Bron: [UN-spider])
Om het NBR-verschil beeld om te zetten naar deze discrete klassen, dienen we het beeld te herclassificeren. Werk dit uit, door gebruik te maken van de .where()
, functie. Passende visualisatieparameters zijn te vinden onder de variabele Burn_severity
, gegeven in onderstaande code.
// Remap values. gt= greater than (>), lte = less then or equal (<=)
var Burn_severity = .... # VUL AAN
var BurnSeverity_VIS = {bands:["constant"], palette:["1b930c","98c825","00ff37","fff708","ffb716","ff7310","c20665"]}
Map.addLayer(Burn_severity, BurnSeverity_VIS, 'Burn Severity classes')
Voeg vervolgens een legende toe aan de hand van onderstaande code:
//==========================================================================================
// ADD A LEGEND
// positie van legende
var legend = ui.Panel({
style: {
position: 'bottom-left',
padding: '8px 15px'
}});
// Legendetitel aanmaken
var legendTitle = ui.Label({
value: 'dNBR Classes',
style: {fontWeight: 'bold',
fontSize: '18px',
margin: '0 0 4px 0',
padding: '0'
}});
// Titel toevoegen aan paneel
legend.add(legendTitle);
// functie waarbij een kleur + naam aan een legende-rij wordt toegevoegd
var makeRow = function(color, name) {
// Create the label that is actually the colored box.
var colorBox = ui.Label({
style: {
backgroundColor: '#' + color,
// Use padding to give the box height and width.
padding: '8px',
margin: '0 0 4px 0'
}});
// Create the label filled with the description text.
var description = ui.Label({
value: name,
style: {margin: '0 0 4px 6px'}
});
// return the panel
return ui.Panel({
widgets: [colorBox, description],
layout: ui.Panel.Layout.Flow('horizontal')
})};
// Palet met de HTML-kleuren
var palette =['7a8737', 'acbe4d', '0ae042', 'fff70b', 'ffaf38', 'ff641b', 'a41fd6', 'ffffff'];
// Namen volgens UN-SPIDER van de NBR-index
var names = ['Enhanced Regrowth, High','Enhanced Regrowth, Low','Unburned', 'Low Severity',
'Moderate-low Severity', 'Moderate-high Severity', 'High Severity', 'NA'];
// Toevoegen van benamingen en kleuren via for-loop
for (var i = 0; i < 8; i++) {
legend.add(makeRow(palette[i], names[i]));
}
// Opgevulde legende toevoegen aan het kaartvenster
Map.add(legend);
Oplossing
Script met volledige uitwerking: https://code.earthengine.google.com/ba69d88000359b48fbb61458f8904fbf
Oefening 3.2 - Herbebossing Regenwoud in Aimores, Brazilië
Info: Examenopdracht 2019-2020.
Tip: Gebruik van NDVI als indicator van ontbossing
Context
Voor deze opdracht trekken we naar Aimores, in de Braziliaanse provincie Minas Gerais. Dit gebied bestond honderden jaren geleden uit uitgestrekt tropisch bos, het Atlantische woud, en bevat een buitengewoon grote biodiversiteit. In de 20e eeuw werd het leeuwendeel van dit gebied echter ontbost, waardoor naar schatting slechts 15% van het Atlantische woud is overgebleven.
In 1999 besloot een koppel om het heft in eigen handen te nemen door het starten van een herbebossingsproject in het gebied, met groot succes.
Gegeven:
-
Afbakening van het projectgebied (als Shape-file (Studiegebied).).
-
Tijdstip 1: 2001. Hiervoor dien je gebruik te maken van een Landsat-7 beeld.
-
Tijdstip 2: 2022. Hiervoor maak je gebruik van een Landsat-8 beeld.
-
Voor beide jaren kun je het beeld weerhouden met de laagste wolkbedekking (geen cloudmasking nodig).
// Applies scaling factors Landsat (zie https://www.usgs.gov/faqs/why-are-fill-values-and-scaling-factors-landsat-collection-2-level-2-products-different-those).
function applyScaleFactors(image) {
var opticalBands = image.select('SR_B.*').multiply(0.0000275).add(-0.2);
var thermalBand = image.select('ST_B.*').multiply(0.00341802).add(149.0);
return image.addBands(opticalBands, null, true)
.addBands(thermalBand, null, true);
}
Gevraagd:
Maak een beeld aan, waar voor elke pixel te zien is of er vegetatie is bijgekomen of verdwenen tussen 2000 en 2020 binnen het projectgebied.
Tips:
-
Gebruik een gepaste index.
-
De bandverdeling van Landsat 7/8 is verschillend! Houd hier rekening mee.
Oplossing
Script: https://code.earthengine.google.com/0af55bdc1ac6247123031a00f563992d
Oefening 3.3 - De Enhanced Vegetation Index (EVI)
De EVI index
De EVI is gelijkaardig aan de NDVI daar het gebruikt wordt om de aanwezigheid (of ‘greenness’) van vegetatie a.d.h.v. satellietbeelden te kwantificeren. Het werd ontwikkeld om aan enkele “limitaties” van de ndvi te voldoen:
- EVI is gevoeliger voor gebieden met hogere biomassa
- EVI reduceert de invloed van de atmosferische condities
- EVI corrigeert de ‘canopy background noise’, die bij NDVI voorkomt
De EVI is het meest gebruikte alternatief voor de NDVI.
De EVI wordt berekend als volgt:
(waarbij \(G\): een versterkende constante, \(C1,C2\) coëfficienten en \(L\) een ‘canopy background adjusment factor’)
Voor Sentinel 2, wordt deze formule: \(\(EVI_{S2} = 2.5 * {B8 - B4 \over B8 + 6 * B4 – 7.5*B2 + 1}.\)\)
Gevraagd: maak de EVI aan, visualiseer en vergelijk met de NDVI-index voor onderstaand gegeven Sentinel-2 beeld in Belém.
var S2_Belem = ee.Image('COPERNICUS/S2_SR_HARMONIZED/20230912T133839_20230912T133836_T22MGD')