Redis存储经纬度数据并进行地理操作

Redis 从3.2.0版本开始提供了对地理位置的支持,reids 的地理位置坐标使用 sorted set存储,它使用Geohash技术,将经度和维度的二进制位交叉存储为一个 52 位的整数。在距离计算上,使用的是 Haversine 算法。在覆盖范围上,不能覆盖靠近南、北极的区域:

  • 有效的经度范围为 -180 到 180
  • 有效的维度范围为 -85.05112878 到05112878

相关的命令有:

  • GEOADD,添加成员的经纬度信息
  • GEODIST,计算成员间距离
  • GEORADIUS 基于经纬度坐标的范围查询
  • GEORADIUSBYMEMBER 基于成员位置范围查询
  • GEOPOS,获取成员经纬度
  • GEOHASH 计算经纬度Hash

Redis地理位置相关命令

GEOADD,添加成员的经纬度信息

语法:

以吉林省主要城市的经纬度为例:

GEODIST,计算成员间距离

语法:

unit 为结果单位,可选,支持:m,km,mi,ft,分别表示米(默认),千米,英里,英尺。

计算演示,计算长春到敦化的距离:

GEORADIUS,基于经纬度坐标的范围查询

检索以某个经纬度为圆心,在特定半径的圆形范围内的成员。

语法:

查询演示,以经纬度125,42为圆心,100公里范围内的成员:

支持的可选项的意义:

  • WITHCOORD,同时获取成员经纬度
  • WITHDIST,同时获取距离参考点(圆心)的距离
  • WITHHASH,同时获取成员经纬度HASH值
  • COUNT count,限制获取成员的数量
  • ASC|DESC,结果升降序排序
  • STORE key,在命令表,READONLY模式下使用
  • STOREDIST key,在命令表,READONLY模式下使用

GEORADIUSBYMEMBER 基于成员位置范围查询

语法:

检索以某个成员为圆心,在特定半径的圆形范围内的成员。功能与 GEORADIUS 类似,只不过圆心为某个成员位置。

查询演示,以经纬度 changchun 为圆心,100公里范围内的成员:

GEOPOS,获取成员经纬度

语法:

获取某个成员经纬度:

GEOHASH 计算经纬度Hash

语法:

获取将经纬度坐标生成的HASH字符串:

参考连接:https://redis.io/commands/

微信支付标点符 wechat qrcode
支付宝标点符 alipay qrcode

开源地理位置数据库:tile38

Tile38是地理定位数据存储,空间索引和实时地理围栏。它支持多种对象类型,包括纬度/经度点,边界框,XYZ平

使用Python检测符号及乱码字符

最近在进行关键词的分析,中间涉及到对一些特殊的字符进行过滤的需求。包括带符号的(有部分还是SQL注入),并且存

PHP版本升级记录(7.0到7.4)

服务器上原先安装的版本为PHP 7.0.33, WordPress后台建议安装的最小版本为7.3,所以打算直接

发表评论

电子邮件地址不会被公开。 必填项已用*标注