发明内容
基于此,为解决上述提到的传统技术中基于位置的服务(LBS)应用中对附近满足预设条件的点的查找过程中,存在的计算量较大、查找效率不足的技术问题,本发明提供了一种基于坐标的附近点查找方法。
一种基于坐标的附近点查找方法,包括如下步骤:
接收信息点查找请求,所述信息点查找请求携带基准点坐标和匹配关键字;
获取所述基准点坐标所属的网格单元,所述网格单元是根据地图的坐标范围将地图按照预设的网格大小进行网格化划分得到的,所述网格单元与其在所述地图中的覆盖范围内的信息点对应;
获取与所述基准点坐标所属的网格单元相邻的第一网格单元,将所述第一网格单元添加到目标网格单元集合中,所述目标网格单元集合初始为空;
在所述目标网格单元集合包含的网格单元中查找属性与所述匹配关键字匹配的信息点;
将所述查找到的信息点添加到目标点集合中;
获取与所述目标网格单元相邻的且未被查找过的第二网格单元,清空所述目标网格单元集合,将所述第二网格单元添加到目标网格单元集合中;
执行所述在所述目标网格单元集合包含的网格单元中查找属性与所述匹配关键字匹配的信息点的步骤。
可选的,所述获取与所述基准点坐标所属的网格单元相邻的第一网格单元,将所述第一网格单元添加到目标网格单元集合中,所述目标网格单元集合初始为空的步骤之前还包括:在所述基准点坐标所属的网格单元中查找属性与所述匹配关键字匹配的信息点;将所述查找到的信息点添加到所述目标点集合中。
可选的,所述将所述查找到的信息点添加到目标点集合中的步骤之前还包括:获取所述目标点集合中包含的所述信息点的数量,判断获取到的所述信息点的数量是否满足阈值,若是,则返回所述目标点集合。
可选的,所述将查找到的信息点添加到目标点集合中的步骤还包括:将所述查找到的信息点逐一添加到目标点集合中。
可选的,所述接收信息点查找请求的步骤之前还包括:根据所述地图的坐标范围将所述地图按照预设的网格大小划分成至少2个网格单元,所述网格单元的形状为正方形、矩形、平行四边形、正六边形或三角形。
可选的,所述根据所述地图的坐标范围将所述地图按照预设的网格大小划分成至少2个网格单元的步骤之前还包括:将地图划分成不同区域,在不同区域中分别执行所述根据地图的坐标范围将地图按照预设的网格大小划分成若干个网格单元的步骤。
此外,为解决上述提到的传统技术中基于位置的服务(LBS)应用中对附近满足预设条件的点的查找过程中,存在的计算量较大、查找效率不足的技术问题,本发明还提供了一种基于坐标的附近点查找装置。
一种基于坐标的附近点查找装置,包括:
查找请求接收模块,用于接收信息点查找请求,所述信息点查找请求携带基准点坐标和匹配关键字;
网格单元获取模块,用于获取所述基准点坐标所属的网格单元,所述网格单元是根据地图的坐标范围将地图按照预设的网格大小进行网格化划分得到的,所述网格单元与其在所述地图中的覆盖范围内的信息点对应;
第一网格获取模块,用于获取与所述基准点坐标所属的网格单元相邻的第一网格单元,将所述第一网格单元添加到目标网格单元集合中,所述目标网格单元集合初始为空;
第一信息点查找模块,用于在所述目标网格单元集合包含的网格单元中查找属性与所述匹配关键字匹配的信息点;
信息点添加模块,用于将所述查找到的信息点添加到目标点集合中;
第二网格获取模块,用于获取与所述目标网格单元相邻的且未被查找过的第二网格单元,清空所述目标网格单元集合,将所述第二网格单元添加到目标网格单元集合中;
所述第二网格获取模块还用于:调用所述第一信息点查找模块。
可选的,该装置还包括第二信息点查找模块,用于:在所述基准点坐标所属的网格单元中查找属性与所述匹配关键字匹配的信息点;将查找到的信息点添加到目标点集合中。
可选的,该装置还包括数量判断模块,用于获取所述目标点集合中包含的所述信息点的数量,判断获取到的所述信息点的数量是否满足阈值,若是,则返回所述目标点集合。
可选的,该所述信息点添加模块还用于将查找到的信息点逐一添加到目标点集合中。
可选的,该装置还包括网格单元划分模块,用于根据所述地图的坐标范围将所述地图按照预设的网格大小划分成至少2个网格单元,所述网格单元的形状为正方形、矩形、平行四边形、正六边形或三角形。
可选的,该装置还包括地图区域划分模块,用于将地图划分成不同区域,在不同区域中分别执行所述根据地图的坐标范围将地图按照预设的网格大小划分成若干个网格单元。
实施本发明实施例,将具有如下有益效果:
采用上述基于坐标的附近点查找方法及装置之后,在基于位置的服务应用中,地图被划分成若干个网格单元,且每个网格单元与其覆盖的地图上的信息点对应。在地图中对附近满足预设条件的点进行查找时,首先在与基准点所属的网格单元中进行查找,若查找的数量或者范围仍不满足预设值时,再进一步地在与已查找过的网格单元相邻的其他网格单元中查找,直至查找数量或者范围满足预设值。也就是说,在对附近满足预设条件的点进行查找时,从离基准点最近的点开始查找,然后扩散至离基准点较远的点,直至结束查找过程。这样的逐层的查找方式,避免了在查找之前就要确定查找坐标范围,从而避免了因无法确定查找范围带来的重复查找,即对同一数据的只进行一次匹配或计算,而不需要对降低了查找过程中的计算量,提高了基于位置的服务中的查找效率。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为解决上述提到的传统技术中基于位置的服务(LBS)应用中对附近满足预设条件的点的查找过程中,存在的计算量较大、查找效率不足的技术问题,在一个实施例中,特提出了一种基于坐标的附近点查找方法,该方法的执行可依赖于计算机程序,该计算机程序可以是桌面地图应用、网页地图应用或手机地图应用等基于位置的服务(LBS)应用程序,也可以是其他基于二维形态下的数据查找的计算机程序。该计算机程序可运行于冯诺依曼体系的计算机系统之上。需要说明的是,该计算机程序即可以运行于终端,也可以是运行于服务器,该计算机系统可以是智能手机、平板电脑或个人电脑等计算机设备。该计算机系统可以是运行于智能手机、平板电脑、笔记本电脑或者个人电脑等计算机设备。
具体的,如图1所示,该基于坐标的附近点查找方法包括如下步骤:
步骤S102:接收信息点查找请求,所述信息点查找请求携带基准点坐标和匹配关键字。
接收用户在终端上对应的LBS应用中的输入的信息点查找请求,所谓信息点(英语:pointofinformation,简称:POI)即为地图上的某个地标、景点,用以标示出该地所代表的政府部门,加油站、百货公司、超市、餐厅、酒店、便利商店、医院等商业机构,公园、公共厕所等旅游景点,古迹名胜,各式车站、停车场、超速照相机、限速标识等交通设施,信息点也可被称为兴趣点。
在用户输入的信息点查找请求中携带了具体要查找的内容,例如查找世界之窗南门附近100个5星好评的餐厅,则地点“世界之窗南门”的地理坐标即为信息查找请求中包含的基准点坐标,“5星好评”、“餐厅”即为信息查找请求中包含的匹配关键字。即查找到的信息点需要与关键字:“5星好评”、“餐厅”匹配,且需要在“世界之窗南门”的地理坐标附近,且需要查找100个满足上述条件的信息点。
例如,在一个运行于智能手机的地图APP中,用户在信息查找页面中输入了查找“我的位置”附近10个粤菜馆的查找请求,即相当于向服务器发送了一个基于位置的服务的请求,在该请求中,其基准点即为该智能手机所处的位置,并且,该位置的获取可以通过智能手机的GPS或者通过无线网络等获取当前的GPS信息,获取当前所处的位置的地理坐标,该坐标即为信息点查找请求包含的基准点坐标,“粤菜馆”即为信息查找请求中包含的匹配关键字。
步骤S104:获取所述基准点坐标所属的网格单元,所述网格单元是根据地图的坐标范围将地图按照预设的网格大小进行网格化划分得到的,所述网格单元与其在所述地图中的覆盖范围内的信息点对应。
在本实施例中,在地图数据的存储过程中,首先要将地图进行网格化,即按照一定的规则将地图划分成多个网格单元,根据每个网格单元所覆盖的范围,建立地图上的每个信息点与覆盖这些信息点的网格单元之间的映射关系,所以,每一个信息点都存在与其对应的网格单元,并且根据地图上任一点的坐标都可以获知其所属的网格单元。例如,根据信息点查找请求中包含的基准点坐标,可以获取该基准点坐标所属的网格单元,也可以获取该网格单元与其他网格单元之间的位置关系,例如,两个网格单元之间是否是相邻的。
可选的,在本实施例中,在地图数据的存储过程中,可以根据所述地图的坐标范围将所述地图按照预设的网格大小划分成至少2个网格单元,所述网格单元的形状为正方形、矩形、平行四边形、正六边形或三角形。
具体的,地图对应的是一个二维平面,且平面上的每一个点都有其对应的坐标,例如该坐标可以为经纬度坐标。根据地图上每一个点的坐标可以确定其坐标的最大值、最小值,从而确定地图的坐标范围。按照预设的规则和预设的网格大小将地图进行网格化,即将地图区域划分成多个网格单元,并对每个网格单元进行编号。
如图2所示,图2展示了一个地图的网格划分的示意图。在图2给出的展示页面中的地图,被等距的划分成了9个正方形网格单元,并且,给出了对应的网格编号,分别为X0Y0、X1Y0等。
需要说明的是,在上述的网格划分中,网格大小和形状可以多样化,例如可以是如图2中给出的相同大小的正方形网格单元。在另一个实施例中,网格单元的形状还可以是矩形行、平行四边形、正六边形或三角形,只要是能平铺整个平面的图形均可以作为划分的网格单元形状。
在一个实施例中,在同一个地图中,所有网格单元的大小还可以是不相同的。如图3所示,图3展示了在一个地图应用场景中,不等距的矩形网格单元划分的示意图。在图3展示的应用场景中,展示页面中的地图被划分成了大小不一致的20个网格单元,并给出了相应的编号。
需要说明的是,在上述的地图的网格化过程中,所有的网格单元是根据某一个原则进行划分得到的,在其他实施例中,还可以根据具体情况有多个划分规则。
例如,将地图划分成不同区域,在不同区域中分别执行所述根据地图的坐标范围将地图按照预设的网格大小划分成若干个网格单元的步骤。具体的,可以根据地图本身的级别的区域划分,如,在深圳市的地图中,所有的区域又可以被分成多个不同的行政区域,在每个行政区域内分别将该区域内的地图进行网格划分,然后将所有区域的网格划分合并,构成整个深圳市的地图的网格单元划分的最终结果。并且,不同的行政区域下地图的网格单元的形状和大小可以是一致的,也可以是不一致的,可以根据该区域内的信息点的分布进行选择。
进一步地,在地图的网格化的过程中,还可以在已经存储的第一网格单元划分结果下,继续进行进一步细化的第二网格单元划分,并且也存储第二网格单元划分的结果。也就是说,对于同一地图,存在两个网格单元划分,并且,二者存在互相包含关系。
需要说明的,对于同一个地图的至少两个网格单元划分,还可以是互相没有包含关系的多个网格单元划分。在存在多个网格单元划分的情况下,具体选择哪一种网格单元划分进行后续的信息点查找,可以根据具体的情况来选择。例如,在查找的信息点数量大、范围广的时候,可以选择大规格的网格单元划分,在查找的范围较小的情况下,选择小规格的网格单元划分来进行查找,即在获取所述基准点坐标所属的网格单元的过程中进行判断。
步骤S106:获取与所述基准点坐标所属的网格单元相邻的第一网格单元,将所述第一网格单元添加到目标网格单元集合中,所述目标网格单元集合初始为空。
步骤S108:在所述目标网格单元集合包含的网格单元中查找属性与所述匹配关键字匹配的信息点。
步骤S110:将所述查找到的信息点添加到目标点集合中。
步骤S112:获取与所述目标网格单元相邻的且未被查找过的第二网格单元,清空所述目标网格单元集合,将所述第二网格单元添加到目标网格单元集合中。
在步骤S104中获取到所述基准点坐标所属的网格单元之后,首先在与该基准点坐标所属的网格单元相邻的网格单元中查找与所述匹配关键字匹配的信息点。具体来讲就是,根据基准点坐标所属的网格单元编号,获取与其相邻的网格单元的编号,从而可以获知是哪些网格单元与该基准点坐标所属的网格单元是相邻的。将这些相邻的网格单元作为第一网格,添加到目标网格单元集合中去,在该目标网格单元集合中查找属性与所述匹配关键字匹配的信息点,即查找目标点。
地图所包含的每一个信息点,均有其对应的属性数据,在地图数据中,存在这些信息点与其对应的属性数据之间的映射关系,在已知其信息点的信息时,可以活着其对应的属性信息。如,信息点的名称与信息点的属性数据之间存在一一对应的关系。例如,地点“深圳威尼斯酒店”对应的属性数据可以包括:“经纬度坐标:东经113.984412°,北纬22.543257°”、“类型:酒店”、“酒店星级:五星级”、“地址:深圳南山区华侨城深南大道9026号”、“用户评价:5.0分”以及“酒店电话:(0755)26936888”等属性项信息。
在步骤S108:在所述目标网格单元集合包含的网格单元中查找属性与所述匹配关键字匹配的信息点中,根据信息点的属性数据,在目标网格单元集合包含的所有网格单元中的所有信息点中,查找其对应的属性项信息与匹配关键字是匹配的信息点。例如,匹配关键字为“5星级”、“酒店”时,在目标网格单元中查找类型与关键字“酒店”是匹配的,且酒店星级与“5星级”是匹配的信息点。需要说明的是,判断属性与匹配关键字是否是匹配的过程中,匹配的方式可以有多种,例如,二者相同即被认定为匹配,再例如,信息点的属性值在匹配关键字给出的阈值范围内即被认定为匹配,再例如,信息点的属性值大于或等于匹配关键字给出的数值时即被认定为匹配。
在步骤S108中查找到其属性与所述匹配关键字匹配的信息点之后,执行步骤S110:将查找到的信息点添加到目标点集合中。所谓目标点集合为即为查找结果的集合,可以在查找结束后以列表形式展示该集合中的元素。
具体的,每查找到一个其属性与所述匹配关键字匹配的信息点之后,就将该信息点添加到目标点集合中去,即上述目标点的添加方式为逐一添加。在其他实施例中,将查找到的信息点添加到目标点集合中去的添加方式还可以为成批添加,例如,在一次查找中,将目标网格单元中查找到的所有结果一次性的添加到目标点集合中。
可选的,在将查找到的信息点添加到目标点集合中的步骤之前,还包括:获取所述目标点集合中包含的所述信息点的数量,判断获取到的所述信息点的数量是否满足阈值,若是,则返回所述目标点集合,若否,则执行将查找到的信息点添加到目标点集合中的步骤。
在信息点查找请求中,携带的信息还可能包括查找的数量,即查找数量的阈值,需要说明的是,查找数量的阈值也是匹配关键字的一种。例如,在一个基于位置的服务应用中,用户发起的请求为查找世界之窗南门附近100个5星好评的餐厅,输入的信息点查找请求中包含查找数量的阈值“100”,即最终的获取结果应该是排在属性与匹配关键字匹配的信息点列表中的前100个。
在将查找到的信息点添加到目标点集合中的步骤中的添加方式为逐一添加时,在每次添加之前均进行一次判断,判断在目标点集合中的信息点的数量是否满足阈值,只有在其数量还不满足阈值时才将查找结果添加到该目标点结合中去。
具体的操作为:获取目标点集合中包含的所述信息点的数量,判断获取到的信息点的数量是否满足阈值;若是,则返回目标点集合,结束查找过程;若否,则将查找到的信息点添加到目标点集合中。
需要说明的是,在步骤将查找到的信息点添加到目标点集合中的添加方式为成批次添加时,为避免添加的信息点数量超过阈值,则可以在每次添加前进行一次判断。
具体的,获取目标点集合中包含的所述信息点的数量,判断获取到的信息点的数量是否满足阈值,若是,则返回目标点集合,结束查找过程。若获取到的信息点的数量不满足阈值,则获取需要查找的信息点的剩余量,该剩余量等于阈值与获取到的目标点集合中的信息点数量的差值;然后获取此次添加操作中的查找到的信息点数量,判断获取到的此次添加操作中的查找到的信息点数量是否小于或等于上述差值,若是,则执行步骤将查找到的信息点添加到目标点集合中;若否,则将此次查找到的信息点进行排序,获取序列中排在前面的若干个信息点,这若干个信息点的数量等于上述差值。
需要说明的是,在上述将信息点进行排序的过程中,排序的规则是根据查找数量的阈值的设置来定的,例如,在查找世界之窗南门附近100个5星好评的餐厅时,阈值100是根据信息点所在的位置与“世界之窗南门”之间的距离决定的,所在,其排序的规则是根据信息点所在的位置与“世界之窗南门”之间的距离远近制定的,距离越近,在序列中的位置越靠前。
因为在基准点坐标所属的网格单元中,在基准点坐标所属的网格单元中,也可能存在属性与匹配关键字是匹配的信息点,所以,在与基准点坐标所属的网格单元相邻的网格单元中查找与所述匹配关键字匹配的信息点的步骤之前,可选的步骤包括有:在基准点坐标所属的网格单元相邻的网格单元中查找与所述匹配关键字匹配的信息点。
具体来讲,就是,在基准点坐标所属的网格单元中查找属性与所述匹配关键字匹配的信息点,然后将查找到的信息点添加到目标点集合中。
步骤S112:获取与所述目标网格单元相邻的且未被查找过的第二网格单元,清空所述目标网格单元集合,将所述第二网格单元添加到目标网格单元集合中。
具体的,在步骤S106-S110中,在与所述基准点坐标所属的网格单元相邻的第一网格单元所在的目标网格单元集合中查找信息点之后,进一步的在与已经查找过的网格单元相邻的网格单元中继续查找信息点,直至满足查找终止条件。
需要说明的是,查找终止条件是根据信息点查找请求设定的。例如,与基于位置的服务请求对应的信息点查找请求为查找世界之窗南门附近100个5星好评的餐厅时,查找终止条件为目标点集合中的信息点数量大于或等于100。再例如,信息点查找请求为查找世界之窗南门附近1000米内的5星好评餐厅时,查找终止条件为信息点与基准点“世界之窗南门”的距离大于1000米,因为在信息点与基准点的距离大于1000米时,该信息点不在目标信息点的范围之内,不应该被添加到目标点集合中,则应该终止上述查找过程,跳出循环,结束查找,返回目标点集合。
具体的循环过程则可如图4所示,图4展示了一种基于坐标的附近点查找方法的循环过程的示意图,在该循环过程中,需要先设置目标点集合为空集{},然后执行如下步骤(需要说明的是,该循环步骤的执行可执行于基于位置的服务应用中关于附近信息点的查找过程中):
步骤S202:获取与所述目标网格单元相邻的且未被查找过的第二网格单元,清空所述目标网格单元集合,将所述第二网格单元添加到目标网格单元集合中。
步骤S204:在所述目标网格单元集合包含的网格单元中查找属性与所述匹配关键字匹配的信息点。
步骤S206:将查找到的信息点添加到目标点集合中。
步骤S208:判断是否满足查找终止条件,若是,则执行步骤S210:返回目标点集合;若否,则执行步骤S202。
经过上述步骤S202至步骤S208的循环过程之后,最终返回的目标点集合为满足用户在终端上输入的信息点查找请求的所有信息点的集合。
如图5所示,图5展示了一个基于位置的服务中对网格单元的循环查找过程的示意图。如图5所示,点A表示基准点所在的位置,在步骤S106-S110中查找了编号“1”的区域内的网格单元下的信息点,然后在上述循环过程中循环的查找编号“2”的区域内的网格单元下的信息点,再查找编号“3”的区域内的网格单元下的信息点,以此类推,直至满足信息点查找的查找终止条件才跳出循环,返回目标点集合。
为解决上述提到的传统技术中地图应用中对附近满足预设条件的点的查找过程中,存在的计算量较大、查找效率不足的技术问题,在另一个实施例中,如图6所示,还提供了一种基于坐标的附近点查找装置,包括查找请求接收模块102、网格单元获取模块104、第一网格获取模块106、第一信息点查找模块108、信息点添加模块110以及第二网格获取模块112,其中:
查找请求接收模块102,用于接收信息点查找请求,所述信息点查找请求携带基准点坐标和匹配关键字;
网格单元获取模块104,用于获取所述基准点坐标所属的网格单元,所述网格单元是根据地图的坐标范围将地图按照预设的网格大小进行网格化划分得到的,所述网格单元与其在所述地图中的覆盖范围内的信息点对应;
第一网格获取模块106,用于获取与所述基准点坐标所属的网格单元相邻的第一网格单元,将所述第一网格单元添加到目标网格单元集合中,所述目标网格单元集合初始为空;
第一信息点查找模块108,用于在所述目标网格单元集合包含的网格单元中查找属性与所述匹配关键字匹配的信息点;
信息点添加模块110,用于将查找到的信息点添加到目标点集合中;
第二网格获取模块112,用于获取与所述目标网格单元相邻的且未被查找过的第二网格单元,清空所述目标网格单元集合,将所述第二网格单元添加到目标网格单元集合中;
第二网格获取模块112还用于:调用所述第一信息点查找模块108。
可选的,该基于坐标的附近点查找装置还包括第二信息点查找模块114,用于在所述基准点坐标所属的网格单元中查找属性与所述匹配关键字匹配的信息点;将查找到的信息点添加到目标点集合中。
可选的,该基于坐标的附近点查找装置还包括数量判断模块116,用于获取所述目标点集合中包含的所述信息点的数量,判断获取到的所述信息点的数量是否满足阈值,若是,则返回所述目标点集合。
可选的,所述信息点添加模块110还用于将查找到的信息点逐一添加到目标点集合中。
可选的,该基于坐标的附近点查找装置还包括网格单元划分模块118,用于根据所述地图的坐标范围将所述地图按照预设的网格大小划分成至少2个网格单元,所述网格单元的形状为正方形、矩形、平行四边形、正六边形或三角形。
可选的,该基于坐标的附近点查找装置还包括地图区域划分模块120,用于将地图划分成不同区域,在不同区域中分别执行所述根据地图的坐标范围将地图按照预设的网格大小划分成若干个网格单元。
实施本发明实施例,将具有如下有益效果:
采用上述基于坐标的附近点查找方法及装置之后,在基于位置的服务应用中,地图被划分成若干个网格单元,且每个网格单元与其覆盖的地图上的信息点对应。在地图中对附近满足预设条件的点进行查找时,首先在与基准点所属的网格单元中进行查找,若查找的数量或者范围仍不满足预设值时,再进一步地在与已查找过的网格单元相邻的其他网格单元中查找,直至查找数量或者范围满足预设值。也就是说,在对附近满足预设条件的点进行查找时,从离基准点最近的点开始查找,然后扩散至离基准点较远的点,直至结束查找过程。这样的逐层的查找方式,避免了在查找之前就要确定查找坐标范围,从而避免了因无法确定查找范围带来的重复查找,即对同一数据的只进行一次匹配或计算,而不需要对降低了查找过程中的计算量,提高了基于位置的服务中的查找效率。
以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。