因为项目的原因,需要用到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库重新将TopoJ