首页 > 解决方案 > 使用点遮罩栅格的最快方法

问题描述

我有一个非常大的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)` 所以加快速度会很棒。

标签: rraster

解决方案


那是很多层。

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

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)

推荐阅读