Wat is een E57-bestand?
Een bestand met de extensie .e57 is een compacte, leveranciersonafhankelijke bestandsindeling die wordt gebruikt voor het opslaan en uitwisselen van driedimensionale (3D) beeldgegevens zoals puntenwolken, afbeeldingen en metagegevens. Dergelijke gegevens worden vaak gemaakt met systemen zoals laserscanners. Het is ontwikkeld door de subcommissie Data Interoperability van de ATSM E57 Committee on 3D Imaging Systems. E57 is open source en slaat 3D-puntgegevens, de attributen (zoals kleur en intensiteit) en 2D-beelden op zoals vastgelegd door het 3D-beeldvormingssysteem.
E57-bestandsindeling
De specificaties van het E57-bestandsformaat zijn beschikbaar op de ATSM-website en er kan naar worden verwezen als referentie voor de ontwikkelaar. Het conceptdocument en de technische details van het E57-bestandsformaat zijn beschikbaar als referentiemateriaal door Daniel Huber. De gegevens in een E57-bestand worden opgeslagen in een op XML gebaseerde hiërarchische boomstructuur, zoals weergegeven in de volgende afbeelding. Op laag niveau worden de E57-bestanden opgeslagen als gecomprimeerde binaire bestanden om de bestandsgrootte compact te maken.
E57 Bestandsstructuur
De structuur van een E57-bestand is zoals weergegeven in de volgende tabel.
Bestandsstructuur |
---|
Koptekst |
Binaire sectie (punten) |
Binaire sectie (punten) |
… |
… |
Binaire sectie (afbeelding) |
XML-sectie |
E57-koptekst
De E57-header is een kleine binaire structuur van 48 bytes die essentiële informatie op bestandsniveau bevat, zoals het versienummer en de locatie van de XML-sectie. Het kan als volgt progamatisch worden weergegeven.
struct E57FileHeader {
char fileSignature[8];
uint32_t majorVersion;
uint32_t minorVersion;
uint64_t filePhysicalLength;
uint64_t xmlPhysicalOffset;
uint64_t xmlLogicalLength;
uint64_t pageSize;
}
XML-hiërarchie
De XML-sectie van een E57-bestand beschrijft de boomhiërarchie met behulp van een subset van standaard XML. Dit is gebaseerd op acht E57-elementtypen waarbij elk element is opgebouwd met behulp van een set kernbouwstenen. Vijf van deze E57-elementen zijn terminaltypes en drie hiervan zijn niet-terminal.
Terminaltypen
Integer
- ondertekend geheel getal tot 63 bits groot
Float
- slaat een zwevend-kommanummer met enkele of dubbele precisie op in IEEE 754-1985-formaat
ScaledInteger
- Slaat een getal met een fractioneel deel op als een geheel getal samen met een schaal en offset
String
- Slaat tekstgegevens op als UTF-8-gecodeerd en ondersteunt internationale tekens
Blob
- Slaat een ondoorzichtig blok binaire gegevens op die door de lezer worden geïnterpreteerd, afhankelijk van de context.
Typen zonder terminal
Structuur
- Bevat een ongeordende set E57-elementen van elk type. Een E57-structuur is analoog aan een structuur in de programmeertaal C.
Vector
- Bevat een geordende lijst van in wezen identiek getypte items. Een vlag in het element zorgt ervoor dat de items desgewenst exact identiek kunnen worden getypt.
CompressedVector
- Bevat een geordende lijst van identiek getypeerde items, die in binair formaat zijn gecomprimeerd. Net als bij het Blob-gegevenstype is de weergave van een CompressedVector verdeeld in een XML-gedeelte en een binair gedeelte.