Summary
Creates new LAS files from point cloud data in a LAS dataset or point cloud scene layer.
Illustration
Usage
This tool creates new .las or .zlas files from an input LAS dataset or point cloud scene layer package (.slpk file). When the input is a LAS dataset, one output file will be created for each .las or .zlas file referenced by the LAS dataset. When the input is a point cloud scene layer, the number of output files depends on the number of points being extracted. Each output file is limited in size to approximately 16.7 million points. When multiple files are created, the resulting files may have overlapping extents, which can lead to inefficient data processing in certain situations. Consider using the Tile LAS tool to reorganize the files extracted from a point cloud scene layer into a specific tiling scheme with nonoverlapping extents.
You can extract a subset of the input point cloud by specifying a processing extent, extraction boundary, or both. When a processing extent is provided with an extraction boundary, the intersection of both defines the coverage of the extracted .las files. If neither the processing extent nor the extraction boundary is defined, the full extent of the input point cloud will be extracted to the output .las files. Additionally, you can apply a point filter to the input point cloud to limit the points that will be extracted based on any combination of classification codes, classification flags, and return values. Define the point filters by loading the layer into an active map or scene and specifying the desired filters in the Layer Properties dialog box. You can also define point filters for the LAS dataset using the Make LAS Dataset Layer tool.
This tool can be used to reproject the spatial reference of the input point cloud to a different horizontal and vertical coordinate system by setting the Output Coordinate System environment. The spatial reference of a .las file can be defined in either its header or an auxiliary .prj file using the well-known text (WKT) convention. The .prj file must reside in the same location as the .las file and have the same name as the .las file. When present, the .prj file will override the spatial reference information in the .las file header. You can create .prj files for .las files with missing or incorrectly defined spatial reference using the Define Projection tool for an individual .las or .zlas file or the Create LAS Dataset tool with the PRJ option enabled.
It is not uncommon for LAS point records to be stored in the .las file in a binary sequence that does not correspond with the spatial clustering of the points. When data of such distribution is queried, it can result in less efficient access to the binary records that represent the LAS points. Rearranging the points in the resulting .las file will optimize the data for visualization and other spatial operations. Statistics will automatically be calculated when the rearrange option is enabled. If you choose not to rearrange the LAS points, you can enable or disable the calculation of statistics. Calculating statistics will optimize spatial queries and provide a summary of the class codes and return values that are present in the .las file. However, it will also add time to the processing of this tool. If the resulting .las files will not be used in ArcGIS, you can disable the calculation of statistics so that the tool can process faster.
Parameters
Label | Explanation | Data Type |
Input Point Cloud | The LAS dataset or point cloud scene layer package (.slpk file) to process. | LAS Dataset Layer; Scene Layer; File |
Target Folder | The existing folder to which the output .las files will be written. | Folder |
Processing Extent (Optional) | The extent of the data that will be evaluated.
| Extent |
Extraction Boundary (Optional) | A polygon boundary that defines the area of the .las files that will be clipped. | Feature Layer |
Process entire LAS files that intersect extent (Optional) | Specifies how the area of interest will be used in determining how .las files will be processed. The area of interest is defined by the Processing Extent parameter value, the Processing Boundary parameter value, or a combination of both.
| Boolean |
Output File Name Suffix (Optional) | The text that will be appended to the name of each output .las file. Each file will inherit its base name from its source file, followed by the suffix specified in this parameter. | String |
Remove Variable Length Records (Optional) | Specifies whether variable length records (VLRs) will be removed. Each .las file may potentially contain a set of VLRs that were added by the software that produced it. The meaning of these records is typically only known by the originating software. Unless the output LAS data will be processed by an application that understands this information, retaining the VLRs may not provide any value-added functionality. Removing the VLRs can potentially save significant disk space depending on their total size and the number of files containing them.
| Boolean |
Rearrange points (Optional) | Specifies whether points in the .las files will be rearranged.
| Boolean |
Compute Statistics (Optional) | Specifies whether statistics will be computed for the .las files referenced by the LAS dataset. Computing statistics provides a spatial index for each .las file, which improves analysis and display performance. Statistics also enhance the filtering and symbology experience by limiting the display of LAS attributes, such as classification codes and return information, to values that are present in the .las file.
| Boolean |
Output LAS Dataset (Optional) | The output LAS dataset referencing the newly created .las files. | LAS Dataset |
Compression (Optional) | Specifies whether the output .las file will be in a compressed format or the standard LAS format.
| String |
Derived Output
Label | Explanation | Data Type |
Output Folder | The folder to which the .las files will be written. | Folder |
arcpy.ddd.ExtractLas(in_las_dataset, target_folder, {extent}, {boundary}, {process_entire_files}, {name_suffix}, {remove_vlr}, {rearrange_points}, {compute_stats}, {out_las_dataset}, {compression})
Name | Explanation | Data Type |
in_las_dataset | The LAS dataset or point cloud scene layer package (.slpk file) to process. | LAS Dataset Layer; Scene Layer; File |
target_folder | The existing folder to which the output .las files will be written. | Folder |
extent (Optional) | The extent of the data that will be evaluated.
| Extent |
boundary (Optional) | A polygon boundary that defines the area of the .las files that will be clipped. | Feature Layer |
process_entire_files (Optional) | Specifies how the processing extent will be applied.
| Boolean |
name_suffix (Optional) | The text that will be appended to the name of each output .las file. Each file will inherit its base name from its source file, followed by the suffix specified in this parameter. | String |
remove_vlr (Optional) | Specifies whether variable length records (VLRs) will be removed. Each .las file may potentially contain a set of VLRs that were added by the software that produced it. The meaning of these records is typically only known by the originating software. Unless the output LAS data will be processed by an application that understands this information, retaining the VLRs may not provide any value-added functionality. Removing the VLRs can potentially save significant disk space depending on their total size and the number of files containing them.
| Boolean |
rearrange_points (Optional) | Specifies whether points in the .las files will be rearranged.
| Boolean |
compute_stats (Optional) | Specifies whether statistics will be computed for the .las files referenced by the LAS dataset. Computing statistics provides a spatial index for each .las file, which improves analysis and display performance. Statistics also enhance the filtering and symbology experience by limiting the display of LAS attributes, such as classification codes and return information, to values that are present in the .las file.
| Boolean |
out_las_dataset (Optional) | The output LAS dataset referencing the newly created .las files. | LAS Dataset |
compression (Optional) | Specifies whether the output .las file will be in a compressed format or the standard LAS format.
| String |
Derived Output
Name | Explanation | Data Type |
out_folder | The folder to which the .las files will be written. | Folder |
Code sample
The following sample demonstrates the use of this tool in the Python window.
import arcpyfrom arcpy import envenv.workspace = 'C:/data'arcpy.ddd.ExtractLas('test.lasd', 'c:/lidar/subset', boundary='study_area.shp', name_suffix='subset', remove_vlr=True, rearrange_points='REARRANGE_POINTS', out_las_dataset='extracted_lidar.lasd')
The following sample demonstrates the use of this tool in a stand-alone Python script.
'''****************************************************************************Name: Split Large LAS FileDescription: Divides a large LAS file whose point distribution covers the full XY extent of the data into smaller files to optimize performance when reading lidar data.****************************************************************************'''# Import system modulesimport arcpyimport tempfileimport mathin_las_file = arcpy.GetParameterAsText(0)tile_width = arcpy.GetParameter(1) # double in LAS file's XY linear unittile_height = arcpy.GetParameter(2) # double in LAS file's XY linear unitout_folder = arcpy.GetParameterAsText(3) # folder for LAS filesout_name_suffix = arcpy.GetParameterAsText(4) # basename for output filesout_lasd = arcpy.GetParameterAsText(5) # output LAS datasettry: temp_lasd = arcpy.CreateUniqueName('temp.lasd', tempfile.gettempdir()) arcpy.management.CreateLasDataset(in_las_file, temp_lasd, compute_stats='COMPUTE_STATS') desc = arcpy.Describe(temp_lasd) total_columns = int(math.ceil(desc.extent.width/tile_width)) total_rows = int(math.ceil(desc.extent.height/tile_height)) digits = int(math.log10(max(cols, rows))) + 1 for row in range(1, total_rows+1): yMin = desc.extent.YMin + tile_height*(row-1) yMax = desc.extent.YMin + tile_height*(row) for col in range (1, total_columns+1): xMin = desc.extent.XMin + tile_width*(col-1) xMax = desc.extent.XMax + tile_width*(col) name_suffix = '_{0}_{1}x{2}'.format(out_name_suffix, str(row).zfill(digits), str(col).zfill(digits)) arcpy.ddd.ExtractLas(temp_lasd, out_folder, arcpy.Extent(xMin, yMin, xMax, yMax), name_suffix=name_suffix, rearrange_points='REARRANGE_POINTS', compute_stats='COMPUTE_STATS') arcpy.env.workspace = out_folder arcpy.management.CreateLasDataset(arcpy.ListFiles('*{0}*.las'.format(out_name_suffix)), out_lasd, compute_stats='COMPUTE_STATS', relative_paths='RELATIVE_PATHS')except arcpy.ExecuteError: print(arcpy.GetMessages())
Environments
Current Workspace, Extent, Output Coordinate System, Geographic Transformations
Licensing information
- Basic: Requires 3D Analyst
- Standard: Requires 3D Analyst
- Advanced: Requires 3D Analyst
Related topics
- An overview of the Point Cloud toolset
- Find a geoprocessing tool
Feedback on this topic?