R语言 sp::网格等效值(单位:sf)

bgibtngc  于 2023-10-13  发布在  其他
关注(0)|答案(1)|浏览(145)

我正在更新我的代码,以便将sp函数替换为类似的sf函数(由于r空间演化)。有一些功能我正在努力取代。我经常使用栅格,将它们转换为 Dataframe ,以便我可以操作数据,然后将点数据转换回栅格。下面是我目前如何使用terrasp实现此操作的示例。我知道很多转换可以直接应用于光栅对象,这篇文章的重点不是将转换应用于光栅,而是将我的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的网格数据

sp::gridded(import_raster_df)     <- TRUE

转换为terra SpatRaster对象

test_SpatRaster <- terra::rast(import_raster_df)

我知道我可以使用sf::st_as_sf将我的sf对象转换为sf对象,然后使用terra::rasterize将点数据转换回网格,但这需要指定网格的分辨率(而我目前使用sp::griddedsp工作流不需要这样做)。有没有一种方法可以在sf中轻松地复制这一点,或者我甚至必须这样做(我知道sp应该在未来工作,但由于没有未来的发展,我想确保我有一个最新的等价物)。

iklwldmw

iklwldmw1#

将值转换为矩阵并将其转换回来通常效率低下,并且没有必要。但是如果你能沿着我下面展示的路线做到这一点(有一些类似的方法)。不需要创建点。

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]

相关问题