我无法将
SpatRaster
转换回 im
。这是一个例子:
library(spatstat)
library(gstat)
library(terra)
size=100
env <- im(matrix(0, size, size), xrange=c(0,1), yrange=c(0,1))
xy <- expand.grid(x = env$xcol, y = env$yrow)
temp.dummy <- gstat(formula=z~1, locations=~x+y, dummy=T, beta=0,
model=vgm(psill=0.1, range=50, model='Exp'), nmax=20)
temp <- predict(temp.dummy, newdata=xy, nsim=1)
temp <- as.im(temp)
temp_im <- as.im(raster::raster(temp))
temp_im <- as.im(terra::rast(temp))
Error in as.im.default(rast(temp)) : Can't convert X to a pixel image
它适用于
raster::raster()
,但不适用于 terra::rast()
。
由于maptool已经退役,这个将栅格转换为im对象不再是解决方案。
谢谢!
我认为下面的功能有效。也许你可以要求“spatstat.geom”的维护者在他们的包中包含这个或类似的东西。
as.im.terra <- function(X) {
X <- X[[1]]
rs <- res(X)
e <- as.vector(ext(X))
out <- list(
v = as.matrix(X),
dim = dim(X),
xrange = e[1:2],
yrange = e[3:4],
xstep = rs[1],
ystep = rs[2],
xcol = e[1] + (1:ncol(X)) * rs[1] + 0.5 * rs[1],
yrow = e[4] + (1:nrow(X)) * rs[2] + 0.5 * rs[2],
type = "real",
units = list(singular=names(X), plural=names(X), multiplier=1)
)
attr(out$units, "class") <- "unitname"
attr(out, "class") <- "im"
out
}