Bases de datos espaciales e información ecológica

Práctica 2, Datos Espaciales en Biodiversidad

Máster en Áreas Protegidas, Recursos Naturales y Biodiversidad

Profesores
Departamento

Ecología e Hidrología, Facultad de Biología

Fecha de publicación

11 de noviembre de 2023

Fecha de modificación

21 de febrero de 2024

Introducción

En esta práctica aprenderemos a realizar descargas de información cartográfica global, ambiental, ecológica y sobre biodiversidad, para su importación y visualización en R. Utilizaremos diversos paquetes de funciones que permiten el acceso a las webs de descarga desde R, y su importación directa. También exploraremos varias webs de organismos públicos y organizaciones no gubernamentales que permiten descargar, en diversos tipos de formatos, un amplio abanico de mapas de diferentes ámbitos temáticos y regiones geográficas.

Preparación

Para realizar esta práctica se necesita la instalación adicional de varios paquetes de R (terra, OpenStreetMap, geodata, rgbif, wdpar ) Si no los tenemos instalados usaremos:

install.packages( c( "terra", "OpenStreetMap", "geodata", "rgbif", "wdpar" ) )

Para usar las funciones de wdpar necesitaremos otra instalación adicional:

webdriver::install_phantomjs()

Una vez instalados, cargaremos los paquetes en memoria:

library( terra )
library( geodata )
library( OpenStreetMap )
library( rgbif )
library( wdpar )

Las funciones que vamos a utilizar en la práctica realizan descargas de mapas (a menudo archivos de gran tamaño) que deben guardarse en nuestro ordenador. Para ello hay que crear o especificar un directorio de descargas. Podemos utilizar el directorio temporal de Windows (que se especifica como path = tempdir()) o, si queremos conservar los mapas descargados para otras sesiones, un subdirectorio dentro de nuestro directorio de trabajo. Por ejemplo, path = "./descargas/".

Descargas desde R

Mapas políticos (GADM)

Comenzaremos realizando varias descargas desde la web del proyecto GADM (https://gadm.org), donde están disponibles mapas de límites territoriales y administrativos de los países del mundo, que nos servirán de base para nuestras representaciones cartográfica. En concreto usaremos la función world del paquete geodata:

world( resolution = 1, path = "./descargas/" ) -> mundo
mundo

El objeto importado (que hemos llamado mundo) es del tipo SpatVector y por tanto puede ser directamente utilizado por las funciones de terra.

plot( mundo )

Sobre este mapa podemos resaltar cualquier país en concreto, o representarlo aisladamente. Por ejemplo:

plot( mundo[ mundo$NAME_0 == "Spain", ], col = 2, add = TRUE )
plot( mundo[ mundo$NAME_0 == "Spain", ] )

El argumento resolution = 1 especifica la descarga del mapa con la máxima resolución. Podemos hacer un zoom sobre cualquier parte del mapa para observar los diferentes límites territoriales con más detalle.

plot( mundo )
zoom( mundo )

Si quisiéramos guardar los mapas de nuestra área de trabajo en R (como archivo RData) debemos comprimirlos previamente con la función wrap de terra, lo que nos permitirá poder utilizarlos en otras sesiones.

wrap( mundo ) -> mundo

Alternativamente, podemos leer en cualquier momento el archivo descargado con la función readRDS. En nuestro caso:

readRDS( "./descargas/gadm/gadm36_adm0_r1_pk.rds" ) -> mundo

También se puede descargar cada país de forma independiente, con sus límites administrativos a diferentes niveles de detalle (el máximo detalle, hasta municipios, es el 4). Por ejemplo:

gadm( country = "Spain", level = 1, path = "./descargas/" ) -> spain
plot( spain )

Podemos seleccionar la Región de Murcia en la ventana gráfica (y guardar el mapa en un nuevo objeto) utilizando la función sel:

sel( spain ) -> murcia
plot( murcia )

Los límites municipales, provinciales y autonómicos de España pueden también descargarse en formato shp desde el centro de descargas del Organismo Autónomo Centro Nacional de Información Geográfica (CNIG, https://centrodedescargas.cnig.es/), en la sección “Información geográfica de referencia”. En la sección “Descargas externas” de esta práctica exploraremos la web del CNIG.

OpenStreetMap

El paquete OpenStreetMap permite descargar mapas del proyecto OpenStreetMap (https://www.openstreetmap.org/). Descargaremos mapas del ámbito territorial de la Región de Murcia, especificando las coordenadas (latitud/longitud). Para poder superponer el mapa descargado con otros mapas es necesario cambiar el sistema de coordenadas de referencia (función openproj):

openmap( c( 39, -2.7 ), c( 37, -0.5 ), type = "osm" ) -> rm
openproj( rm, crs( murcia ) ) -> rm
plot( murcia )
plot( rm, add = TRUE )
plot( murcia, add = TRUE, lwd = 2 )

Existen diferentes tipos de mapas (argumento type) que pueden consultarse usando la ayuda de la función (?openmap). Como ejemplos descargaremos otros dos tipos de mapas para áreas más reducidas (zona del Mar Menor y Cabo de Palos):

plot( openmap( c( 37.9, -1 ), c( 37.55, -0.6 ), type = "esri-shaded" ) )
plot( openmap( c( 37.637, -0.7 ), c( 37.628, -0.685 ), type = "bing" ) )

La resolución se puede aumentar variando el número de teselas vectoriales (argumento minNumTiles):

plot( openmap( c( 37.637, -0.7 ), c( 37.628, -0.685 ), minNumTiles = 20, type = "bing" ) )

Distribución de especies (GBIF)

Utilizaremos ahora las funciones del paquete rgbif, que permite descargar las presencias registradas de especies de la base de datos mundial del Sistema Global de Información sobre Biodiversidad (GBIF, https://www.gbif.org/). Para la mayoría de especies, el número de registros es muy elevado, por lo que el proceso de descarga suele ser muy lento y, además, debe especificarse el límite de registros a descargar (que por defecto es de solo 500). Conviene previamente conocer de cuántos registros consta la base de datos de nuestra especie y posteriormente realizar la descarga especificando el límite apropiado. Por ejemplo, para el ciprés de Cartagena (Tetraclinis articulata):

occ_search( scientificName = "Tetraclinis articulata" )
occ_data( scientificName = "Tetraclinis articulata", limit = 1900 ) -> tetart_raw

El objeto descargado contiene mucha información asociada a cada registro (más de 150 variables) y no es un mapa directamente reconocible por las funciones del paquete terra, por lo que deberemos convertirlo al formato SpatVector (puntos):

vect( tetart_raw$data, geom = c( "decimalLongitude", "decimalLatitude" ) ) -> tetart
tetart
plot( mundo )
plot( tetart, add = TRUE, col = 2 )

Observa que existen registros fuera del área de distribución de la especie, lo cual se debe a que la base de datos recoge información de múltiples fuentes. En este caso, podemos refinar la selección excluyendo, por ejemplo, los registros de herbarios:

plot( tetart[ tetart$basisOfRecord != "PRESERVED_SPECIMEN", ], add = TRUE, col=4 )

Las descargas de GBIF no se guardan directamente en nuestro ordenador, por lo que conviene comprimir los mapas elaborados con wrap y guardar el área de trabajo como archivo RData.

Alternativamente, podemos guardar los datos con writeRDS para leerlos en sesiones posteriores con readRDS. En nuestro caso, por ejemplo:

saveRDS( tetart_raw, "./descargas/tetart_raw.rds" )
readRDS( "./descargas/tetart_raw.rds" ) -> tetart_raw

Cuando el número de registros de una especie es muy elevado nos puede interesar seleccionar, por ejemplo, un año o una región determinada. Trabajaremos ahora con la alondra ricotí (Chersophilus duponti):

occ_search( scientificName = "Chersophilus duponti" )
occ_search( scientificName = "Chersophilus duponti", country = "ES" )
occ_search( scientificName = "Chersophilus duponti", country = "ES", year = 2022 )

El número de registros de la última selección (en España durante 2022) es inferior a 500, por lo que no es necesario especificar un valor para el argumento limit:

occ_data( scientificName = "Chersophilus duponti", country = "ES", year = 2022 ) -> chedup_ES_2022
vect( chedup_ES_2022$data, geom = c( "decimalLongitude", "decimalLatitude" ) ) -> chedup
plot( spain )
plot( chedup, add = TRUE, col = 4 )

Existen otras fuentes de información sobre ocurrencia de especies que son accesibles desde R. El paquete spocc proporciona una interfaz de acceso a las siguientes: GBIF, iNaturalist, eBird, Integrated Digitized Biocollections (iDigBio), VertNet, Ocean Biogeographic Information System (OBIS) y Atlas of Living Australia (ALA).

Áreas protegidas (Protected Planet)

Usaremos el paquete wdpar que permite el acceso a la base de datos de Protected Planet (https://protectedplanet.net):

wdpa_fetch( "Iceland", wait = TRUE, download_dir = "./descargas/" ) -> iceland_raw
iceland_raw

La información contenida en la base de datos de áreas protegidas de Protected Planet es muy compleja, por lo que es conviente aplicar a la descarga una función que realiza una “limpieza” y “reparación”:

wdpa_clean( iceland_raw, exclude_unesco = FALSE, geometry_precision = 10000, erase_overlaps = FALSE ) -> iceland_raw

El mapa importado se transforma directamente en un objeto de la clase SpatVector aplicando la función vect, sin argumentos adicionales:

vect( iceland_raw ) -> iceland
iceland

Como el sistema de referencia de coordenadas no es el mismo que el de mapas descargados previamente, debemos cambiarlo con la función project:

project( iceland, crs( mundo ) ) -> iceland
plot( iceland, border = 2 )
plot( mundo, add = TRUE )

Sobre el mapa repesentado podemos resaltar, por ejemplo, los parques nacionales, y las áreas marinas protegidas:

plot( iceland[ iceland$DESIG_ENG == "National Park", ], col = 3, add = TRUE )
plot( iceland[ iceland$MARINE == "marine", ], col = 4, add = TRUE )

En la sección “Descargas externas” de esta práctica examinaremos las webs de descargas de áreas protegidas del Gobierno de España (Geoportal del MITECO, https://www.miteco.gob.es/es/cartografia-y-sig.html) y de la Región de Murcia (Geocatálogo, http://www.murcianatural.carm.es/geocatalogo/).

Elevaciones, clima y usos del suelo

El paquete geodata tiene también funciones que permiten descargar mapas de elevaciones, de datos climáticos y de usos del suelo, bien de forma global o por países. Para altitudes:

elevation_global( res = 10, path = "./descargas/" ) -> mundo_alt
mundo_alt
plot( mundo_alt )
plot( mundo, add = TRUE) 

Observa que mapa descargado es un objeto de tipo SpatRaster con resolución 0.1666667 (10 minutos de grado). Las resoluciones válidas son 10, 5, 2.5 y 0.5 (minutos de grado).

Para los países la función es elevation_30s, que descarga mapas con resolución de 0.008333333 (30 arcos de segundo):

elevation_30s( country = "Spain", path = "./descargas/" ) -> spain_alt
plot( spain_alt )
plot( spain, add = TRUE ) 

El el caso de datos climáticos, las descargas se realizan desde la web de WorldClim (https://www.worldclim.org/), donde podemos consultar los difentes mapas de variables climáticas disponibles. Como ejemplo descargaremos el mapa de temperaturas mínimas con resolución de 10 minutos:

worldclim_global( var = "tmin", res = 10, path = "./descargas/" ) -> mundo_tmin
mundo_tmin
plot( mundo_tmin )

Observa que mundo_tmin es un mapa raster con 12 capas (12 meses), que podemos seleccionar y con las que podemos realizar cálculos:

plot( mundo_tmin[[ 1 ]] )
plot( mean( mundo_tmin ) )

Para un país en concreto la función es worldclim_country y las descargas son siempre de mapas con resolución de 30 segundos.

worldclim_country( country = "Spain" , var = "bio", path = "./descargas/" ) -> spain_bio
plot( spain_bio )

En este caso hemos descargado el mapa de variables bioclimáticas, que consta de 19 capas cuyos códigos pueden consultarse aquí. Por ejemplo, el mapa de la capa 12 corresponde a la precipitación anual.

plot( spain_bio[[ 12 ]] )

Para los usos del suelo, el paquete geodata cuenta con la función landcover que descarga mapas del proyecto ESA WorldCover de la Agencia Espacial Europea (https://esa-worldcover.org/), a escala mundial y resolución de 30 segundos. Teclea ?landcover para consultar los mapas disponibles.

landcover( var = "shrubs", path = "./descargas/" ) -> shrubs
shrubs
plot( shrubs )

Observa que los valores del mapa corresponden a la proporción del uso en la cuadrícula.

En la sección “Descargas externas” de esta práctica descargaremos los mapas de usos del suelo del proyecto CORINE Land Cover desde el centro de descargas del CNIG (https://centrodedescargas.cnig.es/).

Descargas externas

Además de los paquetes de descargas de R, existen numerosos repositorios web de descargas de datos cartográficos ambientales y de biodiversidad, que pueden hacerse de forma manual y posteriormente ser cargados en en R u otras aplicaciones de SIG, como QGis. Algunos también necesitan registro previo para su acceso.

En esta sección de la práctica realizaremos varios ejercicios de descargas de mapas temáticos que guardaremos en nuestra carpeta ./descargas/ y que importaremos en R con las funciones vect y rast del paquete terra.

Centro de descargas del CNIG

El Organismo Autónomo Centro Nacional de Información Geográfica (CNIG) dispone de una web de descargas con una amplia variedad de mapas disponibles (https://centrodedescargas.cnig.es/).

CORINE Land Cover

Entraremos en la sección “Información geográfica temática”, donde encontraremos el enlace al mapa vectorial de ocupación del suelo en España escala 1:100.000 correspondiente al proyecto europeo CORINE Land Cover, en sus diferentes versiones (1990, 2000, 2006, 2012 y 2018). Clicaremos en el icono de descarga del mapa de 1990 (el de menor tamaño) en formato GBD. Se trata de un archivo zip, que descomprimiremos en el directorio de trabajo de R. La importación la haremos con:

vect( "a0000009d.gdbtable" ) -> corine90
corine90

La leyenda de códigos del mapa está disponible en un documento PDF incluido en el archivo comprimido descargado.

Para evitar tener que representar todos los polígonos del mapa, especificaremos una extensión correspondiente al ámbito territorial de la Región de Murcia (función crop y argumento ext:

plot( crop( corine90, ext( 550000, 710000, 4125000, 4300000 ) ) )
plot( project( murcia, crs(corine90) ), add = TRUE, border = 7, lwd = 2 )

Mapa de pendientes

Descargaremos el Modelo Digital de Pendientes - MDP05, al que se accede desde la sección “Modelos Digitales de Elevaciones”. Buscaremos la hoja MTN50 número 0978 (donde se localiza el Cabo de Palos). Se trata de un archivo zip, que descomprimiremos en el directorio de trabajo de R. La importación la haremos con:

rast( "MDP05_ETRS89_H30_0978_COB1.tif" ) -> cabopalos
cabopalos
plot( cabopalos )
plot( project( murcia, crs( cabopalos ) ), add = TRUE )

Web del MITECO

La sección de “Cartografía y SIG” de la web del MITECO (https://www.miteco.gob.es/) contiene un importante catálogo cartográfico. Buscaremos en la subsección Descargas el archivo de la Red de Áreas Marinas Protegidas de España y descargaremos el archivo zip que contiene la cartografía en formato shp. Una vez descomprimido en el directorio de trabajo de R podremos importarlo con:

vect( "Rampe_2021.shp" ) -> rampe
rampe
plot( rampe, col = 4 )
plot( spain, add= TRUE )

Geocatálogo de la CARM

En el Geocatálogo de la Comunidad Autónoma de la Región de Murcia (http://www.murcianatural.carm.es/geocatalogo/) están disponibles para su descarga diversos mapas temáticos, entre los que figuran los mapas regionales de áreas protegidas. Buscaremos y descargaremos el mapa de la red de Espacios Naturales Protegidos (ENP) en formato shp. Una vez descomprimido el archivo zip en el directorio de trabajo de R, importaremos el mapa con:

vect( "ENP_ETRS89.shp" ) -> enp
enp

Para superponer el mapa de los ENP sobre el mapa de OpenStreetMap:

plot( project( murcia, crs( enp ) ) )
plot( openproj( rm, crs( enp ) ) )
plot( enp, add = TRUE)
plot( project( murcia, crs ( enp ) ), add = TRUE, lwd = 2 )

Evaluación

Realiza la prueba de evaluación disponible en la herramienta Exámenes del Aula Virtual.

Bibliografía