geohash
以后都在 github 更新,请戳 redis geohash 底层实现
目录
相关位置文件
- redis/src/geohash.c
- redis/src/geohash.h
- redis/src/geo.c
- redis/src/geohash_helper.c
内存构造
我们以一个坐标点 113.936698, 22.543764
为例进行示范
encode
/* Limits from EPSG:900913 / EPSG:3785 / OSGEO:41001 */
#define GEO_LAT_MIN -85.05112878
#define GEO_LAT_MAX 85.05112878
#define GEO_LONG_MIN -180
#define GEO_LONG_MAX 180
你能进行存储的纬度的最大值/最小值是 85.05/-85.05, 也就是北极/南极附近的范围
这是一部分 encode 的代码
int geohashEncode(...)
{
/* 忽略 */
double lat_offset =
(latitude - lat_range->min) / (lat_range->max - lat_range->min);
double long_offset =
(longitude - long_range->min) / (long_range->max - long_range->min);
/* 根据设置的step大小, 转换为一个固定的值 */
lat_offset *= (1ULL << step);
long_offset *= (1ULL << step);
hash->bits = interleave64</