关于栅格包中mask()函数的困惑

时间:2018-06-12 17:00:01

标签: r gis geospatial raster r-raster

我提前为这个问题的基本性质道歉,但我对于掩码()函数在R中的栅格包中是如何工作感到困惑。

如果这些单元格与掩码对象中的掩码值匹配(默认掩码值为NA),则读取它听起来像栅格x中的单元格的函数的文档将设置为NA(默认值)。但是,Lovelace等人在书中 Geocomputation with R 中对mask()函数的描述。 (https://geocompr.robinlovelace.net/spatial-operations.html#spatial-ras)(第4.3.1节)使得声音如果光栅x中的单元格与面具对象中的掩模值匹配则为KEPT,如果它们不相同则设置为NA。他们举了这个例子:

mask(elev, rmask, maskvalue = TRUE)

"we only want to keep those values of elev which are TRUE in rmask"

因此我的困惑。如果有人能澄清哪种解释是正确的,我将不胜感激。

我想知道的原因是我想要使用包含数据质量代码的同一MODIS产品中的栅格屏蔽包含百分比树覆盖的MODIS数据的栅格。我只想在"树盖"中保留这些值。光栅质量很好"质量和质量的质量代码"光栅。澄清mask()函数的工作原理将帮助我确定是否需要使用代码[1]或代码[2]来实现我想要的东西:

[1]

good <- c(0,1,2,3,4,5...etc.)  # The codes in the quality raster that represent good quality data

tree_cover_masked <- mask(tree_cover, quality, maskvalue = good, inverse = TRUE)

# i.e. set cells in tree_cover to NA if they match any value OTHER THAN the "good" values in the quality raster.
# This is the code I would use based on my interpretation of the function documentation.

[2]

tree_cover_masked <- mask(tree_cover, quality, maskvalue = good)

# i.e. keep values in tree_cover that match "good" values in the quality raster, and set all others to NA
# This is the code I would use based on my interpretation of Lovelace et al.

如果这个问题非常简单,请再次道歉,但我很感激你的帮助!

1 个答案:

答案 0 :(得分:1)

是什么阻止你做一个小例子并测试哪种方法有效?在您的情况下,[1]和[2]都不起作用,因为maskvalue是单个值(如果提供更长的向量,则为第一个值)。您可能想先使用重新分类

示例数据

library(raster)
qual <- trees <- raster(nrow=4, ncol=4, xmn=0, xmx=1, ymn=0, ymx=1, crs='+proj=utm +zone=1')
values(trees) <- rep(1:4, 4)
values(qual) <- rep(1:8, 2)

创建一个具有良好(4 - 8)和坏(1 - 8)值的RasterLayer,然后使用mask

good <- reclassify(qual, rbind(c(0, 4, NA), c(4, 9, 1)))
# this would also work
# good <- reclassify(qual, cbind(0, 4, NA))

x <- mask(trees, good)

或者:

good <- subs(qual, data.frame(from=c(5,6,7,8,9), 1))
x <- mask(trees, good)