问题描述
我在使用Raster *对象时遇到问题。我想从栅格的顶部和底部行提取坐标,然后使用它们来创建一个仅在那些像元中具有值的新栅格。这可能是一个错误的解释,因此我将提供一个示例:
r <- raster(xmn=-150,xmx=-120,ymx=60,ymn=30,ncol=36,nrow=18)
values(r) <- 1:ncell(r)
ncol_r <- ncol(r)
ncell_r <- ncell(r)
N_nodes_cells_r <- 1:ncol_r # first row (N,for North)
S_nodes_cells_r <- ((ncell_r - ncol_r)+1):ncell_r # final row (S,for South)
NS_nodes_r <- rbind(xyFromCell(r,cell=c(N_nodes_cells_r),spatial=T),xyFromCell(r,cell=c(S_nodes_cells_r),spatial=T))
r_NS_nodes <- rasterize(x = NS_nodes_r,y = r)
plot(r_NS_nodes)
这很好用。但是,我想做得更大。因此,我将扩展区以及ncol
和nrow
参数替换为与我正在使用的真实栅格相同的值。见下文:
r <- raster(xmn=-117.2667,xmx=-97.13757,ymn=25.42458,ymx=33.16274,ncol=785,nrow=2042)
values(r) <- 1:ncell(r)
ncol_r <- ncol(r)
ncell_r <- ncell(r)
N_nodes_cells_r <- 1:ncol_r
S_nodes_cells_r <- ((ncell_r-ncol_r)+1):ncell_r
NS_nodes_r <- rbind(xyFromCell(r,y = r)
plot(r_NS_nodes)
除了现在,仅在 更改形状和分辨率之后,rasterize
函数仅返回 top 行!我很困惑...
我认为rasterize
肯定有问题,因为r_NS_nodes
包含顶行和底行的坐标:
plot(r); points(NS_nodes_r)
请,如果有人可以向我解释或提供解决方案,我将不胜感激。
-亚历克斯。
解决方法
这些值在那里,但未显示在绘图上(屏幕上的像素不足):
r_NS_nodes[nrow(r_NS_nodes),1:3]
#[1] 786 787 788
也可以看到
a <- aggregate(r_NS_nodes,100,na.rm=T)
plot(a)
这是获取细胞编号的另一种方法
library(raster)
r <- raster(xmn=-150,xmx=-120,ymx=60,ymn=30,ncol=36,nrow=18)
values(r) <- 1:ncell(r)
cells <- cellFromRowColCombine(r,c(1,nrow(r)),1:ncol(r))
现在您可以做
xy <- xyFromCell(r,cells)
rr <- rasterize(xy,r)
或
rout <- raster(r)
rout[cells] <- 1:length(cells)
或者您可以放弃计算细胞数并进行
rout <- raster(r)
cols <- 1:ncol(r)
rout[c(1,] <- c(cols,cols+ncol(r))