创建 LAS 数据集 (Data Management)
摘要
创建引用一个或多个 LAS 文件和可选表面约束要素的 LAS 数据集。
插图
用法
LAS 数据集旨在配合 *.las 或 *.zlas 格式的机载激光雷达数据使用。支持的 LAS 文件版本有 1.0、1.1、1.2 和 1.3,并可通过此处提供的工具创建 *.zlas 文件(可压缩为 *.las 文件)。
考虑通过 ArcCatalog 窗口创建和管理 LAS 数据集,以获得更好的交互式体验。有关详细信息,请参阅创建 LAS 数据集。
表面约束要素可用于强化 LAS 数据集中要素衍生的表示表面特征的高程值。
每个 LAS 文件通常在其标题(由 LAS 数据集读取)中包含空间参考信息。如果此信息丢失或写入错误,则将通过创建辅助 *.prj 文件来对 LAS 文件进行正确的地理配准,该辅助 *.prj 文件与 LAS 文件名称相同、位于同一文件夹且包含 LAS 文件坐标系的字符串表示(与 shapefile 的 *.prj 文件类似)。
在选中的情况下,计算统计数据参数将提供内部空间索引结构,用以改善 LAS 数据集的整体性能。计算统计数据时,每个 LAS 文件都会创建一个 .lasx 辅助文件,该文件与 LAS 文件一同存储在磁盘上。计算统计数据仅适用于没有辅助文件或辅助 (.lasx) 文件已过期的 LAS 文件。
根据激光雷达返回时遇到的材料(如地面、建筑或水),可将 LAS 点分为多个类别。美国摄影测量与遥感协会 (ASPRS) 为 LAS 文件版本 1.1、1.2 和 1.3 定义了以下类代码:
类别值
分类类型
0
从不分类
1
未分配
2
地面
3
低植被
4
中等植被
5
高植被
6
建筑物
7
噪点
8
模型关键
9
水域
10
为 ASPRS 定义预留
11
为 ASPRS 定义预留
12
重叠
13–31
为 ASPRS 定义预留
注:LAS 1.0 规范提供从 0 到 255 的类代码,但不具有标准分类方案。1.0 文件中使用的任何类代码通常由数据供应商定义、并通过辅助信息提供。
对各个 LAS 文件进行检查,以确定内部结构是否与 LAS 规范相一致。如果 LAS 文件没能加载到 LAS 数据集中,表示可能出现了文件损坏或文件标头信息错误的情况。考虑使用 CheckLAS 工具来确定数据中是否存在一些常见的问题。
通过 LAS 数据集查看 LAS 文件时,如果其显示位置不正确,则表示其标头中存储的投影信息不正确。这种情况下,如果知道正确的空间参考,则可以通过创建 PRJ 文件向 LAS 文件指定投影。考虑使用通过 LAS 数据集工具定义 LAS 投影工具的示例。
语法
参数 | 说明 | 数据类型 |
input [input,...] | LAS 文件和包含将被 LAS 数据集引用的 LAS 文件的文件夹。该信息可以以下形式提供:包含所有输入数据的字符串,或包含特定数据元素的字符串列表(如:"lidar1.las; lidar2.las; folder1; folder2" 或者["lidar1.las", "lidar2.las", "folder1", "folder2"])。有关指定输入列表的详细信息,请参阅了解工具语法。 | File; Folder |
out_las_dataset |
将创建的 LAS 数据集。 | LAS Dataset |
folder_recursion (可选) |
指定位于输入文件夹子目录中的激光雷达数据是否将添加到 LAS 数据集。
| Boolean |
in_surface_constraints [[in_feature_class, height_field, SF_type],...] (可选) | LAS 数据集将引用的要素类。每个要素都需要定义以下属性: in_feature_class - LAS 数据集引用的要素类。 height_field - 用于为要素指定高程值的源的字段。可以使用要素属性表中的任何数值字段。如果要素支持 Z 值,可通过选择 Shape.Z 选项读取要素几何。如果没有所需高度,则指定关键字 <无> 来创建 Z-less 要素,其高程由表面内插得到。 SF_type - 定义如何将要素几何加入到表面的三角网中的表面要素类型。具有硬或软标识的选项表示要素边是否表示坡度的明显中断或平缓变化。
| Value Table |
spatial_reference (可选) |
LAS 数据集的空间参考。如果没有明确指定空间参考,则 LAS 数据集将使用第一个输入 LAS 文件的坐标系。如果输入文件不包含任何空间参考信息,并且没有设置输入坐标系,则 LAS 数据集的坐标系将列为未知。 | Coordinate System |
compute_stats (可选) | 指定是否计算 LAS 文件的统计数据以及是否为 LAS 数据集生成空间索引。统计数据的存在允许 LAS 数据集图层使用过滤和符号系统选项,以便仅显示 LAS 文件中存在的 LAS 属性值。将为每个 LAS 文件创建 .lasx 辅助文件。
| Boolean |
relative_paths (可选) |
指定 LAS 数据集是通过相对路径还是绝对路径来引用激光雷达文件和表面约束要素。在文件系统中使用同一相对路径将 LAS 数据集及其关联的数据重新定位到其他位置时,使用相对路径会比较方便。
| Boolean |
代码实例
下面的示例演示了如何在 Python 窗口中使用此工具:
import arcpy
from arcpy import env
env.workspace = "C:/data"
arcpy.CreateLasDataset_management("folder_a; folder_b/5S4E.las",
"test.lasd", "RECURSION",
"LA/boundary.shp <None> Softclip;"\
"LA/ridges.shp Elevation hardline", "",
"COMPUTE_STATS", "RELATIVE_PATHS")
下面的示例演示了如何在独立 Python 脚本中使用此工具:
'''*********************************************************************
Name: Export Elevation Raster from Ground LAS Measurements
Description: This script demonstrates how to export
ground measurements from LAS files to a raster using a
LAS dataset. This sample is designed to be used as a script
tool.
*********************************************************************'''
# Import system modules
import arcpy
import exceptions, sys, traceback
try:
# Set Local Variables
inLas = arcpy.GetParameterAsText(0)
recursion = arcpy.GetParameterAsText(1)
surfCons = arcpy.GetParameterAsText(2)
classCode = arcpy.GetParameterAsText(3)
returnValue = arcpy.GetParameterAsText(4)
spatialRef = arcpy.GetParameterAsText(5)
lasD = arcpy.GetParameterAsText(6)
outRaster = arcpy.GetParameterAsText(7)
cellSize = arcpy.GetParameter(8)
zFactor = arcpy.GetParameter(9)
if arcpy.ProductInfo == 'ArcView':
arcpy.CheckOutExtension('3D')
# Execute CreateLasDataset
arcpy.management.CreateLasDataset(inLas, lasD, recursion, surfCons, sr)
# Execute MakeLasDatasetLayer
lasLyr = arcpy.CreateUniqueName('Baltimore')
arcpy.management.MakeLasDatasetLayer(lasD, lasLyr, classCode, returnValue)
# Execute LasDatasetToRaster
arcpy.conversion.LasDatasetToRaster(lasLyr, outRaster, 'ELEVATION',
'TRIANGULATION LINEAR WINDOW_SIZE 10', 'FLOAT',
'CELLSIZE', cellSize, zFactor)
arcpy.GetMessages()
except arcpy.ExecuteError:
print arcpy.GetMessages()
except:
# Get the traceback object
tb = sys.exc_info()[2]
tbinfo = traceback.format_tb(tb)[0]
# Concatenate error information into message string
pymsg = 'PYTHON ERRORS:\nTraceback info:\n{0}\nError Info:\n{1}'\
.format(tbinfo, str(sys.exc_info()[1]))
msgs = 'ArcPy ERRORS:\n {0}\n'.format(arcpy.GetMessages(2))
# Return python error messages for script tool or Python Window
arcpy.AddError(pymsg)
arcpy.AddError(msgs)
finally:
arcpy.management.Delete(lasLyr)