Shared by Chistian Bunn (CIAT) under the Sustain-Cocoa project.
The provided maps are showing areas suitable for cocoa production in Côte d’Ivoire and Ghana under current and future climate conditions (i.e. cocoa Agro Ecological Zones). Agro-ecological zoning (AEZ) is a common tool to identify analogous environments, to prioritize interventions, and can be useful to investigate impact of climate change.
Presented in the chapter : “Climate change and cocoa cultivation” taken from: Umaharan, P. (ed.), Achieving sustainable cultivation of cocoa, Burleigh Dodds Science Publishing, Cambridge, UK, 2018, (ISBN: 978 1 78676 168 2; www.bdspublishing.com). Authors of the chapter: Christian Bunn, Fabio Castro and Mark Lundy, International Center for Tropical Agriculture (CIAT), Colombia; and Peter Läderach, International Center for Tropical Agriculture (CIAT), Vietnam
Page 12 of the “Climate change and cocoa cultivation” chapter (on S3 : world/cocoa/spatial/LULC/AEZ/COTE_DIVOIRE/).
We differentiated between production locations that will not fundamentally change their climatic characteristics, that is, they remain in the same agroecological zone (AEZ). These sites will be able to cope and only incremental changes to agronomic practices will be required. On the other hand, sites that will experience changes that fundamentally change climate characteristics from one AEZ to a different AEZ between current and 2050s’ climate conditions were described as adjustment sites that will need systemic changes. At these locations agronomic practices will have to change to adapt to the new cocoa AEZ. For some regions future climate projections were uncertain. We suggest adaptation by augmenting the resilience through systemic changes. Finally, some areas were found to become unsuitable for cocoa production in the future. These sites will need to transform. Production in these zones will likely become unviable and other crops should be considered. Finally, locations that are currently unsuitable but show a more favourable climate in the future are described as opportunity sites. At these sites cocoa production could be established in coming decades if soil conditions and protection status do not prohibit this.
AEZs for cocoa production in Ivory Coast were defined using a combination of spatial climate data from WorldClim (Hijmans et al., 2005) and a reduced database of occurrences of cocoa production. The database of occurrences was assembled from data used in Läderach et al. (2013) and Schroth et al. (2016b) and substantial data sets received from private sector partners. We stratified the data set from 19504 total occurrences in Ivory Coast to 796 unique occurrence pixels on a 5-Arcmin grid.
To determine distinct suitability zones for cocoa, we used hierarchical clustering with the Ward algorithm on Euclidean distances calculated from six uncorrelated climate variables after outlier removal. […] We then used the Random Forest (RF) algorithm (Breiman, 2001) to extrapolate their spatial distribution under current and future climate.[…]
Input variables were 20 bioclimatic variables at 2.5’ resolution from WorldClim (Hijmans et al., 2005) for current conditions and the respective data for 2050s in the intermediate RCP 6.0 emission scenario (Fujino et al., 2006) from the CCAFS climate portal (Ramirez and Jarvis, 2010). In addition we constructed a soil suitability variable that indicated water holding capacity for cocoa.[…]
Regional experts evaluated and verified cocoa occurrence data for model input, prioritized climate and soil variables for modelling use and confirmed the validity of the resulting model.
Analysis of a dendrogram of distances between occurrence pixels suggested four distinct suitability clusters.
Extrapolation of the RF classifiers that were trained on the clustered occurrence pixels resulted in maps of the current distribution of these clusters: Green colours indicate suitable climates (1 to 4); classification confidence of creme coloured areas was uncertain (5); grey areas indicate marginally suitable zones (6); white area was not classified (outside of Ivory Coast) or unsuitable for cocoa production (within Ivory Coast) (7).
The maps for future distribution of the suitability clusters were not provided for CIV (less interesting to Trase anyway).
tmp <- dir_create(file_temp())
save_object(
object = "world/cocoa/spatial/LULC/AEZ/COTE_DIVOIRE/RF_4Class_current_unc1.tif",
bucket = "trase-storage",
file = path(tmp, "RF_4Class_current_unc1.tif")
)
## C:/Users/cerenier/AppData/Local/Temp/RtmpS8mTMr/file45bc765f53ac/RF_4Class_current_unc1.tif
aez_civ <- read_stars(path(tmp, "RF_4Class_current_unc1.tif")) #read raster from file or connection
aez_labels <- c("Hot/Wet",
"Hot/Dry",
"Cool/Moist",
"Cool/Long dry season",
"Uncertain",
"Marginal",
"Unsuitable")
aez_palette <- c("darkgreen",
"green4",
"olivedrab4",
"olivedrab3",
"khaki1",
"gray",
"gray96")
tm_shape(aez_civ) +
tm_raster(title = "Cocoa suitability map (CIAT 2021) \n Distribution of suitability types for cocoa production \n under current climate conditions", style = "cat", labels = aez_labels, palette = aez_palette) +
tm_scale_bar() +
tm_layout(legend.outside = T, frame = FALSE)
From the README: “The Ghana map has been validated with local experts and is published, the West Africa map is coarser and was developed for the CocoaSoils project (based on WorldClim (v.1) historical climatology to select the satellite trials of the CocoaSoils project). It has not been validated by local experts and is not published but spans both Ghana and the Ivory Coast.”
The folder contains shapefiles (not a raster as for CIV) for current and future cocoa suitability in Ghana and parts of Ivory Coast and Togo (but not two separate maps for Ghana and West Africa as suggested by the Readme), and one for the change (adaptation that should be implemented by type of climate impact).
Similar to CIV (see paper in S3 (world/cocoa/spatial/LULC/AEZ/GHANA/) or here)
We developed agro-climatic zones by identifying groups with common climate characteristics in the occurrence data using RF clustering. We used bioclimatic variables isothermality, mean maximum temperature of the warmest month, mean temperature, precipitation seasonality, precipitation of the driest and coldest quarters.
In addition, we included a soil variable from several soil attributes using RF classification focusing on soil attributes that provide resilience against adverse climatic events and labelled the variable Soil Resilience Capacity (SRC). The SRC variable was developed by implementing a supervised binary classification approach based on the assumption that cocoa is cultivated at locations with appropriate soils. As input we obtained 122 soil variables from the African Soils Information Service (Leenaars et al.,2015) and cocoa experts prioritized a subset of 44 variables that are meaningful for cocoa Supplementary materials).
Extrapolation of the RF classifiers on current climate data resulted in maps of the spatial distribution of the four cocoa agro-climatic zones.
Between agro-climatic zones, patches of the “mixed” climate zone could be observed where the suitability classification was uncertain. At the margins of these agroclimatic zones area with limitations for cocoa production could be found. In these regions, a majority of model repeats suggested that this area is unsuitable, but some model repeats disagreed and classified this area as suitable.
# Load shapefile and create a geopackage output
# Current map
# path <- "world/cocoa/spatial/LULC/AEZ/GHANA/IN/"
# shp_name <- "current_final"
# bucket <- "trase-storage"
# keys <- map_chr(get_bucket(bucket, prefix = path), "Key")
# walk(keys, ~ save_object(., bucket, file = str_c(tempdir(),"/", basename(.))))
# objects <- list.files(tempdir(), pattern = shp_name, full.names = TRUE)
# objects_main <- objects[grepl("\\.shp$", objects)]
# objects_main_sf <- objects_main %>%
# read_sf() %>%
# st_transform(4326)
#
# s3write_using(objects_main_sf, FUN = write_sf,
# bucket = "trase-storage",
# object = "world/cocoa/spatial/LULC/AEZ/GHANA/OUT/CIAT_CURRENT_COCOA_AEZ_GHA.gpkg")
# rm(shp_name, bucket, path, keys, objects, objects_main, objects_main_sf)
# Future map
# path <- "world/cocoa/spatial/LULC/AEZ/GHANA/IN/"
# shp_name <- "future_final"
# bucket <- "trase-storage"
# keys <- map_chr(get_bucket(bucket, prefix = path), "Key")
# walk(keys, ~ save_object(., bucket, file = str_c(tempdir(),"/", basename(.))))
# objects <- list.files(tempdir(), pattern = shp_name, full.names = TRUE)
# objects_main <- objects[grepl("\\.shp$", objects)]
# objects_main_sf <- objects_main %>%
# read_sf() %>%
# st_transform(4326)
#
# s3write_using(objects_main_sf, FUN = write_sf,
# bucket = "trase-storage",
# object = "world/cocoa/spatial/LULC/AEZ/GHANA/OUT/CIAT_FUTURE_COCOA_AEZ_GHA.gpkg")
# rm(shp_name, bucket, path, keys, objects, objects_main, objects_main_sf)
# Change map
# path <- "world/cocoa/spatial/LULC/AEZ/GHANA/IN/"
# shp_name <- "change_final"
# bucket <- "trase-storage"
# keys <- map_chr(get_bucket(bucket, prefix = path), "Key")
# walk(keys, ~ save_object(., bucket, file = str_c(tempdir(),"/", basename(.))))
# objects <- list.files(tempdir(), pattern = shp_name, full.names = TRUE)
# objects_main <- objects[grepl("\\.shp$", objects)]
# objects_main_sf <- objects_main %>%
# read_sf() %>%
# st_transform(4326)
#
# s3write_using(objects_main_sf, FUN = write_sf,
# bucket = "trase-storage",
# object = "world/cocoa/spatial/LULC/AEZ/GHANA/OUT/CIAT_CHANGE_COCOA_AEZ_GHA.gpkg")
# rm(shp_name, bucket, path, keys, objects, objects_main, objects_main_sf)
# Load gpkg maps
aez_gha <- s3read_using(
object = "world/cocoa/spatial/LULC/AEZ/GHANA/OUT/CIAT_CURRENT_COCOA_AEZ_GHA.gpkg",
FUN = read_sf,
bucket = "trase-storage",
opts = c("check_region" = T)) %>%
mutate(AEZ = case_when(
grid_code == "1" ~ "Type 1",
grid_code == "2" ~ "Type 2",
grid_code == "3" ~ "Type 3",
grid_code == "4" ~ "Type 4",
grid_code == "5" ~ "Mixed",
grid_code == "6" ~ "Limitations",
grid_code == "7" ~ "Unsuitable",
TRUE ~ as.character(NA)))
aez_future_gha <- s3read_using(
object = "world/cocoa/spatial/LULC/AEZ/GHANA/OUT/CIAT_FUTURE_COCOA_AEZ_GHA.gpkg",
FUN = read_sf,
bucket = "trase-storage",
opts = c("check_region" = T)) %>%
mutate(AEZ = case_when(
grid_code == "1" ~ "Type 1",
grid_code == "2" ~ "Type 2",
grid_code == "3" ~ "Type 3",
grid_code == "4" ~ "Type 4",
grid_code == "5" ~ "Mixed",
grid_code == "6" ~ "Limitations",
grid_code == "7" ~ "Unsuitable",
TRUE ~ as.character(NA)))
aez_change_gha <- s3read_using(
object = "world/cocoa/spatial/LULC/AEZ/GHANA/OUT/CIAT_CHANGE_COCOA_AEZ_GHA.gpkg",
FUN = read_sf,
bucket = "trase-storage",
opts = c("check_region" = T)) %>%
mutate(ADAPTATION_TYPE = case_when(
grid_code == "1" ~ "Opportunity",
grid_code == "2" ~ "Transform to other crops",
grid_code == "3" ~ "Systemic resilience",
grid_code == "4" ~ "Systemic adaptation",
grid_code == "5" ~ "Incremental adaptation",
TRUE ~ as.character(NA)))
# Load Ghana districts
gha_districts <- s3read_using(
object = "ghana/spatial/BOUNDARIES/DISTRICTS_REGIONS/OUT/GHA_DISTRICTS.geojson",
FUN = read_sf,
bucket = "trase-storage",
opts = c("check_region" = T)) %>%
st_transform(4326)
# st_crs(gha_districts)
# st_crs(aez_gha)
# Plot current (2016) suitability classes for cocoa
tm_shape(aez_gha) +
tm_polygons(title = "Cocoa suitability map (CIAT 2021) \n Distribution of suitability types \n for cocoa production under \n current (2016) climate conditions", col = "AEZ", palette = c("gray","yellow","orange","coral1","lightgreen","purple","gray96")) +
tm_scale_bar() +
tm_layout(legend.outside = T, frame = FALSE) +
tm_shape(gha_districts) +
tm_polygons(col = "lightblue", border.col = "lightblue", alpha = 0.3, border.alpha = 0.2)
# Plot suitability classes for cocoa in 2050
tm_shape(aez_future_gha) +
tm_polygons(title = "Cocoa suitability map (CIAT 2021) \n Distribution of suitability types \n for cocoa production under \n future (2050) climate conditions", col = "AEZ", palette = c("gray", "yellow","purple", "gray96")) +
tm_scale_bar() +
tm_layout(legend.outside = T, frame = FALSE) +
tm_shape(gha_districts) +
tm_polygons(col = "lightblue", border.col = "lightblue", alpha = 0.3, border.alpha = 0.2)
# Plot adaptation types
tm_shape(aez_change_gha) +
tm_polygons(title = "Cocoa suitability map (CIAT 2021) \n Adaptation types", col = "ADAPTATION_TYPE", palette = c("lightgreen", "forestgreen","yellow", "orange", "red")) +
tm_scale_bar() +
tm_layout(legend.outside = T, frame = FALSE) +
tm_shape(gha_districts) +
tm_polygons(col = "lightblue", border.col = "lightblue", alpha = 0.3, border.alpha = 0.2)