1

我正在使用安装在 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,Net I/O 仅下载了约 36MB,而内存使用量迅速达到 8 GB,最终导致 Python 进程崩溃。有一些方法可以解决进程崩溃 - 我想知道它的性能以及是否有更有效的方法来使用 OSMnx 下载 OSM 数据?

4

2 回答 2

1

您可以通过使用更粗略的图形表示来减少内存消耗。这可以使用“infrastucture”参数来完成。

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"]')

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

于 2018-12-07T12:24:26.187 回答
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 功能的建议。

于 2018-12-12T18:28:15.960 回答