Функция 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")
Другие вопросы по тегам