Ingest BirdLife.org’s Birds of the World (BOTW)

Published

2025-07-24 11:43:13

1 Overview

This script ingests the Birds of the World (BOTW) dataset from BirdLife.org, which is available as a GeoPackage file. The dataset contains information about bird species, their distributions, and other relevant data.

Code
librarian::shelf(
  DBI, dplyr, DT, duckdb, fs, glue, here, logger, mapview, readr, sf, stringr,
  rspatial/terra, # 1.8-61  2025-07-22
  tibble,
  quiet = T)
options(readr.show_col_types = F)

is_server <- Sys.info()[["sysname"]] == "Linux"
dir_data  <- ifelse(is_server, "/share/data", "~/My Drive/projects/msens/data") |>
  normalizePath()
cell_tif  <- glue("{dir_data}/derived/r_bio-oracle_planarea.tif")
er_gpkg   <- glue("{dir_data}/derived/ply_ecoregions_2025.gpkg")
sdm_db    <- glue("{dir_data}/derived/sdm.duckdb")
dir_bl    <- glue("{dir_data}/raw/birdlife.org")
dir_rast  <- glue("{dir_bl}/rast")
botw_gpkg <- glue("{dir_bl}/BOTW_GPKG_2024_2/BOTW_2024_2.gpkg")
log_txt   <- glue("{dir_rast}/_log 2025-07-23 01:04:17.350045.txt")

Layers:

  • main_BL_HBW_Checklist_V9: data frame with species information
  • all_species: geometries (some species missing)…
 [1] "Caloenas maculata"          "Rhinoplax vigil"            "Tanygnathus everetti"
 [4] "Cissa thalassina"           "Pycnonotus zeylanicus"      "Pycnonotus bimaculatus"
 [7] "Zosterops flavus"           "Garrulax rufifrons"         "Garrulax bicolor"
[10] "Pterorhinus courtoisi"      "Leucopsar rothschildi"      "Gracula robusta"
[13] "Cyornis banyumas"           "Chloropsis cochinchinensis"

TODO:

Code
# explore layers in the GeoPackage ----
# (d_lyrs <- st_layers(botw_gpkg))
#                 layer_name geometry_type features fields crs_name
# 1              all_species Multi Polygon    17379     19   WGS 84
# 2 main_BL_HBW_Checklist_V9            NA    11195     15     <NA>
#
# ply_all <- read_sf(botw_gpkg, d_lyrs$name[1])
# Simple feature collection with 17379 features and 18 fields
# Geometry type: GEOMETRY
# Dimension:     XY
# Bounding box:  xmin: -180 ymin: -85.58276 xmax: 180 ymax: 89.97895
# Geodetic CRS:  WGS 84
# # A tibble: 17,379 × 19
#      sisid sci_name presence origin seasonal source compiler data_sens sens_comm dist_comm tax_comm
#      <int> <chr>       <int>  <int>    <int> <chr>  <chr>        <int> <chr>     <chr>     <chr>   
#  1  2.27e7 Accipit…        1      1        2 del H… Philip …         0 " "       " "       " "     
#  2  2.27e7 Accipit…        1      1        4 Xeno … Hannah …         0 " "       " "       " "     
#  3  2.27e7 Accipit…        1      1        3 del H… Philip …         0 " "       " "       " "     
#  4  2.27e7 Acridot…        4      1        1 BirdL… Rob Mar…         0 " "       " "       " "     
#  5  2.27e7 Acridot…        1      1        1 eBird… Rob Mar…         0 " "       " "       " "     
#  6  2.27e7 Acridot…        1      5        1 eBird… Rob Mar…         0 " "       " "       " "     
#  7  2.27e7 Acridot…        1      3        1 Seng … Rob Mar…         0 " "       " "       " "     
#  8  2.27e7 Aegoliu…        1      1        1 Ding,… Rob Mar…         0 " "       " "       " "     
#  9  2.27e7 Aegoliu…        1      1        3 Cramp… Rob Mar…         0 " "       " "       " "     
# 10  2.27e7 Aepypod…        1      1        5 Mauro… Rob Mar…         0 " "       ""        ""      
# # ℹ 17,369 more rows
# # ℹ 8 more variables: generalisd <int>, citation <chr>, yrcompiled <int>, yrmodified <dbl>,
# #   version <chr>, Shape_Length <dbl>, Shape_Area <dbl>, Shape <MULTIPOLYGON [°]>
# # ℹ Use `print(n = ...)` to see more rows

# ply_hbw <- read_sf(botw_gpkg, d_lyrs$name[2])
#
# sci_all <- unique(ply_all$sci_name)
# sci_hbw <- unique(ply_hbw$ScientificName)
#
# (sci_all_not_hbw <- setdiff(sci_all, sci_hbw))
# character(0)
# (sci_hbw_not_all <- setdiff(sci_hbw, sci_all))
#  [1] "Caloenas maculata"          "Rhinoplax vigil"            "Tanygnathus everetti"
#  [4] "Cissa thalassina"           "Pycnonotus zeylanicus"      "Pycnonotus bimaculatus"
#  [7] "Zosterops flavus"           "Garrulax rufifrons"         "Garrulax bicolor"
# [10] "Pterorhinus courtoisi"      "Leucopsar rothschildi"      "Gracula robusta"
# [13] "Cyornis banyumas"           "Chloropsis cochinchinensis"
#
# d_hbw_dupes <- ply_hbw |> 
#   st_drop_geometry() |>
#   group_by(ScientificName) |>
#   summarize(
#     n           = n(),
#     common_name = first(CommonName),
#     .groups     = "drop")
# table(d_hbw_dupes$n)
#     1 
# 11195
# 
# CONCLUSION:
# - `main_BL_HBW_Checklist_V9` is data frame,
# - `all_species` the geometry (some species missing)
Code
d_spp <- read_sf(botw_gpkg, "main_BL_HBW_Checklist_V9")
p_spp <- read_sf(botw_gpkg, "all_species")

# table(d_spp$IUCN_RedList_Category_2024)
#       CR  CR (PE) CR (PEW)       DD       EN       EW       EX       LC       NT       VU 
#      204       18        1       38      395        5      164     8742      935      693

er1 <- read_sf(er_gpkg) |> st_union()  # [-180, 180]

# TODO: check Pink-footed Shearwater _Ardenna creatopus_ VU
# https://datazone.birdlife.org/species/factsheet/pink-footed-shearwater-ardenna-creatopus

# table(st_geometry_type(ply_spp))
# MULTIPOLYGON MULTISURFACE
#       17,212          167

r_cell   <- rast(cell_tif, lyrs = "cell_id") # [   0, 360]
r_cell_r <- rotate(r_cell)                   # [-180, 180]
ext(r_cell_r) <- round(ext(r_cell_r), 3)

spp <- unique(p_spp$sci_name) |> sort()
Code
log_txt <- glue("{dir_rast}/_log {Sys.time()}.txt")
log_appender(appender_file(log_txt))

for (i in 1:length(spp)){ # i = 102 # Acrocephalus_familiaris
  
  sp <- spp[i] # sp <- "Acanthis flammea"
  log_info("| INIT | {sp} | {i}/{length(spp)}")
  
  r_tif <- glue("{dir_rast}/{str_replace_all(sp, ' ', '_')}.tif")
  if (file.exists(r_tif)){
    log_info("| SKIP | {sp} | tif already exists")
    next()
  }

  p <- p_spp |> 
    filter(
      sci_name               == !!sp,
      presence               %in% c(1,2,3), 
      # presence -- 1: Extant, 2: Probably Extant, 3: Possibly Extant
      st_geometry_type(geom) != "MULTISURFACE") |> 
    mutate(
      value = 50L) # default value of 50%
  if (nrow(p) == 0){
    log_info("| SKIP | {sp} | no valid geometry for species")
    next()
  }
  # mapView(p)
  
  p <- try(
    p |> 
      st_make_valid() |> 
      st_filter(er1, .predicate = st_intersects),
    silent = T)
  # mapView(p)
  if (inherits(p, "try-error")){
    log_info("| SKIP | {sp} | error in st_make_valid(), st_filter(): {p}")
    next()
  }
  if (nrow(p) == 0){
    log_info("| SKIP | {sp} | not intersecting ecoregions")
    next()
  }
  
  r <- try(
    rasterize(
      p,
      r_cell_r, 
      field = "value") |> 
      # trim() |> 
      # mapView()
      rotate() |> 
      crop(r_cell) |> 
      mask(r_cell),
    silent = T)
  # plot(trim(r))
  if (inherits(r, "try-error")){
    log_info("| SKIP | {sp} | error in rasterize(),...: {r}")
    next()
  }
  n_cells <- length(values(r, na.rm = T))
  if (n_cells == 0){
    log_info("| SKIP | {sp} | rast has no values")
    next()
  }
  names(r) <- sp
  round(ext(r), 3)
  # plet(rotate(r))
  # as.polygons(rotate(r)) |> mapView()
    
  log_info("| WRITE | {sp} | {format(n_cells, big.mark=',')} cells")
  writeRaster(
    r, 
    filename = r_tif,
    overwrite = T)
}
# INFO [2025-07-23 00:26:20]   1/11181: Abeillia abeillei
# INFO [2025-07-23 00:31:19] 261/11181: Agelaius xanthomus
# (260/5) * 11181 / 60 = 4 hrs to completion
 
# d <- as.data.frame(r, cells = T, na.rm = T) |>
#   tibble() |>
#   # cell | `Acanthis flammea`
#   select(cell_id = cell, value = 2)
# dbWriteTable(con_sdm, "species", d, append = TRUE)
#     cell_id value
#     <int> <int>
# 1  276146     1
# 2  276147     1
# 3  276148     1

# ply_spp_er |> 
#   st_drop_geometry() |> 
#   group_by(sci_name) |> 
#   summarize(
#     n_ply   = n(),
#     .groups = "drop") |> 
#   left_join(
#     d_spp,
#     by = c("sci_name" = "ScientificName")) |> 
#   pull(IUCN_RedList_Category_2024) |> 
#   table()

# TODO: check out "Struthio camelus", "Aegolius funereus"
# TODO: fill out other lookup fields
# mutate(
#   origin = case_when(
#     origin == 1 ~ "Native",
#     origin == 2 ~ "Reintroduced",
#     origin == 3 ~ "Introduced",
#     origin == 4 ~ "Vagrant",
#     origin == 5 ~ "Origin Uncertain",
#     origin == 6 ~ "Assisted Colonisation",
#     TRUE ~ NA_character_))
Code
d_log <- readLines(log_txt) |> 
  str_subset("^INFO") |>    # remove extra lines from error output
  paste(collapse = "\n") |> 
  read_delim(
    delim = " | ",
    col_names = c("info", "type", "sp", "msg")) |> 
  mutate(across(everything(), str_trim)) |>
  mutate(
    time = str_extract(info, "\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}") |> 
      as.POSIXct(),
    level = str_extract(info, "INFO|DEBUG|ERROR|WARN")) |> 
  filter(type != "INIT") |> 
  mutate(
    msg = str_replace(msg, "error.+", "error reading geometry")) |>
  mutate(
    tif_created = case_when(
      msg  == "tif already exists" ~ T, #  39
      type == "WRITE" ~ T,              # 496
      .default = F),                    # 535: sum
    has_problem = case_when(
      type == "SKIP" & !(msg %in% c(
        "not intersecting ecoregions", 
        "tif already exists")) ~ T,     # T:    443
      .default = F))                    # F: 10,620

# DEBUG ----
# summarize
list(
  `TIF created` = sum(d_log$tif_created),
  `outside USA` = d_log |> filter(!tif_created, !has_problem) |> nrow(),
  `has problem` = sum(d_log$has_problem)) |> 
  enframe(name = "status", value = "count") |>
  mutate(
    count = unlist(count)) |> 
  datatable(
    caption = "Summary of TIF creation and issues",
    options = list(dom = 't')) |> 
  formatRound(columns = "count", digits = 0, mark = ",")
Code
d_log |> 
  filter(tif_created) |> 
  select(sp) |> 
  arrange(sp) |> 
  select(species = sp) |> 
  datatable(
    caption = "Species with created TIF files intersecting USA waters.")
Code
d_log |> 
  filter(!tif_created, !has_problem) |> 
  select(sp) |> 
  arrange(sp) |> 
  select(species = sp) |> 
  datatable(
    caption = "Species without TIF files not intersecting USA waters.")
Warning in instance$preRenderHook(instance): It seems your data is too big for
client-side DataTables. You may consider server-side processing:
https://rstudio.github.io/DT/server.html
Code
d_log |> 
  filter(has_problem) |> 
  arrange(sp) |> 
  select(species = sp, problem = msg) |> 
  datatable(
    caption = "Species with problems encountered during processing.")
Code
d_log |> 
  filter(has_problem) |> 
  select(problem = msg) |> 
  group_by(problem) |>
  summarize(
    count = n(),
    .groups = "drop") |>
  arrange(desc(count)) |>
  datatable(
    caption = "Problems encountered during processing",
    options = list(dom = 't'))
  • error reading geometry: even after applying sf::st_make_valid(), loops are detected when checking for intersection with ecoregions.
  • no valid geometry for species: no valid geometry after applying filter for presence (1: Extant, 2: Probably Extant, 3: Possibly Extant), and removing geometry types of MULTISURFACE.
  • rast has no values: the raster has no values after rasterizing the geometries, despite the geometry being valid and intersecting with ecoregions.
Code
# knitr::opts_chunk$set(eval = F)

2 Insert into Database

Code
# con_spp <- dbConnect(duckdb(dbdir = spp_db, read_only = T))
con_sdm <- dbConnect(duckdb(dbdir = sdm_db, read_only = F))
# dbListTables(con_sdm)
# tbl(con_sdm, "species") |> 
#   filter(common_name_dataset == "blue whale") |> 
#   collect() |> 
#   View()

2.1 Add dataset

Code
ds_key      <- "bl"
row_dataset <- tibble(
  ds_key          = !!ds_key,
  name_short      = "BirdLife Birds of the World, 2024",
  name_original   = "BirdLife International and Handbook of the Birds of the World (2024)",
  description     = "This dataset contains digital distribution information for the world’s birds. It is a joint product of BirdLife International and Handbook of the Birds of the World.",
  citation        = "",
  source_broad    = "BirdLife",
  source_detail   = "http://datazone.birdlife.org",
  # TODO: citation
  # BirdLife International and Handbook of the Birds of the World (2024) Bird species distribution maps of the world. Version 2024.2. Available at http://datazone.birdlife.org/species/requestdis.
  regions         = "Global",
  response_type   = "binary",
  taxa_groups     = "birds",
  year_pub        = 2024,
  date_obs_beg    = NA,
  date_obs_end    = NA,
  date_env_beg    = NA,
  date_env_end    = NA,
  link_info       = "http://datazone.birdlife.org/species/requestdis",
  link_download   = "http://datazone.birdlife.org/species/requestdis",
  link_metadata   = "https://www.fisheries.noaa.gov/inport/item/65207",
  links_other     = "https://noaa.maps.arcgis.com/apps/webappviewer/index.html?id=68d8df16b39c48fe9f60640692d0e318",
  spatial_res_deg = 0.05,
  temporal_res    = "static" )

if (dbExistsTable(con_sdm, "dataset"))
  dbExecute(con_sdm, glue("DELETE FROM dataset WHERE ds_key = '{ds_key}'"))
[1] 1
Code
dbWriteTable(con_sdm, "dataset", row_dataset, append = TRUE)

2.2 Add species

Code
r_spp <- rast(dir_ls(dir_rast, glob = "*.tif"))
names(r_spp)
  [1] "Acanthis flammea"            "Accipiter soloensis"        
  [3] "Accipiter striatus"          "Acridotheres tristis"       
  [5] "Actitis macularius"          "Aechmophorus occidentalis"  
  [7] "Aegolius acadicus"           "Aethia cristatella"         
  [9] "Aethia pusilla"              "Aethia pygmaea"             
 [11] "Agelaius phoeniceus"         "Aix sponsa"                 
 [13] "Alauda arvensis"             "Alca torda"                 
 [15] "Alectoris chukar"            "Alectoris graeca"           
 [17] "Alexandrinus krameri"        "Alle alle"                  
 [19] "Amandava amandava"           "Amazona ochrocephala"       
 [21] "Amazona oratrix"             "Amazona ventralis"          
 [23] "Amazona viridigenalis"       "Anas acuta"                 
 [25] "Anas bahamensis"             "Anas carolinensis"          
 [27] "Anas crecca"                 "Anas platyrhynchos"         
 [29] "Anas superciliosa"           "Anas wyvilliana"            
 [31] "Anhinga anhinga"             "Anous ceruleus"             
 [33] "Anous minutus"               "Anser albifrons"            
 [35] "Anser caerulescens"          "Anser canagicus"            
 [37] "Anser fabalis"               "Anthracothorax aurulentus"  
 [39] "Anthracothorax viridis"      "Anthus cervinus"            
 [41] "Anthus rubescens"            "Antrostomus carolinensis"   
 [43] "Antrostomus noctitherus"     "Aplonis atrifusca"          
 [45] "Aplonis opaca"               "Aplonis tabuensis"          
 [47] "Aquila chrysaetos"           "Ara ararauna"               
 [49] "Aratinga nenday"             "Archilochus colubris"       
 [51] "Ardea herodias"              "Ardea intermedia"           
 [53] "Ardea occidentalis"          "Ardenna bulleri"            
 [55] "Ardenna carneipes"           "Ardenna creatopus"          
 [57] "Ardenna gravis"              "Ardenna grisea"             
 [59] "Ardenna pacifica"            "Ardenna tenuirostris"       
 [61] "Arenaria interpres"          "Arenaria melanocephala"     
 [63] "Asio flammeus"               "Asio otus"                  
 [65] "Aythya affinis"              "Aythya collaris"            
 [67] "Aythya fuligula"             "Aythya marila"              
 [69] "Aythya valisineria"          "Bartramia longicauda"       
 [71] "Botaurus lentiginosus"       "Brachyramphus brevirostris" 
 [73] "Brachyramphus marmoratus"    "Branta bernicla"            
 [75] "Branta hutchinsii"           "Brotogeris versicolurus"    
 [77] "Bubo scandiacus"             "Bubo virginianus"           
 [79] "Bubulcus ibis"               "Bucephala albeola"          
 [81] "Bucephala clangula"          "Bucephala islandica"        
 [83] "Bulweria bulwerii"           "Buteo jamaicensis"          
 [85] "Buteo lagopus"               "Buteo platypterus"          
 [87] "Buteo solitarius"            "Butorides striata"          
 [89] "Cacatua goffiniana"          "Cairina moschata"           
 [91] "Calcarius lapponicus"        "Calidris acuminata"         
 [93] "Calidris alpina"             "Calidris bairdii"           
 [95] "Calidris canutus"            "Calidris fuscicollis"       
 [97] "Calidris himantopus"         "Calidris melanotos"         
 [99] "Calidris minutilla"          "Calidris ptilocnemis"       
[101] "Calidris pugnax"             "Calidris pusilla"           
[103] "Calidris ruficollis"         "Calidris subruficollis"     
[105] "Calidris tenuirostris"       "Calidris virgata"           
[107] "Callipepla californica"      "Callipepla gambelii"        
[109] "Calonectris leucomelas"      "Canachites canadensis"      
[111] "Cardellina pusilla"          "Cardinalis cardinalis"      
[113] "Catharacta maccormicki"      "Catharacta skua"            
[115] "Cathartes aura"              "Catharus guttatus"          
[117] "Catharus swainsoni"          "Catharus ustulatus"         
[119] "Cepphus columba"             "Cepphus grylle"             
[121] "Cerorhinca monocerata"       "Certhia americana"          
[123] "Chaetura pelagica"           "Charadrius hiaticula"       
[125] "Charadrius melodus"          "Charadrius mongolus"        
[127] "Charadrius nivosus"          "Charadrius semipalmatus"    
[129] "Charadrius vociferus"        "Charadrius wilsonia"        
[131] "Chlidonias niger"            "Chloris sinica"             
[133] "Chordeiles gundlachii"       "Chordeiles minor"           
[135] "Cinclus mexicanus"           "Circus hudsonius"           
[137] "Clangula hyemalis"           "Clytorhynchus vitiensis"    
[139] "Coccyzus americanus"         "Coccyzus erythropthalmus"   
[141] "Coccyzus minor"              "Coccyzus vieilloti"         
[143] "Coereba flaveola"            "Columba livia"              
[145] "Columbina passerina"         "Contopus cooperi"           
[147] "Contopus latirostris"        "Copsychus malabaricus"      
[149] "Corthylio calendula"         "Corvus brachyrhynchos"      
[151] "Corvus corax"                "Corvus kubaryi"             
[153] "Coturnix coturnix"           "Coturnix japonica"          
[155] "Crithagra mozambica"         "Crotophaga ani"             
[157] "Cyanocitta cristata"         "Cygnus columbianus"         
[159] "Cygnus cygnus"               "Cygnus olor"                
[161] "Cypseloides niger"           "Dendrocygna arborea"        
[163] "Dendrocygna autumnalis"      "Dendrocygna bicolor"        
[165] "Dicrurus macrocercus"        "Dolichonyx oryzivorus"      
[167] "Dryobates pubescens"         "Ducula pacifica"            
[169] "Egretta caerulea"            "Egretta sacra"              
[171] "Egretta thula"               "Egretta tricolor"           
[173] "Elaenia martinica"           "Elanoides forficatus"       
[175] "Eremophila alpestris"        "Estrilda astrild"           
[177] "Estrilda melpoda"            "Estrilda troglodytes"       
[179] "Eudromias morinellus"        "Eulampis holosericeus"      
[181] "Euodice malabarica"          "Euphagus carolinus"         
[183] "Euphonia musica"             "Euphonia sclateri"          
[185] "Euplectes afer"              "Euplectes franciscanus"     
[187] "Eupsittula canicularis"      "Falco peregrinus"           
[189] "Falco rusticolus"            "Falco sparverius"           
[191] "Foulehaio carunculatus"      "Francolinus francolinus"    
[193] "Fratercula arctica"          "Fratercula cirrhata"        
[195] "Fratercula corniculata"      "Fregata ariel"              
[197] "Fregata magnificens"         "Fregata minor"              
[199] "Fregetta grallaria"          "Fregetta lineata"           
[201] "Fregetta tropica"            "Fulica alai"                
[203] "Fulica americana"            "Fulmarus glacialis"         
[205] "Gallinago delicata"          "Gallinago gallinago"        
[207] "Gallinago megala"            "Gallinula galeata"          
[209] "Gallus gallus"               "Gavia adamsii"              
[211] "Gavia immer"                 "Gavia pacifica"             
[213] "Gavia stellata"              "Gelochelidon nilotica"      
[215] "Geothlypis formosa"          "Geothlypis trichas"         
[217] "Geotrygon chrysia"           "Geotrygon montana"          
[219] "Geotrygon mystacea"          "Glareola maldivarum"        
[221] "Glaucestrilda coerulescens"  "Grus canadensis"            
[223] "Gygis candida"               "Gygis microrhyncha"         
[225] "Gymnasio nudipes"            "Haematopus ater"            
[227] "Haematopus palliatus"        "Haemorhous mexicanus"       
[229] "Haliaeetus albicilla"        "Haliaeetus leucocephalus"   
[231] "Helmitheros vermivorum"      "Hirundo rustica"            
[233] "Histrionicus histrionicus"   "Horornis canturians"        
[235] "Horornis diphone"            "Hydrobates castro"          
[237] "Hydrobates furcatus"         "Hydrobates homochroa"       
[239] "Hydrobates jabejabe"         "Hydrobates leucorhous"      
[241] "Hydrobates matsudairae"      "Hydrobates melania"         
[243] "Hydrobates microsoma"        "Hydrobates pelagicus"       
[245] "Hydrobates socorroensis"     "Hydrobates tristrami"       
[247] "Hypotaenidia philippensis"   "Icterus galbula"            
[249] "Icterus icterus"             "Icterus pectoralis"         
[251] "Icterus portoricensis"       "Ixobrychus exilis"          
[253] "Ixobrychus sinensis"         "Lagopus lagopus"            
[255] "Lagopus muta"                "Lanius borealis"            
[257] "Larus atricilla"             "Larus californicus"         
[259] "Larus canus"                 "Larus delawarensis"         
[261] "Larus fuscus"                "Larus glaucescens"          
[263] "Larus heermanni"             "Larus hyperboreus"          
[265] "Larus occidentalis"          "Larus philadelphia"         
[267] "Larus pipixcan"              "Larus schistisagus"         
[269] "Larus smithsonianus"         "Laterallus flaviventer"     
[271] "Laterallus jamaicensis"      "Leiothrix lutea"            
[273] "Leuconotopicus borealis"     "Leuconotopicus villosus"    
[275] "Leucosticte tephrocotis"     "Limnodromus griseus"        
[277] "Limnodromus scolopaceus"     "Limnothlypis swainsonii"    
[279] "Limosa fedoa"                "Limosa lapponica"           
[281] "Lonchura atricapilla"        "Lonchura malacca"           
[283] "Lonchura punctulata"         "Lophodytes cucullatus"      
[285] "Lophura leucomelanos"        "Loxigilla noctis"           
[287] "Luscinia svecica"            "Mareca americana"           
[289] "Mareca penelope"             "Mareca strepera"            
[291] "Margarops fuscatus"          "Megaceryle alcyon"          
[293] "Megapodius laperouse"        "Megascops asio"             
[295] "Melanerpes carolinus"        "Melanerpes erythrocephalus" 
[297] "Melanerpes portoricensis"    "Melanitta americana"        
[299] "Melanitta deglandi"          "Melanitta perspicillata"    
[301] "Melanitta stejnegeri"        "Melanospiza bicolor"        
[303] "Meleagris gallopavo"         "Melopyrrha portoricensis"   
[305] "Melospiza melodia"           "Mergellus albellus"         
[307] "Mergus merganser"            "Mergus serrator"            
[309] "Mimus polyglottos"           "Mniotilta varia"            
[311] "Molothrus bonariensis"       "Morus bassanus"             
[313] "Motacilla tschutschensis"    "Myiarchus antillarum"       
[315] "Myiopsitta monachus"         "Myzomela cardinalis"        
[317] "Myzomela rubratra"           "Nannopterum auritum"        
[319] "Nesofregetta fuliginosa"     "Nomonyx dominicus"          
[321] "Numenius phaeopus"           "Numenius tahitiensis"       
[323] "Numida meleagris"            "Nyctanassa violacea"        
[325] "Nycticorax nycticorax"       "Oceanites oceanicus"        
[327] "Oenanthe oenanthe"           "Onychoprion aleuticus"      
[329] "Onychoprion anaethetus"      "Onychoprion fuscatus"       
[331] "Onychoprion lunatus"         "Orthorhyncus cristatus"     
[333] "Ortygornis pondicerianus"    "Padda oryzivora"            
[335] "Parkesia motacilla"          "Parkesia noveboracensis"    
[337] "Paroaria coronata"           "Passer domesticus"          
[339] "Passer montanus"             "Passerculus henslowii"      
[341] "Passerculus sandwichensis"   "Passerella arborea"         
[343] "Passerella unalaschcensis"   "Passerina caerulea"         
[345] "Passerina cyanea"            "Patagioenas inornata"       
[347] "Patagioenas leucocephala"    "Patagioenas squamosa"       
[349] "Pavo cristatus"              "Pelagodroma marina"         
[351] "Pelecanus occidentalis"      "Petrochelidon fulva"        
[353] "Petrochelidon pyrrhonota"    "Phaethon aethereus"         
[355] "Phaethon lepturus"           "Phaethon rubricauda"        
[357] "Phalaropus fulicarius"       "Phalaropus lobatus"         
[359] "Phasianus colchicus"         "Phasianus versicolor"       
[361] "Pheucticus ludovicianus"     "Phoebastria albatrus"       
[363] "Phoebastria immutabilis"     "Phoebastria nigripes"       
[365] "Phoenicopterus ruber"        "Phylloscopus borealis"      
[367] "Pica hudsonia"               "Plectrophenax hyperboreus"  
[369] "Plectrophenax nivalis"       "Plegadis falcinellus"       
[371] "Pluvialis dominica"          "Pluvialis fulva"            
[373] "Pluvialis squatarola"        "Podiceps auritus"           
[375] "Podilymbus podiceps"         "Polysticta stelleri"        
[377] "Pooecetes gramineus"         "Porphyrio martinicus"       
[379] "Porphyrio porphyrio"         "Porzana carolina"           
[381] "Procellaria aequinoctialis"  "Procellaria parkinsoni"     
[383] "Progne dominicensis"         "Progne subis"               
[385] "Protonotaria citrea"         "Prunella montanella"        
[387] "Pseudobulweria rostrata"     "Psittacara acuticaudatus"   
[389] "Psittacara erythrogenys"     "Pternistis erckelii"        
[391] "Pterodroma alba"             "Pterodroma arminjoniana"    
[393] "Pterodroma brevipes"         "Pterodroma cahow"           
[395] "Pterodroma cervicalis"       "Pterodroma cookii"          
[397] "Pterodroma deserta"          "Pterodroma externa"         
[399] "Pterodroma feae"             "Pterodroma hasitata"        
[401] "Pterodroma heraldica"        "Pterodroma hypoleuca"       
[403] "Pterodroma inexpectata"      "Pterodroma leucoptera"      
[405] "Pterodroma longirostris"     "Pterodroma neglecta"        
[407] "Pterodroma nigripennis"      "Pterodroma pycrofti"        
[409] "Pterodroma sandwichensis"    "Pterodroma solandri"        
[411] "Pterodroma ultima"           "Pterorhinus caerulatus"     
[413] "Ptilinopus fasciatus"        "Ptilinopus perousii"        
[415] "Ptilinopus roseicapilla"     "Ptychoramphus aleuticus"    
[417] "Puffinus bailloni"           "Puffinus bannermani"        
[419] "Puffinus bryani"             "Puffinus nativitatis"       
[421] "Puffinus newelli"            "Puffinus opisthomelas"      
[423] "Pycnonotus cafer"            "Pycnonotus jocosus"         
[425] "Pyrocephalus rubinus"        "Quiscalus niger"            
[427] "Quiscalus quiscula"          "Rallus crepitans"           
[429] "Rallus elegans"              "Rallus limicola"            
[431] "Regulus satrapa"             "Rhipidura rufifrons"        
[433] "Rhodostethia rosea"          "Riccordia maugaeus"         
[435] "Riparia riparia"             "Rissa brevirostris"         
[437] "Rynchops niger"              "Sayornis phoebe"            
[439] "Sayornis saya"               "Scolopax minor"             
[441] "Seiurus aurocapilla"         "Serinus canaria"            
[443] "Setophaga adelaidae"         "Setophaga americana"        
[445] "Setophaga caerulescens"      "Setophaga cerulea"          
[447] "Setophaga citrina"           "Setophaga coronata"         
[449] "Setophaga discolor"          "Setophaga dominica"         
[451] "Setophaga magnolia"          "Setophaga palmarum"         
[453] "Setophaga pensylvanica"      "Setophaga petechia"         
[455] "Setophaga ruticilla"         "Setophaga striata"          
[457] "Setophaga tigrina"           "Sicalis flaveola"           
[459] "Somateria fischeri"          "Somateria spectabilis"      
[461] "Spatula clypeata"            "Spatula discors"            
[463] "Spatula querquedula"         "Spermestes cucullata"       
[465] "Sphyrapicus varius"          "Spilopelia chinensis"       
[467] "Spindalis portoricensis"     "Spinus cucullatus"          
[469] "Spiza americana"             "Steganopus tricolor"        
[471] "Stelgidopteryx serripennis"  "Stercorarius longicaudus"   
[473] "Stercorarius parasiticus"    "Stercorarius pomarinus"     
[475] "Sterna forsteri"             "Sterna hirundo"             
[477] "Sterna paradisaea"           "Sternula albifrons"         
[479] "Sternula antillarum"         "Streptopelia roseogrisea"   
[481] "Strix varia"                 "Sturnus vulgaris"           
[483] "Sula dactylatra"             "Sula leucogaster"           
[485] "Sula sula"                   "Synthliboramphus antiquus"  
[487] "Synthliboramphus craveri"    "Synthliboramphus hypoleucus"
[489] "Synthliboramphus scrippsi"   "Tachybaptus dominicus"      
[491] "Tachycineta bicolor"         "Thalassarche eremita"       
[493] "Thalasseus bergii"           "Thalasseus elegans"         
[495] "Thalasseus maximus"          "Thalasseus sandvicensis"    
[497] "Thryothorus ludovicianus"    "Tiaris olivaceus"           
[499] "Todiramphus chloris"         "Todus mexicanus"            
[501] "Toxostoma rufum"             "Tringa brevipes"            
[503] "Tringa flavipes"             "Tringa glareola"            
[505] "Tringa incana"               "Tringa melanoleuca"         
[507] "Tringa nebularia"            "Tringa semipalmata"         
[509] "Tringa solitaria"            "Troglodytes pacificus"      
[511] "Turdus ardosiaceus"          "Turdus migratorius"         
[513] "Tyrannus caudifasciatus"     "Tyrannus dominicensis"      
[515] "Tyto alba"                   "Uraeginthus bengalus"       
[517] "Uria aalge"                  "Uria lomvia"                
[519] "Urile pelagicus"             "Urile penicillatus"         
[521] "Urile urile"                 "Urodynamis taitensis"       
[523] "Vermivora chrysoptera"       "Vermivora cyanoptera"       
[525] "Vidua macroura"              "Vireo altiloquus"           
[527] "Vireo flavifrons"            "Vireo griseus"              
[529] "Vireo latimeri"              "Vireo olivaceus"            
[531] "Xema sabini"                 "Zapornia tabuensis"         
[533] "Zenaida asiatica"            "Zenaida aurita"             
[535] "Zenaida macroura"            "Zonotrichia albicollis"     
[537] "Zonotrichia atricapilla"     "Zonotrichia leucophrys"     
[539] "Zosterops japonicus"        

3 Close Database

Code
dbDisconnect(con_sdm, shutdown = T); rm(con_sdm)
Code
devtools::session_info()
─ Session info ───────────────────────────────────────────────────────────────
 setting  value
 version  R version 4.4.3 (2025-02-28)
 os       macOS Sequoia 15.5
 system   aarch64, darwin20
 ui       X11
 language (EN)
 collate  en_US.UTF-8
 ctype    en_US.UTF-8
 tz       Europe/Rome
 date     2025-07-24
 pandoc   3.4 @ /Applications/RStudio.app/Contents/Resources/app/quarto/bin/tools/aarch64/ (via rmarkdown)
 quarto   1.7.31 @ /usr/local/bin/quarto

─ Packages ───────────────────────────────────────────────────────────────────
 package      * version date (UTC) lib source
 base64enc      0.1-3   2015-07-28 [1] CRAN (R 4.4.1)
 bit            4.6.0   2025-03-06 [1] CRAN (R 4.4.1)
 bit64          4.6.0-1 2025-01-16 [1] CRAN (R 4.4.1)
 bslib          0.9.0   2025-01-30 [1] CRAN (R 4.4.1)
 cachem         1.1.0   2024-05-16 [1] CRAN (R 4.4.1)
 class          7.3-23  2025-01-01 [1] CRAN (R 4.4.3)
 classInt       0.4-11  2025-01-08 [1] CRAN (R 4.4.1)
 cli            3.6.5   2025-04-23 [1] CRAN (R 4.4.1)
 codetools      0.2-20  2024-03-31 [1] CRAN (R 4.4.3)
 colorspace     2.1-1   2024-07-26 [1] CRAN (R 4.4.1)
 crayon         1.5.3   2024-06-20 [1] CRAN (R 4.4.1)
 crosstalk      1.2.1   2023-11-23 [1] CRAN (R 4.4.0)
 DBI          * 1.2.3   2024-06-02 [1] CRAN (R 4.4.1)
 devtools       2.4.5   2022-10-11 [1] CRAN (R 4.4.0)
 digest         0.6.37  2024-08-19 [1] CRAN (R 4.4.1)
 dplyr        * 1.1.4   2023-11-17 [1] CRAN (R 4.4.0)
 DT           * 0.33    2024-04-04 [1] CRAN (R 4.4.0)
 duckdb       * 1.3.1   2025-06-23 [1] CRAN (R 4.4.1)
 e1071          1.7-16  2024-09-16 [1] CRAN (R 4.4.1)
 ellipsis       0.3.2   2021-04-29 [1] CRAN (R 4.4.1)
 evaluate       1.0.4   2025-06-18 [1] CRAN (R 4.4.1)
 farver         2.1.2   2024-05-13 [1] CRAN (R 4.4.1)
 fastmap        1.2.0   2024-05-15 [1] CRAN (R 4.4.1)
 fs           * 1.6.6   2025-04-12 [1] CRAN (R 4.4.1)
 generics       0.1.4   2025-05-09 [1] CRAN (R 4.4.1)
 glue         * 1.8.0   2024-09-30 [1] CRAN (R 4.4.1)
 here         * 1.0.1   2020-12-13 [1] CRAN (R 4.4.1)
 hms            1.1.3   2023-03-21 [1] CRAN (R 4.4.0)
 htmltools      0.5.8.1 2024-04-04 [1] CRAN (R 4.4.1)
 htmlwidgets    1.6.4   2023-12-06 [1] CRAN (R 4.4.0)
 httpuv         1.6.16  2025-04-16 [1] CRAN (R 4.4.1)
 jquerylib      0.1.4   2021-04-26 [1] CRAN (R 4.4.0)
 jsonlite       2.0.0   2025-03-27 [1] CRAN (R 4.4.1)
 KernSmooth     2.23-26 2025-01-01 [1] CRAN (R 4.4.3)
 knitr          1.50    2025-03-16 [1] CRAN (R 4.4.1)
 later          1.4.2   2025-04-08 [1] CRAN (R 4.4.1)
 lattice        0.22-7  2025-04-02 [1] CRAN (R 4.4.1)
 leafem         0.2.4   2025-05-01 [1] CRAN (R 4.4.1)
 leaflet        2.2.2   2024-03-26 [1] CRAN (R 4.4.0)
 librarian      1.8.1   2021-07-12 [1] CRAN (R 4.4.0)
 lifecycle      1.0.4   2023-11-07 [1] CRAN (R 4.4.1)
 logger       * 0.4.0   2024-10-22 [1] CRAN (R 4.4.1)
 magrittr       2.0.3   2022-03-30 [1] CRAN (R 4.4.1)
 mapview      * 2.11.2  2023-10-13 [1] CRAN (R 4.4.0)
 memoise        2.0.1   2021-11-26 [1] CRAN (R 4.4.0)
 mime           0.13    2025-03-17 [1] CRAN (R 4.4.1)
 miniUI         0.1.2   2025-04-17 [1] CRAN (R 4.4.1)
 pillar         1.11.0  2025-07-04 [1] CRAN (R 4.4.1)
 pkgbuild       1.4.8   2025-05-26 [1] CRAN (R 4.4.1)
 pkgconfig      2.0.3   2019-09-22 [1] CRAN (R 4.4.1)
 pkgload        1.4.0   2024-06-28 [1] CRAN (R 4.4.0)
 png            0.1-8   2022-11-29 [1] CRAN (R 4.4.1)
 profvis        0.4.0   2024-09-20 [1] CRAN (R 4.4.1)
 promises       1.3.3   2025-05-29 [1] CRAN (R 4.4.1)
 proxy          0.4-27  2022-06-09 [1] CRAN (R 4.4.1)
 purrr          1.1.0   2025-07-10 [1] CRAN (R 4.4.1)
 R6             2.6.1   2025-02-15 [1] CRAN (R 4.4.1)
 raster         3.6-32  2025-03-28 [1] CRAN (R 4.4.1)
 RColorBrewer   1.1-3   2022-04-03 [1] CRAN (R 4.4.1)
 Rcpp           1.1.0   2025-07-02 [1] CRAN (R 4.4.1)
 readr        * 2.1.5   2024-01-10 [1] CRAN (R 4.4.0)
 remotes        2.5.0   2024-03-17 [1] CRAN (R 4.4.1)
 rlang          1.1.6   2025-04-11 [1] CRAN (R 4.4.1)
 rmarkdown      2.29    2024-11-04 [1] CRAN (R 4.4.1)
 rprojroot      2.1.0   2025-07-12 [1] CRAN (R 4.4.1)
 rstudioapi     0.17.1  2024-10-22 [1] CRAN (R 4.4.1)
 sass           0.4.10  2025-04-11 [1] CRAN (R 4.4.1)
 satellite      1.0.5   2024-02-10 [1] CRAN (R 4.4.0)
 scales         1.4.0   2025-04-24 [1] CRAN (R 4.4.1)
 sessioninfo    1.2.3   2025-02-05 [1] CRAN (R 4.4.1)
 sf           * 1.0-21  2025-05-15 [1] CRAN (R 4.4.1)
 shiny          1.10.0  2024-12-14 [1] CRAN (R 4.4.1)
 sp             2.2-0   2025-02-01 [1] CRAN (R 4.4.1)
 stringi        1.8.7   2025-03-27 [1] CRAN (R 4.4.1)
 stringr      * 1.5.1   2023-11-14 [1] CRAN (R 4.4.0)
 terra        * 1.8-61  2025-07-22 [1] Github (rspatial/terra@656d753)
 tibble       * 3.3.0   2025-06-08 [1] CRAN (R 4.4.1)
 tidyselect     1.2.1   2024-03-11 [1] CRAN (R 4.4.0)
 tzdb           0.5.0   2025-03-15 [1] CRAN (R 4.4.1)
 units          0.8-7   2025-03-11 [1] CRAN (R 4.4.1)
 urlchecker     1.0.1   2021-11-30 [1] CRAN (R 4.4.1)
 usethis        3.1.0   2024-11-26 [1] CRAN (R 4.4.1)
 vctrs          0.6.5   2023-12-01 [1] CRAN (R 4.4.0)
 vroom          1.6.5   2023-12-05 [1] CRAN (R 4.4.0)
 withr          3.0.2   2024-10-28 [1] CRAN (R 4.4.1)
 xfun           0.52    2025-04-02 [1] CRAN (R 4.4.1)
 xtable         1.8-4   2019-04-21 [1] CRAN (R 4.4.1)
 yaml           2.3.10  2024-07-26 [1] CRAN (R 4.4.1)

 [1] /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library
 * ── Packages attached to the search path.

──────────────────────────────────────────────────────────────────────────────