GeoHash空间检索原理及流程

合集下载

geohash算法

geohash算法

6、geohash的精度 https:///wiki/Geohash
Geohash算法的主要思想是对某一数字通过二分法进行无限逼近。显然的是, 不可能让计算机执行无穷计算,加入执行N次计算,则x属于的区间长度为 (b-a)/2N+1 ,以纬度计算为例,则为180/2N ,误差近似计算为:err= 180/2N+1 =90/2N ,如果N=20,则误差最大为:0.00009。但无论如何这 样表明Geohash是一种近似算法。
③字符串相似的表示距离相近(特殊情况后文阐述),这样 可以利用字符串的前缀匹配来查询附近的POI信息。如下两 个图所示,一个在城区,一个在郊区,城区的GeoHash字符 串之间比较相似,郊区的字符串之间也比较相似,而城区和 郊区的GeoHash字符串相似程度要低些
总结:GeoHash就是一种将经纬度转换成字符串的方法,并且 使得在大部分情况下,字符串前缀匹配越多的距离越近
•同理,地球经度区间是[-180,180],可以对经度116.389550进行编码 •通过上述计算,纬度产生的编码为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 •合并:偶数位放经度,奇数位放纬度,把2串编码组合生成新串如下图:
Geohash的0、1串序列 是经度0、1序列和纬度0、 1序列中的数字交替进行 排列的,偶数位对应的 序列为经度序列,奇数 位对应的序列为纬度序 列,在进行第一次划分 时,Geohash0、1序列 中的前5个bits (11100),那么这 5bits中有3bits是表示经 度,2bits表示纬度,所 以第一次划分时,是将 经度划分成8个区段 (2^3 = 8),将纬度划 分为4个区段(2^2 = 4),这样,它能把二维的经纬度编码成一维的字符串。 比如,北海公园的编码是wx4g0ec1。 Geohash有以下几个特点: •Geohash用一个字符串表示经度和纬度两个坐标。在数据存储时可以 简化为只为一列做索引。 •Geohash表示的并不是一个点,而是一个矩形区域。使用者可以发布 地址编码,既能表明自己大致位置,又不至于暴露自己的精确坐标,有 助于隐私保护。 •Geohash编码的前缀可以表示更大的区域。例如wx4g0ec1,它的前缀 wx4g0e表示包含编码wx4g0ec1在内的更大范围。 这个特性可以用于 附近地点搜索。

空间查询的原理

空间查询的原理

空间查询的原理空间查询是指在地理信息系统中,在给定的空间范围内查找符合一定条件要求的对象或数据的过程。

它是地理信息系统最基本且最常用的功能之一,广泛应用于城市规划、土地利用、资源管理、环境保护等领域。

空间查询原理主要包括以下几个方面:数据存储和索引结构、查询条件的表示和解析、查询算法的选择和优化。

首先,为了高效地进行空间查询,需要将空间数据存储在计算机中,并建立相应的索引结构。

常用的索引结构包括四叉树、R树、网格索引等。

这些索引结构能够将空间数据划分为多个相互不重叠的区域,并建立索引以加快查询速度。

其中,四叉树和R树是两种常用的多叉树索引结构,通过逐级分割和合并操作,可以将空间数据按照层次结构组织起来,使得查询时只需要查找相应区域的索引即可。

网格索引则是将空间数据划分为多个网格,并建立索引以支持空间查询。

其次,查询条件的表示和解析是进行空间查询的重要环节。

查询条件通常由空间关系、属性条件和逻辑运算符组成。

空间关系包括相交、包含、相离、包含于等,通过这些关系,可以定义查询对象与查询范围之间的空间关系。

属性条件则用于对查询对象的属性进行限制,如查询建筑物面积大于1000平方米的对象。

逻辑运算符主要包括与、或、非等,用于组合多个查询条件。

查询条件的解析可以使用SQL语言或专门的地理信息系统查询语言实现。

最后,根据查询条件和存储、索引结构的特点,选择合适的查询算法进行空间查询。

查询算法得根据实际情况选择合适的查询顺序,以尽量减少查询时间和空间资源的消耗。

常见的查询算法包括范围查询、相邻查询、缓冲区查询和点定位查询等。

范围查询是通过比较空间对象的边界信息,判断其是否与查询范围相交或包含,以确定查询结果;相邻查询则是通过计算空间对象边界的相交关系,找到与查询对象相邻的对象;缓冲区查询是根据指定的缓冲区距离,找到与查询对象距离在一定范围内的对象;而点定位查询则是在点数据集中,通过比较点与查询点之间的距离,找到最接近查询点的点对象。

geohash问题详解

geohash问题详解

geohash问题详解1.两个离的越近,geohash的结果相同的位数越多,对么?这一点是有些用户对geohash的误解,虽然geo确实尽可能的将位置相近的点hash到了一起,可是这并不是严格意义上的(实际上也并不可能,因为毕竟多一维坐标),例如在方格4的左下部分的点和大方格1的右下部分的点离的很近,可是它们的geohash值一定是相差的相当远,因为头一次的分块就相差太大了,很多时候我们对geohash的值进行简单的排序比较,结果貌似真的能够找出相近的点,并且似乎还是按照距离的远近排列的,可是实际上会有一些点被漏掉了。

上述这个问题,可以通过搜索一个格子,周围八个格子的数据,统一获取后再进行过滤。

这样就在编码层次解决了这个问题。

2.既然不能做到将相近的点hash值也相近,那么geohash的意义何在呢?我觉得geohash还是相当有用的一个算法,毕竟这个算法通过无穷的细分,能确保将每一个小块的geohash值确保在一定的范围之内,这样就为灵活的周边查找和范围查找提供了可能。

常见的一些应用场景A、如果想查询附近的点?如何操作查出改点的gehash值,然后到数据库里面进行前缀匹配就可以了。

B、如果想查询附近点,特定范围内,例如一个点周围500米的点,如何搞?可以查询结果,在结果中进行赛选,将geohash进行解码为经纬度,然后进行比较*在纬度相等的情况下:*经度每隔0.00001度,距离相差约1米;*每隔0.0001度,距离相差约10米;*每隔0.001度,距离相差约100米;*每隔0.01度,距离相差约1000米;*每隔0.1度,距离相差约10000米。

*在经度相等的情况下:*纬度每隔0.00001度,距离相差约1.1米;*每隔0.0001度,距离相差约11米;*每隔0.001度,距离相差约111米;*每隔0.01度,距离相差约1113米;*每隔0.1度,距离相差约11132米。

Geohash,如果geohash的位数是6位数的时候,大概为附近1千米…。

hql的geohash函数

hql的geohash函数

hql的geohash函数HQL中的geohash函数,是一种将地理坐标转换为编码的函数。

它能够将经纬度信息转化为一串字符,方便在数据库中进行地理位置的查询和分析。

本文将详细介绍geohash函数的使用方法和相关注意事项。

一、geohash函数的基本概念geohash函数是一种地理位置编码方法,它将二维的经纬度信息转换为一维的字符串编码。

这个编码字符串的长度可以根据需要进行调整,一般情况下,编码的长度越长,表示的地理位置越精确。

geohash编码的特点是,相邻的地理位置在编码中具有相似的前缀,这样就可以通过比较编码字符串的前缀来判断两个地理位置的近似程度。

二、geohash函数的使用方法在HQL中,geohash函数可以通过以下方式来使用:```SELECT geohash(latitude, longitude) FROM table_name;```其中,latitude和longitude分别表示纬度和经度的字段名或者常量值。

geohash函数会返回一个字符串,表示对应地理位置的编码。

三、geohash函数的参数与返回值geohash函数接受两个参数,分别是纬度和经度的值。

纬度的取值范围是[-90, 90],经度的取值范围是[-180, 180]。

geohash函数的返回值是一个字符串,表示对应地理位置的编码。

四、geohash函数的应用场景geohash函数在地理位置分析和查询中有广泛的应用。

通过geohash 编码,可以方便地进行地理位置的聚类、搜索和匹配等操作。

比如,在一个用户位置数据表中,可以使用geohash函数将用户的经纬度信息编码为geohash字符串,并对这个字符串进行索引,从而实现基于地理位置的快速查询。

五、geohash函数的注意事项1. 在使用geohash函数时,应当注意地理位置的精度。

geohash编码的长度越长,表示的地理位置越精确,但同时也会增加编码的长度和计算的复杂度。

redis geohash 原理

redis geohash 原理

redis geohash 原理【一、Redis Geohash 简介】Redis Geohash 是一种基于地理空间数据的键值对存储结构,它允许在Redis 数据库中存储和查询地理位置信息。

通过Redis Geohash,可以高效地进行地理空间数据的检索和范围查询。

【二、Redis Geohash 原理】【1.空间划分】Redis Geohash 采用一种层级结构来划分地理空间。

首先,将地球表面划分为一个个网格单元,这些单元可以是正方形、六边形等。

每个网格单元的中心点存储在Redis 中,作为一个键值对。

【2.编码方式】当需要存储和查询地理位置时,Redis Geohash 使用一种编码方式将经纬度坐标转换为键。

这种编码方式可以将经纬度坐标压缩成一个固定长度的字符串,便于存储和传输。

同时,编码后的键具有较好的分布特性,有利于提高查询效率。

【3.查找算法】在查询过程中,Redis Geohash 采用一种名为Geohash 树的数据结构进行查找。

Geohash 树是基于哈希表实现的,它将地理空间划分为多个区域,并存储每个区域的边界点信息。

查询时,根据给定的经纬度坐标,在Geohash 树中找到对应区域,然后根据区域内的边界点信息,筛选出符合条件的键。

【三、Redis Geohash 的应用场景】Redis Geohash 主要应用于以下场景:1.地理范围查询:根据经纬度坐标,查询指定范围内的键值对。

2.地理空间数据分析:对地理空间数据进行聚合、统计和分析。

3.位置推荐:根据用户位置,推荐附近的商品、服务或景点等。

【四、Redis Geohash 的优缺点】优点:1.高效:Redis Geohash 采用层级结构和Geohash 树,提高了查询效率。

2.节省存储空间:通过编码和划分空间,减少了存储空间需求。

3.易于扩展:可以根据需求灵活调整空间划分和编码方式。

缺点:1.精度限制:由于地球表面的划分和编码压缩,可能导致查询结果的精度受限。

geohash原理

geohash原理

geohash原理Geohash原理Geohash是一种将地理位置编码为字符串的方法,它将经纬度坐标转换为一串由数字和字母组成的字符串,这个字符串可以被用作数据库索引或者用于在地图上标记位置。

Geohash的核心原理是将经纬度坐标转换为二进制编码,并将这些二进制编码拼接在一起形成一个字符串。

1. Geohash基本概念Geohash是由 Gustavo Niemeyer 在 2008 年发明的一种地理编码系统。

它将地球表面的经纬度坐标转换为一个短字符串,这个字符串能够唯一表示一个地理位置。

Geohash算法是基于分治法(Divide and Conquer)思想设计的,它将二维的经纬度坐标转化为一维的字符串,并且保证相邻位置之间的距离越小,对应的Geohash值越相似。

2. Geohash原理详解2.1 坐标系在介绍Geohash算法之前,我们需要先了解一下常见的坐标系。

常见的坐标系有 WGS84、GCJ02、BD09 等。

WGS84 是全球定位系统使用最广泛的坐标系,在 Google 地图和百度地图中也都使用 WGS84 坐标系。

GCJ02 又称火星坐标系,是为了保护国家安全而对 WGS84 坐标系进行的加密处理。

BD09 是百度地图使用的一种坐标系,它是在 GCJ02 坐标系基础上再次加密得到的。

2.2 Geohash编码Geohash算法将二维的经纬度坐标转化为一维的字符串,它将经度和纬度分别编码为两个二进制字符串,并将这两个字符串拼接在一起形成一个新的字符串。

Geohash编码过程中采用了递归分治法,将地球表面划分为一个个小矩形区域,并给每个小矩形区域分配一个唯一的Geohash编码。

2.3 Geohash精度Geohash编码的长度决定了它所表示的地理位置的精度。

Geohash 编码越长,表示的地理位置越精确。

例如,长度为 6 的Geohash编码可以表示一个面积为约610km × 610km 的矩形区域;长度为 7 的Geohash编码可以表示一个面积为约76km × 61km 的矩形区域;长度为 8 的Geohash编码可以表示一个面积为约19km × 15km 的矩形区域。

GeoHash算法原理

GeoHash算法原理

1.GeoHasH算法/chen77716/article/details/55766681.算法背景Geohash的初衷是如何用尽量短的URL来标志地图上的某个位置,而地图上的位置一般是用经纬度来表示,问题就转化为如何把经纬度转化为一个尽量短的URL。

Geohash的算法描述请参考:/wiki/Geohash ,本文的主要目的是更加细致地解释该算法的原理及实用场景。

2.算法算法的主要思想是对某一数字通过二分法进行无限逼近,比如纬度的区间是[-90,90],假如给定一个纬度值:46.5,可以通过下面算法对46.5进行无限逼近:(1)把区间[-90,90]进行二分为[-90,0),[0,90],称为左右区间,可以确定46.5属于右区间[0,90](2)递归上述过程46.5总是属于某个区间,无论第几次迭代46.5总是属于某个区间[a,b]。

随着每次迭代区间[a,b]总在缩小,根据极限可知[a,b]会收敛到46.5,用δ来描述就是,任意给定一个ε,总存在一个N使得:δ=|x-a/2N|<ε,x为任意给定的纬度(3)上述分析过程保证了算法收敛性的同时,再记录一下收敛的过程:如果给定的纬度x (46.5)属于左区间,则记录0,如果属于右区间则记录1,这样随着算法的进行会产生一个序列1011100,序列的长度跟给定的收敛次数N相关。

反过来,如果我们知道了序列1011100,我们就可以分别能确定纬度x(46.5)属于哪个更小的迭代区间,也就是说该算法是可逆的(4)算法的精度:显然的是,不可能让计算机执行无穷计算,加入执行N此计算,则x 属于的区间长度为(b-a)/2N+1 ,以纬度计算为例,则为180/2N,误差近似计算为:err=180/2N+1 =90/2N ,如果N=20,则误差最大为:0.00009。

但无论如何这样表明Geohash是一种近似算法。

3.编码在对纬度产生了序列1011100后,在对经度做相同的算法也会产生一个序列,比如0011101。

geohash 用法

geohash 用法

geohash 用法
Geohash是一种将地理位置坐标编码为一串字符串的算法。


将地球表面的位置划分为多个区域,每个区域用一个Geohash
字符串来表示。

Geohash可以用于存储和传输位置数据,通常
用于地理信息系统、位置搜索和地理大数据处理等场景。

Geohash的用法如下:
1. 编码:将经纬度坐标转换为Geohash字符串。

将经度和纬度值进行指定精度的划分,然后将每个划分结果编码为一位字符,最后合并所有字符得到Geohash字符串。

2. 解码:将Geohash字符串解码为对应的经纬度坐标。

根据Geohash字符串的每一位字符,确定对应划分区域,并使用二
分法逐步缩小区域范围,得到最终的经纬度坐标。

3. 精度控制:Geohash字符串的长度可以控制精度,长度越长,则位置表示的范围越小、精度越高;长度越短,则位置表示的范围越大、精度越低。

4. 邻近位置:可以通过Geohash字符串的前缀,找到相邻的位置,以实现位置搜索和范围查询等功能。

Geohash的使用可以帮助在处理和查询大量位置数据时提高效
率和准确性,同时也可以实现位置数据的可视化展示和空间分析等功能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

GeoHash空间检索原理及流程
1构造检索范围
1.1Redis Geohash 存储格式
Geohash值格式类型:
1.Long int 格式:存储格式简单,占用空间较小,检索效率高,不能按位匹配检索。

Eg:-1780687896730638928
2.Base32 格式:存储格式简单,占用空间较小,检索效率较高,检索范围跨度角
度,每少一个字节,代表5个bit位的精度。

Eg: wx4vmkqvj1kv
3.二进制格式存储:存储格式简单,占用空间较大,检索效率会降低,但范围检索
精度高。

Eg: 111001110100100110111001110010101101101110001000011001011011目前我们检索暂时采用二进制格式存储的方式检索,主要考虑是不降低检索精度,而且还可以按字节位进行检索匹配。

1.2构造geohash检索值
1.以用户GPS坐标为圆点,检索距离为半径确定圆形范围。

2.按照圆点与检索半径计算圆形外切正方形的左下点以及右上点坐标,确定检索矩形。

计算过程:
右上点坐标:圆点以0度角方向移动检索距离再以90度角移动检索距离得到。

左下点坐标:圆点以180度角方向移动检索距离再以270度角移动检索距离得到。

3.依据矩形范围确定相应检索距离的检索精度,对应为需要计算多少位的geohash编码
bit位。

定义最大精度为:60bit位,对应base32编码位数为:60/5=12字节
计算每个bit位所代表的空间范围级别,计算公式:
纬度bit位级别计算:180d / Math.pow(2, bits / 2);
精度bit位级别计算: 360d / Math.pow(2, (bits + 1) / 2);
通过检索矩形范围即对应:精度差(宽)、纬度差(高)匹配指定指定精度纬度级别所代表的矩形范围
4.计算圆点指定精度的geohash值。

判断指定此精度的geohash值所表示的矩形范围是否
包括了检索矩形的左下点,以及右上点。

如果包含,则此geohash值,则为空间检索的唯一geohash值,如果未包含,则计算此geohash值邻近8个geohash值,并判断是否
与检索矩形有交集,如果有交集则也为空间检索的geohash值,此时检索geohash值为多个。

1.3检索过程
1.取出geohash检索值。

2.在redis中进行检索。

相关文档
最新文档