提取 LAS (3D Analyst)

摘要

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

插图

“提取 LAS”工具图示

使用情况

  • 此工具可从 LAS 数据集、点云 .slpk 文件或 I3S 点云场景图层服务创建 .las.zlas 文件。 当输入是 LAS 数据集时,将为 LAS 数据集引用的每个 .las.zlas 文件创建一个输出文件。 当输入为点云场景图层时,输出文件的数量将有所不同,具体取决于要提取的点的数量。 每个输出文件的大小限制为约 1680 万个点。 有些文件可能会超出此阈值或者点数较少。

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

  • 除了按特定属性过滤点外,您还可以使用 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
处理范围
(可选)

将评估的数据范围。

  • 当前显示范围 地图视图 - 范围基于活动地图或场景。
  • 绘制范围 构造直角并完成草图 - 范围将基于在地图或场景上绘制的矩形。
  • 图层范围 图层 - 范围基于活动地图图层。 选择可用图层或者使用所有图层中的数据范围选项。 每个地图图层具有以下选项:

    • 所有要素 全选 - 所有要素的范围。
    • 选定要素 基于选定要素的区域 - 选定要素的范围。
    • 可见要素 Extent Indicator - 可见要素的范围。

  • 浏览 浏览 - 范围将基于数据集。
  • 输入的交集 相交 - 范围将为所有输入的相交范围。
  • 输入的并集 联合 - 范围将为所有输入的合并范围。
  • 剪贴板 粘贴 - 可在剪贴板中复制和粘贴范围。
    • 复制范围 复制 - 将范围和坐标系复制到剪贴板。
    • 粘贴范围 粘贴 - 从剪贴板粘贴范围和坐标系。 如果剪贴板不包含坐标系,则范围将使用地图的坐标系。
  • 重置范围 重置 - 将范围重置为默认值。

当手动提供坐标时,坐标必须为数值,并且位于活动地图的坐标系中。 地图可能使用与提供的坐标不同的显示单位。 在南纬和西经坐标中使用负号。

Extent
提取边界
(可选)

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

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

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

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

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

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

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

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

指定是否重新排列 .las.zlas 文件中的点以优化读取和更新点云分类的性能。

  • 未选中 - 不会重新排列点的顺序。
  • 选中 - 将点的顺序重新排列为可优化数据读取的空间聚类。 重新排列的点可以提高对点云执行的后续操作的性能。 这是默认设置。
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。 通常情况下,这些记录的含义仅源软件知晓。 除非由理解此类信息的应用程序处理输出 LAS 数据,否则保留 VLR 可能不会提供任何增值功能。 根据 VLR 的总大小以及包含它的文件的数量,移除 VLR 可能会节省大量磁盘空间。

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

指定是否重新排列 .las.zlas 文件中的点以优化读取和更新点云分类的性能。

  • MAINTAIN_POINTS不会重新排列点的顺序。
  • REARRANGE_POINTS将点的顺序重新排列为可优化数据读取的空间聚类。 重新排列的点可以提高对点云执行的后续操作的性能。 这是默认设置。
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

相关主题