En este cuaderno se plantea un ejercicio de proceso y analisis de datos de elevación en R, por medio del cual se busca elaborar un mapa interactivo del dapartamento del magdalena donde se evidencie sus diferentes niveles de altura respecto al nivel del mar. Este notebook se va a dearrollar con la ayuda de las librerias sf, elevatr, leaflet y terra, que van a ayudar a procesar los datos para la ejecución de esta tarea.
Para poder procesar los datos se deben descargar las librerias, luego de eso se deben “llamar” para poder usar sus funciones.
library(elevatr)
library(sf)
library(leaflet)
library(terra)
El paquete elevatr
en R permite obtener modelos
digitales de elevación (DEMs) directamente desde servicios web públicos
utilizando datos espaciales como puntos, líneas o polígonos. Es
especialmente útil para análisis topográficos y visualización de
terreno, ya que permite descargar elevación tanto para ubicaciones
puntuales (get_elev_point
) como para áreas completas en
formato ráster (get_elev_raster
). Funciona en conjunto con
paquetes como sf
(para datos vectoriales),
terra
(para rásteres) y leaflet
(para mapas
interactivos). Desde su versión más reciente, elevatr
ha
migrado completamente a sf
y terra
, dejando de
lado paquetes más antiguos como sp
y raster
,
lo que lo hace más moderno y eficiente para análisis geoespacial en
R.
Para empezar, ubicamos nuestro directorio de trabajo y miramos los archivos que necesitamos y estan disponibles en el mediante el comando list.files.
list.files("C:\\Users\\brand\\OneDrive\\Escritorio\\GB2\\P5\\MAGDALENA")
## [1] "elv_magda_z10.tif" "magdalena.gpkg"
Una vez revisamos que esta nuestro archivo geopackage que vamos a necesitar para la elaboración del raster, leemos el contenido del archivo por medio de la función st_read de la libreria sf.
(munic <- sf::st_read("C:\\Users\\brand\\OneDrive\\Escritorio\\GB2\\P5\\MAGDALENA\\magdalena.gpkg"))
## Reading layer `magdalena' from data source
## `C:\Users\brand\OneDrive\Escritorio\GB2\P5\MAGDALENA\magdalena.gpkg'
## using driver `GPKG'
## Simple feature collection with 30 features and 11 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: -74.9466 ymin: 8.936489 xmax: -73.54184 ymax: 11.34891
## Geodetic CRS: MAGNA-SIRGAS
Se puede observar que el geopackage tiene un total de 30 elementos que en este caso son los diferentes municipios que consforman al departamento del magdalena. Luego de esto ubicamos la columna mpio_cnmbr y calculamos el area del municipio por medio de la siguientes funciones.
(magdln_crs <- st_crs(st_geometry(munic)))
## Coordinate Reference System:
## User input: MAGNA-SIRGAS
## wkt:
## GEOGCRS["MAGNA-SIRGAS",
## DATUM["Marco Geocentrico Nacional de Referencia",
## ELLIPSOID["GRS 1980",6378137,298.257222101,
## LENGTHUNIT["metre",1]]],
## PRIMEM["Greenwich",0,
## ANGLEUNIT["degree",0.0174532925199433]],
## CS[ellipsoidal,2],
## AXIS["geodetic latitude (Lat)",north,
## ORDER[1],
## ANGLEUNIT["degree",0.0174532925199433]],
## AXIS["geodetic longitude (Lon)",east,
## ORDER[2],
## ANGLEUNIT["degree",0.0174532925199433]],
## USAGE[
## SCOPE["Horizontal component of 3D system."],
## AREA["Colombia - onshore and offshore. Includes San Andres y Providencia, Malpelo Islands, Roncador Bank, Serrana Bank and Serranilla Bank."],
## BBOX[-4.23,-84.77,15.51,-66.87]],
## ID["EPSG",4686]]
munic$area_m2 = sf::st_area(munic)
munic$area = munic$area_m2/1000000
munic$area = signif(munic$area, digits = 6)
Una vez calulada el area de los muncipios de calculan sus centroides por medio de las siguientes funciones.
(centers <- st_centroid(munic))
## Warning: st_centroid assumes attributes are constant over geometries
centers$x = st_coordinates(centers)[,1]
centers$y = st_coordinates(centers)[,2]
centers
Para obtener datos de elevación en R, se utiliza la función get_elev_raster() del paquete elevatr, la cual permite descargar un modelo digital de elevación (DEM) para el área definida por un objeto espacial, como un polígono de municipios. Esta función se integra con objetos del paquete sf y permite ajustar la resolución del DEM mediante el parámetro z (nivel de zoom, donde valores más altos significan mayor detalle).
elevation <- get_elev_raster(munic, z=10)
## Mosaicing & Projecting
## Note: Elevation units are in meters.
res(elevation)
## [1] 0.0006789017 0.0006789017
res_metros <- res(elevation) * 111320
res_metros
## [1] 75.57534 75.57534
elevation
## class : RasterLayer
## dimensions : 4078, 2589, 10557942 (nrow, ncol, ncell)
## resolution : 0.0006789017, 0.0006789017 (x, y)
## extent : -75.23438, -73.4767, 8.754526, 11.52309 (xmin, xmax, ymin, ymax)
## crs : +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs
## source : file72b43ad51d46.tif
## names : file72b43ad51d46
writeRaster(elevation, "C:/Users/brand/OneDrive/Escritorio/GB2/P5/MAGDALENA/elv_magda_z10.tif", overwrite = TRUE)
(elevation2 <- terra::rast(elevation))
## class : SpatRaster
## size : 4078, 2589, 1 (nrow, ncol, nlyr)
## resolution : 0.0006789017, 0.0006789017 (x, y)
## extent : -75.23438, -73.4767, 8.754526, 11.52309 (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs
## source : file72b43ad51d46.tif
## name : file72b43ad51d46
pal <- colorNumeric(c("cyan", "forestgreen", "yellow", "tan", "orange", "brown"), values(elevation), na.color = "transparent")
(elevation3 <- terra::aggregate(elevation2, fact = 2))
## |---------|---------|---------|---------|=========================================
## class : SpatRaster
## size : 2039, 1295, 1 (nrow, ncol, nlyr)
## resolution : 0.001357803, 0.001357803 (x, y)
## extent : -75.23438, -73.47602, 8.754526, 11.52309 (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs
## source(s) : memory
## name : file72b43ad51d46
## min value : -2437.50
## max value : 5659.25
elevation4 <- terra::crop(elevation3, munic, mask = TRUE)
leaflet(munic) %>%
addTiles() %>%
setView(-74.5, 9.5, 11) %>%
addPolygons(color = "white", weight = 1.0, smoothFactor = 0.5,
opacity = 0.25, fillOpacity = 0.15,
popup = paste("Municipio: ", munic$mpio_cnmbr, "<br>", "km2: ", munic$area, "<br>")) %>%
addLabelOnlyMarkers(data = centers,
lng = ~x, lat = ~y, label = ~mpio_cnmbr,
labelOptions = labelOptions(noHide = TRUE, direction = 'top', textOnly = TRUE, textsize = "10px")) %>%
addRasterImage(elevation4, colors = pal, opacity = 0.9) %>%
addLegend(pal = pal, values = values(elevation),
title = "Datos de elevacion para Magdalena (mts)")
## 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'
[1] Lizarazo, I., 2025. Elevation data processing and analysis in R. Available at https://rpubs.com/ials2un/otro_dem
sessionInfo()
## R version 4.4.3 (2025-02-28 ucrt)
## Platform: x86_64-w64-mingw32/x64
## Running under: Windows 11 x64 (build 26100)
##
## Matrix products: default
##
##
## locale:
## [1] LC_COLLATE=Spanish_Colombia.utf8 LC_CTYPE=Spanish_Colombia.utf8
## [3] LC_MONETARY=Spanish_Colombia.utf8 LC_NUMERIC=C
## [5] LC_TIME=Spanish_Colombia.utf8
##
## time zone: America/Bogota
## tzcode source: internal
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] terra_1.8-54 leaflet_2.2.2 sf_1.0-20 elevatr_0.99.0
##
## loaded via a namespace (and not attached):
## [1] s2_1.1.7 sass_0.4.10 class_7.3-23 KernSmooth_2.23-26
## [5] lattice_0.22-6 hms_1.1.3 digest_0.6.37 magrittr_2.0.3
## [9] RColorBrewer_1.1-3 evaluate_1.0.3 grid_4.4.3 fastmap_1.2.0
## [13] jsonlite_2.0.0 progress_1.2.3 e1071_1.7-16 DBI_1.2.3
## [17] httr_1.4.7 purrr_1.0.4 crosstalk_1.2.1 scales_1.4.0
## [21] slippymath_0.3.1 codetools_0.2-20 jquerylib_0.1.4 cli_3.6.5
## [25] rlang_1.1.6 crayon_1.5.3 units_0.8-7 cachem_1.1.0
## [29] yaml_2.3.10 tools_4.4.3 raster_3.6-32 curl_6.2.2
## [33] mime_0.13 png_0.1-8 vctrs_0.6.5 R6_2.6.1
## [37] proxy_0.4-27 lifecycle_1.0.4 classInt_0.4-11 htmlwidgets_1.6.4
## [41] pkgconfig_2.0.3 progressr_0.15.1 bslib_0.9.0 glue_1.8.0
## [45] Rcpp_1.0.14 xfun_0.52 rstudioapi_0.17.1 knitr_1.50
## [49] farver_2.1.2 htmltools_0.5.8.1 rmarkdown_2.29 wk_0.9.4
## [53] compiler_4.4.3 prettyunits_1.2.0 sp_2.2-0