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])
我想通过在小栅格中创建 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])