Noemie Boulanger
Noemie Boulanger

Reputation: 35

R terra function classify create very large files

I have an habitat classification map from Iceland (https://vistgerdakort.ni.is/) with 72 classes in a tif file of 5m*5m pixel size. I want to simplify it, so that there is only 14 classes. I open the files (a tif file and a text file containing the reclassification rules) and use the function classify in the terra package as follow on a subset of the map.

raster <- rast("habitat_subset.tif")
reclass_table<-read.table("reclass_habitat.txt")
habitat_simple<-classify(raster, reclass_table, othersNA=TRUE)

It does exactly what I need it to do and I am able to save the file back to tif using

writeRaster(habitat_simple, "reclass_hab.tif")

The problem is that my initial tif file was 105MB and my new reclassify tif file is 420MB. Since my goal is to reclassify the whole extent of the country, I can't afford to have the file become so big. Any insights on how to make it smaller? I could not find any comments online in relation to this issue.

Upvotes: 2

Views: 625

Answers (1)

Robert Hijmans
Robert Hijmans

Reputation: 47026

You can specify the datatype, in your case you should be able to use "INT1U" (i.e., byte values between 0 and 254 --- 255 is used for NA, at least that is the default). That should give a file that is 4 times smaller than when you write it with the default "FLT4S". Based on your question, the original data come with that datatype. In addition you could use compression; I am not sure how well they work with "INT1U". You could have found out about this in the documentation, see ?writeRaster

writeRaster(habitat_simple, "reclass_hab.tif", 
        wopt=list(datatype="INT1U", gdal="COMPRESS=LZW"))

You could also skip the writeRaster step and do (with terra >= 1.1-4) you can just do

habitat_simple <- classify(raster, reclass_table, othersNA=TRUE, 
         datatype="INT1U", gdal="COMPRESS=LZW")

Upvotes: 2

Related Questions