import networkx as nx from shapely.geometry import Point import matplotlib.pyplot as plt import unittest from linesweep_circle import NodeIDs def graphbuild(d_racks_segments, d_rack_conn_points): # 2. Graph erstellen G = nx.Graph() # 3. Knoten und Kanten aus d_racts_segments hinzufügen for rack, points in d_racks_segments.items(): start = points[0] end = points[1] G.add_node(start) # Knoten für Startpunkt G.add_node(end) # Knoten für Endpunkt G.add_edge(start, end) # Kante zwischen Start und Endpunkt # # 4. Verbindungen aus d_rack_conn_points hinzufügen # for connection, points in d_rack_conn_points.items(): # # Wir fügen die Kante zwischen den Punkten der Verbindung hinzu # # Hinweis: Wir nehmen hier an, dass der Punkt von beiden Racks als Verbindungspunkt betrachtet wird # G.add_edge(point, point) # Verbindungspunkt als Kante return G class TestShapely(unittest.TestCase): def test_graph(self): d_racks_segments = { 'Rack_1-0': [Point(4946.5, 15865.5), Point(4946.5, 3777.6)], 'Rack_2-0': [Point(0.1, 57.6), Point(0.1, 3777.6)], 'Rack_2-1': [Point(0.1, 3777.6), Point(14755.1, 3777.6)], 'Rack_3-0': [Point(185.1, 15865.5), Point(12450.7, 15865.5)], 'Rack_4-0': [Point(2866.6, 15865.5), Point(2866.6, 3777.6)], 'Rack_5-0': [Point(8866.1, 15865.5), Point(8866.1, 3777.6)] } d_rack_conn_points = { 'Rack_2-0 + Rack_2-1': Point(0.1, 3777.6), 'Rack_2-1 + Rack_1-0': Point(4946.5, 3777.6), 'Rack_2-1 + Rack_4-0': Point(2866.6, 3777.6), 'Rack_2-1 + Rack_5-0': Point(8866.1, 3777.6), 'Rack_3-0 + Rack_1-0': Point(4946.5, 15865.5), 'Rack_3-0 + Rack_4-0': Point(2866.6, 15865.5), 'Rack_3-0 + Rack_5-0': Point(8866.1, 15865.5) } G = graphbuild(d_racks_segments, d_rack_conn_points) #print(nx.has_path(G, Point(4946.5, 15865.5), Point(0.1, 57.6))) # 5. Graph anzeigen nodes_str = "[, , , ," \ " , , , ," \ " , , ]" edges_str = "[(, ), (," \ " ), (, )," \ " (, ), (, )," \ " (, ), (, )," \ " (, ), (, )," \ " (, ), (, )," \ " (, ), (, )]" nodes = G.nodes allids = NodeIDs(nodes) for k,v in d_racks_segments.items(): allids.add_points(v) for k,v in d_rack_conn_points.items(): allids.add_point(v) #ids = allids.get_ids(nodes) #cords = allids.get_points(ids) # self.assertEqual(len(ids), len(nodes)) # self.assertEqual(cords,nodes_str) # self.assertEqual(allids.get_point(1), Point(4946.5, 15865.5)) # 6. Optional: Visualisierung des Graphen # Dies ist ein sehr grundlegendes Plotten. Bei Bedarf könnte man es weiter anpassen. pos = {node: (node.x, node.y) for node in G.nodes()} # Positionen der Knoten aus den Punkten # Plotten des Graphen nx.draw(G, pos, with_labels=False, node_size=10, font_size=8) plt.show() def test_easy(self): pass if __name__ == '__main__': unittest.main()