随着日常生活中的 位置信息服务(LBS)越来越多。比如笔者就职的物流平台行业,福州本地飞速发展的朴朴生活超市,以及外卖、打车都离不开GEO这个技术。
首先我们分析一下LBS的需求:
- 支持某一个事物的经纬度位置保存
- 支持点附近点的匹配
- 支持根据事物的ID查询事物具体信息
在Redis中Hash类型就可以很好的支持key对应位置的存取,比如车辆位置
但Hash类型元素无序,不满足范围查询。
想到有序,自然的我们想到可不可以用Sorted Set保存。如下:
存取一样可以满足,但需要解决的是Sorted Set元素权重分数需要是一个数字(可以是浮点数),经纬度是两个值,是没法直接保存为一个浮点数的。
于是乎,我们需要借助GeoHash编码来进行转化。 GeoHash编码原理简单来说就是八个字:二分区间,区间编码
首先我们把地图想像为一个正方形 分为4份,如图这样就可以把而为空间映射为一个一维的空间。每个方格又能进一步划分,划分越细,对应的地理空间越小,精度越大。