LidR中大型LiDAR数据集重分块后断点续处理的技术咨询
大型LiDAR数据集重分块断点续处理优化方案
问题背景
处理大型LiDAR数据集生成CHM和DSM时,因内存不足采用catalog_retile重分块,但脚本频繁中断导致输出文件不完整。当前手动批量处理效率低,想搞懂opt_restart的输入分块与输出文件匹配逻辑,找更高效的实现方式。
核心优化思路
直接用opt_restart替代手动批量划分,让lidR自动识别已完成的输出文件,跳过已处理分块;规范输出命名规则,明确输入分块和输出文件的对应关系;优化并行配置减少中断概率。
关键逻辑说明
opt_restart的核心是通过输出文件名与输入分块边界的绑定实现断点续跑:
- 用分块的左下角坐标(
{XLEFT}、{YBOTTOM})作为输出文件名的一部分,每个输入分块对应唯一的输出文件 - 开启
opt_restart(ctg) <- TRUE后,lidR会自动检查输出目录下的文件,若对应分块的输出文件已存在且完整,就跳过该分块的处理
优化后的完整代码
library(lidR) library(future) library(sf) library(dplyr) # 并行配置:留足够核心给系统,避免内存过载 plan(multisession, workers = max(1, availableCores() - 8)) # 目录定义 source_dir <- "F:/LiDAR/point_cloud/2023" retiled_dir <- "F:/LiDAR_processing/2023/Retiled_test" # 创建统一输出目录,不用按批次拆分 if (!dir.exists(retiled_dir)) { dir.create(retiled_dir, recursive = TRUE) } # 加载LAS目录,只保留必要字段减少内存占用 ctg <- readLAScatalog(source_dir, select = "xyzrnc") summary(ctg) las_check(ctg) # 配置处理参数 opt_filter(ctg) <- "-drop_class 7 18" # 过滤噪声点 opt_progress(ctg) <- TRUE # 显示处理进度 opt_laz_compression(ctg) <- TRUE # 启用LAZ压缩 opt_chunk_buffer(ctg) <- 20 # 设置缓冲区避免边缘效应 opt_chunk_size(ctg) <- 250 # 分块大小(单位:米) # 输出文件命名:用分块边界做文件名,确保输入输出一一对应 opt_output_files(ctg) <- file.path(retiled_dir, "{XLEFT}_{YBOTTOM}") # 开启断点续处理:自动跳过已生成的完整文件 opt_restart(ctg) <- TRUE # 生成lasindex,加速后续CHM/DSM处理 ctg@output_options$drivers$LAS$param <- list(index = TRUE) # 执行重分块 ctg_ret <- catalog_retile(ctg)
后续CHM/DSM生成的断点续处理示例
重分块完成后,同样可以用opt_restart处理CHM/DSM生成,避免重复劳动:
# CHM生成示例 chm_dir <- "F:/LiDAR_processing/2023/CHM" if (!dir.exists(chm_dir)) { dir.create(chm_dir, recursive = TRUE) } # 加载重分后的LAS目录 ctg_retiled <- readLAScatalog(retiled_dir) # 配置CHM参数 opt_output_files(ctg_retiled) <- file.path(chm_dir, "{XLEFT}_{YBOTTOM}_CHM") opt_restart(ctg_retiled) <- TRUE opt_chunk_buffer(ctg_retiled) <- 0 # 重分块已带缓冲区,无需额外设置 # 生成CHM(可替换为自己需要的算法,比如pitfree) chm <- grid_canopy(ctg_retiled, res = 1, pitfree(c(0,2,5,10,15)))
额外优化建议
- 并行worker数量别拉满:保留4-8个核心给系统,防止内存耗尽导致中断
- 严格控制
select字段:只保留处理必需的字段(如xyzrnc),减少单分块内存占用 - 定期检查输出文件:若出现损坏的输出文件,手动删除后重新运行脚本,
opt_restart会自动重新处理该分块
内容的提问来源于stack exchange,提问作者Devlinr
相关产品推荐
相关产品推荐

