用打表的方式解决求Geohash当前区域周围8个区域编码

两个多月前写了上一篇计算周围8个格子编码的文章,实际用时发现效率不高,因为每次计算都需要先解码成二进制串算完再进行编码。后来在github上发现一个js项目,用打表的方法来求周围8个格子,效率提高了不少。这里写一点自己的理解。

拿”wx4g”这个geohash来看,解码成二进制串就是 11100 11101 00100 01111 。单独看’w’,也就是 11100,按照编码的顺序,就是 “右 上 右 下 左”,这样就确定了一个坐标的大概范围,然后第二位’x’在第一次确定的范围内按照”上 右 上 左 上”的顺序确定一个更小的范围。如此进行下去直到编码结束就能把一个坐标确定在一个很小的范围内。因此,geohash实际上就是将大方格划分成32个小方格,再将每一个个小方格划分成更小的32个小方格的过程。

我们发现,对于geohash中奇数位的字符(’w’,’4’),它们的编码是按照”经 纬 经 纬 经”的顺序,而偶数为字符(’x’,’g’)则是按照”纬 经 纬 经 纬”的顺序。

所以,我们很容易确定base32编码时每一个字符对应的方格的位置。

对于奇数位字符:

 b  c  f  g  u  v  y  z
 8  9  d  e  s  t  w  x
 2  3  6  7  k  m  q  r
 0  1  4  5  h  j  n  p

对于偶数位字符:

 p  r  x  z
 n  q  w  y
 j  m  t  v  
 h  k  s  u
 5  7  e  g
 4  6  d  f
 1  3  9  c
 
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值