How to write a raster with RAT factors in R raster package
r, raster
Solution
Note that if you use raster's native .grd format (see doc, section 3.3) , the RAT table will be saved:
library(raster)
r <- raster(nrows=5, ncols=5)
r[] <- rep(1:5, 5)
r <- ratify(r)
rat <- levels(r)[[1]]
rat$Pixel_Values <- 1:5
rat$Class_Names <- c("A", "B", "C", "D", "E")
levels(r) <- rat
r
writeRaster(r, filename="raster_rat.grd")
Now re-open:
r2 <- raster("raster_rat.grd")
r2
Problem
I want `writeRaster` to write the RAT (raster attribute table) that I've built in R. I'm running R 3.0.1, raster 2.1-49, and rgdal 0.8-10. My input raster looks like this: ``` r <-raster("F:/test.img") class : RasterLayer dimensions : 3, 3, 9 (nrow, ncol, ncell) resolution : 30, 30 (x, y) extent : 347325, 347415, 4301655, 4301745 (xmin, xmax, ymin, ymax) coord. ref. : +proj=utm +zone=18 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0 data source : F:\test.img names : test values : 1, 19 (min, max) ``` I then build my attribute table: ``` r <- ratify(r) rat <- levels(r)[[1]] rat$Pixel_Values <- c(1, 7, 8, 9, 19) rat$Class_Names <- c("A", "B", "C", "D", "E") levels(r) <- rat ``` Which results in a `raster` with attributes: ``` r # class : RasterLayer # dimensions : 3, 3, 9 (nrow, ncol, ncell) # resolution : 30, 30 (x, y) # extent : 347325, 347415, 4301655, 4301745 (xmin, xmax, ymin, ymax) # coord. ref. : +proj=utm +zone=18 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0 # data source : F:\test.img # names : test # values : 1, 19 (min, max) # attributes : # ID Pixel_Values Class_Names # 1 1 A # 7 7 B # 8 8 C # 9 9 D # 19 19 E ``` I then attempt to write my raster together with its RAT: ``` ratRaster <- "F:/testRat.img" writeRaster(r, filename=ratRaster, datatype="INT1U", RAT=TRUE, progress="window", overwrite=TRUE) ``` But when I read it back into R, it becomes apparent that the attributes did not persist: ``` r2 <- raster(ratRaster) r2 # class : RasterLayer # dimensions : 3, 3, 9 (nrow, ncol, ncell) # resolution : 30, 30 (x, y) # extent : 347325, 347415, 4301655, 4301745 (xmin, xmax, ymin, ymax) # coord. ref. : +proj=utm +zone=18 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0 # data source : F:\testRat.img # names : testRat # values : 1, 19 (min, max) ``` It would be quick and awesome to build RATs in R. How can I create and export the raster and keep the RAT?