[osm] don't include rail stations with no venue phrases (if there's a railway station at Foo, only include it if it's named "Foo Station", not just plain "Foo")
This commit is contained in:
@@ -194,7 +194,7 @@ class OSMAddressFormatter(object):
|
|||||||
sub_building_components = {k: v for k, v in six.iteritems(sub_building_components) if k in AddressFormatter.address_formatter_fields}
|
sub_building_components = {k: v for k, v in six.iteritems(sub_building_components) if k in AddressFormatter.address_formatter_fields}
|
||||||
return sub_building_components
|
return sub_building_components
|
||||||
|
|
||||||
def valid_venue_name(self, name, address_components, languages=None):
|
def valid_venue_name(self, name, address_components, languages=None, is_rail_station=False):
|
||||||
if not name:
|
if not name:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@@ -218,6 +218,9 @@ class OSMAddressFormatter(object):
|
|||||||
if street_phrases - venue_phrases and not venue_phrases - street_phrases and not (AddressFormatter.HOUSE_NUMBER in address_components and AddressFormatter.ROAD in address_components):
|
if street_phrases - venue_phrases and not venue_phrases - street_phrases and not (AddressFormatter.HOUSE_NUMBER in address_components and AddressFormatter.ROAD in address_components):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
if is_rail_station and not venue_phrases:
|
||||||
|
return False
|
||||||
|
|
||||||
if not address_components and not venue_phrases:
|
if not address_components and not venue_phrases:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@@ -774,6 +777,9 @@ class OSMAddressFormatter(object):
|
|||||||
|
|
||||||
return revised_place_tags, country
|
return revised_place_tags, country
|
||||||
|
|
||||||
|
def is_rail_station(self, tags):
|
||||||
|
return tags.get('railway', '').lower() == 'station'
|
||||||
|
|
||||||
def category_queries(self, tags, address_components, language, country=None, tag_components=True):
|
def category_queries(self, tags, address_components, language, country=None, tag_components=True):
|
||||||
formatted_addresses = []
|
formatted_addresses = []
|
||||||
possible_category_keys = category_config.has_keys(language, tags)
|
possible_category_keys = category_config.has_keys(language, tags)
|
||||||
@@ -880,6 +886,8 @@ class OSMAddressFormatter(object):
|
|||||||
else:
|
else:
|
||||||
language = None
|
language = None
|
||||||
|
|
||||||
|
is_rail_station = self.is_rail_station(tags)
|
||||||
|
|
||||||
revised_tags = self.normalize_address_components(tags)
|
revised_tags = self.normalize_address_components(tags)
|
||||||
sub_building_tags = self.normalize_sub_building_components(tags)
|
sub_building_tags = self.normalize_sub_building_components(tags)
|
||||||
revised_tags.update(sub_building_tags)
|
revised_tags.update(sub_building_tags)
|
||||||
@@ -897,8 +905,12 @@ class OSMAddressFormatter(object):
|
|||||||
building_venue_names = []
|
building_venue_names = []
|
||||||
|
|
||||||
building_components = self.building_components(latitude, longitude)
|
building_components = self.building_components(latitude, longitude)
|
||||||
|
building_is_rail_station = False
|
||||||
if building_components:
|
if building_components:
|
||||||
num_floors = self.num_floors(building_components)
|
num_floors = self.num_floors(building_components)
|
||||||
|
|
||||||
|
building_is_rail_station = self.is_rail_station(building_components)
|
||||||
|
|
||||||
num_basements = self.num_floors(building_components, key='building:levels:underground')
|
num_basements = self.num_floors(building_components, key='building:levels:underground')
|
||||||
|
|
||||||
for building_tags in building_components:
|
for building_tags in building_components:
|
||||||
@@ -931,8 +943,6 @@ class OSMAddressFormatter(object):
|
|||||||
if street_name:
|
if street_name:
|
||||||
address_components[AddressFormatter.ROAD] = self.abbreviated_street(street_name, language)
|
address_components[AddressFormatter.ROAD] = self.abbreviated_street(street_name, language)
|
||||||
|
|
||||||
venue_names.extend(building_venue_names)
|
|
||||||
|
|
||||||
expanded_components = address_components.copy()
|
expanded_components = address_components.copy()
|
||||||
for props, component in self.components.categorized_osm_components(country, osm_components):
|
for props, component in self.components.categorized_osm_components(country, osm_components):
|
||||||
if 'name' in props and component not in expanded_components:
|
if 'name' in props and component not in expanded_components:
|
||||||
@@ -940,7 +950,9 @@ class OSMAddressFormatter(object):
|
|||||||
|
|
||||||
street_languages = set((language,) if language not in (UNKNOWN_LANGUAGE, AMBIGUOUS_LANGUAGE) else languages)
|
street_languages = set((language,) if language not in (UNKNOWN_LANGUAGE, AMBIGUOUS_LANGUAGE) else languages)
|
||||||
|
|
||||||
venue_names = [venue_name for venue_name in venue_names if self.valid_venue_name(venue_name, expanded_components, street_languages)]
|
venue_names = [venue_name for venue_name in venue_names if self.valid_venue_name(venue_name, expanded_components, street_languages, is_rail_station=is_rail_station)]
|
||||||
|
venue_names.extend([venue_name for venue_name in building_venue_names if self.valid_venue_name(venue_name, expanded_components, street_languages, is_rail_station=building_is_rail_station)])
|
||||||
|
|
||||||
all_venue_names = set(venue_names)
|
all_venue_names = set(venue_names)
|
||||||
|
|
||||||
# Ditto for venue names
|
# Ditto for venue names
|
||||||
|
|||||||
Reference in New Issue
Block a user