经纬度两点距离计算器_基于位置的服务之Redis Geo地理空间距离计算

本文介绍了如何利用RedisGeo进行地理空间存储,通过添加地理位置信息到Redis,并展示了计算两点间距离、查找指定范围内集合及获取地理位置信息的方法。讨论了Redis内部使用有序集合Zset存储地理数据,并提供了相关命令的示例,适用于小型项目中的地理空间解决方案。
摘要由CSDN通过智能技术生成

添加地理位置到Redis

本篇文章就来扯一下犊子。。。不,来扯一下基于Redis Geo地理空间的实现。

2a9bfe42f50ce5d4a2a43f34c86c9af1.png

言归正传,Redis Geo是怎么实现地理空间存储的?记得毛爷爷说过:实践是检验真理的唯一标准。

作为程序员没有点敲代码的能力怎么能行?

虽说在座的各位都是面向Ctrl+c,Ctrl+v编程,先使用一条简单的命令来引出今天的话题吧!

6528e45be899a35617ae13a8f8d8a351.png

以上命令是在Redis命令行模式下执行,加入北上广深的经纬度以供我们后续的测试。那么在redis内部存储的类型是什么呢?为什么Geo相关命令没有删除元素的命令呢?

下图展示了在Redis中存储的数据和类型。

c62ededd87bc83572a88abfedc430969.png

竟然是有序集合Zset,那么需要删除某个元素只需要调用Zset相关的命令即可。

以上说了一个最基本的命令,就是在有序集合中添加了北上广深的地理位置信息,这是什么原理?不要问我,反正我也不知道。

计算两点间的距离

以下命令分别计算广州-上海、深圳-广州,深圳-北京的距离以km为单位。

192ccc38a06222e8d08e0db7285d1649.png

场景:某陌,你与陌生小姐姐的距离。实际情况可能会复杂点。

计算指定地位位置、指定范围内的集合

以下命令返回经度113度,纬度23度范围200km内的集合。WITHCOORD-指定该参数将返回与中心的距离,如广州到中心点的距离为30.6255km。WITHDIST-指定该参数将返回地址位置坐标,可以使用ASC或者DESC返回距离中心的距离排序。

f52a8551ffb214e6d5d525f0ba4ab6e4.png

场景:点外卖,你附近有多少商家等着你。咦,不是某陌吗?

获取地理位置信息

好理解,把Zset中的数字还原为经纬度,方便在地图中展示。如获取深圳、广州的经纬度,可获取单个点和多个点。场景:某陌,小姐姐在地图上的哪个点。

0b4595948c32a7b36fe946051ae17e8d.png

获取一个或多个位置元素的标准GeoHash

这也验证了开篇说的,共享前缀越长距离越近的说法,以上时深圳-北京,深圳-广州的结果。这个用处好像没那么大,可以供持久化到数据库等。

2ecca8019b15345c73d723d4e4f38aae.png

获取指定成员、指定范围内的集合

和georadius命令类似,这个命令的中心点是元素成员为中心的,以上命令展示了以深圳和北京为中心距离200km内的城市。场景:某陌,我附近的小姐姐有多少个。

cf9f4604f895e459ec8151560a36df4e.png

后话

当然,使用Redis来作为业务解决方案或许还要根据实际需求来,这里只是一个引子,还是可以满足一些小项目的。

下期讲下基于Mysql的解决方案。有帮助,记得点赞!!点关注,不迷路!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值