-
Notifications
You must be signed in to change notification settings - Fork 1
Converting to COPC
copcesium streams .copc.laz files — LAZ 1.4 files whose chunks are arranged as an octree and indexed by a COPC hierarchy VLR. Plain LAS/LAZ won't stream (no octree index); you convert once, then host the single output file on any static server. This page covers the three common tools.
COPC is a superset of LAZ 1.4, so a
.copc.lazfile is still a valid point cloud that any LAZ reader can open — you're not locked in.
PDAL is the most robust converter and preserves all attributes.
pdal translate input.las output.copc.laz --writers.copc.forward=all-
--writers.copc.forward=allcarries every VLR forward, including the WKT CRS — essential for copcesium's auto-detection. Don't drop it. - Works on
.lasor.lazinput.
Install via conda (conda install -c conda-forge pdal), the official Docker image (pdaldocker/pdal), or your system package manager.
If you'd rather ship data already in a Cesium-friendly CRS, reproject in the same pass:
pdal translate input.las output.copc.laz \
--filters.reprojection.out_srs=EPSG:4978 \
--writers.copc.forward=allUsually unnecessary — copcesium reprojects on the fly. Only do this if you want to normalize a large archive to one CRS.
untwine is purpose-built for COPC/EPT indexing and is fast on large files:
untwine --files=input.laz --output_dir=out --single_file--single_file produces one .copc.laz (rather than an EPT directory tree). Point copcesium at that file.
QGIS 3.26+ writes COPC when it indexes a point cloud:
- Add the LAS/LAZ layer to a project.
- Right-click the layer → Export → Save As…
- Choose the COPC format and a
.copc.lazoutput path.
Good for one-off conversions without installing a toolchain.
Confirm the file is genuinely COPC and carries a CRS before hosting it:
pdal info output.copc.laz --metadataLook for:
-
copc: true(or acopcmetadata block) — confirms the octree index exists. - A
spatialreference/ WKT entry — confirms the CRS survived. If it's empty, re-run with--writers.copc.forward=all, or plan to passproj/projDefto copcesium manually (see Coordinate Systems).
You can also open it in Eptium or QGIS to eyeball it before wiring up Cesium.
Once converted, drop the single file on any static host (S3, a CDN, nginx, GitHub Pages-style hosting). Two server requirements — covered in Troubleshooting:
-
HTTP Range Requests (
206 Partial Content) must be supported. - CORS headers must permit your app's origin.
No tiling pipeline, no database, no backend — that's the whole point of COPC.
- Autzen Stadium —
https://s3.amazonaws.com/hobu-lidar/autzen-classified.copc.laz - Sofi —
https://s3.amazonaws.com/hobu-lidar/sofi.copc.laz - More at copc.io and the PDAL data repo.