You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 13:30:42