Geospatial

简介: Geospatial是Redis在3.2版本以后增加的地理位置GEO模块,这个模块可以用来实现微信附近的人,在线点餐“附近的餐馆”等位置功能。

一、简介

Geospatial是Redis在3.2版本以后增加的地理位置GEO模块,这个模块可以用来实现微信附近的人,在线点餐“附近的餐馆”等位置功能。


二、命令

2.1 GEOADD

命令简介:

GEOADD key longitude latitude member [longitude latitude member …]

将给定的空间元素(维度、经度、名字)添加到指定的键里面,数据以有序集合的形式被存放在键中。GEOADD接收的参数必须先输入经度,然后输入维度。

GEOADD经纬度的输入范围如下(对两极不支持):

  1. 有效经度介于-180°~180°之间
  2. 有效维度介于-85.05112878°至85.05112878°之间

当用户尝试输入一个超出范围的经度或者纬度时, GEOADD 命令将返回一个错误。

代码示例:

可以依次添加单个,也可以同时添加多个地理位置的元素。

127.0.0.1:6379> geoadd city 116.405289 39.904987 beijing

(integer) 1

127.0.0.1:6379> geoadd city 117.190186 39.125595 tianjin

(integer) 1

127.0.0.1:6379> geoadd city 121.472641 31.231707 shanghai

(integer) 1

127.0.0.1:6379> geoadd city 112.982277 28.19409 changsha 113.28064 23.125177 guangzhou

(integer) 2

错误示例:

127.0.0.1:6379> geoadd city 190 18 buzhidao

(error) ERR invalid longitude,latitude pair 190.000000,18.000000


2.2 GEOPOS

命令简介:

GEOPOS key member [member …]

根据键(key)获取给定位置元素的位置(经度和纬度),GEOPOS 可以接收一个member,也可以接收多个member,如果member不存在则返回nil

代码示例:

127.0.0.1:6379> geopos beijing

(empty array)

127.0.0.1:6379> geopos city beijing

1) 1) "116.40528827905654907"

  2) "39.90498588819134085"

127.0.0.1:6379> geopos city tianjin shanghai

1) 1) "117.19018846750259399"

  2) "39.12559461779084558"

2) 1) "121.47264093160629272"

  2) "31.23170744181923197"

127.0.0.1:6379> geopos city xiaoriben

1) (nil)


2.3 GEODIST

命令简介:

GEODIST key member1 member2 [unit]

返回两个给定位置之间的距离,以双精度浮点数的形式被返回。如果给定的位置其中一个不存在(两个都不存在也是一样,下面有示例),将会返回空值(nil)。

unit单位描述:

  • m -> 米
  • km -> 千米
  • mi -> 英里
  • ft -> 英尺

默认单位:

如果用户未给定指定单位unit,则默认为米(m)

误差范围:

GEODIST 计算的算法会将地球考虑为一个完全球体,在极限情况下,存在最大0.5%的误差

代码示例:

127.0.0.1:6379> geodist city beijing shanghai m

"1067597.0432"

127.0.0.1:6379> geodist city beijing shanghai km

"1067.5970"

127.0.0.1:6379> geodist city beijing xiaoriben

(nil)

127.0.0.1:6379> geodist city meiguoguizi xiaoriben

(nil)

2.4 GEORADIUS

命令简介:

GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [ASC|DESC] [COUNT count]

以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。

m|km|ft|mi选项:

  • m -> 米
  • km -> 千米
  • mi -> 英里
  • ft -> 英尺

[WITHCOORD] [WITHDIST] [WITHHASH]选项:

  • [WITHCOORD]:将位置元素的经度和纬度也一并返回。
  • [WITHDIST] :在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。
  • [WITHHASH]: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。

[ASC|DESC] 选项:

  • ASC:根据给定的中心位置,从近到远返回位置元素
  • DESC:根据给定的中心位置,从远到近返回位置元素

[COUNT count] 参数:

GEORADIUS 默认会返回符合条件的全部位置元素。但是用户可以通过[COUNT count] 参数去指定获取前N个匹配元素。这个参数可以减少需要返回的元素数量,一定程度上可以减少带宽压力。

返回值:

GEORADIUS 的返回值是一个数组,但是数组的内容会根据是否存在上述参数而改变

  • 未给定任何WITH参数,则返回普通线性列表
  • 给定[WITHCOORD] [WITHDIST] [WITHHASH]等参数后返回一个二层嵌套数组

具体返回值请查看后续示例,建议还是自己多搞几次就清楚了


代码示例:

未给定任何WITH参数

127.0.0.1:6379> georadius city 116.405289 39.904987 1000 km

1) "tianjin"

2) "beijing"

给定[WITHCOORD] [WITHDIST] [WITHHASH]等参数,返回的时二层嵌套数组

127.0.0.1:6379> georadius city 116.405289 39.904987 1000 km withcoord

1) 1) "tianjin"

  2) 1) "117.19018846750259399"

     2) "39.12559461779084558"

2) 1) "beijing"

  2) 1) "116.40528827905654907"

     2) "39.90498588819134085"

127.0.0.1:6379> georadius city 116.405289 39.904987 1000 km withdist

1) 1) "tianjin"

  2) "109.7754"

2) 1) "beijing"

  2) "0.0001"


2.5 GEORADIUSBYMEMBER

命令简介:

GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [ASC|DESC] [COUNT count]

GEORADIUSBYMEMBER与GEORADIUS的区别在于,GEORADIUSBYMEMBER无需给定经纬度,只需要给定成员的key就行,具体使用与GEORADIUS一致


代码示例:

127.0.0.1:6379> georadiusbymember city beijing 1000 km

1) "tianjin"

2) "beijing"

127.0.0.1:6379> georadiusbymember city beijing 1000 km withcoord

1) 1) "tianjin"

  2) 1) "117.19018846750259399"

     2) "39.12559461779084558"

2) 1) "beijing"

  2) 1) "116.40528827905654907"

     2) "39.90498588819134085"

2.6 GEOHASH

命令名称:

GEOHASH key member [member …]

返回一个或多个位置元素的GeoHash表示,可以给顶多个key中的member,因此返回的是一个数组。

代码示例:

127.0.0.1:6379> geohash city beijing shanghai changsha

1) "wx4g0b7xru0"

2) "wtw3sjt9vs0"

3) "wt026ux4mz0"

三、中国省会城市的经纬度

为了便于各位大佬们学习Geospatial的学习,我整理了全国省会城市的经纬度在这,有需要的可以自取。

名称

经度

维度

北京市

116.405289

39.904987

天津市

117.190186

39.125595

呼和浩特市

111.751990

40.841490

银川市

106.232480

38.486440

石家庄市

114.502464

38.045475

济南市

117.000923

36.675808

郑州市

113.665413

34.757977

西安市

108.948021

34.263161

武汉市

114.298569

30.584354

南京市

118.76741

32.041546

合肥市

117.283043

31.861191

上海市

121.472641

31.231707

长沙市

112.982277

28.19409

南昌市

115.892151

28.676493

杭州市

120.15358

30.287458

福州市

119.306236

26.075302

广州市

113.28064

23.125177

台北市

121.5200760

25.0307240

海口市

110.199890

20.044220

南宁市

108.320007

22.82402

重庆市

106.504959

29.533155

昆明市

102.71225

25.040609

贵阳市

106.713478

26.578342

成都市

104.065735

30.659462

兰州市

103.834170

36.061380

西宁市

101.777820

36.617290

拉萨市

91.11450

29.644150

乌鲁木齐市

87.616880

43.826630

沈阳市

123.429092

41.796768

长春市

125.324501

43.886841

哈尔滨市

126.642464

45.756966

香港

114.165460

22.275340

澳门

113.549130

22.198750


目录
相关文章
|
流计算
《Geospatial Situation Detection》电子版地址
Geospatial Situation Detection through FlinkCEP@Uber-使用Flink CEP进行地理情形检测的实践
50 0
《Geospatial Situation Detection》电子版地址
J3
|
存储 机器学习/深度学习 NoSQL
Redis之Geospatial:你不知道的,附近人
Redis之Geospatial:你不知道的,附近人
J3
234 0
Redis之Geospatial:你不知道的,附近人
|
并行计算 算法 搜索推荐
你管这叫 PageRank 算法
算法简介 核心思想 算法原理 算法分析 算法改进
你管这叫 PageRank 算法
|
消息中间件 NoSQL Java
Redis的地理空间(geospatial)
Redis的地理空间(geospatial)
343 0
|
NoSQL 算法 定位技术
Geospatial-地理空间
Geospatial-地理空间
148 0
Geospatial-地理空间
|
SQL JSON 定位技术
Data Lake Analytics的Geospatial分析函数
0. 简介 为满足部分客户在云上做Geometry数据的分析需求,阿里云Data Lake Analytics(以下简称:DLA)支持多种格式的地理空间数据处理函数,符合Open Geospatial Consortium’s (OGC) OpenGIS规范,支持的常用数据格式包括: WKT WKB GeoJson ESRI Geometry Object Json ESRI Shape DLA采用4326坐标系标准,EPSG 4326使用经纬度坐标,属于地理坐标系。
1966 0
|
关系型数据库 MySQL
|
MySQL 关系型数据库