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

如何从lidr的LAS对象中提取各treeID对应点云并统计点数

在lidr中遍历treeID提取单木点云并统计点数

1. 获取所有唯一的treeID

先从LAS对象中提取所有不重复的treeID,作为后续遍历的依据:

unique_tree_ids <- unique(las$treeID)

2. 批量提取单木点云到列表

推荐用lidr内置的split()函数直接按treeID分割LAS对象,这比手动循环调用filter_poi()效率更高,尤其适合大规模点云场景:

# 按treeID分割,得到每个单木对应的LAS对象列表
tree_las_list <- split(las, las$treeID)

如果需要手动循环实现,也可以这么写:

tree_las_list <- list()
for (id in unique_tree_ids) {
  # 用treeID作为列表元素名称,方便后续查找
  tree_las_list[[as.character(id)]] <- filter_poi(las, treeID == id)
}

3. 提取LAS对象的点云数据

你打印LAS对象时看到的是元信息,原始点云数据存储在LAS对象的@data插槽中(S4类结构),也可以用data()方法直接获取:

# 提取列表中第一个单木的点云数据(data.table格式)
first_tree_points <- tree_las_list[[1]]@data

# 或者用data()方法
first_tree_points <- data(tree_las_list[[1]])

4. 统计每棵树的点云数量

用lidr提供的npoints()函数可以快速获取LAS对象的点数,结合sapply()就能批量统计所有单木的点数:

# 生成命名向量,名称为treeID,值为对应点数
tree_point_counts <- sapply(tree_las_list, npoints)

# 查看指定treeID的点数,比如treeID=1
print(tree_point_counts["1"])

也可以直接通过点云数据框的行数统计:

tree_point_counts <- sapply(tree_las_list, function(x) nrow(x@data))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:55:18