4 Stimmen

Besserer Komprimierungsalgorithmus für Vektordaten?

Ich muss einige räumlich korrelierte Datensätze komprimieren. Derzeit bekomme ich 1,2x-1,5x Kompression mit zlib, aber ich denke, es sollte möglich sein, mehr wie 2x zu bekommen. Die Datensätze haben verschiedene Felder, aber z.B. scheint zlib Probleme zu haben, Listen von Punkten zu komprimieren.

Die Punkte stellen ein Straßennetz dar. Sie sind Paare von 4-Byte-Festkommazahlen der Form XXXXYYYY. Wenn ein einzelner Datenblock 100 Punkte enthält, gibt es in der Regel nur wenige Kombinationen der oberen beiden Bytes von X und Y (räumliche Korrelation). Die unteren Bytes ändern sich jedoch ständig und müssen für zlib wie Zufallsdaten aussehen.

Ebenso haben die Datensätze 4-Byte-IDs, die in der Regel konstante High-Bytes und variable Low-Bytes haben.

Gibt es einen anderen Algorithmus, mit dem diese Art von Daten besser komprimiert werden kann? Ich verwende C++.

bearbeiten : Bitte keine weiteren Vorschläge zur Änderung der Daten selbst. Meine Frage bezieht sich auf automatische Kompressionsalgorithmen. Wenn jemand einen Link zu einer Übersicht über alle gängigen Kompressionsalgorithmen hat, werde ich das als Antwort akzeptieren.

0voto

Kirk Kuykendall Punkte 822

Sie möchten vielleicht zwei Listen in die komprimierte Datei schreiben: eine NodeList und eine LinkList . Jeder Knoten hätte eine ID, x, y. Jeder Link hätte einen FromNode und einen ToNode, zusammen mit einer Liste von Zwischenwerten für xy. Man könnte einen Header-Datensatz mit einem falschen Ursprung haben und die xy-Werte der Knoten relativ zu diesem haben.

Der größte Nutzen ergibt sich, wenn Ihre Straßen einem städtischen Netz folgen, denn dadurch werden doppelte Koordinaten an Kreuzungen .

Wenn die Komprimierung nicht verlustfrei sein muss, können Sie abgeschnittene Deltas für Zwischenkoordinaten verwenden. Während jemand oben Deltas erwähnte, ist zu beachten, dass ein Verlust an Konnektivität würde wahrscheinlich mehr Probleme verursachen als ein Verlust an Form Dies ist der Fall, wenn Sie abgeschnittene Deltas verwenden, um die letzte Koordinate einer Straße (die oft eine Kreuzung ist) darzustellen.

Auch hier gilt: Wenn Ihre Straßen nicht in einem städtischen Netz liegen, bringt Ihnen das wahrscheinlich nicht viel.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X