hypertidy / vapour

GDAL API package for R
https://hypertidy.github.io/vapour/
83 stars 9 forks source link

gdal_raster_data() crashes R when file not exist #197

Closed mdsumner closed 1 year ago

mdsumner commented 1 year ago

created by gdal_raster_data() under parallel

library(vapour)

src <- "/vsicurl/https://opentopography.s3.sdsc.edu/raster/COP30/COP30_hh.vrt"
info <- vapour_raster_info(src)

## target
prj <- "EPSG:3577"
ex0 <- c(110, 158, -43.2, -8)
ex1 <- reproj::reproj_extent(info$extent, prj, source = "OGC:CRS84")

## pick resolution
ex <- vaster::snap_extent(ex1, 30)
dm <- diff(ex)[c(1, 3)]/30

## now let's tile it
index <- grout::tile_index(grd <- grout::grout(dm, ex, c(1024, 1024) * 2))
## make the function
fun <- local({
  prj <- prj
  src <- src
  exs <- split(as.matrix(t(index[, c("xmin", "xmax", "ymin", "ymax")])), rep(1:nrow(index), each = 4))
  dms <- split(as.matrix(t(index[, c("ncol", "nrow")])), rep(1:nrow(index), each = 2))
function(i = 1) {
  out <- vapour::gdal_raster_dsn(src, target_crs = prj, target_ext = exs[[i]], target_dim = dms[[i]])[[1L]]
  out
}  
})

#library(furrr)
#options(future.rng.onMisuse = "ignore")
#plan(multisession)
l <- unlist(lapply(sample(nrow(index), 10), fun))
#plan(sequential)

whatarelief:::imfun(gdal_raster_data(l[1])) ## crash
mdsumner commented 1 year ago

not crashing now