出于对地理和旅行的热爱,一直都对绘制地图很感兴趣。之前有一篇置顶的blog就是用地图上标颜色来track这些年旅行的足迹的。
当时用的是google提供的geochart来实现的。它有不少文档和sample,照着改改很快就可以做出一个简单的版本。这两天把它改成用D3来实现的了,更加方便灵活,可控性强。–主要是google服务器被强的时候不会受影响^-^;而且以后可以往地图上加更多额外属性。
最近因为工作的关系,接触了一些D3。D3是一个javascript的library,主要用于以数据驱动的方式来操作网页的DOM object。简单点说,用D3可以方便的在网页上根据数据来画图。比如你有一组报表数据,在excel里边点几下就可以根据这些数据生成柱状图,折线图等等;而D3的用途就是在网页上画这些图。现在各种应用都是基于web的,在网页上画图就很有用了。
D3自然可以用来画地图,只要提供一组用于描述地图的数据就可以了。所谓地图数据,主要就是一堆的坐标点,你把这些坐标点依次连起来就可以得到一个多边形区域–地图就这么画出来了。D3接受GeoJson和TopoJson格式的地图数据–其实就是用json格式描述的地图数据,大同小异。
网上已经有很多发布出来的GeoJson/TopoJson格式的地图数据文件,不过以欧美的为主。如果要画中国地图的话,一方面精度和信息量不够,比如要绘制市县级别的图,或者要在地图上加入其他河流,公路等信息;另一方面有些地区会有问题,比如台湾,藏南。所以建议使用国内发布的地图数据。大部分地图数据使用shp格式,http://ogre.adc4gis.com/这个网站很不错,可以在线将shp格式转换成GeoJson, 而http://www.mapshaper.org/则又可以将GeoJson转换成TopoJson。所以想画什么都可以啦。
最后share一个简单的画中国地图的sample,外加已经转换好的省会坐标以及省级行政区图。下次准备试试找一些公路铁路河流数据的图来玩儿。