D3.js 是一个可视化的 Javascript 库,使用它可以方便的将数据以图形化的方式展示在 HTML 页面中。
现在我们的需求是根据行政区域的地理显示不同区域的状态(如温度、人口等)。
首先需要获取区域的边界数据,以大武汉为例,市下面划分出了 13 个区,
首先获得这些区的名称,然后利用百度地图的 API 获取区域边界数据,方法是:
在 http://developer.baidu.com/map/jsdemo.htm#c1_10 页面的源码编辑器中修改 getBoundary 函数为
| |
运行这段代码,会将对应的区域的坐标路径输出到控制台中,注意一个行政区域可能会由多个区域组成
获取完数据后,需要将它保存为 D3.js 需要的格式 GeoJSON feature collection,参见 http://geojson.org/geojson-spec.html
(要注意的是 Baidu 获取的貌似和我们需要的是反的,如果不倒序,则显示的每个区域都几乎覆盖了整个地球,剩下没有覆盖的恰好是我们需要的区域范围)
然后再定义对应的区域的数据(如温度,人口等),形如
| |
其中 x,y 为文字显示的位置,value 为要显示的数据,显示时会根据此数据自动套用 d3.scale.quantize 定义的颜色
最后在 HTML 页面用 D3.js 将两种数据载入、关联起来,关键代码如下
| |