To convert an E57 to LAS, LAZ or COPC from the command line, install PDAL 2.10 or later and run pdal translate scan.e57 scan.laz. Add a scale of 0.001 for terrestrial scans, because PDAL’s default keeps only centimeters. For streaming in a browser, write COPC instead. Before you convert, know what you are giving up: LAS, LAZ and COPC hold points only, so the E57’s 360° photos, scan positions and scan structure are dropped.
This post is for people comfortable in a terminal. If you just want the client to see the scan, you may not need to convert at all: see how to share an E57 file.
Install PDAL
PDAL is the open-source point cloud equivalent of GDAL. The easiest install is conda-forge:
conda create --yes --name pdal --channel conda-forge pdal
conda activate pdal
pdal --version # want 2.10 or later
Use 2.10 or later. Earlier releases bundled an old E57 library (libE57Format 2.0.1) that fails with a bare “E57 exception” on files written by libE57Format 3.2 and newer. Those newer writers include an index packet, as the standard requires, and current FARO, Leica and other exporters use them. PDAL 2.10 bundles libE57Format 3.3.0 and reads them.
The PDAL docs also describe Docker images, but as of November 2026 Docker Hub has no 2.10 tag (the newest versioned tag is 2.9.2), so use pdal/pdal:latest or conda.
E57 to LAS or LAZ
The one-liners:
# LAS
pdal translate scan.e57 scan.las
# LAZ, with millimeter coordinates
pdal translate scan.e57 scan.laz \
--writers.las.compression=true \
--writers.las.scale_x=0.001 \
--writers.las.scale_y=0.001 \
--writers.las.scale_z=0.001
Why the scale matters: LAS stores coordinates as 32-bit integers multiplied by a scale. writers.las defaults to 0.01, so every point snaps to the nearest centimeter. That is fine for airborne LiDAR and too coarse for a terrestrial scan of a plant room. With 0.001, check that your extents still fit a 32-bit integer; set offset_x (and y, z) to auto so they are measured from the data rather than from zero.
E57 to COPC
COPC is a LAZ 1.4 file with the points reorganized into an octree, so a viewer can fetch just the part on screen with HTTP range requests. Every LAZ reader still opens it as an ordinary LAZ. For anything going to a browser, write COPC:
pdal translate scan.e57 scan.copc.laz --writers.copc.a_srs=EPSG:7855
A pipeline for real scans
For more than a one-off, put the steps in a pipeline file:
[
{ "type": "readers.e57", "filename": "scan.e57", "default_srs": "EPSG:7855" },
{ "type": "filters.expression", "expression": "X > -2e7 && X < 2e7 && Y > -2e7 && Y < 2e7 && Z > -2e7 && Z < 2e7" },
{ "type": "filters.voxeldownsize", "cell": 0.005, "mode": "first" },
{
"type": "writers.copc", "filename": "scan.copc.laz",
"scale_x": 0.001, "scale_y": 0.001, "scale_z": 0.001,
"offset_x": "auto", "offset_y": "auto", "offset_z": "auto",
"extra_dims": "all"
}
]
pdal pipeline e57-to-copc.json
What each stage does:
readers.e57reads the Cartesian points of every scan in the file, applies each scan’s pose, and merges them.default_srssets the coordinate system when the file does not declare one that PDAL understands. Swap the EPSG code for yours.filters.expressiondrops points that cannot be stored: some exporters write NaN or huge placeholder values for pixels with no return, and the writer aborts the whole run on the first one.filters.voxeldownsize(optional) keeps one point per 5 mm cell. Usemode: firstso surviving points keep their real coordinates;centermoves them to the cell center.filters.sampleis the alternative for an even spread.writers.copcwrites the result. For LAS or LAZ, usewriters.laswith the same options, plus"compression": truefor LAZ.
To merge several E57 files into one cloud, list them as several readers; PDAL merges them on output.
What Swyvl runs
When you upload an E57 to Swyvl, the conversion is a PDAL 2.10 pipeline of the same shape: readers.e57, the same filters.expression guard against unstorable points, and writers.copc at a scale of 0.001 with offset: auto, so coordinates keep millimeter precision (PTX, PTS, XYZ and PLY uploads get the same; LAS and LAZ keep their own scale). The coordinate system comes from the E57’s own coordinateMetadata, which readers.e57 does not read by itself, so Swyvl reads it from the file’s XML and passes it in as default_srs. There is no decimation: the full cloud streams.
Swyvl then does what PDAL does not: it reads the E57’s image sections, extracts the 360° photos (stitching Leica and Matterport cube faces into one photo per setup) and places each at its scan position beside the point cloud. The original E57 is kept for download.
What you lose converting from E57
| E57 data | After conversion to LAS, LAZ or COPC |
|---|---|
| Points, color, intensity | Kept (intensity and color rescaled to 16-bit) |
| Coordinate system | Kept, if PDAL can read it or you pass default_srs / a_srs |
| 360° photos and other images | Lost: readers.e57 never reads them |
| Scan positions and orientation | Applied to the points, then lost: LAS has no per-scan origin |
| Scan grid (rows and columns) | Lost |
| Scan names and IDs | Lost |
| Normals | Kept only with extra_dims |
| Attributes missing from some scans | Lost: only dimensions present in every scan are read |
| Double-precision coordinates | Rounded to the scale you set |
readers.e57 also only reads Cartesian scans; spherical-coordinate point data is not supported.
Other tools
- CloudCompare (free, GUI): open the E57, then File, Save, and choose LAS in the type list. From the command line:
CloudCompare -SILENT -O scan.e57 -C_EXPORT_FMT LAS -SAVE_CLOUDS. CloudCompare loads E57 pictures, but notes that spherical images are not carried through when you save. - LAStools e572las:
e572las -i scan.e57 -o scan.laz. It applies poses by default, keeps each scan as a point source ID, and has-split_scans. It is free to use but not open source; LAStools’ licensed tools add noise past certain point counts unless you buy a license. - Rust: cry-inc/e57 (MIT) includes
e57-to-lazande57-to-pano, which writes the embedded 360° photos out as images. nivalis-studio/e57-to-las writes one LAS per station plus a stations.json.
When not to convert
Convert when the recipient’s software needs LAS or LAZ: GIS, CAD plugins, classification tools. Keep the E57 when they need the scan positions or the panoramas, for example to register further scans or to open it in ReCap, Cyclone or SCENE. And if the goal is just letting a client see the scan, upload the E57 itself to Swyvl: the browser gets a COPC, and the client still gets the 360° photos. See LAS vs LAZ vs E57 for choosing a file type.
Related
- What is an E57 file?
- Why deliver an E57 with its 360° photos?
- What is Potree?
- Free point cloud viewer and E57 check
Sources: PDAL readers.e57, writers.las, writers.copc, PDAL 2.10.0 release, libE57Format issue 309, copc.io, e572las README. Checked November 2026.