我有一个空间点DFspo
(覆盖一个不规则形状的感兴趣区域)。由于crs转换,数据不在常规网格上。
我的目标是创建一个具有预定义分辨率和感兴趣区域范围的光栅(更多的空间点数据将映射在此主光栅上)。
问题从我开始
rasterize(spo, raster(ncol, nrow, extent, crs), spo$param)
我需要调整nrow
和ncol
,这样我就不会在我感兴趣的区域内得到NA的莫尔条纹。我不能使用预定义(更高)的分辨率,因为rasterize
没有插值功能。
作为解决方案,我想我可能需要某种空间像素DFspi
,它覆盖了我感兴趣的整个区域(就像library(raster); data(meuse.grid)
中的meuse.grid),并用作主网格。然后,我可以用它来插值我的数据,例如
idw(param~1,spo,spi)
通过这一点,以我选择的决议全面覆盖我感兴趣的领域。但是,如何从点数据生成空间像素数据帧呢?
因此,在我看来,问题可以归结为:如何从meuse数据集生成meuse.grid?
也许我在这里采取了错误的方法,所以请告诉我是否可以用不同的方式更容易地实现我想要的目标。
如果您有一个定义感兴趣区域边界的多边形(您应该这样做),那么它是直的。一种方法是使用geoR
中的polygrid
函数,它本身只是SpatialPoints
、expand.grid
和overlay
的包装器
假设你有一个定义你感兴趣区域的多边形,称为ROI
在这种情况下,我将从meuse.grid 创建一个
data(meuse.grid)
coordinates(meuse.grid) = ~x+y
x <- chull(meuse.grid@coords)
borders <- meuse.grid@coords[c(x,x[1]),]
ROI <- SpatialPolygons(list(Polygons(list(Polygon(borders)), ID = 'border')))
实际上,要使用polygrid
,只需要定义感兴趣区域的多边形坐标。
要创建覆盖该ROI区域的10m网格,您可以创建对polygrid
的调用
# get the bounding box for ROI an convert to a list
bboxROI <- apply(bbox(ROI), 1, as.list)
# create a sequence from min(x) to max(x) in each dimension
seqs <- lapply(bboxROI, function(x) seq(x$min, x$max, by= 10))
# rename to xgrid and ygrid
names(seqs) <- c('xgrid','ygrid')
thegrid <- do.call(polygrid,c(seqs, borders = list(ROI@polygons[[1]]@Polygons[[1]]@coords)))