Co to jest plik E57?
Plik z rozszerzeniem .e57 to kompaktowy, niezależny od dostawcy format pliku, który służy do przechowywania i wymiany trójwymiarowych (3D) danych obrazowania, takich jak chmury punktów, obrazy i metadane. Takie dane są często tworzone za pomocą systemów takich jak skanery laserowe. Został opracowany przez podkomitet ds. interoperacyjności danych Komitetu ATSM E57 ds. systemów obrazowania 3D. E57 jest open source i przechowuje dane punktów 3D, ich atrybuty (takie jak kolor i intensywność) oraz obrazy 2D przechwycone przez system obrazowania 3D.
Format pliku E57
Specyfikacje formatu plików E57 są dostępne na stronie internetowej ATSM i można się do nich odnieść w celach informacyjnych dla programistów. Dokument koncepcyjny i szczegóły techniczne formatu pliku E57 są dostępne jako materiał referencyjny przez Daniel Huber. Dane w pliku E57 są zapisywane w hierarchicznej strukturze drzewa opartej na XML, jak pokazano na poniższym obrazku. Na niskim poziomie pliki E57 są zapisywane jako skompresowane pliki binarne, aby zmniejszyć rozmiar pliku.
Struktura pliku E57
Struktura pliku E57 jest przedstawiona w poniższej tabeli.
Struktura plików |
---|
Nagłówek |
Sekcja binarna (punkty) |
Sekcja binarna (punkty) |
… |
… |
Sekcja binarna (obraz) |
Sekcja XML |
Nagłówek E57
Nagłówek E57 to mała, 48-bajtowa struktura binarna, która zawiera krytyczne informacje na poziomie pliku, takie jak numer wersji i lokalizacja sekcji XML. Można to progamatycznie przedstawić w następujący sposób.
struct E57FileHeader {
char fileSignature[8];
uint32_t majorVersion;
uint32_t minorVersion;
uint64_t filePhysicalLength;
uint64_t xmlPhysicalOffset;
uint64_t xmlLogicalLength;
uint64_t pageSize;
}
Hierarchia XML
Sekcja XML pliku E57 opisuje hierarchię drzewa przy użyciu podzbioru standardowego XML. Opiera się to na ośmiu typach elementów E57, w których każdy element jest zbudowany przy użyciu zestawu podstawowych bloków konstrukcyjnych. Pięć z tych elementów E57 to typy terminali, a trzy z nich to nieterminale.
Typy terminali
Integer
- liczba całkowita ze znakiem o rozmiarze do 63 bitów
Float
- przechowuje liczbę zmiennoprzecinkową pojedynczej lub podwójnej precyzji w formacie IEEE 754-1985
ScaledInteger
— Przechowuje liczbę z częścią ułamkową jako liczbę całkowitą wraz ze skalą i przesunięciem
String
— przechowuje dane tekstowe w kodowaniu UTF-8 i obsługuje znaki międzynarodowe
Blob
— przechowuje nieprzejrzysty blok danych binarnych, który jest interpretowany przez czytelnika w zależności od kontekstu.
Typy nieterminalne
Struktura
— zawiera nieuporządkowany zestaw elementów E57 dowolnego typu. Struktura E57 jest analogiczna do struktury w języku programowania C.
Wektor
— zawiera uporządkowaną listę zasadniczo identycznie wpisanych elementów. Flaga w elemencie umożliwia ograniczenie elementów do dokładnie identycznego typu, jeśli jest to pożądane.
CompressedVector
— zawiera uporządkowaną listę identycznie wpisanych elementów, które są skompresowane w formacie binarnym. Podobnie jak w przypadku typu danych Blob, reprezentacja elementu CompressedVector jest podzielona na część XML i część binarną.