Там, безусловно, есть: -)
Один из подходов, который я использую довольно часто:
library(raster)
library(purrr)
r <- raster(ncol = 50, nrow = 50, ext = extent(c(0,50,0,50)))
split_raster <- function(r, nx, ny, buffer = c(0,0)) {
ext <- extent(r)
tiles <- vector("list", length = nx * ny)
n <- 1L
for (i in seq_len(nx) - 1L) {
for (j in seq_len(ny) - 1L) {
x0 <- ext@xmin + i * ((ext@xmax - ext@xmin) / nx) - buffer[1] * xres(r)
x1 <- ext@xmin + (i + 1L) * ((ext@xmax - ext@xmin) / nx) + buffer[1] * xres(r) # nolint
y0 <- ext@ymin + j * ((ext@ymax - ext@ymin) / ny) - buffer[2] * yres(r) # nolint
y1 <- ext@ymin + (j + 1L) * ((ext@ymax - ext@ymin) / ny) + buffer[2] * yres(r) # nolint
tiles[[n]] <- extent(x0, x1, y0, y1)
n <- n + 1L
}
}
crop_tiles <- function(i, e, r) {
ri <- crop(r, e[[i]])
crs(ri) <- crs(r)
return(ri)
}
tiles <- purrr::map(seq_along(tiles), function(i) crop_tiles(i, tiles, r))
return(tiles)
}
split_raster(landscape, 10, 10)
В зависимости от количества плиток и размера вашего отдельного растра, вы можете обменятьфункция purrr :: map с чем-то вроде:
library(raster)
library(furrr)
plan(multisession)
r <- raster(ncol = 50, nrow = 50, ext = extent(c(0,50,0,50)))
split_raster <- function(r, nx, ny, buffer = c(0,0)) {
[...]
tiles <- furrr::future_map(seq_along(tiles), function(i) crop_tiles(i, tiles, r))
return(tiles)
}
split_raster(landscape, 10, 10)