I have a LAS dataset of a forest stand and a chunk of it has been recently clearcut. I would like to update the LAS to reflect this so I can model the area but showing the clearcut hole in the canopy.

Is there a way to either remove those LAS points to leave a void in the middle of the dataset, or alternately I guess I could reclassify the points into one of the unassigned classes and then ignore that class of points?

I would like to accomplish this using QGIS and would like to alter the dataset or the underlying LAS files, whichever method will accomplish removing the cutblock from the display of the LAS points.

  • Please decide whether you wish to ask about ArcGIS Desktop, Global Mapper or QGIS in this particular question. Otherwise you are effectively asking three questions which goes against the Tour. – PolyGeo Mar 21 '17 at 20:33
  • 1
    Also, please specify if you wish to modify the LAS Dataset, or the underlying LAS files themselves. – Barbarossa Mar 21 '17 at 20:41

This is actually a multi-step workflow. First you need to create polygons or a raster mask of the areas you would like to clip/mask. Then either reclassify or clip the point cloud with the polygons.

Lastools lasclip can accomplish this. I have not used lastools via QGIS, although I know this is possible (instructions).


takes as input a LAS/LAZ/TXT file and a SHP/TXT file with one or many polygons (e.g. building footprints or flight lines), clips away all the points that fall outside all polygons (or inside some polygon), and stores the surviving points to the output LAS/LAZ/TXT file. Instead of clipping the points they can also be classified. For more details see the README file.

I prefer to use the free FUSION command line tools to perform operations such as these. The following is an example from the documentation (p.122)

PolyClipData /outside stand_polys.shp stand_pts_tile0023.las tile0023.las


PolyClipData clips point data using polygons stored in ESRI shapefiles. The default behavior of PolyClipData is to produce a single output file that contains all points that are inside all of the polygons in the shapefile. Optional behaviors include including only points outside the polygons, producing individual files containing the points within each polygon in the shapefile, and clipping points within a single polygon specified using a field from the shapefile database.


PDAL supports a similar workflow, and it allows you to use any OGR-readable data source for the polygons. There is a tutorial on the PDAL website that describes how to do it.

You can use Docker to run PDAL command-line utilities on Windows 10, and the PDAL Quickstart has details how to get that going.

In short, the workflow in PDAL for this task is to:

  1. Add an attribute column to a shapefile or some vector coverage of your polygons. You will assign that to the point data.

  2. Use PDAL to assign that attribute for each of the points inside the polygons you want to toss out.

  3. Remove all of the points that have that attribute.

Here's the PDAL pipeline that overlays our attributes.shp file, and assigns values in the CLS column to the Classification dimension of each point. Our CLS values were set to 26 when we created the polygons, and we then use that value in the filters.range operation to remove all of the points that have value 26.


Once you have a pipeline, save it as clip.json in a path like C:/Users/hobu/data and run it with Docker:

docker run -v c:/Users/hobu/data:/data pdal/pdal:1.4 pdal pipeline /data/clip.json

The approach could be adapted in a number of ways.

  1. You could assign all of the Z dimensions inside your polygons to a fixed value. This would allow you to keep other point attributes but artificially adjust the Z values to show the clearcut area.

  2. You could reverse the filters.range operation to keep the points in the clearcut area and do some downstream processing to them.

  3. You could assign different CLS values to your different polygons and adjust how you keep or remove data with the filters.range operation.

Please note that filters.attribute was renamed for the upcoming PDAL 1.5 release to filters.overlay and filters.assign, but the functionality will remain the same.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.