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
相关推荐
wno7049 小时前
node.js中使用jquery
前端·node.js·jquery
阿琳a_9 小时前
b-map-viewer:面向 Vue 3 的地图可视化 SDK,从接入到展示再到交互分析
前端·javascript·vue.js·gis·数据可视化·地图
10年前端老司机9 小时前
Agent 商业化困局:热闹的发布会,冷清的付费客户
前端·后端·agent
钱栈up9 小时前
热榜上手|HyperFrames:写HTML出MP4
前端·html
bksczm9 小时前
C++Redis开发(Ubuntu 22.04)
数据库·redis·缓存
Sailing9 小时前
🚀🚀【封闭结束8】Agent RAG:从零搭建一个可用知识库
前端·后端·agent
Captain1314_李祖团10 小时前
5. MLIR相关语法
java·前端·javascript
goehou10 小时前
缓存该删还是该改,LLM 服务里的双写问题
redis·缓存·llm·一致性·系统设计
余槐i10 小时前
Spring Boot 3.2 偶发500无日志:线程池复用导致请求上下文丢失
spring boot·redis·后端·mysql·性能优化
恋猫de小郭10 小时前
Flutter 可以更直接地调用原生 API 了,Dart Direct Native Interop
android·前端·flutter