GIS可视化——聚散图
一、简介
随着计算机的发展,浏览器的不断进步与完善,现今大部分浏览渲染效率有了很大的改善, 但是由于浏览器厂商的不同,浏览器种类繁多,性能不一,并且很多用户还使用着不少老的浏览, 那些如IE6、7等的老式浏览器渲染能力有限,在处理大量数据的时候无法满足用户的需求, 为此聚散的思想诞生了,聚散图将非重点的批量数据进行合并,只渲染少量数据,散开并突出重要信息点, 减少了浏览器的负荷,解决了大数据量渲染的性能问题。
- 原理:按区域将多个离散点进行计算,合并成为一个聚散点进行显示,在某种情况下(如点击聚散点或者移动到聚散点内部时)将特定的聚散点还原为离散点
- 特点:由于浏览器渲染数据的限制,无法显示大量数据,聚散图可以合并离散点,提高浏览器显示的数据上限。
- 应用场景:多用于数据量特别大的场景,一次性绘制在浏览器导致浏览器负荷过重,所以将数据进行合并,这样整个页面的聚散点数量不至于过多,减少浏览器压力, 同时需要获取离散点信息时可以还原对应的聚散点,即保证了浏览器装载了所有数据,又能保证浏览器负荷在可接受范围内。
二、使用
接下来我们一起看一下聚散图的使用方式:
1、创建聚散图图层
首先创建一个聚散图对象。由于聚散图只负责矢量数据的渲染,所以初始化只需要设置一个图层的名称即可。
//创建一个名为“Cluster”的聚散图层。
clusterLayer = new SuperMap.Layer.ClusterLayer("Cluster");
2、添加到地图
然后将此图层添加到map里面。
//向map中添加图层
map.addLayers([clusterLayer]);
3、添加数据
首先需要获取一个点数组(SuperMap.Feature.Vector数组), 数据可以从服务器查询准备好的点数据集,也可以使用本地数据,不过都只能是点数据。 如下的形式:
var features = [feature1,feature2,......,featureN];
添加点数据
//将数据添加到图层中
clusterLayer.addFeatures(features);
即可实现类似如下效果,地图放大缩小时点数据会自动聚散或者散开:

4、事件处理
上述的聚散图的聚散点的散开和聚散都是自动计算的,用户不能点击聚散点进行散开,如果需要点击聚散点进行散开, 则需要添加SelectCluster控件。如下:
//创建聚散选择控件。
var select = new SuperMap.Control.SelectCluster(clusterLayer);
//将控件添加到map上
map.addControl(select);
//激活控件。
select.activate();
这样当用户点击聚散点时会散开,如下:

聚散图支持很多事件,如:
- click:点击事件(包括聚散点和非聚散点)
- clickout:点击要素外
- over:移进要素事件
- out:移出要素事件
- dblclick:双击事件
使用事件必须要创建SelectCluster控件,这里举个简单例子演示如何使用事件。
//创建聚散选择控件。该控件实现了聚散图层的鼠标事件。
var select = new SuperMap.Control.SelectCluster(clusterLayer,{
callbacks:{
click:function(f){
if(!f.isCluster){ //当点击聚散点的时候不弹出信息窗口
openInfoWin(f);
}
}
}
});
//将控件添加到map上
map.addControl(select);
//激活控件。
select.activate();
定义openInfoWin方法:
function openInfoWin(feature){
var geo = feature.geometry;
var bounds = geo.getBounds();
//获取中心点
var center = bounds.getCenterLonLat();
var contentHTML = "<div style='font-size:.8em; opacity: 0.8; overflow-y:hidden;'>";
//这里我们在创建 feature 的时候动态创建了 info 属性用于存放部分信息
contentHTML += "<div>"+feature.info.name+"</div></div>";
//创建popup
var popup = new SuperMap.Popup.FramedCloud("popwin",
new SuperMap.LonLat(center.lon,center.lat),
null,
contentHTML,
null,
true);
feature.popup = popup;
//给map添加popup
map.addPopup(popup);
}
然后可以实现如下效果:

5、高级扩展
接下来我们尝试修改聚散点的图片以及自定义聚散的数量,聚散图提供了属性clusterStyles给我们扩展:
//设置clusterStyles属性
clusterLayer.clusterStyles = [
{
"count":15,//子节点小于等于15的聚散点
//style的详情参见 SuperMap.Feature.Vector.style
"style":{
fontColor:"#404040",
graphic:true,
externalGraphic:"images/markerbig.png",
graphicWidth:37,
graphicHeight:38,
labelXOffset:0,
labelYOffset:5
}
},
{
"count":50,//子节点小于等于50大于15的聚散点
"style":{
fontColor:"#404040",
graphic:true,
externalGraphic:"images/markerflag.png",
graphicWidth:41,
graphicHeight:46,
labelXOffset:0,
labelYOffset:6
}
},
{
"count":"moreThanMax",// 子节点大于50的聚散点
"style":{
fontColor:"#404040",
graphic:true,
externalGraphic:"images/circle.png",
graphicWidth:48,
graphicHeight:53,
labelXOffset:0,
labelYOffset:0
}
}
];
这样我们就可以获得如下效果了:

完整范例请见
http://www.supermap.com.cn:8090/iserver/iClient/forJavaScript/examples/clusterLayer.html
GIS可视化——聚散图的更多相关文章
- GIS可视化——热点格网图
一.简介 原理:按照格网大小将区域进行划分,由一个矩形格网替代当前范围内的数据,由格网中心数字代替格网的权重(可以为格网中数据的数量,数据某权重的平均值.最大值.最小值等), 由格网之间颜色的不同表达 ...
- GIS可视化
作为一名GIS专业的学生,一晃也毕业三年了,在supermap也呆了三年多了,做的最多的就是浏览器端的GIS展示,最近也想分享一下我们团队在浏览器端GIS可视化的一些成果,算是做个宣传吧!有用的着的可 ...
- Echarts数据可视化series-radar雷达图,开发全解+完美注释
全栈工程师开发手册 (作者:栾鹏) Echarts数据可视化开发代码注释全解 Echarts数据可视化开发参数配置全解 6大公共组件详解(点击进入): title详解. tooltip详解.toolb ...
- Echarts数据可视化series-line线图,开发全解+完美注释
全栈工程师开发手册 (作者:栾鹏) Echarts数据可视化开发代码注释全解 Echarts数据可视化开发参数配置全解 6大公共组件详解(点击进入): title详解. tooltip详解.toolb ...
- Echarts数据可视化series-graph关系图,开发全解+完美注释
全栈工程师开发手册 (作者:栾鹏) Echarts数据可视化开发代码注释全解 Echarts数据可视化开发参数配置全解 6大公共组件详解(点击进入): title详解. tooltip详解.toolb ...
- Linux3.10.0块IO子系统流程(5)-- 为SCSI命令准备聚散列表
SCSI数据缓冲区组织成聚散列表的形式.Linux内核中表示聚散列表的基本数据结构是scatterlist,虽然名字中有list,但它只对应一个内存缓冲区,聚散列表就是多个scatterlist的组合 ...
- GIS可视化——属性图
一.简介 SuperMap iClient for JavaScript 提供了UTFGrid图层(属性图),用于客户端属性信息的快速交互. UTFGrid图层从UTFGrid切片数据源读取数据,其本 ...
- Python图表数据可视化Seaborn:1. 风格| 分布数据可视化-直方图| 密度图| 散点图
conda install seaborn 是安装到jupyter那个环境的 1. 整体风格设置 对图表整体颜色.比例等进行风格设置,包括颜色色板等调用系统风格进行数据可视化 set() / se ...
- 城市防汛应急管理智慧 Web GIS 可视化平台
前言 今年第 17 号台风"狮子山"(热带风暴级)登陆海南岛,受"狮子山"影响,海南岛北半部地区出现暴雨到大暴雨.局地特大暴雨.台风带来的强风雨导致海南岛多地树 ...
随机推荐
- Leetcode 593.有效正方形
有效正方形 给定二维空间中四点的坐标,返回四点是否可以构造一个正方形. 一个点的坐标(x,y)由一个有两个整数的整数数组表示. 示例: 输入: p1 = [0,0], p2 = [1,1], p3 = ...
- selenium webdriver——鼠标事件
Web产品中提供了丰富的鼠标交互方式,例如鼠标右击.双击.悬停.甚至是鼠标拖动等功能,在WebDriver中,将这些关于鼠标操作的方法 封装在ActionChains类中: ActionChains类 ...
- 【转】Unity5.x发布IOS项目Xcode8免签证调试发布教程
http://www.jianshu.com/p/b0fb49fbcc14 最近尝试发布一下IOS项目,发现现在发布已经简单很多了,不需要开发者账户也能简单快捷进行真机调试. 调试: 1.准备工作①硬 ...
- Log4j官方文档翻译(一、基本介绍)
简介 log4j是使用java语言编写的可靠的.快速的.灵活的日志框架,它是基于Apache的license. log4j支持c,c++,c#,perl,python,ruby等语言.在运行时通过额外 ...
- 【Luogu】P4462异或序列(莫队)
题目链接 观察什么时候x到y之间那一段可以被统计 xorsum[x-1]^xorsum[y]=k xorsum[x-1]=xorsum[y]^k||xorsum[y]=xorsum[x-1]^k 莫队 ...
- python的get和post
postimport urlliimport urllib #post数据value = {}value['username']='aaaa'value['password']='123123'dat ...
- python面试模拟真题讲解
一.选择题(32分) 1.python不支持的数据类型有:(A) A.char B.int C.float D.list 2.x = “foo” y = 2 print(x+y) ...
- 洋媳妇Susan教育孩子的方法
洋媳妇Susan教育孩子的方法 一个中国婆婆跟我说:「我的儿子去美国留学,毕业后定居美国. 还给我找了个洋媳妇Susan. 如今,小孙子Toby已经3岁了. 今年夏天,儿子為我申请了探亲签证. 在美国 ...
- Html.AntiForgeryToken 防止伪造提交
原文发布时间为:2011-05-03 -- 来源于本人的百度文章 [由搬家工具导入] In this tutorial, I am not going to discuss the concept i ...
- cookie中存储json
原文发布时间为:2009-12-14 -- 来源于本人的百度文章 [由搬家工具导入] http://www.denisdeng.com/?p=563 最近的一个项目需要在cookie中存储json对象 ...