r - 使用点遮罩栅格的最快方法
问题描述
我有一个非常大的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)
推荐阅读
- python - PySpark:逻辑回归弹性网络正则化
- java - JavaFx自定义设计按钮点击检测在使用的应用程序
- arrays - 在 laravel 中导出 excel 或 csv 中的多维数组
- javascript - 匹配游戏的随机播放不起作用。更改了代码以使其更简单并且事情已经破坏
- opengl - 着色器中最快的可写内存是多少?
- amazon-web-services - 创建一个显示 S3 存储桶中所有照片的照片库站点
- java - 即使在 java 中设置了关系,Hibernate 也没有在 mysql 中设置外键
- asp.net-core-webapi - 删除 ProducesResponseType 属性 webapi aspnetcore 2.1
- firebase - 如何在 ionic v1 中跟踪 Firebase 分析中的事件
- javascript - 如何执行过滤器和包含