Geohash 工作原理
编号:TD-0x0006
标签:geohash; coding system; positions
什么是Geohash
Geohash是一种地理位置信息编码方法。 经过geohash映射后,地球上任意位置的经纬度坐标可以表示成一个较短的字符串。可以方便的存储在数据库中,附在邮件上,以及方便的使用在其他服务中。以北京的坐标举例,[39.928167,116.389550]可以转换成wx4g0s8q3jf9
。
Geohash 编码属性
- 如果去掉右边的若干字符,只会影响坐标精度,而不会改变指向的具体位置。
- 可以在
geohash.org
使用:http://geohash.org/wx4g0s8q3jf9 。 - 有相同前缀的字符表示的位置是相近的,但不同的前缀表示的位置也可能相近。
根据Geohash的属性可以轻松实现搜周边的功能。匹配与自己位置有相同开头的地理位置即可。
如何计算Geohash
以[39.928167,116.389550]为例:
1. 将经纬度按二分查找转换为[01]串
39.928167 => 10111 00011
116.389550 => 11010 01011
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]
最后得出 wx4g
Python 的源码可参考 https://github.com/uname-yang/geohash