GIS可视化——热点格网图

2023-10-08 11:59
文章标签 可视化 gis 热点 格网

本文主要是介绍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:{//绑定clickFeatureclickFeature:function(f){//初始化信息框openInfoWin(f);}}
});
//将控件添加进map
map.addControl(select);
//激活控件
select.activate();

弹出信息框的代码如下:

function openInfoWin(feature){
//获取feature的几何对象var geo = feature.geometry;
//获取geo的boundsvar 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;
//将信息框添加进mapmap.addPopup(popup);
}

然后当我们点击点数据时就能获取如下效果:

这样我们就可以使用热点格网图功能了,完整范例请见:

http://www.supermap.com.cn:8090/iserver/iClient/forJavaScript/examples/heatGridLayer.html

转载于:https://www.cnblogs.com/zhuimengdeyuanyuan/p/4585328.html

这篇关于GIS可视化——热点格网图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/165127

相关文章

基于Python打造一个可视化FTP服务器

《基于Python打造一个可视化FTP服务器》在日常办公和团队协作中,文件共享是一个不可或缺的需求,所以本文将使用Python+Tkinter+pyftpdlib开发一款可视化FTP服务器,有需要的小... 目录1. 概述2. 功能介绍3. 如何使用4. 代码解析5. 运行效果6.相关源码7. 总结与展望1

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

使用Folium在Python中进行地图可视化的操作指南

《使用Folium在Python中进行地图可视化的操作指南》在数据分析和可视化领域,地图可视化是一项非常重要的技能,它能够帮助我们更直观地理解和展示地理空间数据,Folium是一个基于Python的地... 目录引言一、Folium简介与安装1. Folium简介2. 安装Folium二、基础使用1. 创建

基于Python开发PDF转PNG的可视化工具

《基于Python开发PDF转PNG的可视化工具》在数字文档处理领域,PDF到图像格式的转换是常见需求,本文介绍如何利用Python的PyMuPDF库和Tkinter框架开发一个带图形界面的PDF转P... 目录一、引言二、功能特性三、技术架构1. 技术栈组成2. 系统架构javascript设计3.效果图

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

GIS图形库更新2024.8.4-9.9

更多精彩内容请访问 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信:digital_twin123 Cesium 本期发布了1.121 版本。重大新闻,Cesium被Bentley收购。 ✨ 功能和改进 默认启用 MSAA,采样 4 次。若要关闭 MSAA,则可以设置scene.msaaSamples = 1。但是通过比较,发现并没有多大改善。

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

[环境配置]ubuntu20.04安装后wifi有图标但是搜不到热点解决方法

最近刚入手一台主机,暗影精灵8plus电竞主机,安装ubuntu后wifi怎么都搜不到热点,前后重装系统6次才算解决问题。这个心酸历程只有搞技术人才明白。下面介绍我解决过程。 首先主机到手后是个windows10系统,我用无线网连接了一下,可以正常上网,说明主机有无限网卡且正常。然后我就直接开始安装Ubuntu20.04了,安装成功后发现wifi有图标但是搜不到热点,我想是不是无线网卡驱动有没有

基于SSM+Vue+MySQL的可视化高校公寓管理系统

系统展示 管理员界面 宿管界面 学生界面 系统背景   当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。这样的大环境让那些止步不前,不接受信息改革带来的信息技术的企业随时面临被淘汰,被取代的风险。所以当今,各个行业领域,不管是传统的教育行业