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

使用lidR通过Shapefile多边形分类LAS点云并添加树行号字段

用lidR包基于Shapefile多边形为LAS点云添加树行号字段

核心方案

通过lidR的merge_spatial函数将Shapefile多边形的树行号属性关联到对应范围内的LAS点云,核心是保证两者坐标系一致,再完成属性映射。

具体操作步骤

1. 加载依赖与数据

先加载所需R包,读取LAS点云和Shapefile,优先检查坐标系匹配性:

library(lidR)
library(sf)

# 读取目标LAS文件
las <- readLAS("your_input.las")

# 读取包含树行号的Shapefile(替换为你的文件路径)
tree_rows_shp <- st_read("tree_rows_polygons.shp")

# 验证坐标系是否一致,返回TRUE才继续
st_crs(las) == st_crs(tree_rows_shp)

若返回FALSE,先对Shapefile做坐标转换:

tree_rows_shp <- st_transform(tree_rows_shp, st_crs(las))

2. 关联树行号到点云

使用merge_spatial将Shapefile中存储树行号的字段(比如你属性表中的RowNo),映射为LAS点云的新字段(比如命名为TreeRowID):

# 假设Shapefile中树行号字段为RowNo,新增到LAS中的字段名设为TreeRowID
las <- merge_spatial(las, tree_rows_shp, field = "TreeRowID", by = "RowNo")

执行后,LAS对象的属性表会新增TreeRowID字段,每个点将被赋予其所在多边形的树行号。

3. 验证与导出结果

检查新增字段的有效性,并导出修改后的LAS文件:

# 查看属性表前几行,确认TreeRowID字段存在
head(las@data)

# 统计不同树行号的点数量,验证匹配逻辑
table(las$TreeRowID, useNA = "ifany")

# 导出最终LAS文件
writeLAS(las, "output_with_treerow.las")

常见问题排查

  • 部分点TreeRowID为NA:检查这些点是否落在所有多边形范围外,或Shapefile存在拓扑错误,可通过st_is_valid(tree_rows_shp)验证,错误修复用tree_rows_shp <- st_make_valid(tree_rows_shp)。
  • 运行效率低:先对LAS建立空间索引优化速度:las <- lasopt_buildindex(las)。

内容的提问来源于stack exchange,提问作者John stats

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:02:02