The availability of high-resolution global environmental datasets is crucial to model the relationship between the occurrence or abundance of species and their natural environment. For terrestrial environments, WorldClim has served this purpose since the early 2000s, significantly improving the application in the fields of ecology, biogeography, conservation biology and evolution.

Equivalent data for the marine realm only became available in 2012, with the pioneer initiative Bio-ORACLE providing data for several ecologically relevant variables. A new update of this dataset includes the most recent Intergovernmental Panel on Climate Change (IPCC) scenarios and new present-day variables like sea ice thickness, dissolved iron, phytoplankton, primary productivity and light at the bottom. The update also includes near sea bottom layers, which allow modelling a large fraction of the benthic diversity that inhabits deeper habitats.


The relevance of new data aiming for species associated with sea benthic features is clearly underlined by the disparity in ocean temperatures between surface and benthic layers, which can amount to up to 28.8 8C in the deeper regions of lower latitudes (Figure). The reliability of data layers was further tested using a cross-validation framework against in situ quality controlled data. This showed a generally good agreement between data layers and the global climatic patterns.

The R package sdmpredictors facilitates listing, extraction and management of the data layers provided by Bio-ORACLE, as well as easy integration with the available pipelines for bioclimatic modelling.

Plotting maximum temperature at the sea bottom

# Load package

# Download data layer (Maximum Temperature at the sea bottom)
temp.max.bottom <- load_layers("BO2_tempmax_bdmax")

# Crop raster to fit the North Atlantic
ne.atlantic.ext <- extent(-100, 45, 30.75, 72.5)
temp.max.bottom.crop <- crop(temp.max.bottom, ne.atlantic.ext)

# Generate a nice color ramp and plot the map
my.colors = colorRampPalette(c("#5E85B8","#EDF0C0","#C13127"))
plot(temp.max.bottom.crop,col=my.colors(1000),axes=FALSE, box=FALSE)
title(cex.sub = 1.25, sub = "Maximum temperature at the sea bottom (ÂșC)")

Extracting environmental data for a set of sites

# Load packages (leaflet allows to load google maps)

# List layers avaialble in Bio-ORACLE v2
layers.bio2 <- list_layers( datasets="Bio-ORACLE" )

# Download data layers (Max. Temperature, Min. Salinity and Min. Nitrates at the sea bottom)
environment.bottom <- load_layers( layercodes = c("BO2_tempmax_bdmean" , "BO2_salinitymin_bdmean", "BO2_nitratemin_bdmean") , equalarea=FALSE, rasterstack=TRUE)

# Download bathymetry
bathymetry <- load_layers("BO_bathymean")

# Generate a data.frame with the sites of interest
my.sites <- data.frame(Name=c("Faro, Portugal, NE Atlantic" , "Maspalomas, Spain, NE Atlantic" , "Guadeloupe, France, Caribbean Sea" , "Havana, Cuba, Caribbean Sea") , Lon=c(-7.873,-15.539,-61.208,-82.537) , Lat=c(37.047, 27.794,15.957,23.040 ) )

# Visualise sites of interest in google maps
m <- leaflet()
m <- addTiles(m)
m <- addMarkers(m, lng=my.sites$Lon, lat=my.sites$Lat, popup=my.sites$Name)

# Extract environmental values from layers
my.sites.environment <- data.frame(Name=my.sites$Name , depth=extract(bathymetry,my.sites[,2:3]) , extract(environment.bottom,my.sites[,2:3]) )