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

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

Redis的GEO可以解决上述数据库出现的问题,得益于GEO原理:数据结构GEO数据结构使用了Redis的内置数据结构,包括哈希有序集合。...哈希用于存储地理位置的元数据,例如地点名称、地址等;有序集合用于存储地理位置的坐标信息,例如经度纬度。坐标编码GEO数据结构使用经纬度表示地理位置的坐标信息。...经纬度是一种常用的地理坐标系统,它使用经度纬度来表示地球上的位置。在GEO数据结构经度纬度被编码为一个64位的整数,以便进行高效的计算比较。...在GEO数据结构,Haversine公式被用于计算两个地理位置之间距离,以便进行搜索排序。搜索算法GEO数据结构使用了一种基于跳表的搜索算法来实现高效的地理位置搜索。...在实际应用,我们可以将地铁口的数据存储在一个哈希,然后将坐标添加到GEO数据结构。当我们需要查找最近地铁口时,可以使用GEOPOS命令来实现。

42832

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

” 什么是面向 LBS 应用 经纬度经度与纬度的合称组成一个坐标系统。...为了满足高性能的矩形区域算法,数据需要在经纬度坐标加上复合索引 (longitude, latitude),这样可以最大优化查询性能。...实战 根据经纬度距离获取外接矩形最大、最小经纬度以及根据经纬度计算距离使用了一个第三方类库: com.spatial4j...能不能将经纬度转换成一个浮点数呢? ” 思路对了,为了实现对经纬度比较,Redis 采用业界广泛使用的 GeoHash 编码,分别对经度纬度编码,最后再把经纬度各自的编码组合成一个最终编码。...,距离靠近的二维坐标映射到一维后的点之间距离也会很接近。

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

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

我也希望通过这个 App邂逅女神…… 记忆,一个下班的夜晚,她人群轻盈的移动着,那高挑苗条的身材像漂浮在空间中的一个飘逸的音符。她的眼睛充满清澈的阳光和活力,她的双眸中印着银河系的星光。...为了满足高性能的矩形区域算法,数据需要在经纬度坐标加上复合索引 (longitude, latitude),这样可以最大优化查询性能。...实战 根据经纬度距离获取外接矩形最大、最小经纬度以及根据经纬度计算距离使用了一个第三方类库: com.spatial4j...能不能将经纬度转换成一个浮点数呢? ” 思路对了,为了实现对经纬度比较,Redis 采用业界广泛使用的 GeoHash 编码,分别对经度纬度编码,最后再把经纬度各自的编码组合成一个最终编码。...,距离靠近的二维坐标映射到一维后的点之间距离也会很接近。

1.3K20

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

” 什么是面向 LBS 应用 经纬度经度与纬度的合称组成一个坐标系统。...为了满足高性能的矩形区域算法,数据需要在经纬度坐标加上复合索引 (longitude, latitude),这样可以最大优化查询性能。...实战 根据经纬度距离获取外接矩形最大、最小经纬度以及根据经纬度计算距离使用了一个第三方类库: com.spatial4j...能不能将经纬度转换成一个浮点数呢? ” 思路对了,为了实现对经纬度比较,Redis 采用业界广泛使用的 GeoHash 编码,分别对经度纬度编码,最后再把经纬度各自的编码组合成一个最终编码。...,距离靠近的二维坐标映射到一维后的点之间距离也会很接近。

1.1K50

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

然后通过数据库like操作符 “ like wtw366%” 快速查找到附近的车。...地球铺平面图 以赤道本初子午线为界,将地球分为经度纬度。赤道是在0度,本初子午线也在0度。以赤道作为经度X横坐标,以本初子午线作为纬度 Y 竖坐标。...经纬度经度(longitude)``纬度(latitude)`简称 `lng`  `lat 其中,本初子午线向东划分180度称为东经,用”E”表示:(0, 180];向西划分180度为西经,...指定一个位置的经纬度坐标值。 根据十字坐标二分法,将纬度经度划分成10的二进制数字串。 按照“偶数位放经度,奇数位放纬度”算法,合并经度纬度这2个二进制数字串。...redis中经纬度使用52位的整数进行编码,放进zset,zset的value元素是key,score是GeoHash的52位整数值。

1.5K30

PHP 经纬度坐标相关计算方法

计算经纬度坐标间的距离 3. 根据经纬度坐标距离排序 4. 经纬度范围查询 1....计算经纬度坐标间的距离 计算经纬度坐标间的距离 功能函数 (前四个参数为两组经纬度坐标) /** * 计算经纬度坐标间的距离 * @param $lng1 经度 * @param $lat1 纬度 *...根据经纬度坐标距离排序 项目中经常有距离显示数据的场景,根据距离排序,越近越靠前显示;比如: 店铺地址、房源信息等。...代码示例: // 当前坐标$longitude = '113.869205';$latitude  = '22.583286';// 数据库经纬度字段分别为:longitude、latitude$field...首先,根据当前位置获取 3 公里内的经纬度范围,然后带上查询条件查询数据库即可 $longitude = 113.869205; //经度$latitude  = 22.583286; //纬度$radius

66540

揭秘!是什么能让APP快速精准定位?

然后通过数据库like操作符“like wtw366%”快速查找到附近的车。...以赤道作为经度X横坐标,以本初子午线作为纬度Y竖坐标经度(longitude)纬度(latitude)简称lnglat。...注意:纬线纬线是角度数值,并不是米。[表示等于,(表示小于。 所以,我们常用十字坐标法来表示经纬度坐标图: 注意:我们一般读“经纬度”,其实,表示一个定位的书面经纬度是 “(纬度,经度)”。...指定一个位置的经纬度坐标值。 根据十字坐标二分法,将纬度经度划分成10的二进制数字串。 按照“偶数位放经度,奇数位放纬度”算法,合并经度纬度这2个二进制数字串。...redis中经纬度使用52位的整数进行编码,放进zset,zset的value元素是key,score是GeoHash的52位整数值。

1.3K20

微信附近的人,用redis也能实现?(GEO)

用关系型数据库(mysql)的方式解决问题 我们先把问题简化,假如我附近的人都是不动的,也就是说他们的位置是固定的,按照咱们传统的思路,就是把每个人的经纬度存起来,然后遍历这些经纬度,我们可以通过某种方法获取我各个经纬度之间距离...遍历数据,自己对比,获得每个人和自己的距离数据库的所有记录都遍历一遍,把每一条记录的经纬度自己的经纬度做个对比,就能获取到各个记录离自己的距离。...如何根据两个经纬度,获取到这两个点之间距离我在网上找了个方法,大家可以参考下 /** * 求两个已知经纬度之间距离,单位为米 * * @param lng1 $ ,lng2 经度 * @param...WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间距离也一并返回。 WITHCOORD: 将位置元素的经度维度也一并返回。...这个选项主要用于底层应用或者调试, 实际的作用并不大。 COUNT 限定返回的记录数。 ASC: 查找结果根据距离近到远排序。 DESC: 查找结果根据远到近排序。

59910

Redis GeoHash核心原理解析

为什么分别给经度维度编码?为什么需要将经纬度两串编码交叉组合成一串编码?本节试图回答这一问题。...每个POI都有经纬度信息,用图1b的SQL语句在mySQL建立了POI_spatial的,其中latlng两个字段来代表纬度经度。为后续分析方便起见,我人造了40万个POI数据。...插句题外话,计算经纬度之间距离不能像求欧式距离那样平方开根号,因为地球是个不规整的球体(图2a),普通计算适合都是默认按最简单的完美球体假设,两点之间距离函数应该如图2b所示。 ?...根据这个思路我们执行SQl查询(图5)(注:经度或纬度每隔0.001度,距离相差约100米,由此推算出矩形左下角右上角坐标),发现过滤后正好剩下两个POI。...对于面来说,它由一系列首尾相连的经纬度坐标点组成,一个面可能有成百上千个坐标,这时数据库怎么存储,B树怎么索引,这些都是问题。

1.4K20

美团如何查询附近商家

我们当前的经纬度,可以wifi或者手机的GPS获取。 计算距离 接下来我们计算两点的距离。...这个就是著名的 Geohash 值得注意的是: 1.Geohash比直接用经纬度的高效很多,而且使用者可以发布地址编码,既能表明自己位于某地方附近,又不至于暴露自己的精确坐标,有助于隐私保护。...2.GeoHash用一个字符串表示经度纬度两个坐标。...在数据库可以实现在一列上应用索引(某些情况下无法在两列上同时应用索引) 3.GeoHash表示的并不是一个点,而是一个矩形区域 4.GeoHash编码的前缀可以表示更大的区域。...这个特性可以用于附近地点搜索 查找 通过上面的方法,我们就可以将所有商铺的经纬度给一个编码存进数据库,建立索引。

5.1K20

实时即未来,车联网项目之电子围栏分析【六】

使用场景 两点之间球面距离的计算——DistanceCaculateUtil 电子围栏自定义对象将两个数据流合并 设置窗口并计算确定是否在电子围栏内告警 合并分析电子围栏结果 读取电子围栏分析结果并广播...电子围栏的应用场景 签到打卡类场景 共享单车类场景 线下门店促销场景 创建电子围栏 在此项目中,使用的电子围栏是规则的圆形,判断是否在圆形电子围栏区域内,可以使用车辆位置中心点球面距离小于等于半径,在电子围栏的区域内...ConnectStreamed应用 connect流说明 connect流使用场景 两点之间球面距离的计算——DistanceCaculateUtil 导入工具jar包坐标 <!...,坐标系、经纬度用于计算距离(直线距离) * @param gpsFrom * @param gpsTo * @param ellipsoid * @return...//2.3.2.2.电子围栏id,电子围栏名称,地址,半径 //2.3.2.3.电子围栏经纬度 //2.3.2.4.计算经纬度电子围栏经纬度距离距离

1.1K20

⑦【Redis GEO 】Redis常用数据类型:GEO

2.获取地理位置的坐标 3.计算两个地理位置间的距离 4.根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。...geopos用于指定key返回所有指定位置名称的经度纬度,不存在返回nil geopos key member [member ...] geopos city 广州 # 获取空间名称“广州”...的经纬度 geopos city 深圳 # 没有存储“深圳”的空间名称,返回nil 3.geohash 获取保存位置的geohash值 Redis GEO 使用geohash来保存地理位置的坐标 geohash...距离的单位用户给定的范围单位保持一致。 WITHCOORD : 将位置元素的经度维度也一并返回。...距离的单位用户给定的范围单位保持一致。 WITHCOORD : 将位置元素的经度维度也一并返回。

23510

Geohash算法原理及实现

文章目录 经纬度常识 基本原理 Geohash算法 问题 代码实现 geohash在mysql使用 最近需要实现一个功能,查找车辆附近的加油站,如果车和加油站距离在200米以内,则查找成功...; 经纬线米的换算:经度或者纬度0.00001度,约等于1米,这个在GPS测算距离的时候可以体会到,GPS只要精确到小数点后五位,就是10米范围内的精度 经度0度的位置为本初子午线,在180度的位置转为西经...上例最终得到的值为 wx4g0ec1 Geohash比直接用经纬度的高效很多,而且使用者可以发布地址编码,既能表明自己位于北海公园附近,又不至于暴露自己的精确坐标,有助于隐私保护。...GeoHash用一个字符串表示经度纬度两个坐标。...在数据库可以实现在一列上应用索引(某些情况下无法在两列上同时应用索引) GeoHash表示的并不是一个点,而是一个矩形区域 GeoHash编码的前缀可以表示更大的区域。

1.6K20

如何实现查找附近的人-GEO

zrem:删除地理位置基础使用数据准备先用百度地图提供的经纬度查询工具 拾取坐标系统,准备一些坐标信息:选择三个点的坐标作为测数据,如下地点 坐标 翠湖公园(a...25.061773 "c"查询位置信息geoposgeopos 用于给定的 key 里返回所有指定名称(member)的位置(经度纬度),不存在的返回 nil。..., 而不是使用经度纬度来决定中心点。...WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间距离也一并返回。WITHCOORD: 将位置元素的经度纬度也一并返回。...这个选项主要用于底层应用或者调试, 实际的作用并不大。COUNT 限定返回的记录数。ASC: 查找结果根据距离近到远排序。DESC: 查找结果根据远到近排序。

28820

根据两点的经纬度计算距离_经纬度两点距离

地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极地球中心的假想线),在地球腰画一个与地轴垂直的大圆圈,使圈上的每一点都和南北两极的距离相等,这个圆圈就叫作“赤道”。...我们很容易地图上查出来是东经116度24分,北纬39度54分。在大海中航行的船只,只要把所在地的经度测出来,就可以确定船在海洋的位置前进方向。 纬度共有90度。...,一般是通过一个个体的邮政编码来查找该邮政编码对应的地区中心的经纬度,然 后再根据这些经纬度来计算彼此的距离,从而估算出某些群体之间的大致距离范围(比如酒店旅客的分布范围-各个旅客的邮政编码对应的经纬度酒店的经纬度所...计算的距离范围-等等),所以,通过邮政编码查询经纬度这样一个数据库是一个很有用的资源。...m_speed; // 速度标识 double m_high; // 高速 }GoToLocation; // 两坐标之间距离信息

2K20

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

这就要用到GEO类型的GeoHash编码。 工作原理 sorted set 使用一种称为 Geohash 的技术进行填充。经度纬度的位是交错的,以形成一个独特的 52 位整数....: 当一组经纬度值都编完码后,我们再把它们的各自编码值组合在一起,组合的规则是:最终编码值的偶数位上依次是经度的编码值,奇数位上依次是纬度的编码值,其中,偶数位0开始,奇数位1开始。...GEOPOS key里返回所有给定位置元素的位置(经度纬度)。...范围可使用如下单位: 在给定以下可选项时, 命令会返回额外的信息: WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间距离也一并返回。...• 有效的纬度 - 85.05112878 度到 85.05112878 度。 当坐标位置超出上述指定范围时,该命令将会返回一个错误。

1.1K20

利用Redis的Geo功能实现查找附近的位

Redis 的 GEO Redis是我们最为熟悉的K-V数据库,它常被拿来作为高性能的缓存数据库使用,大部分项目都会用到它。...GEO相关的命令如下: Redis 命令 描述 GEOHASH 返回一个或多个位置元素的 Geohash 表示 GEOPOS key 里返回所有给定位置元素的位置(经度纬度) GEODIST 返回两个给定位置之间距离...有效的经度-180 度到 180 度。有效的纬度-85.05112878 度到 85.05112878 度。当坐标位置超出上述指定范围时,该命令将会返回一个错误。...WITHCOORD 将位置元素的经度维度也一并返回,非必选。 WITHDIST 在返回位置元素的同时, 将位置元素与中心点的距离也一并返回。距离的单位查询单位一致,非必选。...例如,我们在 cities:locs 查找以(115.03,38.44)为中心,方圆200km的城市,结果包含城市名称、对应的坐标距离中心点的距离(km),并按照近到远排列。

1.4K30

【GIS - 地理信息系统】经纬度计算 ( 经度、纬度概念 | 地球周长计算 | 地球经线周长计算 | 经纬度相关计算 | 经纬度坐标距离计算公式 | 经纬度与实际距离换算 | 相关代码实现 )

垂直 y 轴 的坐标 , 纬度的取值范围 -90 度 ~ + 90 度 ; 西经 南纬 是负数 ; 经度使用 W ( 东经 ) E ( 西经 ) 表示 , 纬度 使用 N ( 北纬 ) ...---- 1、经纬度坐标距离计算公式 经纬度坐标距离计算公式 : S = 2 \arcsin \sqrt{ \sin^2 \frac{a}{2} + \cos Lat1 \times \cos Lat2...- Lng2 , 是 两个坐标点的 经度之差 ; 地球半径为 6378.137 千米 ; 使用代码实现上述逻辑 : public class LocationUtils {...111194.926 644 558 737 \times \cos纬度 米 四、相关代码实现 ---- 1、计算两个经纬度之间距离 public class LocationUtils {...s * EARTH_RADIUS; s = Math.round(s * 1000) / 1000.0; // 保留三位小数 return s; } } 2、距离经纬度之间换算

3.4K20

利用Redis的Geo功能实现查找附近的位置

Redis 的 GEO Redis是我们最为熟悉的K-V数据库,它常被拿来作为高性能的缓存数据库使用,大部分项目都会用到它。...GEO相关的命令如下: Redis 命令 描述 GEOHASH 返回一个或多个位置元素的 Geohash 表示 GEOPOS key 里返回所有给定位置元素的位置(经度纬度) GEODIST 返回两个给定位置之间距离...有效的经度-180 度到 180 度。有效的纬度-85.05112878 度到 85.05112878 度。当坐标位置超出上述指定范围时,该命令将会返回一个错误。...WITHCOORD 将位置元素的经度维度也一并返回,非必选。 WITHDIST 在返回位置元素的同时, 将位置元素与中心点的距离也一并返回。 距离的单位查询单位一致,非必选。...例如,我们在 cities:locs 查找以(115.03,38.44)为中心,方圆200km的城市,结果包含城市名称、对应的坐标距离中心点的距离(km),并按照近到远排列。

2.3K50
领券