Zonkod logo Zonkod
←
Технологии

На первый взгляд все просто. Но на самом деле все гораздо глубже.

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

Zonkod technology overview

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

Источник вдохновения

An old GPS device on a car dashboard at sunset
Пятнадцать минут, безрезультатно. Проблема была реальной.

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

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

Первая идея: географический номер телефона.

A rotary dial whose digits beam down to a place on Earth
Наберите номер места, как набираете номер телефона.

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

Однако разделить сферу ровно на 100 000 000 000 000 одинаковых поверхностей — задача крайне сложная. На самом деле, это невозможно.

Вторая идея: точность важнее совершенства.

A caliper measuring a small globe, pin at the measured point
Земля, измеренная как деталь механизма.

Затем пришла вторая замечательная идея: забудьте об идентичных поверхностях и сосредоточьтесь на том, что действительно важно: точности.

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

Кроме того, он должен был быть простым и узнаваемым с первого взгляда, отсюда и одинарная точность и ведущий ZK:.

Никакой тригонометрии. Никаких чисел с плавающей запятой. Никогда.

A glowing integer grid with the ZK pin on an exact intersection
Точность по определению: штифт останавливается на пересечении целых чисел.

Ещё одним ограничением является простота кодирования и декодирования, а также полная воспроизводимость. Каждая система (от крошечного встроенного IoT-устройства до мобильного телефона, настольного компьютера или мэйнфрейма) должна всегда давать абсолютно одинаковый результат.

Но компьютеры обладают конечной точностью. Для научных и технических вычислений они используют так называемые числа с плавающей запятой. Они также обязательны при использовании тригонометрии или других экзотических функций. К сожалению, существует множество различных систем, языков программирования и библиотек, и все они имеют незначительные различия между собой. Кроме того, системы с плавающей запятой либо медленные, либо дорогие, либо и то, и другое.

Итак: никакой тригонометрии, никаких чисел с плавающей запятой, только целочисленная арифметика, потому что это единственное детерминированное решение.

Один стандарт. Нет различий между VHS и Betamax.

Разработка такой системы заняла много времени, но в итоге она была успешной. Результатом, доступным сегодня, является Zonkod. На эту технологию подана заявка на патент. Одна из её ключевых целей — установить стандарт, гарантируя существование только одного ZK:, без дальнейших «войн форматов».

Практически идеальная точность

Мы можем рассчитать максимально возможную теоретическую точность для заданной длины числа. Для 14 цифр она составляет 1,5969 м. Кодировка Zonkod практически идеальна: её точность составляет 1,5988 м, или 99,9% от оптимальной. Везде. Это важно, потому что это максимизирует полезность каждой цифры.

1.5988 m
фактическая точность
1.5969 m
теоретический оптимум
99.9%
оптимального

Проверено на разных платформах

Devices from phone to retro computer sharing the same ZK pin
Результат одинаков на всех машинах, вплоть до последней цифры.

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

Его даже перенесли на COBOL, язык, разработанный в 1959 году для бухгалтерского учета, который изначально не предназначался для геодезических вычислений. И тем не менее, он работает. Если Zonkod работает в COBOL, он будет работать где угодно.

Крошечные, быстрые, повсюду

Arduino Nano running Zonkod
Миниатюрный Arduino Nano, работающий под управлением Zonkod

Скорость и компактность также имеют значение.

На Arduino Nano (8-битный ATmega328P, 16 МГц) полная программа кодирования и декодирования без операционной системы (включая ввод/вывод и генератор псевдослучайных чисел) занимает 11 956 байт ПЗУ и 192 байта ОЗУ.

В среднем, полный цикл передачи данных занимает 1,48 мс. На мобильном телефоне или компьютере это занимает всего несколько наносекунд.

Итог

Zonkod превращает сложную геометрическую задачу в простую целочисленную операцию. В результате получается код местоположения, достаточно компактный для 8-битного микроконтроллера, достаточно быстрый для работы на любой системе, достаточно точный для повседневного использования и идентичный на любом устройстве на Земле. Одно число, один стандарт, один ZK:.