Большой геойсон в топойсон

Я пытаюсь преобразовать относительно большой файл geojson (383 МБ) в топойсон, чтобы использовать его с D3.js. Я запускаю следующую команду на MacBook 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 () в ReadStream. (/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 (внутренняя /process/next_tick.js:80:11) в process._tickCallback (внутренняя /process/next_tick.js:104:9)

Я смотрел на различные темы, подобные этой, но не нашел никаких решений. Обратите внимание, что сам geojson правильно отформатирован и может быть загружен в d3.js, но из-за его размера не может использоваться в веб-приложениях.

2 ответа

Не зная о реальных ошибках, у меня есть предложения:

Может быть, вы можете использовать ndjson? подобно ndjson-split 'd.features' < test.json > test.ndjson, Таким образом, вы можете разбить ваш файл на более мелкие части или избавиться от ненужных функций с помощью ndjson-filter,

Я столкнулся с той же проблемой вчера. В частности, движок v8 не может читать строки размером более 256 МБ. Так как первый шаг загрузки геоджона состоит в том, чтобы прочитать и проанализировать его как json, это не работает.

Тем не менее, хорошая душа перенесла реализацию узла на python:

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

Поскольку у python нет этого ограничения, вы можете использовать этот код для создания топойсона, а затем делать с ним все, что захотите.

Другие вопросы по тегам