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

Issue with extracting rows from a Raster* in R

我 运行 遇到了使用 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, 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)

除此之外,现在 更改形状和分辨率后,rasterize 函数 returns 仅 top 排!我很困惑...

我认为 rasterize 一定有问题,因为 r_NS_nodes 包含顶行和底行的坐标:

plot(r); points(NS_nodes_r)

拜托,如果有人能给我解释一下,或者提供解决方案,我将不胜感激。

-Alex.

值在那里,但没有显示在你的绘图上(你的屏幕上没有足够的像素):

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, nrow(r)), ] <- c(cols, cols+ncol(r))