118 lines
6.2 KiB
Python
118 lines
6.2 KiB
Python
import pandas as pd
|
|
|
|
from typing import List
|
|
from landmarks_manager import generate_landmarks
|
|
from fastapi.encoders import jsonable_encoder
|
|
|
|
from optimizer import solve_optimization
|
|
from refiner import get_minor_landmarks
|
|
from structs.landmarks import Landmark
|
|
from structs.landmarktype import LandmarkType
|
|
from structs.preferences import Preferences, Preference
|
|
|
|
|
|
# Helper function to create a .txt file with results
|
|
def write_data(L: List[Landmark], file_name: str):
|
|
|
|
data = pd.DataFrame()
|
|
i = 0
|
|
|
|
for landmark in L :
|
|
data[i] = jsonable_encoder(landmark)
|
|
i += 1
|
|
|
|
data.to_json(file_name, indent = 2, force_ascii=False)
|
|
|
|
def test3(city_country: str) -> List[Landmark]:
|
|
|
|
|
|
preferences = Preferences(
|
|
sightseeing=Preference(
|
|
name='sightseeing',
|
|
type=LandmarkType(landmark_type='sightseeing'),
|
|
score = 5),
|
|
nature=Preference(
|
|
name='nature',
|
|
type=LandmarkType(landmark_type='nature'),
|
|
score = 0),
|
|
shopping=Preference(
|
|
name='shopping',
|
|
type=LandmarkType(landmark_type='shopping'),
|
|
score = 5))
|
|
|
|
coordinates = None
|
|
|
|
landmarks, landmarks_short = generate_landmarks(preferences=preferences, city_country=city_country, coordinates=coordinates)
|
|
|
|
#write_data(landmarks)
|
|
|
|
start = Landmark(name='start', type=LandmarkType(landmark_type='start'), location=(48.2044576, 16.3870242), osm_type='start', osm_id=0, attractiveness=0, must_do=True, n_tags = 0)
|
|
finish = Landmark(name='finish', type=LandmarkType(landmark_type='finish'), location=(48.2044576, 16.3870242), osm_type='finish', osm_id=0, attractiveness=0, must_do=True, n_tags = 0)
|
|
|
|
|
|
test = landmarks_short
|
|
|
|
test.insert(0, start)
|
|
test.append(finish)
|
|
|
|
max_walking_time = 2 # hours
|
|
|
|
visiting_list = solve_optimization(test, max_walking_time*60, True)
|
|
|
|
|
|
|
|
|
|
|
|
def test4(coordinates: tuple[float, float]) -> List[Landmark]:
|
|
|
|
|
|
preferences = Preferences(
|
|
sightseeing=Preference(
|
|
name='sightseeing',
|
|
type=LandmarkType(landmark_type='sightseeing'),
|
|
score = 5),
|
|
nature=Preference(
|
|
name='nature',
|
|
type=LandmarkType(landmark_type='nature'),
|
|
score = 5),
|
|
shopping=Preference(
|
|
name='shopping',
|
|
type=LandmarkType(landmark_type='shopping'),
|
|
score = 5))
|
|
|
|
city_country = None
|
|
|
|
landmarks, landmarks_short = generate_landmarks(preferences=preferences, city_country=city_country, coordinates=coordinates)
|
|
#write_data(landmarks, "landmarks.txt")
|
|
|
|
|
|
start = Landmark(name='start', type=LandmarkType(landmark_type='start'), location=(48.8375946, 2.2949904), osm_type='start', osm_id=0, attractiveness=0, must_do=True, n_tags = 0)
|
|
finish = Landmark(name='finish', type=LandmarkType(landmark_type='finish'), location=(48.8375946, 2.2949904), osm_type='finish', osm_id=0, attractiveness=0, must_do=True, n_tags = 0)
|
|
|
|
test = landmarks_short
|
|
|
|
test.insert(0, start)
|
|
test.append(finish)
|
|
|
|
max_walking_time = 4 # hours
|
|
detour = 30 # minutes
|
|
|
|
visited_list = solve_optimization(test, max_walking_time*60, True)
|
|
#visited_list = [Landmark(name='start', type=LandmarkType(landmark_type='start'), location=(48.8375946, 2.2949904), osm_type='start', osm_id=0, attractiveness=0, must_do=True, n_tags=0, time_to_reach=0), Landmark(name='Palais du Louvre', type=LandmarkType(landmark_type='sightseeing'), location=(48.8614768, 2.3351677), osm_type='relation', osm_id=3262297, attractiveness=32, must_do=False, n_tags=32, time_to_reach=85), Landmark(name='Musée du Louvre', type=LandmarkType(landmark_type='sightseeing'), location=(48.8611474, 2.3358637), osm_type='relation', osm_id=7515426, attractiveness=34, must_do=False, n_tags=33, time_to_reach=1), Landmark(name='Bourse de Commerce — Pinault Collection', type=LandmarkType(landmark_type='sightseeing'), location=(48.8628167, 2.3428183), osm_type='way', osm_id=19856722, attractiveness=32, must_do=False, n_tags=32, time_to_reach=12), Landmark(name='Centre Georges Pompidou', type=LandmarkType(landmark_type='sightseeing'), location=(48.8605235, 2.3524395), osm_type='way', osm_id=55503397, attractiveness=43, must_do=False, n_tags=43, time_to_reach=15), Landmark(name='Tour Saint-Jacques', type=LandmarkType(landmark_type='sightseeing'), location=(48.8579983, 2.3489178), osm_type='way', osm_id=20326709, attractiveness=33, must_do=False, n_tags=31, time_to_reach=8), Landmark(name='Hôtel de Ville', type=LandmarkType(landmark_type='sightseeing'), location=(48.8564265, 2.352527), osm_type='relation', osm_id=284089, attractiveness=34, must_do=False, n_tags=32, time_to_reach=7), Landmark(name='Cathédrale Notre-Dame de Paris', type=LandmarkType(landmark_type='sightseeing'), location=(48.8529372, 2.3498701), osm_type='way', osm_id=201611261, attractiveness=55, must_do=False, n_tags=54, time_to_reach=9), Landmark(name='Sainte-Chapelle', type=LandmarkType(landmark_type='sightseeing'), location=(48.8553966, 2.3450136), osm_type='relation', osm_id=3344870, attractiveness=57, must_do=False, n_tags=54, time_to_reach=10), Landmark(name='finish', type=LandmarkType(landmark_type='finish'), location=(48.8375946, 2.2949904), osm_type='finish', osm_id=0, attractiveness=0, must_do=True, n_tags=0, time_to_reach=90)]
|
|
|
|
|
|
minor_landmarks = get_minor_landmarks(landmarks, visited_list, 200)
|
|
#write_data(minor_landmarks, 'minor_landmarks.txt')
|
|
print("There are " + str(len(minor_landmarks)) + " minor landmarks around the predicted path")
|
|
|
|
|
|
fuller_list = minor_landmarks + visited_list
|
|
|
|
new_visit = solve_optimization(fuller_list, max_walking_time*60+detour, True)
|
|
|
|
|
|
return visited_list
|
|
|
|
|
|
test4(tuple((48.8795156, 2.3660204)))
|
|
#test3('Vienna, Austria') |