OpenLiDARViewerGUIDE · v0.6.9
Launch viewer
RENDER PATHPROBING DATA ROUTELOCAL-FIRST SECTION01 // OVERVIEW
The guide // OLV 0.6.9

From raw point clouds
to spatial evidence.

This guide walks through opening a scan, finding your way around, measuring, analysing terrain, comparing two scans and sharing your work. It assumes no GIS background. Where the viewer refuses to do something, the guide says why.

Covers v0.6.9Render path: PROBING
02 Open a scan

Drag a file onto the window. LAS, LAZ, E57, PLY, GLB and .pnts are identified from their own contents, so one of those opens under any name; the rest go by their extension.

The moment a scan lands you get a one-line summary and the most useful next step as a single button. Nothing runs until you ask.

Survey LiDARDrone and aerial
LASLAZCOPCEPT
TerrestrialLaser scanners
E57PTXPTSPCD
Phone and meshMobile captures
PLYOBJGLBGLTF
Plain points and tilesText and 3D Tiles
XYZCSVPNTSTILESET.JSON

Streaming. A .copc.laz or an ept.json, on disk or at a CORS-enabled URL, opens through progressive octree streaming: partial range reads, a view-dependent scheduler, bounded residency and worker decoding. A 3D Tiles tileset.json whose content is PNTS streams the same way, explicit or implicit hierarchy, ADD or REPLACE refinement. Paste the URL into the start screen or share a ?copc=<url> deep link.

A local LAZ opens progressively. NEW IN 0.6.9 The header prefix is read first, a worker frames the file from it, and chunks decode from a pool behind a strided stand-in preview, so the compressed file is never held whole. The preview is a sample, capped at the smaller of the render budget and two million points, and is marked incomplete until the decode finishes. An ordinary LAS still reads whole under the memory guard.

Heavy local files. A very large uncompressed LAS or a chunked LAZ is indexed into temporary browser storage and streamed from there instead of being read whole. A preview sample renders at once, marked incomplete until the full index swaps in. Reopening the same file reuses the index. If the device cannot hold even the index, the file is refused with guidance rather than crashing the tab.

Memory safety is a single budget. One shared decoded-byte cap covers the LAZ chunk table, LAS record batches, COPC nodes and out-of-core tiles together, so a malformed multi-gigabyte input is refused before it can allocate past it. A truncated tile is refused rather than shown as a smaller complete scan.
04 See the data

Colour is a question you ask the scan.

COLOUR

Colour modes

RGB the scan’s own colour. Height low to high, percentile-clipped 5/95 on a Viridis ramp. Intensity reflection strength. Class by ASPRS code. Density for coverage QA. Normals. Coverage and Confidence describe the terrain analysis and stay grey until you run it.

DEPTH

Eye Dome Lighting

A screen-space depth cue that darkens discontinuities so edges, ridges and near/far structure become legible. Presets Subtle, Balanced and Inspection. On by default on desktop WebGPU, off by default on WebGL 2 and mobile, always switchable. It is not physically based lighting.

STUDIO

Visuals Studio

Chip rails in the Inspector for colour mode, RGB preset (Natural, Photoreal, Drone RGB, Mobile LiDAR, Survey, High Contrast, Infrastructure), depth and background. White balance with an Auto assist on streaming COPC. Soft splats or Inspection radius. A patch view projects a point’s neighbourhood onto its tangent plane.

One Speed to Quality control in the top bar drives streaming preset, resident point budget, concurrent decodes, pixel-ratio ceiling, EDL and antialiasing. It never touches the static load budget that terrain analysis, measurement and export read, so no slider position changes how a number is computed. On a streamed scan it does set the resident point budget, so it can change how much of the source a resident-only result was computed over. The result says so when that happens.

05 Measure

Nine tools. Every number graded.

Start Measure from the Tools tab or press M, then pick a kind on the toolbar over the view and click points on the scan. Snapping is off until you turn it on: the snap button cycles off, point and geometry, and it needs points in memory, so a streaming scan has nothing to snap to. Every measurement is editable, undoable and switchable between metric and imperial.

Distance

Straight line between two points.

Polyline

Total length of a multi-segment path.

Area

Polygon area, both true in-plane and horizontal map-projected.

Height

Vertical difference between two points, in the source vertical unit.

Angle

The angle at a vertex between two arms.

Slope

Rise, run, slope angle and grade percent between two points.

Profile

Cross-section between two points with a resizable height-vs-distance chart, validated at E4 against OGR and R.

Volume

Cut and fill against a base level from a polygon or 3D lasso, with degenerate and self-intersection guards. A lasso stockpile is integrated over a polygon-clipped grid rather than summed over the points that happen to be loaded. NEW IN 0.6.9 That area-weighted figure is live in the toast only; the session record, the report and the CSV still carry the older point-sample volume, so the two can disagree on the same lasso.

The trust badge. A number is only as good as the points under its ends. A measurement on a fully loaded scan carries a red, yellow or green dot graded on whether its endpoints landed on real returns and how dense the surrounding data is. A streaming scan holds no resident points to grade against, so measurements taken on one carry no dot. Hover the dot to read exactly why. The badge travels with the measurement into the session file, so whoever opens it sees the same verdict.

Measurement chains combine placed measurements as sum, difference or ratio. The whole set exports to a JSON session and re-imports later.

Green: well supported by measured points.
Yellow: loosely supported, or the scan has no coordinate system so the scale cannot be confirmed as metres.
Red: an endpoint sits in empty space. The number is shown faded because the data cannot back it up. Hover to see it drift.
Not survey-grade. Measurement is meant for inspection and documentation. Treat it as survey-grade only if you have validated it against survey-grade data and procedures.
06 Terrain + Contours

A bare-earth surface that grades itself.

Open the Analyse panel and run the analysis. The viewer classifies the ground, builds a gridded DTM with per-cell confidence and hold-out RMSE, derives the surface products, and issues one Terrain Assessment verdict. A scan that only measured part of the ground says so rather than pretending the filled-in areas are survey quality.

TERRAIN PIPELINE // CONFIDENCE-AWARECOVERAGE: FULL · RESIDENT-ONLY · SAMPLED
STAGE 01Ground filterSMRF-style classification with physical tolerances converted at the unit boundary. Heuristic, labelled derived.
STAGE 02DTM gridGridded bare earth with per-cell confidence. Measured cells carry empirical hold-out reliability at a stated tolerance; interpolated and gap cells carry a model-based support score that is calibrated against nothing.
STAGE 03Surface productsDSM, canopy height (DSM − DTM), slope, aspect, hillshade, TPI, VRM. Eight of these products, DTM included, sit at E4. For hillshade that level covers the single-direction model; the multi-directional relief is a display option outside it.
STAGE 04AssessmentOne verdict: Good, Preview, Limited or Blocked, plus a 0 to 100 readiness index that is a workflow weight, not an accuracy calibration.
STAGE 05Evidence gateEvery export routes through one authorisation path that can only downgrade: validated, exploratory or blocked, stamped into provenance. A permit that is granted names the claims it grants.

Contour Studio turns an analysed scan into a deliverable. Pick a purpose (Engineering Plan, Survey Review, Terrain Research, Presentation Map, Custom); a purpose only bundles presentation defaults and can never raise a claim. Analytical contours are the exact isolines of the grid. Cartographic contours are generalised for legibility, reference the analytical geometry’s hash and are never labelled exact. An opt-in terrain-aware mode keeps more shape on low-confidence support and small closed features; the simplifier still refuses to drop a gap or a low-confidence vertex.

Contours also draw over the point cloud as a derived layer with visibility, index emphasis, opacity and vertical lift. A segment crossing a data gap is not drawn, so a line never spans unmeasured ground.

An analysis is kept once it is computed. NEW IN 0.6.9 The terrain core is written to origin-private storage on your own disk and restored when you ask for the same analysis again, which turns a six-to-nine second recompute into a restore of well under a tenth of a second, with byte-identical grids. The key is the analysed input rather than the file, so a different stride or a different classification recomputes. Only cores that took a second or more are kept, the store is capped at 512 MiB by least-recent use, and the browser may clear it at any time.

NEW IN 0.6.9 When a scan opens, the Analyse panel carries a Dataset Story: what the scan is, what limits it most, what it is good for, what to treat with caution and what is not established. It synthesises what the other panels already found; it never upgrades a verdict.

NEW IN 0.6.9 Four numeric paths in the analysis were rewritten for speed in v0.6.9 and held to byte-identical output against the code they replace, so the surface is the same one, computed faster.

Process Studio in the left rail lists what the loaded scan can safely produce, each as ready, review or blocked with a plain reason and the shortest action that lifts it. It reads the readiness services. A contour or DEM file is decided by a finer gate that also weighs the evidence grade and the precision permit, so a product can read ready here and still be refused at the moment of export, with the reason given there.

READINESS GATE // INTERACTIVE MODELTap the states
EXPORT READINESSREADYSurface is Good and the reference frame is complete.
Analytical contoursGEOJSON · DXF · SVGAVAILABLE · STAMPED
Map sheetPDFAVAILABLE · STAMPED
DEM packageASCII GRID · GEOTIFFAVAILABLE · STAMPED
Deliverable bundleZIP + SHA256SUMSAVAILABLE · STAMPED
Confidence-rated, not certified. Per-cell confidence is a data-quality estimate. It does not stand in for a licensed surveyor, ground control, datum validation or regulatory acceptance. Treat terrain products and DEM exports as deliverable-ready only when the assessment reads Good.
07 Compare two scans

Before and after, with a noise floor.

Open a second scan of the same place and the viewer offers a comparison. Two georeferenced layers that declare the same projected CRS mount into one shared frame at their real separation, non-destructively, in Float64.

ALIGN

Registration

Two epochs are aligned by a rigid ICP whose default model is yaw plus horizontal translation, so the fit cannot absorb the vertical signal it is meant to measure. The full model is optional and residuals are reported. Epoch alignment sits at E2, and cross-datum comparison is refused rather than approximated.

DIFF

Change raster and volume

Per-cell change and the threshold-applied gain and loss volumes are validated at E4 against GRASS over eight synthetic epoch pairs. The raw net volume, summed over every comparable cell with no threshold, is not part of that check. A level of detection keeps changes below the survey’s own precision from being reported as real movement.

BAND

Uncertainty, or “unquantified”

The volume’s band is built from the level of detection and co-registration RMSE you supply. With no error budget it reads unquantified, and the compare panel names what to supply, rather than grading a ±0 band as high confidence.

08 Clip, classify, inspect

The Work mode gathers the scene tools in one place.

NEW IN 0.6.9 The Tools tab opens on a launcher listing Measure, Inspect point, Annotate and Clip box, each with its key and what it does, and a count of how many you have placed this session. It folds to a strip once a tool panel is up. Probe stays on the dock.

Clip box

Draw a box and hide everything outside it, or inside it for a cut-away. Type the six extents, or press Fit to scan and work inwards. A point-cloud export made with the converter's Export button carries the clipped points; the quick format buttons write the whole loaded cloud.

Classify

Derive ground, vegetation, building and more where a scan carries none. On a scan that already carries producer classes it declines and says so, and Fill unclassified points handles the gaps instead; neither runs on a streaming scan. Return-number aware, with a ground-support gate for roofs and a wall-rescue pass. A derived class is a heuristic guess and is labelled as derived. Paint a class over a lasso and write it back to LAS.

Range-frame QA

A terrestrial scan arrives as a grid. When the file carries it, click a cell to highlight the point it produced, and back. A cell with no return means the scanner looked and nothing came back. If the scan was reduced to fit in memory the grid survives but the link to individual points does not, and the workbench says so rather than pointing at the nearest point.

Layers and groups

Open several scans as layers, group them with visibility, solo and rename, and share one project-wide elevation colour scale so two scans stop stretching their own ranges.

09 Export + Output

One Output panel. Two lanes.

A live summary tells you what each export will contain before you commit. Terrain deliverables decline above a 10 mm coordinate step rather than exporting finer than the representation can distinguish.

LANE 01

Cloud

Re-save the points as LAS 1.2 or 1.4, PLY, OBJ, XYZ or CSV, respecting any clip and any painted classification. PNG snapshots burn in placed measurements and annotations as inspection evidence.

LANE 02

Products

Multi-page PDF reports from three templates (Survey Summary, Technical Report, Scan QA). Contours as a package with the DXF, a validation record and the Contour Studio settings. Map-sheet PDF, DEM package whose DTM surface carries its own SHA-256, terrain intelligence report, Scan QA report, and a ZIP with a SHA256SUMS manifest. Orthographic RGB, height, intensity, classification, depth and normal images. Measurements as GeoJSON, CSV or KML.

Exported products record which method version produced them, for example olv.contour.generalize.terrain-adaptive@1, and carries the permit decision the gate made.

10 Save and share

A session is a record of what you measured and how much to trust it.

.olvsession

Measurements, annotations, saved views, camera, render settings and class filter in one plain-text file. It never contains the scan, so it stays small and private. Drag it onto the window to restore what it holds, trust grades included, next to the same scan file.

View links

Copy view link reproduces the camera, colour mode and point sizing. No scan data is shared; the recipient opens the same file.

.olvworkflow

Record and replay camera moves and tool actions with speed, countdown and loop settings. Actions only, never scan data. An embed mode (?embed=1) exposes a validated postMessage bridge for host pages.

11 Formats

The matrix.

Filter by source type. Streaming means progressive, bounded-memory loading rather than a full-file read. Support varies with browser memory, GPU capacity and dataset size.

16 of 16
LASDrone / aerial LiDAR. Georeferenced; coordinate bridge applied. Out-of-core when very large.Static · OOC
LAZCompressed LAS decoded in-browser with laz-perf WASM. A local LAZ opens progressively from its chunk table behind a strided preview; a heavy one streams out of core.Static · OOC
E57ASTM E2807. Coordinates, RGB, intensity, classification, normals; multi-scan merged; acquisition grid preserved. E4 against PDAL.Static
PTXMulti-scan text; per-scan pose applied; scanner origin recorded; grid preserved per block.Static
PTSWhitespace text; optional header count; 3/4/6/7-column layouts; chunked reading.Static
PCDPoint Cloud Library. ASCII, binary and binary-compressed; position, RGB, intensity, normals, labels.Static
PLYiPhone and mobile scans. Point clouds and meshes; RGB supported.Static
OBJMesh vertices used as points. Faces and materials are not rendered.Static
GLB · GLTFAR tools and mobile scans. glTF must be GLB or self-contained with embedded buffers.Static
XYZWhitespace-delimited text; optional RGB; chunked decoding.Static
CSVComma-delimited text; optional RGB; chunked decoding.Static
PNTSA single 3D Tiles point tile; magic-byte detected; RTC_CENTER applied; Draco refused.Static
COPCCloud-optimised LiDAR, .copc.laz. Progressive octree streaming, local or remote.Streaming
EPTEntwine Point Tile. Manifest, hierarchy and binary or laszip tiles; local and remote.Streaming
3D Tilestileset.json 1.0 / 1.1 with PNTS content; explicit or implicit hierarchy; ADD and REPLACE. Mesh content refused.Streaming
OOC LAS · LAZVery large uncompressed LAS or chunked LAZ indexed into browser storage and streamed like COPC.Streaming

Export: LAS 1.2 / 1.4, PLY, OBJ, XYZ, CSV, PNG. USDZ needs conversion first. Scanner and app compatibility notes live in the full format matrix ↗.

12 Limits

Being clear about the limits is part of the design.

Not a GIS, not photogrammetry, not survey-grade

Full GIS layers and analysis, photogrammetry, survey-grade measurement, CRS reprojection and editing of point data are deliberately left to dedicated tools.

CRS is read, not transformed

The viewer detects the CRS, vertical datum and units, converts known linear units to metres, recentres large coordinates and records everything in export metadata. It never reprojects between systems or transforms vertical datums. Cross-datum comparison is blocked rather than approximated.

Float32 positions, stated per scan

Coordinates are recentred before narrowing, so a normal survey keeps sub-millimetre resolution. The step grows with extent: under 1 mm to 16 km, about 8 mm at 100 km. The Scan Report states the figure and terrain deliverables decline above a 10 mm step.

Large files are budgeted

A cloud above the point budget loads at reduced density. LAZ stride loading still decompresses every record because the decoder is sequential. COPC, EPT and the out-of-core path are the routes for very large data.

Ground classification is heuristic

Its output is derived, not survey-grade. The register grades it on synthetic known-truth fixtures. Separately, agreement against external reference labels on real airborne scenes (OpenGF expert labels, ASPRS producer class-2 ground) is reported with its weak regimes intact: mountain F1 near 0.5, dense-canopy precision near 0.34, building roofs read as ground. Those labels are themselves a classifier’s output, not survey checkpoints, which is why the ground filter stays partial.

Heavy work refuses rather than freezing

NEW IN 0.6.9

If a worker fails, the analysis falls back to the main thread only for sizes measured as safe: 25,000 points and 1,000 estimated cells for terrain, 1,000,000 points for classification. Anything larger refuses with an error that says nothing was produced. Those budgets are measured on one machine as a proxy, not read from your device.

Nothing is at E5

Seventeen claims agree with an independent implementation on frozen fixtures. None has passed a prospective field study with a frozen protocol and independent operators. The app says preview or review wherever that gap matters.

13 Quick start

Open your first scan in five moves.

Open

Go to app.openlidarviewer.org and drag a .las, .laz, .e57 or .copc.laz onto the page, or paste a remote COPC URL.

Frame

Press R to frame the scan, then 1, 2 or 3 for Orbit, Walk or Fly. Drag to orbit; in Walk and Fly, click the view to take the camera.

Read

Open Scan Intelligence for count, density, spacing and the integrity report. Switch colour to Height or Intensity.

Measure

Pick Distance in Measurements, click two points, hover the badge to read its grade.

Analyse and export

Run Analyse, read the Terrain Assessment, then open Output. Save an .olvsession to keep the evidence.

14 If something looks off

Common questions.

A measurement reads red or its number is faded.

An endpoint is not on real data. Move it onto the scan, or turn on snapping.

Lengths don’t look like metres.

The scan has no coordinate system, so the viewer cannot confirm the scale. Measurements still work but are flagged yellow, and the terrain rows that depend on a known unit are held back for the same reason.

Coverage and Confidence colours are greyed out.

Run the terrain analysis first. Those modes describe its result.

A session opened but the scene is empty.

Open the matching scan file too. The session carries the analysis and the measurements, not the points, and the viewer tells you which file to drop.

A huge file is slow to appear.

COPC, EPT and out-of-core files stream detail-first, so the view sharpens as you look around. A local LAZ opens progressively behind a strided stand-in preview. A preview sample is marked incomplete until the full index is in. A streaming source counts as complete only once its hierarchy is, not once everything it currently knows about has arrived, so an EPT set that opens shallow and deepens reports an honest unknown rather than a premature yes.

Does anything leave my device?

No. Files are read and rendered in your browser. There is no account, no server and no telemetry of your data. Remote COPC, EPT and 3D Tiles are fetched by range request from the host you name, and nothing is sent back.

Which browser?

A modern Chromium browser with hardware acceleration, WebGPU where available. Firefox and Safari run through the WebGL 2 fallback and run the full deterministic suite on every release, though Chromium is the engine the release gate blocks on. Phones and tablets are supported with a touch model and a one-handed dock.

Can I cite it?

Yes. Every archived release has a Zenodo version DOI, and the concept DOI 10.5281/zenodo.21544619 resolves to the newest deposit, which is v0.6.8. v0.6.9 is a release candidate and is not deposited yet. A CITATION.cff ships in the repository. See the science page.

↑↓ MOVE↵ OPENESC CLOSE