2013-05-03 114 views
1

我正在嘗試創建美國學區的TopoJSON文件。我已經奠定了我的工作流程如下:如何避免TopoJSON內存錯誤

  1. 下載並解壓縮從人口普查局TIGER個人形文件(24 ESD,19 SSD,56美元)
  2. 這些批處理文件99與ogr2ogr
  3. 合併在一起
  4. 轉換合併shape文件到GeoJSON的
  5. 轉換以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時更好地管理內存的方法。謝謝。

+2

這些輸入的GeoJSON文件有多大?如果它們接近〜1GB,則必須使用shapefile輸入而不是GeoJSON,因爲shapefile更加緊湊並且可以流式傳輸。 (Node.js的最大緩衝區大小爲1GB,這使得解析JSON文件時比較困難)。您還可以使用'node --max-old-space-size = XXXX bin/topojson',其中XXXX是大量的兆字節。 – mbostock 2013-05-03 04:55:58

+0

謝謝,使用shapefile作爲輸入似乎已經解決了這個問題(json文件是365,39和18 MB文件)不幸的是,我現在提出了一個不同的錯誤:'ReferenceError:distance is not defined',我會爲此 – Josh 2013-05-03 17:21:32

+0

後續問題創建一個單獨的問題http://stackoverflow.com/q/16364671/1332731 – Josh 2013-05-03 17:39:48

回答

2

使用node --max_old_space_size=999 topojson.js ...增加可用於node.js的內存。

如果您使用node.js二進制文件,您需要64位二進制文​​件。 32位的限制爲1GB。 https://code.google.com/p/v8/issues/detail?id=847

+0

謝謝,儘管我可以通過使用shapefile作爲輸入而不是GeoJSON文件來避免內存錯誤,但我會接受這個答案,因爲它可能會在其他更資源密集的應用程序中更有用 – Josh 2013-05-03 17:17:28