Recursos de interés

Introducción

El paquete rgbif del lenguaje de programación R proporciona acceso a los datos compartidos a través de la interfaz de programación de aplicaciones de la Infraestructura Mundial de Información en Biodiversidad (GBIF).

Una interfaz de programación de aplicaciones (API, Application Programming Interface) es un conjunto de rutinas que brindan acceso a la funcionalidad contenida en un paquete de software, de manera que pueda pueda ser utilizada desde otros programas. En la actualidad, es común ofrecer acceso a los datos de una empresa u organización a través de un API que puede invocarse a través de solicitudes HTTP (HyperText Transfer Protocol, Protocolo de transferencia de hipertexto), el cual es el protocolo de comunicación que se utiliza en la Web.

El API de GBIF proporciona acceso a varios tipos de datos compartidos a través de GBIF, tales como especies, registros de presencia, mapas y noticias. El API puede invocarse a través de direcciones web (ej. https://api.gbif.org/v1/occurrence/search?scientificname=Puma+concolor). Los datos son retornados por el API en formato JavaScript Object Notation (JSON).

El paquete rgbif implementa funciones en R que acceden el API de GBIF, lo que facilita sustancialmente el acceso a los datos de GBIF desde R. rgbif es parte de rOpenSci, una iniciativa que impulsa la investigación reproducible por medio de datos abiertos y software reutilizable.

Preparativos

Instalación de paquetes:

# Instalación de rgbif
install.packages("rgbif")

# Instalación de protolite
install.packages("protolite")

Carga de paquetes:

# Carga de sf
library(sf)

# Carga de raster
library(raster)

# Carga de rgbif
library(rgbif)

# Carga de protolite
library(protolite)

Uso básico

Conteo de registros de presencia

La función occ_count() retorna la cantidad de registros de presencia de acuerdo con criterios como código del taxón (taxonKey), tipo de registro (basisOfRecord), país y año, entre otros.

Ejemplos de uso de occ_count:

# Total de registros de presencia en GBIF
occ_count()
## [1] 1423093841
# Cantidad de registros georreferenciados
occ_count(georeferenced = TRUE)
## [1] 1326487005
# Cantidad de registros ubicados en Costa Rica
## Obtención del código del país
cr_isocode <- isocodes[grep("Costa Rica", isocodes$name), "code"]
## Conteo
occ_count(country=cr_isocode)
## [1] 11771591
# Cantidad de registros de Phascolarctos cinereus (koala) ubicados en Australia, georreferenciados
## Obtención del código del taxón
name <- name_backbone(name='Phascolarctos cinereus', rank='species')
name[, c('usageKey', 'scientificName')]
## # A tibble: 1 x 2
##   usageKey scientificName                         
##      <int> <chr>                                  
## 1  2440012 Phascolarctos cinereus (Goldfuss, 1817)
## Conteo
occ_count(taxonKey = 2440012, 
          country = 'AU',
          georeferenced = TRUE
)
## [1] 94084

Búsqueda de registros de presencia

Las funciones occ_search() y occ_data() retornan los registros de presencia que cumplen con criterios como nombre científico, país, continente, fecha y otros.

occ_search retorna un resumen de resultados como los del paquete dplyr de Tidyverse, mientras que occ_data está optimizada para ser más eficiente.

Ambas funciones retornan un máximo de 100000 registros en cada llamada.

Ejemplos de uso de occ_search y occ_data:

# Registros de presencia de manigordos en Costa Rica, georreferenciados y sin problemas detectados de georreferenciación (ej. coordenadas invertidas)
occ_search(
  scientificName = 'Leopardus pardalis', 
  country = 'CR', 
  hasCoordinate = TRUE, 
  hasGeospatialIssue = FALSE
)
# Consulta con lista de campos para desplegar
occ_search(
  scientificName = 'Leopardus pardalis', 
  country = 'CR', 
  hasCoordinate = TRUE, 
  hasGeospatialIssue = FALSE,
  fields = c('scientificName', 'decimalLongitude', 'decimalLatitude')
)
## Records found [35] 
## Records returned [35] 
## No. unique hierarchies [1] 
## No. media records [35] 
## No. facets [0] 
## Args [hasCoordinate=TRUE, hasGeospatialIssue=FALSE, limit=500, offset=0,
##      scientificName=Leopardus pardalis, country=CR,
##      fields=scientificName,decimalLongitude,decimalLatitude] 
## # A tibble: 35 x 3
##    scientificName                      decimalLongitude decimalLatitude
##    <chr>                                          <dbl>           <dbl>
##  1 Leopardus pardalis (Linnaeus, 1758)            -83.2            8.27
##  2 Leopardus pardalis (Linnaeus, 1758)            -83.0            9.73
##  3 Leopardus pardalis (Linnaeus, 1758)            -83.8            9.75
##  4 Leopardus pardalis (Linnaeus, 1758)            -83.3            8.41
##  5 Leopardus pardalis (Linnaeus, 1758)            -84.0            9.42
##  6 Leopardus pardalis (Linnaeus, 1758)            -85.3            9.86
##  7 Leopardus pardalis (Linnaeus, 1758)            -85.6           10.9 
##  8 Leopardus pardalis (Linnaeus, 1758)            -85.4           10.2 
##  9 Leopardus pardalis (Linnaeus, 1758)            -83.4            8.61
## 10 Leopardus pardalis (Linnaeus, 1758)            -83.7            8.64
## # ... with 25 more rows

Mapas

La función mvt_fetch() es un wrapper al API de mapas de GBIF.

# Consulta para retornar el mapa
m <- mvt_fetch(taxonKey = 2440012)

# Tipo de datos del objeto retornado
class(m)
## [1] "sf"         "data.frame"
# Mapeo
plot(m$geometry, axes = TRUE, graticule = TRUE)

#plot(st_crop(m, c(xmin=-150, xmax=-125, ymin=-60, ymax=-20)))

Uso en combinación con sf y raster

Obtención de datos:

# Registros de presencia de koalas en Oceanía
phascolarctos_cinereus_gbif <- 
  occ_search(
    scientificName = 'Phascolarctos cinereus', 
    country = 'AU',
    hasCoordinate = TRUE, 
    hasGeospatialIssue = FALSE,
    fields = c('scientificName', 'decimalLongitude', 'decimalLatitude'),
    limit = 1500
  )

# Clase de los datos retornados por occ_search()
class(phascolarctos_cinereus_gbif)
## [1] "gbif"
class(phascolarctos_cinereus_gbif$data)
## [1] "tbl_df"     "tbl"        "data.frame"
# Conversión a objeto sf
phascolarctos_cinereus_sf <- 
  st_as_sf(phascolarctos_cinereus_gbif$data, 
           coords = c("decimalLongitude", "decimalLatitude"), 
           crs = 4326
  )


# Capa de altitud
altitude <- getData("worldclim", var="alt", res=10)

Mapeo:

# Mapeo
plot(altitude, ext = extent(110, 160, -50, -10), reset=FALSE)
plot(phascolarctos_cinereus_sf, col='black', add=TRUE)