数据可视化:使用TopoJSON画图

来源:互联网 发布:网络监控是什么 编辑:程序博客网 时间:2024/05/21 17:39

因为项目的原因,需要用到D3,这两天刚开始学习,昨天遇到了一个问题:项目需要用到的地图文件是TopoJSON类型的,而在网上找了好多例子,用到的文件全部是GeoJSON格式的,这也没办法,谁让TopoJSON只在D3中常用呢,虽然到现在也没有完美的解决遇到的问题,不过由于时间原因,要去忙其他工作了,还是把这次解决问题的步骤记录下来,过两天有时间了继续学习!

一、GeoJSON和TopoJSON的区别

这个问题参见这篇文章:GeoJSON和TopoJSON的区别,在此特别感谢馒头大大的这个系列文章,给我D3的学习提供了很大的便利。

不过这篇文章里面对于TopoJSON的描述非常简单,在网上找了N久,终于又找到了段描述的话:TopoJSON模式,以我这少半吊子的英文水平,勉强给翻译下来了:

【Topojson是一种使用拓扑编码方式的GeoJSON扩展,而不是代表着离散的几何图形(也可以称为几何体,因为json中的数据实际上是立体的),几何图形在TopoJSON中被一种叫做arcs(弧线,也是TopoJSON中的结构)的共享连接线联系在一起。Arcs实际上是点的集合,把图形用线连接起来可以叫做弧线。每条弧线只会被定义一次(这一点跟GeoJSON不通,GeoJSON的边界可能会被多次重绘),但是可以在不通的形状中多次引用,因此减少了数据冗余而缩小了文件大小。另外,TopoJSON促使应用程序使用拓扑结构,例如使用保留拓扑结构(topology-preserving)的简单形状、自动着色(d3中常用)、统计地图等。TopoJSON说明的引用实现是可行的,作为一个命令行工具将GeoJSON(或者ESRI形状文件)转换成TopoJSON,然后在客户端Javascript库重新将TopoJSON转回GeoJSON。】

翻译地不是很通顺,不过理解了就行了,另外,有两点需要注意的:1.GeoJSON中的type用Feature,而TopoJSON中则用Polygon或者MultiPolygon,这也是两者的重要区别,不过这条算我白说,源码开头就有声明;2.GeoJSON和TopoJSON之间可以转换,如果不是考虑json文件大小和页面响应速度的话,实际上使用GeoJSON还是比较简单的,在mapshaper.org/这个页面可以进行转换。

二、使用TopoJSON画图:

以上,搞明白了两者的区别之后,就开始找代码copy吧,许多创造都是从copy开始的,这句话我喜欢。浏览了很多页面之后,突然发现了一个页面,里面包含了大量的d3.js示例,比如http://bl.ocks.org/mbostock/4183330和http://bl.ocks.org/mbostock/4183330,事实上,也只有两个copy完代码之后运行效果最接近原始效果,虽然也有许多瑕疵,不过先记录下来,有时间继续研究。

0 0
原创粉丝点击