使用点屏蔽光栅的最快方法
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 are
360, 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)
我有一个非常大的 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 are
360, 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)