Convert E57 to LAS, LAZ or COPC With PDAL (and What You Lose)

Command-line recipes for converting E57 point clouds to LAS, LAZ and COPC with PDAL, plus CloudCompare, LAStools and Rust alternatives. The options that matter, and what E57 data does not survive.

Alex Tolson

Alex Tolson

November 7, 2026

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.e57 reads the Cartesian points of every scan in the file, applies each scan’s pose, and merges them. default_srs sets the coordinate system when the file does not declare one that PDAL understands. Swap the EPSG code for yours.
  • filters.expression drops 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. Use mode: first so surviving points keep their real coordinates; center moves them to the cell center. filters.sample is the alternative for an even spread.
  • writers.copc writes the result. For LAS or LAZ, use writers.las with the same options, plus "compression": true for 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 dataAfter conversion to LAS, LAZ or COPC
Points, color, intensityKept (intensity and color rescaled to 16-bit)
Coordinate systemKept, if PDAL can read it or you pass default_srs / a_srs
360° photos and other imagesLost: readers.e57 never reads them
Scan positions and orientationApplied to the points, then lost: LAS has no per-scan origin
Scan grid (rows and columns)Lost
Scan names and IDsLost
NormalsKept only with extra_dims
Attributes missing from some scansLost: only dimensions present in every scan are read
Double-precision coordinatesRounded 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-laz and e57-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.

Sources: PDAL readers.e57, writers.las, writers.copc, PDAL 2.10.0 release, libE57Format issue 309, copc.io, e572las README. Checked November 2026.

Need to share a point cloud with a client?

Swyvl renders LAS and LAZ in the browser. No software required on their end.

Try it free
Alex Tolson

Alex Tolson

Co-founder of Swyvl. Eight years capturing the world in 3D — underground mines, the Great Barrier Reef, and everything in between. Previously co-founded Lateral Vision, a 3D visualization company and Google Street View contractor.

Your clients deserve to see the point cloud — not just be told about it.

Upload your LAS or LAZ file to Swyvl. Send one link. Your client opens it in their browser — no CloudCompare, no confusion, no back-and-forth.

Share a point cloud free

Not ready to sign up? See Swyvl live in 30 minutes.

Frequently asked questions

How do I convert an E57 to LAS?

With PDAL installed, run pdal translate scan.e57 scan.las. For LAZ, use a .laz output name or add --writers.las.compression=true, and for terrestrial scans set --writers.las.scale_x=0.001 (and y, z) so coordinates keep millimeter precision instead of PDAL's default centimeter. CloudCompare (File, Save, LAS) and LAStools' e572las do the same job without writing a pipeline.

What is lost when converting E57 to LAS or LAZ?

The 360° photos and other images, the per-scan positions and orientation (applied to the points, then discarded), the row and column scan grid, scan names, and any attribute that is not present in every scan. Normals survive only if you write them as extra dimensions. The coordinates, color and intensity come through.

Why does PDAL say 'E57 exception' on my file?

PDAL 2.9 and earlier bundled libE57Format 2.0.1, which cannot read files written by libE57Format 3.2 or later. Those newer writers always include an index packet, as the E57 standard requires, and the old reader fails on it. Upgrade to PDAL 2.10 or later, which bundles libE57Format 3.3.0.

Is there a free online E57 to LAS converter?

Not one that copes with real scans. Online converters struggle with E57's size and structure. PDAL and CloudCompare are free and run locally. If you only need to share the scan, a platform like Swyvl converts the E57 for browser viewing on upload, keeps the 360° photos, and keeps the original E57 for download.

Related articles

Back to all posts