1. Introducción

Este cuaderno ilustra cómo calcular atributos geomorfométricos del terreno a partir de modelos digitales de elevación (MDE) en R, con un enfoque específico en el departamento del Putumayo. Para el cálculo de estos atributos del terreno, utilizaremos el paquete MultiscaleDTM de R. Además, para la gestión de datos geoespaciales, emplearemos dos paquetes principales:

1.1 Análisis geomorfométrico del terreno en el Putumayo

El análisis geomorfométrico del terreno es una herramienta fundamental en la caracterización y modelado del relieve, permitiendo comprender la dinámica del paisaje y su influencia en diversos procesos naturales y antrópicos. En este contexto, el uso de R y su ecosistema de paquetes especializados proporciona un enfoque eficiente, reproducible y escalable para el procesamiento y análisis de datos espaciales. La implementación de un cuaderno en R para el análisis geomorfométrico del departamento del Putumayo resulta de gran relevancia por diversas razones.

  • 1. Manejo de Grandes Volúmenes de Datos: El Putumayo, por su compleja geografía y variabilidad en altitudes, requiere el procesamiento de grandes volúmenes de información, como Modelos Digitales de Elevación (MDE) de alta resolución. R permite manejar estos datos mediante paquetes como raster, terra y sf, optimizando el análisis espacial y reduciendo tiempos de procesamiento.

  • 2. Análisis Espacial y Modelado del Terreno: R ofrece herramientas avanzadas para el cálculo de parámetros geomorfométricos, como pendiente, curvatura, rugosidad y orientación del relieve. Estos parámetros son esenciales para evaluar la susceptibilidad a deslizamientos, la planificación territorial y la gestión del riesgo en una región montañosa y selvática como el Putumayo.

  • 3. Visualización y Cartografía: La capacidad de R para generar mapas de alta calidad mediante paquetes como ggplot2, tmap y leaflet facilita la interpretación y comunicación de los resultados. Esto es clave para la toma de decisiones en ámbitos como la gestión ambiental, la conservación de ecosistemas y el ordenamiento territorial.

2. Configuración

Para llevar a cabo el análisis de atributos geomorfométricos del terreno en R, es necesario instalar ciertos paquetes especializados que nos permitirán procesar y extraer información clave de los Modelos Digitales de Terreno (MDT). Sin embargo, la instalación de estos paquetes debe realizarse desde la consola y no directamente en un cuaderno de trabajo.

Esto se debe a varias razones técnicas que garantizan una correcta instalación y compatibilidad con el entorno de trabajo. En particular, los paquetes “MultiscaleDTM” y “exactextractr” son fundamentales para el análisis y manipulación de datos espaciales en este contexto.

2.1 Razones por las cuales los paquetes se instalan desde la consola

1. Compatibilidad y dependencias:

  • Algunos paquetes necesitan dependencias específicas que pueden fallar en entornos interactivos. Instalarlos desde la consola garantiza su correcta configuración.

2. Evitar errores en entornos interactivos:

  • En algunos casos, los paquetes pueden no instalarse correctamente en entornos como Jupyter o RMarkdown debido a restricciones en la gestión de bibliotecas.

3. Permisos y acceso a bibliotecas del sistema:

  • Varios paquetes dependen de bibliotecas externas que pueden llegar a requerir de ciertos permisos adminitrativos o configuraciones especiales en el sistema

CITAAAAAAAAAAAAAAAAAAAAAAAAAAAA

2.2 ¿Por qué instalar los paquetes “MultiscaleDTM” y “exactextractr” para atributos geomorfométricos del terreno?

📊 1. MultiscaleDTM:

  • Calcula métricas geomorfométricas en diversas escalas espaciales. Obtiene atributos como pendiente, curvatura y rugosidad, fundamentales para el estudio del relieve.

🗳️ 2. exactextractr:

  • Optimizado para la extracción rápida de valores raster dentro de polígonos. Es útil para calcular estadísticas zonales en áreas de interés, como cuencas o parcelas.

Ambos paquetes son esenciales para el procesamiento y análisis detallado de los Modelos Digitales de Terreno, facilitando una exploración precisa de las características del relieve. 🚀

CITAAAAAAAAAAAAAAAAAAAAAAAAAAA

## CONFIGURACIÓN
# INSTALE ESTE PAQUETE DESDE LA CONSOLA, NO DESDE ESTE TRAJE
# paquetes = c("MultiscaleDTM", "exactextractr")
# instalar.paquetes (paquetes)

2.3 Limpieza de memoria

El comando rm(list=ls()) en R se utiliza para limpiar completamente el entorno de trabajo, eliminando todas las variables y objetos almacenados en la memoria.

rm(list=ls())

2.3.1 Explicación del comando

  1. ls() → Lista todos los objetos que están en el entorno de trabajo actual.

  2. rm(list=ls()) → (rm) ejecuta la tarea de remover todos los objetos listados por ls(), lo mismo que borrar todo el entorno.

2.4 Bibliotecas

Es necesario cargar estas bibliotecas en el cuaderno, ya que cada una ofrece herramientas clave para la obtención, procesamiento y análisis de datos geomorfométricos del terreno. A continuación, explico el papel de cada paquete en el flujo de trabajo.

2.4.1 Paquetes y su función en el análisis geomorfométrico del terreno:

📡 1. elevatr: Obtención de datos de elevación

  • Se usa para obtener datos de elevación a partir de servicios en línea, como el modelo digital de elevación (MDE).

  • Permite descargar datos de relieve para un área específica.

📍 2. sf : Manejo de datos espaciales vectoriales

  • Facilita el manejo y análisis de datos espaciales en formato vectorial (puntos, líneas, polígonos).

  • Su uso se basa en definir las áreas de estudio y manipular geometrías espaciales de forma eficiente.

🗺 3. leaflet: Visualización de mapas interactivos

  • Crea mapas interactivos para representar datos espaciales.

📉 4. terra: Procesamiento de datos raster

  • Maneja y analiza modelos digitales de elevación, al igual que contribuye en la reproyección, extracción y análisis de métricas del terreno
library(elevatr)
library(sf)
library(leaflet)
library(terra)

3. Lectura de datos de entrada

Esto es esencial porque los análisis geomorfométricos requieren un insumo base que contenga la información topográfica del área de estudio. Para que esto suceda se require cargar un Modelo Digital de Elevación (MDE) almacenado en el archivo “elev_Putumayo_z10.tif” dentro de la carpeta DATOS.

list.files("DATOS")
## [1] "elev_Putumayo_z10.tif" "Putumayo.gpkg"
munic <-sf::st_read("DATOS/Putumayo.gpkg")
## Reading layer `putumayo_1__mgn_adm_mpio_grafico_copiar' from data source 
##   `C:\Users\gutie\Videos\Examen2\DATOS\Putumayo.gpkg' using driver `GPKG'
## Simple feature collection with 13 features and 6 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -77.18681 ymin: -0.5622776 xmax: -73.84132 ymax: 1.467315
## Geodetic CRS:  MAGNA-SIRGAS
(dem = terra::rast("DATOS/elev_Putumayo_z10.tif"))
## class       : SpatRaster 
## dimensions  : 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. : +proj=longlat +ellps=GRS80 +no_defs 
## source      : elev_Putumayo_z10.tif 
## name        : elev_Putumayo_z10 
## min value   :              -540 
## max value   :              4186

3.1 ¿Por qué se requiere cargar el MDE?

📂 1. Fuente de datos principal:

  • El análisis del relieve se basa en datos espaciales que representan la altitud en cada punto del terreno.

  • Sin el MDE, no se pueden calcular atributos como pendiente, curvatura o rugosidad.

🔭 2. Procesamiento y análisis geoespacial:

  • El archivo TIFF contiene datos raster que deben ser convertidos en un objeto terra (rast()) para su manipulación en R.

🌏 3. Localización geográfica y resolución :

  • Cada MDE tiene una extensión geográfica y resolución específica, por tal razón definir el archivo de entrada garantiza que se utilicen los datos correctos para la zona de estudio el Putumayo

3.2 Reducción en la resolución del DEM

El presente comando ejecuta la tarea de reducir la resolución espacial del raster, agrupando píxeles vecinos para luego calcular un nuvalor promedio.

3.2.1 Explicación de cada argumento en el comando terra::aggregate(dem,2, “mean”)

dem2 = terra::aggregate(dem,2, "mean")
## |---------|---------|---------|---------|=========================================                                          
  • *terra::aggregate()** :Es una función del paquete terra que permite reducir la resolución de un raster combinando píxeles en grupos más grandes.

  • DEM: Modelo Digital de Elevación digital

  • mean: Inidica el método de agregación, más espcificamente el promedio de los valores de elevación dentro de cada bloque de 2x2 pixeles

  • 2: De acuerdo con el comando el 2 representa el factor de agragicón, en el cual corroborá que por cado bloque 2x2 píxeles del DEM orginial se convertirá en un solo píxel en el nuevo raster.

4. Lectura de municipios del Putumayo usando la biblioteca sf

(munic <-  sf::st_read("DATOS/Putumayo.gpkg"))
## Reading layer `putumayo_1__mgn_adm_mpio_grafico_copiar' from data source 
##   `C:\Users\gutie\Videos\Examen2\DATOS\Putumayo.gpkg' using driver `GPKG'
## Simple feature collection with 13 features and 6 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -77.18681 ymin: -0.5622776 xmax: -73.84132 ymax: 1.467315
## Geodetic CRS:  MAGNA-SIRGAS

El presente comando es usa paa leer el archivo de geotabase en formato geopackage (.gpkg) que contiene datos vectoriales espaciales. En este caso, se está leyendo un archivo denominado “Putumayo.gpkg” dentro de la carpeta DATOS

4.1 Explicación de cada argumento en el comando (munic <- sf::st_read()

  • st_read(): Permite leer diferentes tipos de archivos geoespaciales como Shapefiles, GeoJSON, GeoPackage, etc., y convertirlos en objetos que R puede manejar (en este caso, un objeto de tipo sf).

  • sf: Utilizado para trabajar con datos espaciales en formato vectorial.

  • munic <- : El operador es equivalente a la asignación de el objeto para así poder ser leído por la varible munic. Esto significa que los datos leídos del archivo “Putumayo.gpkg” se almacenarán en la variable munic para su posterior manipulación y análisis.

4.2 ¿Qué tarea ejecuta este comando?

    1. Carga los datos espcaciales como los archivos Geopackage, el cual contiene nformación vectorial del municipio de Putumayo, como límites geográficos (polígonos) de áreas municipales, departamentos, distritos, o cualquier otro tipo de geometría relevante.
    1. Los datos provenientes del archivo .gpkg se convierten en un objeto sf en R, lo cual facilita su manipulación y análisis utilizando funciones especializadas del paquete sf.
    1. Una vez cargados los datos en la variable munic, estos podrán ser utilizados para realizar operaciones espaciales, visualización en mapas o análisis geoespaciales, como intersección, buffering, selección por atributos, etc.

4.3 ¿Es necesario utilizar Geopackage y sf?

Relamente no, pero al utilizar un archivo Geopackage como un formato eficiente y estándar abierto para almacenar datos geoespaciales, que puede manejar múltiples capas de datos y es más compacto que otros formatos como Shapefiles.

Por otro lado, el sf al ser un paquete de R muy eficiente y fácil de usar para el manejo de datos espaciales, nos permite trabajr con datos geoespaciales en un análisis de áreas municipales o territoriales, como el caso de Putumayo.

4.4 Recorte de dem2 a los límites del departamento del Putumayo

El comando dem3 = terra::crop(dem2,munic, mask=TRUE) ejecuta dos operaciones de gran importancia sobre el Modelo Digital de Elevación (MDE) previamente procesado (dem2): recorte (crop) y enmascarado (mask). Estas acciones son cruciales cuando se desea trabajar solo con una región de interés, en este caso, definida por un área geoespacial específica, como el departamento del Putumayo.

dem3 = terra::crop(dem2,munic, mask=TRUE)
## Warning: [crop] CRS do not match

4.4.1 Explicación de cada argumento en el comando dem3 = terra::crop(dem2,munic, mask=TRUE)

  1. terra::crop():
  • crop() función de terra se utiliza para recortar un raster (el dem2) según los límites definidos por un polígono o una geometría vectorial.

2.mask = TRUE: - Asegura que cualquier área fuera de los límites del municipio se enmascare, queriendo decir que auquellos valores fuera del área del municipio serán ignorados en análisis posteriores.

  • mask procura mantener solo la información dentro del área de interés descartando todo lo que quede afuera.

4.4.2 ¿Por qué se hace uso de este comando?

  • Permite trabjar con un área específica de interés, representando una gran utilidad al momento de analizar solo un parte de un gran conjunto de datos geoespaciales.

  • El recorte y enmarcarado aseguran el uso de los datos que se requieren para analizar, propiciando la eliminación datos innecesarios

5. Tranformación de coordenadas (10%)

El comando (dem_plane = project(dem3, “EPSG:9377”)) efectua una proyección espacial del raster dem3 al sistema de referencia de coordenadas (SRC) especificado por el código EPSG:9377. La proyección es un paso importante cuando se trabaja con datos geoespaciales, ya que asegura que todos los datos estén alineados en el mismo sistema de coordenadas, facilitando comparaciones y análisis precisos.

(dem_plane = project(dem3, "EPSG:9377"))
## class       : SpatRaster 
## dimensions  : 1473, 2441, 1  (nrow, ncol, nlyr)
## resolution  : 152.6319, 152.6319  (x, y)
## extent      : 4533838, 4906412, 1495829, 1720656  (xmin, xmax, ymin, ymax)
## coord. ref. : MAGNA-SIRGAS 2018 / Origen-Nacional (EPSG:9377) 
## source(s)   : memory
## name        : elev_Putumayo_z10 
## min value   :         -61.38813 
## max value   :        3892.48047

5.1 ¿A que se refiere el código EPSG:9377?

El código EPSG:9377, corresponde a la proyección MAGNA-SIRGAS con origen único nacional, que es el sistema de coordenadas oficial utilizado en Colombia desde la adopción de la nueva referencia geodésica en 2020. Esto fue confirmado por la información oficial publicada por el Instituto Geográfico Agustín Codazzi (IGAC) y otras fuentes confiables de SIG (Sistemas de Información Geográfica), denominado como El sistema de coordenadas nacional de Colombia

5.2 Explicación de cada argumento en el comando (dem_plane = project(dem3, “EPSG:9377”))

  1. project():
  • La función project() de terra se utiliza para transformar un raster (o capa espacial) de un sistema de coordenadas a otro.
  1. dem3:
  • Es el Modelo Digital de Elevación recortado y enmascarado (dem3), que fue recortado previamente para ajustar los datos al área de los municipios del departamento de Putumayo.
  1. dem_plane:
  • Representa el nuevo objeto en donde se almacenará el raster proyectado, es decir, corresponde a el dem3 transformado al sistema de coordenadas especificado.

6. Tranformación vectorial

Para el caso de (munic_plane = sf::st_transform(munic, “EPSG:9377”)) busca realizar una transformación de proyección en el objeto vectorial munic (que contiene los límites de los municipios del departmaento de Putumayo) al sistema de referencia de coordenadas especificado por el código EPSG:9377.

(munic_plane = sf::st_transform(munic, "EPSG:9377"))

6.1 Explicación de cada argumento en el comando (munic_plane = sf::st_transform(munic, “EPSG:9377”))

  1. munic_plane:
  • Cumple la tarea de almacenar el nuevo objeto espacial munic, el cual anteriormente se econtraba transformado al sistema de coordenadas EPSG:9377.
  1. munic:
  • Es el objeto espacial vectorial que contiene las geometrías de los municipios del departmaento del Putumayo.
  1. sf::st_transform()
  • st_transform() es una función del paquete sf, la cual se utiliza para transformar las coodenadas de un objeto espacial a otro

6.2 ¿Por qué utilizar el comando (munic_plane = sf::st_transform(munic, “EPSG:9377”))

  1. Transforma las coordenadas del objeto munic a su sistema de coordenadas original EPSG:9377

  2. Un mismo sistema de coordenadas para todos, facilitando su integración en la lectura de los objeto munic y el raster dem3

6.3 Importancia de la transformación de coordenadas

📂 Alineación precisa 🗳 Precisión en el análisis 💡Compatibilidad con otros datos

7. Computación de atributos del terreno (20%)

El siguiente comando cumple la función de calcular dos métricas geoespaciales importantes: la pendiente (slope) y la orientación del relieve (aspect), que son características claves en el análisis del modelo digital de elevación.

(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  : 1473, 2441, 2  (nrow, ncol, nlyr)
## resolution  : 152.6319, 152.6319  (x, y)
## extent      : 4533838, 4906412, 1495829, 1720656  (xmin, xmax, ymin, ymax)
## coord. ref. : MAGNA-SIRGAS 2018 / Origen-Nacional (EPSG:9377) 
## source(s)   : memory
## names       :    slope,   aspect 
## min values  :  0.00000,   0.0000 
## max values  : 54.96119, 359.9999

7.1 Explicación de cada argumento en el comando (slp_asp = MultiscaleDTM::SlpAsp()

  1. include_scale = FALSE:
  • Indica si se deben incluir o no los datos de escala en los resultados. En este caso, se ha especificado FALSE, lo que significa que la escala no se incluirá en los resultados.
  1. na.rm = TRUE:
  • Elimina los valores NA (valores perdidos) antes de realizar los cálculos. Esto es útil cuando hay valores faltantes en el DEM que podrían interferir con los análisis.
  1. metrics = c(“slope”, “aspect”):
  • Hace referencia a las métricas que se van a calcular, en este caso, la pendiente (slope) y el aspecto (aspect) del terreno.
  1. method = “queen”:
  • Especifica el método para la identificación de vecinos en el análisis. El cual se basa en la teoría de grafos y asocia cada celda con sus 8 vecinos más cercanos.
  1. unit = “degrees”:
  • Define la unidad en la que se calculará el aspecto de la orientación del relieve. Como en el comando, se utiliza “grados”, el aspecto resultante tambien estará en grados, típicamente entre 0 y 360.
  1. w = c(3, 3):
  • Provee de manera detallada el tamaño de la ventana (filtro) que se utilizará para el análisis. En este caso, es una ventana de 3x3, lo que significa que se analizarán áreas de 3 píxeles por 3 píxeles alrededor de cada punto en el DEM.
  1. dem_plane:
  • Es el modelo digital de elevación (DEM) que se está utilizando para calcular la pendiente y el aspecto. El DEM proporciona información sobre la elevación de la superficie del terreno en un área determinada.

7.2 Pendiente según el código (slope = subset(slp_asp, 1))

Extrae la pendiente (slope) de los resultados calculados previamente con la función SlpAsp, y los almacena posteriorme en el objeto slope para asi lograr realizar un análisis o visualización central y objetiva de la pendiente del terreno.

(slope = subset(slp_asp, 1))
## class       : SpatRaster 
## dimensions  : 1473, 2441, 1  (nrow, ncol, nlyr)
## resolution  : 152.6319, 152.6319  (x, y)
## extent      : 4533838, 4906412, 1495829, 1720656  (xmin, xmax, ymin, ymax)
## coord. ref. : MAGNA-SIRGAS 2018 / Origen-Nacional (EPSG:9377) 
## source(s)   : memory
## name        :    slope 
## min value   :  0.00000 
## max value   : 54.96119
7.2.1 Explicación de cada argumento en el comando (slope = subset(slp_asp, 1))
  1. subset(slp_asp, 1):
  • Contiene los resultados de la función slp_asp, y los provenientes de la pendiente (slope) anteriormente calculada como el aspecto (Aspect) ya que ambas funciones fueron calculadas en conjunto.

2.slp_asp:

  • Es una lista o una estructura similar que contiene múltiples resultados, el número 1 selecciona el primer elemento, que es la pendiente.
  1. subset(slp_asp, 1)
  • La función subset se utiliza para extraer una parte de un objeto. En este caso, slp_asp probablemente es un objeto que contiene tanto el análisis de pendiente como el aspecto.

  • El argumento 1 hace referencia al primer componente de este objeto, el cual es la pendiente

7.3 Análisis de resultados de la pendiente

De acuerdo con lo arrojado por el código es posible inferir que los valores de pendientes varían desde el plano 0 hasta una inclinación máxima de aproximadamente 55 unidades, por consigueinte la resolución espacial consta de 152.63 metros lo cual para ser más específicos indíca que cada celda del raster cubre un área de aproximadamente 152.63 × 152.63= 23,295m^2 o 2.3 hectáreas.

Con respecto a las dimensiones el raster del departamento del Putumayo, tiene entre 1473 filas, 2441 columnas y 1 capa refiriendose a que el raster es de una sola banda. De la mano, los resultados del código especifica el marco espacial del raster donde xmin: 4533838, xmax: 4906412 y ymin: 1495829, ymax: 1720656

8. Distribución de valores de pendiente

El código utiliza la función hist() del paquete terra en R para crear un histograma de los valores de la pendiente almacenados en el objeto raster slope.

8.1 Explicación del código terra::hist(slope, main = “Putumayo’s slope”, xlab = “Slope (in degrees)”)

terra::hist(slope, main = "Putumayo's slope", xlab = "Slope (in degrees)")
## Warning: [hist] a sample of 28% of the cells was used (of which 69% was NA)

  1. slope:
  • Es el raster que contiene los valores de pendiente que se analizarán.
  1. terra::hist():
  • Esta función genera un histograma de los valores de un objeto de tipo SpatRaster (como slope).
  1. xlab = “Slope (in degrees):
  • Especifica la etiqueta para el eje X, que indica lo que representan los valores en el eje horizontal.
  1. main = “Putumayo’s slope”:
  • Define el título principal del histograma. En este caso, el título será: “Putumayo’s slope”.

8.2 Análisis del histograma valores de pendiente del Putumayo

terra::hist(slope, main = "Putumayo's slope", xlab = "Slope (in degrees)")
## Warning: [hist] a sample of 28% of the cells was used (of which 69% was NA)

El presente histograma muestra la distribución de las pendientes en grados en la región de Putumayo, entre las cuales varias de sus principales características son la frecuenta alta en pendientes bajas, la pendientes moderadas y altas, una distribución asimétrica la cual se encuentra sesgada hacia la izquierda, lo que quiere decir que predominan las pendientes bajas

Teniendo lo anterior en cuenta es posible reconocer que el paisaje del Putumayo está dominado por áreas planas o con pendientes suaves, en las cuales aquellas pendientes pronunciadas pueden llegar a ser mayores de 20 grados representando en el histograma una pequeña proporción total, ya sea asociadas con colinas o montañas específicas en la región.

9. Orientación en la cual se inclina la pendiente del terreno del Putumayo

El código busca extraer la capa de orientación del raster slp_asp para análisis posteriores, como visualizar hacia dónde están orientadas las pendientes o identificar áreas específicas según su exposición.

(aspect =subset(slp_asp, 2))
## class       : SpatRaster 
## dimensions  : 1473, 2441, 1  (nrow, ncol, nlyr)
## resolution  : 152.6319, 152.6319  (x, y)
## extent      : 4533838, 4906412, 1495829, 1720656  (xmin, xmax, ymin, ymax)
## coord. ref. : MAGNA-SIRGAS 2018 / Origen-Nacional (EPSG:9377) 
## source(s)   : memory
## name        :   aspect 
## min value   :   0.0000 
## max value   : 359.9999

9.1 Explicación de cada argumento en el comando (aspect =subset(slp_asp, 2))

1.slp_asp:

  • Es un objeto de tipo SpatRaster que probablemente tiene al menos dos capas (bandas). En este caso, la primera capa podría representar la pendiente (slope) y la segunda capa podría representar la orientación (aspect).

2.aspect =:

  • Se guarda la capa seleccionada en un nuevo objeto llamado aspect. El resultado será un raster que representa la orientación de las pendientes en cada celda.

3.subset():

  • Esta función se usa para seleccionar una o varias capas de un objeto SpatRaster en R. El objeto slp_asp contiene múltiples capas de datos raster
  1. 2:
  • Indica que queremos seleccionar la segunda capa del objeto slp_asp. En el contexto de análisis de terreno, la segunda capa suele ser la orientación (aspect).

9.2 Análisis del Histograma de orientación en inclinación del Putumayo

terra::hist(aspect, main = "Putumayo's aspect", xlab = "Aspect (in degrees)")
## Warning: [hist] a sample of 28% of the cells was used (of which 69% was NA)

El histograma muestra la distribución del aspecto en el Putumayo, reflejando que no hay una orientación dominante en las pendientes, ya que la frecuencia es relativamente uniforme. Sin embargo, se observa una ligera disminución entre 200° y 300° y un pequeño aumento cerca de los 350°. Esto sugiere una distribución variada del relieve, influenciada por la geografía del departamento, que combina selva y piedemonte andino. Estos datos pueden ser útiles para estudios ambientales, geológicos o de planificación territorial.

10. Conversión de grados de pendiente en porcentaje de pendiente

El código (slope_perc = tan(slope(pi/180))100) convierte una pendiente expresada en grados a porcentaje de pendiente. este cálculo permite expresar la inclinación del terreno en porcentaje, donde una pendiente de 45° equivale al 100%.

(slope_perc = tan(slope*(pi/180))*100)
## class       : SpatRaster 
## dimensions  : 1473, 2441, 1  (nrow, ncol, nlyr)
## resolution  : 152.6319, 152.6319  (x, y)
## extent      : 4533838, 4906412, 1495829, 1720656  (xmin, xmax, ymin, ymax)
## coord. ref. : MAGNA-SIRGAS 2018 / Origen-Nacional (EPSG:9377) 
## source(s)   : memory
## name        :    slope 
## min value   :   0.0000 
## max value   : 142.6091

10.1 Explicación del código (slope_perc = tan(slope(pi/180))100)

  1. pi/180:Convierte grados a radianes

  2. **(*100)**: Convierte la tangente en porcentaje de pendiente.

  3. tan(slope * (pi/180)): Calcula la tangente de la pendiente en radianes, obteniendo la relación de elevación sobre distancia horizontal.

  4. slope: Representa la pendiente en grados.

11. Análisis de Histograma acerca de valores de la pendiente en unidades de porcentaje del Putumayo

terra::hist(slope_perc, main = "Putumayo's slope", xlab = "Slope (in percentage)")
## Warning: [hist] a sample of 28% of the cells was used (of which 69% was NA)

El histograma refleja que la mayoría del terreno en Putumayo presenta pendientes bajas, cercanas al 0%, lo cual se observa en la alta frecuencia del primer intervalo. Esto indica que gran parte de la región es predominantemente plana. A medida que las pendientes aumentan, la frecuencia decrece de forma notable, lo que evidencia que las áreas con inclinaciones más pronunciadas, superiores al 20%, son mucho menos comunes. Aunque el gráfico incluye pendientes de hasta el 120%, estas prácticamente no tienen representación, lo que sugiere que terrenos extremadamente inclinados son excepcionales en esta zona. En conjunto, la distribución de pendientes en Putumayo señala un predominio de llanuras o terrenos con suaves inclinaciones, características que influyen significativamente en el uso del suelo, la infraestructura y las actividades económicas de la región.

12. Computación de estadísticas zonales (20%)

El código proporcionado a continuación realiza una clasificación de valores de pendiente porcentual (slope_perc) en rangos determinados mediante una matriz, usando la función classify.

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)

12.1 Explicación del código m <- c()m <- matrix(m, ncol=3, byrow = TRUE)rc <- classify(slope_perc, m, right=TRUE)

  1. Creación del vector:
m <- c(0, 3, 1,  
       3, 7, 2,  
       7, 12,  3, 
       12, 25, 4, 
       25, 50, 5, 
       50, 75, 6,
       75, 160, 7)
  • Este contiene los limítes de los rangos de pendiente junto con una etiqueta asociada.Debido a esto por cada 3 elementos se evidencia un intervalo: el primer valor es el límite inferior, el segundo es el límite superior, y el tercero es la etiqueta correspondiente.
  1. Conversión del vector en una matriz:
  • El vector m se convierte en una matriz de 3 columnas, con los valores organizados por filas (byrow=TRUE). Cada fila representa un rango con su límite inferior, límite superior y etiqueta
  1. Clasificación con classify :
  • clasifica los valores de slope_perc según los rangos resultantes en la matriz m. Asi mismo, el argumento right=TRUE indica que los límites superiores son inclusivos, es decir, si un valor igual al límite superior este pertenece a ese rango.

13. Computación de estadísticas zonales usando exact_extract

Cálcula el promedio de las pendientes porcentuales dentro de varios de los poligonos de un conjunto asociado a las entidades geográficas ya proporcionadas. Con respecto a su funcionamiento tenemos en primer lugar la asignación de resultados a una nueva columna llamada mean_slope dentro del objeto munic el cual representará polígonos municipales u otras entidades geográficas.

En segundo lugar la implementación del paquete exact_extract realizara operaciones estadísticas entre datos raster (en este caso, slope_perc) y datos vectoriales (como los polígonos en munic). Esta función requiere de parámetros como slope_perc, munic, mean

(munic$mean_slope <- exactextractr::exact_extract(slope_perc, munic, 'mean'))
## Warning in .local(x, y, ...): Polygons transformed to raster CRS (EPSG:9377)
##   |                                                                              |                                                                      |   0%  |                                                                              |=====                                                                 |   8%  |                                                                              |===========                                                           |  15%  |                                                                              |================                                                      |  23%  |                                                                              |======================                                                |  31%  |                                                                              |===========================                                           |  38%  |                                                                              |================================                                      |  46%  |                                                                              |======================================                                |  54%  |                                                                              |===========================================                           |  62%  |                                                                              |================================================                      |  69%  |                                                                              |======================================================                |  77%  |                                                                              |===========================================================           |  85%  |                                                                              |=================================================================     |  92%  |                                                                              |======================================================================| 100%
##  [1] 31.958179 17.830488 13.841450  1.924543  3.003686  2.194637  1.746912
##  [8] 15.264664 37.670464  1.768489 30.336948  2.489117 19.559658

13.1 Resultado final del código (munic$mean_slope <- exactextractr::exact_extract(slope_perc, munic, ‘mean’))

  • El objeto munic ahora incorpora una nueva columna llamada mean_slope, donde se almacena el valor promedio de las pendientes porcentuales calculadas dentro de cada polígono. Esta información resulta clave para evaluar la inclinación promedio del terreno en cada unidad geográfica, siendo especialmente relevante para estudios relacionados con la planificación territorial, la geografía o el análisis ambiental.

14. Análisis de Histograma del promedio de pendientes del Putumayo

hist(munic$mean_slope, main = "Putumayo's mean slope", xlab = "Slope (in percentage)")

El histograma muestra que la mayor parte de las unidades geográficas del Putumayo presentan pendientes promedio entre 0% y 10%, lo que indica que gran parte del terreno tiene inclinaciones suaves, características de áreas relativamente planas o de topografía poco accidentada. Un número menor de unidades se encuentra en el rango de pendientes promedio entre 10% y 20%, reflejando una transición hacia terrenos más inclinados, aunque aún moderados. Finalmente, las pendientes promedio más altas, entre 30% y 40%, están representadas por pocas unidades, lo que evidencia que los terrenos más empinados son menos comunes en la región. En conjunto, el análisis sugiere que el Putumayo está dominado por terrenos de inclinación moderada a baja, lo cual puede influir en actividades como la agricultura, la construcción de infraestructura y la conservación ambiental, y refleja el relieve característico de esta zona.

14.1

El código asigna a cada polígono del objeto munic la clase más frecuente, o moda, de los valores clasificados en el raster rc que se encuentran dentro de cada polígono. Esto se logra creando o actualizando una columna llamada class en el objeto munic, donde se almacenará el resultado de la operación. La función exact_extract, del paquete exactextractr, realiza un análisis espacial entre el raster rc y el objeto vectorial munic, aplicando la estadística especificada, en este caso, ‘mode’.

El raster rc contiene valores clasificados en diferentes clases, mientras que munic representa polígonos geográficos, como municipios o áreas específicas. Al usar ‘mode’, se calcula la moda, es decir, el valor más frecuente de las celdas raster contenidas dentro de cada polígono.

(munic$class <- exactextractr::exact_extract(rc, munic, 'mode'))
## Warning in .local(x, y, ...): Polygons transformed to raster CRS (EPSG:9377)
##   |                                                                              |                                                                      |   0%  |                                                                              |=====                                                                 |   8%  |                                                                              |===========                                                           |  15%  |                                                                              |================                                                      |  23%  |                                                                              |======================                                                |  31%  |                                                                              |===========================                                           |  38%  |                                                                              |================================                                      |  46%  |                                                                              |======================================                                |  54%  |                                                                              |===========================================                           |  62%  |                                                                              |================================================                      |  69%  |                                                                              |======================================================                |  77%  |                                                                              |===========================================================           |  85%  |                                                                              |=================================================================     |  92%  |                                                                              |======================================================================| 100%
##  [1] 5 4 2 1 1 1 1 4 5 1 5 1 1

15. Análisis de Histograma de reclasificación de la pendiente de el Putumayo

hist(munic$class, main = "Putumayo's reclassified slope", xlab = "Slope (as a category)")

EL histograma resultante presenta la distribución de las pendientes reclasificadas en el departamento de Putumayo, Colombia. El eje horizontal muestra las categorías de pendientes, numeradas del 1 al 5, mientras que el eje vertical indica la frecuencia de ocurrencias de cada categoría. La categoría 2 es la más frecuente, con 8 ocurrencias, lo que sugiere que este rango de inclinación es el más común en la región. Las categorías 3 y 4 tienen una presencia moderada, con 2 y 3 ocurrencias respectivamente. Las categorías 1 y 5 no tienen ocurrencias, indicando la ausencia de terrenos con pendientes extremadamente bajas o altas en la muestra analizada.

16. Sistemas de información geográfica (SIG), según el sistema de coordenadas específico

16. 1 Sistema de coordenada EPSG:4326

(rc.geo = project(rc, "EPSG:4326"))
## class       : SpatRaster 
## dimensions  : 1482, 2437, 1  (nrow, ncol, nlyr)
## resolution  : 0.001373237, 0.001373237  (x, y)
## extent      : -77.18857, -73.84199, -0.5635595, 1.471577  (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326) 
## source(s)   : memory
## name        :     slope 
## min value   : 0.3325361 
## max value   : 7.0000000

La expresión (rc.geo = project(rc, “EPSG:4326”)) convierte el objeto rc al sistema de coordenadas EPSG:4326 y almacena el resultado en rc.geo. La función project() se encarga de transformar los datos espaciales de rc desde su sistema de coordenadas original a WGS 84 (EPSG:4326), un sistema de referencia basado en coordenadas geográficas de latitud y longitud.

16.2 Sistema de coordenada EPSG:4326

(slope.geo = project(slope_perc, "EPSG:4326"))
## class       : SpatRaster 
## dimensions  : 1482, 2437, 1  (nrow, ncol, nlyr)
## resolution  : 0.001373237, 0.001373237  (x, y)
## extent      : -77.18857, -73.84199, -0.5635595, 1.471577  (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326) 
## source(s)   : memory
## name        :        slope 
## min value   : 7.344723e-03 
## max value   : 1.411980e+02

La expresión (slope.geo = project(slope_perc, “EPSG:4326”)) realiza una operación similar, pero aplicada a slope_perc, transformándolo al sistema de coordenadas EPSG:4326 y almacenando el resultado en slope.geo. Esto permite que los datos de pendiente (slope_perc) sean utilizados en análisis geoespaciales junto con otros datos en el mismo sistema de referencia.

17. Trazado de pendiente del terreno (20%)

palredgreen <- colorNumeric(c("darkseagreen3","yellow2", "orange", "brown2", "darkred"), values(slope.geo),na.color = "transparent")
leaflet(munic) %>% addTiles() %>% setView(-75.9, 8.7, 9) %>% 
    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 Putumayo (%)")
## Warning: sf layer has inconsistent datum (+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs).
## Need '+proj=longlat +datum=WGS84'

19. Visualización alternativa de pendiente del terreno (15%)

dem = terra::rast("DATOS/elev_Putumayo_z10.tif")
dem2 = terra::aggregate(dem, 2, "mean")
## |---------|---------|---------|---------|=========================================                                          
munic <- sf::st_read("DATOS/Putumayo.gpkg")
## Reading layer `putumayo_1__mgn_adm_mpio_grafico_copiar' from data source 
##   `C:\Users\gutie\Videos\Examen2\DATOS\Putumayo.gpkg' using driver `GPKG'
## Simple feature collection with 13 features and 6 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -77.18681 ymin: -0.5622776 xmax: -73.84132 ymax: 1.467315
## Geodetic CRS:  MAGNA-SIRGAS
dem3 <- terra::crop(dem2, munic, mask = TRUE)
## Warning: [crop] CRS do not match
dem_plane = project(dem3, "EPSG:9377")
munic_plane = sf::st_transform(munic, "EPSG:9377")
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)

slope = subset(slp_asp, 1)
munic$mean_slope <- exactextractr::exact_extract(slope, munic, 'mean')
## Warning in .local(x, y, ...): Polygons transformed to raster CRS (EPSG:9377)
##   |                                                                              |                                                                      |   0%  |                                                                              |=====                                                                 |   8%  |                                                                              |===========                                                           |  15%  |                                                                              |================                                                      |  23%  |                                                                              |======================                                                |  31%  |                                                                              |===========================                                           |  38%  |                                                                              |================================                                      |  46%  |                                                                              |======================================                                |  54%  |                                                                              |===========================================                           |  62%  |                                                                              |================================================                      |  69%  |                                                                              |======================================================                |  77%  |                                                                              |===========================================================           |  85%  |                                                                              |=================================================================     |  92%  |                                                                              |======================================================================| 100%
slope.geo <- project(slope, "EPSG:4326")
munic.geo <- sf::st_transform(munic, "EPSG:4326")
centroids <- sf::st_centroid(munic.geo)
## Warning: st_centroid assumes attributes are constant over geometries
centroids_coords <- sf::st_coordinates(centroids)
centroids$longitude <- centroids_coords[,1]
centroids$latitude <- centroids_coords[,2]
palredgreen <- colorNumeric(c("darkseagreen3", "yellow2", "orange", "brown2", "darkred"), values(slope.geo), na.color = "transparent")
leaflet(munic.geo) %>% 
  addTiles() %>% 
  setView(-75.9, 8.7, 9) %>% 
  addPolygons(color = "gray", weight = 1.0, smoothFactor = 0.5, opacity = 0.4, fillOpacity = 0.10,
              popup = paste("Municipio: ", munic.geo$mpio_cnmbr, "<br>",
                            "Slope class: ", munic.geo$class, "<br>",
                            "Mean Slope: ", round(munic.geo$mean_slope, 2), "°")) %>% 
  addRasterImage(slope.geo, colors = palredgreen, opacity = 0.8) %>% 
  addLegend(pal = palredgreen, values = values(slope.geo),
            title = "Terrain slope in Putumayo (°)") %>% 
  addLabelOnlyMarkers(data = sf::st_centroid(munic.geo), 
                      label = ~paste(mpio_cnmbr, " (", round(mean_slope, 2), "°)"),
                      labelOptions = labelOptions(noHide = TRUE, direction = "auto", textOnly = TRUE))
## Warning: st_centroid assumes attributes are constant over geometries

Visualización alternativa de pendiente del terreno (15%) - Paleta de color propuesta

dem <- terra::rast("DATOS/elev_Putumayo_z10.tif")
dem2 <- terra::aggregate(dem, 2, "mean")
## |---------|---------|---------|---------|=========================================                                          
munic <- sf::st_read("DATOS/Putumayo.gpkg")
## Reading layer `putumayo_1__mgn_adm_mpio_grafico_copiar' from data source 
##   `C:\Users\gutie\Videos\Examen2\DATOS\Putumayo.gpkg' using driver `GPKG'
## Simple feature collection with 13 features and 6 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -77.18681 ymin: -0.5622776 xmax: -73.84132 ymax: 1.467315
## Geodetic CRS:  MAGNA-SIRGAS
dem3 <- terra::crop(dem2, munic, mask = TRUE)
## Warning: [crop] CRS do not match
dem_plane <- project(dem3, "EPSG:9377")
munic_plane <- sf::st_transform(munic, "EPSG:9377")
dtm_metrics <- 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)
slope <- subset(dtm_metrics, 1)
aspect <- subset(dtm_metrics, 2)
munic$mean_slope <- exactextractr::exact_extract(slope, munic, 'mean')
## Warning in .local(x, y, ...): Polygons transformed to raster CRS (EPSG:9377)
##   |                                                                              |                                                                      |   0%  |                                                                              |=====                                                                 |   8%  |                                                                              |===========                                                           |  15%  |                                                                              |================                                                      |  23%  |                                                                              |======================                                                |  31%  |                                                                              |===========================                                           |  38%  |                                                                              |================================                                      |  46%  |                                                                              |======================================                                |  54%  |                                                                              |===========================================                           |  62%  |                                                                              |================================================                      |  69%  |                                                                              |======================================================                |  77%  |                                                                              |===========================================================           |  85%  |                                                                              |=================================================================     |  92%  |                                                                              |======================================================================| 100%
slope.geo <- project(slope, "EPSG:4326")
aspect.geo <- project(aspect, "EPSG:4326")
munic.geo <- sf::st_transform(munic, "EPSG:4326")
centroids <- sf::st_centroid(munic.geo)
## Warning: st_centroid assumes attributes are constant over geometries
centroids_coords <- sf::st_coordinates(centroids)
centroids$longitude <- centroids_coords[,1]
centroids$latitude <- centroids_coords[,2]
pal_aspect <- colorNumeric(c("blue", "lightblue", "green", "yellow", "orange", "red", "purple", "darkblue"), values(aspect.geo), na.color = "transparent")
leaflet(munic.geo) %>% 
  addTiles() %>% 
  setView(-75.9, 8.7, 9) %>% 
  addPolygons(color = "gray", weight = 1.0, smoothFactor = 0.5, opacity = 0.4, fillOpacity = 0.10,
              popup = paste("Municipio: ", munic.geo$mpio_cnmbr, "<br>",
                            "Slope class: ", munic.geo$class, "<br>",
                            "Mean Slope: ", round(munic.geo$mean_slope, 2), "°")) %>% 
  addRasterImage(aspect.geo, colors = pal_aspect, opacity = 0.8) %>% 
  addLegend(pal = pal_aspect, values = values(aspect.geo),
            title = "Terrain Aspect in Putumayo") %>% 
  addLabelOnlyMarkers(data = centroids, 
                      lng = ~longitude, lat = ~latitude,
                      label = ~paste(mpio_cnmbr, " (", round(mean_slope, 2), "°)"),
                      labelOptions = labelOptions(noHide = TRUE, direction = "auto", textOnly = TRUE))
sessionInfo()
## R version 4.3.3 (2024-02-29 ucrt)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 11 x64 (build 22631)
## 
## Matrix products: default
## 
## 
## locale:
## [1] LC_COLLATE=Spanish_Spain.utf8  LC_CTYPE=Spanish_Spain.utf8   
## [3] LC_MONETARY=Spanish_Spain.utf8 LC_NUMERIC=C                  
## [5] LC_TIME=Spanish_Spain.utf8    
## 
## time zone: America/Bogota
## tzcode source: internal
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
## [1] terra_1.8-15   leaflet_2.2.2  sf_1.0-19      elevatr_0.99.0
## 
## loaded via a namespace (and not attached):
##  [1] s2_1.1.7             utf8_1.2.4           sass_0.4.8          
##  [4] generics_0.1.3       MultiscaleDTM_0.9.1  class_7.3-22        
##  [7] KernSmooth_2.23-22   lattice_0.22-5       digest_0.6.34       
## [10] magrittr_2.0.3       rgl_1.3.17           evaluate_0.23       
## [13] grid_4.3.3           fastmap_1.1.1        jsonlite_1.8.8      
## [16] e1071_1.7-16         DBI_1.2.2            promises_1.2.1      
## [19] fansi_1.0.6          purrr_1.0.2          scales_1.3.0        
## [22] crosstalk_1.2.1      codetools_0.2-19     jquerylib_0.1.4     
## [25] cli_3.6.2            shiny_1.8.0          rlang_1.1.3         
## [28] units_0.8-5          munsell_0.5.0        ellipsis_0.3.2      
## [31] base64enc_0.1-3      cachem_1.0.8         yaml_2.3.8          
## [34] raster_3.6-30        tools_4.3.3          dplyr_1.1.4         
## [37] colorspace_2.1-0     httpuv_1.6.14        exactextractr_0.10.0
## [40] png_0.1-8            vctrs_0.6.5          R6_2.5.1            
## [43] mime_0.12            proxy_0.4-27         lifecycle_1.0.4     
## [46] classInt_0.4-10      htmlwidgets_1.6.4    pkgconfig_2.0.3     
## [49] progressr_0.15.1     bslib_0.6.1          pillar_1.9.0        
## [52] later_1.3.2          glue_1.7.0           Rcpp_1.0.12         
## [55] highr_0.10           tidyselect_1.2.0     tibble_3.2.1        
## [58] xfun_0.42            rstudioapi_0.15.0    knitr_1.45          
## [61] farver_2.1.1         xtable_1.8-4         htmltools_0.5.7     
## [64] rmarkdown_2.26       wk_0.9.4             compiler_4.3.3      
## [67] sp_2.1-3

Referencias

Lizarazo, I., 2025. Geomorphometric terrain attributes in R. Available at https://rpubs.com/ials2un/geomorphometric

Hijmans, R. J. (2023). terra: Spatial Data Analysis. R package version 1.7-55. https://rspatial.org/terra/

Pebesma, E. (2023). sf: Simple Features for R. R package version 1.0-14. https://r-spatial.github.io/sf/

Lobo, A. (2023). MultiscaleDTM: Multiscale Analysis of Digital Terrain Models. R package version 1.0.0. https://cran.r-project.org/web/packages/MultiscaleDTM/

Baston, D. (2023). exactextractr: Fast Extraction from Raster Datasets Using Polygons. R package version 0.9.2. https://cran.r-project.org/web/packages/exactextractr/

Cheng, J., Karambelkar, B., & Xie, Y. (2023). leaflet: Create Interactive Web Maps with the JavaScript ‘Leaflet’ Library. R package version 2.2.1. https://rstudio.github.io/leaflet/

Pebesma, E., & Bivand, R. S. (2023). Spatial Data in R: New Directions. Journal of Statistical Software, 63(1), 1-24. DOI: 10.18637/jss.v063.i01

Wickham, H., & Grolemund, G. (2016). R for Data Science: Import,https://r4ds.had.co.nz/

Cheng, J., Karambelkar, B., & Xie, Y. (2023). leaflet: Create Interactive Web Maps with the JavaScript ‘Leaflet’ Library. Versión 2.2.1. Comprehensive R Archive Network (CRAN). Recuperado de https://rstudio.github.io/leaflet/

sessionInfo()
## R version 4.3.3 (2024-02-29 ucrt)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 11 x64 (build 22631)
## 
## Matrix products: default
## 
## 
## locale:
## [1] LC_COLLATE=Spanish_Spain.utf8  LC_CTYPE=Spanish_Spain.utf8   
## [3] LC_MONETARY=Spanish_Spain.utf8 LC_NUMERIC=C                  
## [5] LC_TIME=Spanish_Spain.utf8    
## 
## time zone: America/Bogota
## tzcode source: internal
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
## [1] terra_1.8-15   leaflet_2.2.2  sf_1.0-19      elevatr_0.99.0
## 
## loaded via a namespace (and not attached):
##  [1] s2_1.1.7             utf8_1.2.4           sass_0.4.8          
##  [4] generics_0.1.3       MultiscaleDTM_0.9.1  class_7.3-22        
##  [7] KernSmooth_2.23-22   lattice_0.22-5       digest_0.6.34       
## [10] magrittr_2.0.3       rgl_1.3.17           evaluate_0.23       
## [13] grid_4.3.3           fastmap_1.1.1        jsonlite_1.8.8      
## [16] e1071_1.7-16         DBI_1.2.2            promises_1.2.1      
## [19] fansi_1.0.6          purrr_1.0.2          scales_1.3.0        
## [22] crosstalk_1.2.1      codetools_0.2-19     jquerylib_0.1.4     
## [25] cli_3.6.2            shiny_1.8.0          rlang_1.1.3         
## [28] units_0.8-5          munsell_0.5.0        ellipsis_0.3.2      
## [31] base64enc_0.1-3      cachem_1.0.8         yaml_2.3.8          
## [34] raster_3.6-30        tools_4.3.3          dplyr_1.1.4         
## [37] colorspace_2.1-0     httpuv_1.6.14        exactextractr_0.10.0
## [40] png_0.1-8            vctrs_0.6.5          R6_2.5.1            
## [43] mime_0.12            proxy_0.4-27         lifecycle_1.0.4     
## [46] classInt_0.4-10      htmlwidgets_1.6.4    pkgconfig_2.0.3     
## [49] progressr_0.15.1     bslib_0.6.1          pillar_1.9.0        
## [52] later_1.3.2          glue_1.7.0           Rcpp_1.0.12         
## [55] highr_0.10           tidyselect_1.2.0     tibble_3.2.1        
## [58] xfun_0.42            rstudioapi_0.15.0    knitr_1.45          
## [61] farver_2.1.1         xtable_1.8-4         htmltools_0.5.7     
## [64] rmarkdown_2.26       wk_0.9.4             compiler_4.3.3      
## [67] sp_2.1-3