按高度分类 LAS (3D Analyst)

摘要

基于距离地表的高度对激光雷达点进行重分类。

使用情况

  • 此工具基于 LAS 点距离地表的高度,使用类代码值 0 或 1 对 LAS 点进行重新分类。 地表可以来自 LAS 点或单独的栅格图层。 当使用来自 LAS 点的地面时,需要地面分类 LAS 数据集。 可以使用具有值为 2、8 或 2 和 8 的地面分类点。 美国摄影测量及遥感协会 (ASPRS) 定义了 LAS 格式规范,其中包含类代码定义,在 1.4 之前的 LAS 版本中,指定 2 表示地面,8 表示模型关键点。 以前,模型关键点用于识别地面点的子集。 在 LAS 1.4 版本中,模型关键点名称成为可应用于任意类代码的分类标记,并保留了类代码值为 8 的定义,以供后续使用。

  • 如果 LAS 数据不具有任何地面分类点,但存在可用的地面点,请使用分类 LAS 地面工具。 如果地面点使用的值不是 2 或 8,请使用更改 LAS 类代码工具相应地重新分类地面点。

  • 使用距离地面的高度梯度对点进行分类可以提供一种有效的方法来对点云进行可视化和过滤,这也有助于进行更为精细的交互式分类过程。 默认情况下,工具对类代码 3、4 和 5 进行分类,这在 LAS 格式的 ASPRS 规范中表示低、中和高植被。

  • 考虑应用处理范围来查看指定的 z 范围值是否适用于 LAS 点的子集。 如果重分类的区域符合要求,即可将其应用于更大的范围。

  • 当不存在可用的地面分类点,但需要基于高度进行分类时(例如建筑物内部或洞穴的点云),自定义栅格表面可能会有所帮助。

参数

标注说明数据类型
输入 LAS 数据集

将要处理的 LAS 数据集。 将仅对类代码值为 0 和 1 的 LAS 点进行评估。

LAS Dataset Layer
地面资源

指定将用于确定距离地面高度的地面测量的资源。

  • 所有地面点将使用通过地面分类代码值 2 和模型关键代码值 8 指定的 LAS 点。
  • 模型关键点将仅使用通过模型关键分类代码值 8 指定的 LAS 点。
  • 栅格表面地面高度将基于栅格表面。
String
高度分类

将用于对 LAS 点进行重分类的类代码和距离地面的最大高度。 表中各个类的顺序可定义将用于处理重分类的 z 值的范围。 第一个条目的 z 范围将从地表跨越到指定的距离地面高度值。 后续条目的 z 范围将从先前条目的上限跨越到其自身的距离地面高度值。

Value Table
噪点分类
(可选)

根据点距离地面的临近性指定是否对点进行重分类和如何进行重分类。 激光雷达数据中的噪点伪影可由传感器错误和空中障碍物(例如,位于激光雷达脉冲路径上的鸟类)的无意拦截引入。

  • 低噪音和高噪音低噪点和高噪点都将得到分类。
  • 高噪音只有大于 LAS 分类表中最大高度的点才会被重分类为高噪点。
  • 低噪音只有低于地表的点才会被重分类为噪点。 此选项仅适用于所有地面点都用于定义地表时。
  • 没有将被重分类为噪点的点。
String
计算统计数据
(可选)

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

  • 选中 - 将计算统计数据。 这是默认设置。
  • 未选中 - 不计算统计数据。
Boolean
处理范围
(可选)

待评估数据的范围。

  • 当前显示范围 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
处理与范围相交的整个 LAS 文件
(可选)

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

  • 未选中 - 将仅对处理范围内的 LAS 点进行评估。 这是默认设置。
  • 选中 - 将对处理范围相交的 .las 文件中的所有点进行评估。
Boolean
处理边界

定义评估 LAS 地面点所在区域的面要素。

Feature Layer
更新金字塔
(可选)

指定修改类代码后,LAS 数据集金字塔是否会更新。

  • 选中 - LAS 数据集金字塔将更新。 这是默认设置。
  • 未选中 - LAS 数据集金字塔不会更新。
Boolean
输入栅格表面。
(可选)

将提供地面高度值的栅格图层。 仅在将地面源参数设置为栅格表面时,才能使用此参数。

Raster Layer

派生输出

标注说明数据类型
更新后的输入 LAS 数据集

已修改的 LAS 数据集。

LAS Dataset Layer

arcpy.ddd.ClassifyLasByHeight(in_las_dataset, ground_source, height_classification, {noise}, {compute_stats}, {extent}, {process_entire_files}, boundary, {update_pyramid}, {in_surface})
名称说明数据类型
in_las_dataset

将要处理的 LAS 数据集。 将仅对类代码值为 0 和 1 的 LAS 点进行评估。

LAS Dataset Layer
ground_source

指定将用于确定距离地面高度的地面测量的资源。

  • GROUND将使用通过地面分类代码值 2 和模型关键代码值 8 指定的 LAS 点。
  • MODEL_KEY将仅使用通过模型关键分类代码值 8 指定的 LAS 点。
  • SURFACE地面高度将基于栅格表面。
String
height_classification
[[class_code, height_from_ground],...]

将要分配给 LAS 点的类代码值,这些点位于派生自指定距离地面高度的值范围内。 条目的顺序影响将用于定义 LAS 点的重分类的高度范围。 第一个条目的 z 范围将从地表跨越到指定的 height_from_ground 值。 后续条目的 z 范围将从先前条目的上限跨越到其自身的 height_from_ground 值。

Value Table
noise
(可选)

根据点距离地面的临近性指定是否对点进行重分类和如何进行重分类。 激光雷达数据中的噪点伪影可由传感器错误和空中障碍物(例如,位于激光雷达脉冲路径上的鸟类)的无意拦截引入。

  • ALL_NOISE低噪点和高噪点都将得到分类。
  • HIGH_NOISE只有大于 LAS 分类表中最大高度的点才会被重分类为高噪点。
  • LOW_NOISE只有低于地表的点才会被重分类为噪点。 此选项仅适用于所有地面点都用于定义地表时。
  • NONE没有将被重分类为噪点的点。
String
compute_stats
(可选)

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

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

待评估数据的范围。

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

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

  • PROCESS_EXTENT将仅对处理范围内的 LAS 点进行评估。 这是默认设置。
  • PROCESS_ENTIRE_FILES将对处理范围相交的 .las 文件中的所有点进行评估。
Boolean
boundary

定义评估 LAS 地面点所在区域的面要素。

Feature Layer
update_pyramid
(可选)

指定修改类代码后,LAS 数据集金字塔是否会更新。

  • UPDATE_PYRAMIDLAS 数据集金字塔将更新。 这是默认设置。
  • NO_UPDATE_PYRAMIDLAS 数据集金字塔不会更新。
Boolean
in_surface
(可选)

将提供地面高度值的栅格图层。 仅在将 ground_source 参数设置为 SURFACE 时,才能使用此参数。

Raster Layer

派生输出

名称说明数据类型
out_las_dataset

已修改的 LAS 数据集。

LAS Dataset Layer

代码示例

ClassifyLasByHeight 示例 1(Python 窗口)

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

arcpy.env.workspace = 'C:/data'
arcpy.ddd.ClassifyLasByHeight('lidar.lasd', 'Ground', 
                             [[3, 5], [4, 17], [5, 120]], 'HIGH_NOISE')
ClassifyLasByHeight 示例 2(独立脚本)

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

'''****************************************************************************
Name:        Classify Vegetation Points
Description: Classify points representing vegetation with LAS class code values
             of 3, 4, and 5. The code is designed for use as a script tool.
****************************************************************************'''
# Import system modules
import arcpy
import exceptions, sys, traceback

# Set Local Variables
inLas = arcpy.GetParameterAsText(0)
recursion = arcpy.GetParameterAsText(1)
lasd = arcpy.GetParameterAsText(2)
extent = arcpy.GetParameter(3)
calcStats = arcpy.GetParameter(4)

try:
    # Execute CreateLasDataset
    arcpy.management.CreateLasDataset(inLas, lasd, folder_recursion=recursion)
    # Execute ChangeLasClassCodes
    arcpy.ddd.ClassifyLasByHeight(lasd, ground_source='GROUND', 
                                  height_classification=[[3, 5], 
                                                         [4, 17], 
                                                         [5, 120]], 
                                  noise='ALL_NOISE', compute_stats=calcStats, 
                                  extent=extent)

except arcpy.ExecuteError:
    print(arcpy.GetMessages())

相关主题