R裁剪光栅使用沿边界保持单元格的多边形

时间:2017-05-17 11:14:04

标签: r polygon crop mask raster

我试图在this raster裁剪意大利,但输出似乎错过了边境的一些细胞。请参见下图中以红色突出显示的区域: enter image description here

如何保留所有跨越边界的细胞?

以下是我的剧本:

SELECT
    charges.id,
    GROUP_CONCAT(bic.is_deactivated) AS active_statuses 
FROM charges
LEFT JOIN billing_invoice_charges AS bic
ON bic.charge_id = charges.id
GROUP BY charges.id
HAVING active_statuses NOT LIKE '%0%'

2 个答案:

答案 0 :(得分:2)

这是一种方法。我们使用gdalUtils::gdal_rasterize创建一个带at=TRUE的二进制掩码栅格,以确保将值1刻录到意大利多边形触及的所有单元格中。 gdal_rasterize指的是磁盘上的文件,因此首先将IT写入OGR支持的文件。

library(gdalUtils)
library(rgdal)
x_crop <- crop(x, IT)
writeOGR(IT, tempdir(), f <- basename(tempfile()), 'ESRI Shapefile')
gdal_rasterize(sprintf('%s/%s.shp', tempdir(), f), 
               f2 <- tempfile(fileext='.tif'), at=T,
               tr=res(x_crop), te=c(bbox(x_crop)), burn=1, 
               init=0, a_nodata=0, ot='Byte')

plot(x_crop*raster(f2)) # multiply the raster by 1 or NA
plot(IT, add=TRUE)

enter image description here

答案 1 :(得分:0)

您可以识别与意大利相交的所有栅格单元,并将剩余的,即非交叉像素设置为NA。确保通过cellFromPolygon(..., weights = TRUE)检索具有各自权重的单元格 - 否则,只返回意大利语中心的单元格(请参阅?raster::extract)。

## identify cells covering italy and set all remaining pixels to NA
cls <- cellFromPolygon(x, IT, weights = TRUE)[[1]][, "cell"]
x[][-cls] <- NA

plot(trim(x))
plot(IT, add = TRUE)

enter image description here