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

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