Две вещи. Во-первых, убедитесь, что вы используете последнюю версию OSMnx, поскольку в предыдущем выпуске были значительные улучшения производительности. Во-вторых, все это будет намного, намного быстрее, если вы сначала упростите свой график.
Но, что более важно, на самом деле нет смысла объединять пересечения , если вы уже не упростили свой график , потому что концепция «пересечений» реального мира бессмысленна в неупрощенном (расширенном) графе. Только когда граф упрощен, узлы модели соответствуют реальным концепциям пересечений и тупиков. Подробности см. В документации и соответствующей литературе.
Вот фрагмент кода, сравнивающий ваши исходные тайминги (слева) и мои упрощенные тайминги (справа):
import osmnx as ox
ox.config(use_cache=True, log_console=True)
G = ox.graph_from_place('Edmonton, Canada', network_type='drive', simplify=True)
# 39.1 s vs 18.2 s
G_proj = ox.project_graph(G)
# 15.9 s vs 8.9 s
G_proj_con = ox.consolidate_intersections(G_proj)
# 14 m 45 s vs 24.2 s
G_con = ox.project_graph(G_proj_con, to_crs='epsg:4326')
# 44 m 35 s vs 6.4 s
РЕДАКТИРОВАТЬ: Я только что повторно запустил фрагмент кода, который я поделился выше, но изменил simplify=False
, и мои тайминги с использованием последней версии все еще намного быстрее, чем то, что вы видели. Например, последние 2 строки кода выше закончились за 6 мин. 20 сек. И 12 сек. Соответственно (по сравнению с вашими временными интервалами 14 мин. 45 сек. И 44 мин. 35 сек.).