PyForestScan: A Python Library for Large-Scale LiDAR Forest-Structure Metrics
11-20, 11:00–11:25 (Pacific/Auckland), WA220

We introduce PyForestScan, a Python library that streams LiDAR data and outputs GeoTIFF canopy height, cover, foliage-height diversity, plant-area-index and density layers. We demonstrate it by mapping forest metrics on Hawai‘i Island’s 1 M-ha, 1.8 B-point survey into 1–30 m grids.


Airborne LiDAR now blankets landscapes with up to sub-centimeter-scale detail. Yet, researchers and land managers have lacked a fully open, Python-native workflow to transform billions of points into actionable information on forest structure. Existing solutions are either proprietary or anchored in R, leaving the rapidly growing Python geospatial stack without a scalable counterpart. PyForestScan bridges this gap. Built on PDAL’s streaming I/O, the library reads traditional LAS/LAZ alongside hierarchical octree formats such as COPC and EPT, tiles point clouds automatically, and exports GeoTIFF layers of canopy height, canopy cover, foliage-height diversity (FHD), plant-area density (PAD), plant-area index (PAI), and digital-terrain models in a single command. We demonstrate these capabilities by generating island-wide canopy height, canopy cover, FHD, and PAI mosaics for Hawai‘i Island - an area with over 1 million hectares and over 1.8 billion points, in under 24 hours of wall time on commodity hardware, producing multi-resolution (1 m–30 m) grids ready for carbon accounting, biodiversity assessment, and geoAI training. The talk will outline PyForestScan's architecture, highlight performance benchmarks, and invite contributions via its open governance model, Docker images, and CI-tested notebooks. By placing robust LiDAR analytics squarely within the free and open Python ecosystem, PyForestScan equips the FOSS4G community to move seamlessly from raw point clouds to island- and continent-scale forest insights.

Software engineer and postdoctoral researcher at the University of Hawaii.

This speaker also appears in: