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:
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.
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.
1. Compatibilidad y dependencias:
2. Evitar errores en entornos interactivos:
3. Permisos y acceso a bibliotecas del sistema:
CITAAAAAAAAAAAAAAAAAAAAAAAAAAAA
📊 1. MultiscaleDTM:
🗳️ 2. exactextractr:
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)
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())
ls() → Lista todos los objetos que están en el entorno de trabajo actual.
rm(list=ls()) → (rm) ejecuta la tarea de remover todos los objetos listados por ls(), lo mismo que borrar todo el entorno.
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.
📡 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
📉 4. terra: Procesamiento de datos raster
library(elevatr)
library(sf)
library(leaflet)
library(terra)
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
📂 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:
🌏 3. Localización geográfica y resolución :
El presente comando ejecuta la tarea de reducir la resolución espacial del raster, agrupando píxeles vecinos para luego calcular un nuvalor promedio.
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.
(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
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.
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.
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
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.
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
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
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
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"))
Transforma las coordenadas del objeto munic a su sistema de coordenadas original EPSG:9377
Un mismo sistema de coordenadas para todos, facilitando su integración en la lectura de los objeto munic y el raster dem3
📂 Alineación precisa 🗳 Precisión en el análisis 💡Compatibilidad con otros datos
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
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
2.slp_asp:
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
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
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.
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)
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.
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
1.slp_asp:
2.aspect =:
3.subset():
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.
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
pi/180:Convierte grados a radianes
**(*100)**: Convierte la tangente en porcentaje de pendiente.
tan(slope * (pi/180)): Calcula la tangente de la pendiente en radianes, obteniendo la relación de elevación sobre distancia horizontal.
slope: Representa la pendiente en grados.
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.
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)
m <- c(0, 3, 1,
3, 7, 2,
7, 12, 3,
12, 25, 4,
25, 50, 5,
50, 75, 6,
75, 160, 7)
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
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.
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
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.
(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.
(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.
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'
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
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
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