Formato dell'algoritmo polilinea codificato

La codifica polilinea è un algoritmo di compressione con perdita di dati che ti consente di archiviare una serie di coordinate come una singola stringa. Le coordinate dei punti sono codificate utilizzando valori firmati. Se hai solo pochi punti statici, puoi anche utilizzare l'utilità di codifica polilinea interattiva.

Il processo di codifica converte un valore binario in una serie di codici di caratteri per i caratteri ASCII utilizzando lo schema di codifica Base64: per garantire una corretta visualizzazione di questi caratteri, i valori codificati vengono sommati con 63 (il carattere ASCII '?') prima di convertirli in ASCII. L'algoritmo controlla anche la presenza di codici di caratteri aggiuntivi per un determinato punto controllando il bit meno significativo di ogni gruppo di byte. Se questo bit è impostato su 1, il punto non è ancora completamente formato e devono essere seguiti altri dati.

Inoltre, per risparmiare spazio, i punti includono solo l'offset rispetto al punto precedente (fatta eccezione per il primo punto). Tutti i punti sono codificati in Base64 come numeri interi con firma, dato che le latitudini e le longitudini sono valori firmati. Il formato di codifica all'interno di una polilinea deve rappresentare due coordinate che rappresentano la latitudine e la longitudine con una precisione ragionevole. Data una longitudine massima di +/- 180 gradi con una precisione di 5 cifre decimali (da 180,00000 a -180,00000), è necessario un valore intero binario con firma a 32 bit.

Tieni presente che la barra rovesciata viene interpretata come un carattere di escape all'interno dei valori letterali stringa. Qualsiasi output di questa utilità deve convertire i caratteri barra rovesciata in due barre rovesciate nei valori letterali stringa.

I passaggi per la codifica di tale valore firmato sono specificati di seguito.

  1. Prendi il valore firmato iniziale:
    -179.9832104
  2. Prendi il valore decimale e moltiplicalo per 1e5, arrotondando il risultato:
    -17998321
  3. Converti il valore decimale in binario. Tieni presente che un valore negativo deve essere calcolato utilizzando il relativo integratore invertendo il valore binario e aggiungendone uno al risultato:
    00000001 00010010 10100001 11110001
    11111110 11101101 0101010101010101010101011
  4. Sposta verso sinistra il valore binario di un bit:
    11111101 11011010 10111100 00011110
  5. Se il valore decimale originale è negativo, inverti questa codifica:
    00000010 00100101 01000011 11100001
  6. Suddividi il valore binario in blocchi da 5 bit (a partire dal lato destro):
    00001 00010 01010 10000 11111 00001
  7. Posiziona i blocchi da 5 bit in ordine inverso:
    00001 11111 10000 01010 00010 00001
  8. O ciascun valore con 0 x 20 se segue un altro blocco di bit:
    100001 111111 110000 101010 100010 000001
  9. Converti ciascun valore in decimale:
    33 63 48 42 34 1
  10. Aggiungi 63 a ciascun valore:
    96 126 111 105 97 64
  11. Converti ciascun valore nell'equivalente ASCII:
    `~oia@

La tabella seguente mostra alcuni esempi di punti codificati, che mostrano le codifiche come una serie di offset da punti precedenti.

Esempio

Punti: (38,5, -120,2), (40,7, -120,95), (43,252, -126,453)

Latitudine Longitudine Latitudine E5 Longitudine in E5 Variazione della latitudine Variazione della longitudine Latitudine codificata Longitudine codificata Punto codificato
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`@

Polilinea codificata: _p~iF~ps|U_ulLnnqC_mqNvxq`@