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

时间: 2024-10-05 06:00:17

GIS可视化——热点格网图的相关文章

格网与四叉树索引

网格索引——点要素(图元),线.面要素,有冗余 四叉树索引——线.面要素,有冗余 改进的四叉树索引——线.面要素 R树——空间重叠 一.网格索引,四叉树索引 在 介绍空间索引之前,先谈谈什么叫“索引“.对一个数据集做”索引“,是为了提高对这个数据集检索的效率.书的”目录“就是这本书内容的”索引“,当我们拿 到一本新书,想查看感兴趣内容的时候,我们会先查看目录,确定感兴趣的内容会在哪些页里,直接翻到那些页,就OK了,而不是从第一章节开始翻,一个字一个 字地找我们感兴趣的内容,直到找到为止,这种检索

WorldWind源码剖析系列:经纬度格网类LatLongGrid

经纬度格网类LatLongGrid继承自可渲染对象类RenderableObject,是WorldWind中用来在星球外表绘制经纬度格网的封装类.其类图如下所示. 绘制经纬网格的主体函数为Render(),其内部主要调用以下函数完成绘制: ComputeGridValues()//计算格网值 RenderTropicLine()//绘制回归线 计算格网值ComputeGridValues()内部通过相机的真实视场角drawArgs.WorldCamera.TrueViewRange.Radian

地图整饰-框架与格网

by 李远祥 地图整饰元素中最常见的就是图框和网格了.只要确定了出图的纸张(就是图纸的大小),基本上就开始定义图框和格网. 在ArcMap里面,图框的定义还是相对来说要简单一些.在地图的DataFrame点击右键,进入到属性,可以调出图框(就是框架)的设置. 这个[框架]可以设置的地方不多,基本上就是边框的样式和颜色,图框的背景色和阴影.简单的来说,就是在纸张的边缘处定义了一个框,好让纸张看起来具备一定的边界.其中可以深入设置的地方并不多,主要是在边框的样式上.可以通过点击[边框]右侧的小按钮,

BootStrap入门教程 (一) :手脚架Scaffolding(全局样式(Global Style),格网系统(Grid System),流式格网(Fluid grid System),自定义(Customing),布局(Layouts))

2011年,twitter的“一小撮”工程师为了提高他们内部的分析和管理能力,用业余时间为他们的产品构建了一套易用.优雅.灵活.可扩展的前端工具集--BootStrap.Bootstrap由MARK OTTO和Jacob Thornton所设计和建立,在github上开源之后,迅速成为该站上最多人watch&fork的项目.大量工程师踊跃为该项目贡献代码,社区惊人地活跃,代码版本进化非常快速,官方文档质量极其高(可以说是优雅),同时涌现了许多基于Bootstrap建设的网站:界面清新.简洁;要素

liblas学习笔记二——构建格网索引

主要代码文件为index.hpp index.cpp index.hpp中定义了几个宏 //最大内存限制,默认为10M #define LIBLAS_INDEX_MAXMEMDEFAULT 10000000  // 10 megs default //最小内存,默认为1M #define LIBLAS_INDEX_MINMEMDEFAULT 1000000   // 1 meg at least has to be allowed //最大格网数量,不超过25万个 #define LIBLAS_

CSS3窗帘式4格焦点图代码

CSS3窗帘式4格焦点图代码,带有数字导航,点击数字之后图片会以窗帘形式切换,另外共有4种图片切换样式可以选择,兼容主流浏览器,phplearn初学者 推荐下载. 使用方法: 1.head区域引用文件chuxz.css 2.在文件中加入<!-- 代码 开始 --><!-- 代码 结束 -->区域代码 3.图片路径请打开chuxz.css修改 来源地址:http://www.phplearn.cn/recommend/info_48_1.html CSS3窗帘式4格焦点图代码,布布扣

空间索引格网大小无效

不知道同事什么原因在数据编辑过程中造成空间索引格网大小无效. ESRI官网帮助中解译了这一问题:http://resources.arcgis.com/zh-cn/help/main/10.1/index.html#//01m600000046000000 ,空间索引用于在处理文件地理数据库或 ArcSDE 地理数据库中的数据时提高性能.如果尝试执行的编辑将导致新要素跨越过多的空间索引格网,则会出现一个指示空间索引格网大小无效的消息,并且您的编辑操作也会失败.如果尝试创建的要素在大小方面与要素类

GIS可视化——属性图

一.简介 SuperMap iClient for JavaScript 提供了UTFGrid图层(属性图),用于客户端属性信息的快速交互. UTFGrid图层从UTFGrid切片数据源读取数据,其本质是基于JSON的ASCII 码’字符画’与属性数据的结合. UTFGrid图层不能被可视化渲染,在地图中使用这个图层, 必须同时添加 SuperMap.Control.UTFGrid 控件类来控制触发事件类型. 原理:通过请求瓦片数据(非图片),将属性信息保存到客服端UTFGrid图层中,提高客户

Python统计分析可视化库seaborn(相关性图,变量分布图,箱线图等等)

Visualization of seaborn  seaborn[1]是一个建立在matplot之上,可用于制作丰富和非常具有吸引力统计图形的Python库.Seaborn库旨在将可视化作为探索和理解数据的核心部分,有助于帮人们更近距离了解所研究的数据集.无论是在kaggle官网各项算法比赛中,还是互联网公司的实际业务数据挖掘场景中,都有它的身影.    在本次介绍的这个项目中,我们将利用seaborn库对数据集进行分析,分别展示不同类型的统计图形. 首先,我们将导入可视化所需的所有必要包,我