.E57 вариант №
Файл с расширением .e57 представляет собой компактный, независимый от поставщика формат файла, который используется для хранения и обмена данными трехмерных (3D) изображений, таких как облака точек, изображения и метаданные. Такие данные часто создаются с помощью таких систем, как лазерные сканеры. Он был разработан подкомитетом по совместимости данных комитета ATSM E57 по системам трехмерной визуализации. E57 является открытым исходным кодом и хранит данные 3D-точек, их атрибуты (такие как цвет и интенсивность) и 2D-изображения, полученные системой 3D-изображения.
Формат файла E57
Спецификации формата файла E57 доступны на веб-сайте ATSM и могут использоваться для справки разработчика. Концептуальный документ и технические детали формата файла E57 доступны в качестве справочного материала Daniel Huber. Данные в файле E57 сохраняются в иерархической древовидной структуре на основе XML, как показано на следующем рисунке. На низком уровне файлы E57 сохраняются как сжатые двоичные файлы, чтобы уменьшить размер файла.
Структура файла E57
Структура файла E57 показана в следующей таблице.
Структура файла |
---|
Заголовок |
Двоичный раздел (точки) |
Двоичный раздел (точки) |
… |
… |
Двоичный раздел (изображение) |
Раздел XML |
E57 Заголовок
Заголовок E57 представляет собой небольшую 48-байтовую двоичную структуру, содержащую важную информацию на уровне файлов, такую как номер версии и расположение раздела XML. Прогаматически это можно представить следующим образом.
struct E57FileHeader {
char fileSignature[8];
uint32_t majorVersion;
uint32_t minorVersion;
uint64_t filePhysicalLength;
uint64_t xmlPhysicalOffset;
uint64_t xmlLogicalLength;
uint64_t pageSize;
}
XML-иерархия
Раздел XML файла E57 описывает древовидную иерархию, используя подмножество стандартного XML. Это основано на восьми типах элементов E57, где каждый элемент создается с использованием набора основных строительных блоков. Пять из этих элементов E57 относятся к терминальным типам, а три из них — к неконцевым.
Типы терминалов
Integer
- целое число со знаком размером до 63 бит.
Float
- хранит число с плавающей запятой одинарной или двойной точности в формате IEEE 754-1985.
ScaledInteger
— сохраняет число с дробной частью в виде целого числа вместе со шкалой и смещением.
String
— хранит текстовые данные в кодировке UTF-8 и поддерживает международные символы.
Blob
— хранит непрозрачный блок двоичных данных, который интерпретируется читателем в зависимости от контекста.
Нетерминальные типы
«Структура» — содержит неупорядоченный набор элементов E57 любого типа. Структура E57 аналогична структуре языка программирования C.
«Вектор» — содержит упорядоченный список элементов практически одинакового типа. Флаг в элементе позволяет ограничить элементы, чтобы они были точно идентичными, если это необходимо.
CompressedVector
— содержит упорядоченный список элементов идентичного типа, сжатых в двоичном формате. Как и в случае с типом данных Blob, представление CompressedVector разделено на часть XML и двоичную часть.