GIS可视化——热点图

一、简介

SuperMap iClient for JavaScript提供了热点图(HeatMapLayer),用于渲染数据衰减趋势、颜色渐变的效果。

  • 原理:在客户端直接渲染的栅格图,热点图的渲染需要三大要素:1、热点数据,热点数据需要点数据,每一个热点数据需要有地理位置以及权重值 (能够明显的表现某位置某事件发生频率或事物分布密度等,如可以为温度的高低、人口密集度等等);2、热点衰减渐变填充色集合, 用于渲染每一个热点从中心向外衰减时的渐变色;3、热点半径,也就是衰减半径。每一个热点需要从中心点外四周根据半径计算衰减度, 对在热点衰减区内的每一个像素计算需要渲染的颜色值,然后进行客户端渲染。
  • 特点:可以通过颜色用图示化方法来表达二维离散数据的分布,并且可以呈现每一个离散点的权重值的衰减趋势和离散点之间的衰减叠加。
  • 应用场景:由于热点图的衰减是像素级别的,视觉效果方面极佳,但不能与具体数据进行一一对应,只能表示权重之间的差别,所以可以用于一些对精度要求不高 而需要重点突出权重渐变的行业,如可以制作气象温度对比动态效果图、地震区域的震点强弱图等。

二、使用

1、创建热点图图层

首先创建一个热点图对象。由于热点图是对矢量点数据的渲染,不能作为底图,初始化只需要设置一个图层的名称即可。

//创建一个名为“heatMap”的热点图层。
heatMapLayer = new SuperMap.Layer.HeatMapLayer("heatMap");
        

2、添加到地图

然后将此图层添加到map里面。

//向map中添加图层
map.addLayers([heatMapLayer]);
        

3、添加数据

首先需要获取一个点数组(SuperMap.Feature.Vector数组), 数据可以从服务器查询,也可以使用本地数据,不过都只能是点数据。 如下的形式:

var heatFeatures = [feature1,feature2,......,featureN];
        

这些features首先必须是点数据,每一个 feature 必须满足在attributes属性中存在记录权重的值。 如我们可以这样初始化feature:

var heatFeature = new SuperMap.Feature.Vector(
     new SuperMap.Geometry.Point(
                    Math.random()*360 - 180,
                    Math.random()*180 - 90
            ),
            {
                "value":Math.random()*9
            }
    );
        

这里的value就是记录权重的字段,当每一个feature数据带上权重数据后, 我们还需要让layer知道如何读取这些数据,所以需要告诉layer读哪一个字段:

heatMapLayer.featureWeight = "value";
        

再把所有的features添加进layer

heatMapLayer.addFeatures(heatFeatures);
        

然后我们就可以获得如下热点图的效果了:

4、自定义颜色

虽然上面的效果很好,但是颜色渐变是固定的,下面我们就试着自己来设置颜色的渐变

我们可以给属性items赋值一个分段颜色数组以此来设置颜色渐变。如下:

            var items = [
                {
                    start:0,
                    end:1,
                    startColor:new  SuperMap.REST.ServerColor(170,240,233),
                    endColor:new  SuperMap.REST.ServerColor(180,245,185)
                },
                {
                    start:1,
                    end:2,
                    startColor:new  SuperMap.REST.ServerColor(180,245,185),
                    endColor:new  SuperMap.REST.ServerColor(223,250,177)
                },
                {
                    start:2,
                    end:3,
                    startColor:new  SuperMap.REST.ServerColor(223,250,177),
                    endColor:new  SuperMap.REST.ServerColor(224,239,152)
                },
                {
                    start:3,
                    end:4,
                    startColor:new  SuperMap.REST.ServerColor(224,239,152),
                    endColor:new  SuperMap.REST.ServerColor(160,213,103)
                },
                {
                    start:4,
                    end:5,
                    startColor:new  SuperMap.REST.ServerColor(160,213,103),
                    endColor:new  SuperMap.REST.ServerColor(44,104,50)
                },
                {
                    start:5,
                    end:6,
                    startColor:new  SuperMap.REST.ServerColor(44,104,50),
                    endColor:new  SuperMap.REST.ServerColor(29,135,59)
                },
                {
                    start:6,
                    end:7,
                    startColor:new  SuperMap.REST.ServerColor(29,135,59),
                    endColor:new  SuperMap.REST.ServerColor(118,154,49)
                },
                {
                    start:7,
                    end:8,
                    startColor:new  SuperMap.REST.ServerColor(118,154,49),
                    endColor:new  SuperMap.REST.ServerColor(204,175,27)
                },
                {
                    start:8,
                    end:9,
                    startColor:new  SuperMap.REST.ServerColor(204,175,27),
                    endColor:new  SuperMap.REST.ServerColor(198,63,2)
                }

            ];
            heatMapLayer.items = items;
        

这样我们就实现了自己的颜色渐变:

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

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

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

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

时间: 2024-10-13 11:53:54

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

GIS可视化——麻点图

一.引言 目前在客户端绘制POI(Point of Interest,兴趣点)的方式主要是div(Marker的形式).svg.canvas.VML(后边三种就是Vector Layer)几种方式,这几种方式中只有canvas的效率是最高的,但是canvas只有一些最新的浏览器才支持.虽然div.svg.VML跨浏览器要好一些,但是这几种的效率不够高,最多只能绘制几千个POI. 为了展现出大数据量的POI,我们也可以考虑将POI数据集通过iServer发布为临时图层,然后在客户端使用动态图层展现

HTML5 创建热点图

通过HTML5 canvas画布创建简单的热点图,当鼠标划过时产生热点,停留时间越长,热点亮度越高. 下面是HTML部分: <!DOCTYPE html> <html> <head></head> <style type="text/css"> #heatmap { background-image: url("mapbg.jpg"); } </style> <body> <c

Perfmap:前端性能热点图

介绍 Perfmap是一个可以调用浏览器的Resource Timing API来根据页面前端资源(如图片)的加载时间生成性能热点图js插件.需要浏览器支持Resource Timing API 使用 在书签栏上把以下js代码添加为书签(即替换网址) javascript:(function(){var el=document.createElement('script');el.src='https://zeman.github.io/perfmap/perfmap.js';document.

热点图js工具推荐

业界流行的热点图js库: http://www.patrick-wied.at/static/heatmapjs/ 业界流行,很多网站再用,不过性能稍差,如果热点很多,上万,就很慢. 基于WebGL的热点图js库: https://github.com/pyalot/webgl-heatmap 基于WebGL,性能卓越.但是依赖硬件和浏览器开启这项功能.不过一般chrome和firefox都是支持的.

GIS可视化——属性图

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

爬取CVPR2019年的论文数据并实现可视化热词云

写在前面 本次课堂练习,老师提出要我们做一个热词云.说实话看到的一瞬间有些懵逼,不知道要怎么做.但查阅了资料后一切明朗起来.也提示我们凡事不要怕,先做就是了. 本文web端代码已上传github:https://github.com/wushenjiang/PaperData 需求 本次任务的需求:爬取CVPR2019年所有论文的题目,并提取题目中的关键字,做成按照热度显示大小的热词云. 成品截图 成品链接:http://39.97.109.245/PaperData/papercloud.js

R实战之热点图(HeatMap)

快速实现是搜索帮助文档的首要目的,所以此处涉及实战的文章一概略去传统帮助文档的理论部分,直接上代码加注释! 本文将介绍R语言下利用ggplot2包制作heatmap的代码 -------------------------我是分割线------------------------------- 测试数据: 数据中的空白行.列用以分割heatmap,区别不同的数据处理,如不需要删除即可. 1.制作连续型 1 #引入包 2 library(ggplot2) 3 library(reshape) 4

大富豪的人同人图热点图

http://club.jd.com/CommunityGroupDetail/24892218_1.html http://club.jd.com/CommunityGroupDetail/24892081_1.html http://club.jd.com/CommunityGroupDetail/24892304_1.html http://club.jd.com/CommunityGroupDetail/24892305_1.html http://club.jd.com/Communi

关于标热点图篇

QQ:1187362408 欢迎技术交流和学习 关于标热点图篇(DreamWeaver 5): TODO: 1,使用DreamWeaver,多边形工具.本地新建Html,拖拽图像<标热点区域>[与图片中保持一致性] 2,绘图,将html 中标签添加至aspx页面中,完成热点区域图,点击可响应鼠标事件,链接至相关模块 讲解篇: 1,关于,DreamWeaver 5 多边形工具[略] 2,关于html标签添加至aspx页面中,[略]