(1)简介
Redis 3.2 中增加了对GEO类型的支持。GEO,Geographic,地理信息的缩写。该类型,就是元素的2维坐标,在地图上就是经纬度。redis基于该类型,提供了经纬度设置,查询,范围查询,距离查询,经纬度Hash等常见操作。
使用场景:
-
高德地图附近地点
-
微信摇一摇附近的妹子
(2)命令
geoadd <key> < longitude> <latitude> <member>
:添加地理位置(经度,纬度,名称). 俩极无法增加
127.0.0.1:6379> geoadd city 116.40 39.91 天安门 116.40 39.92 故宫
(integer) 2
geopos <key> <member>:
获得指定地区的坐标值
127.0.0.1:6379> GEOPOS city 天安门
1) 1) "116.39999896287918091"
2) "39.90999956664450821"
GEOHASH key member [member ...]:
返回坐标的 geohash 表示
127.0.0.1:6379> geohash city 天安门
1) "wx4g09ruse0"
geodist <key> <member1> <member2> [m|km|ft|mi ]
:获取两个位置之间的直线距离
# 指定单位km
127.0.0.1:6379> geodist city 天安门 故宫 km
1.1122
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]
: 以给定的经纬度为中心,找出指定半径内的元素
-
WITHDIST
: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。 -
WITHCOORD
: 将位置元素的经度和维度也一并返回。 -
WITHHASH
: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。 -
COUNT
指定返回元素的个数
命令默认返回未排序的位置元素。 通过以下两个参数, 用户可以指定被返回位置元素的排序方式:
-
ASC
: 根据中心的位置, 按照从近到远的方式返回位置元素。 -
DESC
: 根据中心的位置, 按照从远到近的方式返回位置元素。
例:
# 增加坐标
redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(integer) 2
# 以 15 37 为中心,方圆 200km 的位置元素,计算出这些位置元素与中心点的距离。
redis> GEORADIUS Sicily 15 37 200 km WITHDIST
1) 1) "Palermo"
2) "190.4424"
2) 1) "Catania"
2) "56.4413"
# # 以 15 37 为中心,方圆 200km 的位置元素和元素的坐标
redis> GEORADIUS Sicily 15 37 200 km WITHCOORD
1) 1) "Palermo"
2) 1) "13.361389338970184"
2) "38.115556395496299"
2) 1) "Catania"
2) 1) "15.087267458438873"
2) "37.50266842333162"
# 位置元素的坐标和中心点的距离都打印出来
redis> GEORADIUS Sicily 15 37 200 km WITHDIST WITHCOORD
1) 1) "Palermo"
2) "190.4424"
3) 1) "13.361389338970184"
2) "38.115556395496299"
2) 1) "Catania"
2) "56.4413"
3) 1) "15.087267458438873"
2) "37.50266842333162"
# 指定返回一个位置元素
redis> GEORADIUS Sicily 15 37 200 km WITHDIST WITHCOORD count 1
Catania
56.4413
15.08726745843887329
37.50266842333162032