我试图在this raster裁剪意大利,但输出似乎错过了边境的一些细胞。请参见下图中以红色突出显示的区域:
如何保留所有跨越边界的细胞?
以下是我的剧本:
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%'
答案 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)
答案 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)