Raster :: focal函数用NA值替换边缘像元

时间:2019-01-13 21:22:59

标签: raster

我正在尝试使用raster :: focal找出每个栅格像元有多少个值为1的邻居。但是,我注意到在生成的栅格中,边缘像元已被替换为NA值。如何获得栅格外边缘的邻居计数?

以下是可重现的示例:

#create raster and add 1's and 0's
land <- raster(matrix(0, 8, 10), xmn=408027.5, xmx=413027.5, ymn=4370000, 
ymx=4374000)
land[4:8, 2:5] <- 1
land[2:3, 8:9] <- 1
land[1,0:10] <- 1
land[is.na(land[])] <- 0
#plot the raster
plot(land)

raster

#create window for focal function
w <- matrix(1,3,3)
#run raster::focal
land.foc <- focal(land, w=w, fun=sum)
#plot resulting focal raster
plot(land.foc)

focal

#plot NA values in land.foc
plot(is.na(land.foc))

edge NAs

但是,当您比较两个栅格时可以看到,焦点栅格中最外面的像元已被替换为NA。

1 个答案:

答案 0 :(得分:2)

您只需要设置pad=TRUEpadValue=0。这会“扩展”您的栅格并与padValue(在本例中为0)一起添加虚拟行和列。

land.foc <- focal(land, w=w, fun=sum,pad=T,padValue=0)

plot(land.foc)

enter image description here

plot(is.na(land.foc))

enter image description here

编辑:

另一种查看方式是虚拟单元格没有任何值,它们是NA

因此,无需将0分配为padValue,只需将na.rm=TRUE添加到您的通话中即可。

如果确实需要对虚拟单元格做其他事情,则可以创建自己的函数,该函数处理更具体的NA单元,然后将其传递给焦点。