LAS 转多点 (3D Analyst)
摘要
使用一个或多个激光雷达文件创建多点要素。
插图
用法
-
支持的 LAS 文件版本有 1.0、1.1、1.2 和 1.3。
根据激光雷达返回时遇到的材料(如地面、建筑或水),可将 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 文件中使用的任何类代码通常由数据供应商定义、并通过辅助信息提供。
-
如果对基于返回数值导入点不感兴趣,或者由于已将点进行过滤或分类而将文件中指定的所有返回数值设置为 0,则选择 ANY_RETURN。
-
将多个 LAS 属性加载到 Oracle 数据库时,必须确保参数 attribute_binary 的所有 DBTUNE 关键字均设置为使用二进制大对象 (BLOB),而不是 LONGRAW。这是因为 LAS 属性已作为 BLOB 加载,而 Oracle 不支持 LONGRAW 表中存在多个 BLOB。如需帮助,请联系 Oracle 数据库管理员。
语法
参数 | 说明 | 数据类型 |
input [input,...] |
包含 LAS 1.0、1.1 和 1.2 版本格式数据的一个或多个文件或文件夹。LAS 格式是激光雷达数据的行业标准。 | Folder or File |
out_feature_class |
输出要素类。 | Feature Class |
average_point_spacing |
一个或多个输入文件中点之间的平均 2D 距离。此距离可以是一个近似值。如果以不同的密度对区域进行采样,应指定较小的间距。所提供的值需要使用输出坐标系的投影单位。 | Double |
class_code [class_code,...] (可选) |
用作 LAS 数据点的查询过滤器的分类代码。有效值范围是 1 到 32。默认情况下,不应用任何过滤器。 | Long |
return [return,...] (可选) |
用作查询过滤器的返回值。有效返回值为 1-5、LAST_RETURNS 和 ANY_RETURNS。默认值为 ANY_RETURNS。 | String |
attribute [[keyword, name],...] (可选) |
要加载和存储的一个或多个 LAS 属性与要使用的字段名称(可选)。默认设置为“无”。支持的属性关键字为 INTENSITY、RETURN_NUMBER、NUMBER_OF_RETURNS、SCAN_DIRECTION_FLAG、EDGE_OF_FLIGHTLINE、CLASSIFICATION、SCAN_ANGLE_RANK、FILE_MARKER、USER_BIT_FIELD 和 GPS_TIME。 | Value Table |
input_coordinate_system (可选) |
输入 LAS 文件的坐标系。此坐标系的默认设置在 LAS 文件中进行指定。如果由于某种原因未在该文件中对其进行定义,但您知道它的具体内容,可在此处加以指定。 | Coordinate System |
file_suffix (可选) |
从输入文件夹导入的文件的后缀。将文件夹指定为输入时,此参数为必填项。 | String |
z_factor (可选) |
高程值将乘上的系数。此系数通常用于转换 Z 线性单位,以匹配 XY 线性单位的值。默认值为 1,此时高程值保持不变。 | Double |
folder_recursion (可选) |
当所选输入文件夹中的子文件夹含有数据时,扫描子文件夹。为文件夹结构中包含的每个文件生成一行输出要素类。
| Boolean |
代码实例
下面的示例演示了如何在 Python 窗口中使用此工具:
import arcpy
from arcpy import env
arcpy.CheckOutExtension("3D")
env.workspace = "C:/data"
arcpy.LASToMultipoint_3d("001.las", "Test.gdb/feature_dataset/sample_1", 1.5,
"2", "ANY_RETURNS", "INTENSITY", "Coordinate Systems"\
"/Projected Coordinate Systems/UTM/NAD 1983/NAD 1983 "\
"UTM Zone 17N.prj", "las", 1)
下面的示例演示了如何在独立 Python 脚本中使用此工具:
'''****************************************************************************
Name: Define Data Boundary of LAS File
Description: This script demonstrates how to delineate data boundaries of
LAS files with irregularly clustered points. It is intended for
use as a script tool with one input LAS file.
****************************************************************************'''
# Import system modules
import arcpy
import exceptions, sys, traceback
# Set local variables
inLas = arcpy.GetParameterAsText(0) #input LAS file
ptSpacing = arcpy.GetParameterAsText(1) # LAS point spacing
classCode = arcpy.GetParameterAsText(2) # List of integers
returnValue = arcpy.GetParameterAsText(3) # List of strings
outTin = arcpy.GetParameterAsText(4) # TIN created to delineate data area
outBoundary = arcpy.GetParameterAsText(5) # Polygon boundary file
try:
arcpy.CheckOutExtension("3D")
# Execute LASToMultipoint
arcpy.AddMessage("Creating multipoint features from LAS...")
lasMP = arcpy.CreateUniqueName('lasMultipoint', 'in_memory')
arcpy.ddd.LASToMultipoint(inLas, LasMP, ptSpacing, class_code,
"ANY_RETURNS", "", sr, inFormat, zfactor)
# Execute CreateTin
arcpy.AddMessage("Creating TIN dataset...")
arcpy.ddd.CreateTin(outTin, sr, "{0} Shape.Z masspoints"\
.format(lasMP), "Delaunay")
# Execute CopyTin
arcpy.AddMessage("Copying TIN to delineate data boundary...")
arcpy.ddd.CopyTin(outTin, "{0}_copy".format(outTin))
# Execute DelineateTinDataArea
arcpy.AddMessage("Delineating TIN boundary...")
maxEdge = ptSpacing * 4
arcpy.ddd.DelineateTinDataArea(outTin, maxEdge, "PERIMETER_ONLY")
# Execute TinDomain
arcpy.AddMessage("Exporting data area to polygon boundary...")
arcpy.ddd.TinDomain(outTin, outBoundary, "POLYGON")
arcpy.AddMessage("Finished")
arcpy.CheckInExtension("3D")
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)