计算机网络/计算机科学与应用/系统/运维/开发

Redis GEO地理位置信息存储

一、什么是GEO?

常用于LBS (Location Based Service)基于位置的服务

可以将用户给定的地址位置信息存储起来,并对这些信息进行操作


命令:GEOADD

语法:GETADD key longitude latitude member [longitude latitude member ...]

功能:将给定的空间元素(维度、经度、名字)添加到指定的键里面。

有效的经度-180-180之间

有效的维度-85.05112878-85.05112878

返回值:新添加到键里面的空间元素数量,不包括那些已经存在但是被更新的元素

127.0.0.1:6379> geoadd nearby 103.045372 -40.23647 jason 
(integer) 1
127.0.0.1:6379> geoadd nearby 108.045372 -60.23647 jason 
(integer) 0
127.0.0.1:6379> geoadd nearby 108.045372 -60.23647 jason 20.48573 30.48573 xiaoqiang


命令:GEOPOS

语法:GEOPOS key member [member...]

功能:从键里面返回所有给定位置元素的位置(经度和维度)

返回值:

GEOPOS命令返回一个数组,数组中的每个项都由两个元素组成

第一个元素为给定位置元素的经度,第二个元素则为给定元素的维度

127.0.0.1:6379> geopos nearby jason
1) 1) "108.04537385702133179"
   2) "-60.23647097371166126"
127.0.0.1:6379> geopos nearby xiaoqiang
1) 1) "20.48572808504104614"
   2) "30.48572886574113738"


命令:GEODIST

语法:GEODIST key member1 member2 [unit]

功能:返回2个规定位置之间的距离

如果两个位置之间的期中一个不存在,那么命令返回空值

指定单位的参数unit必须是以下单位的其中一个 

(默认m km mi ft)

返回值:

计算出的距离会以双精度浮点数的形式被返回,如果给定的位置元素

不存在,那么命令返回空值

127.0.0.1:6379> geodist nearby jason xiaoqiang
"12787965.8305"
127.0.0.1:6379> geodist nearby jason xiaoqiang km
"12787.9658"
127.0.0.1:6379> geodist nearby jason xiaoqiang mi
"7946.0933"
127.0.0.1:6379> geodist nearby jason xiaoqiang ft
"41955268.4728"


命令:GEORADIUS

语法:GEORADIUS key longitude latitude radius m|km|ft|mi

[WITHCOORD] [WITHDIST] [WITHHASH] [ASC|DESC] [COUNT count]

功能:以给定的经纬度为中心,返回键包含的位置元素当中,与中心

的距离不超过给定最大距离的所有位置元素

选项:

WITHDIST 在返回位置元素的同时,将位置元素与中心之间的距离一并返回

WITHCOORD 

WITHHASH

geohash

ASC

DESC


127.0.0.1:6379> georadius nearby 103.045372 -40.23647 10000000 km withcoord withdist withhash asc
1) 1) "jason"
   2) "2251.2420"
   3) (integer) 2897330011462370
   4) 1) "108.04537385702133179"
      2) "-60.23647097371166126"
2) 1) "xiaoqiang"
   2) "11571.4294"
   3) (integer) 3465237062956293
   4) 1) "20.48572808504104614"
      2) "30.48572886574113738"
127.0.0.1:6379> georadius nearby 103.045372 -40.23647 10000000 km withcoord withdist withhash asc count 1
1) 1) "jason"
   2) "2251.2420"
   3) (integer) 2897330011462370
   4) 1) "108.04537385702133179"
      2) "-60.23647097371166126"


命令:GEORADIUSBYMEMBER

语法:GEORADIUSBYMEMBER key member radius m|km|ft|mi 

[WITHCOORD] [WITHDIST] [WITHHASH] [ASC|DESC] [COUNT count]

功能:和GEORADIUS一样

不同的是中心点是由给定的位置元素决定的

返回值:

一个数组,数组中每个项表示一个范围之内的位置元素

127.0.0.1:6379> georadiusbymember nearby jason  10000000 km withcoord withdist asc count 1
1) 1) "jason"
   2) "0.0000"
   3) 1) "108.04537385702133179"
      2) "-60.23647097371166126"


命令:GEOHASH

语法:GEOHASH key member [member ...]

功能:返回一个或多个位置元素的Geohash表示

返回值:

一个数组,数组的每个项都是一个geohash 命令

返回的geohash 的位置与用户给定的位置元素的位置一一对应

127.0.0.1:6379> geohash nearby jason
1) "nmkc6dk1pe0"
127.0.0.1:6379> geohash nearby jason xiaoqiang
1) "nmkc6dk1pe0"
2) "smqt6jv20p0"



所有的努力,不是为了让别人觉得你了不起,而是为了能让自己打心眼里看得起自己。

评论

^