本篇使用Mapbox GL JS实现数据的热力图可视化,以截止到2020-03-01日的新冠疫情作为示例数据。

一 什么是热力图

热力图使用颜色的深浅表示数值的变化,从而表示数据的分布情况,这使得用户可以更容易的理解复杂的数据分布,发现其中的规律。形象地说,热力图展示了数据的“重点”,因此在数据可视化中被广泛应用。

二 初始化地图

1 引入js文件

<script src='https://api.tiles.mapbox.com/mapbox-gl-js/v1.1.1/mapbox-gl.js'></script>
<link href='https://api.tiles.mapbox.com/mapbox-gl-js/v1.1.1/mapbox-gl.css' rel='stylesheet' />
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>

2 构建地图容器

<div id='map'></div>

3 初始化Mapbox GL地图对象

mapboxgl.accessToken = 'your token';
var map = new mapboxgl.Map({container: 'map', style: 'mapbox://styles/mapbox/dark-v9', center: [-74.50, 40], zoom: 9
});

4 定义样式

body {margin: 0;padding: 0;
}#map {position: absolute;top: 0;bottom: 0;width: 100%;
}

5 效果

三 构建热力图

1 数据示例

{"geometry": {"coordinates": [114.3,30.5955],"type": "Point"},"type": "Feature","properties": {"new_recovery": 1,"new_death": 0,"new_diagnosis": 0}
}

2 添加数据源

map.addSource('virus-source', {"type": "geojson","data": "data.json"
});

3 添加热力图图层

map.addLayer({id: "virus-heatmap",type: "heatmap",source: "virus-source",maxzoom: 7,layout: {visibility: "visible"},paint: {}}
);

4 效果

很明显,这幅图的效果十分不好,首先,其存在着严重的“热力失真”现象,在地图缩放级别很小的情况下,中国的整个东边都好像被感染了,这明显是不符合现实情况的;再者,如果在不同的地图缩放等级下,均采用相同的热力半径,会导致更严重的可视化失衡,因此我们需要进一步改善。

四 Mapbox Expression

在改善之前,有必要介绍Mapbox强大的Expression表达式语言,它被用于定义地图样式内的layout属性、paint属性或filter属性的值,允许使用多个属性对数据进行样式的配置,同时可以应用条件、数学、逻辑和字符串操作符对数据进行操作,十分强大。

1 normal expression

['*', ['pi'], ['^', 3, 2]]:表示3^2 * pi。

2 property expression

['-', 2017, ['number', ['get', 'Constructi'], 2017]]:表示2017 - number of Construction

3 zoom expression

用于使地图的样式随地图的缩放级别而改变,缩放表达式可以用来控制数据密度。

['interpolate', ['linear'], ['zoom'],10, ['/', ['-', 2017, ['number', ['get', 'Constructi'], 2017]], 30],13, ['/', ['-', 2017, ['number', ['get', 'Constructi'], 2017]], 10],
]

五 改进

Mapbox GL热力图具有三个主要paint样式属性。

1 heatmap-radius

该属性用于设置热力图中每个点的“影响半径”(相当于核密度可视化中的带宽参数),该值越高,外观就会更平滑,详细程度也更低。该属性也可以是一个缩放函数,允许在缩放时调整外观。在实际可视化中,常设置为与缩放级别相关。

2 heatmap-weight

该属性用于定义热力图中某点对热力图贡献的权重,在实际可视化中,常设置为与属性值相关。

3 heatmap-intensity

该属性用于在全局范围内调整热力图外观的强度,值越高,每个点对外观的影响就越大。这种关系是线性的。例如,将heatmap-intensity设置为10.0相当于重复绘制默认值1.0的数据集十次。在实际可视化中,常设置为与缩放级别相关,缩放级别越高,该值应越大,以减少热力失真。

4 heatmap-color

该属性用于定义热力图中最重要的属性-颜色,在实际可视化中,常设置为与热力图密度相关。

5 heatmap-opacity

该属性用于定义热力图的透明度。

6 改进

参考网站https://www.mapbox.cn/coronavirusmap/,修改配色,代码如下。

map.addLayer({id: "virus-heatmap",type: "heatmap",source: "virus-source",paint: {// 使用new_diagnosis属性"heatmap-weight": ["interpolate",["linear"],["get", "new_diagnosis"],0,0,1000,1],"heatmap-intensity": ["interpolate",["linear"],["zoom"],0,3,9,5],// Color ramp for heatmap.  Domain is 0 (low) to 1 (high).// Begin color ramp at 0-stop with a 0-transparancy color// to create a blur-like effect."heatmap-color": ["interpolate",["linear"],["heatmap-density"],0,"rgba(0, 0, 0, 0)",0.1,"#927903",0.15,"#ffd403",1,"red"],// Adjust the heatmap radius by zoom level"heatmap-radius": ["interpolate",["linear"],["zoom"],0,2,1,4,2,8,3,16,4,32,5,64,6,128,7,256,8,512,9,1024],// Transition from heatmap to circle layer by zoom level"heatmap-opacity": ["interpolate",["linear"],["zoom"],5,0.95,6,0]}}
);

7 效果

八 总结

代码+数据:@GitHub

微信公众号:林木菌

若有任何问题,欢迎留言交流。

Mapbox GL可视化之热力图相关推荐

  1. GIS开发:推荐Mapbox gl解决方案

    在二维地图的开发中,实现类似于百度.高德地图那样加载简体的模型,使用mapbox gl是一个比较好的解决方案. https://docs.mapbox.com/mapbox-gl-js/api/ 类似 ...

  2. Mapbox GL JS介绍及使用

    Mapbox GL JS介绍及使用:(以web端基本交互实现为例) Mapbox GL JS 是一个 JavaScript 库,它使用 WebGL,以 vector tiles 和 Mapbox st ...

  3. 初探mapbox地图可视化实例,带你看看家附近有多少咖啡馆

    本实例使用的是Mapbox GL JS,开发文档地址:请点击 Mapbox GL JS 是一个用于 Web 上矢量地图的 JavaScript 库.它的性能.实时样式和交互功能为在网络上构建快速.沉浸 ...

  4. Mapbox GL JS本地化实践

    最近在搞android Mapbox SDK,一直想要本地化,看到这篇文章,赶紧转载一下,后面要用,非常感谢作者! 作者:猿基地 链接:https://www.jianshu.com/p/693f38 ...

  5. Mapbox gl tile瓦片渲染点以及图片Icon

    Mapbox gl tile瓦片渲染点以及图片Icon 1. 效果图 2. 源码 参考 1. 效果图 点效果图如下: 以图标渲染效果图如下: 注意图片要不能跨域,需要下载的下来才能正常展示. 2. 源 ...

  6. Mapbox HTML可视化点,线,多线,面带底图

    Mapbox HTML可视化点,线,多线,面带底图 1. 效果图 2. 源码 参考 1. 效果图 如下所示:可显示蓝色点.红色线.红色多线.浅紫色多边形面: 2. 源码 <!DOCTYPE ht ...

  7. Python使用matplotlib可视化相关性分析热力图图heatmap、使用seaborn中的heatmap函数可视化相关性热力图(Correllogram)

    Python使用matplotlib可视化相关性分析热力图图heatmap.使用seaborn中的heatmap函数可视化相关性热力图(Correllogram) 目录

  8. Echarts数据可视化series-heatmap热力图,开发全解+完美注释

    全栈工程师开发手册 (作者:栾鹏) Echarts数据可视化开发代码注释全解 Echarts数据可视化开发参数配置全解 6大公共组件详解(点击进入): title详解. tooltip详解.toolb ...

  9. 初识mapbox GL

    一.概述 最近由于项目的需求,借此机会对mapbox GL做了一个系统的学习,同时也对整个学习过程做一个记录,一方面留作自用,另一方面也希望看到此文的人在学习mapbox GL的时候,能够有所启发.有 ...

最新文章

  1. phonegap html 缩放,phonegap常用事件总结(必看篇)
  2. 在.NET开发面向Oracle数据库的应用程序
  3. (SPFA+最短路变形+回路对起点的影响)Arbitrage
  4. exadata磁盘组无法mount恢复---惜分飞 1
  5. 微会显示服务器当前线路忙,免费电话之争:触宝电话/微会谁更强
  6. 【收藏】ASP.NET英文技术文章推荐[10/28 – 11/3]
  7. 补全aaz288 可能有问题的过程 P_COMPL_AAZ288
  8. stm32 整数加法循环时间_剑指 Offer 65. 不用加减乘除做加法 leetcode 剑指offer系列...
  9. 树莓派-python之adc电压采集的实现
  10. Linux之VNC远程桌面安装和使用
  11. Logitech Flow无法识别另一台电脑,显示“请启用其他计算机上的Logitech Flow”的问题
  12. Docker基础25--5.6 配置docker远程服务
  13. 常用数据库URL地址的写法
  14. 期货数据保存到excel里面
  15. 关于结构体,枚举,联合的一些知识
  16. Dubbo学习笔记:No provider available for the service ...异常问题的解决
  17. 桂电计算机系入学怎么分班,桂电研究生-()学期课程总表
  18. android 仿商城瀑布流,android_waterfall
  19. openwrt下无线网桥设置,bridge AP模式
  20. Cocos Creator 中制作一个倒计时显示

热门文章

  1. 惠民计算机学校,惠民县职业中等专业学校
  2. annoconda 创建虚拟环境 删除虚拟环境
  3. 【案例6】NC安装部署常见问题
  4. 大飞品树莓——自定制树莓派4B系统安装
  5. python实现数据可视化_使用Matplotib python实现数据可视化
  6. 使用PongoOS读取苹果ARM64 CPU功能支持寄存器
  7. Android在app中打开另一个app
  8. 10倍于以往的传输速度带宽,Bluetooth(蓝牙)4.2标准发布
  9. 51单片机-4-数码管的显示
  10. 货币的时间价值之复利计算公式