摘要
分类航空激光雷达数据中的建筑物屋顶点。
插图
用法
分类建筑物屋顶点之前必须先分类 LAS 数据的地面点。如果地面点尚未分类,请考虑使用分类 LAS 地面点工具。地面点必须具有类代码值 2,因此如果地面点具有不同的类代码值,请使用更改 LAS 类代码工具相应地重新分配分类代码。
将对类代码值为 0 和 1 的 LAS 点进行评估,以确定其是否适合指定用于识别建筑物屋顶的最小面积和高度。还将使用类代码值为 6 的现有建筑物分类点来确定相邻点是否适合连接同一结构的平面。该过程使用经过优化的 RANSAC 算法,该算法先随机选择种子点,因此,每次执行该算法后的分类结果会稍有不同。
如果对不属于建筑物的小聚类点进行了错误分类,请考虑增大最小面积参数以排除包含的这些点。相反地,如果工具未捕获建筑物,可考虑使用较小的面积以捕捉丢失的区域。可以提供处理范围或边界面以进一步限制正在处理的区域,这在测试实验值的结果时非常有用。
该工具适用于处理航测激光雷达测量。对于从诸如摄影测量点云等来源创建的 LAS 文件,其结果的可靠性可能较低,这是因为出现噪点的概率更高。
LAS 点的点密度一致时,该工具效果最佳。通常情况下,航测激光雷达测量的覆盖范围会有一些重叠,因此产生区域的点聚类会更加密集。包含这些点会使标准点间距发生变形,并在重叠区域产生错分误差,在非重叠区域产生漏分误差。为了获得最佳结果,请使用分类 LAS 重叠工具来分类重叠点并修改平均点间距值以估计重叠区域外部的标准点间距。
语法
ClassifyLasBuilding_3d (in_las_dataset, {min_height}, min_area, {compute_stats}, {extent}, boundary, {process_entire_files}, point_spacing)
参数 | 说明 | 数据类型 |
in_las_dataset | 待分类的 LAS 数据集。 | LAS Dataset Layer |
min_height (可选) | 定义可识别的屋顶点最低点距离地面的高度。 | Linear Unit |
min_area | 将用于建立建筑物屋顶存在情况的共面点的最小面积。 | Areal Unit |
compute_stats (可选) | 指定是否应计算 LAS 数据集引用的 LAS 文件的统计数据。统计数据的存在允许 LAS 数据集图层使用过滤和符号系统选项,以便仅显示 LAS 文件中存在的 LAS 属性值。
| Boolean |
extent (可选) | 指定将由此工具进行评估的数据范围。 | Extent |
boundary | 定义将由此工具进行处理的感兴趣区的面要素。 | Feature Layer |
process_entire_files (可选) | 指定处理范围的应用方式。
| Boolean |
point_spacing | 将用于建立建筑物屋顶存在情况的 LAS 点的平均间距。该值默认为针对 LAS 数据集计算的平均间距。 | Linear Unit |
派生输出
名称 | 说明 | 数据类型 |
derived_las_dataset | 针对建筑物屋顶进行分类的 LAS 数据集。 | LAS 数据集图层 |
代码示例
ClassifyLasBuilding 示例 1(Python 窗口)
下面的示例演示了如何在 Python 窗口中使用此工具。
arcpy.env.workspace = 'C:/data'
arcpy.ClassifyLasBuilding_3d('Highland.lasd', minHeight='9 feet',
minArea='30 Square Feet', compute_stats=True)
ClassifyLasBuilding 示例 2(独立脚本)
下面的示例演示了如何在独立 Python 脚本中使用此工具。
'''****************************************************************************
Name: Tile & Classify LAS Files
Description: Creates & classifies tiled LAS files.
****************************************************************************'''
# Import system modules
import arcpy
import tempfile
import math
in_las = arcpy.GetParameterAsText(1) # The LAS files that need to be tiled
out_folder = arcpy.GetParameterAsText(2) # folder for LAS files
basename = arcpy.GetParameterAsText(3) # basename for output files
out_lasd = arcpy.GetParameterAsText(4) # output LAS dataset
try:
# Create temp LAS dataset to reference LAS files that will be tiled
temp_lasd = arcpy.CreateUniqueName('temp.lasd', tempfile.gettempdir())
arcpy.management.CreateLasDataset(in_las, temp_lasd)
arcpy.ddd.TileLas(temp_lasd, out_folder, basename, out_lasd, las_version=1.4,
point_format=7, file_size=300)
arcpy.management.Delete(temp_lasd)
arcpy.ddd.ClassifyLasGround(out_lasd, method='AGGRESSIVE')
arcpy.ddd.ClassifyLasBuilding(out_lasd, min_height='3 Meters', min_area='4 Meters')
arcpy.ddd.ClassifyLasByHeight(out_lasd, height_classification=[(3, 6), (4,20), (5,70)],
noise='All Noise', compute_stats='COMPUTE_STATS')
except arcpy.ExecuteError:
print(arcpy.GetMessages())
环境
许可信息
- ArcGIS Desktop Basic: 需要 3D Analyst
- ArcGIS Desktop Standard: 需要 3D Analyst
- ArcGIS Desktop Advanced: 需要 3D Analyst