我有一个栅格,我想使用
terra::mask()
来屏蔽它。在文档中,我发现您可以使用参数 touches = TRUE
来包含“由线条或多边形接触的所有单元格”。然而,这似乎不起作用,因为它只保留多边形接触的栅格的一些单元格。这就是我的意思。
这是遮罩之前的栅格和覆盖的形状文件。
这是屏蔽后的栅格和覆盖的形状文件:
显然,并非所有接触多边形的单元格都被保留。这是我的代码:
shp <- sf::read_sf("Z:/AG/Ph/GIS/statistics_subcatchments/catchment_GS6_2_4326.shp")
shp <- sf::st_transform(shp, st_crs = "EPSG:4326" |> terra::vect())
ras_crop <- terra::crop(ras_raw, shp)
ras_mask <- terra::mask(ras_crop, shp, touches = T)
我上传了栅格
ras_raw
,即第一张图像中的栅格,以及代码中提到的shapefile shp
:https://file.io/xSBYLGBTfi55
我确实尝试使用
raster
包来完成此任务,但是,没有选项可以指定应保留触摸的单元格。我还检查了这是否是crs()
的问题,然而,情况也并非如此。我真的很感激一些帮助!
我想通了。解决方案是
extract
包中的 terra
函数。它的一个很好的附加功能是,它还可以为您提供覆盖多边形的每个像素的分数。