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

使用Redis实现附近的人及打车服务

当用户登录应用时,或者保持用户登录后用户使用应用时,客户端是可以时刻获取用户位置信息(前提是用户要开启位置获取权限),客户端获取到最新地理位置后,上传到后端服务器进行更新。...将所有方格编码值映射到一维空间,相邻方格GeoHash编码值也接近: 所以,使用Sorted Set范围查询得到相近编码值,实际地理空间也是相邻方格,即可实现LBS应用“附近的人”。...编码值0111、1000两方格就相距较远: 所以,为避免查询不准确,可同时查询给定经纬度所在方格周围4或8个方格。...即这个矩形区域所有的(经纬度坐标)都共享相同 GeoHash 字符串,这样既可保护隐私(只表示大概区域位置而非具体),又容易做缓存。...GEORADIUS 使用输入经度和纬度来决定中心 指定成员位置被用作查询中心 使用GEOADD添加地理位置信息时,用标准格式参数 x,y, 所以经度必须在纬度之前。

1.1K20

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

)为中心,搜索半径为100千米范围位置,并返回最多5个结果以及与中心位置距离。...WITHCOORD:返回位置经度和纬度。WITHDIST:返回位置与查询距离。ASC|DESC:按距离升序或降序排序。COUNT count:返回最多指定数量结果。..., 37.502669)为中心,半径为100千米范围进行搜索,并返回最多5个结果以及与查询距离。...,以(15.087269, 37.502669)为中心,半径为100千米范围进行搜索,并将结果存储到名为results新键中。...这些地理信息命令允许Redis中存储和处理地理位置数据,包括添加地理位置、计算距离、获取地理哈希值、获取经度和纬度、搜索附近位置等操作。这些命令提供了方便而强大功能,可以各种应用场景中使用。

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

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

)为中心,搜索半径为100千米范围位置,并返回最多5个结果以及与中心位置距离。...WITHCOORD:返回位置经度和纬度。 WITHDIST:返回位置与查询距离。 ASC|DESC:按距离升序或降序排序。 COUNT count:返回最多指定数量结果。..., 37.502669)为中心,半径为100千米范围进行搜索,并返回最多5个结果以及与查询距离。...,以(15.087269, 37.502669)为中心,半径为100千米范围进行搜索,并将结果存储到名为results新键中。...这些地理信息命令允许Redis中存储和处理地理位置数据,包括添加地理位置、计算距离、获取地理哈希值、获取经度和纬度、搜索附近位置等操作。这些命令提供了方便而强大功能,可以各种应用场景中使用。

24130

geohash之2d 地理空间索引

MongoDB将位置字段中二维坐标解释为,并且可以将这些编入特殊索引类型以支持基于位置查询。地理空间索引提供特殊地理空间查询操作。...有关查询存储地理空间索引中数据信息,请参阅使用2d索引查询地空间。 存储位置数据 要使用2d地理空间索引,您必须在预定二维坐标系(例如经度和纬度)上对位置数据建模。...没有定义具有这种无效地理空间查询行为。 创建2d索引时,MongoDB提供了以下选项: 位置范围 所有2d地理空间索引都有由坐标范围定义边界。...使用 bucketSize参数ensureIndex)(确定接近。甲 bucketSize5创建组位置值是5个单位指定经度和纬度范围索引。 bucketSize还决定索引粒度。...Geohash值 要创建地理空间索引,MongoDB会计算 指定范围坐标对geohash值,并为该地理散列编制索引。 要计算geohash值,请连续将2D地图划分为象限。

2.2K40

redis常用命令和数据类型

语法: geoadd key 经度 纬度 地名 经度 纬度 地名 ... ... 2、geopos:获取地理位置坐标(经度,纬度) geopos key 地名 3、geodist:计算两个位置之间距离...单位可以是:m、km、mi(英里)、ft(英尺) geodist key 地名1 地名2 单位 4、georadius:根据用户给定经纬度坐标来获取指定范围地理位置集合。...这个选项主要用于底层应用或者调试, 实际中作用并不大。 COUNT: 指定半径范围显示目标数量(半径内有100个,可以只显示50个) ASC: 查找结果根据距离从近到远排序。...DESC: 查找结果根据从远到近排序 5、georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围地理位置集合。...georadiusbymember 和 GEORADIUS 命令一样, 都可以找出位于指定范围元素, 但是 georadiusbymember 中心是由给定位置元素决定, 而不是使用经度和纬度来决定中心

79310

利用RedisGeo功能实现查找附近位置

前言 老板突然要上线一个需求,获取当前位置方圆一公里业务代理。明天上线!当接到这个需求时候我差点吐血,这时间也太紧张了。赶紧去查相关技术选型。经过一番折腾,终于晚上十完成了这个需求。...GEORADIUS 以给定经纬度为中心, 找出某一半径元素 GEOADD 将指定地理空间位置(纬度、经度、名称)添加到指定 key 中 GEORADIUSBYMEMBER 找出位于指定范围元素...2.1 写入地理信息 那么如何实现目标单位半径所有元素呢?我们可以将所有的位置经纬度通过上表中GEOADD将这些地理信息转换为 52 位Geohash写入Redis。...2.2 统计单位半径地区 我们可以借助于GEORADIUS来找出以给定经纬度,某一半径所有元素。...WITHCOORD 将位置元素经度和维度也一并返回,非必选。 WITHDIST 返回位置元素同时, 将位置元素与中心距离也一并返回。 距离单位和查询单位一致,非必选。

2.2K50

ENVI自动生成地面控制实现栅格影像自动地理配准

基于ENVI栅格遥感影像手动地理配准方法这篇文章中,我们介绍了ENVI Classic 5.3 (64-bit) 软件中通过“Select GCPs: Image to Image”工具手动指定地面控制...这一方法因为其地面控制寻找需要手动进行,所以较为不方便。本文就介绍一种ENVI 5.3 (64-bit) 软件中,自动生成地面控制,从而对遥感影像进行地理配准方法。   ...这里需要注意,首先,如果大家待配准两景遥感影像和本文中一样,即一景带有地理参考信息,而另一景不带有地理参考信息的话,就需要先手动选择至少3个地面控制(这三个就叫做“种子”),随后软件将自动生成剩余地面控制...其次,如果大家待配准两景遥感影像都含有地理参考信息,但是二者空间差距比较大(比如其中一景空间拉伸严重),也需要先手动选择几个地面控制作为种子,随后软件将自动生成剩余地面控制;这样子可以提高地理配准精度...此外其他情况(即待配准两景遥感影像均含有地理参考信息且空间差异不大),那么就可以不生成任何种子,直接进入下一步。

63810

利用RedisGeo功能实现查找附近

前言 老板突然要上线一个需求,获取当前位置方圆一公里业务代理。明天上线!当接到这个需求时候我差点吐血,这时间也太紧张了。赶紧去查相关技术选型。经过一番折腾,终于晚上十完成了这个需求。...GEORADIUS 以给定经纬度为中心, 找出某一半径元素 GEOADD 将指定地理空间位置(纬度、经度、名称)添加到指定 key 中 GEORADIUSBYMEMBER 找出位于指定范围元素...2.1 写入地理信息 那么如何实现目标单位半径所有元素呢?我们可以将所有的位置经纬度通过上表中GEOADD将这些地理信息转换为 52 位Geohash写入Redis。...2.2 统计单位半径地区 我们可以借助于GEORADIUS来找出以给定经纬度,某一半径所有元素。...WITHCOORD 将位置元素经度和维度也一并返回,非必选。 WITHDIST 返回位置元素同时, 将位置元素与中心距离也一并返回。距离单位和查询单位一致,非必选。

1.4K30

Redis之GEO类型解读

Redis GEO 可以需要处理地理位置数据场景中使用,例如近邻查询、地理位置路由、基于地理位置服务等。...使用 Redis GEO 可以高效地处理大量地理位置数据 基本命令  geoadd 将指定地理空间位置(纬度、经度、名称)添加到指定key中。...geopos 从key里返回所有给定位置元素位置(经度和纬度) geodist 返回两个给定位置之间距离 georadius 以给定经纬度为中心, 找出某一半径元素 georadiusbymember...找出位于指定范围元素,中心是由给定位置元素决定 geohash 返回一个或多个位置元素 Geohash 表示 geoadd 命令  将指定地理空间位置(纬度、经度、名称)添加到指定key...georadiusbymember 命令 这个命令和 GEORADIUS 命令一样, 都可以找出位于指定范围元素, 但是 GEORADIUSBYMEMBER 中心是由给定位置元素决定, 而不是像

22640

Redis之GEO类型解读

Redis GEO 可以需要处理地理位置数据场景中使用,例如近邻查询、地理位置路由、基于地理位置服务等。...使用 Redis GEO 可以高效地处理大量地理位置数据 基本命令 geoadd 将指定地理空间位置(纬度、经度、名称)添加到指定key中。...geopos 从key里返回所有给定位置元素位置(经度和纬度) geodist 返回两个给定位置之间距离 georadius 以给定经纬度为中心, 找出某一半径元素 georadiusbymember...找出位于指定范围元素,中心是由给定位置元素决定 geohash 返回一个或多个位置元素 Geohash 表示 geoadd 命令 将指定地理空间位置(纬度、经度、名称)添加到指定key...georadiusbymember 命令 这个命令和 GEORADIUS 命令一样, 都可以找出位于指定范围元素, 但是 GEORADIUSBYMEMBER 中心是由给定位置元素决定, 而不是像

382110

Redis实现附近的人

当用户登录应用时,或者保持用户登录后用户使用应用时,客户端是可以时刻获取用户位置信息(前提是用户要开启位置获取权限),客户端获取到最新地理位置后,上传到后端服务器进行更新。...即这个矩形区域所有的(经纬度坐标)都共享相同 GeoHash 字符串,这样既可保护隐私(只表示大概区域位置而非具体),又容易做缓存。...GEORADIUS 使用输入经度和纬度来决定中心 指定成员位置被用作查询中心 ?...使用GEOADD添加地理位置信息时,用标准格式参数 x,y, 所以经度必须在纬度之前。这些坐标的限制是可以被编入索引,区域面积可以很接近极点但是不能索引。...当在社交网站和其他大多数需要查询半径应用中使用时,这些偏差都不算问题。但是,最坏情况下偏差可能是 0.5%,所以一些地理位置很关键应用还是需要谨慎考虑。 代码实战 更新坐标 ?

69920

空间索引 - GeoHash算法及其实现优化

,左侧标识为0,右侧标识为 1,得出红点位置纵向上标识为 01; 将横向标识和纵向标识合并,规则为 纵向奇数位,横向偶数位 (也可纵横相反,但要在整个系统保持一致),得出红点在方形纸上标识为...如(116.276349, 40.040875)这个经度划分: 经度 [-180,0) 范围标识为0,经度范围在 [0, 180) 度标识为 1; 继续划分,经度范围在 [0,90) 标识为...地理就是离 (116.276349, 40.040875)两米。...如果我们把地理位置和其GeoHash编码存入数据库的话,我们要查找 附近两米,只需要限定条件 geo_code like '3OCO4XJ7%'就行了; 边界问题 可是最简版 GeoHash...此外,为了避免边界问题,我们还需要把周围八个方格 score 值范围也获取到。 我们划分地图时,每多划分一次,会添加经度和纬度两个二进制位,精度最高时,那么每一个方格最大值和最小值之间差1。

1.9K90

IM里“附近的人”功能实现原理是什么?如何高效率地实现它?

它需要做以下两件事情: 1)所有使用该IM产品的人,使用“附近的人”功能前提交自已地理位置; 2)根据“我”地理位置,计算出别人跟我距离; 3)将第2步中计算出距离由近及远,进行排序。...下面是一个简单Java版实现: /** * 计算地球上任意两(经纬度)距离 * * @param long1 第一经度 * @param lat1 第一纬度...geohashGetAreasByRadiusWGS84(xy[0], xy[1], radius_meters); //对中心及其周围8个geohash网格区域进行查找,找出范围元素对象...实际搜索时,首先会根据搜索半径计算geohash网格等级(即右图中网格大小等级),并确定九宫格位置(即红色九宫格位置信息);再依次查找计算九宫格中(蓝点和红点)与中心距离,最终筛选出距离范围...当我们根据输入半径和中心位置计算出能够覆盖目标区域最高等级九宫格(网格)时,就已经对九宫格外元素进行了筛除。

1.7K00

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

geospatial(地理位置) 朋友定位,附近的人,打车距离计算,主要用于存储地理位置信息,并对存储信息进行操作,该功能在 Redis 3.2 版本新增。...添加地理位置 geoadd key 经度 纬度 城市名称[多个添加,经纬度城市名称循环] 两级(南极和北极)无法添加,一般通过程序导入 添加北京位置 ? 添加河北和上海位置 ?...以指定经纬度为中心,找出某一半径元素 GEORADIUS key 维度 经度 半径长度 m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count...WITHDIST: 返回位置元素同时, 将位置元素与中心之间距离也一并返回。 WITHCOORD: 将位置元素经度和维度也一并返回。...搜索经度110 维度30 附近1000km位置,或者2000米位置 可以用于做附近的人,比如附近100m玩家XXX,感觉王者是不是这么做 ?

90520

Basemap系列教程:Basemap

默认为 10000,1000, 100, 10, 1,分别对应 c,l,i,h,f rsphere:设置投影半径。默认为 6370997 m。...如果给定一个序列,前两个参数作为椭球半径 ellps:椭球名,比如 ‘WGS84’。...关于设置边界框例子及解释 Basemap系列教程:管理投影 扩展 部分。...第一种方式是地理学坐标中定义地图边界框来设置地图范围 参数 描述llcrnrlon地理坐标左下角经度llcrnrlat地理坐标左下角纬度urcrnrlon 地理坐标右上角经度urcrnrlat地理坐标右上角纬度...使用投影单元设置边界框 参数 描述llcrnrx 投影单元中左下角 x 坐标llcrnry投影单元中左下角 y 坐标 urcrnrx投影单元中右上角 x 坐标 urcrnry投影单元中右上角 y 坐标 通过设置地理坐标中中心

1.5K40

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

经度范围在 (-180, 180],纬度范围 (-90, 90],纬度正负以赤道为界,北正南负,经度正负以本初子午线 (英国格林尼治天文台) 为界,东正西负。...” 以用户为中心,给定一个 1000 米作为半径画圆,那么圆形区域用户就是我们想要邂逅「附近的人」。...” 圆形外套上一个正方形,根据用户经、纬度最大最小值(经、纬度 + 距离),作为筛选条件过滤数据,就很容易将正方形「女神」信息搜索出来。 “多出来一些区域咋办?...” 多出来这部分区域用户,到圆点距离一定比圆半径要大,那么我们就计算用户中心与正方形所有用户距离,筛选出所有距离小于等于半径用户,圆形区域所用户即符合要求附近的人。...进行第一次二分区时,经度范围[-180,180]会被分成两个子区间:[-180,0) 和[0,180](我称之为左、右分区)。 此时,我们可以查看一下要编码经度值落在了左分区还是右分区。

1.5K10

redis | 九、redis之Geospatial

当在社交网站和其他大多数需要查询半径应用中使用时,这些偏差都不算问题。但是,最坏情况下偏差可能是0.5%,所以一些地理位置很关键应用还是需要谨慎考虑。 2. 它是如何工作?...1. geoadd 添加经纬元素 将指定地理空间位置(纬度、经度、名称)添加到指定key中。...这个命令和 GEORADIUS 命令一样, 都可以找出位于指定范围元素, 但是 GEORADIUSBYMEMBER 中心是由给定位置元素决定, 而不是像 GEORADIUS 那样, 使用输入经度和纬度来决定中心...以给定经纬度为中心, 找出某一半径元素 Redis GEOADD 命令 将指定地理空间位置(纬度、经度、名称)添加到指定key中 Redis GEORADIUSBYMEMBER 命令 找出位于指定范围元素...,中心是由给定位置元素决定

61620

美团如何查询附近商家

我们日常电脑美团或者饿了么外卖,附近商家几乎都是秒回,最简单理解,我们可以用经纬度来计算。 经纬度 谈到经纬度。想必大家中学时代地理课本里早就学过了。...地球是一个近乎标准椭球体,它赤道半径为6378.140千米,极半径为6356.755千米,平均半径6371.004千米。如果我们假设地球是一个完美的球体,那么它半径就是地球平均半径,记为R。...(相对地球半径而言),我们就可以把他们近似看成平面上,可以用下面的公式计算距离: ?...如同我们红箭头指那个,要找到它附近,是不是直接取出它所在经纬度格子所有点就可以了呢?再加上围绕它所在格子八个格子所有点,那就一定是这个周围所有点了! ?...在数据库中可以实现在一列上应用索引(某些情况下无法两列上同时应用索引) 3.GeoHash表示并不是一个,而是一个矩形区域 4.GeoHash编码前缀可以表示更大区域。

5K20
领券