GeoJSON 和 TopoJSON 的区别

Posted

技术标签:

【中文标题】GeoJSON 和 TopoJSON 的区别【英文标题】:Difference between GeoJSON and TopoJSON 【发布时间】:2013-01-22 08:06:43 【问题描述】:

GeoJSON 和 TopoJSON 有什么区别,我什么时候可以使用其中的一种?

description of TopoJSON on GitHub 表示 TopoJSON 文件小了 80%。那么为什么不一直使用 TopoJSON 呢?

【问题讨论】:

【参考方案1】:

如果您关心文件大小或拓扑,请使用 TopoJSON。如果您都不关心,那么为了简单起见,请使用 GeoJSON。

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

这些优势是有代价的:更复杂的文件格式。例如,在 javascript 中,您通常会使用 TopoJSON client library 将 TopoJSON 转换为 GeoJSON,以便与 d3.geoPath 等标准工具一起使用。 (在 Python 中,你可以使用topojson.py。)另外,TopoJSON 的整数格式需要量化坐标,这意味着如果你不小心它会引入舍入误差。 (请参阅topojson -q 的文档。)

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

【讨论】:

尽管我确实记得读过“共享线段”,但我仍然认为“topo”代表“地形”,但事实并非如此。这是nice read about the difference between "topology" and "topography" (the former is the origin of "topo" in topojson)——我必须阅读迈克的文章here about inferring topology 我更愿意使用geobuf,而不是像 toposjon 这样的混合解决方案,当通过互联网进行有线连接时。【参考方案2】:

TopoJSON 非常适合用于“捕捉”彼此的整洁特征,例如行政区域,但对更杂乱或有机的数据无济于事。如果你的数据只是点,那么 TopoJSON 就没有任何帮助了。

【讨论】:

即使在没有共享拓扑的情况下,TopoJSON 的定精度整数编码也可以比 GeoJSON 的浮点更高效。 是的。我错了。我会删除我的答案,但我们会失去您的宝贵意见! 哈,谢谢。 :) 我已经提交了一个单独的答案,其中包括其他注意事项。【参考方案3】:

这取决于许多因素。其中有:

1) 您要表示的特征的性质(数据模型) 2)您希望与这些功能相关联的任何属性 3) 您希望这些功能在页面上的行为方式(静态与动态)

但是,这是一个很难抽象地回答的问题。关于某些细节,如果您有一个连续的多边形覆盖或其他特征共享边界的情况,topojson 的模型允许您利用冗余并将其纳入模型。

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

【讨论】:

感谢 wsvekla。我一直在这样做 - 事实上,我在 bl.ocks.org 上找到了你的要点(bl.ocks.org/wsvekla/4533258bl.ocks.org/4348435),但对谷歌来说并不容易。但是,正如您指出的那样,有很多考虑因素,我正在尝试并排比较以了解这一点。 这两个块引用了相同的原始 shapefile:bl.ocks.org/4485308 和 bl.ocks.org/4348435。当我终于掌握了如何在同一个文件中用相同的数据表示多个特征(国家、部门和市政边界)时,TopoJSON 才真正开始深入人心(你不能用 geojson 做到这一点)。这是通过过滤函数完成的:function(a,b)return a.id !== b.id;)。尝试理解这一点,topojson 将开始变得有意义。如需更好的代码参考和极简主义,请参阅 Mike 的块:bl.ocks.org/4108203

以上是关于GeoJSON 和 TopoJSON 的区别的主要内容,如果未能解决你的问题,请参考以下文章

D3为geojson添加路径但不添加topojson

是否可以在 R 中读取 geoJSON 或 topoJSON 文件来绘制等值线图?

如何按坐标过滤 GeoJSON/TopoJSON 数据?

平滑 D3.js/GeoJSON/TopoJSON/Shapefile 中的弧线/绘图点(沿途某处)

topojson转换与应用

topojson转换与应用