redis中使用GeoHash

  • 1.GeoHash底层原理
  • 2. 基本使用

1.GeoHash底层原理

1.Redis3.2开始提供GEO模块,该模块使用了GeoHash算法

2.核心思想:GeoHash是一种地址编码方式,其将二维的空间经纬度数据编码成一个一维字符串。我们大致可以将大致划分如下图这个范围。GeoHash算法就是基于这种思想,不断地去划分区域,划分次数越多,精度越高。

3.具体算法:
这里以广州的经纬度为例子,113.229259,23.17652

这里就拿纬度23.17652来说,纬度的范围为【-90,90】,23.17652在【0,90】之间,故可以得到一个值1,再次划分,【0,90】的中间值为45,23.17652落在【0,45】之间,故得到一个0,【0,45】的中间值为22.5,23.17652落在【22.5,45】之间,故可以得到一个1…假设最后得到的结果为101,经度算出的结果为110,合并这两个值,规律为经度占偶数位,纬度占奇数位,这样可以得到一个结果111001,按照Base32对合并后的结果集进行编码,得到一个字符串,这个字符串可以到可以拿去 geohash.org 网站上解析,就可以看到地址是在哪了。

2. 基本使用

1.添加地址

geoadd city 116.332906 39.892695 beijing
geoadd city 114.064552 22.548457 shenzhen
  1. 算出两个地址的距离
geodist city beijing shenzhen km
  1. 获取元素的位置,有可能会有误差
geopos city beijing
  1. 获取元素的hash值
geohash city beijing
  1. 以北京为中心,方圆2000km的城市由近到远列出4个,不排除北京本身
georadiusbymember city beijing 2000 km withdist withhash withcoord count 4 asc

6.也可以根据经纬度来查询附近城市

georadius city 116.332906 39.892695 2000 km withdist withhash withcoord count 4 asc

redis中使用GeoHash相关推荐

  1. 数据类型_分享redis中除5种基础数据类型以外的高级数据类型

    众所周知,在redis中的数据类型有String(字符串).hash(哈希).list(列表).set(集合).zset(有序集合)五种.但在这5种之外还有高级数据类型. 今天和大家介绍下常用的高级数 ...

  2. Redis中三种特殊数据类型

    本文来说下Redis中三种特殊数据类型 文章目录 Gerspatial地理位置 Hyperloglog基数统计 Bitmap位图 Gerspatial地理位置 一共 6 个命令: GEOADD GEO ...

  3. Redis中地理位置GEO模块,非常便捷的来查找附近的人或物

    从Redis3.2 版本以后,增加了地理位置 GEO 模块,这个模块提供了6个Geo指令,分别是geoadd.geodist.geopos.geohash.georadiusbymember及geor ...

  4. Redis中五大基本数据类型和三种特殊数据类型详解

    目录 介绍 概念 基本命令 redis是单线程的 五大基本数据类型 String 命令 应用场景 List 命令 应用场景 Set 命令 应用场景 Hash 命令 应用场景 Zset 命令 应用场景 ...

  5. Redis中的Bitmaps、HyperLogLog、Geospatial

    目录 Bitmaps 如何选择集合类型 判断用户登录状态 小结 HyperLogLog 什么是基数 应用场景 命令 Geospatial 如何实现定位 Geohash技术 geohash的计算 geo ...

  6. java必学之Redis中的数据结构

    目录 一.String不在适用Redis底层数据结构 1.String类型的内存消耗问题 2:String类型怎么保存数据 2.1RedisObject结构体: 2.2int.embstr和raw这三 ...

  7. 函数指针--Nginx和Redis中两种回调函数写法

    1.Nginx和Redis中两种回调函数写法 #include <stdio.h>//仿Nginx风格 //结构外声明函数指针类型 typedef void (*ngx_connectio ...

  8. Redis初学:14(Redis中的事务)

    Redis中的事务 Redis的事务定义 Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化.按顺序地执行.事务在执行的过程中,不会被其他客户端发送来的命令请求所打断. Redis事务的主 ...

  9. Redis中字符串string数据类型(保存(设置键值、过期时间、设置多个键值、追加值)、获取(获取单一键值、获取多个键值))

    字符串类型是 Redis 中最为基础的数据存储类型,它在 Redis 中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等.在Redis中字符串类型的V ...

最新文章

  1. ThinkPHP5.0中Redis的使用和封装(原创)
  2. 如何把PB程序的数据库从ASA迁移到ASE?
  3. python爬虫自学笔记分析解密_Python爬虫自学系列(七) -- 项目实战篇(一)
  4. jmeter测试java接口测试_简单易学的测试攻略:JMeter测试Java请求示例
  5. PPT|工业互联网关键技术专利态势
  6. apache 查看本地页面_GeoSever的页面实现
  7. 读完这些论文和代码,你就能在搜狐算法大赛中获得好成绩了
  8. Linq使用Group By
  9. Redis集群-哨兵模式
  10. 应用环境下的TIME_WAIT和CLOSE_WAIT
  11. ssh(Spring+Spring mvc+hibernate)——Dept.hbm.xml
  12. 火星人谚语系列之五:答案将由我在下一分钟给出(心想事成)
  13. Linux之父道歉后,Linux社区颁布开发人员行为准则
  14. 运维工程师之-MySQL的故障问题总结
  15. 4. 创建 bundle
  16. 南阳oj题目20吝啬的国度 菜鸟的进阶之路
  17. Nacos下载与安装
  18. 图片拉伸:拉伸两边,保持中间不动
  19. 服务器被攻击 常见的服务器攻击方式有哪些
  20. 使用yagmail模块群发工资条

热门文章

  1. ThinkPHP6 缩略图上传
  2. composer介绍
  3. 如何实现手机远程控制电源开关
  4. 微信公众号如何进行账号迁移?
  5. 基于 Node.js + Koa 构建完整的 Web API 项目
  6. 企业如何管理终端软件安装
  7. matlab模拟塞曼图谱,C.基于LabVIEW的塞曼效应虚拟仿真-中国高等学校实验物理教学研究会.ppt...
  8. 什么是世界协调时间UTC
  9. 安徽阜阳计算机高中学校排名,安徽省高中学校实力排名
  10. qiankun使用Actions实现通信