LAS To Multipoint (3D Analyst)
Summary
This tool imports one or more files in LAS format, the industry standard for lidar data, into a new multipoint feature class. Supported LAS file format versions are 1.0, 1.1, and 1.2.
Usage
LAS points can be classified into a number of categories including bare earth or ground, top of canopy, and water. The different classes are defined using numeric integer codes. Unfortunately, the LAS 1.0 specification does not have a predefined classification scheme, nor do the files summarize what, if any, class codes are used by the points. You need to be given this information from the data provider.
If you are working with the LAS 1.1 or 1.2 specification, refer to the predefined classification schemes defined by American Society for Photogrammetry and Remote Sensing (ASPRS) for the desired data category. The following table lists the LAS class codes based on LAS version 1.2 defined by ASPRS.
To import predefined LAS points from the LAS file or files, you can specify them in the Input Class Codes parameter.
ASPRS Standard LiDAR Point ClassesClassification Value
Meaning
0
Created, never classified
1
Unclassified
2
Ground
3
Low Vegetation
4
Medium Vegetation
5
High Vegetation
6
Building
7
Low Points (noise)
8
Model Key-Points (mass points)
9
Water
10
Reserved for ASPRS Definition
11
Reserved for ASPRS Definition
12
Overlap Points
13-31
Reserved fro ASPRS Definition
-
Supported LAS versions are 1.0, 1.1, and 1.2.
-
If you are not interested in importing points based on their return number, or if all returns specified in the file or files are set to 0 because the points have been filtered or classified, select ANY_RETURN.
-
When loading multiple LAS attributes into an Oracle database, you'll need to make sure all DBTUNE keywords for parameter attribute_binary are set to use binary large objects (BLOBs), not LONGRAW. This is because LAS attributes are loaded as BLOBs, and Oracle does not support multiple BLOBs in LONGRAW tables. See your Oracle database administrator for assistance.
Syntax
Parameter | Explanation | Data Type |
input |
One or more files or folders with data in the LAS version 1.0, 1.1, and 1.2 format. The LAS format is the industry standard for lidar data. | Folder; File |
out_feature_class |
The newly created multipoint feature class to which lidar points are added. | Feature Class |
average_point_spacing |
The average 2D distance between points in the input file or files. This can be an approximation. If areas have been sampled at different densities, specify the smaller spacing. The value needs to be provided in the projection units of the output coordinate system. | Double |
class_code (Optional) |
Numeric classification codes to use as a query filter. The default is no filter. | Long |
return (Optional) |
The return values used as a query filter. Valid return values are 1-5, LAST_RETURNS, and ANY_RETURNS. The default is ANY_RETURNS. | String |
attribute (Optional) |
One or more LAS attributes to load and store and optionally the field names to use. The default is none. Supported attribute keywords are INTENSITY, RETURN_NUMBER, NUMBER_OF_RETURNS, SCAN_DIRECTION_FLAG, EDGE_OF_FLIGHTLINE, CLASSIFICATION, SCAN_ANGLE_RANK, FILE_MARKER, USER_BIT_FIELD, and GPS_TIME. | String |
input_coordinate_system (Optional) |
The coordinate system of the input LAS file. This defaults to that specified in the LAS file. If for some reason it's not defined in the file but you know what it is, provide it here. | Coordinate system |
file_suffix (Optional) |
The suffix of the files to import when a folder is specified on input. | String |
z_factor (Optional) |
Specifies a factor by which to multiply the surface heights. Used to convert z units to x and y units. | Double |
Code Sample
The following Python Window script demonstrates how to use the LAS To Multipoint function in immediate mode.
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)
The following Python script demonstrates how to use the LAS To Multipoint function in a stand-alone script.
'''**************************************************************************** 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)