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

GeoHash 经纬度坐标编码与解码算法

关于GeoHash的了解是我在做爬虫时发现一些网站比如美团、饿了么都会把一些地理位置进行编码,在检索时能够更快的进行地理空间上的检索,找到距离相近的位置。...这样纬度二分结束,可以得到一串0-1编码,纬度产生的编码为10111 00011,经度也是这样组码,经度产生的编码为11010 01011 偶数位放经度,奇数位放纬度,把2串编码组合生成新串:11100...11101 00100 01111,这里的偶数为是0开始的。...但是如果现在不仅仅是三个位置,如果是几十万甚至是更多的位置,我们应该如何处理呢?如果还是求任意两个位置的欧式距离显然那是灾难性的。...我们在前面组码经纬纬度时就是这样的,经度纬度经度纬度的间隔组码,因此会出现上面所说的情况,匹配度很低,但是距离很近的情况。

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

如何使用AngularJSPHP为任何位置生成短而独特的数字地址

第2步 - 创建数据库 本教程描述的Web应用程序接受来自用户的地址,并为其生成地图代码以及指定位置的纬度经度。您将把这些数据存储在MySQL数据库,以便稍后通过输入相应的数字地址来检索它。...然后,生成的映射代码以及纬度经度物理地址将存储在您在步骤2创建的数据库。db.php充当此操作的帮助程序。...然后添加以下代码,结果获取纬度经度信息,并使用我们在步骤5的index.php文件创建的两个HTML标签显示它: . . ....第9步 - 添加数据库凭据测试地图代码生成 回想一下,此应用程序将在表单输入的每个地址 - 以及其纬度经度地图代码 - 存储在您在步骤2创建的数据库。...您现在可以为世界上的任何位置创建唯一的地图代码,然后使用该地图代码检索位置的物理地址。 结论 在本教程,您使用Google Maps API固定位置并获取其经度纬度信息。

13.1K20

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

类型),而一组经纬度包含的是经度纬度两个值,没法直接保存为一个浮点数,到底怎么保存?...这就要用到GEO类型的GeoHash编码。 工作原理 sorted set 使用一种称为 Geohash 的技术进行填充。经度纬度的位是交错的,以形成一个独特的 52 位整数....: 当一组经纬度值都编完码后,我们再把它们的各自编码值组合在一起,组合的规则是:最终编码值的偶数位上依次是经度的编码值,奇数位上依次是纬度的编码值,其中,偶数位0开始,奇数位1开始。...保存到 Redis 是用 Geohash 位置 52 点整数编码。 GeoHash 将二维经纬度转换成字符串。...GEOPOS key里返回所有给定位置元素的位置(经度纬度)。

1.1K20

学术大讲堂 |(七)如何应用大数据技术秒杀一个貌似不可能的任务

好,任务的内容我们基本介绍清楚了,那么我们初始的解决方案是如何的呢? 首先,最基础的,就是我们的栅格划分,直接看代码,可以有最直观的理解。这是我们判断某个经纬度点归属哪一个栅格的函数。...简单地说就是以某个点为原点,然后根据指定经纬度计算与原点的差值跨了多少个栅格,并且把经度方向的编码纬度方向的编码串起来。 栅格的划分是整理栅格化展示的理论基础,有了它,我们就可以进行数据预处理了。...设某栅格:[经度编号m][纬度编号n],其对应的KEY=(floor(m/64)+ m%64)*100000+(floor(n/64)+ m%64) 可以看出合并后,需要检索的KEY量大幅减少为:2...优化6——构建纬度到象素坐标的快速映射矩阵 经纬度到象素坐标的标准转换过程: 经纬度--》墨卡托投影坐标--》当前屏幕象素坐标,转换公式可以看出,这是个非线性转换,需要比较复杂的计算。...逐个点转换,1920*1080=200多万个点,比较耗时(实测开销大约为2-3秒) 我们构建纵向横向映射矩阵,只需转换1920+1080=3000次,其他栅格直接映射矩阵检索出转换结果(开销可压缩为小于

69720

redis常用命令和数据类型

语法: geoadd key 经度 纬度 地名 经度 纬度 地名 ... ... 2、geopos:获取地理位置的坐标(经度纬度) geopos key 地名 3、geodist:计算两个位置之间的距离...WITHCOORD: 将位置元素的经度纬度也一并返回。 WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。...georadiusbymember GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是 georadiusbymember 的中心点是由给定的位置元素决定的, 而不是使用经度纬度来决定中心点...也可以设置startend来获取指定区间的个数 bitcount key start end bitop:可以进行符合操作,它可以对多个Bitmaps进行and,or,not,xor操作并将结果保存在...destkey Redis 突然变慢了如何排查并解决?

82610

redis | 九、redis之Geospatial

中国诚实坐标经纬度查询,进行查询中国城市具体坐标! 1. geoadd 添加经纬元素 将指定的地理空间位置(纬度经度、名称)添加到指定的key。...key里返回所有给定位置元素的位置(经度纬度)。...返回值 GEOPOS 命令返回一个数组, 数组的每个项都由两个元素组成:第一个元素为给定位置元素的经度, 而第二个元素则为给定位置元素的纬度。 当给定的位置元素不存在时, 对应的数组项为空值。...由两个元素组成的坐标,分别为经度纬度。...GEOADD 命令 将指定的地理空间位置(纬度经度、名称)添加到指定的key Redis GEORADIUSBYMEMBER 命令 找出位于指定范围内的元素,中心点是由给定的位置元素决定

62720

实践:了解Redis Geo范围查询,获取当前位置最近的经纬度

Redis3.2+版本开始对Geo的支持进行了增强,提供了可以根据给定经纬度点位置作为中心点,在指定范围内进行检索距离最近的经纬度点。...key:geo集合的唯一键 longitude:新增GPS位置的经度 latitude:新增GPS位置的纬度 member:该GPS位置的唯一标识 georadius 命令 georadius key...GPS经度 latutude:待检索的GPS纬度 radius:检索的范围,单位可选择:米(m)、千米(km)、英里(mi)、英尺(ft) withcoord:将匹配的经纬度输出 withdist...:将匹配经纬度的距离输出 count:输出匹配的数量 asc|desc:根据距离排序,asc:由近到远,desc:由远到近 georadius指令会将给定的经纬度作为检索的中心点,在指定范围内进行检索匹配的经纬度点的位置...检索实现 在实践的过程,使用了两种方式来进行测试,发现在检索的效率上有着轻微的差异,下面通过代码实践来进行比对。

2.6K10

百度地图电子围栏功能的实现

本篇内容实现的过程中将会解决如下几个问题: (1)实现百度地图鼠标绘制多边形功能; (2)实现根据给定的坐标绘制多边形的功能; (3)判断某个坐标点是否在绘制的区域内; (4)绘制的坐标点如何在数据库中保存...; 下面按照实际需求一步一步来讲解实现: 1 实现多边形绘制功能 1.1 百度地图官方库下载鼠标绘制多边形功能demo   如何绘制一个多边形,我在看网上博客的时候,大部分人都是直接贴一堆代码上来...这里的添加鼠标绘制工具监听时间,用于获取绘制结果,实际上就是在这里把多边形的顶点放入overlays这个对象,那么我们如何获取这些点的坐标呢,还是官方文档里找答案,看下面: 1>在刚才的JavaScript...2.已知经纬度坐标,绘制多边形 接下来看一下已知一些坐标点如何绘制一个多边形,在代码增加一个按钮 “绘制多边形” ,然后定义一个有坐标信息的数组: 代码如下: <input type="button...4.在数据库<em>中</em><em>如何</em>存储这些坐标的点 这个问题,我只提供一个思路,因为不同的多边形坐标个数不同,所以我们不能把每一个坐标点的<em>经度</em><em>和</em><em>纬度</em>当成一个单独的字段,我给出的做法是,采用字符串拼接的方式去处理,把每个坐标的<em>经度</em>用

3.4K40

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

1、SQL 邻近算法 我们可以将用户经、纬度直接记录到数据库纬度记录在 latitude 字段,经度记录在longitude 字段,用户当前的纬度经度为 X,Y,如果我们想要查找当前用户经、纬度距离...那么如何选择网格大小?如何根据用户位置得到其所在的网格?又如何得到当前用户位置周边的其他网格呢?我们看 下实践更常用的动态网格 GeoHash 算法。...,分别针对经度纬度,求取当前区间(对于纬度而言,开始的区间就是[-90, 90], 对于经度而言,开始区间就是[-180, 180])的平均值,将当前区间分为两个区间。...如此不断重复,可以在经度纬度方向上,得到两个二进制数。这个二进制数越长,其所在的区间越小,精度越高。...合并规则是,第一位开始,奇数位为经度,偶数位为纬度,上面例子合并后的结果为 01101 11111 11000 00100 00010,共 25 位二进制数。

18210

如何使用DNSSQLi数据库获取数据样本

泄露数据的方法有许多,但你是否知道可以使用DNSSQLi数据库获取数据样本?本文我将为大家介绍一些利用SQL盲注DB服务器枚举泄露数据的技术。...我尝试使用SQLmap进行一些额外的枚举泄露,但由于SQLmap header的原因WAF阻止了我的请求。我需要另一种方法来验证SQLi并显示可以服务器恢复数据。 ?...在之前的文章,我向大家展示了如何使用xp_dirtree通过SQLi来捕获SQL Server用户哈希值的方法。这里我尝试了相同的方法,但由于客户端防火墙上的出站过滤而失败了。...在下面的示例,红框的查询语句将会为我们Northwind数据库返回表名。 ? 在该查询你应该已经注意到了有2个SELECT语句。...此查询的结果是我们检索Northwind数据库第10个表的名称。你是不是感到有些疑惑?让我们来分解下。 以下内部的SELECT语句,它将返回10个结果并按升序字母顺序排序。 ?

11.5K10

redis地理位置GEO的实现原理

首先一个key里面得保存各个member纬度,而且经纬度还必须得能够排序,所以我们发现这个结构其实redis的zset结构其实挺像的,唯一的区别可能在于zset只有一个score,而GEO有经度纬度...,所以我们只需要解决能用一个score来保存经度纬度就可以解决问题了。...当我们要对一组经纬度进行 GeoHash 编码时,我们要先对经度纬度分别编码,然后再 把经纬度各自的编码组合成一个最终编码。 首先,我们来看下经度纬度的单独编码过程。...等到第三次对[90,180]进行二分区,经度值 116.37 落在了分区后的左分区[90, 135) ,所以,第三次分区后的编码值就是 0。...这个编码过程如下表所示: 对纬度的编码方式,经度的一样,只是纬度的范围是[-90,90],下面这张表显示了对 纬度值 39.86 的编码过程。

1.5K40

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

geopos用于指定key返回所有指定位置名称的经度纬度,不存在返回nil geopos key member [member ...] geopos city 广州 # 获取空间名称“广州”...的经纬度 geopos city 深圳 # 没有存储“深圳”的空间名称,返回nil 3.geohash 获取保存位置的geohash值 Redis GEO 使用geohash来保存地理位置的坐标 geohash...距离的单位用户给定的范围单位保持一致。 WITHCOORD : 将位置元素的经度维度也一并返回。...# 键:city # 经度纬度:121.48941010236740112 31.40526993848380499 # 以经纬度为中心,向外扩张的最大距离:2000 # 单位:km # withcoord...距离的单位用户给定的范围单位保持一致。 WITHCOORD : 将位置元素的经度维度也一并返回。

23410

【Redis】四大特殊的数据类型之 Geospatial

LBS 应用访问的数据是人或物关联的一组经纬度信息,而且要能查询相邻的经纬度范围,GEO 就非常适合应用在 LBS 服务的场景。...这样一来,我们就可以把经纬度保存到 Sorted Set ,利用 Sorted Set 提供的“按权重进行有序范围查找”的特性,实现 LBS 服务中频繁使用的“搜索附近”的需求。...常用命令 # 存储指定的地理空间位置,可以将一个或多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定的 key 。...] # 给定的 key 里返回所有指定名称(member)的位置(经度纬度),不存在的返回 nil。 GEOPOS key member [member ......假设车辆 ID 是 33,经纬度位置是(116.034579,39.030452),我们可以用一个 GEO 集合保存所有车辆的经纬度,集合 key 是 cars:locations。

25140

Elasticsearch 在地理信息空间索引的探索演进

如何精确定位一个地址?由经度纬度相对高度组成的地理坐标系,能够明确标示出地球上的任何一个位置。地球上的经度范围[-180, 180],纬度范围[-90,90]。...通常以本初子午线(经度为0)、赤道(纬度为0)为分界线。对于大多数业务场景,由经纬度组成的二维坐标已经足以应对业务问题,可能重庆山城会有些例外。2. 如何计算两个地址距离?...这个公式非常简单,只需用到arcsincos两个高中数学公式。其中φλ表示两个点纬度经度的弧度制度量。...它是分别获取符合纬度范围条件的文档集合符合经度范围条件的文档集合然后进行交集,初筛了太多无效的文档集合。...而ES 5.0版本开始,彻底优化了数值查询(从一维到N维),其底层是Lucene 6.0版本实现的BKD tree的独立索引。其实现不仅降低了内存开销,而且提升了检索索引速度。

1.2K30

面试遇到 Redis,我作为小白是这么被“刁难”的!|还可以学到什么(1)?

现在我们就演绎下Trie树是如何浪费内存空间的。...RadixTrie树对于字符串的检索,特别是有公共前缀的场景。如当输入一个网址,可以自动搜索出可能的选择。当没有完全匹配的搜索结果,可以返回前缀最相似的可能。...问题就来了,地图上的点是二维的,有经度纬度,这如何索引呢?如果只针对其中的一个维度,经度或者纬度进行搜索,那搜出来一遍以后还要进行二次搜索。那要是更高维度呢?三维。...关系数据库(元素 id,经度 x,纬度 y) GeoHash算法将二维的经纬度数据映射到一维的整数 GeoHash算法会继续对这个整数做一次 base32编码,变成一个字符串 在 Redis 里面,经纬度使用...(integer) 2 //02 geopos命令:key里返回所有给定位置元素的位置(经度纬度) 127.0.0.1:6379> geopos china:city beijing 1) 1)

47630

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

我该如何实现发现附近的人?我也希望通过这个 App邂逅女神…… 记忆,一个下班的夜晚,她人群轻盈的移动着,那高挑苗条的身材像漂浮在空间中的一个飘逸的音符。...能不能将经纬度转换成一个浮点数呢? ” 思路对了,为了实现对经纬度比较,Redis 采用业界广泛使用的 GeoHash 编码,分别对经度纬度编码,最后再把经纬度各自的编码组合成一个最终编码。...将[90, 180] 分为[90, 135) [135, 180],这次落在左分区,编码 ‘0’。 如此,最后我们就得到一个 4 位的编码。 而纬度的编码思路跟经度也是一样的,不再赘述。...合并经纬度编码 假如计算的经纬度编码分别是 11011 00101`,目标编码第 0 位则从经度第 0 位的值 1 作为目标值,目标编码的第 1 位则从纬度第 0 位值 0 作为目标值,以此类推:...,如何查找以这个经纬度为中心的一定范围内的其他用用户呢?

1.5K10

空间索引-geohash算法实现

,每个子块在一定经纬度范围内拥有相同的编码,这种方式简单粗暴,可以满足对小规模的数据进行经纬度检索 通过对经纬度的分割,将地球分割成无数的小正方形,每个区域,就是个geohash编码 Geohash...其实就是将整个地图或者某个分割所得的区域进行一次划分,由于采用的是base32编码方式,即Geohash的每一个字母或者数字(如wx4g0e的w)都是由5bits组成(2^5 = 32,base32...$limit_1:$limit_0);     } } 由此,纬度24.88849可得字符串为10100011011001011001 经度118.6197800000,经度分为东经西经,区间为[-...180,180],由此可得字符串11010100010110100001 组合2个字符串,偶数放经度位,奇数放纬度位,php代码实现 /**  * @param $latitude_str 纬度  *...for ($i = 0; $i =经度         $str .= $longitude_str{$i}

1.5K20

Redis 应用实践-地理位置

每个元素都是一个带有经度纬度信息的地理位置。地理位置集合的元素是按照它们的距离近到远排序的。...地理位置集合的每个元素都有一个唯一的成员名,成员名用于标识该元素,而元素的经度纬度信息则通过一个坐标对(longitude, latitude)来表示。...在地理位置集合,可以使用以下命令进行操作:geoadd命令:向地理位置集合添加一个元素。geopos命令:获取地理位置集合中指定元素的经度纬度。...三、Python应用中使用地理位置数据结构下面我们将介绍如何在Python应用中使用Redis的地理位置数据结构。假设我们有一个城市的商家列表,每个商家都有一个唯一的ID、名称、经度纬度信息。...添加商家信息到地理位置集合首先,我们需要将商家信息添加到地理位置集合。我们可以使用Redis的geoadd命令将商家的经度纬度信息添加到地理位置集合

85920
领券