Was ist eine E57-Datei?
Eine Datei mit der Erweiterung .e57 ist ein kompaktes, herstellerneutrales Dateiformat, das zum Speichern und Austauschen von dreidimensionalen (3D) Bilddaten wie Punktwolken, Bildern und Metadaten verwendet wird. Solche Daten werden oft mit Systemen wie Laserscannern erstellt. Es wurde vom Data Interoperability Subcommittee des ATSM E57 Committee on 3D Imaging Systems entwickelt. E57 ist Open Source und speichert 3D-Punktdaten, ihre Attribute (wie Farbe und Intensität) und 2D-Bilder, wie sie vom 3D-Bildgebungssystem erfasst werden.
E57-Dateiformat
Die E57-Dateiformatspezifikationen sind auf der ATSM-Website verfügbar und können als Referenz für Entwickler herangezogen werden. Das Konzeptpapier und technische Details des E57-Dateiformats sind als Referenzmaterial von Daniel Huber erhältlich. Die Daten in einer E57-Datei werden in einer XML-basierten hierarchischen Baumstruktur gespeichert, wie im folgenden Bild gezeigt. Auf niedriger Ebene werden die E57-Dateien als komprimierte Binärdateien gespeichert, um die Dateigröße kompakt zu halten.
E57 Dateistruktur
Die Struktur einer E57-Datei ist in der folgenden Tabelle dargestellt.
Dateistruktur |
---|
Kopfzeile |
Binärteil (Punkte) |
Binärteil (Punkte) |
… |
… |
Binärschnitt (Bild) |
XML-Abschnitt |
E57 Kopfzeile
Der E57-Header ist eine kleine 48-Byte-Binärstruktur, die wichtige Informationen auf Dateiebene enthält, z. B. die Versionsnummer und den Speicherort des XML-Abschnitts. Es kann wie folgt progamatisch dargestellt werden.
struct E57FileHeader {
char fileSignature[8];
uint32_t majorVersion;
uint32_t minorVersion;
uint64_t filePhysicalLength;
uint64_t xmlPhysicalOffset;
uint64_t xmlLogicalLength;
uint64_t pageSize;
}
XML-Hierarchie
Der XML-Abschnitt einer E57-Datei beschreibt die Baumhierarchie unter Verwendung einer Teilmenge von Standard-XML. Dies basiert auf acht E57-Elementtypen, bei denen jedes Element aus einer Reihe von Kernbausteinen aufgebaut ist. Fünf dieser E57-Elemente sind terminale Typen und drei davon sind nicht-terminal.
Terminaltypen
Integer
- vorzeichenbehaftete Ganzzahl mit einer Größe von bis zu 63 Bit
“Float” - speichert eine Gleitkommazahl mit einfacher oder doppelter Genauigkeit im IEEE 754-1985-Format
ScaledInteger
- Speichert eine Zahl mit einem Bruchteil als Ganzzahl zusammen mit einer Skalierung und einem Offset
„String“ – Speichert Textdaten als UTF-8-kodiert und unterstützt internationale Zeichen
“Blob” - Speichert einen undurchsichtigen Block binärer Daten, die vom Lesegerät je nach Kontext interpretiert werden.
Non-Terminal-Typen
“Struktur” - Enthält einen ungeordneten Satz von E57-Elementen beliebigen Typs. Eine E57-Struktur ist analog zu einer Struktur in der Programmiersprache C.
“Vektor” - Enthält eine geordnete Liste von im wesentlichen identisch typisierten Elementen. Ein Flag im Element erlaubt es, die Items auf Wunsch auf exakt identische Typisierung einzuschränken.
„CompressedVector“ – Enthält eine geordnete Liste identisch typisierter Elemente, die im Binärformat komprimiert sind. Wie beim Blob-Datentyp ist die Darstellung eines CompressedVector in einen XML-Teil und einen Binärteil unterteilt.