Потеря связи с графом при импорте графа из геоданных - PullRequest
1 голос
/ 15 мая 2019

В настоящее время я пытаюсь найти кратчайшие пути вдоль уличных сетей для различных пар узлов.

Я извлек XML-файл, представляющий уличную сеть, используя Overpass Turbo, и сделал график из этого файла, используя функцию OSMNX graph_from_file. Я извлек информацию об узлах и ребрах, используя функцию OSMNX graph_to_gdfs, в которой я получил 2 геоданных. Следовательно, я отредактировал информацию в столбце «шоссе» краевого геодатафрейма в соответствии со своими потребностями. Я не сделал никаких других изменений. Затем я создал новый граф с использованием геоданных с узлами и краями, используя функцию OSMNX gdfs_to_graph, которая должна быть похожа на диаграмму, извлеченную из файла XML, за исключением некоторых изменений в данных ребер.

Теперь, когда я пытаюсь найти кратчайший путь от одного узла к другому на графике, он показывает ошибку подключения. Я попытался найти кратчайший путь между одной и той же парой узлов, используя график, импортированный непосредственно из файла XML, и это прекрасно работает. В другом сценарии я не вносил никаких изменений в геоданные и прошел весь процесс, который также не работает. Это означает, что существует некоторая проблема, связанная с подключением, когда графики импортируются из геоданных, которые я не могу понять. Может кто-нибудь решить эту проблему?

G_multiDi = ox.graph_from_file('overpass_ped_PTstop_export.xml', bidirectional=False, simplify=True, retain_all=True, name='unnamed') 
G_undi = G_multiDi.to_undirected()
fig, ax = ox.plot_graph(G_undi)
nodes = ox.graph_to_gdfs(G_undi, nodes=True, edges=False)
edges = ox.graph_to_gdfs(G_undi, nodes=False, edges=True)

In [43]: nx.shortest_path(G_undi,35524093,35365678,weight = 'length')
Out[43]: [35524093, 53132201, 35524331, 1994687832, 35365678]

#GEODATAFRAME TO GRAPH
gdf_nodes = nodes
gdf_edges = edges
graph2 = ox.gdfs_to_graph(gdf_nodes, gdf_edges)

nx.shortest_path(graph2,35524093,35365678,weight = 'length')
In [47]: nx.shortest_path(graph2,35524093,35365678,weight = 'length')
NetworkXNoPath: No path to 35365678.

1 Ответ

0 голосов
/ 15 мая 2019

Итак, я сам решил проблему, преобразовав ориентированный граф 'graph2', полученный из graph2 = ox.gdfs_to_graph (gdf_nodes, gdf_edges) на неориентированный граф, используя graph2 = graph2.to_undirected ().

graph2 = ox.gdfs_to_graph(gdf_nodes, gdf_edges) 
graph2 = graph2.to_undirected()

In [72]: nx.shortest_path(graph2,35524093,35365678,weight = 'length')
Out[72]: [35524093, 53132201, 35524331, 1994687832, 35365678]
...