我的以下问题建立在@jbaums在此帖子上提出的解决方案的基础上:Global Raster of geographic distances
为了再现这个例子,我有一个到最近海岸线的距离的栅格数据集:
library(rasterVis); library(raster); library(maptools)
data(wrld_simpl)
# Create a raster template for rasterizing the polys.
r <- raster(xmn=-180, xmx=180, ymn=-90, ymx=90, res=1)
# Rasterize and set land pixels to NA
r2 <- rasterize(wrld_simpl, r, 1)
r3 <- mask(is.na(r2), r2, maskvalue=1, updatevalue=NA)
# Calculate distance to nearest non-NA pixel
d <- distance(r3) # if claculating distances on land instead of ocean: d <- distance(r3)
# Optionally set non-land pixels to NA (otherwise values are "distance to non-land")
d <- d*r2
levelplot(d/1000, margin=FALSE, at=seq(0, maxValue(d)/1000, length=100),colorkey=list(height=0.6), main='Distance to coast (km)')
数据如下所示:
从这里开始,我需要对距离栅格(d)进行子集化,或者创建一个新的栅格,它只包含到海岸线的距离小于200 km的单元格。我已经尝试使用getValues()来识别值<= 200的单元格(如下所示),但到目前为止还没有成功。有人可以帮忙吗?我是在正确的轨道上吗?
#vector of desired cell numbers
my.pts <- which(getValues(d) <= 200)
# create raster the same size as d filled with NAs
bar <- raster(ncols=ncol(d), nrows=nrow(d), res=res(d))
bar[] <- NA
# replace the values with those in d
bar[my.pts] <- d[my.pts]
答案 0 :(得分:3)
我认为这就是你要找的东西,你可以在d <- d*r2
行之后立即处理像矩阵一样的栅格:
d[d>=200000]<-NA
levelplot(d/1000, margin=FALSE, at=seq(0, maxValue(d)/1000, length=100),colorkey=list(height=0.6), main='Distance to coast (km)')
(如果你忘了:单位是米,所以门槛应该是200000,而不是200)