amin khare 3 takmili
unknown
python
a year ago
3.0 kB
16
Indexable
import psycopg2
import networkx as nx
import time
# Database connection parameters
hostname = 'localhost'
database = 'GraphSQL'
username = 'qs2215'
password = '****'
port = '9090'
def fetch_road_network():
start_time = time.time()
try:
# Connect to the PostgreSQL database
conn = psycopg2.connect(
dbname=database,
user=username,
password=password,
host=hostname,
port=port
)
cursor = conn.cursor()
# Update the query to match the actual column names
query = 'SELECT source_node_id, destination_node_id FROM "Road networks"."roadNet-TX";'
cursor.execute(query)
# Fetch all rows from the query result
rows = cursor.fetchall()
print("Data fetched successfully.")
return rows
except Exception as error:
print("Error while connecting to PostgreSQL:", error)
return None
finally:
if conn:
cursor.close()
conn.close()
print("PostgreSQL connection is closed")
end_time = time.time()
print(f"Runtime for fetching data: {end_time - start_time:.2f} seconds")
def create_graph(data):
start_time = time.time()
G = nx.Graph()
# Each row in data is a tuple (source_node_id, destination_node_id)
for source_node_id, destination_node_id in data:
G.add_edge(source_node_id, destination_node_id, weight=1) # Assuming weight = 1
end_time = time.time()
print(f"Runtime for creating graph: {end_time - start_time:.2f} seconds")
return G
def find_shortest_path(G, source, target):
start_time = time.time()
try:
path = nx.shortest_path(G, source=source, target=target, weight='weight')
length = nx.shortest_path_length(G, source=source, target=target, weight='weight')
return path, length
except nx.NetworkXNoPath:
return None, float('inf')
finally:
end_time = time.time()
print(f"Runtime for finding shortest path: {end_time - start_time:.2f} seconds")
# Fetch road network data
road_network_data = fetch_road_network()
# Ensure road_network_data is not None before proceeding
if road_network_data is not None:
# Create a graph from the road network data
G = create_graph(road_network_data)
# Define source and target nodes
source_node = 1365149 # Replace with your actual source node
target_node = 746839 # Replace with your actual target node
# Find the shortest path between the source and target nodes
path, length = find_shortest_path(G, source_node, target_node)
if path is not None:
print(f"The shortest path from node {source_node} to node {target_node} is: {path}")
print(f"The length of the path is: {length}")
else:
print(f"No path exists between node {source_node} and node {target_node}")
else:
print("Failed to fetch road network data.")
Editor is loading...
Leave a Comment