Невозможно записать сжатые геотифы на диск с помощью пакета terra
Я пытаюсь переключиться с растрового пакета Роберта Хиджманса на более новый и быстрый пакет terra для растровых вычислений в r. При этом я столкнулся с до смешного простой проблемой, которую не могу решить. Независимо от того, что я делаю, я не могу заставить новую функцию writeRaster записать геотиф в файл со сжатием.
Вот воспроизводимый пример: Давайте сделаем 2 растра с нуля:
Большой растр с последовательными значениями
библиотека (терра)
r <- rast(ncol=1000, nrow=1000, xmin=0, xmax=10, ymin=0, ymax=10)
значения (r) <- 1:ncell(r)
Большой растр с одним значением
r2 <- rast(ncol=1000, nrow=1000, xmin=0, xmax=10, ymin=0, ymax=10)
значения (r2) <- 1
Независимо от того, указываю ли я параметр сжатия в новой функции writeRaster, выходные файлы будут иметь одинаковый размер для двух растров. Указывает, что сжатие не применяется.
writeRaster(r2, "D:/simple_raster_test_no_comp_lzw.tif", overwrite=T) #complex raster no compression
writeRaster(r2, "D:/simple_raster_test_comp_lzw.tif", overwrite=T, gdal=c("COMPRESS=LZW"))
writeRaster(r, "D:/test_comp_lzw.tif", overwrite=T) #simple raster no compression
writeRaster(r, "D:/test_comp_lzw2.tif", overwrite=T, gdal=c("COMPRESS=LZW"))
file.size("D:/simple_raster_test_no_comp_lzw.tif")
file.size("D:/simple_raster_test_comp_lzw.tif")
file.size("D:/test_comp_lzw.tif")
file.size("D:/test_comp_lzw2.tif")
Я понял, что аргументы сжатия gdal просто не рассматриваются, так как я могу заменить строку LZW на любое значение и все равно получить растровый вывод без сжатия и без ошибок.
writeRaster(r, "D:/test_comp_lzw3.tif", overwrite=T, gdal=c("COMPRESS=IAmSuperman"))
file.size("D:/test_comp_lzw3.tif")
Наконец, попытка сохранения с использованием синтаксиса старого растрового пакета дает те же несжатые результаты.
writeRaster(r, "D:/test_comp_lzw4.tif", overwrite=T, compress="lzw")
file.size("D:/test_comp_lzw4.tif")
Есть идеи, как это преодолеть? Я работаю с довольно большими геотифами и без компрессии набиваю жесткий диск как колбасу в кратчайшие сроки ...
1 ответ
Если вы обнаружите ошибку в пакете, то лучше всего сообщить об этом на github или подобном ( здесь для
terra
упаковка.
Я увидел ваш комментарий только после того, как написал ответ; так что для потомков ниже я покажу, что сжатие работает; по крайней мере, в текущей версии на CRAN и в разрабатываемой версии.
library(terra)
#terra version 1.1.4
r <- rast(ncol=1000, nrow=1000, xmin=0, xmax=10, ymin=0, ymax=10)
values(r) <- sqrt(1:ncell(r))
ff <- replicate(4, paste0(tempfile(), ".tif"))
writeRaster(r, ff[1], overwrite=T) #complex raster no compression
writeRaster(r, ff[2], gdal=c("COMPRESS=LZW"))
writeRaster(r>100, ff[3]) #simple raster no compression
writeRaster(r>100, ff[4], gdal=c("COMPRESS=LZW"))
sapply(ff, file.size, USE.NAMES=FALSE)
#[1] 4003716 2886677 4003712 146519