我正在更新我的代码,以便将
sp
函数替换为类似的 sf
函数(由于 r 空间演化)。有一些功能我正在努力更换。我经常获取栅格,将它们转换为数据帧,以便我可以操作数据,然后将点数据转换回栅格。下面是我目前如何使用 terra
和 sp
执行此操作的示例。我知道许多变换可以直接应用于栅格对象,这篇文章的重点不是将变换应用于栅格,而是将我的 sp
函数更新为 sf
。
示例数据是从“https://download.qgis.org/downloads/data/”下载的,栅格文件可以在以下zip文件夹“qgis_sample_data”的栅格子文件夹中找到`
library(dplyr)
import_raster <- terra::rast("C:/Users/User/qgis_sample_data/raster/SR_50M_alaska_nad.tif")
import_raster_df <- import_raster %>%
terra::as.data.frame(., xy = TRUE) |>
select(x, y)
import_raster_df <- import_raster_df %>%
tibble::rowid_to_column(var = 'cell_id')
sp::coordinates(import_raster_df) <- ~ x + y
sp::gridded(import_raster_df) <- TRUE
test_SpatRaster <- terra::rast(import_raster_df)
我知道我可以使用
sf
将数据帧转换为 sf::st_as_sf
对象,然后使用 terra::rasterize
将点数据转换回网格,但这需要指定网格的分辨率(而我当前的 sp
使用
sp::gridded
的工作流程不需要我这样做)。有没有办法在
sf
中轻松复制这一点,或者我什至必须这样做(我知道
sp
应该在未来发挥作用,但由于未来没有发展,我想确保我有最新的等价物)。
library(terra)
r <- rast(nrow=5, ncol=5, nlyr=2, vals=1:50)
m <- as.matrix(r)
x <- setValues(r, m)
如果删除单元格,您将需要跟踪单元格编号。例如
r[2:3, ] <- NA
d <- as.data.frame(r, na.rm=TRUE, cell=TRUE)
x <- rast(r)
x[d$cell] <- d[,-1]