¿Qué es un archivo E57?
Un archivo con la extensión .e57 es un formato de archivo compacto e independiente del proveedor que se utiliza para almacenar e intercambiar datos de imágenes tridimensionales (3D), como nubes de puntos, imágenes y metadatos. Dichos datos a menudo se crean con sistemas como escáneres láser. Fue desarrollado por el subcomité de interoperabilidad de datos del Comité ATSM E57 sobre sistemas de imágenes 3D. E57 es de código abierto y almacena datos de puntos 3D, sus atributos (como color e intensidad) e imágenes 2D capturadas por el sistema de imágenes 3D.
Formato de archivo E57
Las especificaciones del formato de archivo E57 están disponibles en el sitio web de ATSM y se pueden consultar para referencia del desarrollador. El documento conceptual y los detalles técnicos del formato de archivo E57 están disponibles como material de referencia de Daniel Huber. Los datos en un archivo E57 se guardan en una estructura de árbol jerárquico basada en XML, como se muestra en la siguiente imagen. A bajo nivel, los archivos E57 se guardan como archivos binarios comprimidos para que el tamaño del archivo sea compacto.
Estructura del archivo E57
La estructura de un archivo E57 es como se muestra en la siguiente tabla.
Estructura de archivos |
---|
Encabezado |
Sección binaria (puntos) |
Sección binaria (puntos) |
… |
… |
Sección binaria (imagen) |
Sección XML |
Encabezado E57
El encabezado E57 es una pequeña estructura binaria de 48 bytes que contiene información crítica a nivel de archivo, como el número de versión y la ubicación de la sección XML. Se puede representar programáticamente de la siguiente manera.
struct E57FileHeader {
char fileSignature[8];
uint32_t majorVersion;
uint32_t minorVersion;
uint64_t filePhysicalLength;
uint64_t xmlPhysicalOffset;
uint64_t xmlLogicalLength;
uint64_t pageSize;
}
Jerarquía XML
La sección XML de un archivo E57 describe la jerarquía del árbol utilizando un subconjunto de XML estándar. Esto se basa en ocho tipos de elementos E57 donde cada elemento se construye utilizando un conjunto de bloques de construcción básicos. Cinco de estos elementos E57 son de tipo terminal y tres de ellos no son terminales.
Tipos de terminales
Integer
- entero con signo de hasta 63 bits de tamaño
Float
: almacena un número de punto flotante de precisión simple o doble en formato IEEE 754-1985
ScaledInteger
: almacena un número con una parte fraccionaria como un entero junto con una escala y un desplazamiento
String
: almacena datos de texto codificados en UTF-8 y admite caracteres internacionales
Blob
: almacena un bloque opaco de datos binarios que el lector interpreta según el contexto.
Tipos no terminales
Estructura
: contiene un conjunto desordenado de elementos E57 de cualquier tipo. Una estructura E57 es análoga a una estructura en el lenguaje de programación C.
Vector
: contiene una lista ordenada de elementos escritos sustancialmente de forma idéntica. Una bandera en el elemento permite que los elementos se restrinjan para que se escriban de forma exactamente idéntica si se desea.
CompressedVector
: contiene una lista ordenada de elementos con tipos idénticos, que están comprimidos en formato binario. Al igual que con el tipo de datos Blob, la representación de un CompressedVector se divide en una parte XML y una parte binaria.