Попытка загрузить большую округ Лос-Анджелес - не хватает памяти
Я использую коллекцию пакетов Python, установленных в Docker-контейнере; OSMnx для загрузки данных OSM, а затем networkx для выполнения анализа - я доказал свой код на небольшом подмножестве данных и теперь хочу перейти к масштабу.
Я пытаюсь провести некоторый анализ пригородных поездов в округе Лос-Анджелеса - для этого мне нужно захватить улицы, выходящие за границы округа, потому что мы позволяем людям ездить из Лос-Анджелеса в другие округа. Первым делом я хотел захватить Калифорнию, а затем обрезать ее через многоугольник с буферизацией в округе - после нескольких часов работы мой контейнер уничтожил процесс Python. Итак, я подумал, что я бы сократил загрузку до всего лишь коробки, используя этот код - даже это не удается в методе graph_from_bbox. Я подготовил свой док-контейнер с 8 ГБ памяти.
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 ГБ памяти? Если я правильно прочитал мою статистику док-станции, сетевой ввод-вывод загружается всего ~36 МБ, а использование памяти быстро достигает 8 ГБ и в конечном итоге приводит к сбою процесса Python. Есть способы обойти сбой процесса - меня интересует производительность и существуют ли более эффективные способы использования OSMnx для загрузки данных OSM?
2 ответа
Вы можете сделать так, чтобы он занимал меньше памяти, используя более грубое представление графа. Это можно сделать с помощью параметра "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"]')
ссылка ниже предоставляет дополнительную информацию о выборе дополнительных параметров для ключевого слова way в Infrastucture https://wiki.openstreetmap.org/wiki/Key:highway
Округ Лос-Анджелес - это довольно большая учебная зона, но я только что проверил на своем ноутбуке (8 Гб оперативной памяти), и он отлично загрузил / построил график. Независимо от этого, OSMnx загружает необработанные данные OpenStreetMap и затем создает их в MultiDiGraph NetworkX. NETworkX предлагает операторам объединять графы, например, с помощью операции объединения (см. Функцию compose: https://networkx.github.io/documentation/stable/reference/algorithms/operators.html).
Вы можете сделать эту операцию кусками, а затем объединить графики в конце. Или вы можете использовать более грубое представление графа, как подсказывает @Isfand. Или вы можете выделить больше оперативной памяти локально.
Мне также не нравится, как save_graph_shapefile организует результаты
Запросы на новые функции всегда приветствуются в виде проблем на GitHub с предложениями по изменению функциональности OSMnx.