2013-05-03 90 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