added pep8 example
This commit is contained in:
parent
111e6836f6
commit
1f5bd92895
@ -111,6 +111,15 @@ def take_most_important(L: List[Landmark]) -> List[Landmark] :
|
|||||||
|
|
||||||
# Remove duplicate elements and elements with low score
|
# Remove duplicate elements and elements with low score
|
||||||
def remove_duplicates(L: List[Landmark]) -> List[Landmark] :
|
def remove_duplicates(L: List[Landmark]) -> List[Landmark] :
|
||||||
|
"""
|
||||||
|
Removes duplicate landmarks based on their names from the given list.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
L (List[Landmark]): A list of Landmark objects.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
List[Landmark]: A list of unique Landmark objects based on their names.
|
||||||
|
"""
|
||||||
L_clean = []
|
L_clean = []
|
||||||
names = []
|
names = []
|
||||||
|
|
||||||
@ -180,124 +189,6 @@ def create_bbox(coordinates: Tuple[float, float], side_length: int) -> Tuple[flo
|
|||||||
|
|
||||||
return min_lat, min_lon, max_lat, max_lon
|
return min_lat, min_lon, max_lat, max_lon
|
||||||
|
|
||||||
# Generates the list of landmarks for a given Landmarktype. Needs coordinates, a list of amenities and the corresponding LandmarkType
|
|
||||||
def get_landmarks_coords(coordinates: Tuple[float, float], list_amenity: list, landmarktype: LandmarkType) -> List[Landmark]:
|
|
||||||
|
|
||||||
# Read the parameters from the file
|
|
||||||
with open (os.path.dirname(os.path.abspath(__file__)) + '/parameters/landmarks_manager.params', "r") as f :
|
|
||||||
parameters = json.loads(f.read())
|
|
||||||
tag_coeff = parameters['tag coeff']
|
|
||||||
park_coeff = parameters['park coeff']
|
|
||||||
church_coeff = parameters['church coeff']
|
|
||||||
radius = parameters['radius close to']
|
|
||||||
bbox_side = parameters['city bbox side']
|
|
||||||
|
|
||||||
# Generate a bbox around current coordinates
|
|
||||||
bbox = create_bbox(coordinates, bbox_side)
|
|
||||||
|
|
||||||
# Initialize some variables
|
|
||||||
overpass = Overpass()
|
|
||||||
N = 0
|
|
||||||
L = []
|
|
||||||
|
|
||||||
for amenity in list_amenity :
|
|
||||||
query = overpassQueryBuilder(bbox=bbox, elementType=['way', 'relation'], selector=amenity, includeCenter=True, out='body')
|
|
||||||
result = overpass.query(query)
|
|
||||||
N += result.countElements()
|
|
||||||
|
|
||||||
for elem in result.elements():
|
|
||||||
|
|
||||||
name = elem.tag('name') # Add name, decode to ASCII
|
|
||||||
location = (elem.centerLat(), elem.centerLon()) # Add coordinates (lat, lon)
|
|
||||||
|
|
||||||
# Skip if unprecise location
|
|
||||||
if name is None or location[0] is None:
|
|
||||||
continue
|
|
||||||
|
|
||||||
# Skip if unused
|
|
||||||
if 'disused:leisure' in elem.tags().keys():
|
|
||||||
continue
|
|
||||||
|
|
||||||
else :
|
|
||||||
osm_type = elem.type() # Add type : 'way' or 'relation'
|
|
||||||
osm_id = elem.id() # Add OSM id
|
|
||||||
elem_type = landmarktype # Add the landmark type as 'sightseeing
|
|
||||||
n_tags = len(elem.tags().keys()) # Add number of tags
|
|
||||||
|
|
||||||
# Add score of given landmark based on the number of surrounding elements. Penalty for churches as there are A LOT
|
|
||||||
if amenity == "'amenity'='place_of_worship'" :
|
|
||||||
score = int((count_elements_within_radius(location, radius) + n_tags*tag_coeff )*church_coeff)
|
|
||||||
elif amenity == "'leisure'='park'" :
|
|
||||||
score = int((count_elements_within_radius(location, radius) + n_tags*tag_coeff )*park_coeff)
|
|
||||||
else :
|
|
||||||
score = count_elements_within_radius(location, radius) + n_tags*tag_coeff
|
|
||||||
|
|
||||||
if score is not None :
|
|
||||||
# Generate the landmark and append it to the list
|
|
||||||
landmark = Landmark(name=name, type=elem_type, location=location, osm_type=osm_type, osm_id=osm_id, attractiveness=score, must_do=False, n_tags=n_tags)
|
|
||||||
L.append(landmark)
|
|
||||||
|
|
||||||
return L
|
|
||||||
|
|
||||||
def get_landmarks_nominatim(city_country: str, list_amenity: list, landmarktype: LandmarkType) -> List[Landmark] :
|
|
||||||
|
|
||||||
# Read the parameters from the file
|
|
||||||
with open (os.path.dirname(os.path.abspath(__file__)) + '/parameters/landmarks_manager.params', "r") as f :
|
|
||||||
parameters = json.loads(f.read())
|
|
||||||
tag_coeff = parameters['tag coeff']
|
|
||||||
park_coeff = parameters['park coeff']
|
|
||||||
church_coeff = parameters['church coeff']
|
|
||||||
radius = parameters['radius close to']
|
|
||||||
|
|
||||||
overpass = Overpass()
|
|
||||||
nominatim = Nominatim()
|
|
||||||
areaId = nominatim.query(city_country).areaId()
|
|
||||||
|
|
||||||
# Initialize some variables
|
|
||||||
N = 0
|
|
||||||
L = []
|
|
||||||
|
|
||||||
for amenity in list_amenity :
|
|
||||||
query = overpassQueryBuilder(area=areaId, elementType=['way', 'relation'], selector=amenity, includeCenter=True, out='body')
|
|
||||||
result = overpass.query(query)
|
|
||||||
N += result.countElements()
|
|
||||||
|
|
||||||
for elem in result.elements():
|
|
||||||
|
|
||||||
name = elem.tag('name') # Add name
|
|
||||||
location = (elem.centerLat(), elem.centerLon()) # Add coordinates (lat, lon)
|
|
||||||
|
|
||||||
# skip if unprecise location
|
|
||||||
if name is None or location[0] is None:
|
|
||||||
continue
|
|
||||||
|
|
||||||
# skip if unused
|
|
||||||
if 'disused:leisure' in elem.tags().keys():
|
|
||||||
continue
|
|
||||||
|
|
||||||
else :
|
|
||||||
osm_type = elem.type() # Add type : 'way' or 'relation'
|
|
||||||
osm_id = elem.id() # Add OSM id
|
|
||||||
elem_type = landmarktype # Add the landmark type as 'sightseeing
|
|
||||||
n_tags = len(elem.tags().keys()) # Add number of tags
|
|
||||||
|
|
||||||
# Add score of given landmark based on the number of surrounding elements. Penalty for churches as there are A LOT
|
|
||||||
if amenity == "'amenity'='place_of_worship'" :
|
|
||||||
score = int((count_elements_within_radius(location, radius) + n_tags*tag_coeff )*church_coeff)
|
|
||||||
elif amenity == "'leisure'='park'" :
|
|
||||||
score = int((count_elements_within_radius(location, radius) + n_tags*tag_coeff )*park_coeff)
|
|
||||||
else :
|
|
||||||
score = count_elements_within_radius(location, radius) + n_tags*tag_coeff
|
|
||||||
|
|
||||||
if score is not None :
|
|
||||||
# Generate the landmark and append it to the list
|
|
||||||
landmark = Landmark(name=name, type=elem_type, location=location, osm_type=osm_type, osm_id=osm_id, attractiveness=score, must_do=False, n_tags=n_tags)
|
|
||||||
L.append(landmark)
|
|
||||||
|
|
||||||
return L
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def get_landmarks(list_amenity: list, landmarktype: LandmarkType, city_country: str = None, coordinates: Tuple[float, float] = None) -> List[Landmark] :
|
def get_landmarks(list_amenity: list, landmarktype: LandmarkType, city_country: str = None, coordinates: Tuple[float, float] = None) -> List[Landmark] :
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
"city bbox side" : 10,
|
"city bbox side" : 10,
|
||||||
"radius close to" : 27.5,
|
"radius close to" : 27.5,
|
||||||
"church coeff" : 0.6,
|
"church coeff" : 0.6,
|
||||||
"park coeff" : 1.4,
|
"park coeff" : 1.5,
|
||||||
"tag coeff" : 100,
|
"tag coeff" : 100,
|
||||||
"N important" : 30
|
"N important" : 30
|
||||||
}
|
}
|
@ -80,7 +80,7 @@ def test4(coordinates: tuple[float, float]) -> List[Landmark]:
|
|||||||
|
|
||||||
landmarks, landmarks_short = generate_landmarks(preferences=preferences, city_country=city_country, coordinates=coordinates)
|
landmarks, landmarks_short = generate_landmarks(preferences=preferences, city_country=city_country, coordinates=coordinates)
|
||||||
|
|
||||||
#write_data(landmarks)
|
write_data(landmarks)
|
||||||
|
|
||||||
|
|
||||||
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)
|
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)
|
||||||
|
16010
landmarks.txt
16010
landmarks.txt
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user