Redis数据结构:地理坐标
通过地理坐标(Redis GEO),用户可将经纬度格式的地理坐标存储并进行操作。
数据结构
- 地理坐标
地理坐标
-
存储坐标
1.geoadd命令 格式:geoadd key [NX|XX] [CH] longitude latitude member [longitude latitude member …]
将一个或多个经纬度坐标存储到位置集合中并对应设置名字,执行后返回新添加的坐标数量,若是更新member的位置坐标则返回0。
geoadd key longitude latitude member [longitude latitude member ...]
XX选项的作用是只更新不添加,执行后返回0。
geoadd key XX longitude latitude member [longitude latitude member ...]
NX选项的作用是只添加不更新,执行成功返回添加元素的个数。
geoadd key NX longitude latitude member [longitude latitude member ...]
CH选项的作用是返回被修改成员的数量而非添加成功的成员数量,被修改包括新添加。
geoadd key CH longitude latitude member [longitude latitude member ...]
-
获取指定位置坐标
1.geopos命令 格式:geopos key member [member …]
获取给定位置的坐标,返回一个数组作为执行结果,数组第一个项和第二个项与用户设置的顺序相同,位置不存在时返回nil。
geopos key member [member ...]
-
获取指定位置的Geohash值
1.geohash命令 格式:geohash key member [member …]
获取经纬度坐标的Geohash表示,字符串格式返回。位置集合或位置不存在时返回nil。
geohash key member [member ...]
-
计算位置间直线距离
1.geodist命令 格式:geodist key member1 member2 [m|km|ft|mi]
默认情况下返回的距离以米为单位,ft为英尺,mi为英里。位置不存在时返回nil。
geodist key member1 member2 [m|km|ft|mi]
-
查找指定坐标半径内的其他位置
1.georadius命令 格式:georadius key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC|DESC] [STORE key] [STOREDIST key]
在位置集合中,查找位于给定经纬度给定半径内的位置。位置集合不存在或集中中无满足位置返回空集。
georadius key longitude latitude radius m|km|ft|mi
WITHDIST选项可返回匹配位置与给定位置间距离,数组形式返回。
georadius key longitude latitude radius m|km|ft|mi WITHDIST
WITHCOORD 选项可返回匹配位置坐标,数组形式返回。
georadius key longitude latitude radius m|km|ft|mi WITHCOORD WITHDIST
ASC|DESC选项可指定返回结果排序方式,按照距离升序(ASC)或降序(DESC)排列返回,不指定时默认升序。
georadius key longitude latitude radius m|km|ft|mi WITHCOORD WITHDIST ASC|DESC
COUNT count [ANY]选项指定返回的位置个数。
georadius key longitude latitude radius m|km|ft|mi WITHCOORD WITHDIST ASC|DESC COUNT count [ANY]
-
查找指定位置半径内的其他位置
1.georadiusbymember命令 格式:georadiusbymember key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC|DESC] [STORE key] [STOREDIST key]
与georadius的区别是给定的不是经纬度而是集合中的位置,匹配位置中会返回指定的位置。集合不存在时返回空集,位置不存在时返回error。
georadiusbymember key member radius m|km|ft|mi
-
使用有序集合命令操作GEO数据
一个位置集合实际上就是一个有序集合,经纬度及位置添加到位置集合实际上就是把给定的经纬度转成数字Geohash值添加到有序集合。
-
常见用法
1.查找附近用户