library(tidyverse)
library(sf)
library(mapSpain)
library(leaflet)
library(leaflet.extras)
library(kableExtra)
options(scipen = 999) # para evitar notación científica en los plots
<- mapSpain::esp_get_munic_siane(epsg = 4326, moveCAN = F) spain_mun
Apéndice A — Tipos de ficheros geoespaciales
A.1 Introducción
Durante el curso trabajaremos con diferentes tipos de datos espaciales, los cuales se pueden almacenar y ofrecer en formatos muy diversos. Si bien es cierto que los formatos más habituales son Shapefile (.shp) y GeoPackage (.gpkg), existen muchos otros:
En esta sección se facilitan algunos mecanismos para obtener, de diversas fuentes de información, ficheros (con distintos formatos) que contienen información espacial.
A.2 Open Data (geo)portals
A continuación se ofrece una lista de enlaces a (geo)portales de datos abiertos que, evidentemente, es susceptible de ser ampliada:
- Centro de descargas del IGN (Instituto Geográfico Nacional)
- CartoCiudad
- datos.gob.es - Iniciativa de datos abiertos del Gobierno de España
- CARTO Spatial Data Catalog
- ArcGIS Hub
- IDEV (Infraestructura de Datos Espaciales Valenciana)
- IDENA (Infraestructura de Datos Espaciales de Navarra)
- Datos Abiertos de Canarias
- Portal de datos abiertos del Ayuntamiento de Valencia
- Portal de datos abiertos del Ayuntamiento de Madrid
- Open Data BCN - Servicio de datos abiertos del Ajuntament de Barcelona
- Geoportal de Datos de Alto Valor de Living Atlas
Si hay algún repositorio que echas en falta en este listado, envíame un correo a virgilio.perez@uv.es y lo incluyo.
A.3 Formatos de ficheros geoespaciales
Una buena forma de comenzar este bloque, además de cargar las librerías necesarias, es preguntarse ¿qué ficheros es capaz de leer el paquete sf
? Para saberlo, podemos ejecutar la función sf::st_drivers()
.
<- as.data.frame(sf::st_drivers())) (drivers
A.3.1 GeoJSON
Uno de los formatos abiertos más utilizados para distribuir datos geográficos es el GeoJSON. Este formato, al igual que el JSON (muy utilizado en sitios web), es un archivo de texto que también guarda las coordenadas de los puntos/vértices de las entidades que se representan. Al ser un archivo de texto, en geometrías complejas (con muchos vértices) su tamaño será mucho mayor que cuando los datos se guardan en formatos binarios. A continuación, se muestra un ejemplo (fichero disponible aquí, ofrecido por la Diputación de Alicante:
<- "data/centros-culturales.geojson"
path
<- sf::st_read(path, quiet = T)
datos class(datos)
[1] "sf" "data.frame"
st_crs(datos)
Coordinate Reference System:
User input: WGS 84
wkt:
GEOGCRS["WGS 84",
DATUM["World Geodetic System 1984",
ELLIPSOID["WGS 84",6378137,298.257223563,
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]],
ID["EPSG",4326]]
leaflet(datos) %>%
addTiles() %>%
addCircleMarkers(radius = 1, label = ~paste0(CC_DENOMINACION," - ", CC_NUCLEO))
A.3.2 GeoPackage
Otro formato abierto que ha tomado fuerza en la comunidad de usuarios de SIG es el GeoPackage (terminación de archivos en .gpkg). Este es un archivo binario (es un contenedor de la base de datos SQLite) que tiene la gran ventaja de poder contener tanto datos vectoriales como raster e inclusive tablas de metadatos.
En este ejemplo se utiliza un conjunto de datos obtenido de aquí, que contiene el directorio de alojamientos turísticos colectivos (ALOJATUR) de Canarias:
<- "https://datos.canarias.es/catalogos/estadisticas/dataset/7ce03361-fd0f-498a-9173-a933be0f30a5/resource/c1687628-6d8a-42ab-9cde-9d6e6ba00dce/download/alojatur_2023.gpkg"
url
# opción 1
<- sf::st_read(url, quiet = T) # importamos directamente desde internet
datos
# opción 2
<- sf::st_read("data/alojatur_2023.gpkg", quiet = T) # descargamos y abrimos
datos2
ggplot() +
geom_sf(data = spain_mun %>% filter(codauto == "05"), fill = "#F0DCAD", color="transparent") +
geom_sf(data = datos, aes(color=cod_categor)) +
labs(title = "Directorio de Alojamientos Turísticos Colectivos (ALOJATUR)",
subtitle = "Canarias, a 01/01/2023") +
guides(color = guide_legend(title = "Categoría (núm. estrellas)")) +
theme(panel.grid.major = element_line(color = gray(.5), linetype = "dashed", size = 0.5),
panel.background = element_rect(fill = "aliceblue"),
legend.position = "bottom",
legend.direction = "horizontal",
legend.title.position = "top",
legend.title = element_text(hjust = 0.5))
A.3.3 KML
El Keyhole Markup Language (.kml) es un tipo de formato abierto originalmente utilizado para desplegar y guardar datos en Google Earth pero que se ha vuelto común entre los usuarios de datos geográficos de otras plataformas. El formato se utiliza para guardar datos vectoriales pero también puede contener, en archivos con terminación .kmz, imágenes sobrepuestas, iconos y otros elementos.
En este caso visualizaremos los puntos wifi públicos distribuidos por la ciudad de Valencia, obtenidos de aquí:
<- "https://valencia.opendatasoft.com/api/explore/v2.1/catalog/datasets/punts-wifi-puntos-wifi/exports/kml?lang=es&timezone=Europe%2FBerlin"
url
<- sf::st_read(url, quiet = T)
datos <- sf::st_read("data/punts-wifi-puntos-wifi.kml", quiet = T)
datos2
head(datos)
leaflet(datos) %>%
addProviderTiles("Esri.WorldImagery") %>%
addMarkers(clusterOptions = markerClusterOptions())
Probemos ahora con un fichero KMZ, obtenido de aquí:
<- sf::st_read("data/inst_deportivas.kmz") datos
¿Qué ocurre? ¿Qué podríamos hacer?
<- sf::st_read("data/inst_deportivas.kml", quiet = T)
datos
leaflet(datos) %>%
addProviderTiles("CartoDB.Positron") %>%
addMarkers(label = ~Name)
A.3.4 GeoTIFF
En el caso de los datos raster, existe una gran variedad de archivos capaces de almacenarlos. Uno de los más populares es el GeoTIFF, una modificación al popular archivo de imágenes TIFF, pero que le permite guardar datos con coordenadas geográficas. Normalmente el archivo con terminación .tif debe de acompañarse (aunque no siempre es así) con un archivo del mismo nombre pero con terminación .tfw (world file) que le da la referencia geográfica al raster. Este tipo de ficheros son adecuados para archivar e imprimir imágenes y gráficos de alta resolución, aunque su elevado volumen limita su utilización.
En este caso mostraremos el mapa de la Península Ibérica y Baleares a escala 1:1250000 para el año 2022 (125 Mb), obtenido del Centro Nacional de Información Geográfica.
<- sf::st_read("data/ME1250_Peninsula_2022.tif") datos
<- terra::rast("data/ME1250_Peninsula_2022.tif")
datos ::plot(datos) terra
Ahora veremos otro ejemplo en el que el fichero .tif sí que viene acompañado de un fichero .tfw.
<- terra::rast("data/SIANE_CARTO_BASE_E_RASTER/elae_2k5_orog_gebco08_r_36w12n59e77n_20100927.tif")
datos ::plot(datos) terra
A.3.5 NetCDF
En cuanto a formatos abiertos para datos raster, el más utilizado, especialmente para datos climáticos, es el netCDF (terminación de archivos en .nc). Este formato es sumamente ágil para guardar todo tipo de datos y tiene muchas ventajas para el procesamiento en herramientas gratuitas. Dependiendo de la fuente de los datos, estos archivos pueden llegar a pesar teras (Tb), por lo que su manipulación puede requerir de equipos informáticos potentes.
A.3.6 WebServices
Los estándares de servicios web para datos geográficos más populares actualmente son los WFS, WMS y WMTS. Podemos acceder a estos datos a través de una URL que puede integrarse tanto en sitios web como en programas de SIG para desplegar o descargar los datos. Muchos de los portales de Infraestructura de Datos Espaciales (IDEs) de gobiernos e instituciones públicas ofrecen información geoespacial de este modo.
El Web Feature Service (WFS) es un protocolo que proporciona datos vectoriales y que, dependiendo del programa en que se estén desplegando, permite guardar localmente los datos en cualquiera de los formatos para vectores que se mencionaron anteriormente.
El Web Map Service (WMS) sirve datos en mapas de bits (imágenes) y, a diferencia del WFS, no pueden descargarse los datos originales (con los que han sido generadas las imágenes).
El Web Map Tile Service (WMTS) es similar al WMS, puesto que también sirve para solicitar imágenes de mapas geográficos. Sin embargo, WMTS entrega los datos en forma de mosaicos (tiles), lo que hace que el servicio sea mucho más eficiente para mapas grandes o de alta resolución.
Veamos, a continuación, un ejemplo de cada caso.
A.3.6.1 WFS
En esta ocasión, los datos que vamos a obtener y visualizar hacen referencia a los centros en los que se realizan exámenes de la Junta Qualificadora de Coneixements de Valencià (JQCV), obtenidos de aquí:
<- "https://terramapas.icv.gva.es/0105_Delimitaciones?service=wfs&request=getcapabilities"
url
<- sf::st_read(url) datos
Multiple layers are present in data source https://terramapas.icv.gva.es/0105_Delimitaciones?service=wfs&request=getcapabilities, reading layer `ms:ICV.Municipios'.
Use `st_layers' to list all layer names and their type in a data source.
Set the `layer' argument in `st_read' to read a particular layer.
Warning in CPL_read_ogr(dsn, layer, query, as.character(options),
quiet, : automatically selected the first layer in a data source
containing more than one.
Reading layer `ms:ICV.Municipios' from data source
`https://terramapas.icv.gva.es/0105_Delimitaciones?service=wfs&request=getcapabilities'
using driver `WFS'
Simple feature collection with 542 features and 15 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: 626576.4 ymin: 4190817 xmax: 815520.5 ymax: 4519161
Projected CRS: ETRS89 / UTM zone 30N
<- sf::st_layers(url)
capas class(capas)
[1] "sf_layers" "data.frame"
$name capas
[1] "ms:ICV.Municipios" "ms:ICV.Comarcas"
[3] "ms:ICV.Provincias" "ms:ICV.ComunidadAutonoma"
<- sf::st_read(url, layer = "ms:ICV.Comarcas") comarcas
Reading layer `ms:ICV.Comarcas' from data source
`https://terramapas.icv.gva.es/0105_Delimitaciones?service=wfs&request=getcapabilities'
using driver `WFS'
Simple feature collection with 33 features and 7 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: 626576.4 ymin: 4190817 xmax: 815520.5 ymax: 4519161
Projected CRS: ETRS89 / UTM zone 30N
::st_geometry_type(comarcas)
sf::st_crs(comarcas) sf
<- sf::st_transform(comarcas,crs=4326)
comarcas_wgs84 leaflet(comarcas_wgs84) %>%
addTiles() %>%
addPolygons(label = ~comarca)