sp::sf 中的网格等效项

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

我正在更新我的代码,以便将

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 网格数据

sp::gridded(import_raster_df)     <- TRUE

转换为 terra SpatRaster 对象

test_SpatRaster <- terra::rast(import_raster_df)

我知道我可以使用

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

r geospatial r-sp
1个回答
0
投票
将值与矩阵相互转换通常效率低下,也没有必要。但是,如果您可以按照我下面显示的方式做到这一点(有一些类似的方法)。无需创建积分。

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]
    
© www.soinside.com 2019 - 2024. All rights reserved.