Чрезвычайно долгое время отклика с graph_from_place OSMNX

Я пытаюсь загрузить карту Мексики, чтобы не запрашивать, используя и избегая длительного времени отклика в , но я уже оставил этот код запущенным почти на шесть часов, и ничего не происходит.

      import osmnx as ox

ox.config(use_cache=True, log_console=True)

G = ox.graph_from_place('Mexico', network_type = 'drive', simplify=False)
G = ox.add_edge_speeds(G)
G = ox.add_edge_travel_times(G)

ox.save_graphml(G, '/var/www/html/repmexico.graphml')

print("Success!!!")

Сегодня я пытаюсь запустить код на сервере с 74 ГБ ОЗУ и (Intel xeon x5570) X2

(Я знаю, что из-за указанной области время велико, но я хотел знать, есть ли альтернатива этой процедуре или есть ли способ оптимизации, чтобы создание карты происходило немного быстрее, или если есть другой способ загрузить карты для маршрутизации с помощью osmnx и networkx без использования запросов к серверам)

1 ответ

Я уже оставил этот код запущенным почти на шесть часов, и ничего не происходит.

Много чего произошло! Не верите мне? Ты бежал ox.config(log_console=True), поэтому посмотрите на свой терминал и посмотрите, что происходит во время его работы. Вы увидите строку вроде «2021-10-14 13:05:39 Запрос данных внутри многоугольника из API в 1827 запросах» ... так что вы делаете 1827 запросов к серверу Overpass, и сервер спрашивает вас чтобы сделать паузу для ограничения скорости между многими из этих запросов.

Я знаю, что из-за указанной области время велико, но я хотел знать, есть ли альтернатива этой процедуре или есть ли способ оптимизации, чтобы создание карты происходило немного быстрее, или если есть это еще один способ загрузки карт для маршрутизации с помощью osmnx и networkx без использования запросов к серверам.

да. В этом ответе содержится более подробная информация. Есть компромиссы между 1) точностью модели и 2) размером области и 3) памятью / скоростью. Для более быстрого моделирования вы можете загружать сетевые данные из XML- файла .osm вместо того, чтобы выполнять многочисленные вызовы API Overpass. Я также рекомендую использовать custom_filterкак описано в связанном ответе. OSMnx по умолчанию делит область запроса на части размером 50 км x 50 км, а затем запрашивает Overpass для каждой части по одному, чтобы не превысить лимиты памяти сервера для каждого запроса. Вы можете настроить это max_query_area_size параметр, а также выделение памяти сервера, если вы предпочитаете использовать функции запросов API OSMnx, а не функции из файла.

Другие вопросы по тегам