如何与R中的lidR并行处理LAS / LAZ目录

问题描述 投票:1回答:1

我以前使用以下代码处理LIDAR目录(在greatLedR软件包中使用lascatalog函数:]

library(lidR)

lasdir <- "D:\\LAS\\"
output <- "D:\\LAS\\PRODUCTS\\"
epsg = "+init=epsg:25829"
res = 1

no_cores <- detectCores()
cat <- lascatalog(lasdir = lasdir, 
                  outputdir = output, 
                  pattern = '*COL.laz$|*COL.LAZ$',
                  catname = "Catalog",
                  clipcat = FALSE, clipcatbuf = FALSE, clipbuf = 1000, clipcatshape = clipcatshape,
                  cat_chunk_buffer = 20,
                  cores = no_cores, progress = TRUE,
                  laz_compression = TRUE, epsg = epsg,
                  retilecatalog = FALSE, tile_chunk_buffer = 10,
                  tile_chunk_size = 1000,
                  filterask = FALSE,
                  filter = "-keep_first -drop_z_below 2")

DEM_output <- paste0(output,"DEM_", str_pad(res, 3, "left", pad = "0"), "/")
opt_output_files(cat) <- paste0(DEM_output,"{ORIGINALFILENAME}") #set filepaths
DEM <- grid_terrain(cat, res = res, algorithm = "knnidw"(k = 5, p = 2)) 

这是因为该库已有一些实现,现在,参数“ cores”似乎不起作用,尽管该过程有效,但现在它不能并行运行。这是我收到的消息:不再支持选项。参见?lidR-parallelism

enter image description here

我现在可以并行处理目录吗?

这里您可以下载包含一些LAS数据的文件夹以尝试:https://drive.google.com/open?id=1KTMt_PCdflNqmvMhvXsoV5V2V5cxRo4k

r parallel-processing package catalog lidar
1个回答
1
投票

lidR 2.1.0(2019年7月起)以来,opt_core()功能已被弃用。参见changelog

现在必须由用户明确声明用于并行处理切片的策略。无论如何,这应该是从一开始就应该设计的!对于用户而言,恢复以前的确切行为仅意味着一项更改。

在版本<2.1.0中,以下是正确的:

library(lidR)
ctg <- catalog("folder/")
opt_cores(ctg) <- 4L
hmean <- grid_metrics(ctg, mean(Z))

在版本> = 2.1.0中,必须在将来的程序包中明确声明:

library(lidR)
library(future)
plan(multisession)
ctg <- catalog("folder/")
hmean <- grid_metrics(ctg, mean(Z))

此外,这在名为lidR-parallelism的手册页中也有完整说明。

?lidR::`lidR-parallelism`

基于块的并行性

[当处理LAScatalog时,内部引擎将数据集分成多个块,每个块在循环中依次读取和处理。但是实际上,此循环可以与将来的程序包并行化。通过默认,这些块将被顺序处理,但是可以通过注册评估策略来并行处理它们。例如,以下代码按顺序进行评估:

ctg <- readLAScatalog("folder/")
out <- grid_metrics(ctg, mean(Z))

但是此评估与两个核心并行进行:

library(future)
plan(multisession, workers = 2L)
ctg <- readLAScatalog("folder/")
out <- grid_metrics(ctg, mean(Z))

使用基于块的并行性,可以通过处理数据集的几个子集来并行化任何算法[...

为了充分利用此新语法,您需要学习future的工作方式。参见future

© www.soinside.com 2019 - 2024. All rights reserved.