Skip to content

Commit e20973e

Browse files
committed
moved internal use of raster to terra, moved raster and stars to suggests
1 parent 64716e6 commit e20973e

File tree

9 files changed

+238
-165
lines changed

9 files changed

+238
-165
lines changed

.Rbuildignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@
99
^_pkgdown\.yml$
1010
docs
1111
^\.github$
12-
playground.R
12+
playground.R
13+
dev.R

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@
44
.Ruserdata
55
basemaps.Rproj
66
docs/
7-
playground.R
7+
playground.R
8+
dev.R

DESCRIPTION

+3-2
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,9 @@ Imports:
1515
slippymath,
1616
httr,
1717
curl,
18+
terra,
1819
pbapply,
1920
magick,
20-
raster,
21-
stars (>= 0.5.0),
2221
utils,
2322
grDevices
2423
Suggests:
@@ -27,6 +26,8 @@ Suggests:
2726
png,
2827
mapview,
2928
mapedit,
29+
raster,
30+
stars,
3031
testthat,
3132
covr
3233
BugReports: https://github.com/16eagle/basemaps/issues

NAMESPACE

+18-18
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export(basemap_plot)
1010
export(basemap_png)
1111
export(basemap_raster)
1212
export(basemap_stars)
13+
export(basemap_terra)
1314
export(draw_ext)
1415
export(flush_cache)
1516
export(get_defaults)
@@ -28,17 +29,6 @@ importFrom(magick,image_read)
2829
importFrom(magick,image_write)
2930
importFrom(pbapply,pbapply)
3031
importFrom(pbapply,pboptions)
31-
importFrom(raster,"extent<-")
32-
importFrom(raster,aggregate)
33-
importFrom(raster,brick)
34-
importFrom(raster,extend)
35-
importFrom(raster,extent)
36-
importFrom(raster,merge)
37-
importFrom(raster,ncell)
38-
importFrom(raster,nlayers)
39-
importFrom(raster,projectRaster)
40-
importFrom(raster,raster)
41-
importFrom(raster,resample)
4232
importFrom(sf,"st_crs<-")
4333
importFrom(sf,st_as_sfc)
4434
importFrom(sf,st_bbox)
@@ -47,12 +37,22 @@ importFrom(sf,st_crs)
4737
importFrom(sf,st_transform)
4838
importFrom(slippymath,bbox_to_tile_grid)
4939
importFrom(slippymath,tile_bbox)
50-
importFrom(stars,"st_dimensions<-")
51-
importFrom(stars,read_stars)
52-
importFrom(stars,st_as_stars)
53-
importFrom(stars,st_dimensions)
54-
importFrom(stars,st_mosaic)
55-
importFrom(stars,st_set_bbox)
56-
importFrom(stars,write_stars)
40+
importFrom(terra,"crs<-")
41+
importFrom(terra,"ext<-")
42+
importFrom(terra,aggregate)
43+
importFrom(terra,as.array)
44+
importFrom(terra,crop)
45+
importFrom(terra,crs)
46+
importFrom(terra,ext)
47+
importFrom(terra,extend)
48+
importFrom(terra,merge)
49+
importFrom(terra,mosaic)
50+
importFrom(terra,ncell)
51+
importFrom(terra,nlyr)
52+
importFrom(terra,plot)
53+
importFrom(terra,plotRGB)
54+
importFrom(terra,project)
55+
importFrom(terra,rast)
56+
importFrom(terra,writeRaster)
5757
importFrom(utils,head)
5858
importFrom(utils,installed.packages)

R/basemap.R

+93-69
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,7 @@
8080
#' scale_fill_identity()
8181
#' }
8282
#' @importFrom sf st_bbox
83-
#' @importFrom raster nlayers brick raster
84-
#' @importFrom stars read_stars
83+
#' @importFrom terra rast plotRGB plot as.array nlyr
8584
#' @importFrom graphics plot
8685
#' @importFrom magick image_read
8786
#' @importFrom grDevices topo.colors col2rgb
@@ -136,48 +135,51 @@ basemap <- function(ext = NULL, map_service = NULL, map_type = NULL, map_res = N
136135
# return file if needed
137136
if("geotif" %in% class) return(map_file)
138137

139-
## stars-based:
140-
if(any(c("stars", "plot", "png", "magick") %in% class)){
141-
map <- read_stars(map_file)
138+
# return terra
139+
if(any(c("terra", "plot", "png", "magick", "ggplot", "gglayer") %in% class)){
140+
map <- terra::rast(map_file)
142141

143-
if("stars" %in% class) return(map)
144-
if("plot" == class){
145-
dim_map <- dim(map)
146-
if(length(dim(map)) == 2) dim_map["band"] <- 1
142+
if("terra" %in% class) return(map)
143+
144+
if("plot" %in% class){
145+
dim_map <- dim(map)
146+
147147
if(dim_map[3] == 3){
148-
# avoid failure if only single value is present
149-
if(length(unique(range(map[[1]][]))) == 1){
150-
plot(map, rgb = 1:3, main = NULL, downsample = 0, maxColorValue=max(map[[1]][])+1)
151-
} else{
152-
plot(map, rgb = 1:3, main = NULL, downsample = 0)
153-
}
148+
terra::plotRGB(map, r = 1, g = 2, b = 3, maxcell = ncell(map))
154149
} else{
155-
plot(map, col = col,
156-
breaks = seq(min(map[[1]]), max(map[[1]]), length.out = length(col)+1),
157-
main = NULL, downsample = 0)
150+
terra::plot(
151+
map[[1]],
152+
col = col, type = "continous",
153+
breaks = seq(min(map[[1]][]), max(map[[1]][]), length.out = length(col)+1)
154+
)
158155
}
159156
}
157+
160158
if(any("png" == class, "magick" == class)){
161159
if(!any(grepl("png", rownames(installed.packages())))){
162-
out("Package 'png' is not installed. Please install 'png' using install.packages('png').")
160+
out(paste0("Package 'png' is not installed, but needed for class='", class, "'. Please install 'png' using install.packages('png')."), type = 3)
163161
} else{
162+
164163
file <- paste0(map_dir, "/", map_service, "_", map_type, "_", gsub(":", "-", gsub(" ", "_", Sys.time())), ".png")
165-
map_arr <- map[[1]]
164+
map_arr <- terra::as.array(map)
166165

167-
if(!is.na(dim(map_arr)[3])){
166+
if(dim(map_arr)[3] == 3){
168167
#for(i in 1:dim(map_arr)[3]) map_arr[,,i] <- t(map_arr[,,i])
169-
map_arr <- aperm(map_arr, c(2, 1, 3))
168+
#map_arr <- aperm(map_arr, c(2, 1, 3)) ### ONLY WITH STARS
170169
map_arr <- sweep(map_arr, MARGIN = 3, STATS = max(map_arr), FUN = "/")
171170
png::writePNG(map_arr, target = file, dpi = dpi)
172171
} else{
172+
map_arr <- map_arr[,,1]
173173
# convert to range 0 to 1
174-
map_arr <- sweep(t(map_arr), MARGIN = 1, STATS = max(map_arr), FUN = "/")
174+
#map_arr <- sweep(map_arr, MARGIN = 1, STATS = max(map_arr), FUN = "/")
175+
map_arr <- ((map_arr - min(map_arr))/(max(map_arr) - min(map_arr)))
175176
# map col to value range
176-
map_arr_col <- col[findInterval(map_arr, seq(0, 1, length.out = length(col)))]#, dim(map_arr))
177+
map_arr_col <- col[findInterval(map_arr, seq(0, 1, length.out = length(col)))]
177178
# convert hex to rgb
178179
map_arr_rgb <- col2rgb(map_arr_col)
179180
# switch dimensions to fit writeRGB
180181
map_arr_rgb <- aperm(array(map_arr_rgb, c(3, dim(map_arr))), c(2,3,1))
182+
#map_arr_rgb <- array(map_arr_rgb, c(dim(map_arr), 3))
181183
# go back to 0 to 1 again
182184
map_arr_rgb <- sweep(map_arr_rgb, MARGIN = 3, STATS = max(map_arr_rgb), FUN = "/")
183185
png::writePNG(map_arr_rgb, target = file, dpi = dpi)
@@ -190,71 +192,87 @@ basemap <- function(ext = NULL, map_service = NULL, map_type = NULL, map_res = N
190192
return(image_read(file))
191193
}
192194
}
195+
196+
if("ggplot" %in% class){
197+
if(!any(grepl("ggplot", rownames(installed.packages())))){
198+
out(paste0("Package 'ggplot2' is not installed, but needed for class='", class, "'. Please install 'ggplot2' using install.packages('ggplot2')."), type = 3)
199+
} else{
200+
if(terra::nlyr(map) == 3){
201+
return(gg_raster(r = map, r_type = "RGB", ...))
202+
} else{
203+
return(gg_raster(r = map, r_type = "gradient", ...))
204+
}
205+
}
206+
}
207+
208+
if("gglayer" %in% class){
209+
if(!any(grepl("ggplot", rownames(installed.packages())))){
210+
out(paste0("Package 'ggplot2' is not installed, but needed for class='", class, "'. Please install 'ggplot2' using install.packages('ggplot2')."), type = 3)
211+
} else{
212+
if(terra::nlyr(map) == 3) return(gg_raster(r = map, r_type = "RGB", gglayer = T, ...)) else return(gg_raster(r = map, r_type = "gradient", gglayer = T, ...))
213+
}
214+
}
193215
}
194216
}
195217

196-
# raster-based
197-
if(any(c("raster", "mapview", "ggplot", "gglayer") %in% class)){
198-
map <- quiet(brick(map_file))
199-
if("raster" %in% class){
200-
if(nlayers(map) == 1) map <- raster(map)
218+
# stars
219+
if("stars" %in% class){
220+
if(!any(grepl("stars", rownames(installed.packages())))){
221+
out(paste0("Package 'stars' is not installed, but needed for class='", class, "'. Please install 'stars' using install.packages('stars')."), type = 3)
222+
} else{
223+
map <- stars::read_stars(map_file)
201224
return(map)
202225
}
203-
204-
if("mapview" %in% class){
205-
if(!any(grepl("mapview", rownames(installed.packages())))){
206-
out("Package 'mapview' is not installed. Please install 'mapview' using install.packages('mapview').")
207-
} else{
208-
quiet(if(nlayers(map) == 3){
209-
return(mapview::viewRGB(map, 1, 2, 3, layer.name = "Basemap", maxpixels = ncell(map), quantiles = NULL))
210-
} else return(mapview::mapview(map)))
226+
}
227+
228+
# raster-based
229+
if(any(c("raster", "mapview", "ggplot", "gglayer") %in% class)){
230+
if(!any(grepl("raster", rownames(installed.packages())))){
231+
out(paste0("Package 'raster' is not installed, but needed for class='", class, "'. Please install 'raster' using install.packages('raster')."), type = 3)
232+
} else{
233+
234+
map <- quiet(raster::brick(map_file))
235+
if("raster" %in% class){
236+
if(raster::nlayers(map) == 1) map <- raster::raster(map)
237+
return(map)
211238
}
212-
}
213-
214-
if("ggplot" %in% class){
215-
if(!any(grepl("ggplot", rownames(installed.packages())))){
216-
out("Package 'ggplot2' is not installed. Please install 'ggplot2' using install.packages('ggplot2').")
217-
} else{
218-
if(nlayers(map) == 3){
219-
return(gg_raster(r = map, r_type = "RGB", ...))
239+
240+
if("mapview" %in% class){
241+
if(!any(grepl("mapview", rownames(installed.packages())))){
242+
out(paste0("Package 'mapview' is not installed, but needed for class='", class, "'. Please install 'mapview' using install.packages('mapview')."), type = 3)
220243
} else{
221-
return(gg_raster(r = map, r_type = "gradient", ...))
244+
quiet(if(raster::nlayers(map) == 3){
245+
return(mapview::viewRGB(map, 1, 2, 3, layer.name = "Basemap", maxpixels = raster::ncell(map), quantiles = NULL))
246+
} else return(mapview::mapview(map)))
222247
}
223248
}
224249
}
225-
226-
if("gglayer" %in% class){
227-
if(!any(grepl("ggplot", rownames(installed.packages())))){
228-
out("Package 'ggplot2' is not installed. Please install 'ggplot2' using install.packages('ggplot2').")
229-
} else{
230-
if(nlayers(map) == 3) return(gg_raster(r = map, r_type = "RGB", gglayer = T, ...)) else return(gg_raster(r = map, r_type = "gradient", gglayer = T, ...))
231-
}
232-
}
233250
}
234251
}
235252

253+
236254
#' @rdname basemap
237255
#' @export
238-
basemap_raster <- function(ext = NULL, map_service = NULL, map_type = NULL, map_res = NULL, map_token = NULL, map_dir = NULL, force = NULL, ..., verbose = TRUE){
239-
basemap(ext, map_service, map_type, map_res, map_token, map_dir, class = "raster", force, ..., verbose = verbose)
256+
basemap_plot <- function(ext = NULL, map_service = NULL, map_type = NULL, map_res = NULL, map_token = NULL, map_dir = NULL, force = NULL, ..., verbose = TRUE){
257+
basemap(ext, map_service, map_type, map_res, map_token, map_dir, class = "plot", force, ..., verbose = verbose)
240258
}
241259

242260
#' @rdname basemap
243261
#' @export
244-
basemap_stars <- function(ext = NULL, map_service = NULL, map_type = NULL, map_res = NULL, map_token = NULL, map_dir = NULL, force = NULL, ..., verbose = TRUE){
245-
basemap(ext, map_service, map_type, map_res, map_token, map_dir, class = "stars", force, ..., verbose = verbose)
262+
basemap_magick <- function(ext = NULL, map_service = NULL, map_type = NULL, map_res = NULL, map_token = NULL, map_dir = NULL, force = NULL, ..., verbose = TRUE){
263+
basemap(ext, map_service, map_type, map_res, map_token, map_dir, class = "magick", force, ..., verbose = verbose)
246264
}
247265

248266
#' @rdname basemap
249267
#' @export
250-
basemap_mapview <- function(ext = NULL, map_service = NULL, map_type = NULL, map_res = NULL, map_token = NULL, map_dir = NULL, force = NULL, ..., verbose = TRUE){
251-
basemap(ext, map_service, map_type, map_res, map_token, map_dir, class = "mapview", force, ..., verbose = verbose)
268+
basemap_png <- function(ext = NULL, map_service = NULL, map_type = NULL, map_res = NULL, map_token = NULL, map_dir = NULL, force = NULL, ..., verbose = TRUE){
269+
basemap(ext, map_service, map_type, map_res, map_token, map_dir, class = "png", force, ..., verbose = verbose)
252270
}
253271

254272
#' @rdname basemap
255273
#' @export
256-
basemap_plot <- function(ext = NULL, map_service = NULL, map_type = NULL, map_res = NULL, map_token = NULL, map_dir = NULL, force = NULL, ..., verbose = TRUE){
257-
basemap(ext, map_service, map_type, map_res, map_token, map_dir, class = "plot", force, ..., verbose = verbose)
274+
basemap_geotif <- function(ext = NULL, map_service = NULL, map_type = NULL, map_res = NULL, map_token = NULL, map_dir = NULL, force = NULL, ..., verbose = TRUE){
275+
basemap(ext, map_service, map_type, map_res, map_token, map_dir, class = "geotif", force, ..., verbose = verbose)
258276
}
259277

260278
#' @rdname basemap
@@ -271,18 +289,24 @@ basemap_gglayer <- function(ext = NULL, map_service = NULL, map_type = NULL, map
271289

272290
#' @rdname basemap
273291
#' @export
274-
basemap_magick <- function(ext = NULL, map_service = NULL, map_type = NULL, map_res = NULL, map_token = NULL, map_dir = NULL, force = NULL, ..., verbose = TRUE){
275-
basemap(ext, map_service, map_type, map_res, map_token, map_dir, class = "magick", force, ..., verbose = verbose)
292+
basemap_mapview <- function(ext = NULL, map_service = NULL, map_type = NULL, map_res = NULL, map_token = NULL, map_dir = NULL, force = NULL, ..., verbose = TRUE){
293+
basemap(ext, map_service, map_type, map_res, map_token, map_dir, class = "mapview", force, ..., verbose = verbose)
276294
}
277295

278296
#' @rdname basemap
279297
#' @export
280-
basemap_png <- function(ext = NULL, map_service = NULL, map_type = NULL, map_res = NULL, map_token = NULL, map_dir = NULL, force = NULL, ..., verbose = TRUE){
281-
basemap(ext, map_service, map_type, map_res, map_token, map_dir, class = "png", force, ..., verbose = verbose)
298+
basemap_terra <- function(ext = NULL, map_service = NULL, map_type = NULL, map_res = NULL, map_token = NULL, map_dir = NULL, force = NULL, ..., verbose = TRUE){
299+
basemap(ext, map_service, map_type, map_res, map_token, map_dir, class = "raster", force, ..., verbose = verbose)
282300
}
283301

284302
#' @rdname basemap
285303
#' @export
286-
basemap_geotif <- function(ext = NULL, map_service = NULL, map_type = NULL, map_res = NULL, map_token = NULL, map_dir = NULL, force = NULL, ..., verbose = TRUE){
287-
basemap(ext, map_service, map_type, map_res, map_token, map_dir, class = "geotif", force, ..., verbose = verbose)
288-
}
304+
basemap_raster <- function(ext = NULL, map_service = NULL, map_type = NULL, map_res = NULL, map_token = NULL, map_dir = NULL, force = NULL, ..., verbose = TRUE){
305+
basemap(ext, map_service, map_type, map_res, map_token, map_dir, class = "raster", force, ..., verbose = verbose)
306+
}
307+
308+
#' @rdname basemap
309+
#' @export
310+
basemap_stars <- function(ext = NULL, map_service = NULL, map_type = NULL, map_res = NULL, map_token = NULL, map_dir = NULL, force = NULL, ..., verbose = TRUE){
311+
basemap(ext, map_service, map_type, map_res, map_token, map_dir, class = "stars", force, ..., verbose = verbose)
312+
}

0 commit comments

Comments
 (0)