提取 LAS (3D Analyst)

摘要

通过 LAS 数据集或点云场景图层中的点云数据创建新的 LAS 文件。

插图

提取 LAS 工具图示

使用情况

  • 此工具通过输入 LAS 数据集或点云场景图层包(.slpk 文件)创建新的 .las.zlas 文件。 当输入是 LAS 数据集时,将为 LAS 数据集引用的每个 .las.zlas 文件创建一个输出文件。 当输入是点云场景图层时,输出文件的数量取决于被提取的点的数量。 每个输出文件的大小限制为约 1670 万个点。 创建多个文件时,生成的文件可能会有重叠范围,这在某些情况下会导致数据处理效率低下。 考虑使用切片 LAS 工具将从点云场景图层中提取的文件重新组织为无重叠范围的特定切片方案。

  • 您可以通过指定处理范围、提取边界或两者来提取输入点云的子集。 通过提取边界提供处理范围时,两者的交集将定义提取的 .las 文件的覆盖范围。 如果处理范围和提取边界均未定义,则会将输入点云的完整范围提取到输出 .las 文件。 此外,您还可以将点过滤器应用于输入点云,以基于分类代码、分类标记和返回值的任意组合来限制将提取的点。 通过将图层加载到活动地图或场景中并在图层属性对话框中指定所需的过滤器来定义点过滤器。 您也可以使用创建 LAS 数据集图层工具为 LAS 数据集定义点过滤器。

  • 此工具可用于通过设置输出坐标系环境将输入点云的空间参考重新投影到不同的水平和垂直坐标系。 .las 文件的空间参考可在其表头中定义,也可通过使用可识别文本 (WKT) 约定的辅助 .prj 文件定义。 .prj 文件的位置必须与 .las 文件相同,名称必须与 .las 文件相同。 当 .prj 文件存在时,其将覆盖 .las 文件表头中的空间参考信息。 您可为缺少或未正确定义空间参考的 .las 文件创建 .prj 文件,方法是将定义投影工具用于各个 .las.zlas 文件,或将创建 LAS 数据集工具与所启用的 PRJ 选项结合使用。

  • LAS 点记录以不符合点空间聚类的二进制序列存储在 .las 文件中的情况并不罕见。 查询此类数据分布时,访问代表 LAS 点的二进制记录的效率会有所降低。 在生成的 .las 文件中重新排列点可优化数据以供可视化及其他空间操作。 启用重新排列选项后,将自动计算统计数据。 如果您选择不重新排列 LAS 点,可以启用或禁用计算统计数据。 计算统计数据可优化空间查询并对 .las 文件中存在的类代码和返回值提供汇总信息。 但是,这也会增加工具的处理时间。 如果不在 ArcGIS 中使用生成的 .las 文件,则可以禁用计算统计数据,以便加快工具的执行速度。

参数

标注说明数据类型
输入点云

要处理的 LAS 数据集或点云场景图层包(.slpk 文件)。

LAS Dataset Layer; Scene Layer; File
目标文件夹

输出 .las 文件将要写入的现有文件夹。

Folder
处理范围
(可选)

待评估数据的范围。

  • 默认 - 该范围将基于所有参与输入的最大范围设定。这是默认设置。
  • 输入的并集 - 该范围将基于所有输入的最大范围。
  • 输入的交集 - 该范围将基于所有输入共用的最小区域。
  • 当前显示范围 - 该范围与可见显示范围相等。如果没有活动地图,则该选项将不可用。
  • 如下面的指定 - 该范围将基于指定的最小和最大范围值。
  • 浏览 - 该范围将基于现有数据集。
Extent
提取边界
(可选)

定义将裁剪 .las 文件的区域的面边界。

Feature Layer
处理与范围相交的整个 LAS 文件
(可选)

指定将如何使用感兴趣区以确定 .las 文件的处理方式。 感兴趣区由处理范围参数值和处理边界参数值定义,或由二者共同定义。

  • 未选中 - 仅处理与感兴趣区相交的 LAS 点。 这是默认设置。
  • 选中 - 如果 .las 文件的任何部分与感兴趣区相交,则该 .las 文件中的所有点(包括感兴趣区以外的点)都会得到处理。
Boolean
输出文件名后缀
(可选)

将追加到每个输出 .las 文件名的文本。 每个文件都将从其源文件继承其基本名称,后跟此参数中指定的后缀。

String
删除变量长度记录
(可选)

指定是否删除变量长度记录 (VLR)。 每个 .las 文件都可能包含一组 VLR,由生成 VLR 的软件添加。 通常情况下,这些记录的含义仅源软件知晓。 除非由理解此类信息的应用程序处理输出 LAS 数据,否则保留 VLR 可能不会提供任何增值功能。 根据 VLR 的总大小以及包含 VLR 的文件的数量,删除 VLR 可能会节省大量磁盘空间。

  • 未选中 - 输入 .las 文件中的变量长度记录将不会被移除,并保留在输出 .las 文件中。 这是默认设置。
  • 选中 - 输入 .las 文件中的变量长度记录将从输出 .las 文件中移除。
Boolean
重新排列点
(可选)

指定 .las 文件中的点是否将重新排列。

  • 未选中 - .las 文件中点的顺序将不会重新排列。
  • 选中 - 将重新排列 .las 文件中的点。 这是默认设置。
Boolean
计算统计数据
(可选)

指定是否将计算 LAS 数据集引用的 .las 文件的统计数据。 计算统计数据时会为每个 .las 文件提供一个空间索引,从而提高了分析和显示性能。 统计数据还可通过将 LAS 属性(例如分类代码和返回信息)显示限制为 .las 文件中存在的值来提升过滤和符号系统体验。

  • 选中 - 将计算统计数据。 这是默认设置。
  • 未选中 - 不计算统计数据。
Boolean
输出 LAS 数据集
(可选)

参考新创建的 .las 文件的输出 LAS 数据集。

LAS Dataset
压缩
(可选)

指定输出 .las 文件为压缩格式还是标准 LAS 格式。

  • 与输入相同压缩方法与输入 LAS 文件相同。 仅当输入为 LAS 数据集时,此选项才可用。在这种情况下,这是默认选项。
  • 不压缩输出将采用标准 LAS 格式 (*.las)。 当输入为点云场景图层时,这是默认设置。
  • zLAS 压缩输出 .las 文件将以 zLAS 格式压缩。
String

派生输出

标注说明数据类型
输出文件夹

写入 .las 文件的文件夹。

Folder

arcpy.ddd.ExtractLas(in_las_dataset, target_folder, {extent}, {boundary}, {process_entire_files}, {name_suffix}, {remove_vlr}, {rearrange_points}, {compute_stats}, {out_las_dataset}, {compression})
名称说明数据类型
in_las_dataset

要处理的 LAS 数据集或点云场景图层包(.slpk 文件)。

LAS Dataset Layer; Scene Layer; File
target_folder

输出 .las 文件将要写入的现有文件夹。

Folder
extent
(可选)

待评估数据的范围。

  • MAXOF - 将使用所有输入的最大范围。
  • MINOF - 将使用所有输入共有的最小区域。
  • DISPLAY - 该范围与可见显示范围相等。
  • 图层名称 - 将使用指定图层的范围。
  • Extent 对象 - 将使用指定对象的范围。
  • 以空格分隔的坐标字符串 - 将使用指定字符串的范围。坐标以 x-min,y-min,x-max,y-max 的顺序表示。
Extent
boundary
(可选)

定义将裁剪 .las 文件的区域的面边界。

Feature Layer
process_entire_files
(可选)

指定处理范围的应用方式。

  • PROCESS_EXTENT仅处理与感兴趣区相交的 LAS 点。 这是默认设置。
  • PROCESS_ENTIRE_FILES如果 .las 文件的任何部分与感兴趣区相交,则该 .las 文件中的所有点(包括感兴趣区以外的点)都会得到处理。
Boolean
name_suffix
(可选)

将追加到每个输出 .las 文件名的文本。 每个文件都将从其源文件继承其基本名称,后跟此参数中指定的后缀。

String
remove_vlr
(可选)

指定是否删除变量长度记录 (VLR)。 每个 .las 文件都可能包含一组 VLR,由生成 VLR 的软件添加。 通常情况下,这些记录的含义仅源软件知晓。 除非由理解此类信息的应用程序处理输出 LAS 数据,否则保留 VLR 可能不会提供任何增值功能。 根据 VLR 的总大小以及包含 VLR 的文件的数量,删除 VLR 可能会节省大量磁盘空间。

  • MAINTAIN_VLR任何存储于处理的 .las 文件的变量长度记录中的数据将不会被移除,并保留在提取的 .las 文件中。 这是默认设置。
  • REMOVE_VLR将从 .las 文件中移除附加的变量长度记录。
Boolean
rearrange_points
(可选)

指定 .las 文件中的点是否将重新排列。

  • MAINTAIN_POINTS.las 文件中点的顺序将不会重新排列。
  • REARRANGE_POINTS将重新排列 .las 文件中的点。 这是默认设置。
Boolean
compute_stats
(可选)

指定是否将计算 LAS 数据集引用的 .las 文件的统计数据。 计算统计数据时会为每个 .las 文件提供一个空间索引,从而提高了分析和显示性能。 统计数据还可通过将 LAS 属性(例如分类代码和返回信息)显示限制为 .las 文件中存在的值来提升过滤和符号系统体验。

  • COMPUTE_STATS将计算统计数据。 这是默认设置。
  • NO_COMPUTE_STATS不计算统计数据。
Boolean
out_las_dataset
(可选)

参考新创建的 .las 文件的输出 LAS 数据集。

LAS Dataset
compression
(可选)

指定输出 .las 文件为压缩格式还是标准 LAS 格式。

  • SAME_AS_INPUT压缩方法与输入 LAS 文件相同。 仅当输入为 LAS 数据集时,此选项才可用。在这种情况下,这是默认选项。
  • NO_COMPRESSION输出将采用标准 LAS 格式 (*.las)。 当输入为点云场景图层时,这是默认设置。
  • ZLAS输出 .las 文件将以 zLAS 格式压缩。
String

派生输出

名称说明数据类型
out_folder

写入 .las 文件的文件夹。

Folder

代码示例

ExtractLas 示例 1(Python 窗口)

下面的示例演示了如何在 Python 窗口中使用此工具。

import arcpy
from arcpy import env

env.workspace = 'C:/data'
arcpy.ddd.ExtractLas('test.lasd', 'c:/lidar/subset', boundary='study_area.shp',
                     name_suffix='subset', remove_vlr=True, 
                     rearrange_points='REARRANGE_POINTS', 
                     out_las_dataset='extracted_lidar.lasd')
ExtractLas 示例 2(独立脚本)

下面的示例演示了如何在独立 Python 脚本中使用此工具。

'''****************************************************************************
Name: Split Large LAS File
Description: Divides a large LAS file whose point distribution covers the full
             XY extent of the data into smaller files to optimize performance
             when reading lidar data.
****************************************************************************'''
# Import system modules
import arcpy
import tempfile
import math

in_las_file = arcpy.GetParameterAsText(0)
tile_width = arcpy.GetParameter(1) # double in LAS file's XY linear unit
tile_height = arcpy.GetParameter(2) # double in LAS file's XY linear unit
out_folder = arcpy.GetParameterAsText(3) # folder for LAS files
out_name_suffix = arcpy.GetParameterAsText(4) # basename for output files
out_lasd = arcpy.GetParameterAsText(5) # output LAS dataset


try:
    temp_lasd = arcpy.CreateUniqueName('temp.lasd', tempfile.gettempdir())
    arcpy.management.CreateLasDataset(in_las_file, temp_lasd, 
                                      compute_stats='COMPUTE_STATS')
    desc = arcpy.Describe(temp_lasd)
    total_columns = int(math.ceil(desc.extent.width/tile_width))
    total_rows = int(math.ceil(desc.extent.height/tile_height))
    digits = int(math.log10(max(cols, rows))) + 1
    for row in range(1, total_rows+1):
        yMin = desc.extent.YMin + tile_height*(row-1)
        yMax = desc.extent.YMin + tile_height*(row)
        for col in range (1, total_columns+1):
            xMin = desc.extent.XMin + tile_width*(col-1)
            xMax = desc.extent.XMax + tile_width*(col)
            name_suffix = '_{0}_{1}x{2}'.format(out_name_suffix, 
                                                str(row).zfill(digits), 
                                                str(col).zfill(digits))
            arcpy.ddd.ExtractLas(temp_lasd, out_folder, 
                                 arcpy.Extent(xMin, yMin, xMax, yMax),
                                 name_suffix=name_suffix, 
                                 rearrange_points='REARRANGE_POINTS',
                                 compute_stats='COMPUTE_STATS')
    arcpy.env.workspace = out_folder
    arcpy.management.CreateLasDataset(arcpy.ListFiles('*{0}*.las'.format(out_name_suffix)),
                                      out_lasd, compute_stats='COMPUTE_STATS',
                                      relative_paths='RELATIVE_PATHS')
except arcpy.ExecuteError:
    print(arcpy.GetMessages())

许可信息

  • Basic: 需要 3D Analyst
  • Standard: 需要 3D Analyst
  • Advanced: 需要 3D Analyst

相关主题