|
| 1 | +#' Get a spatial basemap |
| 2 | +#' |
| 3 | +#' This function (down)loads and caches a basemap from a defined extent \code{ext}, \code{map_service} and \code{map_type} and returns it as a object of a defined \code{class}. |
| 4 | +#' |
| 5 | +#' @param ext extent to be covered by the basemap. Any spatial class. |
| 6 | +#' @param map_service character, |
| 7 | +#' @param map_type character, |
| 8 | +#' @param map_token character, |
| 9 | +#' @param map_res numeric, |
| 10 | +#' @param map_dir character, cache directory |
| 11 | +#' @param class character, output class. |
| 12 | +#' @param ... additional arguments. |
| 13 | +#' @param verbose |
| 14 | +#' |
| 15 | +#' @return |
| 16 | +#' |
| 17 | +#' @importFrom sf st_bbox |
| 18 | +#' @importFrom raster nlayers plotRGB plot |
| 19 | +#' @importFrom stars st_as_stars |
| 20 | +#' @importFrom mapview mapview viewRGB |
| 21 | +#' @export |
| 22 | +#' |
| 23 | +basemap <- function(ext, map_service = NA, map_type = NA, map_res = NA, map_token = NA, map_dir = NA, class = "raster", |
| 24 | + ..., verbose = TRUE){ |
| 25 | + |
| 26 | + ## checks |
| 27 | + if(inherits(verbose, "logical")) options(basemaps.verbose = verbose) |
| 28 | + if(inherits(ext, "sf")) ext <- st_bbox(ext) |
| 29 | + if(is.na(map_service)) map_service = getOption("basemaps.defaults")$map_service |
| 30 | + if(is.na(map_type)) map_type = getOption("basemaps.defaults")$map_type |
| 31 | + if(is.na(map_res)) map_res = getOption("basemaps.defaults")$map_res |
| 32 | + if(is.na(map_token)) map_token = getOption("basemaps.defaults")$map_token |
| 33 | + |
| 34 | + if(!is.na(map_dir)) if(!dir.exists(map_dir)){ |
| 35 | + out("Directory defined by argument 'map_dir' does not exist, using a temporary directory instead.", type = 2) |
| 36 | + map_dir <- NA |
| 37 | + } |
| 38 | + if(is.na(map_dir)) map_dir <- getOption("basemaps.defaults")$map_dir |
| 39 | + class <- tolower(class) |
| 40 | + |
| 41 | + ## get map |
| 42 | + out(paste0("Loading basemap '", map_type, "' from map service '", map_service, "'...")) |
| 43 | + ext <- st_bbox(ext) |
| 44 | + map <- .get_map(ext, map_service, map_type, map_token, map_dir, map_res) |
| 45 | + |
| 46 | + ## define class |
| 47 | + if("raster" %in% class) return(map) |
| 48 | + if("stars" %in% class) return(st_as_stars(map)) |
| 49 | + if("mapview" %in% class) quiet(if(nlayers(map) == 3) return(viewRGB(map, 1, 2, 3)) else return(mapview(map))) |
| 50 | + if("plot" == class) if(nlayers(map) == 3) plotRGB(map) else plot(map) |
| 51 | + if("ggplot" %in% class) if(nlayers(map) == 3) gg.bmap(r = map, r_type = "RGB", ...) else gg.bmap(r = map, r_type = "gradient") |
| 52 | +} |
| 53 | + |
| 54 | +#' @inheritParams basemap |
| 55 | +#' @export |
| 56 | +basemap_raster <- function(ext, map_service = NA, map_type = NA, map_res = NA, map_token = NA, map_dir = NA, ..., verbose = TRUE){ |
| 57 | + basemap(ext, map_service, map_type, map_res, map_token, map_dir, class = "raster", ..., verbose = verbose) |
| 58 | +} |
| 59 | + |
| 60 | + |
| 61 | +#' @inheritParams basemap |
| 62 | +#' @export |
| 63 | +basemap_stars <- function(ext, map_service = NA, map_type = NA, map_res = NA, map_token = NA, map_dir = NA, ..., verbose = TRUE){ |
| 64 | + basemap(ext, map_service, map_type, map_res, map_token, map_dir, class = "stars", ..., verbose = verbose) |
| 65 | +} |
| 66 | + |
| 67 | +#' @inheritParams basemap |
| 68 | +#' @export |
| 69 | +basemap_mapview <- function(ext, map_service = NA, map_type = NA, map_res = NA, map_token = NA, map_dir = NA, ..., verbose = TRUE){ |
| 70 | + basemap(ext, map_service, map_type, map_res, map_token, map_dir, class = "mapview", ..., verbose = verbose) |
| 71 | +} |
| 72 | + |
| 73 | +#' @inheritParams basemap |
| 74 | +#' @export |
| 75 | +basemap_plot <- function(ext, map_service = NA, map_type = NA, map_res = NA, map_token = NA, map_dir = NA, ..., verbose = TRUE){ |
| 76 | + basemap(ext, map_service, map_type, map_res, map_token, map_dir, class = "plot", ..., verbose = verbose) |
| 77 | +} |
| 78 | + |
| 79 | +#' @inheritParams basemap |
| 80 | +#' @export |
| 81 | +basemap_ggplot <- function(ext, map_service = NA, map_type = NA, map_res = NA, map_token = NA, map_dir = NA, ..., verbose = TRUE){ |
| 82 | + basemap(ext, map_service, map_type, map_res, map_token, map_dir, class = "ggplot", ..., verbose = verbose) |
| 83 | +} |
0 commit comments