R terra - 将数组分配给不包含所有单元格值的 SpatRaster 对象的最有效方法
R terra - most efficient way to assign an array to a SpatRaster object that does NOT contain all cell values
假设我们有一个数组 modeldata
(数据来自地面模型),其维度为:
> dim(modeldata)
[1] 67420 518
第一个维度包括网格的单元格,第二个维度是来自 1500:2017
的时间序列
第一维的不寻常长度是由于单独存在地球细胞来保存space.
在 raster
包中,我按以下方式处理它:
> coords
[,1] [,2]
[1,] -179.75 -16.25
[2,] -179.75 65.25
[3,] -179.75 65.75
[4,] -179.75 66.25
[...,] ... ...
[67420,] 179.75 71.25
> wgs84 <- sp::CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
> modeldata_spdf <- sp::SpatialPixelsDataFrame(coords,
data = data.frame(modeldata),
proj4string = wgs84)
> modeldata_brick <- raster::brick(modeldata_spdf)
请不要这样评价我,
我对使用 terra 包的可比(性能)方法更感兴趣。
另一种也很好的方法是使用 SpatRaster
遮罩层而不是坐标。
谢谢 :-)
下面的方法适用于在已知规则栅格上计算位置子集(感兴趣的像元)的值的情况。对于其他情况,请参阅 values<-
、rast(, xyz=TRUE)
和 rasterize
。
示例数据
library(terra)
r <- rast(res=10)
set.seed(0)
cells <- sample(ncell(r), 5)
xy <- xyFromCell(r, cells)
xy
# x y
#[1,] -165 -25
#[2,] 25 55
#[3,] -135 -55
#[4,] -155 -45
#[5,] -75 5
在这种情况下,我们有 5 个位置,下面的模型数据 md
有 2 个时间步长(层),每个时间步(层)有 5 个值
md <- cbind(A=1:5, B=5:1)
# compute cell numbers (not needed here as we have them already)
cells <- cellFromXY(r, xy)
# create empty raster
x <- rast(r, nlyr=2)
# assign values
x[cells] <- md
在您的情况下,保留单元格编号而不是坐标可能更有效。
以上内容稍作修改后也适用于 raster
。
假设我们有一个数组 modeldata
(数据来自地面模型),其维度为:
> dim(modeldata)
[1] 67420 518
第一个维度包括网格的单元格,第二个维度是来自 1500:2017
的时间序列
第一维的不寻常长度是由于单独存在地球细胞来保存space.
在 raster
包中,我按以下方式处理它:
> coords
[,1] [,2]
[1,] -179.75 -16.25
[2,] -179.75 65.25
[3,] -179.75 65.75
[4,] -179.75 66.25
[...,] ... ...
[67420,] 179.75 71.25
> wgs84 <- sp::CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
> modeldata_spdf <- sp::SpatialPixelsDataFrame(coords,
data = data.frame(modeldata),
proj4string = wgs84)
> modeldata_brick <- raster::brick(modeldata_spdf)
请不要这样评价我,
我对使用 terra 包的可比(性能)方法更感兴趣。
另一种也很好的方法是使用 SpatRaster
遮罩层而不是坐标。
谢谢 :-)
下面的方法适用于在已知规则栅格上计算位置子集(感兴趣的像元)的值的情况。对于其他情况,请参阅 values<-
、rast(, xyz=TRUE)
和 rasterize
。
示例数据
library(terra)
r <- rast(res=10)
set.seed(0)
cells <- sample(ncell(r), 5)
xy <- xyFromCell(r, cells)
xy
# x y
#[1,] -165 -25
#[2,] 25 55
#[3,] -135 -55
#[4,] -155 -45
#[5,] -75 5
在这种情况下,我们有 5 个位置,下面的模型数据 md
有 2 个时间步长(层),每个时间步(层)有 5 个值
md <- cbind(A=1:5, B=5:1)
# compute cell numbers (not needed here as we have them already)
cells <- cellFromXY(r, xy)
# create empty raster
x <- rast(r, nlyr=2)
# assign values
x[cells] <- md
在您的情况下,保留单元格编号而不是坐标可能更有效。
以上内容稍作修改后也适用于 raster
。