Skip to content

Converting to COPC

Jangmyun edited this page Aug 1, 2026 · 1 revision

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.laz file is still a valid point cloud that any LAZ reader can open — you're not locked in.

PDAL (recommended)

PDAL is the most robust converter and preserves all attributes.

pdal translate input.las output.copc.laz --writers.copc.forward=all
  • --writers.copc.forward=all carries every VLR forward, including the WKT CRS — essential for copcesium's auto-detection. Don't drop it.
  • Works on .las or .laz input.

Install via conda (conda install -c conda-forge pdal), the official Docker image (pdaldocker/pdal), or your system package manager.

Reproject during conversion (optional)

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=all

Usually unnecessary — copcesium reprojects on the fly. Only do this if you want to normalize a large archive to one CRS.

untwine

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 (GUI, no command line)

QGIS 3.26+ writes COPC when it indexes a point cloud:

  1. Add the LAS/LAZ layer to a project.
  2. Right-click the layer → Export → Save As…
  3. Choose the COPC format and a .copc.laz output path.

Good for one-off conversions without installing a toolchain.

Verifying the output

Confirm the file is genuinely COPC and carries a CRS before hosting it:

pdal info output.copc.laz --metadata

Look for:

  • copc: true (or a copc metadata 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 pass proj/projDef to copcesium manually (see Coordinate Systems).

You can also open it in Eptium or QGIS to eyeball it before wiring up Cesium.

Hosting

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.

Sample data to test with

  • 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.

Clone this wiki locally