Este cuaderno presenta el procedimiento para calcular atributos geomorfométricos del terreno a partir de un Modelo Digital de Elevación (MDE). Estos atributos permiten analizar características del relieve como la pendiente y la orientación del terreno, variables importantes para estudios agrícolas, ambientales y territoriales.
Para el cálculo de estos atributos se utilizará la librería MultiscaleDTM en R, una herramienta que permite obtener información del terreno a partir de datos de elevación.
Durante el desarrollo del cuaderno se explicará el proceso de lectura y procesamiento de los datos, las funciones utilizadas y la interpretación de los resultados obtenidos.
Antes de iniciar el procesamiento de los datos, es necesario preparar el entorno de trabajo mediante la instalación y carga de las librerías requeridas. Estas herramientas contienen funciones específicas para la manipulación de información espacial, el procesamiento de modelos digitales de elevación y el cálculo de atributos geomorfométricos del terreno.
La función rm(list = ls()) permite eliminar todos los
objetos almacenados en la memoria temporal de R. Esta práctica permite
iniciar el análisis en un entorno limpio, evitando posibles conflictos
con objetos generados durante sesiones anteriores.
rm(list=ls())
En este cuaderno se emplean diferentes librerías de R para la lectura, procesamiento y visualización de información espacial.
La librería elevatr permite obtener Modelos Digitales de Elevación (MDE) a partir de fuentes de datos disponibles en línea.
La librería sf facilita la lectura, transformación y manipulación de datos espaciales vectoriales, como límites administrativos o capas de polígonos.
La librería terra proporciona herramientas para trabajar con datos ráster, permitiendo realizar operaciones como lectura, transformación, recorte y análisis de Modelos Digitales de Elevación.
La librería leaflet permite generar mapas interactivos para visualizar información espacial y los resultados obtenidos durante el análisis.
La librería MultiscaleDTM contiene las funciones necesarias para calcular atributos geomorfométricos del terreno, como pendiente y orientación, a partir de datos de elevación.
La librería exactextractr permite realizar cálculos estadísticos sobre valores ráster dentro de zonas definidas por capas vectoriales, facilitando el análisis espacial por áreas.
Si las librerías no están instaladas, se pueden instalar utilizando
la función install.packages() desde la consola de R. Este
procedimiento solo es necesario realizarlo la primera vez que se
utilizan estos paquetes en el equipo.
# install.packages("elevatr")
# install.packages("sf")
# install.packages("leaflet")
# install.packages("terra")
# install.packages("MultiscaleDTM")
# install.packages("exactextractr")
Una vez instaladas las librerías, estas deben ser cargadas al entorno
de trabajo mediante la función library(). Esta función
permite activar los paquetes y utilizar las funciones que contienen
durante el desarrollo del análisis.
library(elevatr)
## elevatr v0.99.0 NOTE: Version 0.99.0 of 'elevatr' uses 'sf' and 'terra'. Use
## of the 'sp', 'raster', and underlying 'rgdal' packages by 'elevatr' is being
## deprecated; however, get_elev_raster continues to return a RasterLayer. This
## will be dropped in future versions, so please plan accordingly.
library(sf)
## Linking to GEOS 3.14.1, GDAL 3.12.1, PROJ 9.7.1; sf_use_s2() is TRUE
library(leaflet)
library(terra)
## terra 1.9.34
library(MultiscaleDTM)
library(exactextractr)
La librería MultiscaleDTM permite calcular atributos geomorfométricos del terreno a partir de Modelos Digitales de Elevación (MDE). Estos modelos representan la variación espacial de la elevación del terreno mediante una estructura de datos ráster.
Los atributos geomorfométricos permiten describir características del relieve, como la pendiente y la orientación del terreno, a partir del análisis de los valores de elevación. Para su cálculo, la librería utiliza ventanas de análisis definidas por el usuario, permitiendo evaluar las características del terreno a diferentes escalas espaciales.
En este cuaderno se empleará MultiscaleDTM para obtener información del relieve del área de estudio, la cual posteriormente será utilizada para realizar análisis espaciales y representaciones cartográficas.
Para iniciar el análisis geomorfométrico, es necesario cargar los datos espaciales que serán utilizados como información base. En este caso, se empleará un Modelo Digital de Elevación (MDE), el cual representa la distribución espacial de la altura del terreno mediante una estructura de datos ráster.
El Modelo Digital de Elevación utilizado en este cuaderno fue obtenido previamente y contiene información de elevación del área de estudio. Además, se utilizará una capa vectorial con los límites administrativos del departamento, la cual permitirá delimitar espacialmente el análisis.
La librería terra permite trabajar con datos ráster en
R. La función rast() se utiliza para importar el Modelo
Digital de Elevación y convertirlo en un objeto espacial que puede ser
procesado dentro del entorno de R.
(dem = terra::rast("D:/Geomatica Basica (Gr 2)/GB2/Proyecto2/datos/choco_elevacion_z10.tif"))
## class : SpatRaster
## size : 7159, 3602, 1 (nrow, ncol, nlyr)
## resolution : 0.0006831505, 0.0006831505 (x, y)
## extent : -78.39844, -75.93773, 3.86412, 8.754795 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## source : choco_elevacion_z10.tif
## name : file24f841544e7f
## min value : -4485
## max value : 4730
El resultado muestra las principales características del Modelo Digital de Elevación, incluyendo el número de filas y columnas, la resolución espacial, el sistema de coordenadas, la extensión del área representada y los valores mínimos y máximos de elevación.
Los Modelos Digitales de Elevación pueden contener una gran cantidad
de información espacial, lo que puede aumentar el consumo de memoria
durante los cálculos posteriores. Por esta razón, se realiza una
reducción de resolución mediante la función
aggregate().
Esta función permite agrupar celdas vecinas del ráster y calcular un
nuevo valor representativo. En este caso se utiliza el promedio
(mean) de las celdas agrupadas para conservar una
representación general del relieve.
dem2 = terra::aggregate(dem, 2, "mean")
## |---------|---------|---------|---------|=========================================
Además del Modelo Digital de Elevación, se requiere la capa de
límites administrativos del área de estudio. Para esto se utiliza la
librería sf, la cual permite trabajar con datos espaciales
vectoriales como puntos, líneas y polígonos.
La función st_read() permite importar archivos
espaciales en diferentes formatos, como GeoPackage (.gpkg),
que contiene la información de los municipios del departamento.
(munic <- sf::st_read("D:/Geomatica Basica (Gr 2)/GB2/Proyecto2/datos/choco_municipios.gpkg"))
## Reading layer `municipios' from data source
## `D:\Geomatica Basica (Gr 2)\GB2\Proyecto2\datos\choco_municipios.gpkg'
## using driver `GPKG'
## Simple feature collection with 21 features and 11 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -78.31375 ymin: 3.992801 xmax: -76.0173 ymax: 8.658194
## Geodetic CRS: WGS 84
El resultado muestra la estructura de la capa vectorial, incluyendo el número de entidades espaciales, el tipo de geometría, el sistema de referencia de coordenadas y los atributos asociados a cada municipio.
Como el Modelo Digital de Elevación puede abarcar un área mayor a la zona de estudio, se realiza un recorte utilizando los límites administrativos del departamento.
La función crop() permite delimitar la extensión
espacial del ráster, mientras que el argumento mask = TRUE
elimina los valores que se encuentran fuera de los polígonos definidos
en la capa vectorial.
dem3 = terra::crop(dem2, munic, mask = TRUE)
El resultado corresponde a un Modelo Digital de Elevación ajustado únicamente al área de estudio, el cual será utilizado posteriormente para calcular los atributos geomorfométricos del terreno.
Para calcular atributos geomorfométricos del terreno, el Modelo Digital de Elevación debe estar expresado en un sistema de coordenadas planas. Esto se debe a que los cálculos relacionados con distancia, pendiente y análisis espacial requieren unidades métricas, como metros, en lugar de coordenadas geográficas expresadas en grados.
En Colombia, el Instituto Geográfico Agustín Codazzi (IGAC) estableció desde 2020 el sistema de coordenadas planas con origen único nacional, identificado mediante el código EPSG:9377 (MAGNA-SIRGAS / Origen-Nacional).
Por esta razón, tanto el Modelo Digital de Elevación como la capa vectorial de municipios serán transformados a este sistema de referencia antes de realizar los cálculos geomorfométricos.
La función project() de la librería terra
permite transformar objetos ráster entre diferentes sistemas de
referencia de coordenadas.
En este caso, el Modelo Digital de Elevación recortado
(dem3) será transformado al sistema de coordenadas nacional
colombiano mediante el código EPSG:9377.
(dem_plane = terra::project(dem3, "EPSG:9377"))
## class : SpatRaster
## size : 3428, 1708, 1 (nrow, ncol, nlyr)
## resolution : 151.3892, 151.3892 (x, y)
## extent : 4409533, 4668105, 1999816, 2518778 (xmin, xmax, ymin, ymax)
## coord. ref. : MAGNA-SIRGAS 2018 / Origen-Nacional (EPSG:9377)
## source(s) : memory
## name : file24f841544e7f
## min value : -557.542725
## max value : 3357.431641
El resultado corresponde al Modelo Digital de Elevación expresado en coordenadas planas, donde las unidades espaciales están representadas en metros. Este formato permite realizar posteriormente cálculos relacionados con las características del relieve.
La capa de municipios también debe transformarse al mismo sistema de coordenadas para mantener la compatibilidad espacial con el Modelo Digital de Elevación.
La función st_transform() de la librería sf
permite realizar esta conversión en objetos vectoriales.
(munic_plane = sf::st_transform(munic, "EPSG:9377"))
El resultado corresponde a la capa de municipios del departamento de Chocó transformada al sistema MAGNA-SIRGAS / Origen-Nacional, manteniendo sus atributos originales y modificando únicamente la referencia espacial de sus geometrías.
Los atributos geomorfométricos permiten describir las características
del relieve a partir de un Modelo Digital de Elevación. En este caso, se
calcularán dos variables principales: la pendiente (slope)
y la orientación del terreno (aspect).
La pendiente representa el grado de inclinación del terreno y permite identificar zonas con mayor o menor inclinación. Por otro lado, la orientación indica la dirección hacia la cual está inclinada una superficie del terreno, expresada generalmente en grados azimutales.
Para calcular estos atributos se utilizará la función
SlpAsp() de la librería MultiscaleDTM.
Esta función permite obtener información del relieve mediante ventanas
de análisis definidas por el usuario.
Antes de utilizar esta función, se puede consultar su documentación desde la consola de R mediante:
?SlpAsp
Esta consulta permite conocer los argumentos disponibles y la forma correcta de utilizar la función.
La función SlpAsp() recibe como entrada el Modelo
Digital de Elevación en coordenadas planas y genera un nuevo objeto
ráster con los atributos geomorfométricos seleccionados.
El argumento w define el tamaño de la ventana utilizada
para el cálculo. En este caso se utiliza una ventana de 3 x 3 celdas,
donde cada celda considera la relación con sus vecinos inmediatos.
El argumento method indica la forma en que se consideran
las celdas vecinas durante el análisis. El método "queen"
incluye las ocho celdas que rodean la celda central, incluyendo vecinos
diagonales.
(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
## size : 3428, 1708, 2 (nrow, ncol, nlyr)
## resolution : 151.3892, 151.3892 (x, y)
## extent : 4409533, 4668105, 1999816, 2518778 (xmin, xmax, ymin, ymax)
## coord. ref. : MAGNA-SIRGAS 2018 / Origen-Nacional (EPSG:9377)
## source(s) : memory
## names : slope, aspect
## min values : 0, 0
## max values : 72.253799, 359.999988
El resultado corresponde a un objeto ráster con dos capas: una
correspondiente a la pendiente (slope) y otra a la
orientación del terreno (aspect).
Debido a que el objeto generado contiene dos variables diferentes, se separan sus capas para analizarlas individualmente.
La primera capa corresponde a la pendiente expresada en grados.
(slope = subset(slp_asp, 1))
## class : SpatRaster
## size : 3428, 1708, 1 (nrow, ncol, nlyr)
## resolution : 151.3892, 151.3892 (x, y)
## extent : 4409533, 4668105, 1999816, 2518778 (xmin, xmax, ymin, ymax)
## coord. ref. : MAGNA-SIRGAS 2018 / Origen-Nacional (EPSG:9377)
## source(s) : memory
## name : slope
## min value : 0
## max value : 72.253799
El histograma permite observar la distribución de los valores de pendiente dentro del área de estudio.
terra::hist(
slope,
main = "Pendiente del terreno - Chocó",
xlab = "Pendiente (grados)"
)
## Warning: [hist] a sample of 17% of the cells was used (of which 66% was NA)
La segunda capa corresponde al aspecto o dirección de la pendiente. Sus valores representan ángulos entre 0 y 360 grados.
(aspect = subset(slp_asp, 2))
## class : SpatRaster
## size : 3428, 1708, 1 (nrow, ncol, nlyr)
## resolution : 151.3892, 151.3892 (x, y)
## extent : 4409533, 4668105, 1999816, 2518778 (xmin, xmax, ymin, ymax)
## coord. ref. : MAGNA-SIRGAS 2018 / Origen-Nacional (EPSG:9377)
## source(s) : memory
## name : aspect
## min value : 0
## max value : 359.999988
La distribución de los valores de orientación se puede observar mediante un histograma.
terra::hist(
aspect,
main = "Orientación del terreno - Chocó",
xlab = "Orientación (grados)"
)
## Warning: [hist] a sample of 17% of the cells was used (of which 66% was NA)
En algunos análisis agrícolas, la pendiente suele expresarse como porcentaje debido a su utilidad para clasificar limitaciones del terreno y evaluar condiciones de manejo.
La conversión se realiza mediante la relación trigonométrica entre grados y porcentaje de pendiente:
Pendiente (%) = tan(pendiente en grados) × 100
(slope_perc = tan(slope * (pi / 180)) * 100)
## class : SpatRaster
## size : 3428, 1708, 1 (nrow, ncol, nlyr)
## resolution : 151.3892, 151.3892 (x, y)
## extent : 4409533, 4668105, 1999816, 2518778 (xmin, xmax, ymin, ymax)
## coord. ref. : MAGNA-SIRGAS 2018 / Origen-Nacional (EPSG:9377)
## source(s) : memory
## name : slope
## min value : 0
## max value : 312.471258
El resultado corresponde a un ráster con los valores de pendiente expresados en porcentaje.
Finalmente, se visualiza la distribución de la pendiente porcentual:
terra::hist(
slope_perc,
main = "Pendiente del terreno - Chocó",
xlab = "Pendiente (%)"
)
## Warning: [hist] a sample of 17% of the cells was used (of which 66% was NA)
Las estadísticas zonales permiten calcular valores estadísticos de un ráster dentro de zonas definidas por una capa vectorial. En este caso, se calcularán estadísticas relacionadas con la pendiente del terreno para cada municipio del departamento del Chocó.
Para este análisis se utilizará como ráster de entrada la pendiente
expresada en porcentaje (slope_perc) y como unidades
espaciales de análisis los límites municipales del departamento
(munic_plane).
Este procedimiento permite resumir la información del relieve dentro de diferentes unidades administrativas, facilitando la comparación espacial de las condiciones del terreno.
Antes de calcular las estadísticas zonales, se realizará una reclasificación de la pendiente utilizando rangos definidos para fines de interpretación agrológica. Esta transformación permite convertir valores continuos de pendiente en categorías discretas.
La reclasificación consiste en transformar los valores originales de pendiente en categorías según intervalos establecidos.
Para realizar este procedimiento se utiliza la función
classify() del paquete terra, la cual
permite asignar nuevos valores a las celdas del ráster mediante una
matriz de clasificación.
En este caso, se establecen siete categorías de pendiente:
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
)
rc
## class : SpatRaster
## size : 3428, 1708, 1 (nrow, ncol, nlyr)
## resolution : 151.3892, 151.3892 (x, y)
## extent : 4409533, 4668105, 1999816, 2518778 (xmin, xmax, ymin, ymax)
## coord. ref. : MAGNA-SIRGAS 2018 / Origen-Nacional (EPSG:9377)
## source(s) : memory
## name : slope
## min value : 0
## max value : 312.471258
El resultado corresponde a un ráster reclasificado donde cada píxel contiene un valor entre 1 y 7, representando una categoría de pendiente.
Para obtener la pendiente promedio dentro de cada municipio se
utiliza la función exact_extract() de la librería
exactextractr.
Esta función permite extraer los valores de un ráster dentro de zonas
definidas por polígonos y calcular estadísticas espaciales. En este caso
se utiliza el estadístico mean, que calcula el promedio de
los valores de pendiente dentro de cada municipio.
(munic_plane$mean_slope <- exactextractr::exact_extract(
slope_perc,
munic_plane,
"mean"
))
## | | | 0% | |=== | 5% | |======= | 10% | |========== | 14% | |============= | 19% | |================= | 24% | |==================== | 29% | |======================= | 33% | |=========================== | 38% | |============================== | 43% | |================================= | 48% | |===================================== | 52% | |======================================== | 57% | |=========================================== | 62% | |=============================================== | 67% | |================================================== | 71% | |===================================================== | 76% | |========================================================= | 81% | |============================================================ | 86% | |=============================================================== | 90% | |=================================================================== | 95% | |======================================================================| 100%
## [1] 15.981379 11.751951 21.737087 18.404886 8.334066 10.685177 17.875463
## [8] 4.034113 30.604048 6.475112 3.555907 13.385941 11.799151 17.161459
## [15] 14.845737 9.609946 6.621727 35.351330 20.810368 6.849749 10.345535
El resultado corresponde al valor promedio de pendiente para cada municipio del departamento del Chocó.
La distribución de estos valores puede observarse mediante un histograma:
terra::hist(
munic_plane$mean_slope,
main = "Pendiente promedio municipal - Chocó",
xlab = "Pendiente (%)"
)
El histograma permite identificar la variabilidad de la pendiente promedio entre los municipios analizados.
Además de la pendiente promedio, se calcula la categoría de pendiente predominante en cada municipio.
Para esto se utiliza nuevamente exact_extract(),
empleando el estadístico mode, el cual identifica la
categoría que aparece con mayor frecuencia dentro de cada polígono
municipal.
(munic_plane$class <- exactextractr::exact_extract(
rc,
munic_plane,
"mode"
))
## | | | 0% | |=== | 5% | |======= | 10% | |========== | 14% | |============= | 19% | |================= | 24% | |==================== | 29% | |======================= | 33% | |=========================== | 38% | |============================== | 43% | |================================= | 48% | |===================================== | 52% | |======================================== | 57% | |=========================================== | 62% | |=============================================== | 67% | |================================================== | 71% | |===================================================== | 76% | |========================================================= | 81% | |============================================================ | 86% | |=============================================================== | 90% | |=================================================================== | 95% | |======================================================================| 100%
## [1] 4 4 4 4 2 1 4 1 5 1 1 4 2 1 4 1 1 5 5 2 1
El resultado corresponde a la categoría de pendiente dominante para cada municipio.
La distribución de las categorías obtenidas se representa mediante un histograma:
terra::hist(
munic_plane$class,
main = "Clasificación de pendiente municipal - Chocó",
xlab = "Categoría de pendiente"
)
Este gráfico permite identificar cuáles categorías de pendiente tienen mayor presencia dentro del departamento.
Los cálculos geomorfométricos se realizaron utilizando el sistema de coordenadas proyectadas MAGNA-SIRGAS / Origen-Nacional (EPSG:9377), debido a que trabaja con unidades métricas adecuadas para análisis espaciales.
Para facilitar la visualización cartográfica, los resultados se transforman nuevamente al sistema de coordenadas geográficas WGS84 (EPSG:4326).
(rc.geo <- terra::project(
rc,
"EPSG:4326"
))
## class : SpatRaster
## size : 3441, 1736, 1 (nrow, ncol, nlyr)
## resolution : 0.001366274, 0.001366274 (x, y)
## extent : -78.36174, -75.98989, 3.981535, 8.682884 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## source(s) : memory
## name : slope
## min value : 0
## max value : 305.687195
(slope.geo <- terra::project(
slope_perc,
"EPSG:4326"
))
## class : SpatRaster
## size : 3441, 1736, 1 (nrow, ncol, nlyr)
## resolution : 0.001366274, 0.001366274 (x, y)
## extent : -78.36174, -75.98989, 3.981535, 8.682884 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## source(s) : memory
## name : slope
## min value : 0
## max value : 305.687195
Los objetos generados podrán utilizarse posteriormente para la representación cartográfica de la pendiente y sus categorías dentro del departamento del Chocó.
La visualización espacial permite interpretar la distribución de la pendiente dentro del área de estudio. En este caso, se utilizará una representación interactiva mediante la librería leaflet, combinando la información ráster de pendiente con los límites municipales del departamento del Chocó.
Para mejorar la interpretación del mapa, se utilizará una escala de colores donde los valores bajos de pendiente tendrán colores asociados a terrenos más planos y los valores altos representarán zonas con mayor inclinación.
La función colorNumeric() permite generar una paleta
continua de colores basada en los valores presentes en el ráster de
pendiente.
En este caso, la escala se construye utilizando los valores de
slope.geo, que corresponde al ráster de pendiente expresado
en porcentaje y transformado nuevamente a coordenadas geográficas.
palredgreen <- colorNumeric(
c("darkseagreen3", "yellow2", "orange", "brown2", "darkred"),
values(slope.geo),
na.color = "transparent"
)
La paleta generada será utilizada posteriormente para representar espacialmente la variación de la pendiente dentro del departamento.
El siguiente código genera un mapa interactivo utilizando la función
leaflet().
El mapa incorpora tres elementos principales:
munic.slope.geo) como capa continua
de información.popup) que permite consultar el
nombre del municipio y la clase de pendiente predominante obtenida
anteriormente.leaflet(munic) %>%
addTiles() %>%
setView(-76.7, 5.5, 7) %>%
addPolygons(
color = "gray",
weight = 1.0,
smoothFactor = 0.5,
opacity = 0.4,
fillOpacity = 0.10,
popup = paste(
"Municipio: ", munic$NAME_2, "<br>",
"Clase de pendiente: ", munic$class, "<br>"
)
) %>%
addRasterImage(
slope.geo,
colors = palredgreen,
opacity = 0.8
) %>%
addLegend(
pal = palredgreen,
values = values(slope.geo),
title = "Pendiente del terreno (%)"
)
El resultado corresponde a un mapa interactivo donde es posible explorar la distribución espacial de la pendiente en el departamento del Chocó.
Al seleccionar diferentes municipios, se pueden consultar sus nombres y la categoría de pendiente predominante calculada mediante las estadísticas zonales.
En esta sección se realizará una visualización alternativa de la pendiente del terreno expresada en grados. A diferencia del mapa anterior, donde se representó la pendiente porcentual mediante un ráster clasificado, en este caso se utilizará la pendiente continua en grados y se incorporarán etiquetas con información de cada municipio.
Las etiquetas permitirán identificar el nombre del municipio y su valor promedio de pendiente, facilitando la comparación espacial de las características del relieve dentro del área de estudio.
Antes de generar la visualización, se calcula nuevamente la pendiente
promedio dentro de cada municipio utilizando la función
exact_extract() de la librería
exactextractr.
El resultado se convierte a valores numéricos para facilitar su representación y posterior uso en etiquetas.
munic$mean_slope <- as.numeric(
exactextractr::exact_extract(slope, munic, "mean")
)
## Warning in .local(x, y, ...): Polygons transformed to raster CRS (EPSG: 9377) .
## To avoid on-the-fly coordinate transformation, ensure that st_crs() returns the
## same result for both raster and polygon inputs.
## | | | 0% | |=== | 5% | |======= | 10% | |========== | 14% | |============= | 19% | |================= | 24% | |==================== | 29% | |======================= | 33% | |=========================== | 38% | |============================== | 43% | |================================= | 48% | |===================================== | 52% | |======================================== | 57% | |=========================================== | 62% | |=============================================== | 67% | |================================================== | 71% | |===================================================== | 76% | |========================================================= | 81% | |============================================================ | 86% | |=============================================================== | 90% | |=================================================================== | 95% | |======================================================================| 100%
head(munic$mean_slope)
## [1] 8.924997 6.659601 11.888342 10.255521 4.712492 6.025116
Para mostrar la información sobre el mapa, se crean etiquetas que contienen el nombre del municipio y la pendiente promedio calculada.
labels <- paste(
"Municipio:", munic$NAME_2,
"<br>",
"Pendiente media:", round(munic$mean_slope, 2),
"°"
)
Estas etiquetas serán utilizadas posteriormente para identificar cada municipio dentro de la visualización interactiva.
Se genera un mapa interactivo utilizando la pendiente expresada en grados (slope) y la capa de municipios como referencia espacial.
pal_slope_deg <- colorNumeric(
c("darkseagreen3", "yellow2", "orange", "brown2", "darkred"),
values(slope),
na.color = "transparent"
)
leaflet(munic) %>%
addTiles() %>%
setView(-77.0, 5.5, 7) %>%
addPolygons(
color = "gray",
weight = 1,
smoothFactor = 0.5,
opacity = 0.4,
fillOpacity = 0.10,
popup = paste(
"Municipio: ", munic$NAME_2, "<br>",
"Slope class: ", munic$class, "<br>",
"Mean slope: ", round(munic$mean_slope, 2), "°"
),
label = paste(
munic$NAME_2,
"<br>",
"Pendiente media: ",
round(munic$mean_slope, 2),
"°"
)
) %>%
addRasterImage(
slope,
colors = pal_slope_deg,
opacity = 0.8
) %>%
addLegend(
pal = pal_slope_deg,
values = values(slope),
title = "Pendiente del terreno (°)"
)
La visualización obtenida permite observar la variación espacial de la pendiente del terreno en grados. Las etiquetas muestran la pendiente promedio de cada municipio, permitiendo relacionar las características del relieve con la distribución territorial del departamento.
La orientación del terreno (aspect) representa la
dirección hacia la cual está inclinada una superficie del terreno. Esta
variable se expresa en grados azimutales, donde los valores indican
direcciones entre 0° y 360°.
La representación cartográfica de esta variable permite identificar la distribución espacial de las diferentes orientaciones del relieve dentro del área de estudio. Esta información puede ser útil en análisis agrícolas debido a su relación con factores como la radiación solar recibida, la humedad del suelo y las condiciones microclimáticas del terreno.
Para visualizar la orientación del terreno se utilizará una escala de colores que permita diferenciar las diferentes direcciones del relieve.
Debido al tamaño del ráster generado, se realiza una reducción de resolución únicamente para facilitar su representación mediante mapas interactivos. Este procedimiento no modifica los valores calculados previamente, solamente permite una visualización más eficiente.
# Transformar orientación del terreno a coordenadas geográficas
(aspect.geo = project(aspect, "EPSG:4326"))
## class : SpatRaster
## size : 3441, 1736, 1 (nrow, ncol, nlyr)
## resolution : 0.001366274, 0.001366274 (x, y)
## extent : -78.36174, -75.98989, 3.981535, 8.682884 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## source(s) : memory
## name : aspect
## min value : 0.329967
## max value : 359.724945
# Reducir resolución del ráster para visualización
aspect_view <- terra::aggregate(
aspect.geo,
fact = 2,
fun = "mean"
)
## |---------|---------|---------|---------|=========================================
aspect_view
## class : SpatRaster
## size : 1721, 868, 1 (nrow, ncol, nlyr)
## resolution : 0.002732548, 0.002732548 (x, y)
## extent : -78.36174, -75.98989, 3.980169, 8.682884 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## source(s) : memory
## name : aspect
## min value : 3.75221
## max value : 357.09465
Se define una escala de colores para representar las diferentes orientaciones del terreno. Debido a que esta variable representa direcciones, la escala permite diferenciar visualmente los cambios entre los valores de orientación.
pal_aspect <- colorNumeric(
palette = c(
"blue",
"cyan",
"green",
"yellow",
"orange",
"red",
"purple",
"blue"
),
values(aspect_view),
na.color = "transparent"
)
Finalmente, se genera un mapa interactivo utilizando la capa de
orientación obtenida mediante la función SlpAsp(). Se
incluyen los límites municipales como referencia espacial y una leyenda
que permite interpretar los valores representados.
leaflet(munic) %>%
addTiles() %>%
setView(-77.0, 5.5, 7) %>%
addRasterImage(
aspect_view,
colors = pal_aspect,
opacity = 0.8
) %>%
addPolygons(
color = "gray",
weight = 1,
fillOpacity = 0,
popup = paste(
"Municipio:",
munic$NAME_2
)
) %>%
addLegend(
pal = pal_aspect,
values = values(aspect_view),
title = "Orientación del terreno (°)"
)
El resultado corresponde a un mapa donde los colores representan las diferentes direcciones de orientación del terreno. Las variaciones espaciales permiten identificar cambios en la exposición de las superficies y complementar la caracterización geomorfométrica del área de estudio.
Lizarazo, I. (2025). Geomorphometric terrain attributes in
R. RPubs.
https://rpubs.com/ials2un/geomorphometric