R 对具有正方形多边形的栅格进行采样

R sample a raster with square polygons

我想通过在小栅格中创建 100x100 像元来对大栅格进行采样。 我不知道该怎么做所以欢迎任何想法

我的实际领先优势:

library(raster)
library(spatstat)
library(polyCub)

r <- raster(ncol=1000,nrow=1000) # create empty raster
r[] <- 1:(1000*1000)             # Raster for testing
e <- extent(r)                   # get extend
# coerce to a SpatialPolygons object
p <- as(e, 'SpatialPolygons')  


nc <- as.owin.SpatialPolygons(p) #polyCub
pts <- rpoint(50, win = nc)
plot(pts)

现在我需要在我的 50 个点周围生成 100x100 像元正方形,我想使用这些正方形裁剪 r 并单独堆叠每个小栅格 ...

如果要使用spatstat,则需要将栅格对象r转换为spatstat支持的classim对象。您可以在 maptools 包中进行此转换。调用此图像对象 rim。那么你可以如下操作

Box <- owin(c(-50,50) * rim$xstep, c(-50,50) * rim$ystep)
BoxesUnion <- MinkowskiSum(pts, Box)
W <- intersect.owin(as.mask(rim), BoxesUnion)

这将为您提供被正方形覆盖的栅格子集。 如果你想把方块分开,做类似

的事情
M <- as.mask(rim)
BoxList <- solapply(seq_len(npoints(pts)), 
                      function(i) intersect.owin(M, shift(Box, pts[i])))

然后 BoxList 是单个子栅格的列表。


@adrian-baddeley 的回答基本上包含了可以做什么的要素 你要。如果您只是想要一个包含 im 个小对象的列表 100x100 框,您只需将 im 个对象子集化 owin 个对象即可 提取相关区域。这是一个示例(要点较少 避免过度绘制)

library(raster)
library(spatstat)
library(maptools)

r <- raster(ncol=1000,nrow=1000) # create empty raster
r[] <- 1:(1000*1000)             # Raster for testing
e <- extent(r)                   # get extend
# coerce to a SpatialPolygons object
p <- as(e, 'SpatialPolygons')  

nc <- as.owin.SpatialPolygons(p)
set.seed(42)
pts <- rpoint(7, win = nc)

rim <- as.im.RasterLayer(r)
Box <- owin(c(-50,50) * rim$xstep, c(-50,50) * rim$ystep)

以下是 im 个大小为 100x100

的对象的列表
imlist <- solapply(seq_len(npoints(pts)),
                   function(i) rim[shift(Box, pts[i])])

这是区域中 im 个对象和顶部点的图

plot(pts)
for(i in imlist) plot(i, add = TRUE)
plot(pts, pch = 19, add = TRUE)

您可以使用

转换为栅格图层列表
rasterList <- lapply(imlist, as, Class = "RasterLayer")

PS:下面是im个原始大小的对象列表 NA 如果您需要该格式,请在 100x100 框外

imlist <- solapply(seq_len(npoints(pts)),
                   function(i) rim[shift(Box, pts[i]), drop = FALSE])