added OSM api
This commit is contained in:
parent
d8d425a922
commit
99dc8b5e67
@ -1,5 +1,5 @@
|
|||||||
from src.optimizer import solve_optimization
|
from src.optimizer import solve_optimization
|
||||||
from src.optimizer import Landmark
|
from src.landmarks_manager import Landmark
|
||||||
from fastapi import FastAPI
|
from fastapi import FastAPI
|
||||||
|
|
||||||
app = FastAPI()
|
app = FastAPI()
|
||||||
@ -12,18 +12,18 @@ def main(max_steps: int, print_details: bool):
|
|||||||
#max_steps = 16
|
#max_steps = 16
|
||||||
|
|
||||||
|
|
||||||
# Initialize all Landmarks (+ start and goal). Order matters here
|
# Initialize all landmarks (+ start and goal). Order matters here
|
||||||
Landmarks = []
|
landmarks = []
|
||||||
Landmarks.append(Landmark("départ", -1, (0, 0)))
|
landmarks.append(Landmark("départ", -1, (0, 0)))
|
||||||
Landmarks.append(Landmark("tour eiffel", 99, (0,2))) # PUT IN JSON
|
landmarks.append(Landmark("tour eiffel", 99, (0,2))) # PUT IN JSON
|
||||||
Landmarks.append(Landmark("arc de triomphe", 99, (0,4)))
|
landmarks.append(Landmark("arc de triomphe", 99, (0,4)))
|
||||||
Landmarks.append(Landmark("louvre", 99, (0,6)))
|
landmarks.append(Landmark("louvre", 99, (0,6)))
|
||||||
Landmarks.append(Landmark("montmartre", 99, (0,10)))
|
landmarks.append(Landmark("montmartre", 99, (0,10)))
|
||||||
Landmarks.append(Landmark("concorde", 99, (0,8)))
|
landmarks.append(Landmark("concorde", 99, (0,8)))
|
||||||
Landmarks.append(Landmark("arrivée", -1, (0, 0)))
|
landmarks.append(Landmark("arrivée", -1, (0, 0)))
|
||||||
|
|
||||||
|
|
||||||
visiting_order = solve_optimization(Landmarks, max_steps, print_details)
|
visiting_order = solve_optimization(landmarks, max_steps, print_details)
|
||||||
|
|
||||||
#return visiting_order
|
#return visiting_order
|
||||||
|
|
||||||
|
52
backend/app/src/landmarks_manager.py
Normal file
52
backend/app/src/landmarks_manager.py
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
from OSMPythonTools.api import Api
|
||||||
|
from OSMPythonTools.overpass import Overpass
|
||||||
|
from dataclasses import dataclass
|
||||||
|
|
||||||
|
|
||||||
|
# Defines the landmark class (aka some place there is to visit)
|
||||||
|
@dataclass
|
||||||
|
class Landmark :
|
||||||
|
name : str
|
||||||
|
attractiveness : int
|
||||||
|
id : int
|
||||||
|
|
||||||
|
|
||||||
|
# Converts a OSM id to a landmark
|
||||||
|
def add_from_id(id: int, score: int) :
|
||||||
|
|
||||||
|
try :
|
||||||
|
s = 'way/' + str(id) # prepare string for query
|
||||||
|
obj = api.query(s) # object to add
|
||||||
|
except :
|
||||||
|
s = 'relation/' + str(id) # prepare string for query
|
||||||
|
obj = api.query(s) # object to add
|
||||||
|
|
||||||
|
return Landmark(obj.tag('name:fr'), score, id) # create Landmark out of it
|
||||||
|
|
||||||
|
|
||||||
|
# take a lsit of tuples (id, score) to generate a list of landmarks
|
||||||
|
def generate_landmarks(ids_and_scores: list) :
|
||||||
|
|
||||||
|
L = []
|
||||||
|
for tup in ids_and_scores :
|
||||||
|
L.append(add_from_id(tup[0], tup[1]))
|
||||||
|
|
||||||
|
return L
|
||||||
|
|
||||||
|
api = Api()
|
||||||
|
|
||||||
|
|
||||||
|
l = (7515426, 70)
|
||||||
|
t = (5013364, 100)
|
||||||
|
n = (201611261, 99)
|
||||||
|
a = (226413508, 50)
|
||||||
|
m = (23762981, 30)
|
||||||
|
|
||||||
|
|
||||||
|
ids_and_scores = [t, l, n, a, m]
|
||||||
|
|
||||||
|
landmarks = generate_landmarks(ids_and_scores)
|
||||||
|
|
||||||
|
|
||||||
|
for obj in landmarks :
|
||||||
|
print(obj)
|
@ -1,15 +1,9 @@
|
|||||||
from scipy.optimize import linprog
|
from scipy.optimize import linprog
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from scipy.linalg import block_diag
|
from scipy.linalg import block_diag
|
||||||
from dataclasses import dataclass
|
|
||||||
|
|
||||||
|
|
||||||
# Defines the landmark class (aka some place there is to visit)
|
# landmarks = [Landmark_1, Landmark_2, ...]
|
||||||
@dataclass
|
|
||||||
class Landmark :
|
|
||||||
name : str
|
|
||||||
attractiveness : int
|
|
||||||
loc : tuple
|
|
||||||
|
|
||||||
# Convert the solution of the optimization into the list of edges to follow. Order is taken into account
|
# Convert the solution of the optimization into the list of edges to follow. Order is taken into account
|
||||||
def untangle(resx: list) :
|
def untangle(resx: list) :
|
||||||
|
Loading…
x
Reference in New Issue
Block a user