我正在更新我的代码,以便将sp
函数替换为类似的sf
函数(由于r空间演化)。有一些功能我正在努力取代。我经常使用栅格,将它们转换为 Dataframe ,以便我可以操作数据,然后将点数据转换回栅格。下面是我目前如何使用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::st_as_sf
将我的sf
对象转换为sf
对象,然后使用terra::rasterize
将点数据转换回网格,但这需要指定网格的分辨率(而我目前使用sp::gridded
的sp
工作流不需要这样做)。有没有一种方法可以在sf
中轻松地复制这一点,或者我甚至必须这样做(我知道sp
应该在未来工作,但由于没有未来的发展,我想确保我有一个最新的等价物)。
1条答案
按热度按时间iklwldmw1#
将值转换为矩阵并将其转换回来通常效率低下,并且没有必要。但是如果你能沿着我下面展示的路线做到这一点(有一些类似的方法)。不需要创建点。
如果你删除细胞,你需要跟踪细胞编号。例如