Qu’est-ce qu’un fichier E57 ?
Un fichier avec l’extension .e57 est un format de fichier compact et indépendant du fournisseur qui est utilisé pour stocker et échanger des données d’imagerie tridimensionnelles (3D) telles que des nuages de points, des images et des métadonnées. Ces données sont souvent créées avec des systèmes tels que des scanners laser. Il a été développé par le sous-comité d’interopérabilité des données du comité ATSM E57 sur les systèmes d’imagerie 3D. E57 est open source et stocke des données ponctuelles 3D, ses attributs (tels que la couleur et l’intensité) et l’imagerie 2D capturée par le système d’imagerie 3D.
Format de fichier E57
Les spécifications du format de fichier E57 sont disponibles sur le site Web de l’ATSM et peuvent être consultées à titre de référence pour les développeurs. Le document conceptuel et les détails techniques du format de fichier E57 sont disponibles en tant que matériel de référence par Daniel Huber. Les données d’un fichier E57 sont enregistrées dans une arborescence hiérarchique basée sur XML, comme illustré dans l’image suivante. À bas niveau, les fichiers E57 sont enregistrés sous forme de fichiers binaires compressés pour rendre la taille du fichier compacte.
Structure du fichier E57
La structure d’un fichier E57 est comme indiqué dans le tableau suivant.
Structure du fichier |
---|
En-tête |
Section binaire (points) |
Section binaire (points) |
… |
… |
Section binaire (image) |
Section XML |
En-tête E57
L’en-tête E57 est une petite structure binaire de 48 octets qui contient des informations critiques au niveau du fichier, telles que le numéro de version et l’emplacement de la section XML. Il peut être représenté par programmation comme suit.
struct E57FileHeader {
char fileSignature[8];
uint32_t majorVersion;
uint32_t minorVersion;
uint64_t filePhysicalLength;
uint64_t xmlPhysicalOffset;
uint64_t xmlLogicalLength;
uint64_t pageSize;
}
Hiérarchie XML
La section XML d’un fichier E57 décrit la hiérarchie arborescente à l’aide d’un sous-ensemble de XML standard. Ceci est basé sur huit types d’éléments E57 où chaque élément est construit à l’aide d’un ensemble de blocs de construction de base. Cinq de ces éléments E57 sont de type terminal et trois d’entre eux sont non terminaux.
Types de terminaux
Integer
- entier signé jusqu’à 63 bits de taille
Float
- stocke un nombre à virgule flottante simple ou double précision au format IEEE 754-1985
ScaledInteger
- Stocke un nombre avec une partie fractionnaire sous forme d’entier avec une échelle et un décalage
String
- Stocke les données textuelles encodées en UTF-8 et prend en charge les caractères internationaux
Blob
- Stocke un bloc opaque de données binaires qui est interprété par le lecteur en fonction du contexte.
Types non terminaux
Structure
- Contient un ensemble non ordonné d’éléments E57 de tout type. Une structure E57 est analogue à une structure du langage de programmation C.
Vector
- Contient une liste ordonnée d’éléments de type sensiblement identique. Un indicateur dans l’élément permet aux éléments d’être restreints pour être exactement identiques si vous le souhaitez.
CompressedVector
- Contient une liste ordonnée d’éléments de type identique, qui sont compressés au format binaire. Comme pour le type de données Blob, la représentation d’un CompressedVector est divisée en une partie XML et une partie binaire.