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 号台风"狮子山"(热带风暴级)登陆海南岛,受"狮子山"影响,海南岛北半部地区出现暴雨到大暴雨.局地特大暴雨.台风带来的强风雨导致海南岛多地树 ...
随机推荐
- shell执行mysql的脚本(包括mysql执行shell脚本)
在Shell中执行mysql的脚本,这里介绍比较容易使用的一种方法 首先写好sql的脚本,后缀为.sql,比如 sql_file.sql:内容如下 #这是SQL的脚本create table if n ...
- 基础概念:Oracle数据库
基础概念:Oracle数据库.实例.用户.表空间.表之间的关系 数据库:Oracle数据库是数据的物理存储.这就包括(数据文件ORA或者DBF.控制文件.联机日志.参数文件).其实Oracle数据库的 ...
- c语言有用函数收集
1 strtok :分解字符串为一组字符串.s为要分解的字符串,delim为分隔符字符串.首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL. 2 strstr :从字符串str1中查找 ...
- 用Vundle管理Vim插件
作为程序员,一个好用的Vim,是极其重要的,而插件能够使原本功能羸弱的Vim变得像其他功能强大的IDE一样好用.然而下载.配置插件的过程比较繁琐,大家往往需要自己进行下载/配置等操作,如果还涉及到更新 ...
- HDU 3395 Special Fish(拆点+最大费用最大流)
Special Fish Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- java的图像界面
package test; import java.awt.FlowLayout; import java.awt.event.ActionListener; import java.awt.even ...
- .bat 批处理
最简单的一个批处理文件 @echo off echo 这是测试内容1 echo 这是测试内容2 pause 输出: 这是测试内容1 这是测试内容2 请按任意键继续. . .
- Vue实现增删改查功能
简单的表单CURD功能demo <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&g ...
- mybatis 从数据库查询的信息不完整解决办法
List<Product> products = productService.getProductListWithPage(productQuery); 今天碰到一个很奇怪的现象,上面的 ...
- c#.net用JavaScript实现 时钟显示
原文发布时间为:2008-10-10 -- 来源于本人的百度文章 [由搬家工具导入] 显示日期,星期,以及时间: JS文件夹与default.aspx在同一个文件夹下 JS文件夹中有date.js文件 ...