使用 rasterize 函数光栅化小多边形的问题
Posted
技术标签:
【中文标题】使用 rasterize 函数光栅化小多边形的问题【英文标题】:Problem to rasterize small polygons with rasterize function 【发布时间】:2021-12-24 20:31:30 【问题描述】:我正在尝试从多多边形 shapefile 生成大量二进制栅格。 我的快照栅格有一个大像素,0.5 x 0.5 度。我在栅格化大多边形时没有大问题,但是对于小的多边形,我正在写空栅格(全为 0)。我想知道 rasterize 函数中是否有一个容差参数,通过该参数我可以将 1 分配给多边形接触的每个像素(即使接触的多边形的百分比非常小)。 这是代码的一部分 for (i in 1:length(shape)) shape.r
谢谢! 哈维尔。
【问题讨论】:
【参考方案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
【讨论】:
太棒了!非常感谢你,罗伯特! 您好!我尝试使用 terra::rasterize (small=T , touches=T ),但我仍然遇到同样的问题,对于非常小的多边形,我继续编写充满 0 的栅格……还有其他解决方案吗?非常感谢您提前。哈维尔。 我已经扩展了我的答案 伟大的罗伯特!谢谢你。我相信在这种情况下,我会遇到大多边形的问题,但是,也许我可以尝试,首先使用我的捕捉栅格将多边形转换为点,我这样做了,然后我可以栅格化点文件!你认为它可以工作吗? 大多边形会有什么问题?以上是关于使用 rasterize 函数光栅化小多边形的问题的主要内容,如果未能解决你的问题,请参考以下文章