本篇文章小编给大家分享一下redis处理经纬度坐标点数据代码实现方法,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
Redis 3.2 之后,支持地理坐标数据的管理。将给定的坐标元素(纬度、经度、名字)添加到指定的键里面。 这些数据就会以有序集合的形式被储, 可以通过GEORADIUS 计算两个坐标点的距离,或者使用GEORADIUS 和 GEORADIUSBYMEMBER查询某个坐标半径内的数据。下面对其中常用的命令进行一个简单的介绍。
1. GEOADD
将坐标信息添加到指定的键里面。
GEOADD key longitude latitude member [longitude latitude member ...]
longitude:坐标点经度,有效值[ -180,180 ]
latitude:坐标点纬度,有效值[ -85.05112878, 85.05112878 ]
示例:
127.0.0.1:6379> geoadd parks 116.300892 40.009462 yuanmingyuan (integer) 1 127.0.0.1:6379> geoadd parks 116.188797 39.990132 xiangshan 116.255916 40.030233 baiwangshan (integer) 2 127.0.0.1:6379> GEOADD parks 110 89.9 nanji (error) ERR invalid longitude,latitude pair 110.000000,89.900000
可以看到,GEOADD 支持一次添加一个或多个地点,每个地点需要包含精度维度和名称,当尝试添加合法经纬度外的坐标(维度为89.9的nanji) 时, 会报错。
2. GEOPOS
GEOPOS命令根据地点的名称返回对应的经纬度。集合中不存在时,返回数据为空
示例:
127.0.0.1:6379> GEOPOS parks xiangshan baiwangshan nanji 1) 1) "116.18879646062850952" 2) "39.99013224137585354" 2) 1) "116.2559160590171814" 2) "40.03023406483775659" 3) (nil)
3. GEODIST
GEODIST 返回两个给定位置之间的距离。如果两个位置之间的其中一个不存在, 那么命令返回空值。
GEODIST key member1 member2 [unit]
合法的unit值
示例:
127.0.0.1:6379> GEODIST parks xiangshan baiwangshan "7251.9492" 127.0.0.1:6379> GEODIST parks xiangshan baiwangshan km "7.2519" 127.0.0.1:6379> GEODIST parks xiangshan nanji km (nil)
4. GEORADIUS
以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
经纬度和单位参数与前面命令保持一致。 其他可选参数说明
WITHCOORD: 将坐标数据的经纬度一并返回
WITHDIST:将坐标数据与当前坐标的距离一并返回
WITHHASH:以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值
COUNT:返回指定条数的数据
ASC|DESC:根据中心的位置, 按照从近到远或者从远到近的方式返回位置元素
STORE和STOREDIST:将返回结果保存至一个有序集合,区别是STORE保存的是hash值,STOREDIST保存的是距离
示例:
返回额外信息
127.0.0.1:6379> GEORADIUS parks 116.29248 40.048107 20 km 1) "xiangshan" 2) "baiwangshan" 3) "yuanmingyuan" 127.0.0.1:6379> GEORADIUS parks 116.29248 40.048107 20 km WITHCOORD WITHDIST WITHHASH 1) 1) "xiangshan" 2) "10.9353" 3) (integer) 4069878528493207 4) 1) "116.18879646062850952" 2) "39.99013224137585354" 2) 1) "baiwangshan" 2) "3.6941" 3) (integer) 4069880373231506 4) 1) "116.2559160590171814" 2) "40.03023406483775659" 3) 1) "yuanmingyuan" 2) "4.3576" 3) (integer) 4069880708898691 4) 1) "116.30089133977890015" 2) "40.00946202493697257"
指定数据条数和排序
127.0.0.1:6379> GEORADIUS parks 116.29248 40.048107 20 km WITHDIST ASC 1) 1) "baiwangshan" 2) "3.6941" 2) 1) "yuanmingyuan" 2) "4.3576" 3) 1) "xiangshan" 2) "10.9353" 127.0.0.1:6379> GEORADIUS parks 116.29248 40.048107 20 km WITHDIST DESC 1) 1) "xiangshan" 2) "10.9353" 2) 1) "yuanmingyuan" 2) "4.3576" 3) 1) "baiwangshan" 2) "3.6941" 127.0.0.1:6379> GEORADIUS parks 116.29248 40.048107 20 km WITHDIST ASC COUNT 2 1) 1) "baiwangshan" 2) "3.6941" 2) 1) "yuanmingyuan" 2) "4.3576"
将结果保存到新的zset, hash值或者距离
127.0.0.1:6379> GEORADIUS parks 116.29248 40.048107 20 km ASC COUNT 2 STORE store_20km (integer) 2 127.0.0.1:6379> GEORADIUS parks 116.29248 40.048107 20 km ASC COUNT 2 STOREDIST storedist_20km (integer) 2 127.0.0.1:6379> ZRANGE store_20km 0 -1 WITHSCORES 1) "baiwangshan" 2) "4069880373231506" 3) "yuanmingyuan" 4) "4069880708898691" 127.0.0.1:6379> ZRANGE storedist_20km 0 -1 WITHSCORES 1) "baiwangshan" 2) "3.6941190849982757" 3) "yuanmingyuan" 4) "4.3576262236174665"
5. GEORADIUSBYMEMBER
这个命令和 GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是GEORADIUSBYMEMBER的中心点是由给定的位置元素决定的, 而不是像GEORADIUS 那样, 使用输入的经度和纬度来决定中心点。
示例:
GEORADIUSBYMEMBER parks yuanmingyuan 5 km ASC 1) "yuanmingyuan" 2) "baiwangshan"
查询圆明园5公里内的公园
创造与魔法 安卓版v1.0.0750
创造与魔法是一款开放世界手游,在游戏中玩家可探索这个奇妙的世
创造与魔法修改版 最新版v1.0.0750
创造与魔法无限点券版是款探索冒险游戏,该款游戏的操作还是蛮自
战争与文明官方版本 安卓版v1.7.16
战争与文明是一款由上海邮通科技有限公司开发的战争策略游戏,这
迷你世界0元领皮肤无限迷你币版 最新安卓版v1.43.0
迷你世界0元购买皮肤版是这款开放沙盒冒险建造游戏的特殊破解版
创造与魔法无限经验版 安卓版v1.0.0750
创造与魔法无限经验版是款可以改造环境,整个游戏的自由度还是蛮