【发布时间】:2021-05-04 00:18:02
【问题描述】:
基本上我有 12 个多光谱图像,我想使用 2 个多边形(小水体)对它们进行遮罩。这 2 个多边形在一个 shapefile 中,但如果可以使过程更容易,我可以将它们分解。在一些优秀用户的帮助下,我在一个多边形上使用 12 个图像对这一切进行了测试,效果很好,但我最终需要对多个多边形执行此操作,所以我想调整我的代码。
使用单个多边形裁剪所有栅格的循环:
#The single polygon
mask <- st_read(here::here("data", "mask.shp") %>%
st_as_sf()
#Creates list of input files and their paths
crop_in <- list.files(here::here("data", "s2_rasters"), pattern="tif$", full.names=TRUE)
#Creates list of output files and their directory.
crop_out <- gsub(here::here("data", "s2_rasters"), here::here("data", "s2_cropped"), crop_in)
for (i in seq_along(crop_in)) {
b <- brick(crop_in[i])
crop(b, mask, filename = crop_out[i])
}
就像我说的那样,这很好用,但我想遮罩而不是裁剪。此外,我需要使用多个多边形进行遮罩。
我的工作循环做同样的事情,但多 (2) 个多边形:
masks_2 <- st_read(here::here("data", "multiple_masks.shp")) %>%
st_as_sf()
for (i in seq_along(crop_in)) {
b <- brick(crop_in[i])
mask(b, masks_2, filename = crop_out[i], overwrite = TRUE)
}
这花了大约 2 个小时(这让我很怀疑),我认为它在途中的某个地方丢失了多边形 ID。当我尝试绘制结果时,情节是空的。我的最终输出应该是 24 个栅格堆栈,每个多边形 12 个。我需要做进一步的图像分析,所以我需要保留名字。我希望这是有道理的,谢谢!
【问题讨论】: