Algorithmusformat für codierte Polylinien

Die Polyliniencodierung ist ein verlustbehafteter Komprimierungsalgorithmus, mit dem Sie eine Reihe von -Koordinaten als einzelne Zeichenfolge. Punktkoordinaten werden mit Werten mit Vorzeichen codiert. Wenn Sie nur wenige statische Punkte haben, können Sie auch die interaktive Codierungs-Dienstprogramm für Polylinien an.

Der Codierungsprozess wandelt einen Binärwert in eine Reihe von Zeichencodes für ASCII-Zeichen unter Verwendung des vertrauten base64-Codierungsschemas: für eine ordnungsgemäße Anzeige Die codierten Werte werden mit 63 addiert (das ASCII-Zeichen '?') bevor sie in ASCII konvertiert werden. Der Algorithmus sucht auch nach weiteren Zeichencodes für einen bestimmten Punkt, indem das niedrigstwertige Bit von jedem Punkt geprüft wird byte group; Wenn dieses Bit auf 1 gesetzt ist, ist der Punkt noch nicht vollständig gebildet und müssen zusätzliche Daten folgen.

Um Platz zu sparen, enthalten die Punkte außerdem nur den Versatz vom vorherigen Punkt mit Ausnahme des ersten Punkts. Alle Punkte sind codiert in Base64 als vorzeichenbehaftete Ganzzahlen, da Breiten- und Längengrade Werte mit Vorzeichen sind. Das Codierungsformat innerhalb einer Polylinie muss zwei Koordinaten darstellen Breiten- und Längengrad mit angemessener Genauigkeit darstellen. Mit einem Höchstwert Längengrad von +/- 180 Grad mit einer Genauigkeit von 5 Dezimalstellen (180,00000 bis -180,00000) ergibt, ist ein 32-Bit-Zeichen binärer ganzzahliger Wert.

Der umgekehrte Schrägstrich wird als Escape-Zeichen interpretiert. innerhalb von String-Literalen. Bei der Ausgabe dieses Dienstprogramms sollte der umgekehrte Schrägstrich konvertiert werden. Zeichen in doppelte umgekehrte Schrägstriche innerhalb von Stringliteralen.

Die Schritte zur Codierung eines solchen Werts mit Vorzeichen sind nachfolgend beschrieben.

  1. Verwende den vorzeichenbehafteten Wert:
    -179.9832104
  2. Multipliziere den Dezimalwert mit 1e5 und runden das Ergebnis:
    -17998321
  3. Wandeln Sie den Dezimalwert in einen Binärwert um. Beachten Sie, dass ein negativer Wert berechnet anhand seiner Zweierkomplement durch Umkehrung des Binärwerts und Addition von 1 zum Ergebnis:
    00000001 00010010 10100001 11110001
    11111110 11101101 01011110 00001110
    11111110 11101101 01011110 00001111
    
  4. Verschieben Sie den Binärwert um ein Bit nach links:
    11111101 11011010 10111100 00011110
  5. Wenn der ursprüngliche Dezimalwert negativ ist, kehre diese Codierung um:
    00000010 00100101 01000011 11100001
  6. Teilen Sie den Binärwert in 5-Bit-Blöcke auf (beginnen Sie auf der rechten Seite):
    00001 00010 01010 10000 11111 00001
  7. Platziere die 5-Bit-Blöcke in umgekehrter Reihenfolge:
    00001 11111 10000 01010 00010 00001
  8. ODER jeden Wert mit 0x20, wenn ein weiterer Bit-Block folgt:
    100001 111111 110000 101010 100010 000001
  9. Konvertieren Sie jeden Wert in einen Dezimalwert:
    33 63 48 42 34 1
  10. Addieren Sie zu jedem Wert 63:
    96 126 111 105 97 64
  11. Konvertieren Sie jeden Wert in seine ASCII-Entsprechung:
    `~oia@

Die folgende Tabelle enthält einige Beispiele für codierte Punkte, wobei die Codierungen als eine Reihe von Offsets von vorherigen Punkten.

Beispiel

Punkte: (38.5, -120.2), (40.7, -120.95), (43.252, -126.453)

Breitengrad Längengrad Breitengrad in E5 Längengrad in E5 Änderung des Breitengrades Änderung des Längengrades Codierter Breitengrad Codierter Längengrad Codierter Punkt
38.5 -120.2 3850000 -12020000 +3850000 -12020000 _p~iF ~ps|U _p~iF~ps|U
40.7 -120.95 4070000 -12095000 +220000 -75000 _ulL nnqC _ulLnnqC
43.252 -126.453 4325200 -12645300 +255200 -550300 _mqN vxq`@ _mqNvxq`@

Codierte Polylinie: _p~iF~ps|U_ulLnnqC_mqNvxq`@