Redis 3.2 中增加了对GEO类型的支持。GEO,Geographic,地理信息的缩写。该类型,就是元素的2维坐标,在地图上就是经纬度。redis基于该类型,提供了经纬度设置,查询,范围查询,距离查询,经纬度Hash等常见操作。
1. geoadd
(1)格式:
geoadd< longitude> [longitude latitude member…] 添加地理位置(经度,纬度,名称)
(2)实例:
geoadd china:city 121.47 31.23 shanghai
geoadd china:city 106.50 29.53 chongqing 114.05 22.52 shenzhen 116.38 39.90 beijing
(3)注意:
两极无法直接添加,一般会下载城市数据,直接通过 Java 程序一次性导入。
有效的经度从 -180 度到 180 度。有效的纬度从 -85.05112878 度到 85.05112878 度。
当坐标位置超出指定范围时,该命令将会返回一个错误。
已经添加的数据,是无法再次往里面添加的
**2. geopos **
(1)格式
geopos [member…] 获得指定地区的坐标值
(2)实例:geopos china:city shanghai
3. geodist
(1)格式:
geodist [m|km|ft|mi ] 获取两个位置之间的直线距离
(2)实例:
添加一个北京的坐标:
geoadd china:city 116.38 39.90 beijing
geodist china:city shanghai beijing 默认单位为m
单位:
m 表示单位为米[默认值]。
km 表示单位为千米。
mi 表示单位为英里。
ft 表示单位为英尺。
如果用户没有显式地指定单位参数, 那么 GEODIST 默认使用米作为单位
4. georadius
(1)格式
georadius< longitude>radius m|km|ft|mi 以给定的经纬度为中心,找出某
一半径内的元素经度 纬度 距离 单位
(2)实例:
添加两个坐标:
geoadd china:city 106.50 29.53 chongqing 114.05 22.52 shenzhen
georadius china:city 110 30 1000 km
命令解释:key中在坐标110 30 为中心,半径为1000km的坐标位置