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
构造精确:销钉落在整数交叉点上。

另一个限制因素是编码和解码的便捷性以及完全可复现性。每个系统(从微型嵌入式物联网设备到手机、台式电脑或大型机)都必须始终给出完全相同的结果。

但计算机的精度是有限的。在科学和技术计算中,计算机使用所谓的浮点数。使用三角函数或其他特殊函数时,浮点数也是必不可少的。不幸的是,浮点系统、编程语言和库种类繁多,彼此之间只有细微的差别。此外,浮点系统要么速度慢,要么成本高,或者两者兼而有之。

所以:不使用三角函数,不使用浮点运算,只使用整数运算,因为这是唯一确定性的解决方案。

单一标准。没有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 语言上,COBOL 是一种 1959 年为商业会计而设计的语言,最初并非用于处理测地线计算。然而,它却能正常运行。如果 Zonkod 能在 COBOL 中运行,那么它就能在任何地方运行。

小巧、快速、无处不在

Arduino Nano running Zonkod
一个运行 Zonkod 的微型 Arduino Nano

速度和紧凑性也很重要。

在 Arduino Nano(8 位 ATmega328P,16 MHz)上,一个完整的裸机编码+解码程序(包括 I/O 和伪随机数生成器)需要 11,956 字节的 ROM 和 192 字节的 RAM。

它的平均往返时间仅为 1.48 毫秒。在手机或台式机上,时间更是缩短到了纳秒级。

底线

Zonkod 将一个复杂的几何问题转化为一个简单的整数运算。其结果是生成的位置代码,它足够紧凑,适用于 8 位微控制器;速度足够快,可以在任何系统上运行;精度足够高,可以满足日常使用;并且在地球上的每个设备上都完全相同。一个数字,一个标准,一个 ZK:。