Как избежать ошибок памяти TopoJSON

Я пытаюсь создать файл TopoJSON школьных округов в США. Я изложил свой рабочий процесс следующим образом:

  1. Загрузите и разархивируйте отдельные файлы формы TIGER из Бюро переписи населения (24 ESD, 19 SSD, 56 долларов США).
  2. Пакетное слияние этих 99 файлов вместе с ogr2ogr
  3. Преобразование объединенного шейп-файла в GeoJSON
  4. Преобразование GeoJSON в TopoJSON (в идеале я бы добавил сюда и границы штатов в файл)

Шаг 4 вызывает у меня проблемы, я использую следующий пакетный скрипт:

call topojson ^
    -o SDs11_Topo.json ^
    -p NAME ^
    --simplify-proportion .1 ^
    --id-property GEOID ^
    -- ^
    ESDs11.json ^
    SSDs11.json ^
    USDs11.json
pause

Но мне представлена ​​следующая фатальная ошибка памяти:

FATAL ERROR: CALL_AND_RETRY_0 Allocation failed - process out of memory

Это оставило меня в некоторой растерянности относительно того, как продолжить, я был бы признателен, если бы кто-нибудь мог посоветовать лучший рабочий процесс или способы лучшего управления памятью при преобразовании в topojson. Спасибо.


person Josh    schedule 03.05.2013    source источник
comment
Насколько велики эти входные файлы GeoJSON? Если они имеют размер около 1 ГБ, вы должны использовать входные данные шейп-файла, а не GeoJSON, поскольку шейп-файлы более компактны и могут передаваться в потоковом режиме. (Node.js имеет максимальный размер буфера 1 ГБ, что затрудняет анализ файлов JSON большего размера.) Вы также можете увеличить объем доступной памяти, используя node --max-old-space-size=XXXX bin/topojson, где XXXX — большое количество мегабайт.   -  person mbostock    schedule 03.05.2013
comment
Спасибо, использование шейп-файлов в качестве входных данных, похоже, решило эту проблему (файлы json были размером 365, 39 и 18 МБ). К сожалению, теперь у меня появляется другая ошибка: ReferenceError: distance is not defined, я создам для этого отдельный вопрос.   -  person Josh    schedule 03.05.2013
comment
следующий вопрос на stackoverflow.com/q/16364671/1332731   -  person Josh    schedule 03.05.2013


Ответы (1)


Используйте node --max_old_space_size=999 topojson.js ... для увеличения памяти, доступной для node.js.

Если вы используете двоичные файлы node.js, вам понадобятся 64-битные двоичные файлы. 32-битные ограничены 1 ГБ. https://code.google.com/p/v8/issues/detail?id=847

person S Anand    schedule 03.05.2013
comment
Спасибо, хотя мне удалось избежать ошибки памяти, используя шейп-файлы в качестве входных данных, а не файлы GeoJSON, я приму этот ответ, поскольку он, вероятно, будет более полезен в других, более ресурсоемких приложениях. - person Josh; 03.05.2013