R采样方形多边形的栅格

时间:2017-11-16 19:40:00

标签: r polygon raster sampling spatstat

我想通过在小光栅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并单独堆叠每个小光栅......

2 个答案:

答案 0 :(得分:2)

如果您想使用spatstat,则需要将栅格对象r转换为im支持的类spatstat的对象。您可以在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是各个子栅格的列表。

答案 1 :(得分:2)


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

以下是大小为100x100

im个对象的列表
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个对象列表 如果您需要这种格式,请在100x100框外NA

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