提取 LAS (3D Analyst)

摘要

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

插图

提取 LAS 工具图示

使用情况

  • 此工具可从 LAS 数据集、点云 .slpk 文件或 I3S 点云场景图层服务创建 .las.zlas 文件。 当输入是 LAS 数据集时,将为 LAS 数据集引用的每个 .las.zlas 文件创建一个输出文件。 当输入是点云场景图层时,输出文件的数量取决于被提取的点的数量。 每个输出文件的大小限制为约 1670 万个点。

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

  • 当输入是 I3S 点云场景图层服务或 .slpk 文件时,可能会创建多个输出文件。 生成的文件可能会有重叠范围,这在某些情况下会导致数据处理效率低下。 切片 LAS 工具可用于创建新的 LAS 文件,这些文件将根据规则格网划分以生成不重叠的文件。

  • 当输入是 LAS 数据集时,生成的 LAS 文件版本和输出的点记录格式将与源文件匹配。 当输入是 I3S 点云场景图层服务或 .slpk 文件时,输出将创建为 LAS 文件版本 1.4,但点记录格式取决于源点云的属性,如下所示:

    • 如果输入不包含 RGB 或近红外值,则将使用点格式 6。
    • 如果输入包含 RGB 但没有近红外值,则将使用点格式 7。
    • 如果输入包含 RGB 和近红外值,则将使用点格式 8。

    要使用不同的 LAS 文件版本和点记录格式,可以通过使用转换 LAS 工具处理此工具生成的输出文件来生成它们。

  • .las 文件的空间参考通常在该文件中定义。 如果此信息缺失或不正确,则辅助 .prj 文件可以定义 LAS 文件的空间参考。 .prj 文件的位置必须与 .las 文件相同,名称必须与 .las 文件相同。 当 .prj 文件存在时,其将覆盖 .las 文件中的空间参考信息。 您可为缺失或未正确定义空间参考的 .las 文件创建 .prj 文件,方法是将定义投影工具用于各个 .las.zlas 文件,或通过为 LAS 文件创建 PRJ 参数使用创建 LAS 数据集工具。

  • 通过指定输出坐标系环境设置,输入点云可以将其水平坐标系重新投影到不同的空间参考中。 此外,确保使用垂直坐标系定义垂直单位,可以实现 z 单位转换。 但是,当前不支持垂直基准面转换。 必须确保任何水平坐标系转换都能保持原来的垂直坐标系。

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

  • 提取边界参数将用于将输入点云裁剪为不规则形状。 此参数支持用于定义连续研究区域的面边界,例如覆盖相对较大区域的单个面要素。 虽然可以提供表示相邻感兴趣区域的多个面作为输入,但边界要素不支持表示大量较小要素(如树木或建筑物)的面。 可将多个面合并在一起以有效地裁剪输入点云。 因此,指定具有许多较小面的边界要素将导致性能降低,应避免此操作。

参数

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

将提取的 LAS 数据集、点云场景图层包(.slpk 文件)或 I3S 点云服务。 I3S 点云服务必须启用导出属性才能进行处理。

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

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

Folder
处理范围
(可选)

待评估数据的范围。

  • 当前显示范围 Current Display Extent - 范围基于活动地图或场景。 仅在存在活动地图时,才可使用此选项。
  • 绘制范围 Draw Extent - 范围将基于在地图或场景上绘制的矩形。 此选项将在工程地理数据库中创建要素类并将图层添加至地图。 该要素类的坐标系将与地图相同。
    注:

    环境对话框中不提供此选项。 只能在具有范围数据类型的工具参数中或工具对话框的环境选项卡中找到此选项。

    注:

    当选中从“编辑”选项卡启用和禁用编辑编辑选项时,必须在编辑功能区选项卡上启用编辑才能绘制范围。

  • 图层范围 Layer - 范围基于活动地图图层。 使用下拉列表选择可用图层,或使用所有图层中数据的范围选项获取所有活动地图图层(不包括底图)的组合范围。 仅在存在具有图层的活动地图时,才可使用此选项。

    每个地图图层具有以下选项:

    • 所有要素 Select All - 图层中所有要素的范围。
    • 选定要素Area from Selected Features - 图层中选定要素的范围。
    • 可见要素 Extent Indicator - 图层中可见要素的范围。
      注:

      选定要素 Area from Selected Features可见要素 Extent Indicator 选项中的范围仅适用于要素图层。

  • 浏览 Browse - 范围基于现有数据集。
  • 输入的交集 Intersect - 范围将基于所有输入的最小或交叉范围。 如果输入未重叠,则结果为包含所有零值的空范围。
  • 输入的并集 Union - 范围将基于所有输入的最大或合并范围。
  • 剪贴板 Paste - 可在剪贴板中复制和粘贴范围。
    • 复制范围 Copy - 将范围坐标和坐标系复制到剪贴板。
    • 粘贴范围 Paste - 从剪贴板粘贴范围坐标和(可选)坐标系。 如果剪贴板值不包含坐标系,则范围将使用地图的坐标系。
    注:

    将使用与 ArcPy Extent 对象相同的格式和顺序从剪贴板中复制和粘贴范围坐标:x-min、y-min、x-max、y-max 和空间参考。

  • 重置范围 Reset - 将范围重置为默认值。
  • 手动输入坐标 - 坐标必须是数值,并且与活动地图的坐标系相匹配。
    警告:

    地图可能使用与输入的坐标不同的显示单位。 不支持使用主方向(N、S、E、W)。 在南纬和西经坐标中使用负号。

Extent
提取边界
(可选)

将用于裁剪输入点云的面边界。 该边界应表示通常由一个连续面定义的主要研究区域,但当它表示具有相关空间间距的公共研究区域时,它也可以由多个面组成。

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

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

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

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

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

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

  • 未选中 - 输入 .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 文件)或 I3S 点云服务。 I3S 点云服务必须启用导出属性才能进行处理。

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
(可选)

将用于裁剪输入点云的面边界。 该边界应表示通常由一个连续面定义的主要研究区域,但当它表示具有相关空间间距的公共研究区域时,它也可以由多个面组成。

Feature Layer
process_entire_files
(可选)

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

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

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

String
remove_vlr
(可选)

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

  • MAINTAIN_VLR任何存储于处理的 .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 窗口中使用此工具。

arcpy.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())

相关主题