Formato dell'algoritmo polilinea codificato

La codifica polilinea è un algoritmo di compressione con perdita di dati che consente di archiviare una serie come una singola stringa. Le coordinate dei punti sono codificate utilizzando valori con segno. Se hai solo pochi punti statici, potresti anche usare lo strumento interattivo utilità di codifica delle polilinee.

Il processo di codifica converte un valore binario in una serie di codici di caratteri per Caratteri ASCII che utilizzano lo schema di codifica Base64 familiare per garantire una visualizzazione corretta 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 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 seguire altri dati.

Inoltre, per risparmiare spazio, i punti includono solo l'offset punto precedente (tranne, ovviamente, il primo punto). Tutti i punti sono codificati in Base64 come numeri interi firmati, mentre latitudini e 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. Dato un valore massimo longitudine di +/- 180 gradi a una precisione di 5 cifre decimali (da 180,00000 a -180,00000), ciò comporta la necessità di un token un valore intero binario.

Tieni presente che la barra rovesciata è interpretata come un carattere di escape all'interno dei valori letterali stringa. Qualsiasi output di questa utilità deve convertire la barra rovesciata alle doppie barre rovesciate all'interno dei valori letterali stringa.

I passaggi per la codifica di questo valore con segno 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 la sua funzione il complemento di due invertendo il valore binario e aggiungendo uno al risultato:
    00000001 00010010 10100001 11110001
    11111110 11101101 01011110 00001110
    11111110 11101101 01011110 00001111
    
  4. Sposta il valore binario di un bit a sinistra:
    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 a 5 bit in ordine inverso:
    00001 11111 10000 01010 00010 00001
  8. OPPURE ogni valore con 0x20 se segue un altro blocco di bit:
    100001 111111 110000 101010 100010 000001
  9. Converti ogni valore in decimale:
    33 63 48 42 34 1
  10. Aggiungi 63 a ciascun valore:
    96 126 111 105 97 64
  11. Converti ogni valore nel relativo equivalente ASCII:
    `~oia@

La tabella seguente mostra alcuni esempi di punti codificati, che mostrano le 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 in E5 Longitudine in E5 Variazione di latitudine Variazione di 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`@