Самый быстрый способ замаскировать растр, используя точки - PullRequest
1 голос
/ 01 мая 2020

У меня очень большой rasterbrick и некоторые координаты содержатся в другом объекте. Я sh использую точки в качестве маски, возвращая NA для всех ячеек , за исключением , где расположены мои точки (для моего конкретного приложения мне нужно сохранить экстент, разрешение и источник ввода rasterbrick).

Я могу выполнить sh это с помощью следующего:

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) `так что было бы здорово ускорить процесс.

1 Ответ

1 голос
/ 01 мая 2020

Это много слоев.

Ваш код (с некоторым упрощением)

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...