Zonkod è progettato per essere semplice, veloce e universale. Ma dietro c'è molta tecnologia. Scopriamola insieme!

La Terra divisa in esattamente 10.000 superfici di precisione simile. Un'idea approssimativa di come funziona Zonkod.

Alcuni anni fa, durante un viaggio, ho provato a inserire le coordinate geografiche di un ristorante nel sistema di navigazione di un'auto di lusso. Nonostante fossi un ingegnere con un dottorato di ricerca, ho faticato per quindici minuti senza riuscirci.
In quel momento, ho capito che c'era un problema reale e irrisolto. Per fortuna, quella sera sono riuscito a cenare ;)

Quella era LA soluzione: un numero di telefono geografico: facile da comporre, universale, padroneggiato da chiunque sulla Terra.
Solo che è estremamente difficile dividere una sfera in esattamente 100.000.000.000.000 superfici identiche. Anzi, è impossibile.

Poi arrivò la seconda grande idea: dimenticatevi delle superfici identiche e concentratevi su ciò che conta davvero: la precisione.
Prendi una posizione. Codifica la sua posizione in un numero, poi decodifica quel numero per ottenere una nuova posizione. L'unica cosa che conta è che le due posizioni non siano troppo distanti tra loro. La precisione dell'intero sistema è data dalla massima distanza tra di esse nel caso peggiore. Questa è l'unica cosa che conta!
Doveva inoltre essere semplice e riconoscibile a prima vista, da qui la precisione singola e lo ZK: iniziale.

Un altro vincolo è la facilità di codifica e decodifica e la piena riproducibilità. Ogni sistema (da un minuscolo dispositivo IoT integrato a un telefono cellulare, un computer desktop o un mainframe) deve fornire sempre esattamente lo stesso risultato.
Ma i computer hanno una precisione finita. Per il calcolo scientifico e tecnico, si utilizzano i cosiddetti numeri in virgola mobile. Questi sono indispensabili anche quando si utilizzano la trigonometria o altre funzioni complesse. Sfortunatamente, esistono molti sistemi, linguaggi e librerie diversi, ognuno con minime differenze. Oltretutto, i sistemi in virgola mobile sono lenti, costosi o entrambi.
Quindi: niente trigonometria, niente numeri in virgola mobile, solo aritmetica intera, perché è l'unica soluzione deterministica.
Ci è voluto molto tempo per progettare un sistema del genere, ma alla fine ci si è riusciti. Il risultato, disponibile oggi, è Zonkod. È in corso la procedura di brevetto per questa tecnologia. Uno dei suoi obiettivi principali è quello di stabilire uno standard garantendo l'esistenza di un solo ZK:, senza più guerre di formato.
Possiamo calcolare la migliore precisione teorica possibile per una data lunghezza di numero. Per 14 cifre, è 1,5969 m. La codifica Zonkod è quasi perfetta: la sua precisione è 1,5988 m, ovvero il 99,9% dell'ottimo. Ovunque. Questo è importante perché massimizza l'utilità di ogni cifra.

Zonkod è stato implementato in molti linguaggi diversi, tra cui C, JavaScript, WASM, FORTRAN e Python. Tutti forniscono esattamente gli stessi risultati, fino all'ultima cifra.
È stato persino adattato al COBOL, un linguaggio progettato nel 1959 per la contabilità aziendale, che non era mai stato concepito per gestire calcoli geodetici. Eppure, funziona. Se Zonkod funziona in COBOL, funziona ovunque.

Anche la velocità e la compattezza sono importanti.
Su un Arduino Nano (ATmega328P a 8 bit, 16 MHz), un programma completo di codifica e decodifica bare-metal (inclusi I/O e un generatore di numeri pseudo-casuali) richiede 11.956 byte di ROM e 192 byte di RAM.
Raggiunge un ciclo completo di andata e ritorno in 1,48 ms in media. Su un telefono cellulare o un computer desktop, si scende ai nanosecondi.
Zonkod trasforma un difficile problema geometrico in una semplice operazione con numeri interi. Il risultato è un codice di posizione sufficientemente compatto per un microcontrollore a 8 bit, abbastanza veloce da funzionare su qualsiasi sistema, abbastanza preciso per l'uso quotidiano e identico su ogni dispositivo sulla Terra. Un numero, uno standard, un ZK:.