编号:TD-0x0006

标签:geohash; coding system; positions

什么是Geohash

Geohash是一种地理位置信息编码方法。 经过geohash映射后,地球上任意位置的经纬度坐标可以表示成一个较短的字符串。可以方便的存储在数据库中,附在邮件上,以及方便的使用在其他服务中。以北京的坐标举例,[39.928167,116.389550]可以转换成wx4g0s8q3jf9

Geohash 编码属性

  1. 如果去掉右边的若干字符,只会影响坐标精度,而不会改变指向的具体位置。
  2. 可以在 geohash.org 使用:http://geohash.org/wx4g0s8q3jf9
  3. 有相同前缀的字符表示的位置是相近的,但不同的前缀表示的位置也可能相近。

Picture1

根据Geohash的属性可以轻松实现搜周边的功能。匹配与自己位置有相同开头的地理位置即可。

如何计算Geohash

以[39.928167,116.389550]为例:

1. 将经纬度按二分查找转换为[01]串

39.928167 => 10111 00011

Picture2

116.389550 => 11010 01011

Picture3

2. 将经度生成的[01]串作为偶数位,维度的[01]串作为奇数位合并

10111 00011 + 11010 01011 => 11100 11101 00100 01111

3. 将合并后的串按照Base32转化成字符串

11100 11101 00100 01111 => 28 29 4 15

28 29 4 15 => [wx4g]

Picture4

最后得出 wx4g


Python 的源码可参考 https://github.com/uname-yang/geohash