Use Case: Point Cloud Triage with Caliper


Point cloud data is large, expensive to process, and easy to get wrong. A single airborne LiDAR survey can produce hundreds of LAS/LAZ files totaling terabytes. A fleet of terrestrial scanners generates PCD files daily. Before any of this data reaches a processing pipeline — registration, classification, surface reconstruction, change detection — someone needs to verify it’s worth processing.

That triage step is perfect for automation. Caliper gives agents the metadata to do it without downloading or loading the full point cloud.

What goes wrong with point cloud data

Missing or wrong classifications

LAS/LAZ files carry classification codes (ground, building, vegetation, water, noise, etc.). Processing pipelines often depend on these classifications being present and correct. Common problems:

  • File claims to be classified but every point is class 0 (never classified)
  • Expected classes are missing (no ground points in a terrain survey)
  • Classification distribution is abnormal (99% noise class suggests a processing error)

Spatial extent mismatches

A scan should cover a specific area. When it doesn’t:

  • Wrong coordinate reference system (CRS) — the points are in UTM Zone 17 but the metadata says Zone 18, shifting everything by hundreds of kilometers
  • Partial coverage — scanner malfunction or obstructed line of sight produced gaps
  • Duplicate area — the same region was scanned twice in the same flight, doubling data volume without adding information

Point density anomalies

Expected point density varies by sensor and mission:

  • Airborne LiDAR: 2–20 points per square meter
  • Terrestrial scanning: 1,000+ points per square meter
  • Mobile mapping: 100–500 points per square meter

When density is far outside expected range, something went wrong — sensor error, altitude variation, or processing artifact.

Corrupt or truncated files

Files that were interrupted during write, transfer, or compression may load without error but contain fewer points than expected or have garbled header metadata.

How Caliper helps

LAS/LAZ metadata

curl -X POST https://caliper.fit/tools/caliper_auto_stats \
  -H "Content-Type: application/json" \
  -d '{"file_url": "https://surveys.example.com/flight-line-042.laz"}'

Caliper returns:

  • Point count — total number of points in the file
  • Bounding box — min/max coordinates in X, Y, Z
  • Classification distribution — counts per class code
  • Coordinate reference system — EPSG code or WKT when present in the header

An agent compares these against expectations:

IF point_count < expected_minimum → flag "possible truncation or partial scan"
IF classification[0] == total_points → flag "file is unclassified"
IF bbox not within expected_region → flag "spatial extent outside project area"
IF density < expected_density * 0.5 → flag "low point density"

PCD metadata

For PCD files (common with ROS-based systems and terrestrial scanners):

curl -X POST https://caliper.fit/tools/caliper_auto_stats \
  -H "Content-Type: application/json" \
  -d '{"file_url": "https://scans.example.com/station-17.pcd"}'

Caliper returns:

  • Point count
  • Fields — which data fields are present (x, y, z, intensity, rgb, normal_x, etc.)
  • Density — points per unit volume
  • Bounding box

The agent can verify that expected fields exist (e.g., intensity is required for registration), density is within range, and spatial extents are correct.

Workflow: daily scan triage

A surveying company receives 50–200 LAS/LAZ files daily from airborne and mobile mapping operations. Before these enter the processing pipeline:

Files land in cloud storage (S3, Azure Blob, GCS)
    ↓
Agent iterates over new files
    ↓
For each file:
  1. caliper_detect_format (free) — confirm LAS/LAZ/PCD
  2. caliper_auto_stats — extract metadata
  3. Check against project rules:
     - point count within expected range?
     - classifications present and distributed correctly?
     - bounding box within project area?
     - density within expected range?
     - CRS matches project CRS?
    ↓
PASS → queue for processing
FAIL → create issue with specific anomaly details

For 50 files per day, using caliper_batch_stats (10 files per request), this takes 5 API calls — an agent completes the full triage in minutes.

Why not just load the files?

You can load LAS files with laspy and PCD files with Open3D. For a few files, that works. For fleet-scale triage:

  • Downloading large files is slow — a 2 GB LAZ file takes minutes to transfer just to read the header
  • Loading requires memory — Open3D and laspy load points into RAM; a 500M-point cloud needs gigabytes
  • Dependencies — laspy, numpy, Open3D or pdal need to be installed and maintained in your triage agent
  • Format routing — LAS, LAZ, and PCD each need different libraries

Caliper handles the extraction remotely and returns lightweight JSON metadata. Your triage agent stays simple: make an HTTP call, check the numbers, route the result.

Getting started

  1. Add https://caliper.fit/mcp/ to your triage agent
  2. Define per-project rules: expected CRS, classification requirements, density thresholds, spatial bounds
  3. Use caliper_detect_format (free) to gate on format
  4. Use caliper_auto_stats or caliper_batch_stats for full metadata extraction
  5. Route results to your processing pipeline or issue tracker

Guides: Getting Started with MCP | Getting Started with REST | x402 Micropayments