geospatial(地理位置)
做朋友的的定位、打车距离计算、两地之间的距离等
可以查询一些具体的测试数据(百度一下你就知道😄)
五大命令
GEOADD
GEODIST
GEOHASH
GEOPOS
GEORADIUS
GEORADIUSBYMEMBER
GEOADD添加地理位置
规则:两级是无法直接添加的,其实可以通过java程序一次性导入
传参:key 、经度、纬度、名称
127.0.0.1:6379> geoadd china:city 116.40 39.90 beijing
(integer) 1
127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai
(integer) 1
添加一些城市的数据
GEOPOS
获取指定城市的经度和纬度,获取到的一定是一个坐标值
127.0.0.1:6379> GEOPOS china:city chongqin
1) 1) "160.49999982118606567"
2) "29.52999957900659211"
GEODIST
返回两个给定位置之间的距离
指定单位的参数必须是m、km、mi(英里)、ft(英尺)中的一个,不指定默认用米作为单位
127.0.0.1:6379> GEODIST china:city beijing shanghai km
"1067.3788"
查看我附近的人怎么实现呢
GEORADIUS 给定的经纬度为中心,找出某一半径内的元素
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km
1) "xian"
2) "shenzheng"
3) "hangzhou"
中间两个数字是以这两个数字做代表的经纬度为中心
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km withdist
1) 1) "xian"
2) "483.8340"
2) 1) "shenzheng"
2) "924.6408"
3) 1) "hangzhou"
2) "977.5143"
127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km withdist withcoord count 1(这里限定一个)
1) 1) "xian"
2) "483.8340"
3) 1) "108.96000176668167114"
2) "34.25999964418929977"
withcoord是显示他人的经纬度信息
GEORADIUSBYMEMBER找出位于指定范围内的元素,中心点是由给定的未知元素决定的
127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1000 km
1) "beijing"
2) "xian"
和上面的比较类似,但是这时候中心点变成城市,而不是坐标 更加具有实际意义
用于找出周围的人
GEOHASH返回一个或多个位置元素的geohash表示
127.0.0.1:6379> geohash china:city beijing chongqin
1) "wx4fbxxfke0"
2) "xt4purb89n0"
不太会用到,将经纬度转换为哈希
GEO底层原理是ZSet,可以使用zset的指令来操作
127.0.0.1:6379> ZREM china:city beijing
(integer) 1
127.0.0.1:6379> ZRANGE china:city 0 -1 查看地图中所有元素
1) "xian"
2) "shenzheng"
3) "hangzhou"
4) "shanghai"
5) "chongqin"