什么是 E57 文件?
扩展名为 .e57 的文件是一种紧凑的、供应商中立的文件格式,用于存储和交换三维 (3D) 成像数据,例如点云、图像和元数据。此类数据通常由激光扫描仪等系统创建。它由 ATSM E57 3D 成像系统委员会的数据互操作性小组委员会开发。 E57 是开源的,可存储 3D 点数据、其属性(例如颜色和强度)以及 3D 成像系统捕获的 2D 图像。
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 层次结构
E57 文件的 XML 部分使用标准 XML 的子集描述树层次结构。这是基于八种 E57 元素类型,其中每个元素都是使用一组核心构建块构建的。这些 E57 元件中有五个是终端类型,其中三个是非终端类型。
终端类型
Integer
- 有符号整数,最大 63 位
Float
- 以 IEEE 754-1985 格式存储单精度或双精度浮点数
ScaledInteger
- 将带有小数部分的数字与比例和偏移量一起存储为整数
String
- 将文本数据存储为 UTF-8 编码并支持国际字符
Blob
- 存储一个不透明的二进制数据块,由阅读器根据上下文进行解释。
非终端类型
Structure
- 包含任何类型的无序 E57 元素集。 E57 结构类似于 C 编程语言中的结构。
Vector
- 包含基本相同类型项目的有序列表。如果需要,元素中的标志允许将项目限制为完全相同的类型。
CompressedVector
- 包含以二进制格式压缩的相同类型项目的有序列表。与 Blob 数据类型一样,CompressedVector 的表示形式分为 XML 部分和二进制部分。