我试图以一种与栅格的每个单元格重叠的多边形的数量来对一个SpatialPolygons对象进行栅格化。我的多边形有洞。我的问题是,如果两个洞重叠,它包括这个重叠在计数中。
我创造了一个玩具例子:
library(sp)
library(raster)
p1 <- rbind(c(-180,-20), c(-140,55), c(10, 0), c(-140,-60), c(-180,-20))
hole <- rbind(c(-150,-20), c(-100,-10), c(-110,20), c(-150,-20))
p1 <- list(p1, hole)
p2 <- rbind(c(-10,0), c(140,60), c(160,0), c(140,-55), c(-10,0))
p3 <- rbind(c(-180,-20), c(-130,55), c(0,60), c(40,5), c(15,-45), c(-180,-20))
p3 <- list(p3, hole)
pols <- spPolygons(p1, p2, p3)
pols@polygons[[1]]@Polygons[[2]]@hole
pols@polygons[[3]]@Polygons[[2]]@hole
r1 <- raster(ncol=180, nrow=180)
r <- rasterize(pols, r1, fun="count")
plot(pols, col=rgb(1,0,0,0.5))
plot(r)我认为这可能是导致与use R to rasterize shapefile with holes?相关的问题的原因,但是没有最终的解决方案。问题是,rasterize ESRI shapefile with holes but FALSE hole slots的问题是,这些漏洞没有正确地形成,但这不是我的情况。如果你看看这些洞,它们都是真的,请看:
pols@polygons[[1]]@Polygons[[2]]@hole
pols@polygons[[3]]@Polygons[[2]]@hole任何帮助都将不胜感激!
发布于 2018-08-12 18:40:21
使用包fasterize进行栅格化(除了速度更快)似乎可以避免这个问题:
library(fasterize)
library(sf)
r1 <- raster(ncol=180, nrow=180)
r <- fasterize::fasterize(sf::st_as_sf(pols),
r1, fun = "count")
plot(r, col = rainbow(3))

哈哈!
发布于 2018-08-11 01:02:22
这是一个解决办法。首先对每个多边形进行扫描,然后对它们进行汇总。通过这样做,洞将为零。
library(sp)
library(raster)
# Create a list of Spatial Polygons
pols_list <- lapply(list(p1, p2, p3), spPolygons)
# Create a blank raster
r1 <- raster(ncol = 180, nrow = 180)
# Rasterize each polygon
r_list <- lapply(pols_list, rasterize, y = r1, fun = "count")
# Create a raster stack
s <- stack(r_list)
# Calculate the sum
r2 <- sum(s, na.rm = TRUE)
# Plot r2
plot(r2)

https://stackoverflow.com/questions/51794262
复制相似问题