GeoJSON和TopoJSON之间的区别


Answers:


147

如果您关心文件的大小或拓扑,请使用TopoJSON。如果您都不在乎,则为简单起见,请使用GeoJSON。

TopoJSON的主要优点是大小。通过消除冗余并使用更有效的坐标固定精度整数编码,TopoJSON文件通常比GeoJSON文件小一个数量级。TopoJSON文件的第二个优点是对拓扑进行编码具有有用的应用程序,例如拓扑保留简化(类似于MapShaper)和自动网格生成(如本示例中的状态边界))。

这些优点是有代价的:更复杂的文件格式。例如,在JavaScript中,通常会使用TopoJSON客户端库将TopoJSON转换为GeoJSON,以与d3.geoPath等标准工具一起使用。(在Python中,您可以使用topojson.py。)此外,TopoJSON的整数格式需要对坐标进行量化,这意味着如果您不小心会导致舍入误差。(请参阅有关文档topojson -q。)

对于不需要拓扑的几何的服务器端操作,那么GeoJSON可能是更简单的选择。否则,如果您需要拓扑或要通过导线将几何图形发送到客户端,请使用TopoJSON。


2
即使我确实记得阅读过有关“共享线段”的信息,但我仍然假设“ topo”代表“地形”,但事实并非如此。这里有一个了解“拓扑”和“地形”之间的区别尼斯(前者是topojson“地形”的由来) -我将不得不阅读Mike的文章在这里大约推断拓扑
红豌豆

我更喜欢在通过Internet布线时使用geobuf而不是诸如toposjon这样的混合解决方案。
tibetty

9

TopoJSON非常适合用于相互“捕捉”的整洁功能(例如管理区域),但对更多混乱或自然数据却无济于事。如果您的数据仅仅是点,那么TopoJSON根本没有帮助。


22
即使没有共享的拓扑,TopoJSON的固定精度整数编码也可以比GeoJSON的浮点数有效得多。
mbostock 2013年

16
真正。我错了。我会删除答案,但我们会丢失您的宝贵评论!
sgillies

哈,谢谢。:)我已经提交了一个单独的答案,其中包括其他注意事项。
mbostock 2013年

3

这取决于许多考虑。其中包括:

1)您要表示的一个或多个功能的性质(数据模型)2)您希望与这些功能相关联的任何属性3)您希望这些功能在页面上如何表现(静态与动态)

但是,这是一个很难回答的抽象问题。关于某些细节,如果您具有连续的多边形覆盖范围或要素共享边界的其他情况,则topojson的模型可让您利用冗余并将其分解为模型。

阅读文档,剖析示例(例如bl.ocks.org),然后获取一些数据并将其表示在geojson和topojson中,并创建自己的可视化文件。


谢谢wsvekla。我一直在这样做-我实际上在bl.ocks.org(bl.ocks.org/wsvekla/4533258 bl.ocks.org/4348435)上找到了您的要旨,但对Google来说却并不容易。但是,正如您指出的那样,有很多注意事项,我正在尝试并排比较以了解这一点。
路加福音

2
这两个块引用相同的原始shapefile:bl.ocks.org/4485308bl.ocks.org/4348435。当我最终掌握了如何在同一文件中用相同的数据表示多个要素(国家,部门和市政边界)时,TopoJSON真正开始陷入困境(您无法使用geojson做到这一点)。这是通过过滤器函数完成的:function(a,b){return a.id!== b.id;})。尝试了解这一点,并且topojson将开始变得有意义。有关更好的代码参考和最低限度的极简主义,请参阅Mike的文章:bl.ocks.org/4108203
wsvekla
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.