2017-04-20 57 views
0

我想将一个相对较大的geojson文件(383 MB)转换为topojson,以便与D3.js一起使用它。Large geojson topojson

geo2topo test.json > test.topojson 

,也为简化以下命令:我在Mac书临2016运行以下命令

geo2topo test.json > test.topojson -q 10000 

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

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

Error: "toString()" failed at Buffer.toString (buffer.js:503:11) at JSON.parse() at ReadStream. (/usr/local/lib/node_modules/topojson/node_modules/topojson-server/bin/geo2topo:107:46) at emitNone (events.js:91:20) at ReadStream.emit (events.js:188:7) at endReadableNT (_stream_readable.js:975:12) at _combinedTickCallback (internal/process/next_tick.js:80:11) at process._tickCallback (internal/process/next_tick.js:104:9)

我看了像this one这样的线程,但还没有找到任何解决方案。请注意,geojson本身格式正确,可以在d3.js中加载,但由于其大小不能在Web应用程序中使用。

+0

我遇到了完全相同的问题。你找到解决方案吗? – normonics

+0

我也被困在这,我的geojson有2GB,可以真正使用一些topojson魔法。 AFAIK,v8无法读取超过256mb的一个gulp(因此既不能节点,也不能geo2topo) –

回答

0

不了解实际的错误被抛出我有建议:

也许你可以利用ndjson?像ndjson-split 'd.features' <test.json> test.ndjson。这样你可以将你的文件分解成更小的部分或通过ndjson-filter摆脱不必要的功能。

+0

这解决了这个问题(256Mb的限制)通过分割成更小的文件,这是我将接下来尝试,但当你需要再次合并它们时会发生什么? –

0

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

但是,一个良好的灵魂移植节点实施蟒蛇:

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

因为Python没有这个限制,您可以使用此代码来创建topojson,然后做任何你想要的它。