【问题标题】:Large geojson to topojson大geojson到topojson
【发布时间】:2017-09-16 19:26:09
【问题描述】:

我正在尝试将相对较大的 geojson 文件 (383 MB) 转换为 topojson 以将其与 D3.js 一起使用。我在 mac book pro 2016 上运行以下命令:

geo2topo test.json > test.topojson

还有以下简化命令:

geo2topo test.json > test.topojson -q 10000

它们都产生相同的以下错误:

buffer.js:503 throw new Error('"toString()" failed'); ^

错误:“toString()”失败 在 Buffer.toString (buffer.js:503:11) 在 JSON.parse() 在读取流。 (/usr/local/lib/node_modules/topojson/node_modules/topojson-server/bin/geo2topo:107:46) 在 emitNone (events.js:91:20) 在 ReadStream.emit (events.js:188:7) 在 endReadableNT (_stream_readable.js:975:12) 在 _combinedTickCallback (内部/进程/next_tick.js:80:11) 在 process._tickCallback (internal/process/next_tick.js:104:9)

我查看了各种线程,例如this one,但没有找到任何解决方案。请注意,geojson 本身格式正确,可以在 d3.js 中加载,但由于其大小无法在 Web 应用程序中使用。

【问题讨论】:

  • 我遇到了完全相同的问题。你找到解决办法了吗?
  • 我也陷入了困境,我的 geojson 有 2gb 并且真的可以使用一些 topojson 魔法。 AFAIK,v8 一次读取不能超过 256mb(所以节点也不能,geo2topo 也不能)

标签: javascript d3.js geojson topojson


【解决方案1】:

不知道抛出的实际错误我有一些建议:

也许你可以使用ndjson?喜欢ndjson-split 'd.features' < test.json > test.ndjson。这样您就可以通过ndjson-filter 将文件分解为更小的部分或删除不必要的功能。

【讨论】:

  • 这通过拆分成更小的文件来解决问题(256Mb 限制),这是我接下来要尝试的,但是当您需要再次组合它们时会发生什么?
【解决方案2】:

我昨天遇到了同样的问题。具体来说,v8 引擎无法读取大于 256Mb 的字符串。由于加载geojson的第一步是读取并解析为json,这行不通。

不过,好心人将节点实现移植到了python:

https://github.com/calvinmetcalf/topojson.py

由于python没有这个限制,你可以使用这个代码来创建topojson,然后用它做任何你想做的事情。

【讨论】:

    猜你喜欢
    • 2014-01-13
    • 2013-01-22
    • 2015-03-28
    • 2014-09-02
    • 2015-07-29
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多