Client platform · UAI – Underwater Acoustics International

MapPrism

A LiDAR and bathymetry processing platform that turns raw point clouds into web-ready 3D and 2D products automatically.

1/33D bathymetric point cloud next to a 2D map with contours, hillshade, backscatter and side-scan sonar layers

Built for UAI, a hydrographic and topographic survey company, MapPrism takes LAS/LAZ point clouds from multibeam sonar and LiDAR surveys and produces contours, hillshades, colorized DEMs, COPC/EPT tilesets and Potree scenes without anyone touching PDAL or GDAL by hand.

At a glance

  • Fifteen typed executors (reprojection, regridding, colorization, DSM/hillshade, contours, COPC/EPT/Potree, XYZ tiles) implemented as n8n workflows
  • Eight preset pipelines registered as Ordo recipes, plus custom recipes validated against executor contracts
  • Adaptive memory management splits huge surveys into power-of-four Entwine subsets and merges them back
  • A documentation site (VitePress) written for the client's frontend developers and pipeline authors

The problem

Underwater and topographic surveys produce very large point clouds in inconsistent coordinate systems, and each delivery needs the same family of products: a streamable cloud for the browser, a DEM and hillshade, contour lines, sometimes a colorized cloud draped with imagery. Doing that with scripts works until the volume grows and nobody remembers which parameters produced which file.

How it works

The client's frontend submits a job to Ordo with a recipe and the input artifacts. Ordo validates the recipe (every step type must exist, every input and output slot must match its executor contract, every artifact reference must be namespaced and producible), stores the job and its step queue in PostgreSQL, and returns an id. n8n workers poll for pending steps, download the artifact from MinIO, run the tool (PDAL, GDAL, Entwine, PotreeConverter), upload the result and report back. An on_exit webhook fires when the job finishes, success or failure, with the dataset metadata attached.

Recipes are deterministic DAGs: artifacts keep their names through the whole graph, parameters live on the job rather than the recipe, and the same recipe with the same inputs always yields the same products. Presets cover the common paths (dataset inspection, CRS assignment, reprojection, COPC, EPT, Potree, colored hillshade with XYZ tiles, contours as MBTiles and PMTiles) and custom recipes are validated before anything runs.

Details that took real work

Entwine loads an entire dataset into memory while indexing, so the EPT executor estimates point counts with PDAL, computes a safe subset count for the available RAM, rounds up to a power of four and builds and merges the subsets automatically. Reprojection detects invalid embedded CRS metadata and stamps the correct one without moving points. Contour generation outputs both MBTiles and PMTiles with major/minor classification so the web map can style them directly.

The outputs feed a split-view viewer that pairs a Potree 3D scene with a synchronized 2D MapLibre map, which is what the screenshots show. MapPrism is the second production platform running on Ordo, after Skyport.

More projects

All projects