我希望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?
答案 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