80
80
# ' scale_fill_identity()
81
81
# ' }
82
82
# ' @importFrom sf st_bbox
83
- # ' @importFrom raster nlayers brick raster
84
- # ' @importFrom stars read_stars
83
+ # ' @importFrom terra rast plotRGB plot as.array nlyr
85
84
# ' @importFrom graphics plot
86
85
# ' @importFrom magick image_read
87
86
# ' @importFrom grDevices topo.colors col2rgb
@@ -136,48 +135,51 @@ basemap <- function(ext = NULL, map_service = NULL, map_type = NULL, map_res = N
136
135
# return file if needed
137
136
if (" geotif" %in% class ) return (map_file )
138
137
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 )
142
141
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
+
147
147
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 ))
154
149
} 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
+ )
158
155
}
159
156
}
157
+
160
158
if (any(" png" == class , " magick" == class )){
161
159
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 )
163
161
} else {
162
+
164
163
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 )
166
165
167
- if (! is.na( dim(map_arr )[3 ]) ){
166
+ if (dim(map_arr )[3 ] == 3 ){
168
167
# 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
170
169
map_arr <- sweep(map_arr , MARGIN = 3 , STATS = max(map_arr ), FUN = " /" )
171
170
png :: writePNG(map_arr , target = file , dpi = dpi )
172
171
} else {
172
+ map_arr <- map_arr [,,1 ]
173
173
# 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 )))
175
176
# 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 )))]
177
178
# convert hex to rgb
178
179
map_arr_rgb <- col2rgb(map_arr_col )
179
180
# switch dimensions to fit writeRGB
180
181
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))
181
183
# go back to 0 to 1 again
182
184
map_arr_rgb <- sweep(map_arr_rgb , MARGIN = 3 , STATS = max(map_arr_rgb ), FUN = " /" )
183
185
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
190
192
return (image_read(file ))
191
193
}
192
194
}
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
+ }
193
215
}
194
216
}
195
217
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 )
201
224
return (map )
202
225
}
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 )
211
238
}
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 )
220
243
} 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 )))
222
247
}
223
248
}
224
249
}
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
- }
233
250
}
234
251
}
235
252
253
+
236
254
# ' @rdname basemap
237
255
# ' @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 )
240
258
}
241
259
242
260
# ' @rdname basemap
243
261
# ' @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 )
246
264
}
247
265
248
266
# ' @rdname basemap
249
267
# ' @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 )
252
270
}
253
271
254
272
# ' @rdname basemap
255
273
# ' @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 )
258
276
}
259
277
260
278
# ' @rdname basemap
@@ -271,18 +289,24 @@ basemap_gglayer <- function(ext = NULL, map_service = NULL, map_type = NULL, map
271
289
272
290
# ' @rdname basemap
273
291
# ' @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 )
276
294
}
277
295
278
296
# ' @rdname basemap
279
297
# ' @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 )
282
300
}
283
301
284
302
# ' @rdname basemap
285
303
# ' @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