返回

Geohash 编码解码

RESULT

wx4g0bm6

工具介绍

Geohash 用一条由数字和小写字母组成的字符串表示一块矩形区域,字符串越长,格子越小。邻近的地点往往有相同前缀,所以它常被用来做粗略的附近搜索和缓存分桶。这个页面可以编码,也可以把编码解成格子中心。

编码从经度范围 −180 到 180、纬度范围 −90 到 90 开始,按「经度、纬度、经度、纬度」交替对半切。点落在右半或上半记 1,否则记 0。每 5 个比特换成标准 Base32 字母表 0123456789bcdefghjkmnpqrstuvwxyz(没有 a、i、l、o)。精度滑块是字符数,1 到 12。解码按同样顺序把区间收窄,结果取区间中点。页面上的「±」后面打印的是整个区间的宽度,不是中心到边界的一半。

计算示例

  1. 输入:纬度 39.9042,经度 116.4074,精度 8

    输出:wx4g0bm6

  2. 输入:同一点,精度 5

    输出:wx4g0。它是 8 位结果的前缀

  3. 输入:解码 wx4g0bm6

    输出:中心 39.904146, 116.407528;纬度区间宽 0.000172°,经度区间宽 0.000343°

使用限制

  • 解码得到的是格子中心,不是编码前的原始坐标。39.9042 编出来再解,中心是 39.904146 和 116.407528。
  • 字母表里没有 a、i、l、o。输入这些字符会解不出来。
  • 页面把区间全宽标成 ±。真正到边界的距离大约是显示数字的一半。

常见错误

  • 纬度和经度填反。北京的纬度约 40,经度约 116。
  • 把精度当成米。8 个字符大约是百米量级的格子,具体宽高随纬度变化。
  • 用 Geohash 前缀判断「一定在多少米内」。格子是矩形,跨格子边界的两点距离可以很近,前缀却不同。

常见问题

和坐标系转换是一回事吗?▾
不是。这里假定你输入的经纬度已经是你想要的那套坐标,它只做字符串编码,不会在 WGS84 和 GCJ02 之间加偏。
大小写有区别吗?▾
解码前会转成小写。编码结果一律是小写。
精度选多少?▾
城市级常用 4 到 5 位,街道级常用 6 到 7 位,8 位已经接近单独一栋楼的范围。

相关工具