¿Cómo analizar coberturas y realizar planes de conservación?
Se trata de hacer un análisis sobre las tendencias históricas de pérdida y ganancia de la cobertura forestal desde 1999 hasta 2019. El modelo que vamos a crear está hecho por criterios globales, lo que significa que algunos tipos de bosques han sido incluidos en él, pero no significa que haya bosques primarios en absoluto.Por tanto algunas cosas quedaran dentro del criterio de uds los expertos.
Atención: ¿Qué tal crear una Área de Conservación para tu Polígono? ¿Lo has hecho ya? Por favor, ten cuidado, no podrás avanzar sin tenerlo.
Antes de empezar, es necesario instalar los paquetes de R requeridos. Por favor, realiza una sola ejecución de instalación por computadora. Recuerda que la instalación se realiza con la función install.packages() y el nombre del paquete entre comillas. Por ejemplo, install.packages(“maptools”). Luego, puedes cargar los paquetes en tu sesión de R utilizando la función library(), como se muestra en el siguiente ejemplo: library(maptools). A continuación los paquetes.
library(rgdal)
library(sp)
library(raster)
library(gdalUtilities)
library(parallel)
library(sf)
library(mapview)
library(gfcanalysis)
Dado nuestros conocimientos previos, ahora podremos avanzar rápidamente en los siguientes pasos sin mayor explicación.
nota: Debes tener una carpeta llamada Reserva dentro de “clase_conservacion”.
Recuerda que para esta altura ya debes de haber creado tu polígono en QGIS. Entonces, vamos a importarlo. Debes ir punto a punto. Lastimosamente el siguiente codigo es muy delicado y como resultado no podemos dividirlo o explicarlo del todo.
setwd("D:/biato/wikiaves/clase_conservacion/Reserva")
getwd()
## [1] "D:/biato/wikiaves/clase_conservacion/Reserva"
park <- st_read("D:/biato/wikiaves/clase_conservacion/Reserva/Corredor_gigante.shp")
## Reading layer `Corredor_gigante' from data source
## `D:\biato\wikiaves\clase_conservacion\Reserva\Corredor_gigante.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 1 feature and 1 field
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: -76.04547 ymin: 3.621559 xmax: -76.01371 ymax: 3.653911
## Geodetic CRS: WGS 84
st <- "+proj=longlat +datum=WGS84 +no_defs"
park <- st_transform(park, crs = st)
mapview( park, layer = "Admin. level 0", color = "000000")
output_folder <- setwd("D:/biato/wikiaves/clase_conservacion/Reserva")
Establecimos algunos parámetros de grabado y ahora realizaremos la descarga de la información de cobertura correspondiente a nuestra área.
tiles <- calc_gfc_tiles(park)
tiles
## class : SpatialPolygons
## features : 1
## extent : -80, -70, 0, 10 (xmin, xmax, ymin, ymax)
## crs : +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs
plot(tiles, col = "#EF2929", lwd = 1, main = "Plot Area + Tiles", xlab = "Long", ylab = "Lat") ## please input 1 or 2 depends on the features result - it is the number of tiles needed
plot(park, col = "#555753", add = TRUE)
box()
####### Descarga de rastres##### Solo se descarga una vez
download_tiles(
tiles,
output_folder,
images = c("treecover2000", "lossyear", "gain", "datamask"),
dataset = "GFC-2019-v1.7"
)
#######Corre haste arriba #####
gfc_extract <- extract_gfc(park, output_folder, dataset = "GFC-2019-v1.7", overwrite=TRUE, to_UTM= F, filename="Park_extract.tif")
#Going on
A continuación tendremos los valores del cambio de vegetación en el área dependiendo nuestro criterio de porcentaje de cobertura. Vamos a exportarlos de la siguiente manera. Ten en cuenta que se graban en .csv.
forest_threshold <- 75
gfc75 <- threshold_gfc(gfc_extract, forest_threshold=forest_threshold, filename="Park_ex_extract_2.tif", overwrite=TRUE)
gfc75_stats <- gfc_stats(park, gfc75, dataset = "GFC-2019-v1.7")
write.csv(gfc75_stats$loss_table, file="park_GFC75_losstable.csv", row.names=FALSE)
write.csv(gfc75_stats$gain_table, file="park_GFC75_gaintable.csv", row.names=FALSE)
#Video showing the "devastation"
gfc75_annual_stack <- annual_stack(gfc75, dataset = "GFC-2019-v1.7")
writeRaster(gfc75_annual_stack, filename="park_GFC75_annual.tif", overwrite=TRUE, bylayer=TRUE)
park$label <- "ZOI"
animate_annual(park, gfc75_annual_stack, out_dir='output_folder', site_name='MNA_GFC75',type = "html")
nota: en tu carpeta encontraras las carperas: park_GFC75_losstable.csv = cantidad en hectáreas de bosque pedido y park_GFC75_gaintable.csv = cantidad de bosque ganado en el área de estudio.
nota 2: aparecerá en la carpeta un archivo llamado “gfc_animation.html” le das doble click y listo. También, aparecerá una carpeta llamada “gfc_animation_imgs” donde podrás encontrar todas las imágenes o mapas que crearon el video.
Ahora deseamos exportar la informacion de tal forma que sea util para otras plataformas de SIG, en nuestro caso seran exportadas en formato raster.
Forest<- raster::raster("Park_ex_extract_2.tif", band = 1)
Lost<- raster::raster("Park_ex_extract_2.tif", band = 2)
gained<- raster::raster("Park_ex_extract_2.tif", band = 3)
fondo_1<- raster::raster("Park_ex_extract_2.tif", band = 4)
fondo_2<- raster::raster("Park_ex_extract_2.tif", band = 5)
writeRaster(Forest,
"D:/biato/wikiaves/clase_conservacion/Reserva/bosque1.tiff",
format="GTiff", overwrite=T)
writeRaster(Lost,
"D:/biato/wikiaves/clase_conservacion/Reserva/perdida.tiff",
format="GTiff", overwrite=T)
writeRaster(gained,
"D:/biato/wikiaves/clase_conservacion/Reserva/ganado.tiff",
format="GTiff", overwrite=T)
mapview(Forest, layer = "Admin. level 0") ###please I encourage your to type every raster made before, making an idea of them visualization.
nota: donde, “bosque1.tiff” = Cobertura boscosa total, “perdida.tiff” = total de bosque perdido hasta el 2020 y “ganado.tiff” = total de bosque ganado en el area.
Ahora analizaremos algunos otros aspectos de la cobertura boscosa, cosa que nos brindara información para toma de decisiones más asertiva.
Primero instalaremos algunos nuevos paquetes. Para esta altura ud debe contar con el conocimiento para entender que el siguiente código es solo ejecución del paquete y debe realizar una única instalación previa.
library(landscapemetrics)
library(landscapetools)
library(ggplot2)
Ahora importaremos de nuevo el raster de bosque creado de nuestra area
primario <- raster("D:/biato/wikiaves/clase_conservacion/Reserva/bosque1.tiff")
###
primario_Park <- crop(x = primario, y = park) ## it is to cut it off
plot(primario_Park)
A continuación realizaremos algunos análisis de la cobertura,
sr <- "+proj=utm +zone=18 +datum=WGS84 +units=m +no_defs"
primario_Park2 <- projectRaster(primario_Park, crs = sr, method ="ngb")
#Pulling your weight forward
check_landscape(primario_Park)
## layer crs units class n_classes OK
## 1 1 geographic degrees integer 2 ✖
sr <- "+proj=utm +zone=18 +datum=WGS84 +units=m +no_defs"
primario_Park2 <- projectRaster(primario_Park, crs = sr, method ="ngb")
check_landscape(primario_Park2)
## layer crs units class n_classes OK
## 1 1 projected m integer 2 ✔
#extract some metrics
metrics_ <-calculate_lsm(primario_Park2, #a raster object
what=c("lsm_c_ai", # metric name
"lsm_c_frac_mn", # metric name
"lsm_l_division",# metric name
"lsm_l_pd")) # metric name
head(metrics_)
## # A tibble: 6 × 6
## layer level class id metric value
## <int> <chr> <int> <int> <chr> <dbl>
## 1 1 class 0 NA ai 85.9
## 2 1 class 1 NA ai 88.1
## 3 1 class 0 NA frac_mn 1.04
## 4 1 class 1 NA frac_mn 1.03
## 5 1 landscape NA NA division 0.639
## 6 1 landscape NA NA pd 19.3
metrics_names<-lsm_abbreviations_names #store the names
tail(metrics_names) #show the last 6 observations
## # A tibble: 6 × 5
## metric name type level function_name
## <chr> <chr> <chr> <chr> <chr>
## 1 sidi simpson's diversity index diversity metric landscape lsm_l_sidi
## 2 siei simspon's evenness index diversity metric landscape lsm_l_siei
## 3 split splitting index aggregation metric landscape lsm_l_split
## 4 ta total area area and edge metric landscape lsm_l_ta
## 5 tca total core area core area metric landscape lsm_l_tca
## 6 te total edge area and edge metric landscape lsm_l_te
class_metrics<-calculate_lsm(list(primario_Park2), # add multiple maps
level = c("class"), #patch- landscape other options
type="aggregation metric") #get all the metrics for the given level
Estos análisis nos otorgan una variedad de resultados, pero para nuestro ejercicio solo vamos a necesitar los siguientes:
Resultado 1 : número de parches de bosque que están en el área. Graficando el paisaje con los parches etiquetados con el id de parche correspondiente, esto quiere decir que cuando un área se encuentra del mismo color se consideran unidas y pertenecientes al mismo parche de bosque.
patches <- show_patches(primario_Park2,labels = FALSE,class = 1) #shows the patches of class 3
patches
## $layer_1
Resultado 2 : Tamaño de los parches de bosque, entre más amarillo, mayor si área.
show_lsm(primario_Park2,labels = F,class = 1,what = "lsm_p_area") #show the patches in colours based on the area, good to observe where that largest patch is located
## $layer_1
Resultado 3 : Borde de bosque efectivo a lo largo de toda la cobertura.
show_cores(primario_Park2,labels = F,class = 1)
## $layer_1