数据可视化研究一直是一个很热门的领域。如何将数据以清晰、直观的形式展示出来一直是人们不懈努力的方向。从简单的表格到各种线性图、柱状图、饼状图,展示数据的方式多种多样。Web的出现扩大了数据的受众,而如何将可视化技术与Web技术结合起来,在浏览器中直观展示数据,则是近年来技术界在一直追求和探索的新领域。
最近有这样一个需求:有一批基于地理位置的数据,需要在地图上以不同颜色来展示这批数据。举个例子,比如测量大气中二氧化碳的浓度,在某一位置的浓度越高,那么在地图上的相应点上标注的颜色越浓,在某一位置浓度越低,标注的颜色越淡。
以前从来没有开发过有关地图的应用,对于数据的可视化方面也没有任何基础。我同时从两个方面开始着手解决这个问题。
一个方面是地图。我先熟悉了高德地图、百度地图和google地图的API,明白了这些地图的运作原理。直觉上认为应该使用API提供的地图图层或者覆盖物来解决问题。可是到底该采用什么技术来生成满意的图层或覆盖物,我并没有更进一步的线索。
另一个方面是我想找到一个词来描述我的这个需求。我这个需求以前肯定有人提过,只是我现在还不知道我这个需求更专业的描述是什么。通过不断的搜索,搜索再搜索,我终于从一篇博客中找到了线索,顺藤摸瓜,我最终在维基百科上找到了概括我需求的术语。我的需求从最根源上来讲就是要制作一个主题地图,英文叫做Thematic Map, 维基百科上的解释大致是这样的:主题地图是一种展示特定地理区域内有关主题的地图。而制图员采用很多中方法来制作主题地图,其中有五种很重要的技术(这些技术都没有准确的翻译):Choropleth, Proportional symbol, Isarithmic or Isopleth, Dot, Dasymetric。而其中的Dasymetric正是我所需要的。然后,我又继续找有关Dasymetric的相关介绍和说明,可是这些介绍都偏重于地图制图方面,和Web一点关系都没有。
两个方面都遇到了瓶颈,工作无法继续进行。每当遇到瓶颈的时候,我的做法是先放一放,做点别的事情,不去想这件事。
过了两三天。我又重新回过头来继续想办法。
在一个很偶然的浏览中,我看到了这样一个词Heat Map, 然后就豁然开朗了。Heat Map正是我所需要的技术。它将与地理位置有关的数据以颜色的形式直观展现出来。我找到三篇介绍HeatMap的文章1,2,3。接下来就是调研Heat Map的一些项目。我找到几个:heatmapapi(这个网址我访问不了,估计是被屏蔽了),gheat, heatmap.js, heatmaptool, openheatmap, heatcanvas, google fusion table. 我比较喜欢heatmap.js,这个项目支持在google地图和OpenLayers两个地图上生成热力地图,而且颜色很美观。heatcanvas也可以,它能在百度地图上生成。
我写了个随机程序生成数据,测试了一下heatcanvas和heatmap.js。下面是生成后的效果图。
上面这张是用heatcanvas产生的
上面这张是用heatmap.js产生的。
总结: 碰到一个问题之后,最关键的还是如何定义问题,如何描述问题。如果能找到一个恰当的术语来描述自己所碰到的问题,那么在很大程度上这个问题也就解决了。因为自己碰到的问题前人肯定也碰到过,前人对这个问题有过很深入和细致的研究,自己所要做的就是学习别人的成果加以利用。切忌自己造轮子!!