提取 LAS (3D Analyst)

描述

对 LAS 数据集引用的激光雷达数据集合进行过滤、裁剪和重新投影。

插图

提取 LAS

使用方法

  • 您可通过在图层过滤器设置中选择分类代码、分类标记和返回值的任意组合来使 LAS 数据集图层对所显示和处理的 LAS 点进行限制。过滤器的定义可通过图层属性对话或创建 LAS 数据集图层工具实现。

  • 要将 LAS 文件重新投影到不同的坐标系,请在输出坐标系环境设置中指定空间参考。要重新投影 LAS 文件就必须为其定义空间参考。如果空间参考包含垂直坐标系,那么也可将 LAS 文件重新投影至其他高度参考系统,前提是安装有垂直基准面变换格网,且可在源参考和目标坐标系中进行变换。LAS 文件的空间参考可在其表头中定义,也可通过使用可识别文本 (WKT) 约定定义空间参考的辅助 PRJ 文件定义。PRJ 文件的位置和名称必须与 LAS 文件相同。当 PRJ 文件存在时,其将覆盖 LAS 文件表头中的空间参考信息。您可为缺少或未正确定义空间参考的 LAS 文件创建 PRJ 文件,方法是将定义投影工具用于各个 LAS 或 ZLAS 文件,或将创建 LAS 数据集工具与所启用的 PRJ 选项结合使用。

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

  • 裁剪 LAS 文件时,如果沿提取边界定义提取范围,则将使用两者的交集来定义提取的 LAS 文件的 coverage。

  • 输出 LAS 文件将匹配 LAS 版本和输入的点记录格式。

语法

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 数据集。

LAS Dataset Layer
target_folder

作为输出 LAS 文件写入目标的现有文件夹。

Folder
extent
(可选)

指定将由此工具进行评估的数据范围。

Extent
boundary
(可选)

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

Feature Layer
process_entire_files
(可选)

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

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

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

String
remove_vlr
(可选)

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

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

确定是否重新排列 LAS 文件中的点。

  • MAINTAIN_POINTSLAS 文件中点的顺序将保持不变。
  • 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 文件相同。这是默认设置。
  • NO_COMPRESSION输出将为标准 LAS 格式 (*.las)。
  • ZLAS输出 LAS 文件将压缩为 zLAS 格式。
String

派生输出

名称说明数据类型
out_folder

将在其中写入 LAS 文件的文件夹。

文件夹

代码示例

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

相关主题