1 Introducción

La geomorfometría se encarga de cuantificar, a partir de un Modelo Digital de Elevación (DEM), las características morfológicas de la superficie terrestre. Dos de los atributos de terreno más utilizados son la pendiente (slope), que expresa la inclinación del terreno, y la orientación (aspect), que indica hacia qué dirección cardinal está expuesta cada ladera. Ambos atributos son fundamentales en agronomía, ya que condicionan procesos como la escorrentía superficial, la erosión, la exposición solar y, en consecuencia, la aptitud de un terreno para determinados usos agrícolas.

En este cuaderno se calculan la pendiente y la orientación del terreno para el departamento del Putumayo, a partir del Modelo Digital de Elevación obtenido previamente en el cuaderno Procesamiento y análisis de datos de elevación para el departamento del Putumayo. Para el cálculo de los atributos se emplea el paquete MultiscaleDTM, y para obtener estadísticas de pendiente por municipio se utiliza el paquete exactextractr. Finalmente, los resultados se visualizan mediante mapas interactivos construidos con leaflet.

2 Preparación del espacio de trabajo

Los paquetes MultiscaleDTM y exactextractr deben instalarse previamente desde la Consola de RStudio, y no desde este chunk, para evitar reinstalaciones innecesarias cada vez que se ejecuta el cuaderno.

# EJECUTAR SOLO UNA VEZ, DESDE LA CONSOLA
# paquetes <- c("MultiscaleDTM", "exactextractr")
# install.packages(paquetes)

Antes de cargar las librerías se limpia la memoria de trabajo, con el fin de evitar conflictos con objetos generados en sesiones anteriores:

rm(list = ls())

A continuación se cargan las librerías necesarias para el desarrollo del cuaderno:

library(sf)
library(terra)
library(leaflet)
library(MultiscaleDTM)
library(exactextractr)
Librería Descripción
sf Lectura y manipulación de la capa vectorial de municipios.
terra Lectura, recorte, reproyección y procesamiento del DEM.
MultiscaleDTM Cálculo de atributos geomorfométricos (pendiente y orientación).
exactextractr Cálculo de estadísticas zonales (pendiente media y clase dominante por municipio).
leaflet Construcción de los mapas interactivos.

Durante la ejecución de los chunks es importante prestar atención a los mensajes de advertencia relacionados con conflictos entre funciones de distintos paquetes (por ejemplo, terra::extract frente a tidyr::extract). Para evitar ambigüedades, en este cuaderno las funciones se invocan siempre con la notación paquete::función.

3 Introducción a MultiscaleDTM

MultiscaleDTM calcula atributos geomorfométricos multiescala a partir de un Modelo Digital de Elevación regularmente gridado, empleando una ventana móvil (moving window) de tamaño definido por el usuario. En este cuaderno se utiliza la función SlpAsp(), que calcula simultáneamente la pendiente y la orientación del terreno dentro de dicha ventana. Puede consultarse la documentación completa de la función escribiendo ?SlpAsp en la Consola.

4 Lectura de los datos de entrada

Se carga el DEM del Putumayo generado y almacenado previamente en formato GeoTIFF:

dem <- terra::rast("Putumayo/elev_Putumayo_z10.tif")

dem
## class       : SpatRaster
## size        : 3584, 5120, 1  (nrow, ncol, nlyr)
## resolution  : 0.0006866186, 0.0006866186  (x, y)
## extent      : -77.34375, -73.82826, -0.7033042, 1.757537  (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## source      : elev_Putumayo_z10.tif
## name        : elev_Putumayo_z10
## min value   :              -540
## max value   :              4186

Con el fin de evitar problemas de memoria durante el cálculo de los atributos geomorfométricos, se reduce la resolución espacial del DEM:

dem2 <- terra::aggregate(dem, fact = 2, fun = "mean")
## |---------|---------|---------|---------|=========================================                                          
dem2
## class       : SpatRaster
## size        : 1792, 2560, 1  (nrow, ncol, nlyr)
## resolution  : 0.001373237, 0.001373237  (x, y)
## extent      : -77.34375, -73.82826, -0.7033042, 1.757537  (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## source(s)   : memory
## name        : elev_Putumayo_z10
## min value   :              -146
## max value   :           4170.75

Se carga nuevamente la capa vectorial de municipios del Putumayo:

munic <- sf::st_read(".\\municipios.gpkg")
## Reading layer `municipiois' from data source 
##   `C:\Users\ASUS\OneDrive\Documents\unal\GB2\proyecto 4\municipios.gpkg' 
##   using driver `GPKG'
## Simple feature collection with 12 features and 11 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -77.1605 ymin: -0.581019 xmax: -73.88365 ymax: 1.427201
## Geodetic CRS:  WGS 84
munic <- sf::st_read("./municipios.gpkg", layer = "municipiois")
## Reading layer `municipiois' from data source 
##   `C:\Users\ASUS\OneDrive\Documents\unal\GB2\proyecto 4\municipios.gpkg' 
##   using driver `GPKG'
## Simple feature collection with 12 features and 11 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -77.1605 ymin: -0.581019 xmax: -73.88365 ymax: 1.427201
## Geodetic CRS:  WGS 84
munic
## Simple feature collection with 12 features and 11 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -77.1605 ymin: -0.581019 xmax: -73.88365 ymax: 1.427201
## Geodetic CRS:  WGS 84
## First 10 features:
##    ID_0 ISO   NAME_0 ID_1   NAME_1 ID_2              NAME_2    TYPE_2
## 1    53 COL Colombia   23 Putumayo  814               Colón Municipio
## 2    53 COL Colombia   23 Putumayo  815               Orito Municipio
## 3    53 COL Colombia   23 Putumayo  816         Puerto Asís Municipio
## 4    53 COL Colombia   23 Putumayo  817      Puerto Caicedo Municipio
## 5    53 COL Colombia   23 Putumayo  818       Puerto Guzmán Municipio
## 6    53 COL Colombia   23 Putumayo  819    Puerto Leguízamo Municipio
## 7    53 COL Colombia   23 Putumayo  820       San Francisco Municipio
## 8    53 COL Colombia   23 Putumayo  821 San Miguel de Mocoa Municipio
## 9    53 COL Colombia   23 Putumayo  822            Santiago Municipio
## 10   53 COL Colombia   23 Putumayo  823            Sibundoy Municipio
##       ENGTYPE_2 NL_NAME_2 VARNAME_2                           geom
## 1  Municipality      <NA>      <NA> MULTIPOLYGON (((-77.015 1.2...
## 2  Municipality      <NA>      <NA> MULTIPOLYGON (((-76.735 0.6...
## 3  Municipality      <NA>      <NA> MULTIPOLYGON (((-76.11011 0...
## 4  Municipality      <NA>      <NA> MULTIPOLYGON (((-76.3974 0....
## 5  Municipality      <NA>      <NA> MULTIPOLYGON (((-76.3974 0....
## 6  Municipality      <NA>      <NA> MULTIPOLYGON (((-73.88365 -...
## 7  Municipality      <NA>      <NA> MULTIPOLYGON (((-76.8179 1....
## 8  Municipality      <NA>     Mocoa MULTIPOLYGON (((-76.4896 0....
## 9  Municipality      <NA>      <NA> MULTIPOLYGON (((-77.1147 1....
## 10 Municipality      <NA>      <NA> MULTIPOLYGON (((-77.015 1.2...

Tanto el DEM como la capa de municipios se encuentran en coordenadas geográficas. Finalmente, se recorta el DEM utilizando los límites del departamento:

dem3 <- terra::crop(dem2, munic, mask = TRUE)

5 Transformación de coordenadas

El cálculo de atributos geomorfométricos requiere que el DEM esté en coordenadas planas, ya que la pendiente y la orientación se calculan a partir de diferencias de elevación entre celdas vecinas expresadas en una unidad de distancia constante (metros). Desde 2020, el IGAC estableció como sistema oficial de coordenadas planas para Colombia el MAGNA-SIRGAS / Origen-Nacional, identificado con el código EPSG:9377.

Se transforma el DEM a este sistema de coordenadas:

dem_plano <- terra::project(dem3, "EPSG:9377")

dem_plano
## class       : SpatRaster
## size        : 1457, 2392, 1  (nrow, ncol, nlyr)
## resolution  : 152.6287, 152.6287  (x, y)
## extent      : 4536748, 4901836, 1493707, 1716087  (xmin, xmax, ymin, ymax)
## coord. ref. : MAGNA-SIRGAS 2018 / Origen-Nacional (EPSG:9377)
## source(s)   : memory
## name        : elev_Putumayo_z10
## min value   :         86.506157
## max value   :       3890.109131

Y se realiza la misma transformación sobre la capa vectorial de municipios:

munic_plano <- sf::st_transform(munic, "EPSG:9377")

munic_plano
## Simple feature collection with 12 features and 11 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: 4536843 ymin: 1493836 xmax: 4901710 ymax: 1716064
## Projected CRS: MAGNA-SIRGAS 2018 / Origen-Nacional
## First 10 features:
##    ID_0 ISO   NAME_0 ID_1   NAME_1 ID_2              NAME_2    TYPE_2
## 1    53 COL Colombia   23 Putumayo  814               Colón Municipio
## 2    53 COL Colombia   23 Putumayo  815               Orito Municipio
## 3    53 COL Colombia   23 Putumayo  816         Puerto Asís Municipio
## 4    53 COL Colombia   23 Putumayo  817      Puerto Caicedo Municipio
## 5    53 COL Colombia   23 Putumayo  818       Puerto Guzmán Municipio
## 6    53 COL Colombia   23 Putumayo  819    Puerto Leguízamo Municipio
## 7    53 COL Colombia   23 Putumayo  820       San Francisco Municipio
## 8    53 COL Colombia   23 Putumayo  821 San Miguel de Mocoa Municipio
## 9    53 COL Colombia   23 Putumayo  822            Santiago Municipio
## 10   53 COL Colombia   23 Putumayo  823            Sibundoy Municipio
##       ENGTYPE_2 NL_NAME_2 VARNAME_2                           geom
## 1  Municipality      <NA>      <NA> MULTIPOLYGON (((4553144 169...
## 2  Municipality      <NA>      <NA> MULTIPOLYGON (((4584281 162...
## 3  Municipality      <NA>      <NA> MULTIPOLYGON (((4653897 159...
## 4  Municipality      <NA>      <NA> MULTIPOLYGON (((4621922 165...
## 5  Municipality      <NA>      <NA> MULTIPOLYGON (((4621922 165...
## 6  Municipality      <NA>      <NA> MULTIPOLYGON (((4901710 151...
## 7  Municipality      <NA>      <NA> MULTIPOLYGON (((4575124 170...
## 8  Municipality      <NA>     Mocoa MULTIPOLYGON (((4611648 164...
## 9  Municipality      <NA>      <NA> MULTIPOLYGON (((4542016 168...
## 10 Municipality      <NA>      <NA> MULTIPOLYGON (((4553144 169...

6 Cómputo de atributos de terreno

Se calcula la pendiente y la orientación del terreno mediante la función SlpAsp(). El argumento w = c(3, 3) define una ventana móvil de 3 × 3 celdas alrededor de cada celda central, es decir, la pendiente y la orientación de cada punto se calculan a partir de sus 8 celdas vecinas inmediatas. El argumento method = "queen" indica que se consideran como vecinas tanto las celdas contiguas en horizontal y vertical como las diagonales (por analogía con el movimiento de la reina en el ajedrez).

slp_asp <- MultiscaleDTM::SlpAsp(
  dem_plano,
  w = c(3, 3),
  unit = "degrees",
  method = "queen",
  metrics = c("slope", "aspect"),
  na.rm = TRUE,
  include_scale = FALSE,
  mask_aspect = TRUE
)

slp_asp
## class       : SpatRaster
## size        : 1457, 2392, 2  (nrow, ncol, nlyr)
## resolution  : 152.6287, 152.6287  (x, y)
## extent      : 4536748, 4901836, 1493707, 1716087  (xmin, xmax, ymin, ymax)
## coord. ref. : MAGNA-SIRGAS 2018 / Origen-Nacional (EPSG:9377)
## source(s)   : memory
## names       :     slope,     aspect
## min values  :  0.000866,   0.000282
## max values  : 55.265234, 359.999937

El resultado es un objeto SpatRaster con dos capas: slope y aspect, ambas expresadas en grados. Se separan a continuación en dos objetos independientes:

slope <- terra::subset(slp_asp, 1)

slope
## class       : SpatRaster
## size        : 1457, 2392, 1  (nrow, ncol, nlyr)
## resolution  : 152.6287, 152.6287  (x, y)
## extent      : 4536748, 4901836, 1493707, 1716087  (xmin, xmax, ymin, ymax)
## coord. ref. : MAGNA-SIRGAS 2018 / Origen-Nacional (EPSG:9377)
## source(s)   : memory
## name        :     slope
## min value   :  0.000866
## max value   : 55.265234
terra::hist(slope,
     main = "Pendiente del terreno en Putumayo",
     xlab = "Pendiente (en grados)")
## Warning: [hist] a sample of 29% of the cells was used (of which 70% was NA)

aspect <- terra::subset(slp_asp, 2)

aspect
## class       : SpatRaster
## size        : 1457, 2392, 1  (nrow, ncol, nlyr)
## resolution  : 152.6287, 152.6287  (x, y)
## extent      : 4536748, 4901836, 1493707, 1716087  (xmin, xmax, ymin, ymax)
## coord. ref. : MAGNA-SIRGAS 2018 / Origen-Nacional (EPSG:9377)
## source(s)   : memory
## name        :     aspect
## min value   :   0.000282
## max value   : 359.999937
terra::hist(aspect,
     main = "Orientación del terreno en Putumayo",
     xlab = "Orientación (en grados)")
## Warning: [hist] a sample of 29% of the cells was used (of which 70% was NA)

Adicionalmente, se convierte la pendiente de grados a porcentaje, unidad ampliamente utilizada en estudios de suelos y aptitud agrícola:

slope_perc <- tan(slope * (pi / 180)) * 100

terra::hist(slope_perc,
     main = "Pendiente del terreno en Putumayo",
     xlab = "Pendiente (en porcentaje)")
## Warning: [hist] a sample of 29% of the cells was used (of which 70% was NA)

7 Cómputo de estadísticas zonales

Una operación de estadísticas zonales calcula estadísticas de un raster de valores (en este caso, la pendiente) dentro de las zonas definidas por otra capa (en este caso, los municipios). Se calcula la pendiente promedio por municipio.

Primero, se reclasifica la pendiente en porcentaje según las clases de pendiente del IGAC utilizadas con fines agrológicos:

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 <- terra::classify(slope_perc, m, right = TRUE)

Se calcula la pendiente media por municipio:

munic_plano$mean_slope <- exactextractr::exact_extract(slope_perc, munic_plano, "mean")
##   |                                                                              |                                                                      |   0%  |                                                                              |======                                                                |   8%  |                                                                              |============                                                          |  17%  |                                                                              |==================                                                    |  25%  |                                                                              |=======================                                               |  33%  |                                                                              |=============================                                         |  42%  |                                                                              |===================================                                   |  50%  |                                                                              |=========================================                             |  58%  |                                                                              |===============================================                       |  67%  |                                                                              |====================================================                  |  75%  |                                                                              |==========================================================            |  83%  |                                                                              |================================================================      |  92%  |                                                                              |======================================================================| 100%
hist(munic_plano$mean_slope,
     main = "Pendiente media por municipio - Putumayo",
     xlab = "Pendiente (en porcentaje)")

Y la clase de pendiente predominante (moda) por municipio:

munic_plano$class <- exactextractr::exact_extract(rc, munic_plano, "mode")
##   |                                                                              |                                                                      |   0%  |                                                                              |======                                                                |   8%  |                                                                              |============                                                          |  17%  |                                                                              |==================                                                    |  25%  |                                                                              |=======================                                               |  33%  |                                                                              |=============================                                         |  42%  |                                                                              |===================================                                   |  50%  |                                                                              |=========================================                             |  58%  |                                                                              |===============================================                       |  67%  |                                                                              |====================================================                  |  75%  |                                                                              |==========================================================            |  83%  |                                                                              |================================================================      |  92%  |                                                                              |======================================================================| 100%
hist(munic_plano$class,
     main = "Clase de pendiente predominante - Putumayo",
     xlab = "Clase de pendiente (IGAC)")

Finalmente, se transforman de vuelta a coordenadas geográficas la pendiente reclasificada y la pendiente en porcentaje, para poder representarlas sobre un mapa base de OpenStreetMap:

rc_geo <- terra::project(rc, "EPSG:4326")

slope_geo <- terra::project(slope_perc, "EPSG:4326")

slope_deg_geo <- terra::project(slope, "EPSG:4326")

aspect_geo <- terra::project(aspect, "EPSG:4326")

munic_geo <- sf::st_transform(munic_plano, "EPSG:4326")

8 Visualización de la pendiente del terreno

Se define una paleta de colores continua para representar la pendiente en porcentaje:

pal_slope <- leaflet::colorNumeric(
  c("darkseagreen3", "yellow2", "orange", "brown2", "darkred"),
  values(slope_geo),
  na.color = "transparent"
)
leaflet(munic_geo) %>%
  addTiles() %>%
  setView(-76.5, 0.5, 8) %>%
  addPolygons(
    color = "gray", weight = 1.0, smoothFactor = 0.5,
    opacity = 0.4, fillOpacity = 0.10,
    popup = paste("Municipio: ", munic_geo$NAME_2, "<br>",
                  "Clase de pendiente: ", munic_geo$class, "<br>")) %>%
  addRasterImage(slope_geo, colors = pal_slope, opacity = 0.8) %>%
  addLegend(pal = pal_slope, values = values(slope_geo),
            title = "Pendiente del terreno en Putumayo (%)")

El mapa permite identificar, al hacer clic sobre cada municipio, su nombre y la clase de pendiente predominante según la clasificación agrológica del IGAC.

9 Visualización alternativa de la pendiente

A continuación se presenta una segunda visualización de la pendiente, esta vez expresada en grados, incorporando además etiquetas con el nombre de cada municipio y su pendiente media. Se conservan las mismas ventanas emergentes (popups) utilizadas en el mapa anterior.

Para ubicar las etiquetas se calculan los centroides de los municipios, de forma análoga al cuaderno del DEM:

centers <- sf::st_centroid(munic_plano)
## Warning: st_centroid assumes attributes are constant over geometries
centers <- sf::st_transform(centers, "EPSG:4326")

centers$x <- sf::st_coordinates(centers)[, 1]
centers$y <- sf::st_coordinates(centers)[, 2]
pal_slope_deg <- leaflet::colorNumeric(
  c("darkseagreen3", "yellow2", "orange", "brown2", "darkred"),
  values(slope_deg_geo),
  na.color = "transparent"
)
leaflet(munic_geo) %>%
  addTiles() %>%
  setView(-76.5, 0.5, 8) %>%
  addPolygons(
    color = "gray", weight = 1.0, smoothFactor = 0.5,
    opacity = 0.4, fillOpacity = 0.10,
    popup = paste("Municipio: ", munic_plano$NAME_2, "<br>",
                  "Clase de pendiente: ", munic_plano$class, "<br>")) %>%
  addLabelOnlyMarkers(
    data = centers,
    lng = ~x, lat = ~y,
    label = ~paste0(NAME_2, ": ", round(mean_slope, 1), "%"),
    labelOptions = labelOptions(noHide = TRUE, direction = "top", textOnly = TRUE)) %>%
  addRasterImage(slope_deg_geo, colors = pal_slope_deg, opacity = 0.8) %>%
  addLegend(pal = pal_slope_deg, values = values(slope_deg_geo),
            title = "Pendiente del terreno en Putumayo (grados)")

A diferencia del mapa anterior, esta visualización muestra la pendiente en su unidad original (grados) y agrega directamente sobre el mapa el nombre de cada municipio junto con su pendiente media en porcentaje, lo que facilita comparar visualmente los municipios más planos con los de relieve más pronunciado sin necesidad de hacer clic sobre cada polígono.

10 Visualización de la orientación del terreno

La orientación (aspect) es una variable circular: sus valores van de 0° a 360° y representan una dirección cardinal (0°/360° = norte, 90° = este, 180° = sur, 270° = oeste). Por esta razón, a diferencia de la pendiente, no es adecuado usar una paleta secuencial de un solo extremo de color a otro, sino una paleta cíclica en la que el color inicial y el final coincidan.

pal_aspect <- leaflet::colorNumeric(
  palette = c("red", "yellow", "green", "cyan", "blue", "magenta", "red"),
  domain = c(0, 360),
  na.color = "transparent"
)
leaflet(munic_geo) %>%
  addTiles() %>%
  setView(-76.5, 0.5, 8) %>%
  addPolygons(
    color = "gray", weight = 1.0, smoothFactor = 0.5,
    opacity = 0.4, fillOpacity = 0.10,
    popup = paste("Municipio: ", munic_plano$NAME_2, "<br>")) %>%
  addRasterImage(aspect_geo, colors = pal_aspect, opacity = 0.8) %>%
  addLegend(pal = pal_aspect, values = c(0, 90, 180, 270, 360),
            title = "Orientación del terreno en Putumayo (grados)")

El mapa evidencia que la orientación del terreno cambia de forma abrupta entre celdas vecinas incluso en zonas de pendiente suave, ya que ángulos cercanos como 359° y 1° son en realidad casi idénticos en dirección, pero numéricamente muy distantes. Esta es la razón por la cual se utilizó una paleta cíclica: con una paleta secuencial normal, laderas que miran prácticamente hacia el mismo lugar aparecerían con colores opuestos.

11 Resultados y análisis

11.1 Análisis de la pendiente

La pendiente del terreno en el Putumayo muestra una variación considerable entre municipios, coherente con la transición geográfica del departamento entre el piedemonte andino-amazónico y las tierras bajas de la llanura amazónica. Los municipios ubicados hacia el occidente del departamento, más cercanos a la cordillera, presentan en general pendientes medias más altas que los municipios de las tierras bajas hacia el oriente.

11.2 Análisis de la orientación

La orientación del terreno resulta más heterogénea que la pendiente dentro de un mismo municipio, ya que depende directamente de la microtopografía local (valles, laderas y drenajes), mientras que la pendiente tiende a variar de forma más gradual a lo largo del territorio.

11.3 Discusión

El flujo de trabajo desarrollado permitió calcular atributos geomorfométricos multiescala a partir de un DEM previamente obtenido para el departamento del Putumayo, empleando el paquete MultiscaleDTM. La necesidad de trabajar en coordenadas planas (EPSG:9377) para este tipo de cálculos, y de reclasificar la pendiente según categorías agrológicas oficiales (IGAC), ilustra la importancia de conocer tanto el sistema de referencia de coordenadas como el propósito de aplicación de la información al construir un flujo de análisis geoespacial reproducible.

12 Conclusiones

  • Se calcularon la pendiente y la orientación del terreno del departamento del Putumayo a partir del DEM previamente descargado, utilizando el paquete MultiscaleDTM.
  • Fue necesario transformar el DEM y la capa de municipios al sistema de coordenadas planas oficial de Colombia (EPSG:9377) antes de calcular los atributos geomorfométricos.
  • Se obtuvieron estadísticas zonales de pendiente media y clase de pendiente predominante por municipio mediante el paquete exactextractr, empleando la clasificación agrológica del IGAC.
  • Se construyeron tres mapas interactivos con leaflet: uno de pendiente en porcentaje con clase por municipio, uno de pendiente en grados con etiquetas de pendiente media por municipio, y uno de orientación del terreno con una paleta de colores cíclica.
  • El desarrollo de este cuaderno permitió comprender el flujo completo de cálculo de atributos geomorfométricos, desde la preparación del DEM hasta su visualización interactiva, reforzando el manejo de herramientas de geoinformática de código abierto en R.

13 Bibliografía

Lizarazo, I., 2025. Geomorphometric terrain attributes in R. Universidad Nacional de Colombia.

Lizarazo, I., 2025. Elevation data processing and analysis in R. Available at https://rpubs.com/ials2un/otro_dem

14 Entorno de trabajo

sessionInfo()
## R version 4.6.0 (2026-04-24 ucrt)
## Platform: x86_64-w64-mingw32/x64
## Running under: Windows 11 x64 (build 26200)
## 
## Matrix products: default
##   LAPACK version 3.12.1
## 
## locale:
## [1] LC_COLLATE=Spanish_Colombia.utf8  LC_CTYPE=Spanish_Colombia.utf8   
## [3] LC_MONETARY=Spanish_Colombia.utf8 LC_NUMERIC=C                     
## [5] LC_TIME=Spanish_Colombia.utf8    
## 
## time zone: America/Bogota
## tzcode source: internal
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
## [1] exactextractr_0.10.1 MultiscaleDTM_1.0.1  leaflet_2.2.3       
## [4] terra_1.9-27         sf_1.1-1            
## 
## loaded via a namespace (and not attached):
##  [1] sass_0.4.10        generics_0.1.4     class_7.3-23       KernSmooth_2.23-26
##  [5] lattice_0.22-9     digest_0.6.39      magrittr_2.0.5     rgl_1.3.36        
##  [9] RColorBrewer_1.1-3 evaluate_1.0.5     grid_4.6.0         fastmap_1.2.0     
## [13] jsonlite_2.0.0     e1071_1.7-17       DBI_1.3.0          promises_1.5.0    
## [17] scales_1.4.0       crosstalk_1.2.2    codetools_0.2-20   jquerylib_0.1.4   
## [21] cli_3.6.6          shiny_1.14.0       rlang_1.2.0        units_1.0-1       
## [25] base64enc_0.1-6    cachem_1.1.0       yaml_2.3.12        otel_0.2.0        
## [29] tools_4.6.0        raster_3.6-32      dplyr_1.2.1        httpuv_1.6.17     
## [33] png_0.1-9          vctrs_0.7.3        R6_2.6.1           mime_0.13         
## [37] proxy_0.4-29       lifecycle_1.0.5    classInt_0.4-11    htmlwidgets_1.6.4 
## [41] pkgconfig_2.0.3    bslib_0.10.0       pillar_1.11.1      later_1.4.8       
## [45] glue_1.8.1         Rcpp_1.1.1-1.1     xfun_0.57          tibble_3.3.1      
## [49] tidyselect_1.2.1   rstudioapi_0.18.0  knitr_1.51         farver_2.1.2      
## [53] xtable_1.8-8       htmltools_0.5.9    rmarkdown_2.31     compiler_4.6.0    
## [57] sp_2.2-1