Compressing LiDAR with LASzip for Deep Archive
Point clouds are the largest thing most spatial archives store, so the compression decision on LiDAR moves the storage line more than any other single choice. This walkthrough is for the archivist deciding what form a survey should take before it is tiered into an archive class, and it covers what LASzip actually achieves on real point data, what the remaining levers are once it has been applied, and which apparent optimisations are false economies for a preservation copy.
What LASzip Achieves, and Where the Rest Goes
LASzip is lossless and format-aware: it compresses each point attribute with a model suited to that attribute rather than treating the record as opaque bytes. The ratio it achieves therefore depends heavily on which attributes a file carries.
Step-by-Step Procedure
Step 1 — Measure what the delivery actually contains
pdal info --summary datasets/lidar/2023/region_north/tile_0417.laz \
| jq '{format: .summary.dataformat_id,
points: .summary.num_points,
dims: (.summary.dimensions | split(", "))}'
A record format above 3 carries GPS time; formats 2, 3, 7 and 8 carry colour. Knowing which attributes are present tells you which ratio to expect and which are candidates for a policy conversation.
Step 2 — Compress losslessly, and verify it round-trips
# Compress an uncompressed LAS delivery
pdal translate datasets/lidar/2023/raw/tile_0417.las tile_0417.laz \
--writers.las.compression=laszip \
--writers.las.forward=all
# Prove the round trip is exact: decompress and compare point records
pdal translate tile_0417.laz roundtrip.las --writers.las.forward=all
cmp <(pdal info --all datasets/lidar/2023/raw/tile_0417.las | jq -S .stats) \
<(pdal info --all roundtrip.las | jq -S .stats) && echo "round trip exact"
Step 3 — Decide the waveform and intermediate-product policy explicitly
The largest saving available is not compression but scope. Waveform records, raw swath files and intermediate classification passes can each dwarf the delivered point cloud, and each has a different case for retention.
Step 4 — Tier what remains
Once scope and compression are settled, the tiering decision is ordinary: the classified cloud follows the archive’s access curve, the raw swaths go deep, and the derived rasters follow whatever their consumers need.
aws s3api put-object --bucket spatial-archive \
--key archive/lidar/2023/region_north.copc.laz \
--body region_north.copc.laz \
--storage-class STANDARD_IA \
--checksum-algorithm SHA256 \
--tagging "copy_class=authoritative&retention_class=statutory-25y&asset=lidar"
Validation & Verification
Confirm the compression was lossless and the header survived.
pdal info --metadata region_north.copc.laz \
| jq '{count, compressed: .metadata.compressed, dataformat_id: .metadata.dataformat_id,
scale_x: .metadata.scale_x, offset_x: .metadata.offset_x}'
Expected output shows compressed: true, the point count matching the source exactly, and the record format and frame unchanged. A record format that differs from the source means attributes were dropped, which no compression check would report.
Troubleshooting
| Symptom | Root cause | Fix |
|---|---|---|
| Ratio far below expectation | Record carries colour or waveform | Expected — check the record format before blaming the codec |
| Output larger than input | Input was already LAZ | Do not recompress; LASzip is not idempotent-improving |
| Round trip differs in statistics | Record format downgraded on write | Pin dataformat_id and use forward=all |
| GPS time lost | Written as a format without a time field | Use record format 6 or 7 for anything carrying time |
| Deep Archive bill higher than modelled | Many small tiles, per-object overhead | Consolidate before tiering; see the COPC grouping guidance |
Operational Execution Checklist
Deciding What a Survey Is For Before Deciding What to Keep
Retention decisions on point-cloud deliverables are usually framed as a storage question and are really a question about future use. Three uses account for almost everything anyone does with an archived LiDAR survey years later, and each depends on a different part of the deliverable — so the retention policy follows directly once the uses are named.
Write the answer into the collection’s profile rather than deciding per delivery, so a contractor shipping four terabytes of waveform data next year meets an existing policy rather than a fresh debate. Where a use is genuinely uncertain, keeping the component for a defined review period and revisiting is better than either extreme.
Frequently Asked Questions
Is lossy point-cloud compression ever appropriate?
For delivery copies serving visualisation, yes; for the archive of record, no. Lossy schemes discard points or reduce coordinate precision, and a preservation copy whose points have been thinned cannot support the re-analysis that is the main reason to keep LiDAR for decades. Keep the lossless copy and generate lossy derivatives as needed.
Does converting to COPC change the compression?
Not materially. COPC uses the same LASzip chunking with the octree layered over it, so the compressed size is within a few percent of an ordinary LAZ file of the same points. The overhead buys the index, which is why the conversion is close to free in storage terms.
Should intensity be kept?
Yes. It is small relative to coordinates, it compresses well, and it is used for classification refinement and for change detection between surveys. It is one of the few attributes where the storage argument for discarding it does not exist.
Does LASzip compression vary between implementations?
The format is fixed, so any compliant reader decodes any compliant writer’s output — but the compressed size can differ by a few percent between implementations and versions. That is worth knowing when comparing an archive’s own output against a delivery: a difference of two or three percent is a tooling difference, not a data difference.
Should point clouds be re-compressed when a better version appears?
No. The gain is a few percent, the cost is a full read and rewrite of the largest thing in the archive, and the result is a set of objects whose checksums no longer match any existing record. Compression improvements belong in the pipeline for new data, not in a campaign against the existing archive.
How does compression interact with the octree in COPC?
COPC compresses each octree node as an independent LAZ chunk, which is what makes node-level range reads possible. That independence costs a little ratio compared with one long stream — typically two to three percent — and buys the ability to read a spatial subset without decompressing the file. For an archive that is an easy trade.
How does compression interact with the fixity programme?
Not at all, directly — the checksum is computed over the compressed bytes as stored, so the codec is invisible to the audit. What does matter is that recompressing an object changes its checksum, which is one more reason not to run compression campaigns against an existing archive. An object whose checksum changed for a good reason still requires a provenance record explaining it, and doing that across a whole holding is more work than the few percent of size it recovers.
Should waveform data be compressed differently from the point cloud?
It is stored separately by the format — in an auxiliary file or an extended variable-length record — and it compresses far less well, because it is closer to raw sensor output than to structured points. Where waveform is retained, treating it as its own object with its own tiering rule is usually better than binding it to the point cloud it accompanies, since almost every access pattern wants one and not the other.
What is the practical ceiling on a single compressed point-cloud object?
Around twenty gigabytes, above which restores become coarse enough that any query pays for far more data than it needs. The format imposes no such limit — point counts are 64-bit — so this is an operational ceiling rather than a technical one, and it is the same reasoning that caps object size for imagery and vector partitions.
Does the compressed size vary with point ordering?
Slightly, and in COPC’s favour: points sorted into octree order are spatially coherent, so their coordinate deltas are smaller and compress marginally better than the delivered tile order. The effect is a percent or two and is a side benefit of the conversion rather than a reason for it.
Related
- Point Cloud & COPC Conversion for Spatial Archives — the parent topic covering frame, octree and consolidation decisions.
- Converting LAS to COPC for Cold Archives — the conversion this compression step precedes.
- Evaluating Glacier Deep Archive for LiDAR Point Clouds — where the compressed objects should live and what a restore costs.
- ZSTD vs LZ4 vs Snappy Compression Trade-offs for Spatial Files — why a general-purpose codec is not layered on top of LASzip.
Up one level: Point Cloud & COPC Conversion.