摘要
根据航测激光雷达测量的重叠扫描对 LAS 点进行分类。
插图
用法
对于分类 LAS 建筑物工具等假定规则点分布的操作而言,存在未分类的重叠点可能会导致不希望出现的后果。如果重叠来自极端扫描角度,则也可能会在生成派生数据时产生不希望出现的误差幅度。对重叠点进行分类可过滤出这些点,以返回质量更高的点,并实现更加均匀的点分布。
LAS 点的点源 ID 属性可提供从中采集 LAS 点的航线的相关信息。此工具按块对 LAS 数据进行处理,方法为:确定是否存在多个点源 ID,然后将具有较高量级扫描角度的 ID 标识为重叠。如果正在处理的区域中存在多个点源 ID 相同的点,对于拥有最大量级扫描角的点,所有共享该点点源 ID 的点都将被分类为重叠。为此,用于评估 LAS 点的样本大小应约为 LAS 数据标准点间距的 2 到 3 倍。应该避免使用较大块,因为它可能会错误分类扫描角度值较小的点。小型样本可能无法捕获足够的点来正确识别和分类所有重叠点。
将为 LAS 版本 1.4 文件中且点记录格式为 6-8 的重叠点分配重叠分类标记,同时保留其原始类代码值。将为其他所有受支持的 LAS 文件中的重叠点分配类代码值 12。如果输入 LAS 文件已使用类代码值 12 来表示重叠扫描外的内容,在执行此工具之前,请考虑使用更改 LAS 类代码工具为这些点重新分配其他值。
-
LAS 格式支持根据美国摄影测量与遥感协会 (ASPRS) 制定的规范对每个点进行分类。ArcGIS 平台应用为 LAS 文件版本 1.4 指定的分类方案:
类别值 分类类型 0
从不分类
1
未分配
2
地面
3
低植被
4
中等植被
5
高植被
6
建筑物
7
低噪音
8
模型关键点/保留
9
水体
10
铁路
11
路面
12
重叠/保留
13
钢丝护网
14
导线
15
输电塔
16
线 - 连接器
17
桥板
18
高噪音
19 – 63
为 ASPRS 定义保留(LAS 1.1 至 1.3 最高支持类代码 31)
32 – 255
可由用户定义(仅 LAS 1.0 和 1.4 的特定版本支持)
语法
ClassifyLasOverlap_3d (in_las_dataset, sample_distance, {extent}, {process_entire_files}, {compute_stats})
参数 | 说明 | 数据类型 |
in_las_dataset | 待处理的 LAS 数据集。 | LAS Dataset Layer |
sample_distance | 用于评估 LAS 数据的方形区域各维度的距离。此值可表示为数字加线性单位值,例如 3 米。如果未指定线性单位或输入为未知,则将由输入 LAS 文件的空间参考来定义单位。 | Linear Unit |
extent (可选) | 指定将由此工具进行评估的数据范围。 | Extent |
process_entire_files (可选) | 指定处理范围的应用方式。
| Boolean |
compute_stats (可选) | 指定是否应计算 LAS 数据集引用的 LAS 文件的统计数据。统计数据的存在允许 LAS 数据集图层使用过滤和符号系统选项,以便仅显示 LAS 文件中存在的 LAS 属性值。
| Boolean |
派生输出
名称 | 说明 | 数据类型 |
out_las_dataset | 待修改的 LAS 数据集。 | LAS 数据集图层 |
代码示例
ClassifyLasOverlap 示例 1(Python 窗口)
下面的示例演示了如何在 Python 窗口中使用此工具。
arcpy.env.workspace = 'C:/data'
arcpy.ddd.ClassifyLasOverlap('Denver_2.lasd', '1 Meter')
ClassifyLasOverlap 示例 2(独立脚本)
下面的示例演示了如何在独立 Python 脚本中使用此工具。
'''****************************************************************************
Name: Classify Lidar & Extract Building Footprints
Description: Extract footprint from lidar points classified as buildings,
regularize its geometry, and calculate the building height.
****************************************************************************'''
import arcpy
lasd = arcpy.GetParameterAsText(0)
dem = arcpy.GetParameterAsText(1)
footprint = arcpy.GetParameterAsText(2)
try:
desc = arcpy.Describe(lasd)
if desc.spatialReference.linearUnitName in ['Foot_US', 'Foot']:
unit = 'Feet'
else:
unit = 'Meters'
ptSpacing = desc.pointSpacing * 2.25
sampling = '{0} {1}'.format(ptSpacing, unit)
# Classify overlap points
arcpy.ddd.ClassifyLASOverlap(lasd, sampling)
# Classify ground points
arcpy.ddd.ClassifyLasGround(lasd)
# Filter for ground points
arcpy.management.MakeLasDatasetLayer(lasd, 'ground', class_code=[2])
# Generate DEM
arcpy.conversion.LasDatasetToRaster('ground', dem, 'ELEVATION',
'BINNING NEAREST NATURAL_NEIGHBOR',
sampling_type='CELLSIZE',
sampling_value=desc.pointSpacing)
# Classify noise points
arcpy.ddd.ClassifyLasNoise(lasd, method='ISOLATION', edit_las='CLASSIFY',
withheld='WITHHELD', ground=dem,
low_z='-2 feet', high_z='300 feet',
max_neighbors=ptSpacing, step_width=ptSpacing,
step_height='10 feet')
# Classify buildings
arcpy.ddd.ClassifyLasBuilding(lasd, '7.5 feet', '80 Square Feet')
#Classify vegetation
arcpy.ddd.ClassifyLasByHeight(lasd, 'GROUND', [8, 20, 55],
compute_stats='COMPUTE_STATS')
# Filter LAS dataset for building points
lasd_layer = 'building points'
arcpy.management.MakeLasDatasetLayer(lasd, lasd_layer, class_code=[6])
# Export raster from lidar using only building points
temp_raster = 'in_memory/bldg_raster'
arcpy.management.LasPointStatsAsRaster(lasd_layer, temp_raster,
'PREDOMINANT_CLASS', 'CELLSIZE', 2.5)
# Convert building raster to polygon
temp_footprint = 'in_memory/footprint'
arcpy.conversion.RasterToPolygon(temp_raster, temp_footprint)
# Regularize building footprints
arcpy.ddd.RegularizeBuildingFootprint(temp_footprint, footprint,
method='RIGHT_ANGLES')
except arcpy.ExecuteError:
print(arcpy.GetMessages())
环境
许可信息
- ArcGIS Desktop Basic: 需要 3D Analyst
- ArcGIS Desktop Standard: 需要 3D Analyst
- ArcGIS Desktop Advanced: 需要 3D Analyst