Функция R terra classify создает очень большие файлы
У меня есть карта классификации местообитаний из Исландии (https://vistgerdakort.ni.is/ ) с 72 классами в файле tif размером 5 м * 5 м в пикселях. Я хочу упростить его, чтобы было всего 14 классов. Я открываю файлы (файл tif и текстовый файл, содержащий правила переклассификации) и использую функцию classify в пакете terra, как показано ниже на подмножестве карты.
raster <- rast("habitat_subset.tif")
reclass_table<-read.table("reclass_habitat.txt")
habitat_simple<-classify(raster, reclass_table, othersNA=TRUE)
Он делает именно то, что мне нужно, и я могу сохранить файл обратно в tif, используя
writeRaster(habitat_simple, "reclass_hab.tif")
Проблема в том, что мой исходный tif-файл был 105 МБ, а мой новый tif-файл реклассификации - 420 МБ. Поскольку моя цель - реклассифицировать всю страну, я не могу позволить, чтобы файл стал таким большим. Есть идеи, как сделать его меньше? Я не смог найти в Интернете комментариев по этому поводу.
1 ответ
Вы можете указать тип данных, в вашем случае вы должны иметь возможность использовать «INT1U» (т. Е. Байтовые значения от 0 до 254 --- 255 используются для NA, по крайней мере, это значение по умолчанию). Это должно дать файл, который будет в 4 раза меньше, чем когда вы пишете его со значением по умолчанию «FLT4S». Исходя из вашего вопроса, исходные данные идут с этим типом данных. Вдобавок вы можете использовать сжатие; Я не уверен, насколько хорошо они работают с «INT1U». Вы могли узнать об этом в документации, см.
?writeRaster
writeRaster(habitat_simple, "reclass_hab.tif",
wopt=list(datatype="INT1U", gdal="COMPRESS=LZW"))
Вы также можете пропустить
writeRaster
step and do (с terra>= 1.1-4) вы можете просто сделать
habitat_simple <- classify(raster, reclass_table, othersNA=TRUE,
datatype="INT1U", gdal="COMPRESS=LZW")