地图中聚合点集的展示方法及装置与流程

文档序号:17476785发布日期:2019-04-20 06:10阅读:464来源:国知局
地图中聚合点集的展示方法及装置与流程

本发明实施例涉及地图展示技术领域,更具体地,涉及地图中聚合点集的展示方法及装置。



背景技术:

在地图上查询结果通常以标记点的形式展现,但是如果标记点较多,不仅会大大增加客户端的渲染时间,让客户端变得很卡,而且会让人产生密集恐惧症。为了解决这一问题,通常需要一种手段能在用户有限的可视区域范围内,利用最小的区域展示出最全面的信息。

聚合点集呈现是解决上述问题的常用手段,聚合点集呈现是指依据点数据的坐标信息,在地图上按照一定距离进行点聚合计算,落在范围内的点进行累计,再以标注的方式在地图上呈现统计出的聚合点集合,呈现每一个点集的位置和数量。

现有的某款知名地图软件采用的格网均分的方式进行点聚合分组,该地图软件呈现的效果并不符合自然分布,聚合点的大小和间距几乎看不出差别,显示效果并不理想。此外,现有技术常采用的arcgisjavascriptapi实现的显示效果也与该知名地图软件的显示效果类似,并且,两种方式都未实现点数据的获取过程的封装和优化,需要使用者自己事先获取点集,因此没法结合聚合分组过程实现缓存和效率优化。百度地图数据量较大的时候(超过5000)呈现就比较卡。arcgisjsapi内部的方法则使用起来较为不便,效率也有待优化。



技术实现要素:

本发明实施例提供一种克服上述问题或者至少部分地解决上述问题的地图中聚合点集的展示方法及装置。

第一个方面,本发明实施例提供一种地图中聚合点集的展示方法,包括:

若获知地图显示范围发生变化,则向数据库发送获取当前地图显示范围内所有标记点的id的请求;

接收当前地图显示范围内的所有标记点的id,并与缓存的历次变化的地图显示范围内的标记点的id进行比较;

若当前地图显示范围内新增标记点,则向所述数据库发送获取新增的标记点的坐标的请求;

接收并缓存所述新增的标记的坐标,遍历所述新增的标记点进行聚合点集计算,以更新变化前渲染结果,所述渲染结果包括:根据所述聚合点集的中心的坐标展示的聚合点集以及所述聚合点集包含的标记点的数量。

第二个方面,本发明实施例提供一种地图中聚合点集的展示装置,包括:

id获取模块,用于若获知地图显示范围发生变化,向数据库发送获取当前地图显示范围内所有标记点的id的请求;

id比较模块,用于接收当前地图显示范围内的所有标记点的id,并与缓存的历次变化的地图显示范围内的标记点的id进行比较;

坐标请求模块,用于若当前地图显示范围内新增标记点,则向所述数据库发送获取新增的标记点的坐标的请求;

渲染模块,用于接收并缓存所述新增的标记的坐标,遍历所述新增的标记点进行聚合点集计算,以更新变化前渲染结果,所述渲染结果包括:根据所述聚合点集的中心的坐标展示的聚合点集以及所述聚合点集包含的标记点的数量。

第三方面,本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第一方面所提供的方法的步骤。

第四方面,本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面所提供的方法的步骤。

本发明实施例提供的地图中聚合点集的展示方法及装置,通过从数据库中获取地图显示范围内的标记点的id,减少了内存的占用,并且通过比较当前地图显示范围内的标记点与历次变化的地图显示范围内的标记点,在增长标记点的个数较少时采用直接追加至已渲染的聚合点集,更新现有的聚合点集,能够节省大量的时间和处理量。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的地图中聚合点集的展示方法的流程示意图;

图2为本发明实施例提供的地图中聚合点集的展示装置的结构示意图;

图3为本发明实施例提供的电子设备的实体结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明实施例保护的范围。

为了克服现有技术的上述问题,本发明实施例提供了一种地图中聚合点集的展示方法,其发明构思为:在每次地图显示范围发生变化时,通过从数据库获取当前显示范围内所有标记点的id,并与变化前的地图显示范围内的标记点的id进行比较,若当前地图显示范围内存在新增或减少的标记点,且新增和减少的标记点的个数较少,则只需要借助变化前的渲染结果,对新增的标记点进行聚合点集计算,相比现有技术中每次地图显示范围变化均需要重新全量聚合点集计算和渲染绘制,本发明实施例的展示方法能够大幅降低了运算成本。

图1为本发明实施例提供的地图中聚合点集的展示方法的流程示意图,如图1所示,包括:

s101、若获知地图显示范围发生变化,则向数据库发送获取当前地图显示范围内所有标记点的id的请求。

具体地,本发明实施例的展示方法适用于在手机、平板电脑、计算机、pda等具有显示屏幕,并可展示地图的终端上运行,可以理解的是,以手机为例,当使用者在屏幕上滑动时,地图显示区域会发生平移,或者当使用者点击缩放按钮或者用预先设置的、代表对地图进行缩放的手势与屏幕交互时,地图显示区域会相应的进行缩放,本领域技术人员熟知判断地图显示范围发生变化的方式和方法,本发明实施例对此不作进一步的限定。

在本发明实施例中,地图上所有标记点的信息均存储在数据库中,而不需要预先存储在终端中,这样能够大大降低终端中内存的占用。在地图中,最常见的标记点就是地名,以地名为例,北京市可能有数万个标记点,包括学校、商场、医院、地铁站等等,当地图的显示范围为整个中国时,虽然在显示时不可能具体显示出北京市的所有标记点,常常只会显示一个标记点:北京,但在向数据库发送当前地图显示范围内所有标记点的id的请求时,数据库仍然会返回那些无法具体显示的标记点,即仍然会将北京市的数万个标记点的id返回至终端。标记点的id即标记点的唯一标识,通过设置id,能够有效地区分出不同的标记点。

s102、接收当前地图显示范围内的所有标记点的id,并与缓存的历次变化的地图显示范围内的标记点的id进行比较。

具体地,本发明实施例在每次接收到数据库返回的标记点的id时,都会进行缓存,需要注意的是,本发明实施例会保留历次数据库返回的标记点的id,以保证每次接收到新的标记点的id时可以有比较的对象。显然,随着展示次数的增多,缓存的标记点的id也在增多。本发明实施例通过将当前的标记点的id和历次变化的标记点的id进行比较,即可获知当前地图显示范围内相比历史上的显示范围多了哪些标记点、少了哪些标记点、增多了或者减少了多少标记点。

s103、若当前地图显示范围内新增标记点,则向所述数据库发送获取新增的标记点的坐标的请求。

地图显示范围发生变化通常有三种情况:平移、放大地图和缩小地图。在当前地图显示范围内新增标记点时,既可能是进行平移操作,也可能是缩小地图操作。本发明实施例在每次展示时,都会缓存当前地图显示范围内的所有标记点的坐标,因此,在当前地图显示范围内新增标记点时,只会向数据库发送获取新增的标记点的坐标的请求,这样就减少了与数据库进行交互所需的时间和内存。

本发明实施例通过对新增和减少的标记点的个数与第一预设阈值进行比较,可以获知地图显示范围变化的程度,通过设置第一预设阈值来判断新增标记点的增长程度,如果新增的标记点的个数小于第一预设阈值,表示当前地图显示的范围与之前显示的范围区别较小,因此可以将新增的标记点直接追加至当前已渲染的聚合点集中,直接更新现有的聚合点集。可以理解的是,第一预设阈值的取值可以通过经验或者多次试验获取,本发明实施例对第一阈值的大小、获取方法以及修正方法不做进一步的限定。

s104、接收并缓存所述新增的标记的坐标,遍历所述新增的标记点进行聚合点集计算,以更新变化前渲染结果,所述渲染结果包括:根据所述聚合点集的中心的坐标展示的聚合点集以及所述聚合点集包含的标记点的数量。

本发明实施例的展示方法通过从数据库中获取地图显示范围内的标记点的id,减少了内存的占用,并且通过比较当前地图显示范围内的标记点与缓存的历次变化的地图显示范围内的标记点,在增长和减少标记点的个数较少时采用直接追加至已渲染的聚合点集,更新现有的聚合点集,能够节省大量的时间和处理量。

在上述实施例的基础上,作为一种可选实施例,若当前地图显示范围发生变化的方式为平移,且新增的标记点的个数不小于第一预设阈值,则删除变化前渲染结果中的聚合点集;根据本地缓存的当前地图显示范围的标记点的坐标,遍历当前地图显示范围内的所有标记点重新进行聚合点集计算;若新增或减少的标记点个数小于第一预设阈值,则遍历新增标记点,对前一渲染结果的聚合点集进行更新,更新的内容包括聚合点集的中心坐标和数值。能够有效避免聚合点集重新计算的大量计算,从而提高渲染效率。

需要说明的是,若当前地图显示范围发生变化的方式为平移,且新增的标记点的个数不小于第一预设阈值,可以认为当前地图显示的范围与变化前的地图显示的范围具有较大区别。在这种情况下,本发明实施例会将变化前的渲染结果中的聚合点集清空,并重新进行点击聚合分组,重新渲染绘制。

在上述实施例的基础上,作为一种可选实施例,若当前地图显示范围发生变化的方式为缩小比例尺,则向所述数据库发送获取所述新增的标记点的坐标的请求,并删除变化前渲染结果中的聚合点集;接收并缓存所述新增的标记的坐标,遍历当前地图显示范围内的所有标记点重新进行聚合点集计算。

在上述实施例的基础上,作为一种可选实施例,若当前地图显示范围发生变化的方式为放大比例尺,则删除变化前渲染结果中的聚合点集,并遍历当前地图显示范围内的所有标记点重新进行聚合点集计算。

需要说明的是,当地图进行缩放时,由于比例尺发生了变化,势必引起地图分辨率的变化,因此为了渲染结果的正确性,需要将当前地图显示范围内所有标记点重新进行渲染。需要注意的是,如果是因为缩小比例尺导致的地图显示范围变大,势必触发新增标记点,这时候仍然需要向数据发送获取新增标记点的坐标的请求;但如果是因为比例尺放大导致的显示范围变小,由于本发明实施例会缓存之前标记点的坐标,若显示范围包含于最大缓存范围内,此时就不需要再向数据库发送获取坐标的请求,直接利用缓存标记点数据进行渲染,进一步提高了显示效率。

现有聚合点集的方式,例如格网均分方法聚合的结果就是各聚合点集成规则排布,每个聚合点集的大小一致,同时相邻聚合点集的间距也一致,显示效果很差,无法直观地分辩出不同聚合点集包含的标记点的多少。因此,为了克服上述问题,在上述各实施例的基础上,本发明实施例中聚合点集计算的方法在每次更新聚合点集时,根据聚合点集中各标记点的分布,更新聚合点集的中心。

对于任意一个新增的标记点,遍历聚合点集计算所述标记点与聚合点集的中心的距离,若所述距离不大于预设距离阈值,则将所述标记点划归至所述聚合点集,并更新所述聚合点集的中心坐标和标记点总数值;若遍历所有聚合点集未找到标记点归属的聚合点集,则将所述标记点作为新的聚合点集;

其中,更新所述聚合点集的中心坐标和标记点总数值,具体为:计算所述聚合点集中所有标记点的坐标的平均值,将所述平均值更新为所述聚合点集的中心,并对聚合点集的标记点的总数值进行累加。

在一个可选实施例中,对于遍历所述新增的标记点进行聚合点集计算来说,包括:对于任意一个新增的标记点,计算所述标记点与聚合点集的中心的距离,若所述距离不大于预设距离阈值,则将所述标记点划归至所述聚合点集,并更新所述聚合点集的中心;若遍历所有聚合点集未找到标记点归属的聚合点集,则将所述标记点作为新的聚合点集。

在一个可选实施例中,对于遍历所有标记点进行聚合点集计算来说,包括:对于任意一个标记点,计算所述标记点与聚合点集的中心的距离,若所述距离不大于预设距离阈值,则将所述标记点划归至所述聚合点集,并更新所述聚合点集的中心;若遍历所有聚合点集未找到标记点归属的聚合点集,则将所述标记点作为新的聚合点集。

由上述实施例可知,在获取标记点的id之后,还需要进一步获取标记点的坐标才能进行聚合计算,在本发明实施例中,每次渲染都会缓存标记点的坐标,对于存在新增标记点,显然终端还没有这些标记点的坐标,因此终端还需要向服务器发送获取这些标记点的坐标的请求。

在现有技术中,通常终端会一次性将获取标记点的坐标的请求一个数据请求的方式发送至数据库,显然,由于数据库接收的是一个数据请求,数据库也会在汇总到所需的所有标记点的坐标后发送一个回复,这样操作无论是请求数据包还是回复数据包所占用的内存都较大,很容易引发延迟的问题,甚至引发异常导致请求失败。因此,为了克服现有技术的上述问题,在上述各实施例的基础上,作为一种可选实施例,本发明实施例采用id分段同时异步请求的方式加快请求速度。具体地,上述id分段同时异步请求的方式,具体包括:

对新增的标记点进行分组,获得若干个标记点分组,同时向所述数据库发送多个数据请求,其中每个数据请求用于请求一个标记点分组中的标记点的坐标,通过异步算法,汇总每个数据请求的反馈结果,获得所述新增的标记点的坐标。

需要说明的是,由于本发明实施例会缓存上一次标记点的id和坐标,因此,只需要发送针对新增的标记点的坐标的请求,即地图范围内所有标记点的id与缓存的标记点的id的差集,避免了同一id的重复请求,将新增的标记点进行分组,并通过多个数据请求进行发送,能够减少请求数据的网络延迟,相应地,由于数据库在查询每个数据请求所请求的坐标时耗时可能不同,因此终端以异步算法汇总每个数据请求的反馈结果,获得所有新增的标记点的坐标。显然,如果是放大地图,即使在放大前的地图中由于部分标记点因为地图比例尺的原因并未显示出来,但由于本发明实施例每次缓存的是地图显示范围内所有的标记点(无论其是否显示或未显示),因此当放大地图时用上的还是已经缓存的数据,无须再向数据库发送获取坐标的请求,还可以进一步减少网络请求造成的渲染延时。

由于数据库中存储的是标记点的坐标是标记点的地理坐标,而在地图中显示时,标记点又以像素点的形式进行体现,因此,在上述各实施例的基础上,作为一种可选实施例,计算所述标记点与聚合点集的中心的距离,具体为:

根据标记点与聚合点集的中心的坐标,获得标记点与聚合点集的中心的地理距离;根据所述地理距离以及当前地图的分辨率获得标记点与聚合点集的中心的像素距离,将所述像素距离作为所述标记点与聚合点集的中心的距离。具体地,像素距离与地理距离有个简单的换算方式,分辨率=地图物理宽度/地图元素的像素宽度;像素距离=物理距离/分辨率。

现有技术中聚合点集的大小和间距几乎看不出差别,为了克服该缺陷,在上述各实施例的基础上,作为一种可选实施例,更新所述聚合点集的中心,具体为:计算所述聚合点集中所有标记点的坐标的平均值,将所述平均值更新为所述聚合点集的中心。

需要说明的是,本发明实施例中每一次加入一个标记点到聚合分组里面,聚合分组的坐标立即更新为最新的平均坐标,随着点的添加,聚合分组的中心点的坐标也在变化,中心点的坐标变化后,吸附的周边范围也发生变化,吸附的点影响着聚合分组的坐标,使聚合分组有向标记点较多的区域移动的趋势,最终实现了聚合点集动态变化的目的。

图2为本发明实施例提供的地图中聚合点集的展示装置的结构示意图,如图2所示,该展示装置包括:id获取模块201和id比较模块202,坐标请求模块203,渲染模块204,其中:

id获取模块201用于若获知地图显示范围发生变化,向数据库发送获取当前地图显示范围内所有标记点的id的请求。

具体地,在本发明实施例中,地图上所有标记点的信息均存储在数据库中,而不需要预先存储在展示装置中,这样能够大大降低展示装置中内存的占用。在地图中,最常见的标记点就是地名,以地名为例,北京市可能有数万个标记点,包括学校、商场、医院、地铁站等等,当地图的显示范围为整个中国时,虽然在显示时不可能具体显示出北京市的所有标记点,常常只会显示一个标记点:北京,但在向数据库发送当前地图显示范围内所有标记点的id的请求时,数据库仍然会返回那些无法具体显示的标记点,即仍然会将北京市的数万个标记点的id返回至展示装置。标记点的id即标记点的唯一标识,通过设置id,能够有效地区分出不同的标记点。

id比较模块202用于接收当前地图显示范围内的所有标记点的id,并与缓存的历次变化的地图显示范围内的标记点的id进行比较。

具体地,本发明实施例的id比较模块在每次接收到数据库返回的标记点的id时,都会进行缓存,需要注意的是,本发明实施例的id比较模块会保留历次数据库返回的标记点的id,以保证每次接收到新的标记点的id时可以有比较的对象。显然,随着展示次数的增多,缓存的标记点的id也在增多。本发明实施例通过将当前的标记点的id和历次变化的标记点的id进行比较,即可获知当前地图显示范围内相比历史上的显示范围多了哪些标记点、少了哪些标记点、增多了或者减少了多少标记点。

坐标请求模块203,用于若当前地图显示范围内新增标记点,则向所述数据库发送获取新增的标记点的坐标的请求。

地图显示范围发生变化通常有三种情况:平移、放大地图和缩小地图。在当前地图显示范围内新增标记点时,既可能是进行平移操作,也可能是缩小地图操作。本发明实施例在每次展示时,都会缓存当前地图显示范围内的所有标记点的坐标,因此,在当前地图显示范围内新增标记点时,只会向数据库发送获取新增的标记点的坐标的请求,这样就减少了与数据库进行交互所需的时间和内存。

本发明实施例通过对新增的标记点的个数与第一预设阈值进行比较,可以获知地图显示范围变化的程度,通过设置第一预设阈值来判断新增标记点的增长程度,如果新增的标记点的个数小于第一预设阈值,表示当前地图显示的范围与之前显示的范围区别较小,因此可以将新增的标记点直接追加至当前已渲染的聚合点集中,直接更新现有的聚合点集。可以理解的是,第一预设阈值的取值可以通过经验或者多次试验获取,本发明实施例对第一阈值的大小、获取方法以及修正方法不做进一步的限定。

渲染模块204,用于接收并缓存所述新增的标记的坐标,遍历所述新增的标记点进行聚合点集计算,以更新变化前渲染结果,所述渲染结果包括:根据所述聚合点集的中心的坐标展示的聚合点集以及所述聚合点集包含的标记点的数量。

本发明实施例提供的展示装置,具体执行上述各展示方法实施例流程,具体请详见上述各展示方法实施例的内容,在此不再赘述。本发明实施例提供的展示装置通过从数据库中获取地图显示范围内的标记点的id,减少了内存的占用,并且通过比较当前地图显示范围内的标记点与缓存的历次变化的地图显示范围内的标记点,在增长标记点的个数较少时采用直接追加至已渲染的聚合点集,更新现有的聚合点集,能够节省大量的时间和处理量。

图3为本发明实施例提供的电子设备的实体结构示意图,如图3所示,该电子设备可以包括:处理器(processor)310、通信接口(communicationsinterface)320、存储器(memory)330和通信总线340,其中,处理器310,通信接口320,存储器t30通过通信总线340完成相互间的通信。处理器310可以调用存储在存储器330上并可在处理器310上运行的计算机程序,以执行上述各实施例提供的展示方法,例如包括:若获知地图显示范围发生变化,则向数据库发送获取当前地图显示范围内所有标记点的id的请求;接收当前地图显示范围内的所有标记点的id,并与缓存的历次变化的地图显示范围内的标记点的id进行比较;若当前地图显示范围内新增标记点,则向所述数据库发送获取新增的标记点的坐标的请求;接收并缓存所述新增的标记的坐标,遍历所述新增的标记点进行聚合点集计算,以更新变化前渲染结果,所述渲染结果包括:根据所述聚合点集的中心的坐标展示的聚合点集以及所述聚合点集包含的标记点的数量。

此外,上述的存储器330中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的展示方法,例如包括:若获知地图显示范围发生变化,则向数据库发送获取当前地图显示范围内所有标记点的id的请求;接收当前地图显示范围内的所有标记点的id,并与缓存的历次变化的地图显示范围内的标记点的id进行比较;向所述数据库发送获取新增的标记点的坐标的请求;若当前地图显示范围内新增标记点,则接收并缓存所述新增的标记的坐标,遍历所述新增的标记点进行聚合点集计算,以更新变化前渲染结果,所述渲染结果包括:根据所述聚合点集的中心的坐标展示的聚合点集以及所述聚合点集包含的标记点的数量。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

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