从R中的Raster *中提取行的问题

问题描述

我在使用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)

这很好用。但是,我想做得更大。因此,我将扩展区以及ncolnrow参数替换为与我正在使用的真实栅格相同的值。见下文:

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))

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...