Zonkod разработан как простой, быстрый и универсальный. Но за ним скрывается множество технологий. Давайте разберемся!

Земля разделена ровно на 10 000 поверхностей с аналогичной точностью. Примерное представление о том, как работает Zonkod.

Несколько лет назад, во время путешествия, я попытался ввести географические координаты ресторана в навигационную систему дорогого автомобиля. Несмотря на то, что я инженер с докторской степенью, я пятнадцать минут безуспешно пытался это сделать.
В тот момент я понял, что существует реальная, нерешенная проблема. Надеюсь, мне все-таки удалось поужинать в тот вечер ;)

Это и было ТО САМОЕ решение: географический телефонный номер: простой в наборе, универсальный, понятный каждому на Земле.
Однако разделить сферу ровно на 100 000 000 000 000 одинаковых поверхностей — задача крайне сложная. На самом деле, это невозможно.

Затем пришла вторая замечательная идея: забудьте об идентичных поверхностях и сосредоточьтесь на том, что действительно важно: точности.
Возьмите какое-нибудь местоположение. Закодируйте его координаты в число, а затем декодируйте это число обратно в новое местоположение. Единственное, что имеет значение, это то, чтобы эти два местоположения находились не слишком далеко друг от друга. Точность всей системы определяется максимальным расстоянием между ними в худшем случае. Это единственное, что имеет значение!
Кроме того, он должен был быть простым и узнаваемым с первого взгляда, отсюда и одинарная точность и ведущий ZK:.

Ещё одним ограничением является простота кодирования и декодирования, а также полная воспроизводимость. Каждая система (от крошечного встроенного IoT-устройства до мобильного телефона, настольного компьютера или мэйнфрейма) должна всегда давать абсолютно одинаковый результат.
Но компьютеры обладают конечной точностью. Для научных и технических вычислений они используют так называемые числа с плавающей запятой. Они также обязательны при использовании тригонометрии или других экзотических функций. К сожалению, существует множество различных систем, языков программирования и библиотек, и все они имеют незначительные различия между собой. Кроме того, системы с плавающей запятой либо медленные, либо дорогие, либо и то, и другое.
Итак: никакой тригонометрии, никаких чисел с плавающей запятой, только целочисленная арифметика, потому что это единственное детерминированное решение.
Разработка такой системы заняла много времени, но в итоге она была успешной. Результатом, доступным сегодня, является Zonkod. На эту технологию подана заявка на патент. Одна из её ключевых целей — установить стандарт, гарантируя существование только одного ZK:, без дальнейших «войн форматов».
Мы можем рассчитать максимально возможную теоретическую точность для заданной длины числа. Для 14 цифр она составляет 1,5969 м. Кодировка Zonkod практически идеальна: её точность составляет 1,5988 м, или 99,9% от оптимальной. Везде. Это важно, потому что это максимизирует полезность каждой цифры.

Zonkod реализовано во многих различных языках, включая C, JavaScript, WASM, FORTRAN и Python. Все они дают абсолютно одинаковый результат, вплоть до последней цифры.
Его даже перенесли на COBOL, язык, разработанный в 1959 году для бухгалтерского учета, который изначально не предназначался для геодезических вычислений. И тем не менее, он работает. Если Zonkod работает в COBOL, он будет работать где угодно.

Скорость и компактность также имеют значение.
На Arduino Nano (8-битный ATmega328P, 16 МГц) полная программа кодирования и декодирования без операционной системы (включая ввод/вывод и генератор псевдослучайных чисел) занимает 11 956 байт ПЗУ и 192 байта ОЗУ.
В среднем, полный цикл передачи данных занимает 1,48 мс. На мобильном телефоне или компьютере это занимает всего несколько наносекунд.
Zonkod превращает сложную геометрическую задачу в простую целочисленную операцию. В результате получается код местоположения, достаточно компактный для 8-битного микроконтроллера, достаточно быстрый для работы на любой системе, достаточно точный для повседневного использования и идентичный на любом устройстве на Земле. Одно число, один стандарт, один ZK:.