Redis geospatial

三种特殊数据类型

geospatial地理位置

规则:两极数据无法直接添加。

利用geo这个功能可以推算地理位置的信息,两地之间的距离,方圆几里的人!

geospatial命令以“geo”开头

1.利用geoadd key longitude latitude member 命令添加位置

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
127.0.0.1:6379> geoadd china:city 106.50 29.53 chongqing
(integer) 1
127.0.0.1:6379>

Redis  geospatial

 

 

 2.利用geopos 命令获取指定的城市的经纬度

127.0.0.1:6379> geopos china:city beijing
1) 1) "116.39999896287918"
   2) "39.900000091670925"
127.0.0.1:6379>    

Redis  geospatial

 3.利用geodist命令获取两个给定位置之间的距离

指定的单位有:m、km、mi、ft

127.0.0.1:6379> geodist china:city beijing shanghai km
"1067.3788"
127.0.0.1:6379>   

Redis  geospatial

 

 4.利用georadius命令以给定的 经纬度为中心,找出一半径内的元素

127.0.0.1:6379> georadius china:city 110 30 1000 km
1) "chongqing"
127.0.0.1:6379>   

Redis  geospatial

 

 显示经纬度

127.0.0.1:6379> georadius china:city 110 30 1000 km withcoord
1) 1) "chongqing"
   2) 1) "106.49999767541885"
      2) "29.529999579006592"
127.0.0.1:6379>

Redis  geospatial

5.利用georadiusbymemer命令找出位于指定范围内的元素,中心点是由给定的位置元素决定。

127.0.0.1:6379> georadiusbymember china:city beijing 1000 km
1) "beijing"

Redis  geospatial

 

 6.利用geohash 命令返回一个或多个位置元素的geohash元素

该命令返回11个字符的geohash字符串!将二维的经纬度转换为一维的字符串,如果两个字符串越接近,那么距离越接近!

127.0.0.1:6379> geohash china:city beijing chongqing
1) "wx4fbxxfke0"
2) "wm5xzrybty0"
127.0.0.1:6379>

Redis  geospatial

 

 7.geo底层实现原理其实就是zset,可以使用zset命令来操作geo

①比如查看地图中全部的元素

127.0.0.1:6379> zrange china:city 0 -1
1) "chongqing"
2) "shanghai"
3) "beijing"
127.0.0.1:6379>

Redis  geospatial

 

②比如移除一个(指定)地理元素

127.0.0.1:6379> zrem china:city beijing
(integer) 1
127.0.0.1:6379> zrange china:city 0 -1
1) "chongqing"
2) "shanghai"
127.0.0.1:6379>

Redis  geospatial

应用场景:

朋友定位

附近的人

打车距离计算

 

上一篇:Geography's sum up


下一篇:的铯铯停止形状何时显示在地球下方?