从文件读取时如何避免栅格属性表中未使用的级别

问题描述 投票:1回答:1

让我们创建一个具有栅格属性表(RAT)的演示栅格。

library(raster)
library(rasterVis)    
r = raster(matrix(1:4, 6, 6))
levels(r) = data.frame(ID = 1:4, class=LETTERS[1:4])
levelplot(r)

enter image description here

并使用geotiff格式保存

writeRaster(r, 'temp.tif')

现在,如果我们从文件中读取栅格,则它在RAT中还有一个未使用的行。

r = raster('temp.tif')
levels(r)[[1]]
#   ID category
# 1  0         
# 2  1        A
# 3  2        B
# 4  3        C
# 5  4        D

levelplot(r)

enter image description here

似乎无论原始数据中存在什么级别,保存和加载都会插入从零到最大值的每个整数值:

r = raster(matrix(2*(1:4), 6, 6))
levels(r) = data.frame(ID = 2*(1:4), class=LETTERS[1:4])
writeRaster(r, 'temp.tif')
r = raster('temp.tif')
levels(r)[[1]]
#   ID category
# 1  0         
# 2  1         
# 3  2        A
# 4  3         
# 5  4        B
# 6  5         
# 7  6        C
# 8  7         
# 9  8        D

当然,可以在加载后手动删除任何虚假电平。但是我想知道是否有一种方法可以可靠地保存然后在不更改RAT的情况下加载Geotiff。

r r-raster
1个回答
0
投票

似乎您必须从零开始计数。

library(raster)
library("rasterVis")    
r1 = raster(matrix(0:3, 6, 6))
levels(r1) = data.frame(ID = 0:3, class=LETTERS[1:4])
writeRaster(r1, 'temp.tif', overwrite=TRUE)
r2 <- raster('temp.tif')
levelplot(r2)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.