极速地理GeoHash聚类方法与流程

文档序号:12887669阅读:879来源:国知局
极速地理GeoHash聚类方法与流程

本申请涉及计算机领域,具体涉及互联网领域,尤其涉及极速地理geohash聚类方法。



背景技术:

在lbs(locationbasedservices,基于地理位置的服务)中,经常有根据地理位置对poi(pointofinterest,兴趣点)样本进行聚类的需求。目前,通常采用的算法包括:k-means(k平均算法)、dbscan(density-basedspatialclusteringofapplicationswithnoise,具有噪声的基于密度的聚类方法)。

然而,当采用上述算法对poi样本进行聚类时,一方面,需要计算每一个poi样本的地理位置的位置关系,由于poi样本的数量为海量级别,导致聚类速度慢,另一方面,无法灵活地调整聚类的聚类精度。



技术实现要素:

本申请提供了极速地理geohash聚类方法,用于解决上述背景技术部分存在的技术问题。

本申请提供了极速地理geohash聚类方法,该方法包括:确定对poi样本进行聚类所需的聚类精度在树结构聚类数据库中对应的目标层;从目标层中选取用于聚类的节点,对节点对应的区域内的poi样本进行聚类,得到聚类结果。

本申请提供的极速地理geohash聚类方法,通过确定对poi样本进行聚类所需的聚类精度在树结构聚类数据库中对应的目标层;从目标层中选取用于聚类的节点,对节点对应的区域内的poi样本进行聚类,得到聚类结果。一方面,对海量的poi样本快速完成聚类,另一方面,可以灵活地调整聚类精度。

附图说明

通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:

图1示出了根据本申请的极速地理geohash聚类方法的一个实施例的流程图;

图2示出了树结构聚类数据库的一个结构示意图;

图3示出了poi样本参与树结构聚类数据库的构建的一个效果示意图;

图4示出了对poi样本进行聚类的一个示意图;

图5示出了对poi样本进行聚类的另一个示意图。

具体实施方式

下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。

需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。

请参考图1,其示出了根据本申请的极速地理geohash聚类方法的一个实施例的流程图。该方法包含以下步骤:

步骤101,确定对poi样本进行聚类所需的聚类精度在树结构聚类数据库中对应的目标层。

在本实施例中,一个poi样本为与一个poi相关联的信息的集合。可以利用预先构建的树结构聚类数据库对poi样本进行聚类。树结构聚类数据库可以基于树结构构建,树结构可以包括但不限于:trie树(前缀树)、suffixtree(后缀树)、b+tree(多路搜索树)。

在本实施例中,poi样本可以包括但不限于:标识、地理位置、地址、店名、电话号码。

例如,一个poi为一家餐厅,则该餐厅的id、地理位置、地址、店名、电话号码可以构成一个poi样本,poi的地理位置包括经度和纬度。

在本实施例中,poi样本的地理位置即为poi样本对应的poi的地理位置。poi样本对应的geohash编码字符串即为poi样本对应的poi的地理位置对应的geohash编码字符串。

在本实施例的一些可选的实现方式中,树结构聚类数据库是由poi样本对应的geohash编码字符串所构建,包括多个层,geohash编码字符串长度对应于树结构聚类数据库的层的数量。每一层对应一个聚类精度,geohash编码字符串中的字符对应节点,每一层包括一个或多个节点,节点对应区域内存在一个或多个poi样本。

在本实施例中,聚类精度可以为一个数值区间,在对poi样本根据一个聚类精度进行聚类时,一个poi样本的聚类结果中任意两个poi样本的地理位置之间的距离应在该数值区间内。在geohash算法,一个geohash编码字符串可以表示一个区域,geohash编码字符串的长度越长,表示的区域的范围越小。一个geohash编码字符串的长度也对应一个精度,该精度也为一个数值区间,任意两个在该geohash编码字符串表示的区域内的poi样本的地理位置之间的距离位于该数据区间内。

因此,在本实施例中,树结构聚类数据库可以由poi样本对应的geohash编码字符串构建。一个层中的节点可以采用一个或多个字符表示,每一个层中的每一个节点对应的字符的数量相同。

例如,poi样本对应的geohash编码字符串包含的字符数量为8,每一层中表示一个节点的字符的数量为2,则树结构聚类数据库包含4层。又例如,poi样本对应的geohash编码字符串包含的字符数量为8,树结构聚类数据库包含3层,第1层中表示一个节点的字符的数量为4,第2层中表示一个节点的字符的数量为2,第3层中表示一个节点的字符的数量为2。

在本实施例中,树结构聚类数据库中的首层的节点对应的区域可以为表示该节点的字符组成的geohash编码字符串表示的区域,树结构聚类数据库中的非首层节点对应的区域可以为该由表示该非首层节点的字符与表示该非首层节点的父节点的字符和祖父节点的字符组成的字符串表示的区域。

以poi样本对应的geohash编码字符串包含的字符数量为8,每一层中表示一个节点的字符的数量为2,树结构聚类数据库包含4层为例,假设第1层包含由kj表示的节点,第2层包含kj表示的节点的子节点由b3表示的节点,第3层包含b3表示的节点的子节点由dk表示的节点,第4层包含dk表示的节点的子节点由p9表示的节点。p9表示的节点对应的区域为geohash编码字符串kjb3dkp9表示的区域。

由于每一个层中的节点对应的字符的数量相同,因此,一个层的中任意一个节点的表示该节点的字符与表示该节点的父节点的字符和祖父节点的字符组成的字符串的数量是相同的。换言之,一个层中的任意一个节点对应的区域的范围是相同的,相应地,一个层中任意一个节点对应的区域对应的精度是相同的。因此,可以将一个层中的节点对应区域对应的精度作为聚类精度,从而,每一层对应一个聚类精度。在本实施例的一些可选的实现方式中,在树结构聚类数据库中,geohash编码字符串中每一个字符在树结构聚类数据库中所对应的层的层数与每一个字符在geohash编码字符串中的次序序位对应,节点对应区域是由树结构聚类数据库中的节点至首层节点之间的路径所表示的区域,路径上的每一个节点所在层均不相同,路径上的相邻节点之间的关系为父子关系。

树结构聚类数据库中,每一层对应一个聚类精度,geohash编码字符串中的字符对应节点,每一层包括一个或多个节点,一个节点可以对应一个字符。一个节点可以包含多个子节点,一个节点仅具有一个父节点。树结构聚类数据库中的节点之间的父子关系可以表示节点对应的区域之间的包含关系。树结构聚类数据库中的每一个层可以包含多个同一字符表示的节点,同一字符表示的每一个节点的父节点均不相同。每一层中的节点对应区域内存在一个或多个poi样本。

在本实施例中,树结构聚类数据库中的每一个节点对应的区域为树结构聚类数据库中的该节点至首层节点之间的路径对应geohash编码字符串所表示的区域,路径上的每一个节点所在层均不相同,路径上的相邻节点之间的关系为父子关系。

在本实施例中,由于一个节点仅具有一个父节点,因此,节点至首层的节点之间的路径是唯一的。节点至首层节点之间的路径对应geohash编码字符串可以为由首层节点对应的字符作为首个字符,依次与路径上的首层与该节点所在的层到之间的层的节点对应的字符和该节点对应的字符拼接得到的字符串。

在本实施例中,树结构聚类数据库的每一层对应一个聚类精度,每一层对应的聚类精度可以采用geohash编码字符串包含的字符的数量为该层的次序时对应的误差表示。

例如,在geohash算法中,geohash编码字符串包含的字符的数量为2时,对应的误差为-630km-630km,树结构聚类数据库的第2层对应的聚类精度可以采用该误差表示。当对poi样本进行聚类所需的聚类精度为geohash编码字符串包含的字符的数量为2时对应的误差即-630km-630km时,该聚类精度对应的树结构聚类数据库的第2层,可以将树结构聚类数据库的第2层作为对poi样本进行聚类所需的聚类精度在树结构聚类数据库中对应的层。

在本实施例中,节点的节点数据可以包括地理位置在该节点对应的区域内的poi样本的poi样本数量、poi样本查询次数。树结构聚类数据库中的最底层的节点的节点数据可以包括poi样本。

请参考图2,其示了树结构聚类数据库的一个结构示意图。

应理解,在图2中仅示例性地示出每一层中的采用不同的字符表示的节点。在树结构聚类数据库中,每一层可以包含多个利用同一字符表示的节点。例如,在树结构聚类数据库的第2层中,可以包含多个节点h,每一个节点h具有一个父节点并且每一个节点h的父节点均不相同。

以图2中示出的节点0、节点h、节点2、节点5为例,说明节点对应的区域之间的包含关系。g表示树结构聚类数据库的层,一层对应一个聚类精度,聚类精度可以采用geohash编码字符串包含的字符的数量为该次序时对应的误差表示。例如,g=1,聚类精度为geohash编码字符串的字符数量1时对应的误差-2500km-2500km,g=2,聚类精度为geohash编码字符串的字符数量2时对应的误差-630km-630km。

位于树结构聚类数据库的第1层的节点0的子节点包含位于第2层的节点h,节点0对应的区域为节点0至树结构聚类数据库的第1层的节点0之间的路径对应的geohash编码字符串即geohash编码字符串0表示的区域。节点h对应的区域为节点h至树结构聚类数据库的第1层的节点0之间的路径对应的geohash编码字符串即geohash编码字符串0h所表示的区域。由于geohash编码字符串0h所表示的区域为将geohash编码字符串0所表示的区域划分为32个子区域中的一个子区域,因此,节点h对应的区域为节点0对应的区域的子区域。

位于树结构聚类数据库的第2层的节点h的子节点包含位于树结构聚类数据库的第三层的节点2、节点5。节点2对应的区域为节点2至树结构聚类数据库的第1层的节点0之间的路径对应的geohash编码字符串所表示的区域。节点2至树结构聚类数据库的树结构聚类数据库的第一层的节点0之间的路径包含节点2、节点h、节点0,节点2至树结构聚类数据库的第1层的节点0之间的路径对应的geohash编码字符串为0h2,节点2对应的区域为geohash编码字符串0h2所表示的区域。同理,节点5对应的区域为geohash编码字符串0h5所表示的区域。由于geohash编码字符串0h2所表示的区域、geohash编码字符串0h5所表示的区域分别为将geohash编码字符串0h所表示的区域划分为32个子区域中的一个子区域,因此,节点2对应的区域、节点5对应的区域为节点h对应的区域的子区域。

位于树结构聚类数据库的第2层的节点h的n=33表示地理位置在节点h对应的区域内的poi样本的数量为33个。换言之,在构建树结构聚类数据库时,有33个poi样本经过对poi样本的地理位置的经度和纬度进行编码之后,对应的geohash编码字符串中的第2个字符均为字符h。

在本实施例的一些可选的实现方式中,在由poi样本对应的geohash编码字符串所构建树结构聚类数据库时,可以预先获取多个poi样本,利用多个poi样本构建树结构聚类数据库。采用geohash算法以预设编码长度分别对每一个poi样本的地理位置对应的经度和纬度进行编码,得到每一个poi样本对应的geohash编码字符串,预设编码长度等于树结构聚类数据库的层的数量。

例如,预设编码长度为8,则对poi样本的地理位置的经度和纬度进行编码得到的geohash编码字符串的长度为8,即poi样本对应的geohash编码字符串包含8个字符,树结构聚类数据库的层数为8。

在分别得到每一个poi样本对应的geohash编码字符串之后,可以分别对每一个poi样本对应的geohash编码字符串执行以下操作:确定poi样本对应的geohash编码字符串在树结构聚类数据库中对应的路径,路径上的每一个geohash编码字符串中的字符表示的节点在树结构聚类数据库中应在的层与字符在geohash编码字符串中的次序序位对应。

在确定poi样本对应的geohash编码字符串在树结构聚类数据库中对应的路径时,可以首先确定poi样本对应的geohash编码字符串在树结构聚类数据库中对应的路径上的节点,该路径上的每一个节点为分别由poi样本对应的geohash编码字符串中一个字符表示的节点,节点在路径上的应在的树结构聚类数据库中的层与该节点对应的字符在geohash编码字符串中的次序序位一一对应,从而,可以确定poi样本对应的geohash编码字符串在树结构聚类数据库中对应的路径。

在本实施例中,poi样本对应的geohash编码字符串在树结构聚类数据库中对应的路径上的相邻的节点之间为父子关系,树结构聚类数据库中的位于该路径上的每一个geohash编码字符串中的字符表示的节点之间的关系为父子关系。

例如,采用8位编码长度对一个poi样本的地理位置的经度和纬度进行编码之后,得到的该poi样本对应的geohash编码字符串为kjb3dkp9。geohash编码字符串kjb3dkp9在树结构聚类数据库中对应的路径上包含字符k表示的节点、字符j表示的节点、字符b表示的节点、字符3表示的节点、字符d表示的节点、字符p表示的节点、字符9表示的节点。该路径上字符k表示的节点应在树结构聚类数据库的第1层,该路径上的字符j表示的节点应在树结构聚类数据库的第2层,以此类推,可以分别确定路径上的每一个字符表示的节点应在的树结构聚类数据库中的层。

由于树结构聚类数据库中一个节点仅具有一个父节点,因此,geohash编码字符串kjb3dkp9在树结构聚类数据库中对应的路径是唯一的。从而,在树结构聚类数据库中每一层中包含同一字符表示的多个节点的情况下,可以准确地确定树结构聚类数据库的每一层中应包含的在路径上的字符表示的节点。然后,再判断树结构聚类数据库的每一层中是否已经存在该路径上的字符表示的节点。

例如,对于树结构聚类数据库的第8层中包含多个字符9表示的节点,geohash编码字符串kjb3dkp9在树结构聚类数据库中对应的路径上的字符9表示的节点应在树结构聚类数据库的第8层,即树结构聚类数据库的第8层应包含路径上的字符9表示的节点。可以判断树结构聚类数据库的第8层是否已经存在路径上的字符9表示的节点。

当该路径上的字符表示的节点在树结构聚类数据库中应在的层中不存在路径上的字符表示的节点时,则在该层中创建该路径上的该字符表示的节点以及更新路径上的字符表示的节点的节点数据中的poi样本数量。

当该路径上的字符表示的节点在树结构聚类数据库中应在的层中存在该路径上的该字符表示的节点时,更新该路径上的该字符表示的节点的节点数据中的poi样本数量。

例如,该路径上的字符9表示的节点应在树结构聚类数据库中的第8层,当树结构聚类数据库的第8层中不存在该路径上的字符9表示的节点9时,则在第8层中创建该路径上的字符9表示的节点9,并且将树结构聚类数据库中该路径上的节点9表示的节点9的节点数据中的poi样本数量加1。

当树结构聚类数据库的第8层中存在该路径上的字符9表示的节点9时,则将该路径上的第8层的字符9表示的节点9的节点数据中的poi样本数量加1。

请参考图3,其示出了poi样本参与树结构聚类数据库的构建的一个效果示意图。

在图3中,301表示poi样本对应的geohash编码字符串kjb3dkp9在树结构聚类数据库中对应的路径上的相邻节点之间连接,g表示树结构聚类数据库的层。

根据字符k、j、b、3、d、k、p、9在geohash编码字符串kjb3dkp9中的次序,该路径上的节点k、节点j、节点b、节点3、节点d、节点k、节点p、节点9应分别处于树结构聚类数据库中的1-8层,路径上的相邻节点之间的关系为父子关系。

由于树结构聚类数据库中一个节点仅具有一个父节点,因此,geohash编码字符串kjb3dkp9在树结构聚类数据库中对应的路径是唯一的。从而,在树结构聚类数据库中每一层中包含同一字符表示的多个节点的情况下,可以准确地查找到在路径上的字符表示的节点。例如,对于树结构聚类数据库的第8层中包含多个字符9表示的节点,由于需要查找的节点9为kjb3dkp9在树结构聚类数据库中对应的路径上的节点,因此,准确地查找到该节点9,并且将该节点9的节点数据中的poi样本数量加1。

在聚类结中分别查找到在该路径上的位于第1层的节点k、该路径上的位于第2层的节点j、该路径上的位于第3层中的节点b、该路径上的位于第4层中节点3、该路径上的位于第5层中的节点d、该路径上的位于第6层中的节点k、该路径上的位于第7层中的节点p、该路径上的位于第8层中的节点9。将该路径上的位于第1层的节点k、第2层的节点j、第3层中的节点b、第4层中节点3、第5层中的节点d、第6层中的节点k、第7层中的节点p、第8层中的节点9的节点数据中的poi样本数量加1。

在本实施例的一些可选的实现方式中,确定对poi样本进行聚类所需的聚类精度在树结构聚类数据库中对应的层包括:采用geohash算法以预设编码长度对待查询的poi样本的地理位置对应的经度和纬度进行编码,得到待查询的poi样本对应的geohash编码字符串;确定geohash编码字符串中字符在树结构聚类数据库中对应的节点;在geohash编码字符串中确定poi样本聚类的聚类精度所需要的字符长度;在树结构聚类数据库中查询该geohash编码字符串中字符表示的节点,直到抵达与字符长度相对应的目标层。

步骤102,从目标层中选取用于聚类的节点,对节点对应的区域内的poi样本进行聚类,得到聚类结果。

在本实施例中,在通过步骤101确定对poi样本进行聚类所需的聚类精度在树结构聚类数据库中对应的层之后,可以对poi样本进行聚类所需的聚类精度在树结构聚类数据库中对应的目标层中选取用于聚类的节点,对节点对应的区域内的poi样本进行聚类,即对地理位置在选取的节点对应的区域内的poi样本进行聚类,得到聚类结果。

例如,当对poi样本进行聚类所需的聚类精度为geohash编码字符串包含的字符的数量为2时对应的误差即-630km-630km时,该聚类精度对应树结构聚类数据库的第2层,将树结构聚类数据库的第2层作为对poi样本进行聚类所需的聚类精度在树结构聚类数据库中对应的层。可以从树结构聚类数据库的第2层中选取用于聚类的节点,对地理位置在选取的节点对应的区域内的poi样本进行聚类,得到聚类结果。

请参考图4,其示出了对poi样本进行聚类的一个示意图。

在图4中,示出了最终用于聚类的节点401,g表示树结构聚类数据库的层,对poi样本进行聚类所需的聚类精度为geohash编码字符串包含的字符的数量为2时对应的误差即-630km-630km,该聚类精度对应树结构聚类数据库的第2层。

在对poi样本进行聚类时,从第2层中选取出节点h、节点m、节点n作为用于聚类的节点。节点h的节点数据中的poi样本数量为33个,即地理位置在节点h对应的区域即geohash编码字符串0h表示的区域内的poi样本的数量为33个。节点m的节点数据中的poi样本数量为20个,即地理位置在节点m对应的区域即geohash编码字符串9m表示的区域内的poi样本的数量为20个。节点n的节点数据中的poi样本数量为13个,即地理位置在节点n对应的区域内即geohash编码字符串9n表示的区域内的poi样本的数量为13个。

对地理位置在选取的节点h对应的区域内的poi样本进行聚类,可以得到节点h对应的聚类结果,节点h对应的聚类结果中包含33个poi样本。对地理位置在选取的节点m对应的区域内的poi样本进行聚类,可以得到节点m对应的聚类结果,节点m对应的聚类结果中包含20个poi样本。对地理位置在选取的节点n对应的区域内的poi样本进行聚类,可以得到节点n对应的聚类结果,节点n对应的聚类结果中包含13个poi样本。

聚类精度对应的聚类结果包括:节点h、节点m、节点n各自对应的聚类结果。

在本实施例的一些可选的实现方式中,当地理位置在选取的节点对应的区域内的poi样本数量小于数量阈值时,对地理位置在选取的节点对应的区域内的poi样本进行聚类,得到聚类精度对应的聚类结果;当地理位置在选取的节点对应的区域内的poi样本数量等于或大于数量阈值时,对地理位置在选取的节点的子节点对应的区域内的poi样本进行聚类,得到聚类精度对应的聚类结果。

请参考图5,其示出了对poi样本进行聚类的另一个示意图。

在图5中,示出了最终用于聚类的节点501,g表示树结构聚类数据库的层,对poi样本进行聚类所需的聚类精度为geohash编码字符串包含的字符的数量为2时对应的误差即-630km-630km,该聚类精度对应树结构聚类数据库的第2层。

在对poi样本进行聚类时,从第2层中选取节点h、节点m、节点n用于聚类的节点。节点h的节点数据中的poi样本数量为33个,节点m的节点数据中的poi样本数量为20个,节点n的节点数据中的poi样本数量为13个。

由于地理位置在节点h对应的区域内的poi样本的数量大于阈值,则可以对地理位置位于节点h的子节点2、5对应的区域内的poi样本进行聚类。对地理位置在节点2对应的区域内的poi样本进行聚类,可以得到节点2对应的聚类结果,节点2对应的聚类结果中包含18个poi样本。对地理位置在节点5对应的区域内的poi样本进行聚类,可以得到节点5对应的聚类结果,节点5对应的聚类结果中包含15个poi样本。

对地理位置在节点m对应的区域内的poi样本进行聚类,可以得到节点m对应的聚类结果,节点m对应的聚类结果中包含20个poi样本。对地理位置在节点n对应的区域内的poi样本进行聚类,可以得到节点n对应的聚类结果,节点n对应的聚类结果中包含13个poi样本。

对poi样本进行聚类之后,可以得到聚类精度对应的聚类结果,聚类精度对应的聚类结果包括:节点2对应的聚类结果、节点5对应的聚类结果、节点m对应的聚类结果、节点n对应的聚类结果。

本申请还提供了一种电子设备,该电子设备可以配置有一个或多个处理器;存储器,用于存储一个或多个程序,一个或多个程序中可以包含用以执行上述步骤101-102中描述的操作的指令。当一个或多个程序被一个或多个处理器执行时,使得一个或多个处理器执行上述步骤101-102中描述的操作。

本申请还提供了一种计算机可读介质,该计算机可读介质可以是电子设备上所包括的;也可以是单独存在,未装配入电子设备上。该计算机可读介质承载有一个或者多个程序,当一个或者多个程序被该服务器执行时,使得该电子设备:确定对poi样本进行聚类所需的聚类精度在树结构聚类数据库中对应的目标层;从目标层中选取用于聚类的节点,对节点对应的区域内的poi样本进行聚类,得到聚类结果。

需要说明的是,上述计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包括或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以为多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包括的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、rf等等,或者上述的任意合适的组合。

以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离本申请的构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1