Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to write a raster with RAT factors in R raster package

Tags:

r

raster

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?

like image 287
RichT Avatar asked May 24 '14 00:05

RichT


2 Answers

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
like image 96
Matifou Avatar answered Nov 15 '22 20:11

Matifou


You could always write the RAT as a csv file, then join that data later.

Write your raster as you specified:

writeRaster(r, filename=ratRaster, datatype="INT1U", RAT=TRUE, progress="window", overwrite=TRUE)

Write the attribute data/table/RAT as a .csv file:

write.csv(rat, file="C:\\merp\\rat.csv", row.names = F)

Then you can join this data in another program later. For example, if exporting from R to ArcMap, write the raster to disk, write the attribute data as csv file, then join your RAT to the raster using the Add Join tool in ArcMap.

like image 39
derelict Avatar answered Nov 15 '22 20:11

derelict