lidR (version 2.1.4)

lasclip: Clip LiDAR points


Clip LiDAR points within a given geometry from a point cloud (LAS object) or a catalog (LAScatalog object). With a LAS object, the user first reads and loads a point-cloud into memory and then can clip it to get a subset within a region of interest (ROI). With a LAScatalog object, the user can extract any arbitrary ROI for a set of las/laz files, loading only the points of interest. This is faster, easier and much more memory-efficient for extracting ROIs.


lasclip(las, geometry, ...)

lasclipRectangle(las, xleft, ybottom, xright, ytop)

lasclipPolygon(las, xpoly, ypoly)

lasclipCircle(las, xcenter, ycenter, radius)



An object of class LAS or LAScatalog.


a geometric object. Many types are supported, see section 'supported geometries'.


optional supplementary options (see supported geometries)


numeric. left x coordinates of rectangles.


numeric. bottom y coordinates of rectangles.


numeric. right x coordinates of rectangles.


numeric. top y coordinates of rectangles.


numeric. x coordinates of a polygon.


numeric. y coordinates of a polygon.


numeric. x coordinates of discs centers.


numeric. y coordinates of discs centers.


numeric. disc radius or radii.


If the input is a LAS object: an object of class LAS, or a list of LAS objects if the query implies several regions of interest will be returned. If the input is a LAScatalog object: an object of class LAS, or a list of LAS objects if the query implies several regions of interest will be returned, or a LAScatalog if the queries are immediately written into files without loading anything in R.

Supported geometries

Working with a <code>LAScatalog</code>

This section appears in each function that supports a LAScatalog as input.

In lidR when the input of a function is a LAScatalog the function uses the LAScatalog processing engine. The user can modify the engine options using the available options. A careful reading of the engine documentation is recommended before processing LAScatalogs. Each lidR function should come with a section that documents the supported engine options.

The LAScatalog engine supports .lax files that significantly improve the computation speed of spatial queries using a spatial index. Users should really take advantage a .lax files, but this is not mandatory.

Supported processing options

Supported processing options for a LAScatalog (in bold). For more details see the LAScatalog engine documentation:

  • chunk_size: Does not make sense here.

  • buffer: Not supported yet.

  • alignment: Does not makes sense here.

  • progress: Displays a progress estimation.

  • stop_early: Leave this 'as-is' unless you are an advanced user.

  • output_files: If 'output_files' is set in the catalog, the ROIs will not be returned in R. They will be written immediately in files. See LAScatalog-class and examples. The allowed templates in lasclip are {XLEFT}, {XRIGHT}, {YBOTTOM}, {YTOP}, {ID}, {XCENTER}, {YCENTER} or any names from the table of attributes of a spatial object given as input such as {PLOT_ID} or {YEAR}, for example, if these attributes exist. If empty everything is returned into R.

  • laz_compression: write las or laz files

  • drivers: Leave this 'as-is' unless you are an advanced user.

  • select: The function will write files equivalent to the originals. This option is not respected.

  • filter: Read only the points of interest.


LASfile <- system.file("extdata", "Megaplot.laz", package="lidR")

# Load the file and clip the region of interest
las = readLAS(LASfile)
subset1 = lasclipRectangle(las, 684850, 5017850, 684900, 5017900)

# Do not load the file(s), extract only the region of interest from a bigger dataset
ctg = readLAScatalog(LASfile)
subset2 = lasclipRectangle(ctg, 684850, 5017850, 684900, 5017900)

# Extract all the polygons from a shapefile
shapefile_dir <- system.file("extdata", package = "lidR")
lakes = shapefile(paste0(shapefile_dir, "/lake_polygons_UTM17.shp"))
subset3 = lasclip(ctg, lakes)

# Extract the polygons, write them in files named after the lake names, do not load anything in R
opt_output_files(ctg) <- paste0(tempfile(), "_{LAKENAME_1}")
new_ctg = lasclip(ctg, lakes)

# }
# }