Redis地理数据类型GEO

通常要计算两个地理位置的距离 不是很方便,这里可以直接通过Redis提供的GEO操作来完成地理位置相关的计算

1)添加地理位置

语法: geoadd key longitude latitude member longitude latitude member ...
字段说明:
key: 存放地理位置的集合名称
longitude: 地理坐标的经度
latitude: 地理坐标的纬度
member: 表示这个地理位置的标识(可用地点名来代替)

添加一个 "天安门" 和 "**北京西站"**的地理位置,如

复制代码
geoadd China 116.397904 39.909005 天安门 116.322287 39.893729 北京西站

2)计算两个地理位置的距离

语法: geodist key member1 member2 unit
字段说明:
member: 地理位置的标识
unit: 距离单位(默认为米):m:米;km:千米;mi:英里;ft:英尺

计算 "天安门" 到 "**北京西站"**的距离,如:

复制代码
geodist China 天安门 北京西站 
或
geodist China 天安门 北京西站 m

3)获取地理位置的经纬度

语法: geopos key member ...
字段说明:
member: 地理位置的标识

获取**"天安门** " 的经纬度,如:

复制代码
geopos China 天安门

4)获取地理位置的哈希值

语法: geohash key member ...
字段说明:
member: 地理位置的标识

获取**"天安门** **"**的哈希值,如:

复制代码
geohash China 天安门

5)搜索一定距离内圆形范围的地理位置

语法: georadius key longitude latitude radius unit withcoord withdist withhash count cnt asc.desc
字段说明:
key: 存放地理位置的集合名称
longitude: 地理坐标的经度
latitude: 地理坐标的纬度
radius: 半径
unit: 距离单位(默认为米 ):m:米;km:千米;mi:英里;ft:英尺
withcoord: 可选参数,返回的结果中带上经纬度
withdist: 可选参数,返回的结果中带上到达指定地理坐标的距离
withhash: 可选参数,返回的结果中带上地理位置的哈希值
count: 可选参数,查询地理位置个数的关键字,具体的数量放在cnt的位置,不指定count这个参数默认搜索所有满足距离的地理坐标
asc/desc: 可选参数,asc,将搜索到的地理位置按照距离远近从小到大排序;desc,按照距离从大到小排序;不选择默认为asc

具体使用如下:

① 搜索 China地理集合 中所有距离**(116.397904 39.909005)** 这个位置 10km 内的地理位置,默认返回的结果只有member,如:天安门

复制代码
georadius China 116.397904 39.909005 10 km ​ 

② 在 10km 范围内统计100个 地理位置(包含member、经纬度、距离、哈希值 ),并将结果 从近到远 排序

复制代码
georadius China 116.397904 39.909005 10 km withcoord withdist withhash count 100 asc 

6)以给定地点为中心,按照圆形或矩形搜索一定范围内的地理位置

语法: geosearch key frommember member / fromlonlat longitude latitude byradius radius unit / bybox width height unit asc/desc count cnt withcoord withdist withhash
字段说明:
key: 存放地理位置的集合名称
frommember: 按照member为中心,如按照天安门为中心;与fromlonlat二选一
member: 地理位置的标识
fromlonlat: 按照经纬度为中心;与frommember二选一
longitude: 地理坐标的经度
latitude: 地理坐标的纬度
byradius: 按圆形搜索;与bybox二选一
radius: 半径
bybox: 按矩形搜索;与byradius二选一
width: 矩形的宽
height: 矩形的高
unit: 距离单位(默认为米 ):m:米;km:千米;mi:英里;ft:英尺
asc/desc: 可选参数,asc,将搜索到的地理位置按照距离远近从小到大排序;desc,按照距离从大到小排序;不选择默认为asc
count: 可选参数,查询地理位置个数的关键字,具体的数量放在cnt的位置,不指定count这个参数 默认搜索所有 满足距离的地理坐标
withcoord: 可选参数,返回的结果中带上经纬度
withdist: 可选参数,返回的结果中带上到达指定地理坐标的距离
withhash: 可选参数,返回的结果中带上地理位置的哈希值

具体使用如下:

① 搜索 China 中距离 天安门 6km所有位置

复制代码
geosearch China frommember 天安门  byradius 6 km

② 以(116.397904 39.909005) 经纬度为中心,在 宽500米,高1000米 的范围内统计10个 地理位置(包含member、经纬度、距离、哈希值 ),并将结果 从近到远 排序

复制代码
geosearch China fromlonlat 116.397904 39.909005 bybox 500 1000 m asc count 10  withcoord withdist withhash
相关推荐
AOwhisky6 小时前
Redis 学习笔记(第三期):持久化与主从复制
运维·数据库·redis·笔记·学习·云计算
问心无愧05137 小时前
ctf show web入门160 161
前端·笔记
一条泥憨鱼7 小时前
【Redis】数据类型和常用命令
java·数据库·redis·后端·缓存
李小白667 小时前
第四天-WEB服务器基本原理,IIS服务
运维·服务器·前端
humcomm7 小时前
AI编程时代新前端职位
前端·ai编程
好家伙VCC8 小时前
Web Components主题热切换方案揭秘
java·前端
甲维斯8 小时前
Kimi版超级玛丽效果“惊人”,配额不足5厘米!
前端·人工智能
hboot8 小时前
AI工程师第一课 - Python
前端·后端·python
凉菜凉凉8 小时前
AI时代,被抛弃的前端
前端·ai
console.log('npc')8 小时前
AI前端工程与生成式UI学习路线
前端·人工智能·ui