可视化之AQICN

上一篇和大家分享了《可视化之Berkeley Earth》,这次看一看下面这个网站---aqicn.org。先做一个提示:文末有惊喜~

该网站在中国有一定的权威性,PM2.5数据有一点敏感,它竟能提供全球级别,实时的,详尽的AQI数据,以及每个站点的经纬度(精度在十米内),它的口号“provide information as clean as the air one wish to have”——提供的每一份数据,如同每个人所期望的空气那样干净。

但该网站又有一点神秘感,没有过多的自我介绍,服务器IP来自美国,团队成员主要在北京,能够获取全球这么详细的数据,总感觉背后有很多不能说的秘密,网上只找到一篇《MY FAVORITE POLLUTION WEBSITE: AQICN.ORG》,感兴趣的可以读一下。

去年底抓取它的PM25实时数据,但觉得这是老外的良心网站,如果把URL和网站名称曝光,有被墙的隐患,所以没有透露。最近发现它竟然推出了json api的服务,生意越做越大,那今天老夫就“好事做到底”,揭底该网站四个未公开的,却是最重量级的服务。

1AQI Map

这是bounds查询的url:

https://api.waqi.info/mapq/bounds/?bounds={RECTANGLE}&inc=placeholders&k={KEY}&_={DATE}

官网API里仅开发了经纬度的点查询,但它自己使用是bounds面查询,另一个比较坑的是DATE参数,我自己验证是无效的,所以该API无法做到对历史数据的查询,当然,这也可以理解,毕竟每个站点数据更新时间不一,比如中亚可能好几个月才更新一次。因为之前的PM文章详细介绍过这部分,不再重复。

2AQI Forecast

如上是城市的天气预报服务,对应的数据url如下:

https://api.waqi.info/api/feed/@{cityid}/obs.en.json

其中@参数是City编码,比如北京对应的id是1451。返回JSON对象如下:

不难理解,简单说一下框选的内容,city是该城市的内容,nearest是该城市范围内的气象站点,都有geo属性,提供对应的经纬度,误差在百米内。Iaqi留到下面说,先说相对简单的—forecast属性。顾名思义,也就是气象预报的内容,包括aqi和wind两部分。

先看上图对应表格中的AQI数值,每一项对应该时间点AQI的最大最小值。再看下图wind属性:

这个就不那么直观了,大家能看出对应关系吗?我看了一个多小时,没看出来,只好调试源码:三小时(采用UTC时间)为一时间段,对应三组数据,如上图,c是气温,获取气温的最大值和最小值,w[0],w[1]对应当前时段风速的最小最大值,w[2]是以正南为起始点,顺时针方向的旋转角度,表示风向,蓝色是风速的柱状图效果。这样看上去就很明白了吧。事后让同事看对应关系,他竟然很快就“蒙“对了。

3AQI Current

实时天气数据和forecast都在一个json对象中,对应iaqi属性,如下图所示,正好有11项,分别对应PM25,PM10等十一个指标。

对应的PM25属性如下:

p标志该指标名称为pm2.5,v中保存的是最近48小时内的极值和当前值,i是该数据的提供方。iaqi[0].h[2]下面的一堆乱码是什么,猜测应该是每个小时的PM25数值,用于显示左侧柱状图,可肉眼看不出其中的数值映射关系,这时候就需要用心眼了---调试,原来Decode代码如下:

我很好奇这段代码的出处,因为之前看高德地图中矢量瓦片中也采用了类似的解密方式,有了解的请告诉我,再次感谢。最终该函数将乱码decode为48个PM值。

4Forecast Map

当你在网页上看到该动态图时,假设你要实现这个效果,所需要的数据格式,用Canvas 2D还是WebGL,以及流畅度和交互式操作?

首先,每一个城市有自己的配置文件,应该是JSP动态网页来获取的,比如New York的配置信息如下:

如上请求的是pm25数据,model是ncep-aqm。根据这些参数,我们能够获取如下的url

https://forecast.waqi.info/forecast/aqi/ncep-aqm/best/pm25/conf.json

其对应的json信息如下:

如上也比较容易理解,其中size指该区域的像素宽高,bounds为经纬度范围,其中在usepa字段下有8.png(图片)和jsmap(二进制)这两种形式,可以简单的认为是PM25的范围分段。两者思路相同,网站使用的是jsmap这种形式。

如上,从lut可知pm25值分为17份,范围是0~500。将lut的17个区间归类到domain中,domain[i]对应range[i]份。无论是jsmap还是png,规范都一致(png更精细一些)。不同的是files,png对应的是图片的相对路径,效果如下。而jsmap是二进制流形式

代码中会给出一个色带"#ffffff", "#5ec569", "#b2d744","#f2c500", "#fe8d00", "#fa0067"],等分为17份,形成渐变色,然后根据jsmap对应的lut构造出一个level-color的分段映射表。保存在this.stream.colors.lut属性中。

创建好了颜色表,接着就会请求对应时段的数据,url如下:

https://forecast.waqi.info/forecast/aqi/ncep-aqm/best/pm25/jsmap/stream.jsmap

对该数据进行解码后参与canvas的渲染,解码的算法和上面的decode相似,最终会解析为一个点串points,里面有v,x,y,n四个分量,分别是pm25值对应颜色表中的value值,xy是对应该区域的像素偏移量,n标识该值连续的次数。这样,建立了最终的value-level-color的完整映射关系,通过canvas 2d完整动态渲染的整个过程。

5其他

在技术角度,把AQICN分解的差不多了,不知道大家有什么收获,因为篇幅太长,所以本篇就到此结束吧。如果有不对的地方或疑问,不妨留言交流。

下一篇会介绍earth.nullschool这个可视化效果很棒的网站,然后会再来一篇个人对这三个网站的对比和分析,把一些个人的想法拿出来和大家分享。

今天就写到这,在公众号中回复“AQICN”,不区分大小写,可以获取本文的Demo。

时间: 2024-10-11 07:07:20

可视化之AQICN的相关文章

数据可视化之总结

之前三周分别针对Berkeley Earth,AQICN和Earth Nullschool三个网站的前端技术做了总结,分别简称为BAE,今天我们抛开技术,和大家聊两点: 三个网站的对比 数据可视化的认识 三个网站的对比 如果做一个比喻,我的感觉是B像一个事业有成的中年,A像一个充满活力的青年,而E则是一位不拘一格的艺术家.如下是三个网站在中国区域的AQI可视化效果,看到这个对比图后,你的第一印象是什么?中间京东618广告?听的我一口血吐到屏幕上. 首先,Berkeley有大量的原始数据,对数据管

《柴静:穹顶之下》中用到的数据可视化

近几天柴静的<穹顶之下>播放量已经破亿,笔者看了也十分感动.该视频中出现了不少可视化图表,本文对此进行总结. 我的咽喉比较敏感,只要空气质量不好,吸一口气就感觉咽喉部痒痒的.因此,我比一般人更注重空气质量.我经常关注国内的空气质量指数: http://aqicn.org/map/ 看到偶尔有几个绿点时,心情很愉快. 柴静自费百万,用简单易懂的语言.视频.幻灯片介绍了雾霾的危害,并提出许多解决建议,让我深受感动.其中有一句话我的印象很深,是在说到父母要不要让小孩早点儿适应雾霾的时候,一个美国专家

Dynamics 365 for CRM: Sitemap站点图的可视化编辑功能

Dynamics 365 for CRM 提供了Sitemap站点图的可视化编辑功能 在之前的所有版本中,我们只能通过从系统中导出站点图的XML进行编辑后再导入(容易出错),或使用第三方的Sitemap编辑工具进行编辑(非常方便). 在Dynamics 365 for CRM 中原生地提供了站点图的可视化编辑功能,非常强大方便: 1.在默认解决方案或自定义解决方案的"客户端扩展"中,找到"站点地图"记录:如果没有则需要点击"添加现成",添加&qu

可视化HTML编辑器

[荐] 可视化HTML编辑器 CKEditor CKEditor是新一代的FCKeditor,是一个重新开发的版本.CKEditor是全球最优秀的网页在线文字编辑器之一,因其惊人的性能与可扩展性而广泛的被运用于各大网站. 可配合使用的扩展有 文件管理器KCFinder 在线演示:h...更多CKEditor信息 最新新闻: CKEditor 4.5.6 发布,可视化 HTML 编辑器 2015年12月10日 [荐] 可视化HTML编辑器 KindEditor KindEditor 是一套开源的在

地理数据可视化:Simple,Not Easy

如果要给2015年的地理信息行业打一个标签,地理大数据一定是其中之一.在信息技术飞速发展的今天,“大数据”作为一种潮流铺天盖地的席卷了各行各业,从央视的春运迁徙图到旅游热点预测,从大数据工程师奇货可居到马云布道“DT”时代,“大数据”被推到了一个前所未有的高度,连国家领导人出访演讲都言必称大数据.地理信息数据天生具有大数据属性,作为整天和地理信息数据打交道的地信人自然不甘落后,地理大数据概念脱颖而出. 地理大数据是什么?大体来说就是把社会经济.自然资源.商业信息等但凡具有一点空间维度的数据一股脑

可视化格式模型(visual formatting model)

对于可视化格式模型这个概念,官方的原话是这样的:How use agents process the document tree for visual media.翻译过来就是用户端在媒介中如何处理文档树.用户端这个对于我们来说通常指的就是浏览器.媒介呢,就是展示页面的介质,比如显示器.文档树呢,就是源文档中元素树的编码.树中,每一个元素恰好有一个父元素,当然除了根元素. 一.框的布局影响因素 可视化格式模型中,每一个文档树中得元素都会根据box module(盒模型)来产生零个或多个控制框.这

使用HTML5 API(AudioContext)实现可视化频谱效果

HTML5 可视化频谱效果 如今的HTML5技术正让网页变得越来越强大,通过其Canvas标签与AudioContext对象可以轻松实现之前在Flash或Native App中才能实现的频谱指示器的功能. Demo: Cyandev Works - HTML5 Audio Visualizing 开始使用AudioContext The AudioContext interface represents an audio-processing graph built from audio mod

Python - Seaborn可视化:图形个性化设置的几个小技巧

1 概述 在可视化过程中,经常会对默认的制图效果不满意,希望能个性化进行各种设置. 本文通过一个简单的示例,来介绍seaborn可视化过程中的个性化设置.包括常用的设置,如: 设置图表显示颜色 设置图表标题,包括显示位置,字体大小,颜色等 设置x轴和y轴标题,包括颜色,字体大小 设置x轴和y轴刻度内容,包括颜色.字体大小.字体方向等 将x轴和y轴内容逆序显示 设置x轴或y轴显示位置 本文的运行环境: windows 7 python 3.5 jupyter notebook seaborn 0.

influxdb+grafana业务数据可视化

了解数据库的TPS.QPS是作为一个运维DBA是非常必要的,那什么是TPS.QPS呢,简单的理解是: QPS:每秒查询数,即对数据库每秒的DML的操作数 TPS:每秒事物处理,即对数据库每秒DDL操作数 通过了解他们,可以掌握一个实例的基本工作运行状态 如何对于对他们进行页面可视化,是DBA的一个装逼神器,本章主要介绍通过时序数据库(influxdb)+grafana+简单的python代码实现 时时监控它们,什么是时序数据库可以在其他章节了解,这里不做过多介绍 Let's go..... 1.