使用点屏蔽光栅的最快方法

Fastest way to mask raster using points

我有一个非常大的 rasterbrick 并且一些坐标保存在不同的对象中。我希望将这些点用作掩码,为我的点所在的所有单元格 除了 返回 NA (对于我的特定应用程序,我需要保留输入的范围、分辨率和原点 rasterbrick).

我可以通过以下方式完成此操作:

library(raster)
library(tidyverse)
library(sf)

# Load a rasterbrick
b <- brick(system.file("external/rlogo.grd", package="raster"))

# Create some random points as test points for masking
pts<-as_tibble(rasterToPoints(b[[1]])) %>% 
  select(x, y) %>% 
  sample_n(15, replace = TRUE)

plot(b[[1]])
points(pts)

# Convert points to SpatialPoints so they can be passed to `mask`
pts <- st_as_sf(x = pts, coords = c("x", "y"),
                crs = crs(b))

# Mask stack using pts
xx<-raster::mask(b, pts)
plot(xx)

在此示例中,代码执行速度非常快,但按比例放大时,可能需要很长时间才能达到 运行。对于大型多层 rasterbrick,更有效的方法是什么?对于规模感,我的 rasterbrick's are360, 720, 259200, 3653 (nrow, ncol, ncell, nlayers)` 所以加快速度会很棒。

那是很多层。

您的代码(经过一些简化)

library(raster)
b <- brick(system.file("external/rlogo.grd", package="raster"))
set.seed(1)
pts <- sampleRandom(b, 10, sp=TRUE)
xx <- raster::mask(b, pts)

两种方案,不知道是不是更快

备选方案 1

y <- rasterize(pts, b, 1)
m <- mask(b, y)

备选方案 2

v <- extract(b, pts)
r <- rasterize(pts, b, v)