first changes

This commit is contained in:
Helldragon67 2024-08-04 11:32:53 +02:00
parent db82495f11
commit 8a62e68ddd
3 changed files with 44 additions and 24 deletions

@ -1,6 +1,6 @@
city_bbox_side: 5000 #m
radius_close_to: 50
church_coeff: 0.8
park_coeff: 1.2
park_coeff: 1.0
tag_coeff: 10
N_important: 40

@ -14,7 +14,7 @@ logger = logging.getLogger(__name__)
def test(start_coords: tuple[float, float], finish_coords: tuple[float, float] = None) -> list[Landmark]:
manager = LandmarkManager()
optimizer = Optimizer()
refiner = Refiner(optimizer=optimizer)
@ -23,7 +23,7 @@ def test(start_coords: tuple[float, float], finish_coords: tuple[float, float] =
sightseeing=Preference(
name='sightseeing',
type='sightseeing',
score = 5),
score = 3),
nature=Preference(
name='nature',
type='nature',
@ -33,9 +33,11 @@ def test(start_coords: tuple[float, float], finish_coords: tuple[float, float] =
type='shopping',
score = 5),
max_time_minute=180,
max_time_minute=120,
detour_tolerance_minute=30
)
manager = LandmarkManager(max_time = preferences.max_time_minute + preferences.detour_tolerance_minute)
# Create start and finish
if finish_coords is None :
@ -77,9 +79,12 @@ def test(start_coords: tuple[float, float], finish_coords: tuple[float, float] =
return linked_tour
#test(tuple((48.8344400, 2.3220540))) # Café Chez César
#test(tuple((48.8375946, 2.2949904))) # Point random
#test(tuple((47.377859, 8.540585))) # Zurich HB
#test(tuple((45.7576485, 4.8330241))) # Lyon Bellecour
test(tuple((48.5848435, 7.7332974))) # Strasbourg Gare
#test(tuple((48.2067858, 16.3692340))) # Vienne
# test(tuple((48.8344400, 2.3220540))) # Café Chez César
# test(tuple((48.8375946, 2.2949904))) # Point random
# test(tuple((47.377859, 8.540585))) # Zurich HB
# test(tuple((45.7576485, 4.8330241))) # Lyon Bellecour
# test(tuple((48.5848435, 7.7332974))) # Strasbourg Gare
# test(tuple((48.2067858, 16.3692340))) # Vienne
# test(tuple((46.996625, 6.935716))) # Neuchatel
# test(tuple((35.897243, 15.511951))) # La Valette
test(tuple((46.51724716185816, 6.629345889640165))) # Lausanne

@ -33,20 +33,29 @@ class LandmarkManager:
N_important: int # number of important landmarks to consider
def __init__(self) -> None:
def __init__(self, max_time: int) -> None:
with constants.AMENITY_SELECTORS_PATH.open('r') as f:
self.amenity_selectors = yaml.safe_load(f)
with constants.LANDMARK_PARAMETERS_PATH.open('r') as f:
parameters = yaml.safe_load(f)
self.city_bbox_side = parameters['city_bbox_side']
max_bbox_side = parameters['city_bbox_side']
self.radius_close_to = parameters['radius_close_to']
self.church_coeff = parameters['church_coeff']
self.park_coeff = parameters['park_coeff']
self.tag_coeff = parameters['tag_coeff']
self.N_important = parameters['N_important']
with constants.OPTIMIZER_PARAMETERS_PATH.open('r') as f:
parameters = yaml.safe_load(f)
speed = parameters['average_walking_speed']
detour = parameters['detour_factor']
max_walk_dist = (max_time/2)/60*speed*1000/detour
self.city_bbox_side = min(max_walk_dist, max_bbox_side)
self.overpass = Overpass()
CachingStrategy.use(JSON, cacheDir=constants.OSM_CACHE_DIR)
@ -72,22 +81,22 @@ class LandmarkManager:
L = []
bbox = self.create_bbox(center_coordinates)
# list for sightseeing
if preferences.sightseeing.score != 0:
score_function = lambda loc, n_tags: int((self.count_elements_close_to(loc) + ((n_tags**1.2)*self.tag_coeff) )*self.church_coeff)
if preferences.sightseeing.score != 0: # self.count_elements_close_to(loc) +
score_function = lambda loc, n_tags: int((((n_tags**1.2)*self.tag_coeff) )*self.church_coeff)
L1 = self.fetch_landmarks(bbox, self.amenity_selectors['sightseeing'], SIGHTSEEING, score_function)
self.correct_score(L1, preferences.sightseeing)
L += L1
# list for nature
if preferences.nature.score != 0:
score_function = lambda loc, n_tags: int((self.count_elements_close_to(loc) + ((n_tags**1.2)*self.tag_coeff) )*self.park_coeff)
score_function = lambda loc, n_tags: int((((n_tags**1.2)*self.tag_coeff) )*self.park_coeff)
L2 = self.fetch_landmarks(bbox, self.amenity_selectors['nature'], NATURE, score_function)
self.correct_score(L2, preferences.nature)
L += L2
# list for shopping
if preferences.shopping.score != 0:
score_function = lambda loc, n_tags: int(self.count_elements_close_to(loc) + ((n_tags**1.2)*self.tag_coeff))
score_function = lambda loc, n_tags: int(((n_tags**1.2)*self.tag_coeff))
L3 = self.fetch_landmarks(bbox, self.amenity_selectors['shopping'], SHOPPING, score_function)
self.correct_score(L3, preferences.shopping)
L += L3
@ -296,19 +305,25 @@ class LandmarkManager:
break
if "wikipedia" in tag:
n_tags += 3 # wikipedia entries count more
n_tags += 1 # wikipedia entries count more
if tag == "wikidata":
Q = elem.tag('wikidata')
site = Site("wikidata", "wikidata")
item = ItemPage(site, Q)
item.get()
n_languages = len(item.labels)
n_tags += n_languages/10
if "viewpoint" in tag:
n_tags += 10 # wikipedia entries count more
# if tag == "wikidata":
# Q = elem.tag('wikidata')
# site = Site("wikidata", "wikidata")
# item = ItemPage(site, Q)
# item.get()
# n_languages = len(item.labels)
# n_tags += n_languages/10
if elem_type != "nature":
if "leisure" in tag and elem.tag('leisure') == "park":
elem_type = "nature"
if elem_type == "nature":
n_tags += 1
if landmarktype != SHOPPING:
if "shop" in tag: