Geo(地理空间geospatial)
地理空间的三要素:经度longitude,纬度latitude,名称。
有效的经度从-180度到180度。
有效的纬度从-85.05112878度到85.05112878度。
地理空间位置可以百度:Geo在线查询
Redis的Geo命令只有6个,都以Geo开头。
常用命令:
(1)添加地理空间:GeoAdd key longitude latitude member …
我们设置这些地理位置的信息不会自己手动添加,而是读取配置文件,或者获取其他资源,然后用程序直接录入redis。
先是经度,再是纬度,顺序一不小心就会填反了。
当输入的经度纬度不在合法的范围内,将返回一个error。
(2)获取指定成员的地理空间:GeoPos key member [member…]
返回值:返回一个数组,数组的每一项由2个元素组成:经度和纬度。
(3)计算两个地理空间的直线距离:GeoDist key member1 member2 [unit]
Unit是距离单位,常用的有m, km, 不写默认为m
这个计算结果最大会误差0.5%
提示:百度了一下,确实结果没差多少。
(4)查询指定位置范围内的地理空间信息:GeoRadius key longitude latitude radius unit [withCoord] [withDist] [Count num] [asc|desc]
参数选项:
withCoord: 返回信息中包含元素的地理位置。
withDist: 返回信息中包含元素的距离。
Count num: 返回num个元素。
Asc|desc: 按照距离升序/降序,当不写时,默认不排序,即无序。
(5)查询指定元素范围内的地理空间信息:GeoRadiusByMember key member radius unit [withCoord] [withDist] [Count num] [asc|desc]
该命令作用与GeoRadius类似,只不过中心点是指定元素。
注意:返回数组中会包含元素本身。
(6)返回元素的GeoHash表示:GeoHash key member [member…]
返回值:11位的字符串。将二维的经度纬度转成一维的字符串。
如果两个字符串越像,表示这两个地理位置越近。
提示:Geo的底层原理就是Zset,我们可以使用Zset的命令来操作Geo(但实际上就不要这么做了)