地图兴趣点聚合算法的探索与实践

本文探讨了地图兴趣点(POI)聚合算法,包括kmeans、直接网格算法、网格质心合并算法、网格距离算法和四叉树算法。通过对比不同算法的性能和效果,提出了一种结合四叉树的点聚合方案,优化了点的查找和聚合效率,以应对大比例尺和小比例尺下POI的展示需求。同时,文章介绍了基于K-D树的快速查找能力,以及针对不同数据量和聚合点数量的使用建议。
摘要由CSDN通过智能技术生成

一、导读

在实现基于地图的业务时,当地图上需要展示的兴趣点(POI)过多时,一般会基于图面效果和渲染性能的考虑,在大比例尺展示完整的业务数据,而在小比例尺展示聚合态数据。在处理不同数量级、不同分布形态的POI时,如何通过算法取得更加合理的聚合效果,同时既能支持离线的预处理聚合,也能较好的满足实时聚合的性能要求是本文主要讨论的内容。

注:兴趣点(Point of Interest,通常缩写成POI)是指电子地图上的某个地标、景点,用以标示出该地所代表的政府机关、商业机构(加油站、超市、餐厅、酒店等)、风景名胜、公共厕所、交通设施等处所。

本文通过对现有聚合算法进行预研,并结合实际业务对其进行改进,构建了一套能够满足多种业务需求的数据聚合方案。其中包含多种针对不同业务场景、不同数量级的POI聚合算法,并将聚合算法的配置进行了抽象,实现了聚合效果好,性能高且使用方便的聚合算法库,目前已应用到离线聚合和线上实时聚合的各个业务场景中。

二、点聚合算法比较

本节介绍目前使用较多的点聚合算法,并对不同点聚合算法的性能和聚合效果进行横向对比。针对不同的场景给出了参考使用的点聚合算法。在此基础上构建了一套相对通用的点聚合算法工具,使用者可以根据自身业务的特点,通过一定的配置来自定义具体使用的算法、策略和参数等等。

2.1 点聚合算法:

这里对使用较多的点聚合方案做简单介绍。

2.1.1 kmeans算法

kmeans算法主要通过初始指定k个聚类质心,而后按照“距离”来聚拢“相近”的数据点,而后重新计算新的质心,以此往复。不断迭代计算k个聚类点的质心,最终回归到k个聚类结果中,主要有以下两个缺点:

  • 性能, kmeans是计算密集型算法,模型需要迭代很多次才能够完善,且大量的距离计算比较消耗cpu。

  • 效果,kmeans不能解决重叠覆盖问题(算法设计指标里边没有对覆盖问题的评估指标)。

2.1.2 直接网格算法(Grid-based Clustering)

将地图划分为若干个网格,将落在对应网格中的点聚合在小网格的中心点。每个小网格只显示一个中心点,值为网格内的点数量。具体计算公式如下:

  • 优点,运算速度快,不涉及两个点之间的距离计算,只有点是否处在网格内的一次性计算就能拿到结果。

  • 缺点,如下图示,明明相近的两个点,因为划分在了不同的网格,而被迫分开计算在不同的网格中心。同时网格的中心,不一定就是网格内点的聚类中心,不能真实地反映聚类的中心点。

   

   

2.1.3 网格质心合并算法

与2.1.2方法基本一致,不同点在于,算法在将点划分到不同的网格中以后,会对每个网格的质心重新计算,得到更精确的聚类中心点。此外,还对经过质心计算的网格聚类中心点,进行了合并。(如果不进行合并,可能导致不同网格质心相近,造成覆盖)。网格质心的合并算法以一个网格质心为中心,画一个圆圈(或方格),将在这个范围内的网格质心都进行合并。圆圈或者方格的覆盖范围,可以作为配置来调整。

  • 优点,运算速度较快(计算质心和合并质心不会带来特别大的计算量)

  • 缺点,增加了计算量,同时也存在一定的误差,网格的划分,依旧可能会将原本聚集的点,强制分离开。

2.1.4 网格距离算法(Grid-Distance-based Clustering)

初始时没有任何已知聚合点,然后对每个点进行迭代,计算一个点的外包正方形,若此点的外包正方形与现有的聚合点的外包正方形不相交,则新建聚合点(这里不是计算点与点间的距离,而是计算一个点的外包正方形,正方形的边长由用户指定或程序设置一个默认值),若相交,则把该点聚合到该聚合点中,若点与多个已知的聚合点的外包正方形相交,则计算该点到到聚合点的距离,聚合到距离最近的聚合点中,如此循环,直到所有点都遍历完毕。

  • 优点,运算速度相对较快,每个原始点只需计算一次,可能会有点与点距离计算,聚合点较精确的反映了所包含的原始点要素的位置信息。

  • 缺点,速度不如完全基于网格的速度快等,同时各个点迭代顺序不同导致最终结果不同。因此涉及到制定迭代顺序的问题。同时聚类的中心点,是第一个加入该类的点的位置,并不能够代表整个聚类的中心位置,存在一定的不准确性。

       

       

2.1.5 四叉树算法(提供快速查找POI点的能力)+网格聚合算法(提供聚合POI点的具体策略)

首先明确,四叉树算法本身不提供数据聚合的能力,它的存在是为了配合之前的网格点聚合算法,提供快速查找到某一个网格下的所有POI数据的能力。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值