Back to Projects

LiDAR Building HeightsCase Study

Automated extraction of building heights from classified airborne LiDAR — 27,338 buildings measured across 25 km² of Central London in under two minutes.

Geospatial / LiDAR
2026
Central London, UK (EPSG:27700)
43 M LiDAR returns

Project Overview

A client provided a 1.6 GB airborne LiDAR tile and asked whether it was the right way to measure the height of 400 buildings, after attempting to convert the point cloud to a mesh and inspect it manually in a 3D modelling tool.

That manual approach does not scale. By treating the .laz file as the primary input and using its ASPRS classification, the same job becomes a one-pass repeatable pipeline that produces a spreadsheet, a GeoPackage and an HTML report from a single command.

Outcome: Heights computed for 27,338 buildings (≈ 70× the original target of 400) in 111 seconds end-to-end, with a median building height of 12.9 m and a tallest measurement of 278.4 m.

Key Metrics

25 km²
Tile area covered
43.0 M
LiDAR returns processed
27,338
Buildings measured
12.9 m
Median height
278 m
Tallest building
~111 s
End-to-end runtime

Methodology

  1. Read the classified .laz file with laspy + lazrs and split returns into ground (class 2) and building (class 6).
  2. Build a 1-metre Digital Terrain Model from class-2 returns using per-cell minimum Z, then fill gaps via nearest-neighbour distance transform.
  3. Fetch building footprints from OpenStreetMap inside the tile bounding box and reproject them to the survey CRS (EPSG:27700, British National Grid).
  4. For every footprint, locate the relevant class-6 returns through 50-metre spatial bins and a vectorised shapely.contains_xy point-in-polygon test.
  5. Compute building height as p95(roof Z) − DTM(centroid). The 95th percentile suppresses spurious high returns from antennas, edge effects and low-density bins.
  6. Reject footprints with fewer than five returns or non-positive height; export results as XLSX, GeoPackage and a self-contained HTML report.

Footprints Coloured by Height

Building footprints coloured by height across the 5 × 5 km Central London tile
5 × 5 km LiDAR tile, EPSG:27700. Footprints from OpenStreetMap, hillshade derived from the LiDAR-built Digital Terrain Model.

Height Distribution

Histogram of measured building heights
Distribution of measured heights across 27,338 buildings.

DTM Cross-section

DTM cross-section through the centre of the tile
Ground elevation profile derived from class-2 LiDAR returns.

Top 20 Tallest Buildings

Building ID Easting (m) Northing (m) Footprint area (m²) LiDAR points Height (m)
BLD-22199533,116.1181,241.43,4472,624278.4
BLD-16318533,167.7181,181.32,650154222.9
BLD-6996533,255.6181,447.71,7991,638198.6
BLD-11823533,052.0181,328.01,9101,322185.0
BLD-0205533,302.1181,252.22,52333180.3
BLD-22149533,245.0181,376.14,9131,943176.8
BLD-22025533,220.0181,385.62,8731,441176.6
BLD-22102533,386.4182,103.4725363164.2
BLD-18555531,619.1180,472.81,313224163.4
BLD-11855533,049.0181,306.619686154.5
BLD-19691533,322.9182,015.61,557987153.5
BLD-20749532,157.6182,855.81,041222150.5
BLD-0407531,456.6180,445.2810915150.0
BLD-16484533,074.7180,848.4666139147.5
BLD-13009533,088.7180,888.03,72092145.6
BLD-9786533,224.1181,066.62,1761,303141.0
BLD-20452532,639.0181,778.06,2978,825139.2
BLD-21211533,300.6181,480.31,1841,043135.6
BLD-22155532,710.8182,680.492591135.3
BLD-4517532,275.1181,866.4613895129.1

Heights range from 1.04 m to 278.37 m; the 95th percentile sits at 28.3 m, while the median is 12.9 m. Ground elevations across the tile span -23.5 m to 49.4 m above the British vertical datum.

Technologies

Python 3.12 laspy + lazrs NumPy / SciPy Rasterio GeoPandas Shapely 2 (vectorised) OSMnx / Overpass Matplotlib PROJ / EPSG:27700

Deliverables

  • Spreadsheet with one row per building (ID, OSM reference, centroid coordinates, footprint area, LiDAR point count, ground elevation, roof elevation, height).
  • GeoPackage with attributed building footprints, ready for QGIS or ArcGIS.
  • 1-metre Digital Terrain Model as GeoTIFF in the survey CRS.
  • Self-contained HTML report with map, histogram, top-20 ranking and full table.
  • Reproducible Python pipeline; the same script reruns from raw .laz in roughly two minutes.
Back to Projects