按单元格编号勾勒出感兴趣的栅格单元格

Outline a raster cell of interest by cell number

我想在给定图中的单元格编号的情况下勾勒出栅格单元格的轮廓。我做了一个简化的例子,我可以在 power point 中制作,但可能有一个更难做到这一点的分辨率(720 x 360 与 3 x 5)。 要生成示例数据:

library(raster)
x = raster(matrix(seq(1,15), nrow = 3))
plot(x)

我想修改 plot 命令(最好),这样如果我 select 第 5 个单元格,结果看起来像这样:

这段代码应该可以满足您的需求。

plot(raster(matrix(seq(1,15), nrow = 3)))

gridx = 5
gridy = 3
dx = 1/gridx #resolution of the grid 
dy = 1/gridy

# if you want to specify the cell number (cell 1 is bottom left):

cell = 15
ny = floor(cell/gridx - dx)+1
nx = cell-gridx*(ny-1)

# if you want to give cell positions, just edit nx, ny

x1 = c(nx-1,nx-1,nx-1,nx)*dx
y1 = c(ny-1,ny,ny-1,ny-1)*dy
x2 = c(nx,nx,nx-1,nx)*dx
y2 = c(ny-1,ny,ny,ny)*dy

segments(x1,y1,x2,y2,col=2,lwd=2)

这是一种通用方法,我们根据感兴趣的单元格的行和列绘制 extent

library(raster)
r <- raster(matrix(1:15, nrow=3))
plot(r)
rc <- rowColFromCell(r, 5)
plot(extent(r, rc[1], rc[1], rc[2],  rc[2]), add=TRUE, col='red', lwd=3)

extent 的第二个到第四个参数确定将用于计算范围的行(参数 2 和 3)和列(参数 4 和 5)的跨度。

如果我们想勾勒出单元格 3、4、8 和 9,我们可以这样做:

plot(r)
rc <- rowColFromCell(r, c(3, 4, 8, 9))
plot(extent(r, min(rc[, 1]), max(rc[, 1]), 
            min(rc[, 2]),  max(rc[, 2])), add=TRUE, col='red', lwd=3)

这适用于连续单元格周围的矩形范围。如果您想概述任意选择的单元格,可以考虑 rasterToPolygons。例如。对于单元格 2、8、9、11 和 14:

plot(r)
r2 <- r
r2[setdiff(seq_len(ncell(r2)), c(2, 8, 9, 11, 14))] <- NA
r2[!is.na(r2)] <- 1
plot(rasterToPolygons(r2, dissolve=TRUE), add=TRUE, border='red', lwd=2)

在这里,我们创建栅格的副本,将所有 other 像元设置为 NA,然后将焦点像元设置为共同值(1, 在这种情况下)。 rasterToPolygons 然后将 non-NA 单元格转换为多边形,如果需要则溶解接触的多边形。