Geospatial-地理空间


2.1 GEOADD

命令简介:

GEOADD key longitude latitude member [longitude latitude member …]

image.png

将给定的空间元素(维度、经度、名字)添加到指定的键里面,数据以有序集合的形式被存放在键中。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

image.png

错误示例:

127.0.0.1:6379> geoadd city 190 18 buzhidao

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

image.png

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)

image.png

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)

image.png

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”

尾声

评论里面有些同学有疑问关于如何学习material design控件,我的建议是去GitHub搜,有很多同行给的例子,这些栗子足够入门。

有朋友说要是动真格的话,需要NDK以及JVM等的知识,首现**NDK并不是神秘的东西,**你跟着官方的步骤走一遍就知道什么回事了,无非就是一些代码格式以及原生/JAVA内存交互,进阶一点的有原生/JAVA线程交互,线程交互确实有点蛋疼,但平常避免用就好了,再说对于初学者来说关心NDK干嘛,据鄙人以前的经历,只在音视频通信和一个嵌入式信号处理(离线)的两个项目中用过,嵌入式信号处理是JAVA->NDK->.SO->MATLAB这样调用的我原来MATLAB的代码,其他的大多就用在游戏上了吧,一般的互联网公司会有人给你公司的SO包的。
至于JVM,该掌握的那部分,相信我,你会掌握的,不该你掌握的,有那些专门研究JVM的人来做,不如省省心有空看看计算机系统,编译原理。

一句话,平常多写多练,这是最基本的程序员的素质,尽量挤时间,读理论基础书籍,JVM不是未来30年唯一的虚拟机,JAVA也不一定再风靡未来30年工业界,其他的系统和语言也会雨后春笋冒出来,但你理论扎实会让你很快理解学会一个语言或者框架,你平常写的多会让你很快熟练的将新学的东西应用到实际中。
初学者,一句话,多练。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值