0

我正在尝试从多多边形 shapefile 生成大量二进制栅格。我的快照栅格有一个大像素,0.5 x 0.5 度。我在栅格化大多边形时没有大问题,但是对于小的多边形,我正在写空栅格(全为 0)。我想知道 rasterize 函数中是否有一个容差参数,通过它我可以将 1 分配给多边形接触的每个像素(即使接触的多边形的百分比非常小)。
这是 (i in 1:length(shape)) { shape.r<-rasterize(shape[i,],snap, background=0) writeRaster(shape.r, filename = paste(shape[ i,]$binomial, sep=""), 格式 = "GTiff", 覆盖 = T) }

谢谢!哈维尔。

4

1 回答 1

1

这是一些示例数据

f <- system.file("ex/lux.shp", package="terra")
v <- vect(f)
x <- lapply(1:nrow(v), \(i)rescale(v[i,], 0.2))
vv <- vect(x)
r <- rast(v, ncols=10, nrows=10)
b <- as.lines(r)

如果多边形相对于像元大小较小,标准rasterize方法会遗漏很多多边形。

x <- rasterize(vv, r, "ID_2")
plot(x)
lines(b, col="light gray")
lines(vv)

在此处输入图像描述

在这种情况下,该论点touches=TRUE可以提供帮助

xx <- rasterize(vv, r, "ID_2", touches=TRUE)
plot(xx)
lines(b, col="light gray")
lines(vv)

在此处输入图像描述

但如果它们的多边形更小,它们仍然可能被遗漏。处理这个问题的一种方法是也栅格化多边形的质心(栅格化可能应该有一个参数来自动执行此操作)。

cnt <- centroids(vv)
# leaving out touches=T otherwise the example is not interesting
# with these data
x <- rasterize(vv, r, "ID_2")
y <- rasterize(cnt, r, "ID_2")
z <- cover(x, y)

plot(z)
lines(b, col="light gray")
lines(vv)

在此处输入图像描述

你也可以考虑使用

x <- rasterize(vv, r, cover=TRUE)
x <- x > 0    
于 2021-11-12T16:17:45.800 回答