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