您的位置:首页 > 其它

地图 点聚合

2015-03-25 16:08 507 查看
基于方格和距离结合的点聚合算法(详细)

原理:初始时没有任何已知聚合点,然后对每个点进行迭代,计算一个点的外包正方形,若此点的外包正方形与现有的聚合点的外包正方形不相交,则新建聚合点(区别于前面基于直接距离的算法,这里不是计算点与点间的距离,而是计算一个点的外包正方形,正方形的变长由用户指定或程序设置一个默认值), 若相交,则把该点聚合到该聚合点中,若点与多个已知的聚合点的外包正方形相交,则计算该点到到聚合点的距离,聚合到距离最近的聚合点中,如此循环,直到所有点都遍历完毕。每个缩放级别都重新遍历所有原始点要素。
此方法可以算是基于方格与基于距离的算法的一个结合算法。
优点:运算速度相对较快,每个原始点只需计算一次,可能会有点与点距离计算,聚合点较精确的反映了所包含的原始点要素的位置信息。
缺点:速度不如完全基于方格的速度快等。
使用此算法的在线地图:Google Maps。以下是Google给出的一个基于方格距离的点聚合示意图

步骤示例:

a) 默认输入的数组的顺序是如图7 – 基于方格距离的点聚合算法(原始点要素)所示的字母顺序。

b)初始计算,从A开始迭代,此时并没有任何聚合点,则在A的位置生成一个聚合点(设为A1),A1的位置与A相同。

c)迭代到B,如图8所示,由于B的外包正方形与已有聚合点A1的外包正方形相交,所以B应聚合到A1中,新聚合后的聚合点的位置依然保持在A1原来的位置(这主要是因为若采用A与B的质心会花费客户端较大的计算量,这在原始点要素数量较大时影响较大)。

d)迭代到C,由于C的外包正方形不与现有的聚合点A1相交(目前只有A1一个聚合点),因此C需要新建一个新的聚合点(设为C1)。

e)迭代到D,类似于B,D与A1聚合,聚合后依然为A1。

f)迭代到E,新的问题来了,E的外包正方形同时与A1和C1相交,这时需判断E到A1、C1的距离,并将E聚合到距离近的那个聚合点中,这里E到C1更近,于是E聚合到了C1中。

g)剩下的如此迭代,直至完毕。
http://wenku.baidu.com/link?url=vO7a7TQXUC_LWqpTJEhoM5SjpZHSCp9tNtDYn6tMhYOlUQ3emILq9Rev9UwPrX8lgbj9FJL9oqaX6FfwWhpY70kOSJ58Cdpbk0DQbBgvcoy
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  地图 点聚合 coreseek