added OSM api

This commit is contained in:
Kilian Scheidecker 2024-05-23 12:20:32 +02:00
parent d8d425a922
commit 99dc8b5e67
3 changed files with 64 additions and 18 deletions

View File

@ -1,5 +1,5 @@
from src.optimizer import solve_optimization
from src.optimizer import Landmark
from src.landmarks_manager import Landmark
from fastapi import FastAPI
app = FastAPI()
@ -12,18 +12,18 @@ def main(max_steps: int, print_details: bool):
#max_steps = 16
# Initialize all Landmarks (+ start and goal). Order matters here
Landmarks = []
Landmarks.append(Landmark("départ", -1, (0, 0)))
Landmarks.append(Landmark("tour eiffel", 99, (0,2))) # PUT IN JSON
Landmarks.append(Landmark("arc de triomphe", 99, (0,4)))
Landmarks.append(Landmark("louvre", 99, (0,6)))
Landmarks.append(Landmark("montmartre", 99, (0,10)))
Landmarks.append(Landmark("concorde", 99, (0,8)))
Landmarks.append(Landmark("arrivée", -1, (0, 0)))
# Initialize all landmarks (+ start and goal). Order matters here
landmarks = []
landmarks.append(Landmark("départ", -1, (0, 0)))
landmarks.append(Landmark("tour eiffel", 99, (0,2))) # PUT IN JSON
landmarks.append(Landmark("arc de triomphe", 99, (0,4)))
landmarks.append(Landmark("louvre", 99, (0,6)))
landmarks.append(Landmark("montmartre", 99, (0,10)))
landmarks.append(Landmark("concorde", 99, (0,8)))
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

View 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)

View File

@ -1,15 +1,9 @@
from scipy.optimize import linprog
import numpy as np
from scipy.linalg import block_diag
from dataclasses import dataclass
# Defines the landmark class (aka some place there is to visit)
@dataclass
class Landmark :
name : str
attractiveness : int
loc : tuple
# landmarks = [Landmark_1, Landmark_2, ...]
# Convert the solution of the optimization into the list of edges to follow. Order is taken into account
def untangle(resx: list) :