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
相关推荐
吃瓜群众i33 分钟前
理解Javascript闭包
前端·javascript
安大桃子37 分钟前
Mapbox GL + Deck.gl 三维实战:Mapbox 加载 Tileset3D 倾斜摄影模型
前端·webgl
yede41 分钟前
多行文本省略号显示,更多按钮展开全部
前端
就是我43 分钟前
React 应用性能优化实战
前端·react.js·性能优化
G扇子1 小时前
深入解析XSS攻击:从原理到防御的全方位指南
前端·安全
snakeshe10101 小时前
入解析React性能优化策略:eagerState的工作原理
前端
六边形6661 小时前
Vue中的 ref、toRef 和 toRefs 有什么区别
前端·vue.js·面试
kovli1 小时前
红宝书第十八讲:详解JavaScript的async/await与错误处理
前端·javascript
前端付豪1 小时前
🚀 React 应用国际化实战:深入掌握 react-i18next 的高级用法
前端·react.js·架构
代码小学僧1 小时前
使用 Cloudflare workers 做一个定时发送消息的飞书机器人
前端·云原生·serverless