Este cuaderno presenta el uso de la librería sf en R para el manejo y análisis de datos espaciales bajo el estándar de Simple Features.
A lo largo del documento se desarrolla un flujo de trabajo paso a paso que incluye la carga de datos, exploración, transformación de sistemas de referencia y operaciones espaciales básicas.
El objetivo es comprender de forma sencilla cómo se representan y manipulan objetos espaciales en R, aplicando funciones fundamentales del paquete sf.
Este cuaderno debe ubicarse en el directorio del proyecto de trabajo, preferiblemente en la misma carpeta donde se encuentran los datos espaciales.
En esta sección se cargan las librerías necesarias para el análisis de datos espaciales en R.
La librería sf (Simple Features) permite el manejo de datos espaciales vectoriales bajo un estándar moderno.
Se integra con bibliotecas como GDAL, GEOS y PROJ para la lectura, análisis geométrico y transformación de sistemas de coordenadas.
La librería dplyr facilita la manipulación de datos mediante funciones como:
mutate(): crea nuevas variablesselect(): selecciona columnasfilter(): filtra registrossummarise(): resume informaciónarrange(): ordena datosLa librería ggplot2 permite la creación de gráficos bajo el principio de la “Gramática de los gráficos”, donde los datos se representan mediante capas.
La librería ggspatial amplía ggplot2 incorporando herramientas específicas para la visualización de datos espaciales en mapas.
Si las librerías no están instaladas, se pueden instalar con la
función install.packages() desde la consola de R.
# install.packages("sf")
# install.packages("dplyr")
# install.packages("ggplot2")
# install.packages("ggspatial")
La función library() permite cargar los paquetes
instalados al entorno de trabajo, activando todas sus funciones para su
uso durante el análisis.
library(sf)
library(dplyr)
library(ggplot2)
library(ggspatial)
st_read()La función st_read() del paquete sf permite
leer datos espaciales vectoriales en diferentes formatos soportados por
GDAL, como Shapefile, GeoJSON y GeoPackage.
Esta función convierte automáticamente los datos en un objeto de tipo sf, el cual contiene tanto la geometría como los atributos asociados.
list.files("D:/Geomatica Basica (Gr 2)/GB2/Proyecto2/datos")
## [1] "Choco" "Chocó.gpkg"
## [3] "choco_buffer.gpkg" "choco_ciudades.gpkg"
## [5] "choco_curvas_nivel.cpg" "choco_curvas_nivel.dbf"
## [7] "choco_curvas_nivel.prj" "choco_curvas_nivel.shp"
## [9] "choco_curvas_nivel.shx" "choco_elevacion.tif"
## [11] "choco_elevacion.tif.aux.xml" "choco_municipios.gpkg"
## [13] "choco_municipios_MAGMA.gpkg" "choco_municipios_UTM18N.gpkg"
## [15] "choco_rangos_elevacion.cpg" "choco_rangos_elevacion.dbf"
## [17] "choco_rangos_elevacion.prj" "choco_rangos_elevacion.shp"
## [19] "choco_rangos_elevacion.shx" "choco_relieve.tif"
## [21] "choco_relieve.tif.aux.xml" "choco_relieve.txt"
## [23] "choco_rios.gpkg" "choco_vias.gpkg"
## [25] "Ciudades de Colombia.gpkg" "Ciudades de Santander.gpkg"
## [27] "Ciudades del mundo" "COL_adm"
## [29] "COL_adm2.cpg" "COL_adm2.csv"
## [31] "COL_adm2.dbf" "COL_adm2.prj"
## [33] "COL_adm2.shp" "COL_adm2.shx"
## [35] "COL_alt_tif" "COL_msk_alt_tif"
## [37] "COL_msk_cov_tif" "COL_rds"
## [39] "COL_wat" "Colombia"
## [41] "Santander" "Tierra"
La función list.files() permite visualizar los archivos
contenidos en una carpeta, facilitando la identificación de los
componentes de un shapefile.
colombia <- st_read("D:/Geomatica Basica (Gr 2)/GB2/Proyecto2/datos/COL_adm2.shp")
## Reading layer `COL_adm2' from data source
## `D:\Geomatica Basica (Gr 2)\GB2\Proyecto2\datos\COL_adm2.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 1065 features and 11 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -81.84153 ymin: -4.228429 xmax: -66.87033 ymax: 15.91247
## Geodetic CRS: WGS 84
Al leer el archivo espacial con st_read(), R muestra
automáticamente un resumen del dataset importado. En este caso, el
archivo fue cargado usando el driver ESRI Shapefile, uno de los
formatos más comunes para datos espaciales vectoriales.
El conjunto de datos contiene 1065 entidades espaciales (features) y 11 variables o atributos asociados a cada unidad geográfica.
La geometría es de tipo MULTIPOLYGON, lo que indica que cada entidad puede estar formada por uno o varios polígonos, como ocurre en divisiones administrativas. Además, el bounding box muestra la extensión espacial del dataset, confirmando que cubre todo el territorio de Colombia.
Finalmente, el sistema de referencia de coordenadas (CRS) es WGS 84, un sistema global basado en coordenadas de latitud y longitud.
head(colombia)
## Simple feature collection with 6 features and 11 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -74.38985 ymin: -4.228429 xmax: -69.36835 ymax: 0.1312
## Geodetic CRS: WGS 84
## ID_0 ISO NAME_0 ID_1 NAME_1 ID_2 NAME_2 TYPE_2
## 1 53 COL Colombia 1 Amazonas 1 El Encanto Corregimiento Departamento
## 2 53 COL Colombia 1 Amazonas 2 La Chorrera Corregimiento Departamento
## 3 53 COL Colombia 1 Amazonas 3 La Pedrera Corregimiento Departamento
## 4 53 COL Colombia 1 Amazonas 4 Leticia Municipio
## 5 53 COL Colombia 1 Amazonas 5 Mirití-Paraná Corregimiento Departamento
## 6 53 COL Colombia 1 Amazonas 6 Puerto Nariño Municipio
## ENGTYPE_2 NL_NAME_2 VARNAME_2
## 1 Corregimiento Departamento <NA> <NA>
## 2 Corregimiento Departamento <NA> <NA>
## 3 Corregimiento Departamento <NA> <NA>
## 4 Municipality <NA> <NA>
## 5 Corregimiento Departamento <NA> Miriti Parana
## 6 Municipality <NA> <NA>
## geometry
## 1 MULTIPOLYGON (((-73.23018 -...
## 2 MULTIPOLYGON (((-71.9802 -1...
## 3 MULTIPOLYGON (((-72.61586 -...
## 4 MULTIPOLYGON (((-70.0579 -4...
## 5 MULTIPOLYGON (((-70.2188 -0...
## 6 MULTIPOLYGON (((-70.28952 -...
La función head() permite visualizar las primeras filas
del objeto espacial, incluyendo atributos y geometría.
st_write()La función st_write() del paquete sf permite
exportar objetos espaciales a diferentes formatos, como GeoPackage
(.gpkg), Shapefile o GeoJSON.
Al guardar un archivo, se puede especificar el formato mediante la extensión o utilizando el driver correspondiente de GDAL. Esto facilita la interoperabilidad entre distintos programas de análisis espacial.
El argumento append = FALSE se utiliza para sobrescribir
un archivo existente con el mismo nombre en el directorio de trabajo,
evitando conflictos con versiones anteriores.
En el siguiente ejemplo, se exporta el objeto espacial colombia en formato GeoPackage:
st_write(colombia, "municipios.gpkg", driver = "GPKG", append = FALSE)
## Deleting layer `municipios' using driver `GPKG'
## Writing layer `municipios' to data source `municipios.gpkg' using driver `GPKG'
## Writing 1065 features with 11 fields and geometry type Multi Polygon.
Después de la escritura, se puede verificar la creación del archivo en el directorio de trabajo:
list.files(pattern = "gpkg")
## [1] "choco_munic.gpkg" "municipios.gpkg"
Finalmente, el archivo puede ser leído nuevamente para comprobar que la exportación fue exitosa:
colombia2 <- st_read("municipios.gpkg")
## Reading layer `municipios' from data source
## `D:\Geomatica Basica (Gr 2)\GB2\Proyecto2\municipios.gpkg'
## using driver `GPKG'
## Simple feature collection with 1065 features and 11 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -81.84153 ymin: -4.228429 xmax: -66.87033 ymax: 15.91247
## Geodetic CRS: WGS 84
El objeto colombia2 conserva la misma estructura del dataset original, incluyendo 1065 entidades espaciales, 11 variables y geometría de tipo MULTIPOLYGON.
El sistema de referencia de coordenadas se mantiene en WGS 84, un sistema global basado en coordenadas geográficas de latitud y longitud.
st_read()
y st_write()Las funciones st_read() y st_write() del
paquete sf permiten trabajar con diferentes tipos de datos
espaciales vectoriales, gracias a su integración con la librería
GDAL.
Estos formatos facilitan la lectura y escritura de información geográfica en distintos sistemas y plataformas de análisis espacial.
Entre los formatos más utilizados se encuentran:
En este trabajo se utiliza principalmente el formato GeoPackage (.gpkg) por su eficiencia y capacidad de almacenar múltiples capas en un solo archivo.
La selección de entidades por atributos permite filtrar datos espaciales en función de condiciones específicas, de forma similar a una consulta SQL en sistemas GIS.
En R, esta operación se realiza de manera sencilla utilizando la
función filter() del paquete dplyr, aplicada a
objetos espaciales sf.
choco <- dplyr::filter(colombia, NAME_1 == "Chocó")
En este caso, se seleccionan únicamente los municipios cuyo departamento corresponde a Chocó, generando un nuevo objeto espacial llamado choco.
nrow(choco)
## [1] 21
La función nrow() permite verificar el número de
entidades seleccionadas. Este valor debe coincidir con el número de
municipios del departamento de Chocó según la base de datos
utilizada.
plot(st_geometry(choco), col = sf.colors(12, categorical = TRUE), border = "grey", axes = TRUE)
plot(st_centroid(st_geometry(choco)), pch = 3, col = "red", add = TRUE)
Para la visualización básica de los municipios del departamento de
Chocó se utilizó la función plot() del sistema base de
R.
En primer lugar, se graficaron los límites municipales mediante
st_geometry(), lo que permite observar la forma y
distribución espacial de cada municipio dentro del departamento.
Posteriormente, se añadieron los centroides de cada polígono utilizando
st_centroid(), representados como puntos sobre el mapa, lo
cual facilita la identificación de la ubicación aproximada del centro de
cada municipio.
st_write(choco, "choco_munic.gpkg", driver = "GPKG", append = FALSE)
## Deleting layer `choco_munic' using driver `GPKG'
## Writing layer `choco_munic' to data source `choco_munic.gpkg' using driver `GPKG'
## Writing 21 features with 11 fields and geometry type Multi Polygon.
El objeto choco se exporta como un archivo GeoPackage, permitiendo su reutilización en otros análisis o software GIS.
La selección por localización permite seleccionar entidades espaciales en función de su relación geométrica con otro conjunto de datos.
Este tipo de operación es equivalente a la herramienta Select by Location en software GIS como ArcGIS o QGIS.
Entre las relaciones espaciales más utilizadas se encuentran:
Para ilustrar este proceso, se utiliza una base de datos de ciudades del mundo, la cual contiene información geográfica en formato de coordenadas (longitud y latitud).
ciudades <- st_read("D:/Geomatica Basica (Gr 2)/GB2/Proyecto2/datos/Ciudades de Colombia.gpkg")
## Reading layer `ciudades_de_colombia' from data source
## `D:\Geomatica Basica (Gr 2)\GB2\Proyecto2\datos\Ciudades de Colombia.gpkg'
## using driver `GPKG'
## Simple feature collection with 722 features and 11 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: -81.7006 ymin: -4.2167 xmax: -67.4836 ymax: 12.5847
## Geodetic CRS: WGS 84
El objeto ciudades se convierte en un objeto espacial
sf utilizando st_as_sf(), indicando que las
columnas de longitud y latitud representan la geometría.
El CRS asignado es 4326 (WGS 84), un sistema global basado en coordenadas geográficas.
st_crs(ciudades)$epsg
## [1] 4326
st_crs(choco)$epsg
## [1] 4326
La función st_crs() permite identificar el sistema de
referencia de coordenadas (CRS) de cada objeto espacial.
En este caso, tanto el objeto ciudades como el objeto choco presentan el mismo sistema de referencia EPSG: 4326 (WGS 84), lo que indica que ambos datasets son compatibles para realizar operaciones espaciales sin necesidad de transformación previa.
ciudades_choco <- ciudades[choco, , op = st_within]
Se realiza la selección espacial de las ciudades que se encuentran dentro del departamento de Chocó utilizando la relación topológica within.
plot(st_geometry(choco),
col = sf.colors(nrow(choco), categorical = TRUE),
border = "grey",
axes = TRUE)
plot(st_geometry(ciudades_choco),
col = "red",
pch = 20,
add = TRUE)
Se genera una visualización básica donde se observan los límites del departamento de Chocó y las ciudades que se encuentran dentro de su territorio.
ggplot() +
# Municipios de Chocó
geom_sf(data = choco) +
# Ciudades dentro de Chocó
geom_sf(data = ciudades_choco,
aes(color = city),
size = 3) +
# Títulos del mapa
labs(x = "Longitud",
y = "Latitud",
title = "Ciudades de Chocó") +
# Tema
theme_bw()
El paquete ggplot2 permite generar mapas de forma más estética y estructurada a partir de objetos espaciales sf.
La función geom_sf() se utiliza para representar capas
espaciales, como polígonos y puntos.
Es importante tener en cuenta el orden de las capas: primero se dibujan los municipios del departamento de Chocó y luego se agregan las ciudades, con el fin de asegurar que los puntos sean visibles sobre el mapa.
ggplot() +
# Municipios de Chocó
geom_sf(data = choco) +
# Ciudades dentro de Chocó
geom_sf(data = ciudades_choco,
aes(color = city),
size = 3) +
# Barra de escala
annotation_scale(location = "tr",
height = unit(0.25, "cm"),
width = unit(1, "cm"),
pad_x = unit(0.3, "in"),
pad_y = unit(0.5, "in")) +
# Flecha norte
annotation_north_arrow(location = "tr",
height = unit(1, "cm"),
width = unit(1, "cm"),
which_north = "true",
pad_x = unit(0.5, "in"),
pad_y = unit(0.05, "in")) +
# Títulos
labs(x = "Longitud",
y = "Latitud",
title = "Ciudades del departamento de Chocó") +
# Tema
theme_bw()
## Warning in annotation_scale(location = "tr", height = unit(0.25, "cm"), :
## Ignoring unknown parameters: `width`
En esta sección se mejora la visualización del mapa utilizando el paquete ggspatial, el cual permite agregar elementos cartográficos como la barra de escala y la flecha norte.
La función annotation_scale() añade una escala gráfica
que facilita la interpretación de distancias en el mapa.
La función annotation_north_arrow() incorpora la flecha
norte, permitiendo orientar espacialmente el mapa.
Estos elementos complementan la visualización generada con ggplot2, proporcionando una representación cartográfica más completa y profesional.
La función sessionInfo() permite registrar el entorno de
computación utilizado para el análisis.
Esto incluye la versión de R, el sistema operativo, la zona horaria y los paquetes cargados durante la sesión.
sessionInfo()
## R version 4.6.0 (2026-04-24 ucrt)
## Platform: x86_64-w64-mingw32/x64
## Running under: Windows 11 x64 (build 26200)
##
## 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] ggspatial_1.1.10 ggplot2_4.0.3 dplyr_1.2.1 sf_1.1-1
##
## loaded via a namespace (and not attached):
## [1] gtable_0.3.6 jsonlite_2.0.0 compiler_4.6.0 tidyselect_1.2.1
## [5] Rcpp_1.1.1-1.1 jquerylib_0.1.4 scales_1.4.0 yaml_2.3.12
## [9] fastmap_1.2.0 R6_2.6.1 generics_0.1.4 classInt_0.4-11
## [13] s2_1.1.11 knitr_1.51 tibble_3.3.1 units_1.0-1
## [17] DBI_1.3.0 bslib_0.11.0 pillar_1.11.1 RColorBrewer_1.1-3
## [21] rlang_1.2.0 cachem_1.1.0 xfun_0.58 sass_0.4.10
## [25] S7_0.2.2 otel_0.2.0 cli_3.6.6 withr_3.0.2
## [29] magrittr_2.0.5 wk_0.9.5 class_7.3-23 digest_0.6.39
## [33] grid_4.6.0 rstudioapi_0.19.0 lifecycle_1.0.5 vctrs_0.7.3
## [37] KernSmooth_2.23-26 proxy_0.4-29 evaluate_1.0.5 glue_1.8.1
## [41] farver_2.1.2 e1071_1.7-17 rmarkdown_2.31 tools_4.6.0
## [45] pkgconfig_2.0.3 htmltools_0.5.9
Este registro es importante para garantizar la reproducibilidad del análisis, ya que permite que otros usuarios puedan replicar exactamente el mismo entorno de trabajo.
Lizarazo, I. (2025, 20 de mayo). Introduction to simple features in R. RPubs. https://rpubs.com/ials2un/GB_simple_features