Introducción

La geomática es una disciplina clave para la recolección, análisis, gestión y visualización de información geoespacial. En un mundo donde los datos espaciales son fundamentales para la toma de decisiones en áreas como la agricultura y la gestión de recursos naturales, el dominio de herramientas digitales para el manejo de esta información se ha vuelto indispensable.

Este documento tiene como objetivo introducir al lector en la creación de un gráfico de elevacion con funciones del lenguaje de programación R, destacando la facilidad que ofrecen sus herramientas a través de paquetes como sf, elevatr, leaflet y terra. Estos permiten la manipulación de datos y la elaboración de representaciones de elevación precisas, adaptadas a las necesidades del análisis territorial en el ámbito agropecuario.

Objetivos

1-Aplicar funciones en R para el analisis y visualisación de datos raster

-Generar un mapa representativo del Departamento de Casanare con sus respectivos municipios y elevaciones.

Librerias:

son paquetes de funciones, datos y codigos que permiten amplificar las capacidades basicas de R, ayudando asi a su manejo de manera mas practica. En este trabajo se usaron 4 librerias que se pueden ver en la caja de función “r”, se deben llamar para poder acceder a su coleccion de datos de la forma library()..

rm(list=ls())
library(elevatr)
library(sf)
library(leaflet)
library(terra)

Es importante conocer la ruta de los archivos de interés cuando se trabaja en R, especialmente con datos espaciales. Para esto, se puede usar la función list.files(“./”), que permite navegar entre archivos dentro del directorio de trabajo actual. Esta función es práctica y útil para encontrar archivos con exactitud, ya que permite filtrar por nombres o extensiones específicas, como .gpkg o .tif.

list.files("C:/Users/Janus/Desktop/GB2/proyecto3/datos/departamentos/CASANARE")
## [1] "CASANARE.gpkg"         "elev_CASANARE_z10.tif"

sirve para leer un archivo espacial en formato GeoPackage (.gpkg) utilizando la función st_read() del paquete sf, que es ampliamente usado en R para trabajar con datos geográficos. La ruta indica la ubicación exacta del archivo en tu computadora, en este caso, un archivo relacionado con el departamento de Casanare. Al envolver la asignación en paréntesis, se logra que el objeto resultante, llamado munic, se almacene en memoria y al mismo tiempo se muestre automáticamente en la consola. El objeto munic que se genera contiene información espacial (como polígonos, atributos y sistema de coordenadas) que puede representar límites administrativos del departamento o sus municipios. Este tipo de objeto es útil para análisis espaciales, visualización de mapas o cruces con otras capas geográficas.

(munic <- sf::st_read("C:/Users/Janus/Desktop/GB2/proyecto3/datos/departamentos/CASANARE/CASANARE.gpkg"))
## Reading layer `municipios' from data source 
##   `C:\Users\Janus\Desktop\GB2\proyecto3\datos\departamentos\CASANARE\CASANARE.gpkg' 
##   using driver `GPKG'
## Simple feature collection with 19 features and 11 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -73.07777 ymin: 4.287476 xmax: -69.83591 ymax: 6.346111
## Geodetic CRS:  MAGNA-SIRGAS
(CASANARE_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)

Este bloque de código en R calcula el área de cada polígono contenido en el objeto espacial munic, que representa los municipios del departamento de Casanare. Primero, se usa sf::st_area(munic) para obtener el área en metros cuadrados de cada geometría (polígono), y ese resultado se guarda en una nueva columna llamada area_m2.

Luego, esa área se convierte a kilómetros cuadrados dividiendo por 1,000,000, y el resultado se guarda en otra columna llamada area. Para mejorar la presentación de los datos, se utiliza la función signif() para redondear los valores de área a 6 cifras significativas.

munic$area = munic$area_m2/1000000
munic$area = signif(munic$area, digits = 6)
munic

Primero, la función st_centroid(munic) obtiene el punto central (centroide) de cada polígono y lo guarda en un nuevo objeto llamado centers. Este objeto también es de tipo sf y contiene la misma información de atributos que munic, pero con geometrías puntuales en lugar de polígonos.

(centers  <- st_centroid(munic))
## Warning: st_centroid assumes attributes are constant over geometries

Luego, se usan st_coordinates(centers)[,1] y st_coordinates(centers)[,2] para extraer las coordenadas X (longitud) y Y (latitud) de cada centroide. Estas coordenadas se almacenan en nuevas columnas llamadas x e y dentro del objeto centers.

centers$x = st_coordinates(centers)[,1]
centers$y = st_coordinates(centers)[,2]
centers
elevation  <- get_elev_raster(munic, z = 10)
## Mosaicing & Projecting
## Note: Elevation units are in meters.

Mosaicing & Projecting

Note: Elevation units are in meters.

elevation
## class      : RasterLayer 
## dimensions : 3573, 5128, 18322344  (nrow, ncol, ncell)
## resolution : 0.0006856127, 0.0006856127  (x, y)
## extent     : -73.125, -69.60918, 4.214913, 6.664608  (xmin, xmax, ymin, ymax)
## crs        : +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs 
## source     : file570451b32fbd.tif 
## names      : file570451b32fbd

En este código se guarda un objeto raster llamado elevation en un archivo .tif (formato GeoTIFF) en la ubicación especificada. La función writeRaster() proviene del paquete raster o terra y se utiliza para exportar datos raster a disco. En este caso, se está guardando el raster elevation con el nombre elev_CASANARE_z10.tif en la carpeta correspondiente al departamento de Casanare. El argumento overwrite=TRUE permite que el archivo sea sobrescrito si ya existe uno con el mismo nombre.

writeRaster(elevation, "C:/Users/Janus/Desktop/GB2/proyecto3/datos/departamentos/CASANARE/elev_CASANARE_z10.tif", overwrite=TRUE)

Convierte el objeto elevation (que puede ser una ruta a un archivo o un raster cargado con otro paquete como raster) a un objeto de clase SpatRaster del paquete terra.

(elevation2 <- terra::rast(elevation))
## class       : SpatRaster 
## size        : 3573, 5128, 1  (nrow, ncol, nlyr)
## resolution  : 0.0006856127, 0.0006856127  (x, y)
## extent      : -73.125, -69.60918, 4.214913, 6.664608  (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs 
## source      : file570451b32fbd.tif 
## name        : file570451b32fbd

Crea una paleta de colores numérica para representar la elevación en un mapa. Se define una gradiente de colores que va desde “cyan (valores bajos) hasta “brown” (valores altos), usando los valores del raster elevation. La opción na.color = “transparent” asegura que los valores faltantes no se dibujen.

pal <- colorNumeric(c("cyan", "forestgreen","yellow","tan","orange", "brown"), values(elevation),
  na.color = "transparent")

Realiza una reducción de resolución espacial del raster. La función aggregate() agrupa celdas en bloques de tamaño 2x2 (por el parámetro fact = 2) y calcula su promedio, lo que suaviza el raster y reduce su tamaño, facilitando el procesamiento y la visualización.

(elevation3 <- terra::aggregate(elevation2, fact = 2))
## |---------|---------|---------|---------|=========================================                                          
## class       : SpatRaster 
## size        : 1787, 2564, 1  (nrow, ncol, nlyr)
## resolution  : 0.001371225, 0.001371225  (x, y)
## extent      : -73.125, -69.60918, 4.214228, 6.664608  (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs 
## source(s)   : memory
## name        : file570451b32fbd 
## min value   :          -234.75 
## max value   :          5312.25

recorta el raster elevation3 usando como límite la geometría de munic. El argumento mask = TRUE hace que las celdas fuera del área de interés (el polígono de Casanare o sus municipios) se establezcan como NA, es decir, se oculten, dejando solo la zona relevante visible.

elevation4 <- terra::crop(elevation3, munic, mask=TRUE)

Este código en R crea un mapa interactivo con Leaflet centrado en Casanare. Muestra los municipios con sus nombres y áreas, superpone una capa de elevación con colores que indican la altitud, y añade una leyenda explicativa. Usa los polígonos (munic), los centroides (centers) y el raster de elevación recortado (elevation4) para combinar información geográfica y altitudinal en una visualización clara y útil.

leaflet(munic) %>% addTiles() %>% setView(-72.4, 5.3, 9) %>% 
    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 = "Elevation data for CASANARE (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'

Bibliografia

Si reutiliza el código de este cuaderno, cite este trabajo como: Diaz, J., 2025. Elevation data processing and analysis in R.

sessionInfo()
## R version 4.5.0 (2025-04-11 ucrt)
## Platform: x86_64-w64-mingw32/x64
## Running under: Windows 10 x64 (build 19045)
## 
## Matrix products: default
##   LAPACK version 3.12.1
## 
## 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-21      elevatr_0.99.0
## 
## loaded via a namespace (and not attached):
##  [1] s2_1.1.8           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.5.0         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.5.0        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.5.0     prettyunits_1.2.0  sp_2.2-0

Add a new chunk by clicking the Insert Chunk button on the toolbar or by pressing Ctrl+Alt+I.

When you save the notebook, an HTML file containing the code and output will be saved alongside it (click the Preview button or press Ctrl+Shift+K to preview the HTML file).

The preview shows you a rendered HTML copy of the contents of the editor. Consequently, unlike Knit, Preview does not run any R code chunks. Instead, the output of the chunk when it was last run in the editor is displayed.