58 lines
1.7 KiB
Python
58 lines
1.7 KiB
Python
import json
|
|
import random
|
|
from copy import deepcopy
|
|
from collections import namedtuple
|
|
|
|
import access
|
|
from andyamo import types
|
|
|
|
from generator import generate_graph
|
|
from geopy import distance as geo_distance
|
|
|
|
|
|
Edge = namedtuple("Edge", ["start_id", "end_id", "distance"])
|
|
|
|
with open("data.json", "r") as f:
|
|
data = [json.loads(x.strip()) for x in f.readlines()]
|
|
|
|
|
|
def get_graph(profile: types.Profile):
|
|
node_set = set()
|
|
edges = list()
|
|
|
|
for feature in data:
|
|
try:
|
|
if access.is_accessible(feature, profile):
|
|
nodes = feature["feature"]["properties"]["nodes"]
|
|
if len(nodes) == 2:
|
|
coordinates = feature["feature"]["geometry"]["coordinates"]
|
|
|
|
for node in nodes:
|
|
node_set.add(f"id_{node}")
|
|
|
|
distance = 0
|
|
for i in range(len(coordinates)-1):
|
|
distance += geo_distance.distance(
|
|
coordinates[i], coordinates[i+1]
|
|
).m
|
|
|
|
edges.append(Edge(f"id_{nodes[0]}", f"id_{nodes[1]}", distance))
|
|
|
|
|
|
except Exception as e :
|
|
print(feature)
|
|
raise(e)
|
|
|
|
node_ids = list(node_set)
|
|
return node_ids, edges
|
|
|
|
|
|
node_ids, edges = get_graph(types.Profile("manual_wheelchair"))
|
|
generate_graph("manual_wheelchair.cpp", "c_manual_wheelchair", node_ids, edges)
|
|
|
|
node_ids, edges = get_graph(types.Profile("electric_wheelchair"))
|
|
generate_graph("electric_wheelchair.cpp", "c_electric_wheelchair", node_ids, edges)
|
|
|
|
node_ids, edges = get_graph(types.Profile("foot"))
|
|
generate_graph("foot.cpp", "c_foot", node_ids, edges)
|