Большой геойсон в топойсон
Я пытаюсь преобразовать относительно большой файл 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 нет этого ограничения, вы можете использовать этот код для создания топойсона, а затем делать с ним все, что захотите.