尝试下载更大的洛杉矶县-内存不足

时间:2018-12-06 17:37:32

标签: python docker network-analysis osmnx

我正在使用安装在Docker容器中的python软件包的集合; OSMnx可以下载OSM数据,然后通过networkx来执行分析-我证明了我的代码基于一小部分数据,现在想扩展规模。

我正在尝试在洛杉矶县进行一些通勤分析-为此,我需要抓住一些延伸到县境之外的街道,因为我们允许人们从洛杉矶通勤到其他县。首先,我想抓住加利福尼亚,然后用一个县缓冲的多边形修剪-在工作了几个小时之后,我的容器杀死了Python进程。因此,我认为我可以使用此代码将下载减少到一个盒子,即使在graph_from_bbox方法中失败了。我已经为Docker容器配置了8 GB的内存。

greater_la_streets_box = ox.graph_from_bbox(35.114, 33.514, -117.439, -119.316, 
   network_type='drive', simplify=False,
   timeout=3600)
G_projected = ox.project_graph(greater_la_streets_box)
ox.save_graph_shapefile(G_projected, filename='greater_la_streets',
                    folder='/ds/data/spatial/network/streets/CA/')

处理8 GB的内存是否合理?如果我正确地阅读了docker stats,则仅下载了约36MB的Net I / O,而内存使用量迅速达到8 GB,最终导致Python进程崩溃。有一些方法可以避免进程崩溃-我想知道它的性能以及是否存在使用OSMnx下载OSM数据的更有效方法?

2 个答案:

答案 0 :(得分:1)

您可以通过使用更粗糙的图形表示来减少它的内存消耗。这可以通过使用“基础设施”参数来完成。

greater_la_streets_box = ox.graph_from_bbox(35.114, 33.514, -117.439, -119.316, 
   network_type='drive', simplify=False,timeout=3600,
   infrastructure='way["highway"~"motorway|trunk|primary"]')

以下链接提供了有关为基础设施中的way关键字选择更多选项的更多信息 https://wiki.openstreetmap.org/wiki/Key:highway

答案 1 :(得分:0)

洛杉矶县是一个中等规模的研究区,但我刚刚在笔记本电脑(8GB内存)上进行了测试,并下载/构建了该图。无论如何,OSMnx会下载原始的OpenStreetMap数据,然后将其构造为NetworkX MultiDiGraph。 NetworkX为操作员提供了例如通过并集操作来组合图的功能(请参见compose函数:https://networkx.github.io/documentation/stable/reference/algorithms/operators.html)。

您可以分块进行此操作,然后最后将图形合并在一起。或者,您可以按照@Isfand的建议使用更粗糙的图形表示形式。或者,您可以在本地配置更多RAM。

  

我也不喜欢save_graph_shapefile如何组织结果

在GitHub上始终欢迎提出新功能要求,其中包含有关重新设计OSMnx功能的建议。