我有以下功能的光栅:
library(raster)
library(rgeos)
test <- raster(nrow=225, ncols=478, xmn=-15.8, xmx=32, ymn=-9.4, ymx=13.1)
我想在这个栅格中屏蔽一个点的给定距离内的单元格。 我按如下方式创建空间点:
p2=readWKT("POINT(31.55 -1.05)")
然后我通过添加0.5缓冲区来创建空间多边形对象:
p2_Buffered <- gBuffer(p2, width = 0.5)
mask(test, mask=p2_Buffered,inverse=T)
当我在给定此空间对象时屏蔽我的栅格时,出现以下错误消息:
.polygonsToRaster中的错误(x,y,field = field,fun = fun,background = background,:要替换的项目数不是替换长度的倍数
我不明白,因为这是我运行了很多次不同点和不同缓冲区宽度的脚本,没有任何问题。
奇怪的是,当我改变缓冲区的宽度时,它可以正常工作:
p2_Buffered <- gBuffer(p2, width = 0.4)
mask(test, mask=p2_Buffered,inverse=T)
对于另一个焦点也是如此:
p2=readWKT("POINT(32.55 -1)")
p2_Buffered <- gBuffer(p2, width = 0.5)
mask(test, mask=p2_Buffered,inverse=T)
我想确定我在这一点上遇到的具体问题,因为这是一个我应该在例程中运行的脚本(到目前为止我一直没有遇到任何问题)。
非常感谢
答案 0 :(得分:2)
这确实是一个遍布栅格边缘的多边形的错误。它已在版本2.3-40(现在在CRAN中)修复,因此如果您更新光栅包,它应该消失。
这是一个解决方法(删除多边形的一部分,越过边缘)。
library(raster)
library(rgeos)
r <- raster(nrow=225, ncols=478, xmn=-15.8, xmx=32, ymn=-9.4, ymx=13.1)
e <- as(extent(r), 'SpatialPolygons')
p <- readWKT("POINT(31.55 -1.05)")
pb <- gBuffer(p, width = 0.5)
pbe <- intersect(pb, e)
values(r)
x <- mask(r, mask=pbe, inverse=TRUE)
答案 1 :(得分:1)
您通常需要为栅格图层设置一些值。对于遮罩层,最好将值设置为1.
library(raster)
library(rgeos)
# make sample raster
test <- raster(nrow=225, ncols=478, xmn=-15.8, xmx=32, ymn=-9.4, ymx=13.1)
# set values of raster for mask
test <- setValues(test, 1)
# make point buffer
p2=readWKT("POINT(15 5)")
p2_Buffered <- gBuffer(p2, width = 1.5)
# name projection of buffer (assume its the same as raster)
projection(p2_Buffered) <- projection(test)
# visual check
plot(test); plot(p2_Buffered, add=T)
如果要将栅格图层修剪为仅单个多边形,请尝试此工作流程。
step1 <- crop(test, p2_Buffered) # crop to same extent
step2 <- rasterize(p2_Buffered, step1) # rasterize polygon
final <- step1*step2 # make your final product
plot(final)
如果您只想在栅格图层中戳一个洞,请使用遮罩功能
# rasterize your polygon
p2_Buffered <- rasterize(p2_Buffered, test, fun='sum')
# now mask it
my_mask <- mask(test, mask=p2_Buffered,inverse=T) # try changing the inverse argument
plot(my_mask)