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

Geohash原理

2.认识GeoHash GeoHash将二维的经纬度转换成字符串,比如下图展示了北京9个区域的GeoHash字符串,分别是WX4ER,WX4G2、WX4G3等等,每一个字符串代表了某一矩形区域。...GeoHash原理 Geohash其实就是将整个地图或者某个分割所得的区域进行一次划分,由于采用的是base32编码方式,即Geohash中的每一个字母或者数字(如wx4g0e中的w)都是由5bits组成...GeoHash编码与我们一样(因为在同一个GeoHash区域块上),而较近餐馆的GeoHash编码与我们不一致。...计算围栏内所有Geohash 理解了geohash算法的基本原理之后,本节将介绍一个实际应用中常见的场景:计算围栏范围内所有的Geohash编码。...剔除sets中geohash编码对应矩形的中心点不在points围栏范围内的geohash,得到最终的geohash结果集 未经允许不得转载:肥猫博客 » Geohash原理

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

空间索引-geohash算法实现

算法简介 geohash是实现空间索引的一种算法,其他实现空间索引的算法有:R树和其变种GIST树、四叉树、网格索引等 算法基本原理 geohash算法将地球理解为一个二维平面,将平面递归分解成更小的子块...,每个子块在一定经纬度范围内拥有相同的编码,这种方式简单粗暴,可以满足对小规模的数据进行经纬度的检索 通过对经纬度的分割,将地球分割成无数的小正方形,每个区域,就是个geohash编码 Geohash...其实就是将整个地图或者某个分割所得的区域进行一次划分,由于采用的是base32编码方式,即Geohash中的每一个字母或者数字(如wx4g0e中的w)都是由5bits组成(2^5 = 32,base32...geohash编码,存入数据库,例如: ?...php扩展 php已经实现了对geohash的扩展, 其他补充 等有时间,将会把geohash解码算法发出来

1.5K20

Redis GeoHash核心原理解析

目前很火的GeoHash算法就是运用了上述思想,下面我们就开始GeoHash之旅吧。 2. 感性认识 先来两个干货,在线查看GPS某个区域的GeoHash值。...GeoHash字符串,并与各个餐馆的GeoHash字符串进行前缀匹配,匹配越多的距离越近。...GeoHash编码与我们一样(因为在同一个GeoHash区域块上),而较近餐馆的GeoHash编码与我们不一致。...解决的思路很简单,我们查询时,除了使用定位点的GeoHash编码进行匹配外,还使用周围8个区域的GeoHash编码,这样可以避免这个问题。 2....GeoHash值可以区分精度,位数越多,精度越高,表达的地理位置越精细;如一位的GeoHash值把地球划分为32个矩形,8位的geohash值把地球划分为32^8个小矩形 适合根据某个经纬度坐标position

1.4K20

GeoHash空间索引算法简述

GeoHash做的就是这个工作。 简述 GeoHash是由Gustavo Niemeyer(大概于2013年)提出的,目的原本是为地球上的每一个点(根据经纬度)确定一条短的URL作为唯一标识。...这个服务一直在http://geohash.org上,上面还有一些具体的介绍。 GeoHash所做的事就是把一个坐标点映射到一个字符串上,每一个字符串代表的就是一个以经纬度划分的矩形区域。...这样就形成了一个层次分明的结构,越高级的区域GeoHash值越短,表示的区域最大;越小的区域GeoHash值越长,表示的区域越小。...精度 最初Gustavo Niemeyer在定义GeoHash编码的时候是以全球的坐标作为总的区域来分的,因此他计算出了不同编码长度的GeoHash区域对应的范围。...参考 GeoHash核心原理解析 wiki--GeoHash 基于GeoHash的面数据区域查询

92930

GeoHash原理和可视化显示

面数据GeoHash编码实现 上一节介绍的标准GeoHash算法只能用来计算二维点坐标对应的GeoHash编码,我们的场景中还需要计算面数据(即GIS中的POLYGON多边形对象)对应的GeoHash编码...以此GeoHash块为起点,循环往东、往北找相邻的同等大小的GeoHash块,直到找到的GeoHash块完全超出MBR的范围才停止。...求临近GeoHash块的快速算法 上一节对面数据进行GeoHash编码的流程图中标记为绿色和橘黄色的两步,分别是要寻找相邻的东边或北边的GeoHash字符串。...传统的做法是,根据当前GeoHash块的反解信息,求出相邻块内部的一点,在对这个点做GeoHash编码,即为相邻块的GeoHash编码。...通过观察GeoHash编码表的规律,结合GeoHash编码使用的Z阶曲线的特性,验证了一种通过查表来快速求相邻GeoHash字符串的方法。

3.3K20

地理位置计算之geohash算法

特点: geohash用一个字符串表示经度和纬度两个坐标(可以加索引) geohash表示的并不是一个点,而是一个矩形区域 geohash编码的前缀可以表示更大的区域。...,每个区域,就是个geohash编码 geohash其实就是将整个地图或者某个分割所得的区域进行一次划分,由于采用的是base32编码方式,即Geohash中的每一个字母或者数字(如wx4g0e中的w)...Geohash的最简单的解释就是:将一个经纬度信息,转换成一个可以排序,可以比较的字符串编码 Geohash类 namespace geohash; /** * * Encode and decode...编码 $geohash = new Geohash(); //生成逆地理位置编码 $data['car_geohash'] = $geohash->encode...($latitude,$longitude); 当用户进入APP后,授权获取到用户当前位置的经纬度,然后获取附近的geohash值 $geohash = new Geohash(); //将用户的精度的

3.6K10

Geohash介绍及针对具体需求的改良

Geohash算法     地图上一般是使用经度和纬度两个维度来唯一的确定一个点,而geohash采用经纬度二维值转为一维的值。    ...定制经纬度范围     标准的geohash算法的经度范围是(-180,180),纬度范围为(-90,90),这个范围是适用于全球的地理位置的。...length代表的是标准geohash算法中的字符长度,可以看出当geohash的长度为8时,误差(km error)为19米,当长度为7时,误差为76米,当长度为6时,误差为610米,可以看出随着geohash...这里的误差其实只是个大概的数量级,代表的是geohash对应的矩形区域的对角线长度的二分之一。     ...我的需求对应区域的大小控制需要更精确,我希望我通过缩短geohash一位不至于导致区域增大过快,所以我这里采用geohash的二进制转成64位long型值作为geohash值。高位为有效位,低位补0。

1.9K100

geohash之2d 地理空间索引

在创建索引时,MongoDB会将位置数据转换为二进制 geohash值,并使用位置数据和索引的位置范围计算这些值,如 位置范围中所述。..., { min: , max: } ) 位置精度 2d索引在 内部使用所有坐标数据的 geohash...Geohash值 要创建地理空间索引,MongoDB会计算 指定范围内坐标对的geohash值,并为该点的地理散列编制索引。 要计算geohash值,请连续将2D地图划分为象限。...左上象限将具有01的geohash 。右下角和右上角的分别为10 和11。 为了提供更高的精度,继续将每个象限划分为子象限。每个子象限都将包含象限的地理哈希值与子象限的值连接起来。...要计算更精确的geohash,请继续划分子象限并连接每个分区的两位标识符。给定点的散列标识符中的“比特”越多,散列可以描述的可能区域越小,地理空间索引的分辨率越高。

2.2K40

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

今天要介绍的GeoHash算法实现的空间索引,虽然是以B树实现,但我认为它也借用网格索引的一部分思想。 GeoHash 原理 GeoHash 算法的原理说起来是很简单的,如下图: ?...仔细观察相邻方格,我们会发现两个小方格会在 经度或纬度的二进制码上相差1;我们通过 GeoHash 码反向解析出二进制码后,将其经度或纬度(或两者)的二进制码加一,再次组合为 GeoHash 码。...放上GitHub源码地址:空间索引-GeoHash 数据入库: 将经纬度通过 GeoHash 算法获取到二进制 GeoHash 码,并将其转成十进制作为这个点的 score 存入 Redis 的 sorted...小结 花费了十多个小时,总算将 GeoHash 完全整体了一遍,完全理解 GeoHash 并没有想像中的那么简单。除了 GeoHash,四叉树和R树据说查询效率会更高,有时间再研究一下。...参考: GeoHash核心原理解析 Redis GEO 源码注释 GeoHash位数精度对照表(wiki百科): GeoHash length lat bits lng bits lat error lng

1.9K90
领券