将栅格(terra)转换为im对象(spatstat)

问题描述 投票:0回答:1

我无法将

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对象不再是解决方案。

谢谢!

r type-conversion terra spatstat
1个回答
0
投票

我认为下面的功能有效。也许你可以要求“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
}
© www.soinside.com 2019 - 2024. All rights reserved.