Redis地理空间(GEO)

简介

​ 移动互联网时代LBS应用越来越多,交友软件中附件的小姐姐、外卖软件中附件的美食店铺、高德地图附近的核酸检查点等等,那这种附件各种形形色色的XXX地址位置选择时如何实现的?

​ 地球上的地理位置是使用二维码的经纬度表示,经度范围(-180,180],维度范围(-90,90],只要我们确定一个点的经纬度就可以名取得他在地球上得位置。

​ 例如嘀嘀打车,最直观得操作就是实时记录各个车的位置,然后我们要找车时,在数据库中查找距离我们(坐标x0,y0)附件r公里范围内部的车辆

使用如下SQL即可:

select taxi from position where x0-r < x < x0 + r and y0-r < y <y0+r

但是这样会有什么问题呢?

1.查询性能问题,如果并发高,数据量大这种查询是要搞垮数据库的。

2.这个查询的是一个矩形访问,而不是以我为中心的r公里为半径的圆形访问。

3.精确度的问题,我们知道地球不是平面坐标系,而是一个圆球,这种矩形计算在长距离计算时会有很大误差。

在这里插入图片描述

GEOADD 添加经纬度坐标
127.0.0.1:6379>GEOADD city 116.403963 39.915119 "天安门" 116.403414 39.924091 "故宫" 116.024067 40.362639 "长城"
(integer) 3
127.0.0.1:6379>ZRANGE city 0 -1
1) "\xe5\xa4\xa9\xae\x89\xe9\x97\xa8"
2) "\xe6\x95\x85\xe5\xae\xab"
3) "\xe9\x95\xbf\xe5\x9f\x8e"

出现中文乱码 进入redis前加上-- raw参数即可正常显示
redis-cli --raw
127.0.0.1:6379>ZRANGE city 0 -1
天安门
故宫
长城

GEOPOS 返回经纬度
127.0.0.1:6379>GEOPOS city 天安门 故宫 长城
116.40396326780319214
39.91511970338637383
116.40341609716415405
39.92409008156928252
116.02406591176986694
40.36263993239462167

GEOHASH 返回坐标的GEOHASH表示
127.0.0.1:6379>GEOHASH city 天安门 故宫 长城
wx4g0f6f2v0
wx4g0gfqsj0
wx4t85yikt0

GEODIST 两个位置之间的距离
127.0.0.1:6379>GEODIST city 天安门 长城 km
59.3390
127.0.0.1:6379>GEODIST city 天安门 长城 m
59338.9814

GEORADIUS 以半径为中心,查找附近的XXX
GEORADIUS city 116.418017 39.914402 10km withdist withcoord withhash count 10 desc
WITHDIST:在返回位置元素的同时,将位置元素与中心之间的距离也一并返回,距离的单位和用户给定的范围单位保持一致。
WITHCOORD:将位置元素的经度和维度也一并返回。
WITHHASH:以52位有符号整数的形式,返回位置元素经过原始geohash编码的有序集合分值,这个选项主要用于底层应用或者调试,实际中作用并不大.
127.0.0.1:6379>GEORADIUS city 116.418017 39.914402 10 km withdist withcoord withhash count 10 desc
故宫
1.6470
4069885568908290
116.40341609716415405
39.92409008156928252
天安门
1.2016
4069885555089531
116.40396326780319214
39.91511970338637383
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值