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
相关推荐
守城小轩1 小时前
JavaScript vs Python 用于 Web Scraping(2025):终极对比指南
前端·chrome·chrome devtools·指纹浏览器·浏览器开发·超级浏览器
编程、小哥哥3 小时前
Java面试实战:从Spring Boot到分布式缓存的深度探索
java·spring boot·redis·微服务·grpc·缓存技术·面试技巧
小赵面校招3 小时前
Redis企业级开发实战:核心应用场景与最佳实践
数据库·redis·缓存
风逸hhh4 小时前
python打卡day29@浙大疏锦行
开发语言·前端·python
LuckyLay4 小时前
Vue百日学习计划Day33-35天详细计划-Gemini版
前端·vue.js·学习
ᖰ・◡・ᖳ4 小时前
JavaScript:PC端特效--缓动动画
开发语言·前端·javascript·css·学习·html5
会飞的鱼先生5 小时前
vue2、vue3项目打包生成txt文件-自动记录打包日期:git版本、当前分支、提交人姓名、提交日期、提交描述等信息 和 前端项目的版本号json文件
前端·vue.js·git·json
!win !5 小时前
uni-app项目从0-1基础架构搭建全流程
前端·uni-app
c_zyer6 小时前
使用 nvm 管理 Node.js 和 npm 版本
前端·npm·node.js
搞不懂语言的程序员6 小时前
如何设计一个二级缓存(Redis+Caffeine)架构?Redis 6.0多线程模型如何工作?
redis·架构·wpf