如何根据格网像元值对栅格进行子集 [英] How to subset a raster based on grid cell values

查看:21
本文介绍了如何根据格网像元值对栅格进行子集的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的以下问题基于@jbaum在本文中提出的解决方案: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公里的像元。我曾尝试使用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]

推荐答案

我认为这就是您要查找的内容,您可以在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%)

这篇关于如何根据格网像元值对栅格进行子集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆