aspose.info
EN

E57 - Lidar Point Cloud Data Format

Updated

What is an E57 file?

A file with .e57 extension is a compact, vendor-neutral file format that is used for storing and exchange of three-dimensional (3D) imaging data such as point clouds, images, and metadata. Such data is often created with systems such as laser scanners. It was developed by the Data Interoperability sub-committee of the ATSM E57 Committee on 3D Imaging Systems. E57 is open source and stores 3D point data, its attributes (such as color and intensity), and 2D imagery as captured by the 3D imaging system.

E57 File Format

The E57 file format specifications are available at ATSM website and can be referred to for developer’s reference. The concept paper and technical details of E57 file format are available as reference material by Daniel Huber. The data in an E57 file is saved in a XML based hierarchical tree structure as shown in following image. At low level, the E57 files are saved as compressed binary files to make the file size compact.

E57 File Structure

The structure of an E57 file is as shown in the following table.

File Structure
Header
Binary section (points)
Binary section (points)
…
…
Binary section (image)
XML section

E57 Header

The E57 header is a small, 48-byte binary structure that contains critical file-level information, such as the version number and the location of the XML section. It can be progamatically represented as follow.

struct E57FileHeader {
    char        fileSignature[8];
    uint32_t    majorVersion;
    uint32_t    minorVersion;
    uint64_t    filePhysicalLength;
    uint64_t    xmlPhysicalOffset;
    uint64_t    xmlLogicalLength;
    uint64_t    pageSize;
}

XML Hierarchy

The XML section of an E57 file describes the tree hierarchy using a subset of standard XML. This is based on eight E57 element types where each element is build up using a set of core building blocks. Five of these E57 elements are terminal types and three of these are non-terminal.

Terminal Types

Integer - signed integer up to 63 bits in size

Float - stores a single or double precision floating point number in IEEE 754-1985format

ScaledInteger - Stores a number with a fractional part as an integer along with a scale and offset

String - Stores text data as UTF-8 encoded and supports international characters

Blob - Stores an opaque block of binary data that is interpreted by the reader depending on the context.

Non-Terminal Types

Structure - Contains an unordered set of E57 elements of any type. An E57 structure is analogous to a structure in the C programming language.

Vector - Contains an ordered list of substantially identically typed items. A flag in the element allows the items to be restricted to be exactly identically typed if desired.

CompressedVector - Contains an ordered list of identically typed items, which are compressed in binary format.As with the Blob data type, the representation of a CompressedVector is divided into an XML portion and a binary portion.

Reference

See also