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

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

打车服务: 每辆网约车都有个编号(666),网约车需将自己的经度纬度发给叫车应用 打车时,打车应用会根据用户的经纬度位置,查找用户的附近车辆,并匹配 等把位置相近的用户车辆匹配后,打车应用就会根据车辆编号...类型),而一组经纬度包含的是经度纬度两个,没法直接保存为一个浮点数,到底怎么保存?...GeoHash编码会把一个经度编码一个N位的二进制,对经度范围[-180,180]做N次的二分区操作,其中N可以自定义。 第一次二分区:[-180,0)[0,180]。...,把经度116.37定位在[112.5, 123.75]这个区间,得到经度的5位编码:11010 对纬度编码方式,经度的一样,只是纬度范围[-90,90],如对纬度39.86的编码过程...经度区间[-180,180]二分区,把纬度区间[-90,90]二分区,就会得到4个分区: 分区一:[-180,0)[-90,0),编码00 分区二:[-180,0)[0,90],编码01 分区三

1.1K20

我背着女朋友,用 Python 偷偷抓取了她的行踪

pip3 install exifread 然后,进入高德开放平台,申请一个 Web 服务的应用,获取到一个 「Key」用于逆地理编码 API。 ?...03 编写脚本 整个操作分为 3 步骤,分别是获取图片的经度纬度、对经度纬度进行数据矫正、调用高德逆地理编码 API 获取具体位置。 第 1 步,获取图片的「经度纬度」。...使用 exifread 库可以直接读取图片文件,获取到图片的元数据,包含经度纬度、南北纬方向、东西经方向拍摄时间。...因为通过 GPS 获取的经度纬度高德地图的坐标存在一定的误差,这里需要把坐标转换为「火星坐标系」。...def __format_lati_long_data(self, data): """ 对经度纬度数据做处理,保留6位小数 :param data: 原始经度纬度

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

Redis 应用实践-地理位置

本文将介绍Redis的地理位置数据结构以及如何在应用中使用它。我们将首先介绍地理位置数据结构的基本概念使用方法,然后介绍如何在Python应用中使用地理位置数据结构。...每个元素都是一个带有经度纬度信息的地理位置。地理位置集合中的元素是按照它们的距离从近到远排序的。...地理位置集合中的每个元素都有一个唯一的成员名,成员名用于标识该元素,而元素的经度纬度信息则通过一个坐标对(longitude, latitude)来表示。...三、Python应用中使用地理位置数据结构下面我们将介绍如何在Python应用中使用Redis的地理位置数据结构。假设我们有一个城市的商家列表,每个商家都有一个唯一的ID、名称、经度纬度信息。...在本例中,我们查询距离经度116.408、纬度39.916的坐标1000米范围内的所有商家。查询完成后,我们遍历结果,输出每个商家的信息。

85120

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

能不能将经纬度转换成一个浮点数呢? ” 思路对了,为了实现对经纬度比较,Redis 采用业界广泛使用的 GeoHash 编码,分别对经度纬度编码,最后再把经纬度各自的编码组合成一个最终编码。...GeoHash 编码会把一个经度编码一个 N 位的二进制,我们来对经度范围[-180,180]做 N 次的二分区操作,其中 N 可以自定义。...比如对经度等于 169.99 进行 4 位编码(N = 4,做 4 次分区),把经度区间[-180,180]分成了左分区[-180,0) 右分区[0,180]。...将[90, 180] 分为[90, 135) [135, 180],这次落在左分区,编码 ‘0’。 如此,最后我们就得到一个 4 位的编码。 而纬度编码思路跟经度也是一样的,不再赘述。...合并经纬度编码 假如计算的经纬度编码分别是 11011 00101`,目标编码第 0 位则从经度第 0 位的 1 作为目标值,目标编码的第 1 位则从纬度第 0 位 0 作为目标值,以此类推:

1.5K10

【实战】我背着女朋友,用 Python 偷偷抓取了她的行踪

pip3 install exifread 然后,进入高德开放平台,申请一个 Web 服务的应用,获取到一个 「Key」用于逆地理编码 API。 ?...3 编 写 脚 本 整个操作分为 3 步骤,分别是获取图片的经度纬度、对经度纬度进行数据矫正、调用高德逆地理编码 API 获取具体位置。 第 1 步,获取图片的「经度纬度」。...使用 exifread 库可以直接读取图片文件,获取到图片的元数据,包含经度纬度、南北纬方向、东西经方向拍摄时间。...因为通过 GPS 获取的经度纬度高德地图的坐标存在一定的误差,这里需要把坐标转换为「火星坐标系」。...def __format_lati_long_data(self, data): """ 对经度纬度数据做处理,保留6位小数 :param data: 原始经度纬度

1.1K20

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

能不能将经纬度转换成一个浮点数呢? ” 思路对了,为了实现对经纬度比较,Redis 采用业界广泛使用的 GeoHash 编码,分别对经度纬度编码,最后再把经纬度各自的编码组合成一个最终编码。...GeoHash 编码会把一个经度编码一个 N 位的二进制,我们来对经度范围[-180,180]做 N 次的二分区操作,其中 N 可以自定义。...比如对经度等于 169.99 进行 4 位编码(N = 4,做 4 次分区),把经度区间[-180,180]分成了左分区[-180,0) 右分区[0,180]。...将[90, 180] 分为[90, 135) [135, 180],这次落在左分区,编码 ‘0’。 如此,最后我们就得到一个 4 位的编码。 而纬度编码思路跟经度也是一样的,不再赘述。...合并经纬度编码 假如计算的经纬度编码分别是 11011 00101`,目标编码第 0 位则从经度第 0 位的 1 作为目标值,目标编码的第 1 位则从纬度第 0 位 0 作为目标值,以此类推: ?

1.3K20

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

能不能将经纬度转换成一个浮点数呢? ” 思路对了,为了实现对经纬度比较,Redis 采用业界广泛使用的 GeoHash 编码,分别对经度纬度编码,最后再把经纬度各自的编码组合成一个最终编码。...GeoHash 编码会把一个经度编码一个 N 位的二进制,我们来对经度范围[-180,180]做 N 次的二分区操作,其中 N 可以自定义。...比如对经度等于 169.99 进行 4 位编码(N = 4,做 4 次分区),把经度区间[-180,180]分成了左分区[-180,0) 右分区[0,180]。...将[90, 180] 分为[90, 135) [135, 180],这次落在左分区,编码 ‘0’。 如此,最后我们就得到一个 4 位的编码。 而纬度编码思路跟经度也是一样的,不再赘述。...合并经纬度编码 假如计算的经纬度编码分别是 11011 00101`,目标编码第 0 位则从经度第 0 位的 1 作为目标值,目标编码的第 1 位则从纬度第 0 位 0 作为目标值,以此类推: ?

1.1K50

redis地理位置GEO的实现原理

首先一个key里面得保存各个member纬度,而且经纬度还必须得能够排序,所以我们发现这个结构其实redis的zset结构其实挺像的,唯一的区别可能在于zset只有一个score,而GEO有经度纬度...,所以我们只需要解决能用一个score来保存经度纬度就可以解决问题了。...当我们要对一组经纬度进行 GeoHash 编码时,我们要先对经度纬度分别编码,然后再 把经纬度各自的编码组合成一个最终编码。 首先,我们来看下经度纬度的单独编码过程。...我们以经纬度 116.37,39.86例 首先看经度 116.37 第一次二分区操作,把经度区间[-180,180]分成了左分区[-180,0) 右分区 [0,180],此时,经度 116.37...把经度 116.37 所属的[0,180]区间,分成[0,90) [90, 180]。此时,经度 116.37 还是属于右分区[90,180],所以,第二次分区后的编码仍然 1。

1.5K40

Redis GeoHash核心原理解析

但是对于空间上的一个点(二维,包括经度纬度),如何排序呢?又如何索引呢?解决的方法很多,下文介绍一种方法来解决这一问题。...GeoHash算法的步骤 下面以北海公园附近随便一个位置例介绍GeoHash算法的计算步骤,先用百度 GPS反定位系统查找看下经纬度。 ? 纬度=116.395371,经度=39.931957。...为什么分别给经度维度编码?为什么需要将经纬度两串编码交叉组合成一串编码?本节试图回答这一问题。...每个POI都有经纬度信息,用图1b的SQL语句在mySQL中建立了POI_spatial的表,其中latlng两个字段来代表纬度经度后续分析方便起见,我人造了40万个POI数据。...只能对经度纬度索引(一维索引),与期望的不符 我们期待的是快速找出落在某一空间范围的POI(矩形)(图8a),而不是快速找出落在某纬度经度范围的POI(图8b),想象一下,我要查询北京某区的POI

1.3K20

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

纬度的高低也标志着气候的冷热,赤道纬度地地区无冬,两极纬度地区无夏,中纬度地区四季分明。...本初子午线是0°经度,东经度的最大180°,西经度的最大180°,东、西经180°经线是同一根经线,因此不分东经或西经,而统称180°经线。 纬度是个线面角。...赤道是0°纬线,北纬度的最大90°,即北极点;南纬度的最大90°,即南极点。...-纬度(90- Latitude),南纬取90+纬度(90+Latitude),则经过上述处理过后的两点被计(MLonA, MLatA)(MLonB, MLatB)。...-各个旅客的邮政编码对应的经纬度酒店的经纬度所 计算的距离范围-等等),所以,通过邮政编码查询经纬度这样一个数据库是一个很有用的资源。

1.9K20

空间索引-geohash算法实现

算法简介 geohash是实现空间索引的一种算法,其他实现空间索引的算法有:R树其变种GIST树、四叉树、网格索引等 算法基本原理 geohash算法将地球理解一个二维平面,将平面递归分解成更小的子块...,每个子块在一定经纬度范围内拥有相同的编码,这种方式简单粗暴,可以满足对小规模的数据进行经纬度的检索 通过对经纬度的分割,将地球分割成无数的小正方形,每个区域,就是个geohash编码 Geohash...其实就是将整个地图或者某个分割所得的区域进行一次划分,由于采用的是base32编码方式,即Geohash中的每一个字母或者数字(wx4g0e中的w)都是由5bits组成(2^5 = 32,base32...算法实现(php) 以经纬度:(118.6197800000,24.88849)进行算法说明,对纬度24.88849进行逼近编码 (地球纬度区间是[-90,90]) 纬度区间[-90,90]进行二分...$limit_1:$limit_0);     } } 由此,纬度24.88849可得字符串10100011011001011001 经度118.6197800000,经度分为东经西经,区间[-

1.5K20

Python指定时间、经纬度读取NC数据

本文介绍基于Python语言的netCDF4库,读取.nc格式的数据文件,并提取指定维(时间、经度纬度)下的变量数据的方法。   ...nc_data.variables["swvl1"]表示这个.nc文件中读取名为swvl1的变量的,而后面的[time_need, :, :]表示选择指定时间维下的所有经度纬度位置的。...前面我们提取了指定时间维下的所有经度纬度位置的,那么现在就更进一步,提取指定时间维度、经度维度以及纬度维度的数据(相当于就是从前面的一景数据变成了一个像元的数据)。...首先,我们指定一个处于.nc文件成像范围内的目标经度longitude_need目标纬度latitude_need,并使用argmin()函数找到目标经、纬度与文件中经度纬度的维数据最接近的索引...如下图所示,我们通过上述第二种需求,提取出来了目标时间、经度纬度维下的一个像素。   那么这个像素对不对呢?

21510

PHP进阶学习之Geo的地图定位算法详解

°,经线也是角度数值; 经纬线米的换算:经度或者纬度0.00001度,约等于1米,这个在GPS测算距离的时候可以体会到,GPS只要精确到小数点后五位,就是10米范围内的精度; 为了便于理解,将地球看成一个基于经纬度线的坐标系...经度范围-180~180°,纬度范围-90~90°,地球上任意一点都可以用经纬度这样两个维度去唯一确定。...下面就来详细说明geoHash是怎么算出来的: 根据经纬度计算GeoHash二进制编码(以经纬度:(116.389550,39.928167)进行算法说明) 先计算纬度二进制: 2.1 区间[-90,90...组码:通过上述计算,纬度产生的编码10111 00011,经度产生的编码11010 01011。...偶数位放经度,奇数位放纬度,把2串编码组合生成新串:11100 11101 00100 01111。

1.3K20

(数据科学学习手札65)利用Python实现Shp格式向GeoJSON的转换

,纬度] } }   其中properties对应的这个要素对应的属性表中按顺序存放的,geometry对应的中type指明了要素类型,coordinates传入一个包含两个元素的列表...,第一个元素代表经度,第二个元素代表纬度。...} } 多边形要素(Polygon):   多边形要素记录了构成一个多边形所有边缘折点的经纬度信息,其coordinates属性传入"Polygon",其geometry下type属性格式三维列表...、GeoJSON文件编码输入参数: def Shp2JSON(filename,shp_encoding='utf-8',json_encoding='utf-8'): ''' 这个函数用于将...下面我们通过一个示例来展示实际转换效果,使用到的Shp数据中国省份数据,在arcgis中效果如下: ?

2.6K10

交友系统设计:哪种地理空间邻近算法更快?

Liao 如何在这些算法中选择出最合适的那个?...1、SQL 邻近算法 我们可以将用户经、纬度直接记录到数据库中,纬度记录在 latitude 字段,经度记录在longitude 字段,用户当前的纬度经度 X,Y,如果我们想要查找当前用户经、纬度距离...,分别针对经度纬度,求取当前区间(对于纬度而言,开始的区间就是[-90, 90], 对于经度而言,开始区间就是[-180, 180])的平均值,将当前区间分为两个区间。...下图表示经、纬度 的二进制编码过程,最终得到纬度 12 位编码经度 13 位编码。 得到两个二进制数后,再将它们合并成一个二进制数。...合并规则是,从第一位开始,奇数位经度,偶数位纬度,上面例子合并后的结果 01101 11111 11000 00100 00010,共 25 位二进制数。

16710

Geohash算法原理及实现

他能够把二维的空间经纬度数据编码一个字符串 我们知道,经度范围是东经180到西经180,纬度范围是南纬90到北纬90,我们设定西经负,南纬负,所以地球上的经度范围就是[-180, 180],纬度范围就是...比如这样一个点(39.923201, 116.390705) 纬度的范围是(-90,90),其中间0。...对于纬度39.923201,在区间(0,90)中,因此得到一个1;(0,90)区间的中间45度,纬度39.923201小于45,因此得到一个0,依次计算下去,即可得到纬度的二进制表示,如下表: ?...GeoHash用一个字符串表示经度纬度两个坐标。...不过仍然有一个问题需要解决,就是如何计算周边的8个区域key呢 假设我们计算的key是6位,那么二进制位数就是 6*5 = 30位,所以经纬度分别是15位。我们以纬度例,纬度会均分15次。

1.6K20

美团如何查询附近商家

如果以0度经线基准,那么根据地球表面任意两点的经纬度就可以计算出这两点间的地表距离(这里忽略地球表面地形对计算带来的误差,仅仅是理论上的估算)。...纬度(90-Latitude),南纬取90+纬度(90+Latitude),则经过上述处理过后的两点被计(MLonA, MLatA)(MLonB, MLatB)。...编码 我们用经度切割,以上海经纬度121.43333,34.50000来举例: 以0°中轴,将地球切成两半[-180°,0°),[0°,180°],并对他们进行二进制编码,左边0,右边1; ?...上海的纬度编码就是:10110001 最终我们得到的上海经纬度编码 (121.43333,34.50000)-->(11010110,10110001) 统一编码 为了方便记录,我们把经度维度的二进制格子编码进行合并...2.GeoHash用一个字符串表示经度纬度两个坐标。

5K20

山月目前在做 APP 及旅游中涉及到的地理科普

从初中地理学到的东西可以知道:经纬度 经度 经度,用以指示一个地点的东西向地理位置。地球上某一地点离本初子午线以东或以西的度数。本初子午线的经度是0°,「东经正数,西经负数」。...经度每隔十五度会差一个小时,在中国,使用 new Date 构造时间会显示 GMT+08,采用中国几何中心的东经120°作为北京时间。...世界经度与时区图 纬度 纬度,用以指示一个地点的南北向地理位置,其范围从赤道的0°到南北极的90°,「北纬正数,南纬负数」。...,从某一地址到经纬度坐标的转化也叫做「地理编码」 百度拾取坐标系统[1] 从经纬度到具体地址的转化成为「逆地理编码」,但由于存在不同的坐标系对经纬度加密,此时需要执行编码坐标系 WGS84 (World...采用地图Google国内地图、高德、腾讯地图 BD09,百度坐标系,GCJ02坐标系加密后的坐标系 批量工具网[2] 高德地理编码、逆编码[3] Reference [1] 百度拾取坐标系统: http

1.1K30

Geohash原理

引言 GeoHash本质上是空间索引的一种方式,其基本原理是将地球理解一个二维平面,将平面递归分解成更小的子块,每个子块在一定经纬度范围内拥有相同的编码。...GeoHash算法 以经纬度:(116.389550, 39.928167)进行算法说明,对纬度39.928167进行逼近编码 (地球纬度区间是[-90,90] a....通过上述计算, 纬度产生的编码1 1 0 1 0 0 1 0 1 1 0 0 0 1 0,经度产生的编码1 0 1 1 1 0 0 0 1 1 0 0 0  1 1 f....为什么分别给经度维度编码?为什么需要将经纬度两串编码交叉组合成一串编码?本节试图回答这一问题。...以外包矩形中心点圆心,以d/2半径做一个圆,计算圆覆盖范围内的geohash 4.1 获取圆的外包矩形左上角右下角定点坐标经纬度,存储到double[] locs 4.2 根据geohash字符长度计算该长度

78440

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

答案就是 geohash geohash通过算法将1个定位的经度纬度2个数值,转换成1个hash字符串。如果2个地方距离越近,那么他们的hash的前缀越相同。...地球铺平面图 以赤道本初子午线界,将地球分为经度纬度。赤道是在0度,本初子午线也在0度。以赤道作为经度X横坐标,以本初子午线作为纬度 Y 竖坐标。...指定一个位置的经纬度坐标值。 根据十字坐标图二分法,将纬度经度划分成10的二进制数字串。 按照“偶数位放经度,奇数位放纬度”算法,合并经度纬度这2个二进制数字串。...依次类推可得上海腾讯大厦纬度编码: 101011000101010000111101101101 经度也用同样的算法,对(-180, 180)依次细分,(-180,0)、(0,180) ,得出编码:...> zset(score编码) —> zrangebyrank(获取score相近的元素)、zrangebyscore —> 通过score(整数编码)反解坐标点 —> 附近点的地理位置坐标。

1.5K30
领券