| Title: | Code to Access Open Access Species Range Maps | 
| Version: | 0.0.1 | 
| Description: | Allows access to a proof-of-concept database containing Open Access species range models and relevant metadata. Access to the database is via both 'PostgreSQL' connection and API https://github.com/EnquistLab/Biendata-Frontend, allowing diverse use-cases. | 
| License: | MIT + file LICENSE | 
| Encoding: | UTF-8 | 
| RoxygenNote: | 7.3.2 | 
| Depends: | R (≥ 3.2.1), RPostgreSQL | 
| Imports: | DBI, sf, httr, jsonlite | 
| Suggests: | knitr, rmarkdown, testthat (≥ 3.0.0), maps, tidyverse, vcr, ggplot2 | 
| VignetteBuilder: | knitr | 
| Config/testthat/edition: | 3 | 
| NeedsCompilation: | no | 
| Packaged: | 2025-01-12 16:30:14 UTC; Brian Maitner | 
| Author: | Brian Maitner | 
| Maintainer: | Brian Maitner <bmaitner@usf.edu> | 
| Repository: | CRAN | 
| Date/Publication: | 2025-01-14 13:00:05 UTC | 
Check that value is character
Description
Helper function to check data format.
Usage
.is_char(x)
Check that value is logical
Description
Helper function to check data format.
Usage
.is_log(x)
Check that value is logical or null
Description
Helper function to check data format.
Usage
.is_log_or_null(x)
Check that value is numeric
Description
Helper function to check data format.
Usage
.is_num(x)
Load range maps for given species using the API.
Description
OpenRange_api_load_species extracts range maps for the specified species.
Usage
OpenRange_api_load_species(species, ...)
Arguments
| species | A single species. | 
| ... | Additional arguments passed to internal functions. | 
Value
Range maps for specified species.
Note
Details on the construction of BIEN range maps is available at http://bien.nceas.ucsb.edu/bien/biendata/bien-3/
See Also
Other range functions: 
OpenRange_api_species(),
OpenRange_get_license(),
OpenRange_get_stats(),
OpenRange_list_scenarios(),
OpenRange_load_species(),
OpenRange_sf(),
OpenRange_species()
Examples
library(maps) #a convenient source of maps
library(sf)
temp_dir <- file.path(tempdir(), "BIEN_temp")
#Download ranges
Abies_poly <- OpenRange_api_load_species(species = "Abies_amabilis")
#Plotting files
plot(Abies_poly[,1])#plots the range, but doesn't mean much without any reference
map('world', fill = TRUE, col = "grey")#plots a world map (WGS84 projection), in grey
plot(Abies_poly,col="forest green",add=TRUE) #adds the range to the map
#Getting data from the files
Abies_poly |>
 st_drop_geometry()
Download range maps for given species using the API.
Description
OpenRange_api_species downloads range maps for the specified species.
Usage
OpenRange_api_species(species, directory, include_id = TRUE, ...)
Arguments
| species | A single species. | 
| directory | Directory that range maps should be saved in. | 
| include_id | Logical. Should the range_id be appended to the file name? Needed to save multiple maps per species. | 
| ... | Additional arguments passed to internal functions. | 
Value
NULL. Called for its side effect of downloading range maps.
Note
Details on the construction of BIEN range maps is available at http://bien.nceas.ucsb.edu/bien/biendata/bien-3/
See Also
Other range functions: 
OpenRange_api_load_species(),
OpenRange_get_license(),
OpenRange_get_stats(),
OpenRange_list_scenarios(),
OpenRange_load_species(),
OpenRange_sf(),
OpenRange_species()
Examples
library(OpenRange)
library(maps) #a convenient source of maps
library(sf)
library(ggplot2)
# Create temp directory
temp_dir <- file.path(tempdir(), "BIEN_temp")
#Download ranges
OpenRange_api_species(species = "Abies_amabilis",
                      directory = temp_dir,
                      include_id = TRUE) # saves ranges to a temporary directory
#Reading files
Abies_poly <- st_read(dsn = temp_dir,
                      layer = "Abies_amabilis_117684")
# Get a map to plot on
world <- map("world", plot = FALSE, fill = TRUE)|>
  st_as_sf()
#Plotting files
ggplot(data = world)+
  geom_sf()+
  geom_sf(data = Abies_poly,
          fill="green")+
  coord_sf(xlim = st_bbox(Abies_poly)[c(1,3)],
           ylim = st_bbox(Abies_poly)[c(2,4)]) +
  theme_bw()
#Getting data from the files
Abies_poly |>
  st_drop_geometry()
Download license information
Description
OpenRange_get_license provides information on model licenses.
Usage
OpenRange_get_license(...)
Arguments
| ... | Additional arguments passed to internal functions. | 
Value
Data.frame containing information on the license associated with the maps.
See Also
Other range functions: 
OpenRange_api_load_species(),
OpenRange_api_species(),
OpenRange_get_stats(),
OpenRange_list_scenarios(),
OpenRange_load_species(),
OpenRange_sf(),
OpenRange_species()
Other metadata functions: 
OpenRange_get_stats(),
OpenRange_list_scenarios()
Examples
range_license_info <- OpenRange_get_license()
Download model performance statistics
Description
OpenRange_get_stats provides information on model performance.
Usage
OpenRange_get_stats(...)
Arguments
| ... | Additional arguments passed to internal functions. | 
Value
List object containing one data.frame for each of the three modeling frameworks.
See Also
Other range functions: 
OpenRange_api_load_species(),
OpenRange_api_species(),
OpenRange_get_license(),
OpenRange_list_scenarios(),
OpenRange_load_species(),
OpenRange_sf(),
OpenRange_species()
Other metadata functions: 
OpenRange_get_license(),
OpenRange_list_scenarios()
Examples
range_stats <- OpenRange_get_stats()
Download information on available climate change scenarios
Description
OpenRange_list_scenarios provides information on climate scenarios with range projections available.
Usage
OpenRange_list_scenarios(...)
Arguments
| ... | Additional arguments passed to internal functions. | 
Value
Data.frame containing climate change scenarios available in BIEN.
Note
Details on the construction of BIEN range maps is available at http://bien.nceas.ucsb.edu/bien/biendata/bien-3/
See Also
Other range functions: 
OpenRange_api_load_species(),
OpenRange_api_species(),
OpenRange_get_license(),
OpenRange_get_stats(),
OpenRange_load_species(),
OpenRange_sf(),
OpenRange_species()
Other metadata functions: 
OpenRange_get_license(),
OpenRange_get_stats()
Examples
## Not run: 
cc_scenarios <- OpenRange_list_scenarios()
## End(Not run)
Load Open Range maps for specified species.
Description
OpenRange_load_species returns spatial data for the specified species.
Usage
OpenRange_load_species(
  species,
  default_only = TRUE,
  projection = 4326,
  scenario = "present",
  ...
)
Arguments
| species | A single species or a vector of species. | 
| default_only | Logical. Should only default ranges be included? Default is TRUE. | 
| projection | Numeric. What projection should maps be returned in? 4326 (default) or 3857 | 
| scenario | Which climate scenario(s) should be represented by maps? See BIEN_ranges_list_scenarios for options. | 
| ... | Additional arguments passed to internal functions. | 
Value
A SpatialPolygonsDataFrame containing range maps for the specified species.
See Also
Other range functions: 
OpenRange_api_load_species(),
OpenRange_api_species(),
OpenRange_get_license(),
OpenRange_get_stats(),
OpenRange_list_scenarios(),
OpenRange_sf(),
OpenRange_species()
Examples
#' 
library(maps)
library(ggplot2)
library(sf)
species_vector <- c("Abies_lasiocarpa","Abies_amabilis")
abies_maps <- OpenRange_load_species(species = species_vector)
# To get all maps for a species, use "default = FALSE".
# Here, this returns maps with different thresholds from the same model
std_all <- OpenRange_load_species(species = "Stellaria debilis",
                                  default_only = FALSE)
#To just get the default map, use "default = TRUE"
std_default <- OpenRange_load_species(species = "Stellaria debilis",
                                      default_only = TRUE)
#get world map
world <- map("world", plot = FALSE, fill = TRUE)|>
  st_as_sf()
#Plotting ranges
ggplot(data = world)+
  geom_sf()+
  geom_sf(data = abies_maps,
          mapping = aes(fill = species),
          alpha=0.5)+
  coord_sf(xlim = st_bbox(abies_maps)[c(1,3)],
           ylim = st_bbox(abies_maps)[c(2,4)]) +
  theme_bw()
Download range maps that intersect a user-supplied sf object.
Description
OpenRange_sf extracts range maps that intersect a specified SpatialPolygons or SpatialPolygonsDataFrame object.
Usage
OpenRange_sf(
  sf,
  directory,
  species.names.only = FALSE,
  return.species.list = TRUE,
  crop.ranges = FALSE,
  include.gid = FALSE,
  projection = 4326,
  scenario = "present",
  default_only = TRUE,
  ...
)
Arguments
| sf | An object of class sf | 
| directory | Directory that range maps should be saved in. | 
| species.names.only | Return species names rather than spatial data? Default is FALSE. | 
| return.species.list | Should a species list be returned in addition to downloading range maps? Default is FALSE | 
| crop.ranges | Should the ranges be cropped to the focal area? Default is FALSE. | 
| include.gid | Should the files returned have a unique GID appended to them? This is needed if downloading multiple maps for the same species. | 
| projection | Numeric. What projection should maps be returned in? 4326 (default) or 3857 | 
| scenario | Which climate scenario should be represented by maps? See BIEN_ranges_list_scenarios. | 
| default_only | Logical. Should only default ranges be included? Default is TRUE. | 
| ... | Additional arguments passed to internal functions. | 
Value
All range maps that intersect the user-supplied shapefile.
Note
Details on the construction of BIEN range maps is available at https://bien.nceas.ucsb.edu/bien/biendata/bien-3/
See Also
Other range functions: 
OpenRange_api_load_species(),
OpenRange_api_species(),
OpenRange_get_license(),
OpenRange_get_stats(),
OpenRange_list_scenarios(),
OpenRange_load_species(),
OpenRange_species()
Examples
saguaro_poly <- OpenRange_load_species("Carnegiea gigantea")
#Create a temp directory
temp_dir <- file.path(tempdir(), "BIEN_temp")
#Get range maps for all species with ranges that overlap the range range of saguaros
OpenRange_sf(sf = saguaro_poly,
           directory = temp_dir)
#Note that this will save many sfs to the directory (or working directory)
Download range maps for given species.
Description
OpenRange_species extracts range maps for the specified species.
Usage
OpenRange_species(
  species,
  directory,
  default_only = TRUE,
  matched = TRUE,
  match_names_only = FALSE,
  include_id = TRUE,
  projection = 4326,
  scenario = "present",
  ...
)
Arguments
| species | A single species or a vector of species. | 
| directory | Directory that range maps should be saved in. | 
| default_only | Logical. Should only default ranges be included? Default is TRUE. | 
| matched | Return a list of taxa that were downloaded. Default is TRUE. | 
| match_names_only | Check for range maps for the taxa specified without downloading range maps. Default is FALSE. | 
| include_id | Logical. Should the range_id be appended to the file name? Needed to save multiple maps per species. | 
| projection | Numeric. What projection should maps be returned in? 4326 (default) or 3857 | 
| scenario | Which climate scenario should be represented by maps? See BIEN_ranges_list_scenarios. | 
| ... | Additional arguments passed to internal functions. | 
Value
Range maps for specified species.
Note
Details on the construction of BIEN range maps is available at http://bien.nceas.ucsb.edu/bien/biendata/bien-3/
See Also
Other range functions: 
OpenRange_api_load_species(),
OpenRange_api_species(),
OpenRange_get_license(),
OpenRange_get_stats(),
OpenRange_list_scenarios(),
OpenRange_load_species(),
OpenRange_sf()
Examples
library(maps) #a convenient source of maps
library(sf)
species_vector <- c("Abies_lasiocarpa","Abies_amabilis")
#check whether the species are available
OpenRange_species(species_vector,match_names_only = TRUE)
#Create a temp directory
temp_dir <- file.path(tempdir(), "BIEN_temp")
#Download ranges
OpenRange_species(species = species_vector,
                 directory = temp_dir)#saves ranges to a temporary directory
#Reading files
Abies_poly <- st_read(dsn = temp_dir,
                     layer = "Abies_amabilis_117684")
#Plotting files
plot(Abies_poly[,1])#plots the range, but doesn't mean much without any reference
map('world', fill = TRUE, col = "grey")#plots a world map (WGS84 projection), in grey
plot(Abies_poly,col="forest green",add=TRUE) #adds the range of Abies lasiocarpa to the map
#Getting data from the files
Abies_poly |>
 st_drop_geometry()
Run an SQL query on the OpenRange database.
Description
ranges_sql is an internal function used to submit SQL queries.
Usage
ranges_sql(
  query,
  user = "public_bien",
  password = "bien_public",
  ranges = NULL,
  limit = NULL,
  return.query = FALSE,
  schema = "analytical_db",
  db_name = "vegbien",
  print.query = FALSE
)
Arguments
| query | A PostgreSQL query. | 
| user | The username used to access the BIEN database | 
| password | The password associated with the username | 
| ranges | Alternative value to be substituted for "ranges" in queries when not NULL. | 
| limit | A limit on the number of records to be returned. Should be a single number or NULL (the default). | 
| return.query | Should the query used be returned rather than executed? Default is FALSE | 
| schema | An alternative schema to be accessed. Used for testing purposes. | 
| db_name | An alternate database to be used rather than the default, vegbien. | 
| print.query | Should the query used be printed? Default is FALSE | 
Value
A dataframe returned by the query.