GeoHash算法中的一些问题详解

比如网上的北海公园的例子.
GeoHash算法中的一些问题详解_第1张图片经度是 116.389550     纬度是39.928167
经过GeoHash算法计算后得到的结果是:纬度产生的编码为
10111  00011
经度产生的编码为11010  01011。

问题一: 为什么是5位一组?不是4位一组?

这个问题对于刚开始对我造成了一点困扰.如果4位一组的话精度还会更小,定位更准

原因

GeoHash拿0-9和a-z[^ailo]一共32个字符组成新的编码字符
0-9、b-z(去掉a, i, l, o)这32个字母进行base32编码

GeoHash算法中的一些问题详解_第2张图片继续以北海公园为例得到的结果编码为
10111  00011    11010 01011(绿色为纬度,红色为经度)
接下来进行偶数位放经度,奇数位放纬度,把2串编码组合
生成新串11100 11101 00100 01111

问题二:奇位放纬度,偶位放经度不是应该是11011 01110 么?

原因:有两种说法

其一:如果纬度是以0开始的那么就是奇数位放纬度,偶数位放经度,反之则奇经,偶纬

那么本例纬度以1开始所以是先经度,后纬度 得到
11100111010010001111

其二:计数是以第0位开始的,0是偶数
经纬度 1 1 1 0 0 1 1 1 0 1 0 0 1 0 0 0 1 1 1 1
第n位 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

这样就得到结果11100111010010001111
然后再5位一组(2ⁿ=32得到n=5)转成十进制,对应着
28、29、4、15,
得到W ,X, 4, G

GeoHash Base32编码长度对应的经纬度精度表
GeoHash算法中的一些问题详解_第3张图片

你可能感兴趣的:(常见问题)