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 号台风"狮子山"(热带风暴级)登陆海南岛,受"狮子山"影响,海南岛北半部地区出现暴雨到大暴雨.局地特大暴雨.台风带来的强风雨导致海南岛多地树 ...
随机推荐
- 如何解决Jmeter导出的聚合报告是乱码易位问题
在使用Jmeter这个工具的时候,有些单词不懂是什么意思,就切换到这个工具自带的中文语言: 当我们测试完毕,导出聚合报告(Summary Report)的时候: 1.有一些第一个Title下面的中文是 ...
- CSU-1980 不堪重负的树
CSU-1980 不堪重负的树 Description 小X非常喜欢树,然后他生成了一个大森林给自己玩. 玩着玩着,小X陷入了沉思. 一棵树由N个节点组成,编号为i的节点有一个价值Wi. 假设从树根出 ...
- hnust 懒人多动脑
问题 F: 懒人得多动脑 时间限制: 1 Sec 内存限制: 128 MB提交: 93 解决: 30[提交][状态][讨论版] 题目描述 小D的家A和学校B都恰好在以点F为焦点的双曲线上,而小D每 ...
- mysql中游标的使用案例详解(学习笔记)(转)
1.游标是啥玩意?简单的说:游标(cursor)就是游动的标识,啥意思呢,通俗的这么说,一条sql取出对应n条结果资源的接口/句柄,就是游标,沿着游标可以一次取出一行.我给大家准备一张图: 2.怎么使 ...
- 【bzoj1189】[HNOI2007]紧急疏散evacuate BFS最短路+动态加边网络流
题目描述 发生了火警,所有人员需要紧急疏散!假设每个房间是一个N M的矩形区域.每个格子如果是'.',那么表示这是一块空地:如果是'X',那么表示这是一面墙,如果是'D',那么表示这是一扇门,人们可以 ...
- 2017-3-01 test
三道好像都是HDU上的题QAQ 题目名称都没改,差评 T1:http://acm.hdu.edu.cn/showproblem.php?pid=5073 被卡精度了QAQ 先排一发序,然后发现最后未动 ...
- [暑假集训--数论]poj2115 C Looooops
A Compiler Mystery: We are given a C-language style for loop of type for (variable = A; variable != ...
- pat 甲级 1064. Complete Binary Search Tree (30)
1064. Complete Binary Search Tree (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHE ...
- .net反编译工具Reflector下载(转)
原文发布时间为:2010-10-23 -- 来源于本人的百度文章 [由搬家工具导入] 打开Reflector工具并且下载了一个FileDisassembler插件,FileDisassembler插件 ...
- js汉字转拼音首字母
js汉字转拼音首字母 2018-04-09 阅读 1018 收藏 1 原链:segmentfault.com 分享到: 前端必备图书<JavaScript设计模式与开发实践> > ...