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
相关推荐
前端双越老师18 分钟前
前端面试常见的 10 个场景题
前端·面试·求职
孟祥_成都1 小时前
【全网最通俗!新手到AI全栈开发必读】 AI 是如何进化到大模型的
前端·人工智能·全栈
牛奶2 小时前
AI辅助开发的基础概念
前端·人工智能·ai编程
摸鱼的春哥2 小时前
Agent教程15:认识LangChain,Agent框架的王(上)
前端·javascript·后端
明月_清风3 小时前
自定义右键菜单:在项目里实现“选中文字即刻生成新提示”
前端·javascript
明月_清风3 小时前
告别后端转换:高质量批量导出实战
前端·javascript
刘发财7 小时前
弃用html2pdf.js,这个html转pdf方案能力是它的几十倍
前端·javascript·github
牛奶10 小时前
2026年大模型怎么选?前端人实用对比
前端·人工智能·ai编程
牛奶10 小时前
前端人为什么要学AI?
前端·人工智能·ai编程
Kagol12 小时前
🎉OpenTiny NEXT-SDK 重磅发布:四步把你的前端应用变成智能应用!
前端·开源·agent