For LiDAR analysts, Python GIS devs, surveying teams

Python LiDAR & Point Cloud Workflows

Design and chain PDAL pipelines, classify ground returns, generate DTMs and DSMs, and automate batch processing — backed by reproducible code patterns, standards-compliant data handling, and production-grade QC.

Five focused tracks: PDAL Pipelines for execution architecture, Point Cloud Standards for binary, classification, accuracy and CRS fundamentals, Ground & Terrain Models for SMRF, PMF and CSF filtering and DTM/DSM rasters, Batch & Cloud Automation for containerised, S3-backed, orchestrated pipelines, and Classification & Features for extracting buildings, trees, power lines and water.

Newest here: classification and feature extraction for buildings, power lines and individual trees, vertical accuracy assessment against survey checkpoints, cloth simulation ground filtering, parameterised pipeline templates, and Dask distributed tile processing.

Start here

The most-useful, code-first guides — copy-paste ready for production LiDAR pipelines.

Chaining PDAL Stages for Data Cleaning

Chain readers, filters, and writers in Python for noise removal, outlier rejection, and classification refinement — with a complete runnable example.

stage chainingdata cleaning

Reprojecting Point Clouds from UTM to WGS84

Reproject LAS/LAZ from UTM to WGS84 with PDAL filters.reprojection, datum handling, header sync, and round-trip validation.

reprojectionCRS

How to Parse LAS Headers with Python

Extract LAS/LAZ header fields with laspy and Python's struct module — version detection, VLR inspection, coordinate scale/offset, and validation.

LAS headerslaspy

Optimizing PDAL for Multi-Core Processing

Tune OMP_NUM_THREADS and chunk_size, then orchestrate parallel tile pipelines with Python's ProcessPoolExecutor for maximum throughput.

parallelperformance

Understanding ASPRS Classification Codes

Complete reference for LAS classification codes 0–255: schema versions, laspy validation, vectorized remapping, and QA automation.

ASPRSclassification

Applying Statistical Outlier Filters in PDAL

Use filters.outlier (statistical and radius modes) to remove noise points from aerial and terrestrial LiDAR scans, with Python integration and parameter tuning.

outlier removalfilters

Generating a DTM GeoTIFF with writers.gdal

Rasterize classified ground returns into a bare-earth DTM GeoTIFF with PDAL writers.gdal — resolution, interpolation window, and NoData handling explained.

DTMwriters.gdal

Running PDAL Pipelines in Docker

Pin a reproducible PDAL toolchain in a container, mount tiles, and run pipeline JSON with the official image — the foundation for AWS Batch and Airflow fan-out.

Dockerreproducible

Running a PDAL Pipeline in Streaming Mode

Bound peak memory by the chunk size instead of the file size, then prove it — the change that lets a 6 GB tile run on a 4 GB worker.

streamingmemory

Computing Height Above Ground with filters.hag_nn

Per-point canopy heights from a classified cloud, the count and max_distance settings that matter, and the ground-at-zero check that catches a bad classification.

canopy heighthag_nn

Converting LAZ Tiles to COPC with PDAL

Merge tiles into indexed cloud-native objects a browser can read over range requests — and the four checks to pass before deleting the source.

COPCcloud-native

Buffered Tiling to Avoid Edge Artefacts

Read the tile plus its neighbours, process the buffered extent, write only the nominal one — the pattern behind every seamless tiled LiDAR product.

tilingseams

Extracting Building Footprints from LiDAR

Turn class-6 roof points into clean building polygons: rasterise a mask, polygonise, close gaps, regularise the outline and attach heights.

buildingsfootprints

Segmenting Trees with a Watershed on a CHM

Find treetops with a variable window, grow crowns with a marker-controlled watershed on a canopy height model, and polygonise them with attributes.

treeswatershed

Computing RMSEz Against Survey Checkpoints

Fix the sign convention, compute RMSEz, mean error and standard deviation, bootstrap a confidence interval and report accuracy per land-cover group.

accuracyRMSEz

Processing LiDAR Tiles with Dask Distributed

Run one PDAL image as scheduler and workers, submit a task per tile from the client, and collect small per-tile results instead of point arrays.

Daskdistributed

What you'll find here

Five tracks of practical, code-first material aimed at production teams working with airborne, terrestrial, and mobile LiDAR.

PDAL Pipelines

PDAL pipeline architecture, stage chaining, memory and parallel execution, attribute mapping, filtering, reprojection, and validation.

Attribute Mapping in PDAL:... Parallel Execution in PDAL:... Memory Management in Python LiDAR... PDAL Stage Chaining: Build... Pipeline Filtering Logic in PDAL:... PDAL Pipeline Validation: Catch... PDAL Pipeline Templating and... Programmable Python Filters in... Spatial Reprojection in PDAL:... Streaming Mode Execution in PDAL

Point Cloud Standards

LAS/LAZ structure, ASPRS classification, coordinate reference systems, point density metrics, and metadata/header integrity.

COPC and Cloud-Native Point Cloud... Coordinate Reference Systems in... ASPRS Classification Codes: Python... LAS/LAZ File Structure: Binary... laspy and NumPy Workflows for LAS... Metadata & Header Sync in Python... Vertical Accuracy Assessment for... Point Density Metrics in Python...

Ground & Terrain Models

SMRF and PMF ground classification, DTM and DSM raster generation with writers.gdal, interpolation choices, void filling, and hillshade derivation.

Canopy Height Models with... CSF Cloth Simulation Ground... Contour Generation from LiDAR DTMs DTM Raster Generation with PDAL Hillshade, Slope and Aspect from... DSM Generation from LiDAR with... PMF Ground Classification in PDAL SMRF Ground Classification in PDAL

Batch & Cloud Automation

Containerised PDAL, AWS Batch tile fan-out, streaming LAZ and COG I/O against S3, and Airflow DAG orchestration for production point cloud pipelines.

Airflow DAG Orchestration for PDAL... AWS Batch Processing for PDAL... Dask Distributed Processing for... S3 Cloud Storage I/O with PDAL PDAL Docker Containers for... Tile Indexing, Buffering and...

Classification & Features

Buildings, power lines, individual trees, water and bridges: segmenting point clouds and training classifiers to extract features from LiDAR.

Building Extraction from LiDAR... Machine Learning Point... Individual Tree Segmentation from... Power Line Detection in LiDAR... Water and Bridge Classification in... Point Cloud Segmentation with PDAL

PDAL Pipelines

PDAL pipeline architecture, stage chaining, memory and parallel execution, attribute mapping, filtering, reprojection, and validation.

Attribute Mapping in PDAL: Translate, Compute & Persist Point Cloud Dimensions

--- title: "Attribute Mapping in PDAL: Translate, Compute & Persist Point Cloud Dimensions" description: "How to translate, derive, and persist point...

Assigning Classification with... Copying Dimensions with filters.ferry Mapping Custom Attributes in PDAL... Normalizing Intensity Across Flightlines

Parallel Execution in PDAL: Multi-Core Point Cloud Processing with Python

--- title: "Parallel Execution in PDAL: Multi-Core Point Cloud Processing with Python" description: "Distribute PDAL-driven LiDAR workflows across all...

Load Balancing Uneven LiDAR Tiles Optimizing PDAL for Multi-Core... Parallel Tile Processing with... Threads vs Processes for PDAL Workloads

Memory Management in Python LiDAR & Point Cloud Processing Workflows

--- title: "Memory Management in Python LiDAR & Point Cloud Processing Workflows" description: "Control RAM usage in Python PDAL pipelines:...

Diagnosing PDAL Out-of-Memory Failures Estimating PDAL Memory from Point Layout LAZ vs Uncompressed LAS for Iterative... Measuring Peak Memory of a PDAL Pipeline

PDAL Stage Chaining: Build Multi-Step Point Cloud Pipelines in Python

--- title: "PDAL Stage Chaining: Build Multi-Step Point Cloud Pipelines in Python" description: "How to chain PDAL readers, filters, and writers into…

Branching a PDAL Pipeline with Tags Reordering PDAL Stages for Speed Chaining PDAL Stages for Data Cleaning Merging Multiple Readers in One Pipeline

Pipeline Filtering Logic in PDAL: Attribute, Spatial, and Statistical Filters

--- title: "Pipeline Filtering Logic in PDAL: Attribute, Spatial, and Statistical Filters" description: "Master PDAL pipeline filtering logic with...

Applying Statistical Outlier Filters in... Removing Noise Classes Before Processing Cropping a Point Cloud to a Polygon... Filtering Points with filters.expression

PDAL Pipeline Validation: Catch Errors Before Processing Point Clouds

--- title: "PDAL Pipeline Validation: Catch Errors Before Processing Point Clouds" description: "A five-phase Python validation harness for PDAL...

Checking Pipeline Output with pdal info... Schema-Validating Pipeline JSON Before... Validating PDAL Pipelines in CI Testing PDAL Pipelines with pytest

PDAL Pipeline Templating and Parameterization

--- title: "PDAL Pipeline Templating and Parameterization" description: "Stop copying pipeline JSON per project: parameterize PDAL pipelines with...

Building Pipelines with the Python Stage... Parameterizing Pipelines with Jinja... Overriding Stage Options from the...

Programmable Python Filters in PDAL

--- title: "Programmable Python Filters in PDAL" description: "How filters.python hands a PDAL point buffer to a NumPy function, the rules for adding…

Debugging and Profiling filters.python Passing NumPy Arrays into a PDAL... Writing a filters.python Stage with... Adding a New Dimension from a Python...

Spatial Reprojection in PDAL: Coordinate Transformations for LiDAR Pipelines

--- title: "Spatial Reprojection in PDAL: Coordinate Transformations for LiDAR Pipelines" description: "How to reproject LAS/LAZ point clouds between…

Handling Vertical Datum Transforms in... Reprojecting Point Clouds from UTM to... Inspecting PROJ Transformations Before... Reprojecting State Plane Feet to Metres

Streaming Mode Execution in PDAL

--- title: "Streaming Mode Execution in PDAL" description: "How PDAL's streaming execution model moves points through a pipeline in fixed-size chunks,...

Iterating PDAL Arrays in Chunks from... Running a PDAL Pipeline in Streaming... Which PDAL Filters Break Streaming Mode Splitting a Blocking Pipeline into Two...

Point Cloud Standards

LAS/LAZ structure, ASPRS classification, coordinate reference systems, point density metrics, and metadata/header integrity.

COPC and Cloud-Native Point Cloud Formats

--- title: "COPC and Cloud-Native Point Cloud Formats" description: "What Cloud Optimized Point Cloud adds to a LAZ file, how a bounded query becomes...

Converting LAZ Tiles to COPC with PDAL COPC vs EPT for Web Delivery Querying a COPC File by Bounds and... Reading COPC in Python with laspy

Coordinate Reference Systems in Python LiDAR Workflows: Validation, Transformation & Header Synchronization

--- title: "Coordinate Reference Systems in Python LiDAR Workflows: Validation, Transformation & Header Synchronization" description:...

Fixing CRS Mismatches in Point Clouds... Setting a Vertical CRS on a Point Cloud Reading the CRS from LAS WKT and GeoTIFF... Choosing a Projected CRS for a LiDAR...

ASPRS Classification Codes: Python Workflows for Point Cloud Processing

--- title: "ASPRS Classification Codes: Python Workflows for Point Cloud Processing" description: "Complete guide to reading, validating,...

Flagging Overlap and Withheld Points Counting Points per Class with PDAL Remapping Vendor Classification Codes to... Understanding ASPRS Classification Codes...

LAS/LAZ File Structure: Binary Layout, Python Parsing & Production Ingestion

--- title: "LAS/LAZ File Structure: Binary Layout, Python Parsing & Production Ingestion" description: "A practitioner's guide to the LAS/LAZ binary…

How to Parse LAS Headers with Python Reading and Writing LAS VLRs with PDAL Understanding LAS Point Data Record... Converting LAS to LAZ with PDAL Upgrading LAS 1.2 Files to LAS 1.4

laspy and NumPy Workflows for LAS Data

--- title: "laspy and NumPy Workflows for LAS Data" description: "Work with LAS and LAZ directly in Python using laspy 2.x and NumPy: scaled...

Chunked Reading of Large LAS Files with... laspy vs PDAL: When to Use Which Writing a LAS File from NumPy Arrays Reading LAS into NumPy with laspy

Metadata & Header Sync in Python LiDAR Workflows

--- title: "Metadata & Header Sync in Python LiDAR Workflows" description: "How to validate, correct, and reconcile LAS/LAZ header fields, VLRs, and...

Converting GPS Week Time to Adjusted... Syncing Metadata Between LAS and... Repairing Stale LAS Header Bounds and...

Vertical Accuracy Assessment for LiDAR

--- title: "Vertical Accuracy Assessment for LiDAR" description: "Measure and report LiDAR vertical accuracy in Python: surveyed checkpoints, TIN…

Interpolating LiDAR Elevations at... Computing RMSEz Against Survey... Reporting NVA and VVA Accuracy Measuring Swath-to-Swath Relative...

Point Density Metrics in Python LiDAR Workflows

--- title: "Point Density Metrics in Python LiDAR Workflows" description: "Compute, validate, and normalize point density metrics from LAS/LAZ files...

Building a Point Density Raster with... Checking Pulse Spacing Against USGS... Measuring Ground Point Density Under... Calculating Point Density for Drone...

Ground & Terrain Models

SMRF and PMF ground classification, DTM and DSM raster generation with writers.gdal, interpolation choices, void filling, and hillshade derivation.

Canopy Height Models with filters.hag_nn

--- title: "Canopy Height Models with filters.hagnn" description: "Producing a canopy height model in the point domain: classify ground, compute...

Computing Canopy Cover from LiDAR Building a Pit-Free Canopy Height Model Computing Height Above Ground with... Extracting Individual Tree Heights from... Rasterizing a Canopy Height Model from...

CSF Cloth Simulation Ground Filtering

--- title: "CSF Cloth Simulation Ground Filtering" description: "Classify ground with PDAL filters.csf: how the cloth simulation filter drapes an...

CSF vs SMRF for Forested Ground Classifying Ground with filters.csf Tuning CSF Cloth Resolution and...

Contour Generation from LiDAR DTMs

--- title: "Contour Generation from LiDAR DTMs" description: "Produce clean contour lines from a LiDAR terrain model in Python: choosing the interval...

Exporting Contours to GeoPackage Smoothing a LiDAR DTM Before Contouring Generating Contours from a DTM with...

DTM Raster Generation with PDAL

--- title: "DTM Raster Generation with PDAL" description: "Turning classified ground returns into a bare-earth Digital Terrain Model GeoTIFF with...

Choosing a DTM Resolution from Point... Filling NoData Voids in DTM Rasters IDW vs Mean Interpolation for DTM Gaps Generating a DTM GeoTIFF with... Building a Seamless DTM Mosaic from...

Hillshade, Slope and Aspect from LiDAR DTMs

--- title: "Hillshade, Slope and Aspect from LiDAR DTMs" description: "Deriving hillshade, slope, and aspect rasters from a LiDAR-derived DTM using...

Computing Terrain Roughness and TPI Exporting Hillshade from a LiDAR DTM Multidirectional Hillshade for LiDAR... Generating Slope and Aspect Rasters with...

DSM Generation from LiDAR with PDAL

--- title: "DSM Generation from LiDAR with PDAL" description: "Building a Digital Surface Model from LiDAR first returns with PDAL writers.gdal…

Removing Pits and Spikes from a DSM Building a DSM from First Returns Building a Normalized DSM DTM vs DSM: Which Surface Model to...

PMF Ground Classification in PDAL

--- title: "PMF Ground Classification in PDAL" description: "Using the Progressive Morphological Filter (filters.pmf) in PDAL to classify ground...

Classifying Ground with the Progressive... Tuning PMF for Flat Agricultural Terrain Tuning PMF Window and Slope Parameters

SMRF Ground Classification in PDAL

--- title: "SMRF Ground Classification in PDAL" description: "How the Simple Morphological Filter (filters.smrf) classifies ground returns in PDAL —...

Benchmarking SMRF Against Reference... SMRF vs PMF for Dense Urban LiDAR Tuning SMRF for Steep Terrain Tuning SMRF for Forested Terrain Running SMRF on Photogrammetric Point...

Batch & Cloud Automation

Containerised PDAL, AWS Batch tile fan-out, streaming LAZ and COG I/O against S3, and Airflow DAG orchestration for production point cloud pipelines.

Airflow DAG Orchestration for PDAL Workflows

--- title: "Airflow DAG Orchestration for PDAL Workflows" description: "Orchestrating multi-stage LiDAR processing with Apache Airflow — modelling...

Orchestrating PDAL Workflows with... Retrying Failed Tiles in Airflow Dynamic Task Mapping for LiDAR Tiles

AWS Batch Processing for PDAL Point Clouds

--- title: "AWS Batch Processing for PDAL Point Clouds" description: "Running thousands of PDAL tile jobs on AWS Batch — job definitions, array jobs...

Scaling PDAL Tile Processing with AWS... Array Jobs for LiDAR Tiles in AWS Batch Handling Spot Interruptions in PDAL... Estimating Cloud Cost per LiDAR Tile

Dask Distributed Processing for LiDAR

--- title: "Dask Distributed Processing for LiDAR" description: "Scale PDAL tile processing from one machine to many with Dask distributed: one task...

Dask vs ProcessPoolExecutor for PDAL Tracking Tile Progress and Failures in... Processing LiDAR Tiles with Dask...

S3 Cloud Storage I/O with PDAL

--- title: "S3 Cloud Storage I/O with PDAL" description: "Reading and writing LiDAR directly against Amazon S3 in PDAL — the GDAL /vsis3/ and...

Configuring GDAL /vsis3/ for Fast Point... Streaming LAZ from S3 with PDAL Reading USGS 3DEP LiDAR from Public... Writing Cloud-Optimized GeoTIFFs to S3

PDAL Docker Containers for Reproducible Pipelines

--- title: "PDAL Docker Containers for Reproducible Pipelines" description: "Packaging PDAL, GDAL, PROJ, and the Python bindings into a pinned Docker...

Building a Slim PDAL Docker Image Running PDAL Pipelines in Docker Pinning PDAL Versions with conda-lock

Tile Indexing, Buffering and Merging

--- title: "Tile Indexing, Buffering and Merging" description: "Building a queryable tile index from LiDAR headers, using it to find neighbours for...

Buffered Tiling to Avoid Edge Artefacts Building a Tile Index with pdal tindex Making Tile Outputs Idempotent Retiling Flightline Files into a Grid Merging Processed Tiles into One LAZ

Classification & Features

Buildings, power lines, individual trees, water and bridges: segmenting point clouds and training classifiers to extract features from LiDAR.

Building Extraction from LiDAR Point Clouds

--- title: "Building Extraction from LiDAR Point Clouds" description: "Classify roof points to ASPRS class 6 and turn them into footprint polygons...

Detecting Planar Roofs with Covariance... Estimating Roof Pitch and Aspect from... Extracting Building Footprints from...

Machine Learning Point Classification for LiDAR

--- title: "Machine Learning Point Classification for LiDAR" description: "Train a per-point classifier on PDAL-computed geometric features: building...

Computing Geometric Features for... Evaluating Point Classification with a... Training a Random Forest Point...

Individual Tree Segmentation from LiDAR

--- title: "Individual Tree Segmentation from LiDAR" description: "Split a forest canopy into individual trees: local-maximum tree tops,...

Segmenting Trees Directly from Points Computing Crown Metrics per Tree Segmenting Trees with a Watershed on a...

Power Line Detection in LiDAR Point Clouds

--- title: "Power Line Detection in LiDAR Point Clouds" description: "Find conductor points with linearity and height, group them into spans, classify...

Detecting Power Line Conductors with... Measuring Vegetation Clearance to Power... Fitting Catenary Curves to Conductor...

Water and Bridge Classification in LiDAR

--- title: "Water and Bridge Classification in LiDAR" description: "Classify water to ASPRS class 9 and bridge decks to class 17, then hydro-flatten...

Classifying Bridge Decks Classifying Water from Intensity and... Hydro-Flattening Water Bodies in a DTM

Point Cloud Segmentation with PDAL

--- title: "Point Cloud Segmentation with PDAL" description: "Group points into objects with filters.cluster and filters.dbscan: how Euclidean and…

Extracting Objects from Segment Labels DBSCAN Segmentation with filters.dbscan Euclidean Segmentation with...