在线地图的点聚合算法及现状Word格式文档下载.docx
- 文档编号:15817499
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:12
- 大小:22.86KB
在线地图的点聚合算法及现状Word格式文档下载.docx
《在线地图的点聚合算法及现状Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《在线地图的点聚合算法及现状Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
4)基于距离和最少点数量限制的点聚合算法12
5)其他的可用于在线地图点聚合的算法14
三、在线地图点聚合功能的实现情况14
Openlayers14
GoogleMaps15
XX地图16
高德地图17
ESRI18
腾讯地图(原搜索地图)19
天地图20
四、小结20
参考文献21
一、
概述
地图综合所要解决的问题是把一个空间目标集合按照专题内容转换为一个最能代表该集合主要空间特征的更抽象的空间目标集合,并符号化该抽象后的空间目标集合,以最有效的方式传输地理空间知识。
点聚合(pointcluster),或又叫点聚类,是地图综合的其中一种方法,主要解决地图中点要素很多时候的表示困难的问题。
点聚合可以用少量的点或图标来表示地图中的所有点,让地图显示更清晰明朗。
如图1所示。
图1–在线地图的点聚合示意图
3)本文关注的重点
本文主要关注二维在线电子地图中点的聚合显示所用到的算法和目前的在线地图对点聚合显示的支持情况。
电子地图中,通常会遇到在某个地区包含成千上万个点要素的情况,若同时加载显示在电子地图中,会显得很乱、覆盖地图底图,也会占用大量系统资源,甚至引发浏览器的崩溃、卡顿,极大的影响用户体验,因此点聚合显示是电子地图十分需要的一项功能。
目前的常见在线地图(或其API)是否支持点聚合?
若支持点聚合的算法是什么?
是一个值得关注的问题。
本文尝试对这两个问题进行解答。
二、在线地图点聚合的算法
特点
a)数据相对简单,只有点要素,点没有形状变化,因此没有形状对聚合影响。
b)没有评价聚合精确度的唯一指标,(不考虑运行速度的情况下)不同的算法不同的显示方式对用户体验影响并不会太大。
c)可能需考虑的方面:
聚合点中包含的原始点要素最大数量限制、聚合点间的距离限制、点要素的权重、部分缩放级别是否该显示聚合点等。
d)一般的点聚合(聚类)算法对在线地图点聚合虽适用(如K均值法等),但需平衡运行效率和必要性,并且极少见这些复杂方法应用实际的在线地图中。
必要性
目前在线地图的点聚合算法已有较成熟的应用,不少在线地图均提供点聚合的功能及API。
点聚合算法虽然相对简单,但却很实用,若缺少了,在线地图则无法对大数据量的点要素进行较好的显示。
对于在线地图的二次开发者来说,这也是一个十分重要的功能,例如要在地图上显示同一个站点中的多个传感器等,若缺少点聚合功能的支持,则是几乎无法辨别清楚地图上的这些传感器点要素。
运行方式
点聚合的运算可以放在客户端(浏览器),也可以放在服务端运算(如GoogleMaps的融合表)完毕再传给客户端。
表现形式
在计算机上表现地点的点聚合方式多种多样,并无定论,聚合后的显示样式,不同缩放级别下是否显示不同图标或在以下列举几种常见的表现形式:
●多个点聚合后还是点要素,换不同图标显示,或在图标中同时显示该聚合点所包含的原始点要素的数量,点击聚合点后,地图视图会自动切换到该聚合点所包含的所有点的最小包围盒地图范围中。
●多个点聚合后还是点要素,换不同图标显示,或在图标中同时显示该聚合点所包含的原始点要素的数量,点击聚合点后,地图会弹出该聚合点的所聚合的所有点的位置信息,但并不缩放和移动地图。
●多个点聚合后是面要素,以颜色或数字表示所聚合的点的数量,点开后若单位面积内若依然包含较多点则继续显示面要素,若点较少则显示原始的点要素。
此种方法较少见,常见于上述两种方法。
算法
本文关注的重点是在线地图点聚合算法的大致情况,而不是每个算法详细的运行效率和优劣情况。
因此,以下对可搜到的在线地图点聚合算法进行简要列举:
1)基于网格的点聚合算法(Grid-basedClustering)
原理:
将地图划分成指定尺寸的正方形(每个缩放级别不同尺寸),然后将落在对应格子中的点聚合到该正方形中(正方形的中心),最终一个正方形内只显示一个点,并且点上显示该聚合点所包含的原始点的数量。
优点:
运算速度较快,每个原始点只需计算一次,没有复杂的距离计算。
缺点:
有时明明很相近的点,却仅仅因为网络的分界线而被逼分开在不同的聚合点中,此外,聚合点的位置采用的是该网格的中心,而非该网格的质心,这样聚合出来的点可能不能较精确反映原始点的信息。
使用此算法的在线地图:
缺。
以下是Google给出的一个基于距离的点聚合示意图:
图2–基于网格的点聚合算法(聚合前)
图3–基于网格的点聚合算法(聚合后)
2)基于距离的点聚合算法(Distance-basedClustering)
根据点与点之间的距离进行聚合,对每个点进行迭代,若被迭代的点在某个已有聚合点的指定阈值的距离范围内,那么这个点就聚合到该点,否则则新建一个聚合点,如此循环,但聚合后的点的坐标依然是该聚合点创建时的第一个点的坐标位置。
聚合点较精确的反映了所包含的原始点要素的位置信息。
需要计算点与点之间的距离,计算相对复杂。
图4–基于距离的点聚合算法(原始点要素)
图5–基于距离的点聚合算法(聚合过程)
图6–基于距离的点聚合算法(聚合结果)
蓝
1
红
2
黄
7、8
绿
3、4、6
粉红
5
浅绿
9
表1基于距离的点聚合算法(聚合结果)
3)基于方格和距离结合的点聚合算法(详细)
初始时没有任何已知聚合点,然后对每个点进行迭代,计算一个点的外包正方形,若此点的外包正方形与现有的聚合点的外包正方形不相交,则新建聚合点(区别于前面基于直接距离的算法,这里不是计算点与点间的距离,而是计算一个点的外包正方形,正方形的变长由用户指定或程序设置一个默认值),若相交,则把该点聚合到该聚合点中,若点与多个已知的聚合点的外包正方形相交,则计算该点到到聚合点的距离,聚合到距离最近的聚合点中,如此循环,直到所有点都遍历完毕。
每个缩放级别都重新遍历所有原始点要素。
此方法可以算是基于方格与基于距离的算法的一个结合算法。
运算速度相对较快,每个原始点只需计算一次,可能会有点与点距离计算,聚合点较精确的反映了所包含的原始点要素的位置信息。
速度不如完全基于方格的速度快等。
GoogleMaps。
以下是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)剩下的如此迭代,直至完毕。
图7–基于方格距离的点聚合算法(原始点要素)
图8–基于方格距离的点聚合算法(聚合过程)
图9–基于方格距离的点聚合算法(聚合结果)
A、B、D
C、E
3
F、G、J、I
4
H
表2基于方格距离的点聚合算法(聚合结果)
图10–基于方格距离的点聚合算法(更高缩放级别的聚合结果)
图11–基于方格距离的点聚合算法(缩放到只有一个聚合点的聚合结果)
4)基于距离和最少点数量限制的点聚合算法
此算法相当于先执行完基于距离的点聚合算法,然后再进行一次聚合点的分解。
每个聚合点成立的条件是所聚合的原始点要素的数量应大于程序默认或用户指定的最少数量限制,否则将解散这个聚合点。
此方法甚至不能算是一个独立的算法,因为此算法的前后相互独立,类比的,其实也可以建议一种“基于网格和最少点数量限制”的点聚合算法。
聚合后的显示相对精确,对显示的控制更灵活。
运算速度相对较慢,因为本身基于距离的点聚合算法就已经是相对较慢了,再加上后期根据最少数量限制的阈值进行点聚合分解,速度更慢。
Openlayers
(Openlayers是一个开源的Javascript库(基于修改过的BSD许可发布),用来在Web浏览器显示地图【维基百科】)。
以下是Openlayers官方Javascript源码的算法核心:
…
cluster:
function(event){
if((!
event||event.zoomChanged)&
&
this.features){
if(resolution!
=this.resolution||!
this.clustersExist()){
this.resolution=resolution;
varclusters=[];
varfeature,clustered,cluster;
feature=this.features[i];
if(feature.geometry){
clustered=false;
for(varj=clusters.length-1;
j>
=0;
--j){
cluster=clusters[j];
if(this.shouldCluster(cluster,feature)){
this.addToCluster(cluster,feature);
clustered=true;
break;
}
if(!
clustered){
clusters.push(this.createCluster(this.features[i]));
this.clustering=true;
this.clustering=false;
if(clusters.length>
0){
if(this.threshold>
1){
varclone=clusters.slice();
clusters=[];
varcandidate;
for(vari=0,len=clone.length;
i<
len;
++i){
candidate=clone[i];
}else{
clusters.push(candidate);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 在线 地图 聚合 算法 现状