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
- Add
https://caliper.fit/mcp/to your triage agent - Define per-project rules: expected CRS, classification requirements, density thresholds, spatial bounds
- Use
caliper_detect_format(free) to gate on format - Use
caliper_auto_statsorcaliper_batch_statsfor full metadata extraction - Route results to your processing pipeline or issue tracker
Guides: Getting Started with MCP | Getting Started with REST | x402 Micropayments