如何在R语言中识别与线要素相交的栅格单元?
问题描述
我拥有一个terra::vect()类型的空间线要素,希望将其与terra::rast()类型的栅格进行相交分析,以识别每条线所相交的栅格单元ID。
我期望输出一个长格式的data.frame,包含line_id和cell_id两列(示例如下)。
可选方案说明
- 优先考虑使用
terra包的解决方案,同时也接受sf、stars、raster等包的实现方式。 - 矢量化栅格是一种可选方法,但实际数据量较大,可能引发性能问题,因此希望避免矢量化栅格。
- 尝试过
terra::intersect(),但它不接受SpatRaster作为参数;而terra::rasterizeGeom()不会返回单元ID,仅计算长度等指标。
示例代码
library("terra") # 创建示例线要素 v <- vect(system.file("ex/lux.shp", package="terra")) lns <- as.lines(v)[c(1,7), "ID_1"] # 仅筛选两条线并保留ID字段 names(lns) <- "line_id" lns # class : SpatVector # geometry : lines # dimensions : 2, 1 (geometries, attributes) # extent : 5.826232, 6.381701, 49.46498, 50.18162 (xmin, xmax, ymin, ymax) # coord. ref. : lon/lat WGS 84 (EPSG:4326) # names : line_id # type : <num> # values : 1 # 2 # 创建示例栅格 r <- rast(v, res=.26) r <- init(r, fun=1:ncell(r)) names(r) <- "cell_id" r # class : SpatRaster # dimensions : 3, 3, 1 (nrow, ncol, nlyr) # resolution : 0.26, 0.26 (x, y) # extent : 5.74414, 6.52414, 49.44781, 50.22781 (xmin, xmax, ymin, ymax) # coord. ref. : lon/lat WGS 84 (EPSG:4326) # source : memory # name : cell_id # min value : 1 # max value : 9 # 绘制示例 plot(r) text(r) # 添加cell_id作为标签 plot(lns, add = T)

期望输出
# data.frame(line_id = c(1,1,1,2,2), # cell_id = c(1,2,5,8,9)) # # line_id cell_id # 1 1 1 # 2 1 2 # 3 1 5 # 4 2 8 # 5 2 9
内容的提问来源于stack exchange,提问作者chamaoskurumi
相关产品推荐
相关产品推荐

