【问题标题】:Problem to rasterize small polygons with rasterize function使用 rasterize 函数光栅化小多边形的问题
【发布时间】:2021-12-24 20:31:30
【问题描述】:

我正在尝试从多多边形 shapefile 生成大量二进制栅格。 我的快照栅格有一个大像素,0.5 x 0.5 度。我在栅格化大多边形时没有大问题,但是对于小的多边形,我正在写空栅格(全为 0)。我想知道 rasterize 函数中是否有一个容差参数,通过该参数我可以将 1 分配给多边形接触的每个像素(即使接触的多边形的百分比非常小)。
这是代码的一部分 for (i in 1:length(shape)) { shape.r

谢谢! 哈维尔。

【问题讨论】:

    标签: r gis shapefile r-raster rasterize


    【解决方案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 的栅格……还有其他解决方案吗?非常感谢您提前。哈维尔。
    • 我已经扩展了我的答案
    • 伟大的罗伯特!谢谢你。我相信在这种情况下,我会遇到大多边形的问题,但是,也许我可以尝试,首先使用我的捕捉栅格将多边形转换为点,我这样做了,然后我可以栅格化点文件!你认为它可以工作吗?
    • 大多边形会有什么问题?
    猜你喜欢
    • 2014-02-15
    • 2018-08-25
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多