提取 LAS (3D Analyst)

摘要

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

插图

“提取 LAS”工具图示

使用情况

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

  • 可以对输入点云进行过滤,以限制使用分类代码、分类标签和返回值的任意组合来提取的点。 通过将图层加载到地图或场景中,并在图层属性对话框中指定过滤器,可以定义点过滤器。 您也可以使用创建 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 数据集工具的为 LAS 文件创建 PRJ 参数。

  • 通过指定输出坐标系环境设置,可以将输入点云的水平坐标系重新投影到不同的空间参考中。 此外,通过确保通过垂直坐标系定义垂直单位,即可实现 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,由生成 VLR 的软件添加。 通常情况下,这些记录的含义仅源软件知晓。 除非由理解此类信息的应用程序处理输出 LAS 数据,否则保留 VLR 可能不会提供任何增值功能。 根据 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,由生成 VLR 的软件添加。 通常情况下,这些记录的含义仅源软件知晓。 除非由理解此类信息的应用程序处理输出 LAS 数据,否则保留 VLR 可能不会提供任何增值功能。 根据 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

相关主题