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

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

LBS应用访问的数据是人或物关联的一组经纬度信息,而要能查询相邻的经纬度范围,GEO就非常适合应用在LBS服务的场景。...类型),而一组经纬度包含的是经度纬度两个值,没法直接保存为一个浮点数,到底怎么保存?...: 当一组经纬度值都编完码后,我们再把它们的各自编码值组合在一起,组合的规则是:最终编码值的偶数位上依次是经度的编码值,奇数位上依次是纬度的编码值,其中,偶数位0开始,奇数位1开始。...GEO类型是把经纬度所在区间编码作为Sorted Set中元素的权重分数,把经纬度相关的车辆ID作为Sorted Set中元素本身的值保存下来,这样相邻经纬度查询即可通过编码值的大小范围查询实现。...GEOPOS key里返回所有给定位置元素的位置(经度纬度)。

1.1K20

Leaflet 与高德继续碰撞火花!

3.2 路径地图绘制 按照画线图的经验,平面直角坐标系中的一条线的位置由两个点决定,而两个点位置由它们分别的坐标 (X, Y) 决定,同理路径地图上的线由起点终点决定,起点终点由它们对应的经纬度决定...,这样子我们就可以知道绘制路径地图的数据至少需要 4 个值,分别表示起点的经纬度终点的经纬度。...知道了绘图需要的基本数据,后面的就简单了,只要分别查询两个点的经纬度把他们合并到一个表就好了,这里就不赘述了。有数据的朋友也可以直接把数据整理下就行,下面的例子使用上面绘制散点地图的数据。...,详细可见:官方说明文档[1] 通过地理编码获得起点终点的经纬度,方法同上不再赘述了。...address1 <- '福建省厦门市厦门高崎国际机场' ## 起点详细地址 address2 <- '福建省厦门市厦门大学思明校区' ## 终点详细地址 url1 <- paste0( ## 查询起点的

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

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

为了满足高性能的矩形区域算法,数据表需要在经纬度坐标加上复合索引 (longitude, latitude),这样可以最大优化查询性能。...” Hash看起来好像可以实现,但是 LBS 应用除了记录经纬度以外,还需要对 Hash 集合中的数据进行范围查询,根据经纬度换算成距离排序。 而 Hash 集合的数据是无序的,显然不可取。...能不能将经纬度转换成一个浮点数呢? ” 思路对了,为了实现对经纬度比较,Redis 采用业界广泛使用的 GeoHash 编码,分别对经度纬度编码,最后再把经纬度各自的编码组合成一个最终编码。...比如对经度值等于 169.99 进行 4 位编码(N = 4,做 4 次分区),把经度区间[-180,180]分成了左分区[-180,0) 右分区[0,180]。...合并经纬度编码 假如计算的经纬度编码分别是 11011 00101`,目标编码第 0 位则从经度第 0 位的值 1 作为目标值,目标编码的第 1 位则从纬度第 0 位值 0 作为目标值,以此类推:

1.5K10

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

为了满足高性能的矩形区域算法,数据表需要在经纬度坐标加上复合索引 (longitude, latitude),这样可以最大优化查询性能。...但是数据库查询性能毕竟有限,如果「附近的人」查询请求非常多,在高并发场合,这可能并不是一个很好的方案。...能不能将经纬度转换成一个浮点数呢? ” 思路对了,为了实现对经纬度比较,Redis 采用业界广泛使用的 GeoHash 编码,分别对经度纬度编码,最后再把经纬度各自的编码组合成一个最终编码。...比如对经度值等于 169.99 进行 4 位编码(N = 4,做 4 次分区),把经度区间[-180,180]分成了左分区[-180,0) 右分区[0,180]。...合并经纬度编码 假如计算的经纬度编码分别是 11011 00101`,目标编码第 0 位则从经度第 0 位的值 1 作为目标值,目标编码的第 1 位则从纬度第 0 位值 0 作为目标值,以此类推: ?

1.3K20

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

为了满足高性能的矩形区域算法,数据表需要在经纬度坐标加上复合索引 (longitude, latitude),这样可以最大优化查询性能。...Hash看起来好像可以实现,但是 LBS 应用除了记录经纬度以外,还需要对 Hash 集合中的数据进行范围查询,根据经纬度换算成距离排序。 而 Hash 集合的数据是无序的,显然不可取。...能不能将经纬度转换成一个浮点数呢? ” 思路对了,为了实现对经纬度比较,Redis 采用业界广泛使用的 GeoHash 编码,分别对经度纬度编码,最后再把经纬度各自的编码组合成一个最终编码。...比如对经度值等于 169.99 进行 4 位编码(N = 4,做 4 次分区),把经度区间[-180,180]分成了左分区[-180,0) 右分区[0,180]。...合并经纬度编码 假如计算的经纬度编码分别是 11011 00101`,目标编码第 0 位则从经度第 0 位的值 1 作为目标值,目标编码的第 1 位则从纬度第 0 位值 0 作为目标值,以此类推: ?

1.1K50

需要支持对多边形取并(OR)的操作

楼宇相关场景分析,一般分为2D楼宇分析3D楼宇分析。2D楼宇分析时,建筑物一般用Polygon对象表达,因此需要SQL语句上支持Polygon对象查询相关操作。...遴选公务员业务表里面包含经纬度字段通信网络相关指标,空间维表包含建筑物类型、建筑物轮(Polygon对象)、建筑统一编号。3D楼宇分析时,需要增加楼宇高度信息。...longitude, latitude, height, sum(kpi) http://lx.gongxuanwang.com/lxzt/lxbszt.html 初步验证,对1000个多边形取OR进行查询...示例4:3D楼宇分析场景 体育馆、音乐厅、购物中心、机场、火车站人流量比较大的场馆在网络实际运营过程中需要重点分析,需要了解每个楼层的立体空间的网络分布情况。...遴选公务员行业内已经提供了按经度、纬度、高度建模的三维空间数据库,考虑通信行业在高度上诉求与人的活动楼的高度有关,并不是所有地区都存在大量的高度信息,因此高度信息暂时不参与时空排序,仅作为一般维度参与业务分析

24830

Redis GeoHash核心原理解析

但是对于空间上的一个点(二维,包括经度纬度),如何排序呢?又如何索引呢?解决的方法很多,下文介绍一种方法来解决这一问题。...为什么分别给经度维度编码?为什么需要将经纬度两串编码交叉组合成一串编码?本节试图回答这一问题。...每个POI都有经纬度信息,用图1b的SQL语句在mySQL中建立了POI_spatial的表,其中latlng两个字段来代表纬度经度。为后续分析方便起见,我人造了40万个POI数据。...根据这个思路我们执行SQl查询(图5)(注:经度或纬度每隔0.001度,距离相差约100米,由此推算出矩形左下角右上角坐标),发现过滤后正好剩下两个POI。...执行SQL查询(图7),发现时间已经大大降低,方法2的0.36秒下降到0.01秒 ? 三、B树能索引空间数据吗?

1.3K20

redis地理位置GEO的实现原理

首先一个key里面得保存各个member经纬度,而且经纬度还必须得能够排序,所以我们发现这个结构其实redis的zset结构其实挺像的,唯一的区别可能在于zset只有一个score,而GEO有经度纬度...当我们要对一组经纬度进行 GeoHash 编码时,我们要先对经度纬度分别编码,然后再 把经纬度各自的编码组合成一个最终编码。 首先,我们来看下经度纬度的单独编码过程。...我们以经纬度 116.37,39.86为例 首先看经度 116.37 第一次二分区操作,把经度区间[-180,180]分成了左分区[-180,0) 右分区 [0,180],此时,经度值 116.37...为什么分别给经度维度编码?为什么需要将经纬度两串编码交叉组合成一串编码?本节试图回答这一问题。...所以,为了避免查询不准确问题,我们可以同时查询给定经纬度所在的方格周围的 4 个或 8 个方格。

1.5K40

美团如何查询附近商家

横线表示纬度,范围在[-90°, +90°],竖线表示经度,范围在[-180°, +180°]。 ? 我们当前的经纬度,可以wifi或者手机的GPS获取。 计算距离 接下来我们计算两点的距离。...设第一点A的经纬度为(LonA, LatA),第二点B的经纬度为(LonB, LatB),按照0度经线的基准,东经取经度的正值(Longitude),西经取经度负值(-Longitude),北纬取90-...上海的纬度编码就是:10110001 最终我们得到的上海经纬度编码为 (121.43333,34.50000)-->(11010110,10110001) 统一编码 为了方便记录,我们把经度维度的二进制格子编码进行合并...2.GeoHash用一个字符串表示经度纬度两个坐标。...这样根据当前自己的经纬度计算相应的编码,查询数据库 select * from merchant where code = 'xxx' 这样就可以获取附近的商铺了,是不是超级开心!

5.1K20

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

geoposgeopos 用于给定的 key 里返回所有指定名称(member)的位置(经度纬度),不存在的返回 nil。..., 而不是使用经度纬度来决定中心点。...WITHCOORD: 将位置元素的经度纬度也一并返回。WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。...根据给定的经纬度坐标查询附近的成员# 根据查询的坐标,查询5km以内的成员信息127.0.0.1:6379> georadius km 102.705224 25.0499233 5 km1) "b"2...实现思路门店的地址固定的,除非搬迁或者闭店,才会发生改变,根据门店地址换算为经纬度存储在redis根据gps定位,获取自身当前的经纬度根据定位的经纬度查询附近的门店代码实现public static void

26320

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

例如我们用代码实现上面经纬度二分法生成的二进制: /** * @desc 利用递归思想 找出经纬度的二进制编码 * @param float $place 经度或纬度 * @param string...那么我们查询的时候就不需要用经纬度查询,可以这样:select * from xx where geohash like 'geohash%'进行模糊查询查询到结果集在通过经纬度计算距离;然后筛选指定的距离例如...获取指定key里返回所有指定名称的位置(经度纬度);时间复杂度O(log(n)),n是排序集中的元素数 注意事项: ① geopos命令返回的是一个数组,每个数组中的都由两个元素组成:第一个是位置的经度...④ withcoord: 将位置元素的经度维度也一并返回。 ⑤ withhash: 以 52 位有符号整数的形式,返回位置元素经过原始geohash编码的有序集合分值。...⑦ asc: 查找结果根据距离近到远排序。 ⑧ desc: 查找结果根据远到近排序。

2.4K20

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

在数据库里,把经纬度都标记为索引,通过查找对比经纬度的值,来找到附近1km的车子,但是这种做法第一是索引比较多,数值比较大,二是需要循环遍历经纬度查询会很慢,效率很低。...地球铺平面图 以赤道本初子午线为界,将地球分为经度纬度。赤道是在0度,本初子午线也在0度。以赤道作为经度X横坐标,以本初子午线作为纬度 Y 竖坐标。...经纬度经度(longitude)``纬度(latitude)`简称 `lng`  `lat 其中,本初子午线向东划分180度称为东经,用”E”表示:(0, 180];向西划分180度为西经,...指定一个位置的经纬度坐标值。 根据十字坐标图二分法,将纬度经度划分成10的二进制数字串。 按照“偶数位放经度,奇数位放纬度”算法,合并经度纬度这2个二进制数字串。...在使用redis进行Geo查询时,其内部对应的操作其实只是zset(skiplist)的操作。

1.5K30

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

在数据库里,把经纬度都标记为索引,通过查找对比经纬度的值,来找到附近1km的车子,但是这种做法第一是索引比较多,数值比较大,二是需要循环遍历经纬度查询会很慢,效率很低。...我们将地球铺平开来,会得到下面这个平面图: 以赤道本初子午线为界,将地球分为经度纬度。赤道是在0度,本初子午线也在0度。...以赤道作为经度X横坐标,以本初子午线作为纬度Y竖坐标: 经度(longitude)纬度(latitude)简称lnglat。...注意:纬线纬线是角度数值,并不是米。[表示等于,(表示小于。 所以,我们常用十字坐标法来表示经纬度坐标图: 注意:我们一般读“经纬度”,其实,表示一个定位的书面经纬度是 “(纬度,经度)”。...指定一个位置的经纬度坐标值。 根据十字坐标图二分法,将纬度经度划分成10的二进制数字串。 按照“偶数位放经度,奇数位放纬度”算法,合并经度纬度这2个二进制数字串。

1.3K20

Redis实现附近的人

当用户点击 Near Me 功能时,那么通过后台就可以以当前用户的位置为圆点,距离为半径查询相关的用户展示即可完成 注意 redis 的经纬度有 0.5%的误差,所以精度要求高的比如地图就慎用 redis...GEOPOS key里返回所有给定位置元素的位置(经度纬度)。...距离的单位用户给定的范围单位保持一致 WITHCOORD: 将位置元素的经度维度也一并返回 WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值...具体的限制,由 EPSG:900913 / EPSG:3785 / OSGEO:41001 规定如下: • 有效的经度 - 180 度到 180 度。...经度纬度的位是交错的,以形成一个独特的 52 位整数. 我们知道,一个 sorted set 的 double score 可以代表一个 52 位的整数,而不会失去精度。

70520

继续搞【附近的人】---MySQL搞LBS(二)

没有了MySQL就好像缺了一条腿 如果说利用MySQL搞LBS,是需要分版本的,分水岭是5.7: 5.7之前的MySQL没有内置对GIS查询的支持 5.7以及之后的MySQL直接内置了对GIS查询 然而实际上对于...所以,从现在开始,我们需要搞明白两件事: 搞明白经纬度到geohash字符串的算法流程 如何在工程代码里具体实现这个过程 ? 我们的地球东西维度分为东西半球,南北维度分为南北半球。...0度就是本初子午线,转半圈后180度处就是东经西经的交界线 下面我们利用geohash算法给经纬度(104.07642,38.6518)换算一下字符串(104.07642是经度,38.6518是纬度)...---- 经度 第一次:以0位界限,分为(-180,0)(0,180)左右两部分,104.07642处于右侧(0,180)之间,标记计为1 第二次:以90位界限,分为(0,90)(90,180)左右两部分...---- 然后我们按照偶数位置放经度,奇数位置放纬度(注意位置0开始而不是1)的规则将上面标记位组装起来,形成一个最终的数字字符串(注意第二行是数字位置,第一行是数字字符串): ?

2.2K20

Redis(九):Redis特殊类型之geospatial

都可以用它实现 这个需要把你所在地的经纬度输进去,我们可以在http://www.jsons.cn/lngcode/进行查询!...名称 ;有效的经度纬度 ps:两极无法添加 1.2、GROPOS 127.0.0.1:6379> GEOPOS china:city beijing //获取指定的经纬度 1) 1) "116.39999896287918091..." //返回当前经纬度的字符串 2) "wm5xzrybty0" 1.7、查看删除 127.0.0.1:6379> ZRANGE china:city 0 -1 //查询地图中全部元素 1) "sanya...127.0.0.1:6379> ZRANGE china:city 0 -1 1) "sanya" 2) "shenzhen" 3) "shanghai" 4) "beijing" 2、总结 有效的经度...有效的纬度-85.05112878度到85.05112878度。 指定单位的参数 unit 必须是以下单位的其中一个: m 表示单位为米。 km 表示单位为千米。 mi 表示单位为英里。

30730

爬取北京摩拜单车信息(附分析过程详细代码)

Fiddler 返回值3 经纬度查询 在 Fiddler 中抓取 request 发现纬度经度分别为:39.977524,116.305863,通过经纬度查询的网站发现定位极其精准: ?...定位1 查询 response 中 mpl 信息的一个地址:39.975823, 116.305252 ? 发现确实是地图上的位置: ?...经纬度与距离的换算 经纬度在不同地区,每度距离差是不同的,任意两点距离计算公式为 d=111.12cos{1/[sinΦAsinΦB十cosΦAcosΦBcos(λB—λA)]} 其中A点经度,纬度分别为...λAΦA,B点的经度、纬度分别为λBΦB,d为距离....这样可以在断网等异常情况时,异常处重新开始爬取。redis 在本机可以达到 10万次/s 的连接量,就没必要在 Java 中维护这些代码了。

2.4K70

实时即未来,车联网项目之远程诊断实时故障分析【七】

应用场景介绍 ① 内部管理系统针对车辆的故障查询统计信息 ② 实时监控大屏 常用故障分析指标与含义 19项车辆故障指标车辆报警、故障信息属性50+ *报警指标* *报警指标内容* *值与含义*...https://developer.amap.com/demo/javascript-api/example/geocoder/regeocoding/ 如果使用高德Api的步骤 获取key 将key经纬度参数封装为...geohash //1.2.根据geohash redis中获取value值(geohash在redis中是作为主键存在) //1.3.如果查询出来的值不为空,将其通过JSON对象转换成 VehicleLocationModel...static final String GET_ADDRESS_URL = ConfigLoader.getProperty("gaode.address.url"); /** * 传递经纬度返回逆地理位置查询的请求地址...} return base32(Long.parseLong(buffer.toString(), 2)); } /** * @desc todo 根据经纬度范围

1.1K10
领券