4.3 Analyse émissions/séquestrations

Description

Le calcul des émissions de CO2 dues à la déforestation et à la séquestration par le reboisement au cours de la période de référence 2003–2018 est basé sur les cartes forêt/non-forêt néttoyées de 2003 et 2018, ainsi que sur les cartes de la biomasse aérienne des années correspondantes.

Dans une première étape, la biomasse racinaire est calculée sur la base des cartes de la biomasse aérienne, en utilisant les rapports racine-tige de Mokany et al (2006) pour les forêts sèches tropicales.

Le calcul des émissions de CO2, et fait sur base des cartes de biomasse (aérienne et racinaire) de l’année 2003, en considerant que les pixels qui ont été classés comme forêt en 2003 et comme non-forêt en 2018. La biomasse restant après la déforestation est pris en compte par la soustraction de la biomasse moyenne des pixels non-forêt en 2018. Pour les pixels où une différence négative en résulte (augmentation de la biomasse malgré la déforestation), celle-ci est fixée à 0. La conversion de la biomasse en CO2 se fait au moyen d’une teneur en carbone de la biomasse de 0,47 (GIEC, 2006) et du rapport des poids moléculaires CO2/C de 44/12.

La même procédure est utilisée pour calculer la séquestration due au reboisement entre 2003 et 2018. La biomasse des pixels reboisés de 2003 est soustraite de celle de 2018. Lorsque la différence est négative (diminution de la biomasse malgré le reboisement), elle est fixée à 0.

4.3.0.1 Example

Les résultats sont évalués pour l’ensemble du territoire du Togo et les différents régions: La superficie annuelle déboisée (ha/a), la perte moyenne de biomasse et de CO2 due à la déforestation par hectare déboisé (tCO2/ha) et la perte annuelle totale sur la zone analysée (tCO2/a). L’évaluation de la croissance de la biomasse et de la séquestration du CO2 due au reboisement est effectuée de manière analogue.

Déforestation
Reboisement
Total
Région ha/a tCO2/ha tCO2/a ha/a tCO2/ha tCO2/a ha/a tCO2/a
TGO -15’060 -62.7 -944’475 9’824 21.8 213’885 -5’236 -730’590
Centre -4’683 -95.2 -445’750 2’883 26.5 76’489 -1’799 -369’261
Kara -1’545 -56.7 -87’631 694 28.7 19’896 -851 -67’735
Maritime -3’273 -1.6 -5’306 2’467 8.8 21’784 -806 16’479
Plateaux -5’284 -65.8 -347’859 3’666 22.7 83’157 -1’618 -264’702
Savanes -275 -52.4 -14’399 114 32.9 3’745 -161 -10’654

Script R: 03_NRF-MRV/02_AGB/_src/04_analyze-ER.R

###############################################################################
# 04_analyze-ER.R: Analyse des émissions et séquestrations CO2
# -----------------------------------------------------------------------------
# Bern University of Applied Sciences
# Oliver Gardi, <oliver.gardi@bfh.ch>
# 13 Mai 2020

# Définitions des variables ===================================================

# Rapports racines-tige forêts tropicales sèches selon Mokany et al. (2006)
# https://onlinelibrary.wiley.com/doi/abs/10.1111/j.1365-2486.2005.001043.x
RSR.Y    <- 0.563     # moyenne pour la jeune forêt      
RSR.Y.SE <- 0.086     # écart type pour la jeune forêt  
RSR.O    <- 0.275     # moyenne pour les forêts matures 
RSR.O.SE <- 0.003     # écart type pour les forêts matures
RSR.AGB  <- 20        # Seuil biomasse aérienne jeunes forêts <-> forêts matures

# Teneur en carbone de la biomasse (valeur défault IPCC 2006)
# https://www.ipcc-nggip.iges.or.jp/public/2006gl/pdf/4_Volume4/V4_04_Ch4_Forest_Land.pdf#page=48
C.RATIO  <- 0.47

# Répétoires des cartes biomasse et des résultats
AGB.REF.DIR <- DIR.MRV.AGB.REF
AGB.RES.DIR <- DIR.MRV.AGB.RES



# Analyse des cartes de biomasse aérienne =====================================

# Biomasse aérienne par strate IFN (carte RapidEye) ---------------------------

agb.2015 <- raster(paste0(AGB.REF.DIR, "/TGO_2015_AGB_R.tif"))
strata  <- raster(paste0(DIR.RAW.DAT, "/RapidEye/TGO_30m.tif"))

zonal(agb.2015, strata, fun="mean")
zonal(agb.2015, strata, fun="sd")

# Distribution des biomasses aériennes (densité) ------------------------------

# Charger cartes biomasse aérienne 2003, 2015 et 2018
files <- dir(AGB.REF.DIR, pattern="^TGO.*\\.tif$", full.names=TRUE)
maps <- stack(files)
names(maps) <- substr(names(maps), 5, 8)

# Sélectionner les années 2003 et 2018
maps.dat <- as.data.frame(na.omit(maps[[c("X2003", "X2018")]][]))

# production de la figure
dens.plot <- maps.dat %>% gather(variable, value, X2003, X2018) %>%
  ggplot(aes(x=value, color=variable, linetype=variable)) +
  geom_density() +
  theme_light() 

pdf(paste0(AGB.RES.DIR, "/AGB-densities_03-18.pdf"))
print(dens.plot)
dev.off() 


# Analyze des émissions et séquestrations CO2 2003-2018 =======================

# charger cartes de biomasse 2003 et 2018 et calcule de la biomasse racinaire
agb.2003 <- raster(paste0(AGB.REF.DIR, "/TGO_2003_AGB_R.tif"))
bgb.2003 <- agb.2003 * RSR.O
bgb.2003[agb.2003 <= RSR.AGB] <- agb.2003[agb.2003 <= RSR.AGB] * RSR.Y

agb.2018 <- raster(paste0(AGB.REF.DIR, "/TGO_2018_AGB_R.tif"))
bgb.2018 <- agb.2018 * RSR.O
bgb.2018[agb.2018 <= RSR.AGB] <- agb.2018[agb.2018 <= RSR.AGB] * RSR.Y

# charger cartes des surfaces forestiers 2003 et 2018
fc.2003 <- raster(paste0(DIR.MRV.MCF.CLN, "/FC30/TGO/TGO_2003_F30cf.tif"))
fc.2018 <- raster(paste0(DIR.MRV.MCF.CLN, "/FC30/TGO/TGO_2018_F30cf.tif"))


# Carte des pertes de biomasse ------------------------------------------------

# Masque forêt en 2003 et non-forêt en 2018
defor <- fc.2003 == FOREST & fc.2018 != FOREST       

# moyenne biomasse non-forêt (aérienne et racinaire)
nf.agb <- mean(agb.2018[fc.2018 == 3], na.rm=TRUE)   
nf.bgb <- mean(bgb.2018[fc.2018 == 3], na.rm=TRUE)

# Perte de biomasse due à la déforestation = biomasse 2003 - moyenne biomasse non-forêt
defor.agb <- mask(agb.2003, defor, maskvalue=0) - nf.agb
defor.bgb <- mask(bgb.2003, defor, maskvalue=0) - nf.bgb

# Mettre à 0, là ou la perte est négative
defor.agb[defor.agb < 0] <- 0  
defor.bgb[defor.bgb < 0] <- 0 


# Carte des gains de biomasse -------------------------------------------------

# Masque non-forêt en 2003 et forêt en 2018
regen <- fc.2003 != FOREST & fc.2018 == FOREST

# Gain de biomasse due à la régénération = biomasse 2018 - biomasse 2003
regen.agb.2003 <- mask(agb.2003, regen, maskvalue=0)
regen.bgb.2003 <- mask(bgb.2003, regen, maskvalue=0)
regen.agb.2018 <- mask(agb.2018, regen, maskvalue=0)
regen.bgb.2018 <- mask(bgb.2018, regen, maskvalue=0)
regen.agb <- regen.agb.2018 - regen.agb.2003
regen.bgb <- regen.bgb.2018 - regen.bgb.2003

# Mettre à 0, là ou le gain est négative
regen.agb[regen.agb < 0] <- 0
regen.bgb[regen.bgb < 0] <- 0


# Calculer émissions ets séquestrations pour une région -----------------------
#
# @param defor      Carte des pixels déforestés     
# @param defor.agb  Carte des pertes de biomasse aérienne
# @param defor.bgb  Carte des pertes de biomasse racinaire
# @param regen      Carte des pixels régénérés
# @param regen.agb  Carte des gains de biomasse aérienne
# @param regen.bgb  Carte des gains de biomasse racinaire
# @param aoi        Zone d'intérêt (région)
# @param years      Nombre d'années entre les observations
#
# @return           List avec les éléments 
#                   - defor.area     Surface déforestée
#                   - defor.area.a   Surface déforestée par année
#                   - defor.agb.ha   Perte de biomasse aérienne par hectare déforestée
#                   - defor.agb.a    Perte de biomasse aérienne par année
#                   - defor.bgb.ha   ... même chose pour la biomasse racinaire ...
#                   - defor.bgb.a
#                   - defor.co2.ha   ... et converti en CO2eq ...
#                   - defor.co2.a
#                   - regen.area     Surface régénérée
#                   - regen.area.a   Surface régénérée par année
#                   - regen.agb.ha   Gain de biomasse aérienne par hectare régénérée
#                   - regen.agb.a    Gain de biomasse aérienne par année
#                   - regen.bgb.ha   ... même chose pour la biomasse racinaire ...
#                   - regen.bgb.a
#                   - regen.co2.ha   ... et converti en CO2eq ...
#                   - regen.co2.a
#
#

emissions <- function(defor, defor.agb, defor.bgb, 
                      regen, regen.agb, regen.bgb, aoi=NULL, years=15) {
  
  # couper la zone d'intérêt
  if(!is.null(aoi)) {
    defor     <- mask(crop(defor, aoi), aoi)
    defor.agb <- mask(crop(defor.agb, aoi), aoi)
    defor.bgb <- mask(crop(defor.agb, aoi), aoi)
    regen     <- mask(crop(regen, aoi), aoi)
    regen.agb <- mask(crop(regen.agb, aoi), aoi)
    regen.bgb <- mask(crop(regen.bgb, aoi), aoi)
  }
  
  # convertir biomasse aérienne et racinaire en CO2eq
  defor.co2    <- (defor.agb + defor.bgb) * C.RATIO * 44/12
  # déterminer la surface (taille d'un pixel Landsat = 30mx30m)
  defor.area   <- sum(defor[], na.rm=TRUE) * 30^2 / 10000
  defor.area.a <- defor.area / years
  # moyenne des pertes (par hectare)
  defor.agb.ha <- mean(defor.agb[], na.rm=TRUE)
  defor.bgb.ha <- mean(defor.bgb[], na.rm=TRUE)
  defor.co2.ha <- mean(defor.co2[], na.rm=TRUE)
  
  # la même chose pour la régénération
  regen.co2    <- (regen.agb + regen.bgb) * C.RATIO * 44/12
  regen.area   <- sum(regen[], na.rm=TRUE) * 30^2 / 10000
  regen.area.a <- regen.area / years
  regen.agb.ha <- mean(regen.agb[], na.rm=TRUE)
  regen.bgb.ha <- mean(regen.bgb[], na.rm=TRUE)
  regen.co2.ha <- mean(regen.co2[], na.rm=TRUE)
  
  return(list(
    defor.area   = defor.area, 
    defor.area.a = defor.area.a,
    defor.agb.ha = defor.agb.ha,
    defor.agb.a  = defor.agb.ha * defor.area.a,
    defor.bgb.ha = defor.bgb.ha,
    defor.bgb.a  = defor.bgb.ha * defor.area.a,
    defor.co2.ha = defor.co2.ha,
    defor.co2.a  = defor.co2.ha * defor.area.a,
    regen.area   = regen.area, 
    regen.area.a = regen.area.a,
    regen.agb.ha = regen.agb.ha,
    regen.agb.a  = regen.agb.ha * regen.area.a,
    regen.bgb.ha = regen.bgb.ha,
    regen.bgb.a  = regen.bgb.ha * regen.area.a,
    regen.co2.ha = regen.co2.ha,
    regen.co2.a  = regen.co2.ha * regen.area.a
  ))
}


# COMMENCER LE TRAITEMENT #####################################################

# Analyse des pertes de biomasse et CO2 dà cause de la déforestation
# et les gains à cause de la régénération pour Togo et les régions ------------

# traitement en parallèle
registerDoParallel(CORES)
res <- foreach(i=0:length(TGO.REG), .combine=rbind) %dopar% {
  
  if(i==0) {
    # Analyse pour l'ensemble du Togo
    data.frame(reg = "TGO", 
               emissions(defor, defor.agb, defor.bgb, regen, regen.agb, regen.bgb))
  } else {
    # Analyse pour une région
    region <- TGO.reg[i,]
    data.frame(reg = region$NAME_1, 
               emissions(defor, defor.agb, defor.bgb, regen, regen.agb, regen.bgb, 
                         aoi=region))
  }
}

# sauvegarder le tableau des résultats
write.csv(res, paste0(AGB.RES.DIR, "/NERF-Results.csv"), row.names=FALSE)