Skip to content
LidarKit

Compare two LAS or LAZ files

Drop two point clouds and find out whether they describe the same ground: do the footprints line up, do the heights agree, and where do the two surveys disagree and by how much. Runs on your machine — no upload.

Reference cloud

Drop the reference LAS or LAZ

or choose a file

LAS 1.0–1.4 · multi-gigabyte files welcome

The one you trust. Differences are measured against this cloud, so it should be the survey-grade or earlier survey.

Compared cloud

Drop the compared LAS or LAZ

or choose a file

LAS 1.0–1.4 · multi-gigabyte files welcome

The one being checked — the photogrammetric, newer or reprocessed cloud.

No upload. Processing runs in a Web Worker on your device — this app has no server component and no upload endpoint. How it works

Two questions, and the second one only matters if the first is yes

Do these two files describe the same ground? That is answered from the headers, instantly, before a single point is read. A LAS header carries the bounding box, the point count and the coordinate system, and between those three the common failures are already visible — two tiles that do not touch, a cloud sitting 43 m below its twin because one is ellipsoidal and the other orthometric, a photogrammetric block that floated half a metre east, a dense cloud being checked against a sparse one.

Where and by how much do they disagree? That needs both files read end to end, and it is only worth reading them once the first question has a good answer. A difference computed between two clouds in different coordinate systems is not a small error; it is arithmetic on numbers that do not describe the same place.

Reading the alignment table

The three rows are the three axes, and each one fails in its own way.

What you seeWhat it means
X and Y spans agree, shifts are near zeroThe footprints line up. This is the case you want.
X and Y spans agree, shifts are metresA horizontal registration difference. It does not stay horizontal: on every slope, roof edge and kerb it turns into a vertical difference. A difference map ringed with building outlines is this, not vertical error.
Spans differ a lotDifferent areas, not the same area moved. Only the shared rectangle gets compared, and the page says what share of each file that is.
Z spans agree, Z shift is largeA vertical datum difference, a geoid model difference, or a block with no ground control. The whole cloud moved. Read the offset as a georeferencing fact and the spread around it as the accuracy figure.
Z ranges do not meet at allThe same thing, larger — or the wrong pair of files, or feet against metres.
Densities differ by more than about 3×A highest-return comparison will be biased toward the denser cloud over any rough surface. Compare mean height instead.

Why both clouds go onto one grid

Two point clouds cannot be subtracted point by point — they have no points in common, and nothing says a return from one survey has a counterpart in the other. Something has to turn each cloud into a value per patch of ground first, and the patches have to be the same patches.

So the grid is decided before either file is opened, from the shared footprint and one cell size, and every point of both clouds is dropped into those cells. The two surfaces that come out are already on the same grid, and the difference is a subtraction and nothing else. The alternative — grid each cloud on its own extent, then line the two rasters up — leaves a sub-cell offset between them, and on a 30° slope at 50 cm resolution a half-cell offset is a 29 cm "difference" that is entirely an artefact of sampling.

It is also what makes the size of the files nearly irrelevant. Each cloud is streamed through once and never held, so the memory is set by the site rather than by the survey.

Things worth anticipating

  • Density bias is real and it is sneaky. The highest of four points is on average lower than the highest of forty over the same rough ground. Comparing a 40-point-per-square-metre photogrammetric cloud against a 4-point lidar survey by highest return will show the photogrammetry sitting a few centimetres high over every patch of grass, for no reason but the point count. The mean surface removes it.
  • Vegetation is the largest honest difference. A photogrammetric surface sits on top of the canopy; lidar's last return reaches into it. Metres of disagreement under trees is two sensors measuring different things, not one of them being wrong.
  • Water reads as noise or as a hole. Photogrammetry cannot match texture on moving water and lidar gets little back from it. Expect either enormous differences or nodata over every pond and river.
  • Noise returns are dropped, and that is not optional. Points classified 7 or 18, and anything flagged withheld, never reach the grid. A surface built from a maximum is by construction maximally sensitive to exactly the errors that are highest — one return off a bird is not a small error in a cell, it is that cell.
  • A surface model and a terrain model are not comparable. Subtracting one from the other gives the height of everything standing on the ground, which is a useful product but is not an accuracy assessment.

Check the map, not only the table

The statistics describe the whole field at once, and a field can average beautifully while being wrong in a way that matters. Look at where the colour is. Difference that is evenly scattered is noise. Difference concentrated in one corner is a tilt. Difference tracing the flight lines is a calibration problem. Difference outlining every building is horizontal registration. Difference following the vegetation is the two sensors doing their jobs. None of those look different in the RMSE.

Frequently asked questions

How do I know whether two LAS files cover the same ground?
Drop both in and the answer appears before anything is decoded. The page reads each header's bounding box, point count and coordinate system — a few kilobytes at the front of each file — and lays the two boxes out axis by axis: X, Y and Z, each with the range from both files and the shift between them. Footprints that agree in size but sit apart are a horizontal registration difference. Height ranges of the same depth at different heights are a vertical datum difference. Both are named on the page rather than left for you to spot in six-digit coordinates.
Which file should be the reference?
The one you trust. Differences are computed as compared minus reference, so a positive number means the cloud being checked sits above the one taken as truth. Checking a photogrammetric cloud against a lidar survey makes the lidar the reference. Measuring change over time makes the earlier survey the reference, and the difference becomes growth where it is positive and loss where it is negative.
How are two point clouds actually compared?
Both are gridded into the same cells and the two surfaces are subtracted. The grid — its origin, its cell size, its dimensions — is fixed before either file is opened, and every point of both clouds falls into that one set of cells. Nothing is resampled at any stage, because there are never two grids to reconcile. That matters more than it sounds: gridding each cloud separately and lining the rasters up afterwards leaves a sub-cell offset between them, and a sub-cell offset on a slope is a difference of most of a cell size that has nothing to do with either survey.
Which surface should I compare — highest return, mean or ground?
Highest return is the surface model and is the usual choice when both clouds are of similar density. Mean height is the one to use when they are not: the maximum of a sample rises with the size of that sample, so over grass, gravel or canopy a dense cloud reads systematically higher than a sparse one measuring the same ground, and a mean does not move with the count. Ground compares bare earth, built identically from both clouds, and is the only surface on which cut and fill volumes mean anything. Whichever you pick applies to both files — comparing a highest-return surface against a mean would be comparing two definitions rather than two surveys.
What cell size should the comparison use?
The suggested one is about two point spacings of the sparser cloud, so the average cell holds roughly four points from each file. Finer than that and most cells hold no point from one cloud or the other, and nothing here interpolates across a hole to invent a difference — so a fine cell size does not buy detail, it buys nodata. Coarser is a reasonable choice when both clouds are noisy, since more points get averaged into each cell.
Why is the mean difference not zero even though the clouds look aligned?
Usually a vertical datum. Two surveys of the same ground referenced to different geoid or ellipsoid heights differ by a near-constant amount across the whole site — often between a few centimetres and several tens of metres. A photogrammetric cloud built from GPS camera positions with no ground control will also float. Read the mean against the NMAD for exactly this reason: a mean much larger than the spread is a datum offset, not error — the offset is a georeferencing fact, and the spread around it is the accuracy figure you actually wanted.
What is NMAD, and why is it shown next to RMSE?
The normalised median absolute deviation: the median of how far each cell is from the median difference, scaled by 1.4826 so it is directly comparable to a standard deviation. It matters because elevation error is reliably not normally distributed. A photogrammetric cloud over water, glass roofs or dense canopy carries a tail of enormous errors, and RMSE — which squares everything — is dominated by that tail. Quote RMSE alone and you overstate how far a typical cell is out; quote NMAD alone and you hide that the tail exists. Both are shown so neither reading can be taken by itself.
How large a pair of files can it handle?
Larger than you are likely to have. Each cloud is streamed through once and folded into a fixed set of per-cell accumulators, so memory follows the size of the site rather than the size of the files: two 8 GB surveys over the same square kilometre cost what two 80 MB ones do. LAZ is decompressed as it streams, so a compressed file is never expanded to disk.
What comes out as a file?
A single-band Float32 GeoTIFF of the difference, tiled and Deflate compressed, with nodata at −9999 where the two clouds could not be compared, and the reference file's coordinate system written onto it. Every cell is compared minus reference in the vertical units of the inputs, so it opens straight into any GIS as a signed change raster.