如何在R栅格包中编写具有RAT因子的栅格

时间:2014-05-24 00:47:13

标签: r raster

我希望writeRaster编写我在R中构建的RAT(栅格属性表)。

我正在运行R 3.0.1,光栅2.1-49和rgdal 0.8-10。

我的输入栅格如下所示:

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)

然后构建我的属性表:

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

这导致raster具有属性:

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

然后我尝试将我的栅格与其RAT一起编写:

ratRaster <- "F:/testRat.img"
writeRaster(r, filename=ratRaster, datatype="INT1U", RAT=TRUE, progress="window", overwrite=TRUE)

但是当我把它读回R时,很明显属性没有持续下去:

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)

在R中构建RAT会很快和很棒。如何创建和导出栅格并保持RAT?

3 个答案:

答案 0 :(得分:2)

您始终可以将RAT编写为csv文件,然后再加入该数据。

按照指定编写栅格:

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

将属性data / table / RAT写为.csv文件:

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

然后您可以稍后在另一个程序中加入此数据。 例如,如果从R导出到ArcMap,请将栅格写入磁盘,将属性数据写为csv文件,然后使用ArcMap中的Add Join工具将RAT连接到栅格。

答案 1 :(得分:1)

阅读编写RAT的definition of writeRaster显然没有实现,至少对于native和GTif格式。实际上,首先要做的就是删除RAT。鉴于批准()帮助中的评论,这并不太令人惊讶:

  

这里记录的功能是        主要是可以读取带有RAT的文件        处理;目前没有太多的进一步支持。

从R到R,您可以随时使用

    save(r,file=ratRaster)

然后

    load(ratRaster)

它保留了一切。

答案 2 :(得分:1)

请注意,如果您使用栅格的本机 .grd 格式(请参阅doc,第3.3节),则会保存RAT表:

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")

现在重新开启:

r2 <- raster("raster_rat.grd")
r2