加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

使用 redis-py 储存Geo地理位置数据

发布时间:2020-12-16 04:40:52 所属栏目:安全 来源:网络整理
导读:Redis 3.2 版本的其中一个重要更新就是提供了对地理位置(GEO)数据的支持, 这一特性允许用户将地理位置信息储存到 Redis 数据库中, 并对它们执行距离计算、范围查找等操作。 可喜的是, 今天笔者发现 redis-py 的最新版本已经添加了对 GEO 特性的支持,

Redis 3.2 版本的其中一个重要更新就是提供了对地理位置(GEO)数据的支持, 这一特性允许用户将地理位置信息储存到 Redis 数据库中, 并对它们执行距离计算、范围查找等操作。

可喜的是, 今天笔者发现 redis-py 的最新版本已经添加了对 GEO 特性的支持, 所以今天就让我们一起来看看如何在 redis-py 中处理地理位置数据。

redis-py github:

https://github.com/andymccurdy/redis-py

目前redis-py只有 2.10.6版本支持地理位置(GEO)数据的支持,如果需要使用GEO,请更新2.10.6版本。

如果已安装redis-py

pip?uninstall?redis?#?卸载redis

pip?install?redis

载入redis-py库:

from?redis?import??Redis
conn?=?Redis()

通过对 Redis() 对象的属性进行访问, 我们可以确认各个 GEO 命令在 redis-py 中都有了相应的方法:

>>>>>>:?for?i?in?dir(conn):
???...:?????if?i.startswith('geo'):
???...:?????????print?i
???...:
???
geoadd
geodist
geohash
geopos
georadius
georadiusbymember

添加地理位置 geoadd():

geoadd(self,?name,?*values)?

>>>?conn.geoadd("广东",?114.07,?22.62,?"深圳",?113.23,?23.16,?"广州",?113.11,?23.05,?"佛山")
3

获取地理位置 geopos():

geopos(self,?*values)

>>>?conn.geopos('广东','广州')
?[(113.22999805212021,?23.15999943763535)]

计算两地间的距离geodist():

geodist(self,?place1,?place2,?unit=None)

>>>?conn.geodist('广东','广州','佛山')
17331.9291

GEODIST 命令默认使用米作为单位, 所以它返回了17331.9291米作为结果, 为了让这个结果更为直观一些, 我们可以将 GEODIST 命令的单位从米改为千米(公里)

>>>?conn.geodist('广东','佛山',unit='km')
17.3319

现在可以看到广州和佛山之间的相距是17.3319km

范围查找georadius()和georadiusbymember()

#?以给定的经纬度为中心,?找出某一半径内的元素
georadius(self,?longitude,?latitude,?radius,?unit=None,?withdist=False,?withcoord=False,?withhash=False,?count=None,?sort=None,?store=None,?store_dist=None)

#?找出位于指定范围内的元素,中心点是由给定的位置元素决定
georadiusbymember(self,?member,?store_dist=None)

georadius()

#?查找深圳坐标120公里范围内的城市
>>>?conn.georadius("Guangdong",?100,?unit="km",?withdist=True)

[['佛山',?17.3321],?['深圳',?0.0002],?['广州',?104.9567]]

georadiusbymember()

>>>?conn.georadiusbymember("广东",?30,?withdist=True)
[['广州',?0.0],?['佛山',?17.3319]]

获取 geohash

#?返回一个或多个位置元素的?Geohash?表示
geohash(self,?*values)


>>>?conn.geohash("广东",?"佛山",?"深圳")
['ws0eb85sf00',?'ws07juh5yp0',?'ws10etz5p90']


(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读