You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
2.5 KiB

make_study_bounds <- function(range_shapefile, expand_degrees = 5) {
seal_range <- terra::vect(range_shapefile)
bbox <- terra::ext(seal_range) |> terra::extend(expand_degrees)
list(
seal_range = seal_range,
lon_range = c(bbox$xmin, bbox$xmax),
lat_range = c(bbox$ymin, bbox$ymax)
)
}
download_biooracle_slice <- function(dynamic_layers, scenario_value, decade_start, lon_range, lat_range, download_root = "./data/bio-oracle-2") {
scenario_layers <- dynamic_layers |>
dplyr::filter(scenario == scenario_value)
time_point <- paste0(decade_start, "-01-01T00:00:00Z")
slice_constraints <- list(
time = c(time_point, time_point),
longitude = lon_range,
latitude = lat_range
)
download_dir <- file.path(download_root, scenario_value, decade_start)
dir.create(download_dir, recursive = TRUE, showWarnings = FALSE)
sapply(
scenario_layers$dataset_id,
function(id) biooracler::download_layers(
id,
constraints = slice_constraints,
directory = download_dir
),
simplify = TRUE
)
}
download_biooracle_slice_subset <- function(dynamic_layers, scenario_value, decade_start, layers_to_download, lon_range, lat_range, download_root = "./data/bio-oracle-2") {
scenario_layers <- dynamic_layers |>
dplyr::filter(
scenario == scenario_value &
var %in% layers_to_download$var &
depth %in% layers_to_download$depth
)
time_point <- paste0(decade_start, "-01-01T00:00:00Z")
slice_constraints <- list(
time = c(time_point, time_point),
longitude = lon_range,
latitude = lat_range
)
download_dir <- file.path(download_root, scenario_value, decade_start)
dir.create(download_dir, recursive = TRUE, showWarnings = FALSE)
sapply(
scenario_layers$dataset_id,
function(id) biooracler::download_layers(
id,
constraints = slice_constraints,
directory = download_dir
),
simplify = TRUE
)
}
set_brick_names_with_depth <- function(r) {
r_depths <- names(r) |> stringr::str_extract("depth[:alpha:]+")
r_longnames <- terra::longnames(r)
names(r) <- paste(r_longnames, r_depths)
r
}
assert_required_files <- function(paths) {
missing_paths <- paths[!file.exists(paths)]
if (length(missing_paths) > 0) {
stop(
paste0(
"Missing required file(s): ",
paste(missing_paths, collapse = ", "),
". Run learning pipeline first."
),
call. = FALSE
)
}
}