Tệp E57 là gì?
Tệp có phần mở rộng .e57 là định dạng tệp nhỏ gọn, trung lập với nhà cung cấp được sử dụng để lưu trữ và trao đổi dữ liệu hình ảnh ba chiều (3D) chẳng hạn như đám mây điểm, hình ảnh và siêu dữ liệu. Dữ liệu như vậy thường được tạo bằng các hệ thống như máy quét laze. Nó được phát triển bởi tiểu ban Khả năng tương tác dữ liệu của Ủy ban ATSM E57 về Hệ thống hình ảnh 3D. E57 là mã nguồn mở và lưu trữ dữ liệu điểm 3D, các thuộc tính của nó (chẳng hạn như màu sắc và cường độ) và hình ảnh 2D được chụp bởi hệ thống hình ảnh 3D.
Định dạng tệp E57
Thông số kỹ thuật định dạng tệp E57 có sẵn tại trang web ATSM và có thể được tham khảo để nhà phát triển tham khảo. Tài liệu khái niệm và chi tiết kỹ thuật của định dạng tệp E57 có sẵn dưới dạng tài liệu tham khảo của Daniel Huber. Dữ liệu trong tệp E57 được lưu trong cấu trúc cây phân cấp dựa trên XML như trong hình dưới đây. Ở mức thấp, các tệp E57 được lưu dưới dạng tệp nhị phân được nén để làm cho kích thước tệp nhỏ gọn.
Cấu trúc tệp E57
Cấu trúc của tệp E57 như trong bảng sau.
Cấu trúc tệp |
---|
Tiêu đề |
Phần nhị phân (điểm) |
Phần nhị phân (điểm) |
… |
… |
Phần nhị phân (hình ảnh) |
phần XML |
Tiêu đề E57
Tiêu đề E57 là một cấu trúc nhị phân nhỏ, 48 byte chứa thông tin cấp tệp quan trọng, chẳng hạn như số phiên bản và vị trí của phần XML. Nó có thể được đại diện một cách thuận tiện như sau.
struct E57FileHeader {
char fileSignature[8];
uint32_t majorVersion;
uint32_t minorVersion;
uint64_t filePhysicalLength;
uint64_t xmlPhysicalOffset;
uint64_t xmlLogicalLength;
uint64_t pageSize;
}
Phân cấp XML
Phần XML của tệp E57 mô tả cấu trúc phân cấp dạng cây bằng cách sử dụng một tập hợp con của XML tiêu chuẩn. Điều này dựa trên tám loại phần tử E57 trong đó mỗi phần tử được xây dựng bằng cách sử dụng một tập hợp các khối xây dựng cốt lõi. Năm trong số các phần tử E57 này là loại thiết bị đầu cuối và ba trong số này không phải là thiết bị đầu cuối.
Loại thiết bị đầu cuối
Số nguyên
- số nguyên có dấu có kích thước tối đa 63 bit
Float
- lưu trữ một số dấu phẩy động chính xác đơn hoặc kép ở định dạng IEEE 754-1985
ScaledInteger
- Lưu trữ một số có phần phân số dưới dạng số nguyên cùng với tỷ lệ và phần bù
String
- Lưu trữ dữ liệu văn bản dưới dạng mã hóa UTF-8 và hỗ trợ các ký tự quốc tế
Blob
- Lưu trữ một khối dữ liệu nhị phân không rõ ràng được trình đọc diễn giải tùy thuộc vào ngữ cảnh.
Các loại không phải đầu cuối
Structure
- Chứa một tập hợp các phần tử E57 không có thứ tự thuộc bất kỳ loại nào. Cấu trúc E57 tương tự như cấu trúc trong ngôn ngữ lập trình C.
Vector
- Chứa một danh sách được sắp xếp theo thứ tự các mục được nhập giống hệt nhau. Một cờ trong phần tử cho phép các mục bị hạn chế được nhập chính xác giống hệt nhau nếu muốn.
CompressedVector
- Chứa một danh sách có thứ tự các mục được nhập giống hệt nhau, được nén ở định dạng nhị phân. Giống như kiểu dữ liệu Blob, biểu diễn của CompressedVector được chia thành phần XML và phần nhị phân.