GIS可视化——热点格网图
一、简介
- 原理:按照格网大小将区域进行划分,由一个矩形格网替代当前范围内的数据,由格网中心数字代替格网的权重(可以为格网中数据的数量,数据某权重的平均值、最大值、最小值等), 由格网之间颜色的不同表达渐变性
- 特点:结合了热点图和聚散的特性,具有热点图的对权重的层次渐变直观性以及聚散解决数据量过大的优势。
- 应用场景:热点格网图将大量数据以格网显示,减少了浏览器的负荷,在格网扩展开后又能保证数据的完整性,并且具有热点图的部分颜色渐变趋势带来的视觉直观性, 该功能主要用于渲染大数据量点数据,可以应用于人口密度、温度监控、高原地势成像、海底海拔成像等行业。
二、使用
首先我们得做一些准备:
- 保证存在可用的数据,如果我们的格网只代表数量,那么用户只需要提前准备一个非空的点数据集即可,确保每一个点数据存在地理坐标, 如果我们的格网不是代表数量,而是权重平均值(或者最大最小值等),那么还需要保证每一个点数据存在权重字段,假如为 weightName , 此字段的数据必须为数字类型,在客户端需要设置heatGridLayer.dataField = weightName ;以便获取权重进行计算。
- 由于热点格网图只是渲染矢量数据,所以不能作为底图,我们需要在map添加一个 TiledDynamicRESTLayer
1、创建热点格网图图层
首先创建一个热点格网图对象。由于热点格网图只负责矢量数据的渲染,所以初始化只需要设置一个图层的名称即可。
//创建一个名为“myHeatGrid”的热点格网图层。
var heatGridLayer = new SuperMap.Layer.HeatGridLayer("myHeatGrid");
2、添加到地图
然后将此图层添加到map里面。
//向map中添加图层
map.addLayers([heatGridLayer]);
3、添加数据
首先需要获取一个点数组(SuperMap.Feature.Vector数组), 数据可以从服务器查询我们之前准备好的点数据集,也可以使用本地数据,不过都只能是点数据。 如下的形式:
var heatFeatures = [feature1,feature2,......,featureN];
其次需要一个格网子对象数组主要用于对数据进行分段渲染。此数组的每一个子对象必须有如下三个属性:
- start:代表格网表示的数据的下限(包含);
- end:代表格网表示的数据的上限(不包含);
- style:代表需要赋值给格网的style。style详细属性请查看SuperMap.Feature.Vector.style
//创建一个格网子对向数组
var items = [
{
//在此例子中代表格网中点数据数量的下限,也就是至少为0个
start:0,
//在此例子中代表格网中点数据数量的上限,也就是至多不超过5个(不包含5个)
end:5,
//代表满足一个格网中数据数量大于等于0且小于5的格网按照如下的style进行渲染
style:{
//格网的边框颜色
strokeColor: "#C69944",
//格网边框的宽度
strokeWidth: 1,
//格网内部填充色
fillColor: "#B8E4B8",
//格网的透明度
fillOpacity: 0.5
}
},
{
start:5,
end:10,
style:{
strokeColor: "#C69944",
strokeWidth: 1,
fillColor: "#66dd66",
fillOpacity: 0.5
}
},
...
];
设置相关参数:
//设置热点格网图的格网子对象数组,如果不设置则所有格网都是统一默认style
heatGridLayer.items=items;
//将数据添加到图层中
heatGridLayer.addFeatures(heatFeatures);
然后一个简单的热点格网图我们就创建成功了,如下是查询的全球各国首都制作的格网图效果:
4、其他常用属性
4.1 labelMode 与 dataField
此范例默认表示的是数量,也就是 labelMode 为默认0,可以用于与人口密度的展示方面。
当 labelMode 属性设置为非0时,dataField 属性也必须设置,需要制定一下数据的来源,如:
//设置为格网中所有数据的平均值
heatGridLayer.labelMode = SuperMap.Layer.HeatGridLayer.LABELMODE_MEAN ;
//假设我们的点数据集的权重字段weightName为“temperature”,那么此处需要指定
//如果数据时查询出来的,那么在 feature.attributes 里面会自动存放权重,如果是自己创建的Feature,那么必须自己往feature.attributes里添加权重值。
heatGridLayer.dataField = "temperature";
保证数据存在权重,客户端相应设置权重字段就能使用平均值、最大最小的模式
4.2 gridHeight 与 gridWidth
这两个参数用于设置格网的高度和宽度,单位是像素,默认都是50像素的大小。热点格网图中的点数据聚散计算就是由格网的宽高决定的, 聚散计算时会将格网大小换算为地理范围,将内部所有点聚散为一个格网,所以格网的宽高越大,相对来说聚散的点越多,而格网数量会越少, 格网过少效果不好,过多影响浏览器性能,从而用户需要根据自己的需求设置宽高。格网宽高必须都大于0,格网宽高可随意设置,如:
//设置格网的高度
heatGridLayer.gridHeight = 10 ;
//设置格网的宽度
heatGridLayer.gridWidth = 25;
4.3 isZoomIn 与 zoomInNumber
这两个参数用于控制点击格网时的放大效果, isZoomIn 默认为true,代表默认情况点击格网地图会进行放大, zoomInNumber 默认为1,代表点击格网时地图放大一级。 这两个参数可以控制点击格网是否放大以及放大的程度,如:
//设置点击格网时可以放大地图
heatGridLayer.isZoomIn = true ;
//设置点击格网时地图放大2级
heatGridLayer.zoomInNumber = 2;
4.4 spreadZoom
设置热点格网图的扩散级别,当地图放大到这一级时格网会进行扩散,还原为点数据,默认为3,如:
//设置格网图放大到第4级时进行格网扩散
heatGridLayer.spreadZoom = 4 ;
扩散后的效果如下:
5、事件使用
热点格网图支持很多事件,如:
- clickFeature:点击点事件
- clickGrid:点击网格事件
- clickout:点击要素外
- mouseoverFeature:移进点事件
- mouseoverGrid:移进网格事件
- mouseoutFeature:移出点事件
- dblclickFeature:双击点事件
- dblclickGrid:双击网格事件
这里举例说明一下最常用的clickFeature事件,当地图、底图以及heatGridLayer都准备完毕时注册事件如下:
//初始化格网选择事件控件
var select = new SuperMap.Control.SelectGrid(heatGridLayer,{
callbacks:{
//绑定clickFeature
clickFeature:function(f){
//初始化信息框
openInfoWin(f);
}
}
});
//将控件添加进map
map.addControl(select);
//激活控件
select.activate();
弹出信息框的代码如下:
function openInfoWin(feature){
//获取feature的几何对象
var geo = feature.geometry;
//获取geo的bounds
var bounds = geo.getBounds();
//获取bounds的中心点
var center = bounds.getCenterLonLat();
//创建popup的内容
var contentHTML = "<div style='font-size:.8em; opacity: 0.8; overflow-y:hidden;'>";
contentHTML += "<div>"+"SMID:"+feature.data.SMID+"<br />"+"国家:"+feature.data.COUNTRY+"<br />"+"首都:"+feature.data.CAPITAL+"</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
map.addPopup(popup);
}
然后当我们点击点数据时就能获取如下效果:
这样我们就可以使用热点格网图功能了,完整范例请见:
http://www.supermap.com.cn:8090/iserver/iClient/forJavaScript/examples/heatGridLayer.html
GIS可视化——热点格网图的更多相关文章
- GIS可视化
作为一名GIS专业的学生,一晃也毕业三年了,在supermap也呆了三年多了,做的最多的就是浏览器端的GIS展示,最近也想分享一下我们团队在浏览器端GIS可视化的一些成果,算是做个宣传吧!有用的着的可 ...
- BootStrap入门教程 (一) :手脚架Scaffolding(全局样式(Global Style),格网系统(Grid System),流式格网(Fluid grid System),自定义(Customing),布局(Layouts))
2011年,twitter的“一小撮”工程师为了提高他们内部的分析和管理能力,用业余时间为他们的产品构建了一套易用.优雅.灵活.可扩展的前端工具集--BootStrap.Bootstrap由MARK ...
- WorldWind源码剖析系列:经纬度格网类LatLongGrid
经纬度格网类LatLongGrid继承自可渲染对象类RenderableObject,是WorldWind中用来在星球外表绘制经纬度格网的封装类.其类图如下所示. 绘制经纬网格的主体函数为Render ...
- Arcgis CreateFishnet工具,生成到FileGDB中要素类的格网大小不一致
我的第一篇博客!哈哈 最近在做一些关于创建渔网的工作,发现一些问题,做个总结. 1.问题描述:如图1,设置好渔网的必要参数,输出目录为gdb里的矢量图层,(行列数比较大,渔网的地理范围较小),输出的格 ...
- 基于gdal的格网插值
格网插值就是使用离散的数据点创建一个栅格图像的过程.通常情况下,有一系列研究区域的离散点,如果我们想将这些点转换为规则的网格数据来进行进一步的处理,或者和其他网格数据进行合并 等处理,就需要使用格网插 ...
- 使用jQuery仿淘宝商城多格焦点图滚动切换效果
1.效果及功能说明 图片滚动切换特效,高仿2012淘宝商城首页多格子焦点图切换,鼠标滑过焦点图片各个格子区域聚光灯效果展示 2.实现原理 在显示div的下面有一个按钮条在鼠标触及到按钮的时候会改变那妞 ...
- GIS可视化——属性图
一.简介 SuperMap iClient for JavaScript 提供了UTFGrid图层(属性图),用于客户端属性信息的快速交互. UTFGrid图层从UTFGrid切片数据源读取数据,其本 ...
- GIS可视化——聚散图
一.简介 随着计算机的发展,浏览器的不断进步与完善,现今大部分浏览渲染效率有了很大的改善, 但是由于浏览器厂商的不同,浏览器种类繁多,性能不一,并且很多用户还使用着不少老的浏览, 那些如IE6.7等的 ...
- 城市防汛应急管理智慧 Web GIS 可视化平台
前言 今年第 17 号台风"狮子山"(热带风暴级)登陆海南岛,受"狮子山"影响,海南岛北半部地区出现暴雨到大暴雨.局地特大暴雨.台风带来的强风雨导致海南岛多地树 ...
随机推荐
- PostgreSQL 行排序详解
在查询生成输出表之后,也就是在处理完选择列表之后,你还可以对输出表进行排序. 如果没有排序,那么行将以不可预测的顺序返回(实际顺序将取决于扫描和连接规划类型和在磁盘上的顺序, 但是肯定不能依赖这些东西 ...
- 【LeetCode】Merge Sorted Array(合并两个有序数组)
这道题是LeetCode里的第88道题. 题目描述: 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nu ...
- Leetcode 655.输出二叉树
输出二叉树 在一个 m*n 的二维字符串数组中输出二叉树,并遵守以下规则: 行数 m 应当等于给定二叉树的高度. 列数 n 应当总是奇数. 根节点的值(以字符串格式给出)应当放在可放置的第一行正中间. ...
- idea中将项目与github关联
© 版权声明:本文为博主原创文章,转载请注明出处 1.在github中创建一个账号:https://github.com/join?source=header-home 2.下载并安装git:http ...
- POJ 2686 Traveling by Stagecoach(状压二维SPFA)
Traveling by Stagecoach Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 3407 Accepted ...
- [国家集训队][bzoj 2152] 聪聪可可 [点分治]
题面: http://www.lydsy.com/JudgeOnline/problem.php?id=2152 思路: 题目要求统计书上路径信息,想到树上分治算法 实际上这是一道点分治裸题,我就不瞎 ...
- BZOJ1487 [HNOI2009]无归岛 【仙人掌dp】
题目链接 BZOJ1487 题解 就是一个简单的仙人掌最大权独立集 还是不会圆方树 老老实实地树形Dp + 环处理 #include<iostream> #include<cstdi ...
- 新blog新帖><
欢迎来到Mychael的无声乐章 今天搬到了博客园,以后就在这个安谧的地方创作啦OvO 把以前的博客搬了过来 以前的分类似乎崩了.... [以前一些LaTex公式可能会崩掉,那就回我原博客看吧Mych ...
- php中的对象赋值
如果现在问你一个问题: <?php class A{ public $a = 1; } $a = new A(); $b = $a; $b->a = 3; print_r($a->a ...
- #ifndef 的用法介绍
ifndef是 if not define 的缩写,一种宏定义.它是预处理功能中三种(宏定义,文件包含和条件编译)中的第三种--条件编译. 其使用方式是: #define X ... #endif / ...