Лучшие варианты wopt для больших растров
Каковы наилучшие параметры wopt и gdal при обработке больших растров с помощью
terra::
? Я хочу сопоставить растровый стек (2,5 аркмин) с растром с гораздо более высоким разрешением (500 * 500 м). Рабочий процесс: дезагрегируйте как можно ближе, затем передискретизируйте и, наконец, замаскируйте. Это работает, но выходной tif> 100 ГБ, и процесс занимает вечность.
r <- rast("rasterstack_004166deg.tif")
r_template <- rast("rasterstack_000449deg.tif")
wopt_options <- list(gdal = c("BIGTIFF=YES",
"PREDICTOR = 2",
"NUM_THREADS = ALL_CPUS"),
tempdir = "/somewhere_I_have_a_lot_of_space",
todisk = TRUE)
r_processed <- disaggregate(r, fact = 9) %>%
resample(., r_template) %>%
mask(., r_template,
filename = "outputfile.tif",
wopt = wopt_options)
Если wopt_options помещается внутрь
terra::disaggregate()
а также
terra::resample()
также? Есть ли способ уменьшить размер файла и ускорить процесс?
Я также пробовал следующие параметры gdal
gdal=c("COMPRESS=DEFLATE", "TFW=YES")
или же
gdal=c("COMPRESS=LZW", "TFW=YES")
, но на самом деле ничего не изменилось. Также пробовал без каких-либо опций gdal.
Кроме того, я также сделал это с
raster::projectRaster()
функция (использовалась дезагрегированная r), которая была намного быстрее, а файл outputfile.tif был намного меньше. Однако я думаю, мне следует избегать использования
projecRaster()
здесь:
beginCluster()
r_processed<-
projectRaster(stack(r_disaggregated),
raster(r_template),
filename = "outputfile.tif")
endCluster()
1 ответ
Вот несколько комментариев, которые могут помочь. Поведение по умолчанию
terra
- установить для BIGTIFF значение true, когда это необходимо, поэтому обычно указывать это не требуется. Также по умолчанию используется сжатие LZW, поэтому вы должны увидеть разницу, если установите для сжатия значение NONE.
Чтобы установить
tempdir
, использовать
terraOptions(tempdir="/somewhere_I_have_a_lot_of_space")`
terraOptions()
#memfrac : 0.6
#tempdir : /somewhere_I_have_a_lot_of_space
Теперь у нас есть
x <- disaggregate(r, fact = 9)
y <- resample(x, r_template)
z <- mask(y, r, filename="outputfile.tif", wopt=wopt_options)
Я разделил его, потому что его легче читать и отлаживать. Вы маскировались
r_template
но это должно быть с
r
. Если вы хотите использовать параметры на всех трех этапах, вам нужно будет использовать
wopt
аргумент каждый раз, а не только в последний раз.
Я предполагаю, что проблема в
resample
поскольку это реализовано немного по-другому (более прямое использование GDAL) и аргумент BIGTIFF (ваш или по умолчанию), вероятно, потерян, мне нужно разобраться в этом. Ты можешь
show(r)
чтобы я мог сделать воспроизводимый пример?