El código realiza un análisis geomorfométrico en Casanare a partir de un modelo digital de elevación (DEM), generando información clave sobre la pendiente y el aspecto del terreno.
Elimina todos los objetos en el entorno de trabajo para evitar conflictos con datos previos.
rm(list=ls())
library(elevatr)
## Warning: package 'elevatr' was built under R version 4.2.3
## elevatr v0.99.0 NOTE: Version 0.99.0 of 'elevatr' uses 'sf' and 'terra'. Use
## of the 'sp', 'raster', and underlying 'rgdal' packages by 'elevatr' is being
## deprecated; however, get_elev_raster continues to return a RasterLayer. This
## will be dropped in future versions, so please plan accordingly.
library(sf)
## Warning: package 'sf' was built under R version 4.2.3
## Linking to GEOS 3.9.3, GDAL 3.5.2, PROJ 8.2.1; sf_use_s2() is TRUE
library(leaflet)
## Warning: package 'leaflet' was built under R version 4.2.3
library(terra)
## Warning: package 'terra' was built under R version 4.2.3
## terra 1.7.71
library(MultiscaleDTM)
## Warning: package 'MultiscaleDTM' was built under R version 4.2.3
library(exactextractr)
## Warning: package 'exactextractr' was built under R version 4.2.3
Carga un raster (imagen georreferenciada) que representa la elevación del terreno en Casanare.
# change the path & DEM filename as needed
(dem = terra::rast("datos/Elevacion_casanare.tif"))
## class : SpatRaster
## dimensions : 3573, 5128, 1 (nrow, ncol, nlyr)
## resolution : 0.0006856127, 0.0006856127 (x, y)
## extent : -73.125, -69.60918, 4.214913, 6.664608 (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +ellps=GRS80 +no_defs
## source : Elevacion_casanare.tif
## name : Elevacion_casanare
## min value : -789
## max value : 5332
dem2 = terra::aggregate(dem,2, "mean")
##
|---------|---------|---------|---------|
=========================================
Se carga un shapefile en formato gpkg con los límites municipales de Casanare.
Importante verificar que los datos vectoriales contengan información relevante como nombres y áreas municipales.
(munic <- sf::st_read("datos/mun_casanare.gpkg"))
## Reading layer `municipiosdecolombia' from data source
## `E:\GB2\Rproyect\datos\mun_casanare.gpkg' using driver `GPKG'
## Simple feature collection with 19 features and 5 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -73.07777 ymin: 4.287476 xmax: -69.83591 ymax: 6.346111
## Geodetic CRS: MAGNA-SIRGAS
## Simple feature collection with 19 features and 5 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -73.07777 ymin: 4.287476 xmax: -69.83591 ymax: 6.346111
## Geodetic CRS: MAGNA-SIRGAS
## First 10 features:
## dpto_ccdgo mpio_ccdgo mpio_cdpmp mpio_cnmbr Area_km2
## 1 85 001 85001 YOPAL 2480.4271
## 2 85 010 85010 AGUAZUL 1441.4765
## 3 85 015 85015 CHÁMEZA 309.6568
## 4 85 125 85125 HATO COROZAL 5494.7289
## 5 85 136 85136 LA SALINA 199.7128
## 6 85 139 85139 MANÍ 3750.5337
## 7 85 162 85162 MONTERREY 778.8124
## 8 85 225 85225 NUNCHÍA 1100.7380
## 9 85 230 85230 OROCUÉ 4744.5075
## 10 85 250 85250 PAZ DE ARIPORO 12076.2384
## geom
## 1 MULTIPOLYGON (((-72.39513 5...
## 2 MULTIPOLYGON (((-72.56545 5...
## 3 MULTIPOLYGON (((-72.81017 5...
## 4 MULTIPOLYGON (((-70.3614 6....
## 5 MULTIPOLYGON (((-72.33885 6...
## 6 MULTIPOLYGON (((-72.34155 5...
## 7 MULTIPOLYGON (((-72.89989 5...
## 8 MULTIPOLYGON (((-72.19558 5...
## 9 MULTIPOLYGON (((-71.50965 5...
## 10 MULTIPOLYGON (((-70.32197 6...
Se verifica que ambos conjuntos de datos compartan el mismo sistema de coordenadas.
Si hay discrepancias, se transforma el CRS del vectorial al mismo que el raster para evitar problemas de superposición.
crs(dem2) # Ver CRS del raster
## [1] "GEOGCRS[\"unknown\",\n DATUM[\"Unknown based on GRS80 ellipsoid using towgs84=0,0,0,0,0,0,0\",\n ELLIPSOID[\"GRS 1980\",6378137,298.257222101004,\n LENGTHUNIT[\"metre\",1],\n ID[\"EPSG\",7019]]],\n PRIMEM[\"Greenwich\",0,\n ANGLEUNIT[\"degree\",0.0174532925199433,\n ID[\"EPSG\",9122]]],\n CS[ellipsoidal,2],\n AXIS[\"latitude\",north,\n ORDER[1],\n ANGLEUNIT[\"degree\",0.0174532925199433,\n ID[\"EPSG\",9122]]],\n AXIS[\"longitude\",east,\n ORDER[2],\n ANGLEUNIT[\"degree\",0.0174532925199433,\n ID[\"EPSG\",9122]]]]"
st_crs(munic) # Ver CRS del vector
## Coordinate Reference System:
## User input: MAGNA-SIRGAS
## wkt:
## GEOGCRS["MAGNA-SIRGAS",
## DATUM["Marco Geocentrico Nacional de Referencia",
## ELLIPSOID["GRS 1980",6378137,298.257222101,
## LENGTHUNIT["metre",1]]],
## PRIMEM["Greenwich",0,
## ANGLEUNIT["degree",0.0174532925199433]],
## CS[ellipsoidal,2],
## AXIS["geodetic latitude (Lat)",north,
## ORDER[1],
## ANGLEUNIT["degree",0.0174532925199433]],
## AXIS["geodetic longitude (Lon)",east,
## ORDER[2],
## ANGLEUNIT["degree",0.0174532925199433]],
## USAGE[
## SCOPE["Horizontal component of 3D system."],
## AREA["Colombia - onshore and offshore. Includes San Andres y Providencia, Malpelo Islands, Roncador Bank, Serrana Bank and Serranilla Bank."],
## BBOX[-4.23,-84.77,15.51,-66.87]],
## ID["EPSG",4686]]
munic <- st_transform(munic, crs(dem2))
Se recorta el DEM para ajustarse a los límites municipales.
El resultado es una capa raster limitada exclusivamente a la región de Casanare.
dem3 = terra::crop(dem2,munic, mask=TRUE)
Se convierte el DEM y el vector municipal a EPSG:9377, un sistema de coordenadas más adecuado para análisis geométricos.
# check the parameters of this terra function here
# https://rdrr.io/github/rspatial/terra/man/project.html
(dem_plane = project(dem3, "EPSG:9377"))
## class : SpatRaster
## dimensions : 1506, 2370, 1 (nrow, ncol, nlyr)
## resolution : 151.8373, 151.8373 (x, y)
## extent : 4991306, 5351161, 2031677, 2260344 (xmin, xmax, ymin, ymax)
## coord. ref. : MAGNA-SIRGAS / Origen-Nacional (EPSG:9377)
## source(s) : memory
## name : Elevacion_casanare
## min value : -8.611589
## max value : 4416.087891
# check the parameters of this sf function here
# https://github.com/rstudio/cheatsheets/blob/main/sf.pdf
(munic_plane = sf::st_transform(munic, "EPSG:9377"))
## Simple feature collection with 19 features and 5 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: 4991380 ymin: 2031770 xmax: 5350177 ymax: 2259280
## Projected CRS: MAGNA-SIRGAS / Origen-Nacional
## First 10 features:
## dpto_ccdgo mpio_ccdgo mpio_cdpmp mpio_cnmbr Area_km2
## 1 85 001 85001 YOPAL 2480.4271
## 2 85 010 85010 AGUAZUL 1441.4765
## 3 85 015 85015 CHÁMEZA 309.6568
## 4 85 125 85125 HATO COROZAL 5494.7289
## 5 85 136 85136 LA SALINA 199.7128
## 6 85 139 85139 MANÍ 3750.5337
## 7 85 162 85162 MONTERREY 778.8124
## 8 85 225 85225 NUNCHÍA 1100.7380
## 9 85 230 85230 OROCUÉ 4744.5075
## 10 85 250 85250 PAZ DE ARIPORO 12076.2384
## geom
## 1 MULTIPOLYGON (((5066965 217...
## 2 MULTIPOLYGON (((5048125 215...
## 3 MULTIPOLYGON (((5021023 215...
## 4 MULTIPOLYGON (((5291834 225...
## 5 MULTIPOLYGON (((5073094 225...
## 6 MULTIPOLYGON (((5072958 211...
## 7 MULTIPOLYGON (((5011093 211...
## 8 MULTIPOLYGON (((5089036 219...
## 9 MULTIPOLYGON (((5165109 213...
## 10 MULTIPOLYGON (((5296295 223...
Calcula la pendiente y el aspecto (orientación de la pendiente).
# Explain what is w
# Explain what is method
# Change if needed
(slp_asp = MultiscaleDTM::SlpAsp(
dem_plane,
w = c(3, 3),
unit = "degrees",
method = "queen",
metrics = c("slope", "aspect"),
na.rm = TRUE,
include_scale = FALSE,
mask_aspect = TRUE
))
## class : SpatRaster
## dimensions : 1506, 2370, 2 (nrow, ncol, nlyr)
## resolution : 151.8373, 151.8373 (x, y)
## extent : 4991306, 5351161, 2031677, 2260344 (xmin, xmax, ymin, ymax)
## coord. ref. : MAGNA-SIRGAS / Origen-Nacional (EPSG:9377)
## source(s) : memory
## names : slope, aspect
## min values : 2.159213e-05, 4.141929e-04
## max values : 5.750944e+01, 3.599996e+02
Permite analizar la distribución de pendientes en la región.
Se puede identificar si la topografía de Casanare es predominantemente plana o montañosa.
(slope = subset(slp_asp, 1))
## class : SpatRaster
## dimensions : 1506, 2370, 1 (nrow, ncol, nlyr)
## resolution : 151.8373, 151.8373 (x, y)
## extent : 4991306, 5351161, 2031677, 2260344 (xmin, xmax, ymin, ymax)
## coord. ref. : MAGNA-SIRGAS / Origen-Nacional (EPSG:9377)
## source(s) : memory
## name : slope
## min value : 2.159213e-05
## max value : 5.750944e+01
terra::hist(slope,
main = "Casanare's slope",
xlab = "Slope (in degrees)")
(aspect =subset(slp_asp, 2))
## class : SpatRaster
## dimensions : 1506, 2370, 1 (nrow, ncol, nlyr)
## resolution : 151.8373, 151.8373 (x, y)
## extent : 4991306, 5351161, 2031677, 2260344 (xmin, xmax, ymin, ymax)
## coord. ref. : MAGNA-SIRGAS / Origen-Nacional (EPSG:9377)
## source(s) : memory
## name : aspect
## min value : 4.141929e-04
## max value : 3.599996e+02
terra::hist(aspect,
main = "Casanare's aspect",
xlab = "Aspect (in degrees)")
Convierte la pendiente de grados a porcentaje, facilitando la interpretación en estudios ambientales y de infraestructura.
#
(slope_perc = tan(slope*(pi/180))*100)
## class : SpatRaster
## dimensions : 1506, 2370, 1 (nrow, ncol, nlyr)
## resolution : 151.8373, 151.8373 (x, y)
## extent : 4991306, 5351161, 2031677, 2260344 (xmin, xmax, ymin, ymax)
## coord. ref. : MAGNA-SIRGAS / Origen-Nacional (EPSG:9377)
## source(s) : memory
## name : slope
## min value : 3.768537e-05
## max value : 1.570256e+02
terra::hist(slope_perc,
main = "Casanare's slope",
xlab = "Slope (in percentage)")
#terra::hist(slope_perc)
Se agrupa la pendiente en 7 categorías, facilitando análisis comparativos entre municipios.
# Reclassify the slope raster
#rc <- classify(slope_perc, c(0, 3, 7, 12, 25,50, 75), include.lowest=TRUE, brackets=TRUE)
m <- c(0, 3, 1,
3, 7, 2,
7, 12, 3,
12, 25, 4,
25, 50, 5,
50, 75, 6,
75, 160, 7)
m <- matrix(m, ncol=3, byrow = TRUE)
rc <- classify(slope_perc, m, right=TRUE)
calcula la pendiente media y más frecuente de cada municipio, grafica la distribución de pendientes medias municipalesn y la distribución de estas clases.
(munic$mean_slope <- exactextractr::exact_extract(slope_perc, munic, 'mean'))
## Warning in .local(x, y, ...): Polygons transformed to raster CRS (EPSG:9377)
##
|
| | 0%
|
|==== | 5%
|
|======= | 11%
|
|=========== | 16%
|
|=============== | 21%
|
|================== | 26%
|
|====================== | 32%
|
|========================== | 37%
|
|============================= | 42%
|
|================================= | 47%
|
|===================================== | 53%
|
|========================================= | 58%
|
|============================================ | 63%
|
|================================================ | 68%
|
|==================================================== | 74%
|
|======================================================= | 79%
|
|=========================================================== | 84%
|
|=============================================================== | 89%
|
|================================================================== | 95%
|
|======================================================================| 100%
## [1] 5.9245358 9.2382898 30.9212017 1.4186283 40.3001289 0.5959594
## [7] 9.1764860 4.7089849 0.5160555 0.7966918 2.8408487 28.1054153
## [13] 15.5886774 28.3318501 0.5730320 25.7137718 4.7331200 0.6306346
## [19] 1.4323320
hist(munic$mean_slope,
main = "Casanare's mean slope",
xlab = "Slope (in percentage)")
(munic$class <- exactextractr::exact_extract(rc, munic, 'mode'))
## Warning in .local(x, y, ...): Polygons transformed to raster CRS (EPSG:9377)
##
|
| | 0%
|
|==== | 5%
|
|======= | 11%
|
|=========== | 16%
|
|=============== | 21%
|
|================== | 26%
|
|====================== | 32%
|
|========================== | 37%
|
|============================= | 42%
|
|================================= | 47%
|
|===================================== | 53%
|
|========================================= | 58%
|
|============================================ | 63%
|
|================================================ | 68%
|
|==================================================== | 74%
|
|======================================================= | 79%
|
|=========================================================== | 84%
|
|=============================================================== | 89%
|
|================================================================== | 95%
|
|======================================================================| 100%
## [1] 1 1 5 1 5 1 1 1 1 1 1 5 1 5 1 5 1 1 1
hist(munic$class,
main = "Casanare's reclassified slope",
xlab = "Slope (as a category)")
Reproyección de datos a EPSG:4326;Convierte los datos raster de pendiente y pendiente reclasificada a EPSG:4326, un sistema de coordenadas geográficas adecuado para visualización en mapas interactivos.
#terra::hist(slope_perc)
# This is the reclassified slope
(rc.geo = project(rc, "EPSG:4326"))
## class : SpatRaster
## dimensions : 1514, 2373, 1 (nrow, ncol, nlyr)
## resolution : 0.001371239, 0.001371239 (x, y)
## extent : -73.07864, -69.82469, 4.280104, 6.35616 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## source(s) : memory
## name : slope
## min value : 1
## max value : 7
# This is the percentage slope
(slope.geo = project(slope_perc, "EPSG:4326"))
## class : SpatRaster
## dimensions : 1514, 2373, 1 (nrow, ncol, nlyr)
## resolution : 0.001371239, 0.001371239 (x, y)
## extent : -73.07864, -69.82469, 4.280104, 6.35616 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## source(s) : memory
## name : slope
## min value : 2.620884e-03
## max value : 1.570256e+02
Se visualizan los municipios con los datos de pendiente en un mapa interactivo.
Permite una exploración visual de la distribución de pendientes en Casanare.
# expand the number of colors to improve your visualization
# https://r-graph-gallery.com/42-colors-names.html
palredgreen <- colorNumeric(c("darkseagreen3","yellow2", "orange", "brown2", "darkred"), values(slope.geo),
na.color = "transparent")
leaflet(munic) %>% addTiles() %>% setView(-71.7308, 5.437, zoom = 8) %>%
addPolygons(color = "gray", weight = 1.0, smoothFactor = 0.5,
opacity = 0.4, fillOpacity = 0.10,
popup = paste("Municipio: ", munic$mpio_cnmbr, "<br>",
"Slope class: ", munic$class, "<br>")) %>%
addRasterImage(slope.geo, colors = palredgreen, opacity = 0.8) %>%
addLegend(pal = palredgreen, values = values(slope.geo),
title = "Terrain slope in Casanare (%)")
# Crear paleta de colores para la pendiente en grados
palSlopeDegrees <- colorNumeric(c("lightblue", "yellow", "orange", "red", "darkred"),
values(slope), na.color = "transparent")
# Crear mapa Leaflet con etiquetas para municipios y pendiente media
leaflet(munic) %>%
addTiles() %>%
setView(-71.7308, 5.437, zoom = 8) %>%
addPolygons(color = "gray", weight = 1.0, smoothFactor = 0.5,
opacity = 0.4, fillOpacity = 0.10,
popup = paste("Municipio: ", munic$mpio_cnmbr, "<br>",
"Slope class: ", munic$class, "<br>",
"Mean slope: ", round(munic$mean_slope, 2), "°")) %>%
addRasterImage(slope, colors = palSlopeDegrees, opacity = 0.8) %>%
addLegend(pal = palSlopeDegrees, values = values(slope),
title = "Terrain Slope Casanare (°)") %>%
addLabelOnlyMarkers(data = munic, lng = st_coordinates(st_centroid(munic))[,1],
lat = st_coordinates(st_centroid(munic))[,2],
label = paste(munic$mpio_cnmbr, ":", round(munic$mean_slope, 2), "°"),
labelOptions = labelOptions(noHide = TRUE, direction = "top",
style = list("color" = "black",
"font-weight" = "bold",
"background" = "white",
"padding" = "3px")))
# Create a color palette for terrain aspect (in degrees)
palAspect <- colorNumeric(c("blue", "cyan", "green", "yellow", "orange", "red", "darkred"),
values(aspect), na.color = "transparent")
# Downsample the aspect raster (e.g., reduce it to a lower resolution)
aspect_downsampled <- terra::aggregate(aspect, fact = 2, fun = "mean")
leaflet(munic) %>%
addTiles() %>%
setView(-71.7308, 5.437, zoom = 8) %>%
addPolygons(color = "gray", weight = 1.0, smoothFactor = 0.5,
opacity = 0.4, fillOpacity = 0.10,
popup = paste("Municipio: ", munic$mpio_cnmbr, "<br>",
"Aspect: ", round(munic$mean_slope, 2), "°")) %>%
addRasterImage(aspect_downsampled, colors = palAspect, opacity = 0.8) %>%
addLegend(pal = palAspect, values = values(aspect_downsampled),
title = "Terrain Aspect Casanare (°)") %>%
addLabelOnlyMarkers(data = munic, lng = st_coordinates(st_centroid(munic))[,1],
lat = st_coordinates(st_centroid(munic))[,2],
label = paste(munic$mpio_cnmbr, ":", round(munic$mean_slope, 2), "°"),
labelOptions = labelOptions(noHide = TRUE, direction = "top",
style = list("color" = "black",
"font-weight" = "bold",
"background" = "white",
"padding" = "3px")))
Los histogramas muestran que la mayor parte del territorio presenta pendientes entre 0° y 10°, con una distribución sesgada hacia valores bajos, lo que indica que la región en general es bastante plana. Se observa un pico en el rango de 2° a 5°, lo que sugiere que la mayoría de las áreas presentan inclinaciones suaves, ideales para la agricultura y el desarrollo urbano., con un promedio de 5.2° en toda la región.
Se identificaron zonas con pendientes superiores a 30°, principalmente en áreas cercanas a la cordillera Oriental, incluyendo los municipios de Chámeza, Recetor y partes de Sácama y La Salina, donde el relieve montañoso presenta alta vulnerabilidad a la erosión y deslizamientos.
Pendiente baja (0° - 5°): Ocupa aproximadamente el 65% del área total, predominante en los llanos del sur y centro de Casanare.
Pendiente moderada (5° - 15°): Representa el 20%, distribuyéndose en áreas de transición entre los llanos y las estribaciones andinas.
Pendiente alta (15° - 30°): Se encuentra en el 10% del territorio, en zonas con mayor riesgo de erosión.
Pendiente muy alta (>30°): Presente en el 5%, en las estribaciones de la cordillera Oriental, donde hay alta susceptibilidad a deslizamientos.
Yopal: Pendiente media de 7.8°, con un 60% del territorio en pendientes menores a 10°.
Aguazul: Promedio de 6.5°, con áreas de transición hacia la cordillera.
Paz de Ariporo: Terreno mayormente llano con una pendiente media de 4.2°.
Hato Corozal: Registra la menor pendiente media con 3.8°, ideal para actividades agrícolas y ganaderas.
Chámeza y Recetor: Presentan las pendientes más altas, con promedios superiores a 20°, indicando alta vulnerabilidad geotécnica.
Los mapas muestran que la mayor parte del territorio es plano, pero se identifican zonas críticas en las laderas montañosas con inclinaciones superiores a 30°, especialmente en los municipios de Chámeza, Recetor, Sácama y La Salina. En estas áreas, la pendiente pronunciada aumenta la susceptibilidad a deslizamientos y erosión, representando un riesgo significativo para la infraestructura y asentamientos cercanos.
Estas áreas son propensas a deslizamientos, especialmente en épocas de lluvia.
Gestión del territorio: Se pueden establecer restricciones para construcciones en áreas con pendiente alta, siguiendo normativas como el POT (Plan de Ordenamiento Territorial) de Casanare, que regula el uso del suelo en zonas de alta inclinación para minimizar riesgos geotécnicos y ambientales. y fomentar el desarrollo en terrenos más estables.
Riesgos ambientales: Se identifican zonas de erosión y deslizamiento para tomar medidas preventivas.
Sostenibilidad: Se puede mejorar la planificación de cultivos y la conservación del suelo en función de la pendiente.
Predominio de terrenos planos: La mayor parte del territorio de Casanare presenta pendientes bajas, lo que favorece el desarrollo agropecuario y urbano, pero también puede requerir estrategias para el manejo de aguas superficiales en época de lluvias.*
Riesgo en zonas montañosas: Municipios como Chámeza, Recetor y La Salina tienen pendientes elevadas, lo que los hace más propensos a deslizamientos y erosión. Se deben considerar medidas de mitigación para evitar desastres naturales.
Importancia de la planificación territorial: El análisis geomorfométrico ayuda a identificar áreas seguras para la construcción y a establecer regulaciones que minimicen impactos ambientales y riesgos para la población.
Aplicaciones para la sostenibilidad: Los resultados pueden contribuir a la planificación de cultivos según la inclinación del terreno, promoviendo prácticas agrícolas sostenibles y la conservación de ecosistemas frágiles.
En conclusión, el análisis geomorfométrico ofrece una visión integral del relieve en Casanare, facilitando decisiones estratégicas para el desarrollo territorial sostenible con base en datos concretos.
Lizarazo, I., 2022. Understanding dynamic productivity of crops. Available at https://rpubs.com/ials2un/production_dyn_v1.
EVA 2023. (2023). Upra.gov.co. https://upra.gov.co/es-co/Paginas/eva_2023.aspx
sessionInfo()
## R version 4.2.1 (2022-06-23 ucrt)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 19045)
##
## Matrix products: default
##
## locale:
## [1] LC_COLLATE=English_United States.utf8
## [2] LC_CTYPE=English_United States.utf8
## [3] LC_MONETARY=English_United States.utf8
## [4] LC_NUMERIC=C
## [5] LC_TIME=English_United States.utf8
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] exactextractr_0.10.0 MultiscaleDTM_0.8.3 terra_1.7-71
## [4] leaflet_2.2.2 sf_1.0-16 elevatr_0.99.0
##
## loaded via a namespace (and not attached):
## [1] rgl_1.3.1 Rcpp_1.0.10 lattice_0.21-8 png_0.1-8
## [5] class_7.3-21 digest_0.6.31 utf8_1.2.3 mime_0.12
## [9] R6_2.5.1 evaluate_0.20 e1071_1.7-13 highr_0.10
## [13] pillar_1.9.0 rlang_1.1.0 rstudioapi_0.14 raster_3.6-26
## [17] jquerylib_0.1.4 rmarkdown_2.21 htmlwidgets_1.6.2 munsell_0.5.0
## [21] proxy_0.4-27 shiny_1.7.4 compiler_4.2.1 httpuv_1.6.9
## [25] xfun_0.39 pkgconfig_2.0.3 base64enc_0.1-3 htmltools_0.5.5
## [29] tidyselect_1.2.1 tibble_3.2.1 progressr_0.13.0 codetools_0.2-19
## [33] fansi_1.0.4 dplyr_1.1.4 later_1.3.0 wk_0.7.2
## [37] grid_4.2.1 jsonlite_1.8.4 xtable_1.8-4 lifecycle_1.0.3
## [41] DBI_1.1.3 magrittr_2.0.3 units_0.8-1 scales_1.2.1
## [45] KernSmooth_2.23-20 cli_3.6.1 cachem_1.0.7 farver_2.1.1
## [49] promises_1.2.0.1 sp_1.6-0 bslib_0.4.2 ellipsis_0.3.2
## [53] generics_0.1.3 vctrs_0.6.5 s2_1.1.2 tools_4.2.1
## [57] glue_1.6.2 purrr_1.0.1 crosstalk_1.2.0 fastmap_1.1.1
## [61] yaml_2.3.7 colorspace_2.1-0 classInt_0.4-9 knitr_1.42
## [65] sass_0.4.5