El estudio de los atributos geomorfométricos es fundamental para comprender la estructura del relieve y su influencia en los procesos naturales y antrópicos de un territorio. En este trabajo, se analiza la morfología del departamento de Magdalena, Colombia, a partir de variables como la pendiente del terreno, la orientación de las laderas, la altitud y la rugosidad. Estos atributos permiten evaluar la dinámica del paisaje y su relación con factores como la erosión, el drenaje, la estabilidad del suelo y el uso del territorio.
El departamento de Magdalena presenta una diversidad topográfica que abarca desde llanuras costeras y valles fluviales hasta las montañas de la Sierra Nevada de Santa Marta, la formación montañosa litoral más alta del mundo. Esta variabilidad geomorfológica influye directamente en las actividades humanas, la disponibilidad de recursos naturales y los riesgos ambientales, como deslizamientos de tierra o inundaciones.
library(terra)
library(sf)
library(leaflet)
library(elevatr)
library(exactextractr)
library(MultiscaleDTM)
list.files("./Magdalena")
## [1] "areas agua_Magdalena.gpkg" "Ciudade_ Magdalena.gpkg"
## [3] "Departamento_,Magdalena.gpkg" "desktop.ini"
## [5] "Elevacion_Magdalena.tif" "Municipio 2.qgz"
## [7] "Municipios.gpkg" "rios_Magdalena.gpkg"
## [9] "Vias_Magdalena.gpkg"
(dem = terra::rast("Magdalena/Elevacion_Magdalena.tif"))
## class : SpatRaster
## dimensions : 288, 167, 1 (nrow, ncol, nlyr)
## resolution : 0.008333333, 0.008333333 (x, y)
## extent : -74.94167, -73.55, 8.941667, 11.34167 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## source : Elevacion_Magdalena.tif
## name : Elevacion_Magdalena
file.exists("Magdalena/Elevacion_Magdalena.tif")
## [1] TRUE
list.files("Magdalena", pattern = ".tif$")
## [1] "Elevacion_Magdalena.tif"
(dem = terra::rast("Magdalena/Elevacion_Magdalena.tif"))
## class : SpatRaster
## dimensions : 288, 167, 1 (nrow, ncol, nlyr)
## resolution : 0.008333333, 0.008333333 (x, y)
## extent : -74.94167, -73.55, 8.941667, 11.34167 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## source : Elevacion_Magdalena.tif
## name : Elevacion_Magdalena
dem2 = terra::aggregate(dem,2, "mean")
munic <- sf::st_read("Magdalena/Municipios.gpkg")
## Reading layer `mgn_adm_mpio_grafico' from data source
## `C:\Users\Usuario\Documents\Magdalena\Magdalena\Municipios.gpkg'
## using driver `GPKG'
## Simple feature collection with 30 features and 11 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -74.9466 ymin: 8.936489 xmax: -73.54184 ymax: 11.34891
## Geodetic CRS: MAGNA-SIRGAS
munic
dem3 = terra::crop(dem2,munic, mask= TRUE)
(dem_plane = project(dem3, "EPSG:9377"))
## class : SpatRaster
## dimensions : 145, 84, 1 (nrow, ncol, nlyr)
## resolution : 1838.146, 1838.146 (x, y)
## extent : 4786596, 4941000, 2545481, 2812012 (xmin, xmax, ymin, ymax)
## coord. ref. : MAGNA-SIRGAS 2018 / Origen-Nacional (EPSG:9377)
## source(s) : memory
## name : Elevacion_Magdalena
## min value : -2.111935
## max value : 5118.214844
(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
))
## class : SpatRaster
## dimensions : 145, 84, 2 (nrow, ncol, nlyr)
## resolution : 1838.146, 1838.146 (x, y)
## extent : 4786596, 4941000, 2545481, 2812012 (xmin, xmax, ymin, ymax)
## coord. ref. : MAGNA-SIRGAS 2018 / Origen-Nacional (EPSG:9377)
## source(s) : memory
## names : slope, aspect
## min values : 0.000649681, 0.07013055
## max values : 20.863283237, 359.95276166
(slope = subset(Slp_asp, 1))
## class : SpatRaster
## dimensions : 145, 84, 1 (nrow, ncol, nlyr)
## resolution : 1838.146, 1838.146 (x, y)
## extent : 4786596, 4941000, 2545481, 2812012 (xmin, xmax, ymin, ymax)
## coord. ref. : MAGNA-SIRGAS 2018 / Origen-Nacional (EPSG:9377)
## source(s) : memory
## name : slope
## min value : 0.000649681
## max value : 20.863283237
terra::hist(slope,
main = "Magdalena's slope",
xlab = "Slope (in degrees)")
La gráfica sugiere que el área del Magdalena tiene una topografía mayormente plana, con una gran concentración de áreas sin pendiente o con pendiente muy baja.Las áreas con pendinte pronunciada (10 grados o más) son muy escasas en comparación con las áreas planas.La frecuencia disminuye drásticamente a medida que aumenta la pendiente. Hay una barra pequeña en 5 grados, y luego barras muy pequeñas o casi nulas en 10,15 y 20 grados.
(aspect = subset(Slp_asp, 2))
## class : SpatRaster
## dimensions : 145, 84, 1 (nrow, ncol, nlyr)
## resolution : 1838.146, 1838.146 (x, y)
## extent : 4786596, 4941000, 2545481, 2812012 (xmin, xmax, ymin, ymax)
## coord. ref. : MAGNA-SIRGAS 2018 / Origen-Nacional (EPSG:9377)
## source(s) : memory
## name : aspect
## min value : 0.07013055
## max value : 359.95276166
terra::hist(aspect,
main = "Magdalena's aspect",
xlab = "Aspect (in degrees)")
A diferencia del histograma de pendiente que vimos antes, aquí no hay un pico dominante en una sola direción. Los valores de aspecto parecen estar distribuidos de manera más uniforme en todo el rango de 0 a 360 grados. Se observa que las orientaciones cercanas a 300 grados (probablemente Noroeste) y alrededor de 150 grados (probablemente Sureste) presentan una frecuencia algo mayor en comparación con otras orientaciones. La gráfica sugiere que el área de Magdalena tiene una topografía variada en términos de orientación de laderas. No hay una dirección de pendiente predominante, las variaciones en la frecuencia de aspecto podrían estar relacionadas con factores geológicois subyacentes, patrones de drenaje, o procesos geomorfológicos que influyen en la orientación de las pendientes.
(slope_perc = tan(slope*(pi/180))*100)
## class : SpatRaster
## dimensions : 145, 84, 1 (nrow, ncol, nlyr)
## resolution : 1838.146, 1838.146 (x, y)
## extent : 4786596, 4941000, 2545481, 2812012 (xmin, xmax, ymin, ymax)
## coord. ref. : MAGNA-SIRGAS 2018 / Origen-Nacional (EPSG:9377)
## source(s) : memory
## name : slope
## min value : 0.001133907
## max value : 38.112877343
terra::hist(slope_perc,
main = "Magdalena's slope",
xlab = "Slope (in percentage)")
Al igual que el primer gráfico observamos que hay una barra muy alta en el valor de 0% de pendiente, lo que indica una gran cantidad de observaciones que tienen una pendiente plana o casi plana, la frecuencia disminuye drásticamente a medida que aumenta la pendiente. Hay una barra pequeña en 10%, y luego barras muy pequeñas o casi nulas en 20%, 30% y 40%. ESto sugiere que en porcentajes las áreas con pendientes pronunciadas en un 10% son muy escasas en comparación con las áreas planas.
# Reclassify the slope raster
#rc <- classify(slope_perc, c(0, 3, 7, 12, 25,50, 75), include.lowest=TRUE, brackets=TRUE)
m <- c(0, 3, 1,
3, 7, 2,
7, 12, 3,
12, 25, 4,
25, 50, 5,
50, 75, 6,
75, 160, 7)
m <- matrix(m, ncol=3, byrow = TRUE)
rc <- classify(slope_perc, m, right=TRUE)
(munic$mean_slope <- exactextractr::exact_extract(slope_perc, munic, 'mean'))
## Warning in .local(x, y, ...): Polygons transformed to raster CRS (EPSG:9377)
## | | | 0% | |== | 3% | |===== | 7% | |======= | 10% | |========= | 13% | |============ | 17% | |============== | 20% | |================ | 23% | |=================== | 27% | |===================== | 30% | |======================= | 33% | |========================== | 37% | |============================ | 40% | |============================== | 43% | |================================= | 47% | |=================================== | 50% | |===================================== | 53% | |======================================== | 57% | |========================================== | 60% | |============================================ | 63% | |=============================================== | 67% | |================================================= | 70% | |=================================================== | 73% | |====================================================== | 77% | |======================================================== | 80% | |========================================================== | 83% | |============================================================= | 87% | |=============================================================== | 90% | |================================================================= | 93% | |==================================================================== | 97% | |======================================================================| 100%
## [1] 12.18419075 0.59341717 10.75732327 0.44351983 0.26024601 0.47067186
## [7] 11.30103397 0.56011647 0.15752500 0.23025484 0.12496804 6.69618130
## [13] 0.21287453 0.37427807 0.65742737 0.33046779 0.33909833 0.48600122
## [19] 0.05991789 0.03815088 0.51801616 0.02593536 0.28408521 0.23448147
## [25] 0.28369826 0.53491241 0.04261311 0.76544219 0.43785128 1.66425514
hist(munic$mean_slope,
main = "Magdalena's mean slope",
xlab = "Slope (in percentage)")
(munic$class <- exactextractr::exact_extract(rc, munic, 'mode'))
## Warning in .local(x, y, ...): Polygons transformed to raster CRS (EPSG:9377)
## | | | 0% | |== | 3% | |===== | 7% | |======= | 10% | |========= | 13% | |============ | 17% | |============== | 20% | |================ | 23% | |=================== | 27% | |===================== | 30% | |======================= | 33% | |========================== | 37% | |============================ | 40% | |============================== | 43% | |================================= | 47% | |=================================== | 50% | |===================================== | 53% | |======================================== | 57% | |========================================== | 60% | |============================================ | 63% | |=============================================== | 67% | |================================================= | 70% | |=================================================== | 73% | |====================================================== | 77% | |======================================================== | 80% | |========================================================== | 83% | |============================================================= | 87% | |=============================================================== | 90% | |================================================================= | 93% | |==================================================================== | 97% | |======================================================================| 100%
## [1] 4 1 4 1 1 1 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
hist(munic$class,
main = "Magdalena's reclassified slope",
xlab = "Slope (as a category)")
Muestra los valores de pendiente que han sido agrupados en categorías.Tenemos las categorías 1.0, 1.5, 2.0, 2.5, 3.0, 3.5 y 4.0. Estas categorías represenatan los rangos de la pendiente (por ejemplo, 1.0 podría ser de 0 a 1%, 1.5 de 1 a 2%, y asi sucesivamente). En el eje y (la frecuencia) indica la cantidad de veces que se observa cada categoría de pendiente. Se proporcionan marcas de frecuencia en 5, 10, 15, 20 y 25. Se observa la barra más alta en la categoría 1.0 lo que corresponde a una pendiente plana o probablemente la más baja.
# This is the reclassified slope
(rc.geo = project(rc, "EPSG:4326"))
## class : SpatRaster
## dimensions : 145, 85, 1 (nrow, ncol, nlyr)
## resolution : 0.01666726, 0.01666726 (x, y)
## extent : -74.95618, -73.53946, 8.930806, 11.34756 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## source(s) : memory
## name : slope
## min value : 1
## max value : 5
# This is the percentage slope
(slope.geo = project(slope_perc, "EPSG:4326"))
## class : SpatRaster
## dimensions : 145, 85, 1 (nrow, ncol, nlyr)
## resolution : 0.01666726, 0.01666726 (x, y)
## extent : -74.95618, -73.53946, 8.930806, 11.34756 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## source(s) : memory
## name : slope
## min value : 0.003477162
## max value : 37.887233734
###Trazado De Pendiente Del Terreno
# expand the number of colors to improve your visualization
# https://r-graph-gallery.com/42-colors-names.html
palredgreen <- colorNumeric(c("darkseagreen3","yellow2", "orange", "brown2", "darkred"), values(slope.geo),
na.color = "transparent")
leaflet(munic) %>% addTiles() %>% setView(-74.5, 10.5, 8) %>%
addPolygons(color = "gray", weight = 1.0, smoothFactor = 0.5,
opacity = 0.4, fillOpacity = 0.10,
popup = paste("Municipio: ", munic$mpio_cnmbr, "<br>",
"Slope class: ", munic$class, "<br>")) %>%
addRasterImage(slope.geo, colors = palredgreen, opacity = 0.8) %>%
addLegend(pal = palredgreen, values = values(slope.geo),
title = "Terrain slope in Magdalena (%)")
El mapa generado proporciona una representacion geoespacial de la pendiente del terreno en el departamento de Magdalena. A través de estaa visualización, es posible identificar variaciones en la inclinación del terreno mediante el uso de colores que representan diferentes clases de pendiente. El departamento del Magdalena presenta una diversidad en su topografía que se refleja en el mapa de pendientes. A partir de la visualización, podemos identificar lo suguiente:
Regiones de baja pendiente (Amarillo): Se concentran principalmente en zonas costeras y valles fluviales, son áreas favorables para actividades agrícolas, urbanización y desarrollo de infraestructura debido a su relativa estabilidad y facilidad de acceso. Municipios cercanos al río Magdalena o la costa caribeña tienden a presentar menores inclinaciones
Regiones con pendiente moderada a alta (Naranja): Se ubican en zonas de transición entre áreas planas y montañosas. Estas áreas pueden ser más vulnerables a procesos de erosión si no se manejan adecuadamente
Regiones de alta pendiente (Rojo): Se localizan principalmente en la Sierra Nevada de Santa Marta, al sureste del departamento.Son zonas montañosas con inclinaciones fuertes que pueden representar riesgos geológicos, como deslizamientos de tierra, especialmente en épocas de lluvias intensas.
library(leaflet)
library(raster)
# Verifica que 'slope.geo' sea un objeto RasterLayer
if (!inherits(slope.geo, "RasterLayer")) {
slope.geo <- raster(slope.geo) # Convierte a RasterLayer si es necesario
}
# Definir paleta de colores con valores del raster
palredgreen <- colorNumeric(palette = c("red", "green"), domain = values(slope.geo), na.color = "transparent")
# Mapa con Leaflet
leaflet(munic) %>%
addTiles() %>%
setView(lng = -74.5, lat = 10.5, zoom = 8) %>%
addPolygons(color = "gray", weight = 1.0, smoothFactor = 0.5,
opacity = 0.4, fillOpacity = 0.10,
popup = ~paste("Municipio: ", mpio_cnmbr, "<br>",
"Slope class: ", class, "<br>")) %>%
addRasterImage(slope.geo, colors = palredgreen, opacity = 0.8) %>%
addLegend(pal = palredgreen, values = values(slope.geo),
title = "Terrain slope in Magdalena (%)")