GeoJSON和TopoJSON之间的区别

105

GeoJSON和TopoJSON有什么区别,我应该在何时使用它们之一?

GitHub上的TopoJSON描述表明,TopoJSON文件比GeoJSON文件小80%。那为什么不总是使用TopoJSON呢?

3个回答

160
如果您关心文件大小或拓扑结构,那么请使用TopoJSON。如果您不关心这两者,为了简单起见,请使用GeoJSON。
TopoJSON的主要优势是文件大小。通过消除冗余并使用更有效的定点整数编码坐标,TopoJSON文件通常比GeoJSON文件小一个数量级。TopoJSON文件的次要优势是编码拓扑结构具有实用的应用,例如保持拓扑结构的简化(类似于MapShaper),以及自动生成网格(如this example choropleth中的州边界)。
这些优点的代价是更加复杂的文件格式。例如,在JavaScript中,您通常会使用TopoJSON客户端库将TopoJSON转换为GeoJSON,以便与标准工具(如d3.geoPath)一起使用。 (在Python中,您可以使用topojson.py。)此外,TopoJSON的整数格式需要量化坐标,这意味着如果不小心处理,可能会引入舍入误差。(请参见topojson -q的文档。)
对于不需要拓扑结构的服务器端几何操作,GeoJSON可能是更简单的选择。否则,如果您需要拓扑结构或想将几何图形发送到客户端,请使用TopoJSON。

2
尽管我记得读过“共享线段”的内容,但我仍然认为“topo”代表“地形”,但实际上并不是这样。这里有一篇关于“拓扑”和“地形”之间区别的好文章(前者是topojson中“topo”的来源) - 我需要阅读Mike在这里推断拓扑的文章 - Nate Anderson
我更倾向于使用geobuf,而不是像toposjon这样的混合解决方案,当在互联网上传输时。 - tibetty

12

TopoJSON非常适合整齐的地理要素,例如行政区域,因为它们能够"吸附"在一起,但是对于比较杂乱或有机的数据则没有帮助。如果您的数据只包含点,则TopoJSON无法提供任何帮助。


25
即使没有共享拓扑结构,TopoJSON 的固定精度整数编码在效率上也可以比 GeoJSON 的浮点数更高。 - mbostock
20
没错,我错了。我可以删除我的回答,但是这样您宝贵的评论也会一并消失! - sgillies
哈,谢谢。 :) 我已经提交了一个包括额外考虑因素的单独答案。 - mbostock

3
这取决于许多考虑因素,其中包括以下几个方面:
1)您想要表示的功能的性质(数据模型) 2)您想要与这些要素相关联的任何属性 3)您希望这些功能在页面上如何行为(静态vs动态)
然而,这是一个抽象问题难以回答。 关于一些具体问题,如果您有一个连续的多边形覆盖或其他情况,其中要素共享边界,则topojson的模型允许您利用冗余并将其因素化到模型中。
阅读文档,分解示例(例如bl.ocks.org),然后获取一些数据并将其表示为geojson和topojson,并创建自己的可视化效果。

谢谢wsvekla。我一直在做这个 - 实际上我在bl.ocks.org上找到了你的代码片段(http://bl.ocks.org/wsvekla/4533258 http://bl.ocks.org/4348435),但是不容易通过谷歌搜索找到。然而,正如你所指出的,有很多考虑因素,我正在尝试进行并排比较以学习这个。 - Luke
2
这两个区块引用了同一个原始shapefile: http://bl.ocks.org/4485308 和 http://bl.ocks.org/4348435。当我终于理解如何使用相同的数据在同一文件中表示多个要素(国家、部门和市级边界)时,TopoJSON真正开始深入人心(你无法使用geojson实现这一点)。这是通过filter函数实现的:function(a,b){return a.id !== b.id;})。试着理解它,TopoJSON就会开始变得有意义。为了更好地参考代码和最小化,可以查看Mike的区块:http://bl.ocks.org/4108203。 - wsvekla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接