我有两个问题。
问题1: 我想删除其质心不在栅格上方的网格的所有单元格。我甚至不确定我是否正在使用正确的"类型的对象" (RasterLayer,SpatialPixels等)。
请参阅下面的虚拟数据示例:
# Load package
library(raster)
# Create raster and define coordinate reference system
ras <- raster(nrows = 100, ncol = 100, xmn = 0, xmx = 100, ymn = 0, ymx = 100)
proj4string(ras) <- CRS("+init=epsg:32198")
# Generate random values
val <- sample(x = 1:100, size = ncell(ras), replace = T)
values(ras) <- val
# Create effort grid
xym <- matrix(c(-30,130,130,-30,-30,-30,130,130), nrow = 4, ncol = 2)
p <- Polygon(xym)
ps <- Polygons(list(p), 1)
sps <- SpatialPolygons(list(ps))
proj4string(sps) <- CRS("+init=epsg:32198")
data <- data.frame(f = 99.9)
spdf <- SpatialPolygonsDataFrame(sps, data)
ptsreg <- spsample(spdf, 50, type = "regular")
grid <- SpatialPixels(ptsreg)
# Plot raster over grid
plot(grid)
plot(ras, add = T)
问题2:还有另一种创建工作网格的方法吗?我的代码有效,但我很确定这是一种更简单的方法吗?
另外......在这个例子中,我首先绘制了网格并添加了栅格。如果我以另一种方式(栅格优先和栅格秒)执行,则生成的绘图不会显示网格的整个范围。
答案 0 :(得分:0)
关于第一个问题,这是一个选项。尝试:
cont <- as(extent(ras), "SpatialPolygons")
proj4string(cont ) <- CRS("+init=epsg:32198")
grid.small <- grid[!is.na(grid%over%cont)]
首先使用栅格范围制作多边形,然后使用%over%函数对网格进行子采样。我认为它可以为您提供所需的结果。
对于你的第二个问题,它不是最好的,但请尝试:
plot(grid)
plot(ras,add=T)
plot(grid,add=T)
简单而有效。通常,
plot(ras,ext=extent(grid))
plot(grid,add=T)
应该有效,但事实并非如此,我无法弄明白为什么......
对于R中的所有内容,总有多种方法可以做一件事。如果你尝试我的建议并且它对你的真实数据没有效率,那么值得尝试寻找其他解决方案。