删除质心不在栅格上的网格单元格

时间:2016-11-18 15:47:26

标签: r r-raster centroid

我有两个问题。

问题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:还有另一种创建工作网格的方法吗?我的代码有效,但我很确定这是一种更简单的方法吗?

另外......在这个例子中,我首先绘制了网格并添加了栅格。如果我以另一种方式(栅格优先和栅格秒)执行,则生成的绘图不会显示网格的整个范围。

enter image description here

如何在栅格上绘制网格但仍显示整个网格?如: enter image description here

1 个答案:

答案 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中的所有内容,总有多种方法可以做一件事。如果你尝试我的建议并且它对你的真实数据没有效率,那么值得尝试寻找其他解决方案。