128 lines
3.6 KiB
R
128 lines
3.6 KiB
R
#' Get Path to Sample PMTiles File
|
|
#'
|
|
#' @description
|
|
#' Returns the path to a sample PMTiles file for demos and testing.
|
|
#' On first use, downloads a small regional extract to the user's cache
|
|
#' directory.
|
|
#'
|
|
#' @param region Character. Region to download. Currently only "sf-bay"
|
|
#' (San Francisco Bay Area) is available. Default is "sf-bay".
|
|
#' @param cache_dir Character. Directory to cache the downloaded file.
|
|
#' Default uses \code{tools::R_user_dir()}.
|
|
#' @param force_download Logical. Force re-download even if cached.
|
|
#' Default is FALSE.
|
|
#'
|
|
#' @return Character. Path to the PMTiles file.
|
|
#'
|
|
#' @details
|
|
#' The sample tiles are hosted on GitHub releases and downloaded on first use.
|
|
#' Subsequent calls use the cached file. The SF Bay Area extract is
|
|
#' approximately 10-15MB and covers the greater San Francisco region at all
|
|
#' zoom levels.
|
|
#'
|
|
#' For production use, consider self-hosting your own PMTiles file. See
|
|
#' \code{vignette("getting-started")} for options.
|
|
#'
|
|
#' @examples
|
|
#' \dontrun{
|
|
#' library(leaflet)
|
|
#' library(protomapr)
|
|
#'
|
|
#' # Use sample tiles for demos (downloads on first use)
|
|
#' leaflet() %>%
|
|
#' setView(lng = -122.4, lat = 37.8, zoom = 12) %>%
|
|
#' addProtomaps(url = protomaps_sample_tiles())
|
|
#' }
|
|
#'
|
|
#' @seealso \code{\link{protomaps_clear_cache}}, \code{\link{protomaps_url}}
|
|
#' @export
|
|
protomaps_sample_tiles <- function(region = "sf-bay",
|
|
cache_dir = NULL,
|
|
force_download = FALSE) {
|
|
|
|
region <- match.arg(region, choices = c("sf-bay"))
|
|
|
|
if (is.null(cache_dir)) {
|
|
cache_dir <- tools::R_user_dir("protomapr", which = "cache")
|
|
}
|
|
|
|
if (!dir.exists(cache_dir)) {
|
|
dir.create(cache_dir, recursive = TRUE)
|
|
}
|
|
|
|
filename <- sprintf("protomapr-sample-%s.pmtiles", region)
|
|
local_path <- file.path(cache_dir, filename)
|
|
|
|
if (file.exists(local_path) && !force_download) {
|
|
message("Using cached sample tiles: ", local_path)
|
|
return(local_path)
|
|
}
|
|
|
|
base_url <- "https://github.com/evmo/protomapr/releases/download"
|
|
version <- "sample-tiles-v1"
|
|
download_url <- sprintf("%s/%s/%s", base_url, version, filename)
|
|
|
|
message("Downloading sample tiles (~10MB)...")
|
|
message("Source: ", download_url)
|
|
|
|
tryCatch({
|
|
utils::download.file(
|
|
url = download_url,
|
|
destfile = local_path,
|
|
mode = "wb",
|
|
quiet = FALSE
|
|
)
|
|
message("Downloaded to: ", local_path)
|
|
}, error = function(e) {
|
|
stop(
|
|
"Failed to download sample tiles.\n",
|
|
"Error: ", conditionMessage(e), "\n",
|
|
"Try again later or use protomaps_url() with an API key instead.",
|
|
call. = FALSE
|
|
)
|
|
})
|
|
|
|
local_path
|
|
}
|
|
|
|
|
|
#' Clear Cached Sample Tiles
|
|
#'
|
|
#' @description
|
|
#' Removes cached sample PMTiles files to free disk space.
|
|
#'
|
|
#' @param cache_dir Character. Cache directory. Default uses same as
|
|
#' \code{\link{protomaps_sample_tiles}}.
|
|
#'
|
|
#' @return Invisibly returns TRUE if files were removed, FALSE otherwise.
|
|
#'
|
|
#' @examples
|
|
#' \dontrun{
|
|
#' # Clear all cached tiles
|
|
#' protomaps_clear_cache()
|
|
#' }
|
|
#'
|
|
#' @seealso \code{\link{protomaps_sample_tiles}}
|
|
#' @export
|
|
protomaps_clear_cache <- function(cache_dir = NULL) {
|
|
if (is.null(cache_dir)) {
|
|
cache_dir <- tools::R_user_dir("protomapr", which = "cache")
|
|
}
|
|
|
|
if (!dir.exists(cache_dir)) {
|
|
message("Cache directory does not exist: ", cache_dir)
|
|
return(invisible(FALSE))
|
|
}
|
|
|
|
files <- list.files(cache_dir, pattern = "\\.pmtiles$", full.names = TRUE)
|
|
|
|
if (length(files) == 0) {
|
|
message("No cached tiles found.")
|
|
return(invisible(FALSE))
|
|
}
|
|
|
|
unlink(files)
|
|
message(sprintf("Removed %d cached file(s).", length(files)))
|
|
|
|
invisible(TRUE)
|
|
}
|