[neighborhoods] adding option for suburb/city_district to replace city when the user-specified city is actually a neighborhood/district

This commit is contained in:
Al
2016-12-22 15:15:26 -05:00
parent dd744c6d99
commit 7d5512a82f

View File

@@ -969,7 +969,7 @@ class AddressComponents(object):
return self.neighborhoods_rtree.point_in_poly(latitude, longitude, return_all=True) return self.neighborhoods_rtree.point_in_poly(latitude, longitude, return_all=True)
def add_neighborhoods(self, address_components, neighborhoods, def add_neighborhoods(self, address_components, neighborhoods,
country, language, language_suffix=''): country, language, language_suffix='', replace_city=False):
''' '''
Neighborhoods Neighborhoods
------------- -------------
@@ -989,6 +989,8 @@ class AddressComponents(object):
name_key = ''.join((boundary_names.DEFAULT_NAME_KEY, language_suffix)) name_key = ''.join((boundary_names.DEFAULT_NAME_KEY, language_suffix))
raw_name_key = boundary_names.DEFAULT_NAME_KEY raw_name_key = boundary_names.DEFAULT_NAME_KEY
city_name = address_components.get(AddressFormatter.CITY)
for neighborhood in neighborhoods: for neighborhood in neighborhoods:
place_type = neighborhood.get('place') place_type = neighborhood.get('place')
polygon_type = neighborhood.get('polygon_type') polygon_type = neighborhood.get('polygon_type')
@@ -997,17 +999,16 @@ class AddressComponents(object):
neighborhood_level = AddressFormatter.SUBURB neighborhood_level = AddressFormatter.SUBURB
key, raw_key = self.pick_random_name_key(neighborhood, neighborhood_level, suffix=language_suffix) key, raw_key = self.pick_random_name_key(neighborhood, neighborhood_level, suffix=language_suffix)
standard_name = neighborhoods.get(name_key, neighborhood.get(raw_name_key , six.u('')))
name = neighborhood.get(key, neighborhood.get(raw_key)) name = neighborhood.get(key, neighborhood.get(raw_key))
if component == AddressFormatter.CITY_DISTRICT: if component == AddressFormatter.CITY_DISTRICT:
neighborhood_level = AddressFormatter.CITY_DISTRICT neighborhood_level = AddressFormatter.CITY_DISTRICT
# Optimization so we don't use e.g. Brooklyn multiple times # Optimization so we don't use e.g. same name multiple times for suburb, city_district, city, etc.
city_name = address_components.get(AddressFormatter.CITY) if not replace_city and name == city_name and (not standard_name or standard_name == city_name):
if name == city_name: continue
name = neighborhood.get(name_key, neighborhood.get(raw_name_key))
if not name or name == city_name:
continue
if not name: if not name:
name = neighborhood.get(name_key, neighborhood.get(raw_name_key)) name = neighborhood.get(name_key, neighborhood.get(raw_name_key))
@@ -1020,6 +1021,11 @@ class AddressComponents(object):
if not name: if not name:
continue continue
# For cases like OpenAddresses
if replace_city and city_name and (name.lower() == city_name.lower() or standard_name.lower() == city_name.lower()):
components.pop(AddressFormatter.CITY)
components[neighborhood_level] = name
neighborhood_levels[neighborhood_level].append(name) neighborhood_levels[neighborhood_level].append(name)
neighborhood_components = {} neighborhood_components = {}
@@ -1206,7 +1212,7 @@ class AddressComponents(object):
AddressFormatter.CITY_DISTRICT, AddressFormatter.SUBURB): AddressFormatter.CITY_DISTRICT, AddressFormatter.SUBURB):
name = address_components.get(component) name = address_components.get(component)
if name: if name:
name_components[name].append(component) name_components[name.lower()].append(component)
for name, components in name_components.iteritems(): for name, components in name_components.iteritems():
if len(components) > 1: if len(components) > 1: