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