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.