首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一口气说出 4种 LBS “附近的人” 实现方式,面试官笑了

附近的人” 核心思想如下: 以 “我” 为中心,搜索附近用户 以 “我” 当前地理位置为准,计算出别人和 “我” 之间距离 按 “我” 别人距离远近排序,筛选出离我最近用户或者商店等 [在这里插入图片描述...比如:下边经、纬度就代表了三家距离相近餐厅。...缺点也很明显,需要大量计算两个点之间距离,非常影响性能。 3、实现 创建一个简单表用来存放用户经、纬度属性。...GEOADD:将给定位置对象(纬度经度、名字)添加到指定key; GEOPOS:从key里面返回所有给定位置对象位置(经度纬度); GEODIST:返回两个给定位置之间距离; GEOHASH...WITHDIST:在返回位置对象同时,将位置对象中心之间距离也一并返回。距离单位用户给定范围单位保持一致。 WITHCOORD:将位置对象经度维度也一并返回。

1.3K30
您找到你想要的搜索结果了吗?
是的
没有找到

一口气说出 4种 “附近的人” 实现方式,面试官笑了!

附近的人” 核心思想如下: 以 “我” 为中心,搜索附近用户 以 “我” 当前地理位置为准,计算出别人和 “我” 之间距离 按 “我” 别人距离远近排序,筛选出离我最近用户或者商店等 二、...比如:下边经、纬度就代表了三家距离相近餐厅。...在这里插入图片描述 2、利弊分析 纯基于 mysql 实现 “附近的人”,优点显而易见就是简单,只要建一张表存下用户经、纬度信息即可。缺点也很明显,需要大量计算两个点之间距离,非常影响性能。...GEOADD:将给定位置对象(纬度经度、名字)添加到指定key; GEOPOS:从key里面返回所有给定位置对象位置(经度纬度); GEODIST:返回两个给定位置之间距离; GEOHASH...WITHDIST:在返回位置对象同时,将位置对象中心之间距离也一并返回。距离单位用户给定范围单位保持一致。 WITHCOORD:将位置对象经度维度也一并返回。

1.9K20

Redis GeoHash核心原理解析

饱暖思yin欲麦叔饭后思考地图后台如何根据自己所在位置查询来查询附近餐馆呢?苦思冥想了半天,小麦想出了个方法:计算所在位置P北京所有餐馆距离,然后返回距离<=1000米餐馆。...,应该计算所在位置P所在街道所有餐馆距离,这样计算量又小了,效率也提升了。...但是对于空间上一个点(二维,包括经度纬度),如何排序呢?又如何索引呢?解决方法很多,下文介绍一种方法来解决这一问题。...如下两个图所示,第一个在城区,第二个在郊区,城区GeoHash字符串之间比较相似,郊区字符串之间也比较相似,而城区郊区GeoHash字符串相似程度要低些。 ? ?...插句题外话,计算纬度之间距离不能像求欧式距离那样平方开根号,因为地球是个不规整球体(图2a),普通计算适合都是默认按最简单完美球体假设,两点之间距离函数应该如图2b所示。 ?

1.4K20

GeoHash核心原理解析

某一天机机到北海公园游玩,肚肚饿了,于是乎打开手机地图,搜索北海公园附近餐馆,并选了其中一家用餐。 ?   饭饱之后机机开始反思了,地图后台如何根据自己所在位置查询来查询附近餐馆呢?...苦思冥想了半天,机机想出了个方法:计算所在位置P北京所有餐馆距离,然后返回距离<=1000米餐馆。...,应该计算所在位置P所在街道所有餐馆距离,这样计算量又小了,效率也提升了。   ...但是对于空间上一个点(二维,包括经度纬度),如何排序呢?又如何索引呢?解决方法很多,下文介绍一种方法来解决这一问题。   ...如下两个图所示,一个在城区,一个在郊区,城区GeoHash字符串之间比较相似,郊区字符串之间也比较相似,而城区郊区GeoHash字符串相似程度要低些。

1.1K30

Redis 实战篇:Geo 算法教你邂逅附近女神

附近的人核心思想如下: 以 “我” 为中心,搜索附近 Ta; 以 “我” 当前地理位置为准,计算出别人和 “我” 之间距离; 按 “我” 别人距离远近排序,筛选出离我最近用户。...MySQL 实现 “计算附近的人」,通过一个坐标计算这个坐标附近其他数据,按照距离排序,如何下手呢?...” 多出来这部分区域内用户,到圆点距离一定比圆半径要大,那么我们就计算用户中心点正方形内所有用户距离,筛选出所有距离小于等于半径用户,圆形区域内所用户即符合要求附近的人。...实战 根据经纬度距离获取外接矩形最大、最小经纬度以及根据经纬度计算距离使用了一个第三方类库: com.spatial4j...” 思路对了,为了实现对经纬度比较,Redis 采用业界广泛使用 GeoHash 编码,分别对经度纬度编码,最后再把经纬度各自编码组合成一个最终编码。

1.5K10

Redis 实战篇:通过 Geo 类型实现附近的人邂逅女神

附近的人核心思想如下: 以 “我” 为中心,搜索附近 Ta; 以 “我” 当前地理位置为准,计算出别人和 “我” 之间距离; 按 “我” 别人距离远近排序,筛选出离我最近用户。...MySQL 实现 “计算附近的人」,通过一个坐标计算这个坐标附近其他数据,按照距离排序,如何下手呢?...” 多出来这部分区域内用户,到圆点距离一定比圆半径要大,那么我们就计算用户中心点正方形内所有用户距离,筛选出所有距离小于等于半径用户,圆形区域内所用户即符合要求附近的人。...实战 根据经纬度距离获取外接矩形最大、最小经纬度以及根据经纬度计算距离使用了一个第三方类库: com.spatial4j...” 思路对了,为了实现对经纬度比较,Redis 采用业界广泛使用 GeoHash 编码,分别对经度纬度编码,最后再把经纬度各自编码组合成一个最终编码。

1.1K50

Redis 实战篇:通过 Geo 类型实现附近的人邂逅女神

附近的人核心思想如下: 以 “我” 为中心,搜索附近 Ta; 以 “我” 当前地理位置为准,计算出别人和 “我” 之间距离; 按 “我” 别人距离远近排序,筛选出离我最近用户。...MySQL 实现 “计算附近的人」,通过一个坐标计算这个坐标附近其他数据,按照距离排序,如何下手呢?...“可是总不能遍历所有的「女神」经纬度自己纬度数据计算在根据距离排序,这个计算量也太大了。...” 多出来这部分区域内用户,到圆点距离一定比圆半径要大,那么我们就计算用户中心点正方形内所有用户距离,筛选出所有距离小于等于半径用户,圆形区域内所用户即符合要求附近的人。...实战 根据经纬度距离获取外接矩形最大、最小经纬度以及根据经纬度计算距离使用了一个第三方类库: com.spatial4j

1.3K20

Redis 7地理信息命令太太太牛了!一文教你如何使用

这些命令使用经度纬度坐标表示地理位置,并提供了各种功能,如存储位置、计算距离、查找附近位置等。下面是Redis 7中常用地理信息命令: GEOADD:将指定地理位置添加到指定键中。...GEODIST:计算两个位置之间距离。 GEOHASH:获取指定位置地理哈希值。 GEOPOS:获取一个或多个位置经度纬度。...WITHCOORD:返回位置经度纬度。 WITHDIST:返回位置查询点距离。 ASC|DESC:按距离升序或降序排序。 COUNT count:返回最多指定数量结果。...这些地理信息命令允许在Redis中存储处理地理位置数据,包括添加地理位置、计算距离、获取地理哈希值、获取经度纬度、搜索附近位置等操作。这些命令提供了方便而强大功能,可以在各种应用场景中使用。...通过使用GEOADD命令,我们可以将地理位置及其名称添加到Redis中指定键中,方便地存储管理位置数据。GEODIST命令允许计算两个位置之间距离,提供了方便距离计算功能。

28730

Redis 7地理信息命令太太太牛了!一文教你如何使用

这些命令使用经度纬度坐标表示地理位置,并提供了各种功能,如存储位置、计算距离、查找附近位置等。下面是Redis 7中常用地理信息命令:GEOADD:将指定地理位置添加到指定键中。...GEODIST:计算两个位置之间距离。GEOHASH:获取指定位置地理哈希值。GEOPOS:获取一个或多个位置经度纬度。GEORADIUS:根据指定位置距离,在指定键中查找附近位置。...WITHCOORD:返回位置经度纬度。WITHDIST:返回位置查询点距离。ASC|DESC:按距离升序或降序排序。COUNT count:返回最多指定数量结果。...这些地理信息命令允许在Redis中存储处理地理位置数据,包括添加地理位置、计算距离、获取地理哈希值、获取经度纬度、搜索附近位置等操作。这些命令提供了方便而强大功能,可以在各种应用场景中使用。...通过使用GEOADD命令,我们可以将地理位置及其名称添加到Redis中指定键中,方便地存储管理位置数据。GEODIST命令允许计算两个位置之间距离,提供了方便距离计算功能。

25510

Redis高级篇之GEO搜索最近地铁口

它支持对地理位置进行半径搜索、矩形搜索附近点搜索等多种操作,可以用于实现诸如查找最近地铁口等功能。本文将介绍如何使用RedisGEO数据结构来实现最近地铁口搜索。...哈希表用于存储地理位置元数据,例如地点名称、地址等;有序集合用于存储地理位置坐标信息,例如经度纬度。坐标编码GEO数据结构使用纬度表示地理位置坐标信息。...经纬度是一种常用地理坐标系统,它使用经度纬度来表示地球上位置。在GEO数据结构中,经度纬度被编码为一个64位整数,以便进行高效计算比较。...距离计算GEO数据结构使用Haversine公式来计算两个地理位置之间距离。Haversine公式是一种常用距离计算方法,它可以计算地球上两点之间距离,考虑到地球曲率。...在GEO数据结构中,Haversine公式被用于计算两个地理位置之间距离,以便进行搜索排序。搜索算法GEO数据结构使用了一种基于跳表搜索算法来实现高效地理位置搜索。

43032

Redis系统学习之三种特殊数据类型(geospatial(地理位置))

添加地理位置 geoadd key 经度 纬度 城市名称[多个添加,经纬度城市名称循环] 两级(南极北极)无法添加,一般通过程序导入 添加北京位置 ? 添加河北上海位置 ?...计算两个位置之间距离(直线距离[笑哭,谁会查直线距离]) geodist key 位置1 位置2 [m|km|ft|mi](单位) m :米,默认单位。 km :千米。 mi :英里。...计算河北北京之间距离,单位为千米 ?...WITHDIST: 在返回位置元素同时, 将位置元素中心之间距离也一并返回。 WITHCOORD: 将位置元素经度维度也一并返回。...使用场景 计算两地之间直线距离 存储地理位置 实现位置附近人功能 作者:彼岸舞 时间:2021\05\05 内容关于:Redis 本文属于作者原创,未经允许,禁止转发

92820

微服务 SpringBoot 整合 Redis GEO 实现附近商户功能

⛄引言本文参考黑马 点评项目在点评项目中 如何 实现 附近商家查询呢,展示出距离自己5公里内商户,这样功能如何实现?...常见命令 GEOADD:添加一个地理空间信息,包含:经度(longitude)、纬度(latitude)、值(member)GEODIST:计算指定两个点之间距离并返回GEOHASH:将指定member...6.2.新功能⚡使用GEO存储经纬度、查询距离本篇博文 Redis版本为 6.2版本进入redis 查询 geo相关指令 使用 GEO 完成以下功能 实现两点之间距离查询,以及指定范围内地点 需求如下使用...天安门 故宫之间距离在以上添加地点中查询 天安门广场 (116.397827 39.90374) 附近2公里地点GEOADD 添加GEOPOS 查看指定地点 经纬度信息GEOHASH...查看指定地址 经纬度HASH值拓展: GEOPOS GEOHASH 区别在于 GEOHASH 节约了 经纬度存储 内存、减少不必要内存消耗,从而提升性能GEODIST 查看 天安门 故宫之间距离

80330

redis | 九、redis之Geospatial

sorted set使用一种称为Geohash技术进行填充。经度纬度位是交错,以形成一个独特52位整数....(附近人功能) 以给定纬度为中心, 返回键包含位置元素当中, 中心距离不超过给定最大距离所有位置元素。...在给定以下可选项时, 命令会返回额外信息: WITHDIST: 在返回位置元素同时, 将位置元素中心之间距离也一并返回。距离单位用户给定范围单位保持一致。...至于额外信息, 则会作为子数组后续元素, 按照以下顺序被返回: 以浮点数格式返回中心位置元素之间距离, 单位用户指定范围时单位一致。 geohash 整数。...Geohash 表示 Redis GEOPOS 命令 从key里返回所有给定位置元素位置(经度纬度) Redis GEODIST 命令 返回两个给定位置之间距离 Redis GEORADIUS 命令

62720

一文了解geohash原理,实践实战设计思路

附近的人” 核心思想如下: ① 以“自己”为中心,搜索附近用户 ② 以“自己”当前地理位置为准,计算出别人和 “我” 之间距离 ③ 按“自己”别人距离远近排序,筛选出离我最近用户或者商店等...,我们可以看到需要大量计算两个点之间距离,对性能有很大影响。..., 将位置元素中心之间距离也一并返回。...,中心点是由给定位置元素决定,不是使用经度纬度来决定中心点。...注意事项: ① 实际存储数据类型是zset,member是zsetvalue,score是根据经纬度计算出geohash ② geohash是52bit长整型,计算距离使用公式是Haversine

2.7K20

Redis 应用实践-地理位置

本文将介绍Redis地理位置数据结构以及如何在应用中使用它。我们将首先介绍地理位置数据结构基本概念使用方法,然后介绍如何在Python应用中使用地理位置数据结构。...在地理位置集合中,可以使用以下命令进行操作:geoadd命令:向地理位置集合中添加一个元素。geopos命令:获取地理位置集合中指定元素经度纬度。...三、Python应用中使用地理位置数据结构下面我们将介绍如何在Python应用中使用Redis地理位置数据结构。假设我们有一个城市商家列表,每个商家都有一个唯一ID、名称、经度纬度信息。...我们希望能够根据用户位置查询附近商家。添加商家信息到地理位置集合首先,我们需要将商家信息添加到地理位置集合中。我们可以使用Redisgeoadd命令将商家经度纬度信息添加到地理位置集合中。...我们使用geoadd命令将商家经度纬度信息添加到地理位置集合中。添加完成后,我们使用georadius命令获取距离指定坐标一定范围内所有商家。

86120

是什么能让 APP 快速精准定位到我们位置?

本文包含以下内容,阅读完需要约10分钟: 我们日常生活中遇到哪些定位场景 简单复习一下经纬度 geohash原理解析 geohash存在边界问题 如何解决边界问题 计算两点距离计算 geohash...答案就是 geohash geohash通过算法将1个定位经度纬度2个数值,转换成1个hash字符串。如果2个地方距离越近,那么他们hash值前缀越相同。...指定一个位置纬度坐标值。 根据十字坐标图二分法,将纬度经度划分成10二进制数字串。 按照“偶数位放经度,奇数位放纬度”算法,合并经度纬度这2个二进制数字串。...最后分别计算这些点自己距离(由于范围很小,点数量就也很少,计算量就很少)过滤掉不满足条件点就ok了。...radLng1 - $radLng2) + sin($radLat1) * sin($radLat2)) * $R; 目前大多使用是Google公开距离计算公司,推导算式B为: $s = 2*asin

1.5K30

redis geo 全网最好用redis-geo

在工作中开发网约车相关功能时候,需要提供一个通过指定位置查询附近司机接口。现将研究成果记录下来 1、使用场景 司机在空闲时,会在司机端定时上报其位置。...当乘客下单后,会通过乘客位置查询附近司机然后进行匹配 2、GEO简介 reids在版本 3.2.0之后,引入了geo功能,可用于处理地理位置。...最后一个隔很远 4、测试 使用postman,分别发送如下请求,添加司机位置: http://localhost:18081/redisGeo/addDriverPosition?...上面的key中包含了城市id,value表示司机id 接下来查询“东方雨林”附近所有司机位置:http://localhost:18081/redisGeo/getNearDrivers?...,附近坐标点经纬度、间隔距离,同时结果是按间隔距离正序排序 请求返回结果如下: [ { "driverId": "000001", "cityCode": "420000

1.6K20
领券