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

lidR lascatalog并行与顺序处理下坐标转换结果不一致问题

使用lidR并行处理LAS点云时st_transform未加载指定BETA2007转换管道的问题
  • 场景:使用lidR 4.1.2处理约2000个机载激光扫描*.laz点云文件,需将坐标系从高斯-克吕格(EPSG 31468)转换为UTM 32(EPSG 25832)
  • 单线程验证:采用sf 1.0-19的st_transform()函数,指定de_adv_BETA2007转换网格对应的proj pipeline参数,小数据集测试结果与官方ALS数据对比定位准确
  • 并行问题:开启并行处理(执行plan(multisession, workers = 6))时,st_transform()未使用指定的BETA2007转换方法,自动采用默认转换,导致结果出现约0.5米偏移;关闭并行后顺序处理结果完全正确,过程无任何警告或错误

完整代码

library(lidR)
library(sf)
library(mapview)
library(future)

# 检查sf包配置:
sf_proj_search_paths()
sf_extSoftVersion()
sf_proj_network(enable = T)

# 获取带转换网格的可用选项:
options <- sf_proj_pipelines(source_crs = "EPSG:31468", target_crs = "EPSG:25832")

# 选择正确的转换管道:
pipeline_BETA2007 <- options[1,]$definition

# 设置6核并行处理:
plan(multisession, workers = 6)

# 读取LAS目录:
ctg <- readALSLAScatalog("../Data/GK")

# 为LAS目录指定EPSG(laz文件头未包含):
st_crs(ctg) <- 31468

# 验证LAS目录有效性:
ctg
las_check(ctg)

# 可视化LAS目录:
plot(ctg, mapview = TRUE)

# 定义输出路径与目录结构:
opt_output_files(ctg) <- ".../Data/UTM_parallel/{ORIGINALFILENAME}_UTM"
opt_laz_compression(ctg) <- TRUE
opt_chunk_buffer(ctg) <- 0
opt_chunk_size(ctg) <- 0

# 定义点云重投影函数:
reproject_catalog = function(las)
{
  las_trans = sf::st_transform(las, crs = 25832, pipeline = pipeline_BETA2007)
  return(las_trans)
}

# 对LAS目录应用重投影函数:
reprojected_ctg = catalog_map(ctg, reproject_catalog)

关闭并行时仅需注释plan()语句并调整输出路径。

处理环境信息

> R.version
               _                                
platform       x86_64-w64-mingw32                
arch           x86_64                            
os             mingw32                           
crt            ucrt                              
system         x86_64, mingw32                   
status                                           
major          4                                
minor          4.1                               
year           2024                              
month          06                                
day            14                                
svn rev        86737                             
language       R                                
version.string R version 4.4.1 (2024-06-14 ucrt)
nickname       Race for Your Life

> sf_extSoftVersion()
          GEOS           GDAL         proj.4 GDAL_with_GEOS     USE_PROJ_H           PROJ 
      "3.12.2"        "3.9.3"        "9.4.1"         "true"         "true"        "9.4.1" 

临时方案与诉求

目前尝试多种方法均未解决该问题,只能用parallel包的bpapply作为临时替代方案,希望找到lidR框架内的可行解决办法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 15:42:02