Я пытаюсь сгенерировать граф из двух шейп-файлов, которые представляют железнодорожную сеть.
Первый шейп-файл (track.shp) содержит строки строк, представляющие дорожки. Второй шейп-файл (crossings.shp) содержит точки, представляющие железнодорожные переезды.
Мое намерение состоит в том, чтобы создать сеть графов, в которой узлы являются этими точками пересечения и обрезать дорожки между этими пересечениями.
Это является представлением обоих шейп-файлов. Зеленые точки - это пересечения (предполагаемая вершина)
Я использовал NetworkX's read_shp для чтения обоих шейп-файлов, где один граф содержит ребра, а другой граф узлы.
Я пытаюсь объединить их в один график.
Я пытался использовать объединение, как показано в этом ответе , но я получаю KeyError
, когда пытаюсь сделать что-то полезное, например, отобразить полученный график, вероятно, из-за расхождений в моих данных.
Данные точки выборки: (-97.2099838 49.9057139) Данные выборки LineString: [-99.68137 49.19066, -99.68154 49.17139]
Вот мой код:
G_nodes = nx.read_shp("crossings.shp")
positions_nodes = {k: v for k,v in enumerate(G_nodes.nodes())}
G_edges = nx.read_shp("tracks.shp")
positions_edges = G_edges.edges()
X = nx.compose(G_edges, G_nodes)
# Display resulting graph
nx.draw_networkx_edges(X, X.nodes)
plt.xlim(450000, 470000)
plt.ylim(430000, 450000)
plt.title('From shapefiles to NetworkX')