首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据格网像元值设置栅格的子集

如何根据格网像元值设置栅格的子集
EN

Stack Overflow用户
提问于 2017-08-01 10:43:29
回答 1查看 7.9K关注 0票数 6

我的以下问题基于@jbaum在这篇文章中提出的解决方案:Global Raster of geographic distances

为了重现示例,我有一个到最近海岸线的距离的栅格数据集:

代码语言:javascript
复制
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的单元格(如下所示),但到目前为止还没有成功。有人能帮上忙吗?我在正确的轨道上吗?

代码语言:javascript
复制
#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]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-01 11:07:53

我想这就是你要找的,你可以在d <- d*r2行之后像对待矩阵一样处理栅格:

代码语言:javascript
复制
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%)

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45428129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档