geohash索引方法、装置、计算机设备及存储介质
技术领域
1.本发明涉及空间数据处理领域,具体而言,涉及一种geohash索引方法、装置、计算机设备及存储介质。
背景技术:
2.geohash是一种地址编码方法,其能够把二维的空间经纬度数据编码成一个字符串,其基本原理是将地球理解为一个二维平面,将平面递归分解成更小的子块,每个子块在一定经纬度范围内拥有相同的编码。
3.通常在对待索引区域内的空间数据进行索引时,会首先将该待索引区域划分成多个网格,再为每一个网格生成一个geohash编码,当需要索引其中任一网格时,需要对待索引区域中的所有网格进行遍历,才能索引到所需网格,这种方式在网格的数量特别大时索引效率极低。
技术实现要素:
4.本发明提供了一种geohash索引方法、装置、计算机设备及存储介质,其能够引入待索引区域的索引树,通过在索引树中逐层索引,极大地提高了索引效率。
5.为了实现上述目的,本发明采用的技术方案如下:
6.第一方面,本发明提供一种geohash索引方法,所述方法包括:获取待索引区域的索引树,其中,所述待索引区域包括多个网格,每一所述网格对应一个geohash编码,所述geohash编码用于表征对应网格所属的多个不同层级的层级区域,所述索引树包括与每一所述层级对应的节点层,与多个不同层级中最小层级对应的节点层为叶子节点层,叶子节点层中的叶子节点对应每一所述网格的最小层级的层级区域;获取所述多个网格中的待索引的目标网格的geohash编码;根据所述目标网格的geohash编码,在所述索引树中逐层索引,直至到达所述目标网格对应的叶子节点。
7.第二方面,本发明提供一种geohash索引装置,所述装置包括:获取模块,用于获取待索引区域的索引树,其中,所述待索引区域包括多个网格,每一所述网格对应一个geohash编码,所述geohash编码用于表征对应网格所属的多个不同层级的层级区域,所述索引树包括与每一所述层级对应的节点层,与多个不同层级中最小层级对应的节点层为叶子节点层,叶子节点层的叶子节点对应每一所述网格的最小层级的层级区域;获取模块,还用于获取所述多个网格中的待索引的目标网格的geohash编码;索引模块,用于根据所述目标网格的geohash编码,在所述索引树中逐层索引,直至到达所述目标网格对应的叶子节点。
8.第三方面,本发明提供一种计算机设备,包括存储器和控制器,所述控制器执行所述计算机程序时实现如上述的geohash索引方法。
9.第四方面,本发明提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被控制器执行时实现如上述的geohash索引方法。
10.与现有技术相比,本发明首先获取待索引区域的索引树及待索引区域中多个网格中的待索引的目标网格的geohash编码,待索引区域中每一网格对应一个geohash编码,geohash编码用于表征对应网格所属的多个不同层级的层级区域,索引树包括与每一层级对应的节点层,与多个不同层级中最小层级对应的节点层为叶子节点层,叶子节点层的叶子节点对应每一网格的最小层级的层级区域,再根据目标网格的geohash编码,在索引树中逐层索引,直至到达目标网格对应的叶子节点,通过引入待索引区域的索引树,在索引树中逐层索引,极大地提高了索引效率。
附图说明
11.为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
12.图1为本发明实施例提供的一种geohash索引方法的流程示例图。
13.图2为本发明实施例提供的索引树的示例图。
14.图3为本发明实施例提供的图1中步骤s110的子步骤的流程示例图。
15.图4为本发明实施例提供的邻居网格示例图。
16.图5为本发明实施例提供的邻居网格重合情况的示例图。
17.图6为本发明实施例提供的另一种geohash索引方法的流程示例图。
18.图7为本发明实施例提供的另一种geohash索引方法的流程示例图。
19.图8为本发明实施例提供图7中步骤s160的子步骤的流程示例图。
20.图9示出了本发明实施例提供的geohash索引装置的方框示意图。
21.图10为本发明实施例提供的计算机设备的方框示例图。
22.图标:10-计算机设备;11-控制器;12-存储器;13-总线;100-geohash索引装置;110-获取模块;120-索引模块;130-生成模块;140-分发模块。
具体实施方式
23.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
24.因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
25.应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
26.在本发明的描述中,需要说明的是,若出现术语“上”、“下”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,或者是该发明产品使用时惯常摆放的方
位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
27.此外,若出现术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
28.需要说明的是,在不冲突的情况下,本发明的实施例中的特征可以相互结合。
29.现有技术中,当需要获取预设区域内的空间数据或者定位预设区域内的某个位置点时,通常将预设区域划分为多个网格,先定位到多个网格中的目标网格,再基于目标网格进行后续获取数据或者定位具体位置点的处理。
30.目前,从多个网格中定位目标网格的方式是直接关联的方式,即用预设区域内的基站信号点直接关联该区域内的网格,对于任一基站信号点,需要遍历该区域内的网格才能定位到与该基站信号点对应的网格,直接关联存在三个缺点:(1)时间复杂度高,为o(n2);(2)对于一些人群聚集度高的区域,直接关联会出现内存溢出;(3)资源浪费,在范围广、人口少的区域,有些网格根本就是无人到访区,但是直连方式索引时也会检索到该网格。另外,网格的精度和网络数量强相关,精度越高,数量也随之增加,对于通常使用的geohash 7而言,每一个网格的宽度约是0.153km,高度约是0.152km,面积约为0.023km2,若预设区域的面积为16140.54km2,则该预设区域包括的网格数量约为701739个,直接关联方式的缺点在处理如此巨大数量的网格时更加凸显,导致索引效率急剧下降。
31.有鉴于此,本发明实施例提供一种geohash索引方法、装置、计算机设备及存储介质,用于提高索引效率,下面将对其进行详细描述。
32.由于本发明实施例是基于预先生成的索引树进行索引,从而提高索引效率的,为了便于理解,本发明实施例首先介绍索引树的生成方法,请参考图1,图1为本发明实施例提供的一种geohash索引方法的流程示例图,该方法包括以下步骤:
33.步骤s100,将待索引区域划分成多个网格。
34.在本实施例中,根据网格的面积不同,待索引区域划分的网格数量也有差别,网格面积越大,待索引区域中的网格越少,反之,越多,网格面积越小,索引的精度越高,反之,越低,可以根据需要确定网格的面积的大小。
35.步骤s110,按照多个网格之间的位置关系及所属的层级,生成多个网格的geohash编码,其中,每一网格的geohash编码包括每一网格所属的、按照层级从大到小排列的各层级的层级区域编码。
36.在本实施例中,每一网格均具有一个唯一的geohash编码,geohash编码是按照预设编码规则生成的字符串,字符串越长,网格划分粒度越细,一个网格表示的范围越精确,最终的索引精度越高,通常情况下,5位编码可以表示大约10km2的范围,6位编码可以表示约0.34km2的范围。
37.在本实施例中,对于同一个网格而言,当层级不同时,其对应的各层级区域编码也不一样,例如,若层级为省级,网格a属于四川省,其层级区域编码为w,若层级为市级,网格a属于四川省成都市,其层级区域编码为wx,若层级为区级,网格a属于四川省成都市高新区,其层级区域编码为wx01等。需要说明的是,上述网格a只是一个层级的示例,并不代表实际的表示,实际表示时,每一个层级的层级区域编码也可以用两个字符或者更多字符表示。
38.在本实施例中,对于任一网格而言,geohash编码可以根据网格的二维经纬度坐标
转换后得到,虽然网格是一个区域,但是为了便于表示,该网格范围内的区域对应一个经纬度坐标,例如,网格a的经纬度坐标为:116.36676,39.90947,将该坐标转换为geohash编码wx4epcr,则wx4epcr表示一个152.6m*152.4m的网格。
39.在本实施例中,由于待索引区域包括多个网格,多个网格之间的位置关系可以是相邻或者不相邻、对于任一网格而言,与该网格相邻的网格可以是该网格周围4个网格或者8个网格,根据网格之间的位置关系和网格层级生成的geohash编码中包括了网格的层级信息和网格之间的位置关系信息。
40.步骤s120,按照多个网格的geohash编码中各层级的层级区域编码,生成索引树,其中,每一层级对应索引树中每一节点层,每一节点层的节点对应本层级的层级区域编码,相邻节点层中位于较小层级的第一节点与较大层级的第二节点存在关联关系,第一节点的层级区域是第二节点的层级区域的子区域。
41.在本实施例中,索引树中至少存在与每一层级对应的节点层,每一节点层的节点的个数根据多个网格的geohash编码而定,作为一种具体实施方式,索引树可以是多叉索引树,请参照图2,图2为本发明实施例提供的索引树的示例图,图2中,索引树除了根节点之外包括7层节点层,是根据网格的geohash7编码生成的,7层节点层对应7个层级,索引树中从上至下的7个层级对应的层级区域的范围依次从大到小,例如,7个层级中的第一个层级为省级,第二个层级为市级等。图2中,7个层级中前5个层级,每个层级只有一个节点,分别用:w、x、4、g、0表示,第6层级包括一个节点,该节点包括5个关键字:1、v、j、x、3,其中关键字v和第7层级的节点关联,第7层级包括多个关键字,图2中未完全画出来,第6层级的关键字x和第7层级的另一个节点关联,该节点也包括多个关键字,图2中未完全画出来,也就是说,第6层级中关键字v下包括多个第7层级的网格,第6层级中关键字x下包括多个第7层级的网格,以图2中第6层级的关键字v为例,geohash7编码为wx4g0v8、wx4g0vw、wx4g0vv和wx4g0vs网格,具有相同的第6层级的层级区域编码wx4g0v,即属于同一个第5层级的层级区域wx4g0,当然也具有相同的第5、4、3、2、1层级的层级区域编码。需要说明的是,图2只是一个示例,实际应用中,每一个节点层可以包括多个节点,每个节点可以包括多个关键字,具体与待索引区域中网格的geohash编码有关。
42.需要说明的是,根据实际场景的需要,索引树中的节点层的个数可以是7,也可以比7大,或者比7小。
43.需要说明的是,图2中的索引树的根节点不代表任何层级,是为了方便后续节点的统一。对于任意相邻的2个节点层级,例如,第6层级和第7层级,其中,在第6层级的关键字v下的第7层级的节点的多个关键字是唯一的,各不相同。叶子节点的关键字指向该网格对应的数据dt,以便索引到该网格后可以直接得到对应的数据。图2中的索引树深度为7,对应geohash7编码的字符长度,索引树的宽度最大为32,即索引树中任一节点包括的关键字的最大个数为32,对应base32的编码长度,例如,网格的geohash7编码为wx4g01s,将这其拆解为w-x-4-g-0-1-s;数据结构为map(w-》map(x-》map(4-》map(g-》map(0-》map(1-》map(s-》”关系值”))))))),其中的关系值表征网格对应的数据。
44.本发明实施例提供的上述方法,可以生成能够按层级表征待索引区域中的所有网格的索引树,并在索引树中将归属于相同的较大层级区域较小层级区域进行关联,以便实现在索引树中逐层索引,极大提高索引效率。
45.在图1的基础上,本发明实施例还提供了一种生成多个网格的geohash编码的具体实现方式,请参照图3,图3为本发明实施例提供的图1中步骤s110的子步骤的流程示例图,步骤s110包括以下子步骤:
46.子步骤s11:将多个网格中的预设网格作为中心网格,根据中心网格的坐标位置生成中心网格的geohash编码。
47.在本实施例中,预设网格可以是预先指定的待索引区域中任一网格,通常情况下,将大致处于待索引区域中心位置的网格设置为预设网格。中心网格的坐标位置可以是其经纬度坐标。
48.子步骤s12:根据中心网格的geohash编码,确定与其相邻的预设个数的邻居网格的geohash编码,其中,属于相同层级区域的邻居网格和中心网格的geohash编码中的层级区域的区域编码相同。
49.在本实施例中,预设个数可以是4个或者8个,以8个为例,将中心网格周围相邻的8个网格作为该中心网格的邻居网格,请参照图4,图4为本发明实施例提供的邻居网格示例图,图4中,中心网格的geohash编码为wx4g01s,其邻居网格包括位于其上、下、左、右、左上、右上、左下、右下八个方位的网格,中心网格和其8个邻居网格的前6层级的区域编码均相同,为wx4g01。
50.子步骤s13:依次将每一邻居网格作为中心网格,重复上述子步骤s12步骤,直至为多个网格中每一个网格生成对应的geohash编码。
51.在本实施例中,得到中心网格和其邻居网格的geohash编码后,若待索引区域中还存在未生成geohash编码的网格,为了得到待索引区域中所有网格的geohash编码,此时依次将每一邻居网格作为中心网格,再继续确定该中心网格的邻居网格的geohash编码,直至为多个网格中每一个网格生成对应的geohash编码。
52.可以理解的是,任意两个相邻网格的邻居网格会出现邻居网格重合的情况,为了避免重复编码,对于已经确定了geohash编码的网格,不再重复确定其geohash编码。请参照图5,图5为本发明实施例提供的邻居网格重合情况的示例图,图5中,ws10k17的邻居网格和ws10k1k的邻居网格都包括了网格ws10k1e、ws10k1s、ws10k15及ws10k1h,即这两个网格存在重合的邻居网格。
53.还可以理解的是,当中心网格已经处于待索引区域的边界,则不再继续向待索引区域之外的邻居网格进行扩展,此时可以选择其余处于待索引区域内的邻居网格,并将其作为中心网格继续子步骤s12,直至为多个网格中每一个网格生成对应的geohash编码。
54.本发明实施例提供的上述方法,生成的geohash编码中既包括了网格的层级信息又包括了网格之间的位置关系信息,为后续生成包括层级信息和位置关系信息的索引树提供了前提。
55.在本发明实施例中,在上述方法的基础上,为了通过索引树进行并发索引,进一步提高索引效率,本发明实施例基于图1提供了一种geohash索引方法,请参照图6,图6为本发明实施例提供的另一种geohash索引方法的流程示例图,该方法还包括以下步骤:
56.步骤s130,将索引树发送至多台计算机设备,以使多台计算机设备同时根据各自的索引树进行索引。
57.在本实施例中,多台计算机设备可以是多台服务器或者多台主机,多台计算机设
备组成集群或者分布式系统,每台计算机设备上均预先存储索引树,多台计算机设备根据本地存储的索引树进行并发索引,以便满足更高速度的索引需求。
58.在本实施例中,作为一种具体实现方式,可以通过spark broadcast的广播机制实现索引树的一次构建,多台计算机设备共享。
59.需要说明的是,步骤s130也可以和图3组合使用,实现相同的技术效果。
60.在本实施例中,基于上述方法生成的索引树,为了利用生成的索引树进行快速索引,本发明实施例还提供了一种索引方法,请参照图7,图7为本发明实施例提供的另一种geohash索引方法的流程示例图,该方法包括以下步骤:
61.步骤s140,获取待索引区域的索引树,其中,待索引区域包括多个网格,每一网格对应一个geohash编码,geohash编码用于表征对应网格所属的多个不同层级的层级区域,索引树包括与每一层级对应的节点层,与多个不同层级中最小层级对应的节点层为叶子节点层,叶子节点层的叶子节点对应每一网格的最小层级的层级区域。
62.在本实施例中,索引树是为了加速索引待索引区域的网格预先生成的树形结构,其生成方法已在前述实施例中有详细说明,此处不再赘述。
63.在本实施例中,叶子节点层可以包括一个或者多个叶子节点,每一个叶子节点可以包括一个或者多个关键字,每一个叶子节点中的每一个关键字对应一个网格的最小层级的层级区域。对于任一网格而言,索引到该网格对应的叶子节点,即可在该叶子节点中的关键字中最终索引到该网格,由于单个叶子节点包括的关键字的数据量相对于待索引区域中所有网格的数量已经大大降低,因此,通过层级索引可以大大加速索引效率。
64.步骤s150,获取多个网格中的待索引的目标网格的geohash编码。
65.在本实施例中,目标网格为多个网格中待索引的网格,可以是多个网格中的任一网格。
66.需要说明的是,步骤s140和步骤s150的先后顺序不予限定。
67.步骤s160,根据目标网格的geohash编码,在索引树中逐层索引,直至到达目标网格对应的叶子节点。
68.在本实施例中,根据目标网格的geohash编码,在索引树中的每一节点层逐层索引,每一层索引均可以排除该层级中与目标网格的geohash编码中该层级的层级区域编码不一致的多个网格,从而更快速地接近目标网格对应的叶子节点。
69.在本实施例中,根据实际场景的需要,还可以将叶子节点中的每一关键字与其对应的网格的预设数据进行关联,例如,在每一叶子节点中的每一关键字的数据结构体中保存指向对应网格的预设数据的指针,以便在找到目标网格对应的叶子节点后,进一步索引到对应关键字,根据关键字的结构体中的指针直接得到目标网格对应的预设数据,预设数据可以是网格的属性信息,或者网格内区域的驻留人口、信息点等统计信息。
70.本发明实施例提供的上述方法,通过引入待索引区域的索引树,在索引树中逐层索引,每一层索引均可以排除该层级中与目标网格的geohash编码中该层级的层级区域编码不一致的多个网格,从而更快速地接近目标网格对应的叶子节点。
71.在图7的基础上,本发明实施例还提供了一种确定目标网格对应的叶子节点的具体实现方式,请参照图8,图8为本发明实施例提供图7中步骤s160的子步骤的流程示例图,步骤s160包括以下子步骤:
72.子步骤s01:将目标网格的geohash编码中最大层级的层级区域编码作为起始编码,并将与起始编码对应的节点作为起始节点。
73.在本实施例中,层级区域其中的最大层级的层级区域是指该层级的层级区域涵盖的区域范围最大,该区域范围可以根据实际场景预先确定,例如,该区域范围可以是行政区域的维度,也可以是覆盖面积的维度。由于geohash编码中包括按照层级从大到小排列的各层级的层级区域编码,若以行政区域为例,层级越大,则行政区域的级别越高。
74.子步骤s02:获取目标网格的geohash编码中、比起始编码的层级小、且与起始编码的层级相邻的目标层级区域编码。
75.在本实施例中,以层级区域为:省、市、区、街道为例,最大层级的层级区域为省,最小层级的层级区域为街道,起始编码的层级为省,则比省的层级小、且与省的层级相邻的目标层级区域为市。
76.子步骤s03:从起始节点开始,在索引树中查找与目标层级区域编码对应的目标节点。
77.在本实施例中,索引树从上至下分别对应不同的层级区域,最上层对应最大层级的层级区域,例如,省,最下层对应最小层级的层级区域,例如,街道。
78.子步骤s04:若目标节点非叶子节点,则用目标节点替换起始节点、并用目标层级区域编码替换起始编码,重复子步骤s02~子步骤s03的步骤,直至到达目标网格对应的叶子节点。
79.在本实施例中,由于利用了索引树进行索引,而索引树的时间复杂度是固定的,为o(n),为了证明本发明实施例提供的上述方法的有效性,在本实施例中将本发明实施例提供的方法与现有的直接关联的方法分别在常规测试和极端测试下进行了对比,对于常规测试而言,采用多节点并行索引,对比结果如下表1:
80.表1
[0081][0082][0083]
对于极端测试而言,采用单节点索引,对比文件如下表2:
[0084]
表2
[0085][0086]
为了执行上述实施例及各个可能的实施方式中的相应步骤,下面给出一种geohash索引装置100的实现方式。请参照图9,图9示出了本发明实施例提供的geohash索引装置100的方框示意图。需要说明的是,本实施例所提供的geohash索引装置100,其基本原理及产生的技术效果和上述实施例相同,为简要描述,本实施例部分未提及指出。
[0087]
geohash索引装置100包括获取模块110、索引模块120、生成模块130及分发模块140。
[0088]
获取模块110,用于获取待索引区域的索引树,其中,待索引区域包括多个网格,每一网格对应一个geohash编码,geohash编码用于表征对应网格所属的多个不同层级的层级区域,索引树包括与每一层级对应的节点层,与多个不同层级中最小层级对应的节点层为叶子节点层,叶子节点层中的叶子节点对应每一网格的最小层级的层级区域。
[0089]
获取模块110,还用于获取多个网格中的待索引的目标网格的geohash编码。
[0090]
索引模块120,用于根据目标网格的geohash编码,在索引树中逐层索引,直至到达目标网格对应的叶子节点。
[0091]
作为一种具体实施方式,每一节点层包括至少一个节点,目标网格的geohash编码包括按照层级从大到小排列的各层级的层级区域编码,索引模块120具体用于以如下方式执行:s01:将目标网格的geohash编码中最大层级的层级区域编码作为起始编码,并将与起始编码对应的节点作为起始节点;s02:获取目标网格的geohash编码中、比起始编码的层级小、且与起始编码的层级相邻的目标层级区域编码;s03:从起始节点开始,在索引树中查找与目标层级区域编码对应的目标节点;s04:若目标节点非叶子节点,则用目标节点替换起始节点、并用目标层级区域编码替换起始编码,重复s02~s03的步骤,直至到达目标网格对应的叶子节点。
[0092]
生成模块130,用于:将待索引区域划分成多个网格;按照多个网格之间的位置关系及所属的层级,生成多个网格的geohash编码,其中,每一网格的geohash编码包括每一网格所属的、按照层级从大到小排列的各层级的层级区域编码;按照多个网格的geohash编码中各层级的层级区域编码,生成索引树,其中,每一层级对应索引树中每一节点层,每一节点层的节点对应本层级的层级区域编码,相邻节点层中位于较小层级的第一节点与较大层级的第二节点存在关联关系,第一节点的层级区域是第二节点的层级区域的子区域。
[0093]
生成模块130在用于按照多个网格之间的位置关系及所属的层级,生成多个网格的geohash编码时,具体用于以如下方式执行:s11:将多个网格中的预设网格作为中心网格,根据中心网格的坐标位置生成中心网格的geohash编码;s12:根据中心网格的geohash编码,确定与其相邻的预设个数的邻居网格的geohash编码,其中,属于相同层级区域的邻居网格和中心网格的geohash编码中的层级区域的区域编码相同;s13:依次将每一邻居网
格作为中心网格,重复上述s12步骤,直至为多个网格中每一个网格生成对应的geohash编码。
[0094]
分发模块140,用于:将索引树发送至多台计算机设备,以使多台计算机设备同时根据各自的索引树进行索引。
[0095]
请参考图10,图10为本发明实施例提供的计算机设备10的方框示例图,计算机设备10包括控制器11、存储器12、控制器11通过总线13与存储器12连接。
[0096]
存储器12用于存储程序,例如本发明实施例的图9中的geohash索引装置100,geohash索引装置100包括至少一个可以软件或固件(firmware)的形式存储于存储器12中的软件功能模块,控制器11在接收到执行指令后,执行所述程序以实现本发明实施例中揭示的geohash索引方法。
[0097]
存储器12可能包括高速随机存取存储器(random access memory,ram),也可能还包括非易失存储器(non-volatile memory,nvm)。
[0098]
控制器11可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过控制器11中的硬件的集成逻辑电路或者软件形式的指令完成。上述的控制器11可以是通用处理器,包括中央处理器(central processing unit,cpu)、微控制单元(microcontroller unit,mcu)、复杂可编程逻辑器件(complex programmable logic device,cpld)、现场可编程门阵列(field programmable gate array,fpga)、嵌入式arm等芯片。
[0099]
本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述的geohash索引方法。
[0100]
综上所述,本发明实施例提供了一种geohash索引方法、装置、计算机设备及存储介质,所述方法包括:获取待索引区域的索引树,其中,待索引区域包括多个网格,每一网格对应一个geohash编码,geohash编码用于表征对应网格所属的多个不同层级的层级区域,索引树包括与每一层级对应的节点层,与多个不同层级中最小层级对应的节点层为叶子节点层,叶子节点层中的叶子节点对应每一网格的最小层级的层级区域;获取多个网格中的待索引的目标网格的geohash编码;根据目标网格的geohash编码,在索引树中逐层索引,直至到达目标网格对应的叶子节点。与现有技术相比,本发明实施例引入索引树,在索引树中逐层索引,直至到达目标网格对应的叶子节点,通过引入待索引区域的索引树,在索引树中逐层索引,极大地提高了索引效率。
[0101]
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
技术特征:
1.一种geohash索引方法,其特征在于,所述方法包括:获取待索引区域的索引树,其中,所述待索引区域包括多个网格,每一所述网格对应一个geohash编码,所述geohash编码用于表征对应网格所属的多个不同层级的层级区域,所述索引树包括与每一所述层级对应的节点层,与多个不同层级中最小层级对应的节点层为叶子节点层,叶子节点层中的叶子节点对应每一所述网格的最小层级的层级区域;获取所述多个网格中的待索引的目标网格的geohash编码;根据所述目标网格的geohash编码,在所述索引树中逐层索引,直至到达所述目标网格对应的叶子节点。2.如权利要求1所述的geohash索引方法,其特征在于,每一所述节点层包括至少一个节点,所述目标网格的geohash编码包括按照层级从大到小排列的各层级的层级区域编码,所述根据所述目标网格的geohash编码,在所述索引树中逐层索引,直至到达所述目标网格对应的叶子节点的步骤包括:s01:将所述目标网格的geohash编码中最大层级的层级区域编码作为起始编码,并将与所述起始编码对应的节点作为起始节点;s02:获取所述目标网格的geohash编码中、比所述起始编码的层级小、且与所述起始编码的层级相邻的目标层级区域编码;s03:从所述起始节点开始,在所述索引树中查找与所述目标层级区域编码对应的目标节点;s04:若所述目标节点非叶子节点,则用所述目标节点替换所述起始节点、并用所述目标层级区域编码替换所述起始编码,重复所述s02~s03的步骤,直至到达所述目标网格对应的叶子节点。3.如权利要求1所述的geohash索引方法,其特征在于,所述方法还包括:将所述待索引区域划分成多个网格;按照所述多个网格之间的位置关系及所属的层级,生成所述多个网格的geohash编码,其中,每一所述网格的geohash编码包括每一所述网格所属的、按照层级从大到小排列的各层级的层级区域编码;按照所述多个网格的geohash编码中各层级的层级区域编码,生成所述索引树,其中,每一所述层级对应索引树中每一节点层,每一节点层的节点对应本层级的层级区域编码,相邻节点层中位于较小层级的第一节点与较大层级的第二节点存在关联关系,所述第一节点的层级区域是所述第二节点的层级区域的子区域。4.如权利要求3所述的geohash索引方法,其特征在于,所述按照所述多个网格之间的位置关系及所属的层级,生成所述多个网格的geohash编码的步骤包括:s11:将所述多个网格中的预设网格作为中心网格,根据所述中心网格的坐标位置生成所述中心网格的geohash编码;s12:根据所述中心网格的geohash编码,确定与其相邻的预设个数的邻居网格的geohash编码,其中,属于相同层级区域的所述邻居网格和所述中心网格的geohash编码中的层级区域的区域编码相同;s13:依次将每一所述邻居网格作为中心网格,重复上述s12步骤,直至为所述多个网格中每一个网格生成对应的geohash编码。
5.如权利要求3所述的geohash索引方法,其特征在于,所述方法还包括:将所述索引树发送至多台计算机设备,以使所述多台计算机设备同时根据各自的索引树进行索引。6.一种geohash索引装置,其特征在于,所述装置包括:获取模块,用于获取待索引区域的索引树,其中,所述待索引区域包括多个网格,每一所述网格对应一个geohash编码,所述geohash编码用于表征对应网格所属的多个不同层级的层级区域,所述索引树包括与每一所述层级对应的节点层,与多个不同层级中最小层级对应的节点层为叶子节点层,叶子节点层中的叶子节点对应每一所述网格的最小层级的层级区域;获取模块,还用于获取所述多个网格中的待索引的目标网格的geohash编码;索引模块,用于根据所述目标网格的geohash编码,在所述索引树中逐层索引,直至到达所述目标网格对应的叶子节点。7.如权利要求6所述的geohash索引装置,其特征在于,所述装置还包括生成模块,所述生成模块用于:将所述待索引区域划分成多个网格;按照所述多个网格之间的位置关系及所属的层级,生成所述多个网格的geohash编码,其中,每一所述网格的geohash编码包括每一所述网格所属的、按照层级从大到小排列的各层级的层级区域编码;按照所述多个网格的geohash编码中各层级的层级区域编码,生成所述索引树,其中,每一所述层级对应索引树中每一节点层,每一节点层的节点对应本层级的层级区域编码,相邻节点层中位于较小层级的第一节点与较大层级的第二节点存在关联关系,所述第一节点的层级区域是所述第二节点的层级区域的子区域。8.如权利要求6所述的geohash索引装置,其特征在于,所述装置还包括分发模块,所述分发模块用于:将所述索引树发送至多台计算机设备,以使所述多台计算机设备同时根据各自的索引树进行索引。9.一种计算机设备,包括存储器和控制器,其特征在于,所述控制器执行所述计算机程序时实现如权利要求1-5中任一项所述的geohash索引方法。10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被控制器执行时实现如权利要求1-5中任一项所述的geohash索引方法。
技术总结
本发明涉及空间数据处理领域,提供了一种GEOHASH索引方法、装置、计算机设备及存储介质,所述方法包括:获取待索引区域的索引树,其中,待索引区域包括多个网格,每一网格对应一个GEOHASH编码,GEOHASH编码用于表征对应网格所属的多个不同层级的层级区域,索引树包括与每一层级对应的节点层,与多个不同层级中最小层级对应的节点层为叶子节点层,叶子节点层中的叶子节点对应每一网格的最小层级的层级区域;获取多个网格中的待索引的目标网格的GEOHASH编码;根据目标网格的GEOHASH编码,在索引树中逐层索引,直至到达目标网格对应的叶子节点。本发明在索引树中逐层索引,极大地提高了索引效率。高了索引效率。高了索引效率。
技术研发人员:邹炎炎 陶周天 刘祖军 桂朝
受保护的技术使用者:智慧足迹数据科技有限公司
技术研发日:2021.12.06
技术公布日:2022/3/8