开发者学堂课程【Redis 入门到精通(进阶篇):高级数据类型-Geo】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/765/detail/13446
高级数据类型-Geo
本章主要说明 Geo 以及它的操作方法与流程
一,Geo 的说明及操作
1.举例与 Geo 相关的一些火热的生活服务类软件
社交类:微信/陌陌
外卖类:美团/饿了么
移动类:携程/马蜂窝
导航类:高德/百度
等只要和线下相关,是都可以涉及到的。Geo叫做地理位置。换句话说,就是告诉一个地理位置,再告诉另外一个地理位置,就可以做一些操作计算。
2.GEO 类型的基本操作
(1).添加坐标点
geoadd key longitude latitude member [longitude latitude member ...]
(2).获取坐标点
geopos key member [member .--]
(3).计算坐标点距离
geodist key memberl member2 [unit]
具体来说明以上操作,假定一个地图,有一个点,这边又有一个点,它就可以求他们两个之间的关系,比如说距离,范围等等的一系列的东西。这需要知道两个信息,第一是横坐标,第二是纵坐标。简单一点,叫做经纬度。通过这种形式,可以快速的去做我们的点与点之间的这种关联关系操作,就是所谓的记忆人物。它的应用场景也是非常的单一,具体看它的操作。要想能够进行计算,最基本的是,能把数据给放进去,二是数据能取出来,三是能做最基本的计算,比如关于两个点的坐标,如果是一个非常光滑的球体的话,这个坐标计算是准的,但是如果说现在,在山下到山上,这个有距离没有是有距离的,他只算水平位置的距离,不算垂直位置,换句话说不算高度,所以它计算出来的距离。只能按照水平位置去想,不能说从这个点到那个点才算走好长时间。
以下为操作过程中运用到的代码
127.0.0.1:
6379>flushdb
OK
127.0.0.1:6379> geoadd geos 1 1 a(integer)1
127.0.0.1:6379> geoadd geos 2 2 b
(integer)1
127.0.0.1:6379> geopos geos1)1)"0.99999994039535522"
2)"0.99999945914297683"
127.0.0.1:6379> geodist geos a b"157270.0561"
127.0.0.1:6379> geodist geos a b m*157270.0561"
127.0.0.1:6379> geodist geos a b km
"157.2701"
127.0.0.1:6379>
(5).根据坐标求范围内的数据
georadius key longitude latitude radius mlkmlftlmi [withcoord] [withdist] [withhash] [count count]
(6).根据点求范围内数据
georadiusbymember key member radius ml
kml
ft|
mi [withcoord] [withdist] [withhash] [count count]
(7).获取指定点对应的坐标 hash 值
geohash key member [member ...]
以下为操作流程中所运用到的代码:
127.0.0.1:
6379>flushdb
OK
127.0.0.1:6379> geoadd geos 1 1 1,1
(integer)1
127.0.0.1:6379> geoadd geos 1 2 1,2
(integer)1
127.0.0.1:6379> geoadd geos 1 3 1,3
(integer)1
127.0.0.1:6379> geoadd geos 2 1 2.1
(integer)1
1270.0.1:6379> geoadd geos 2 2 2,2
(integer)1
127.0.0.1:6379> geoadd geos 2 3 2,3
(integer)1
127.0.0.1:6379> geoadd geos 3 1 3,1
(integer)1
127.0.0.1:6379> geoadd geos 3 2 3,2
(integer)1
127.0.0.1:6379> geoadd geos 3 3 3.3
(integer)1
127.0.0.1:6379> geoadd geos 5 5 5,5
(integer)1
127 .0.0.1:6379> georadiusbymember geos 2.2 180 km
0.1:6379> georadiusbymember geos 2,2 120 km [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [AsCIDESC]