diff --git a/scripts/geodata/addresses/components.py b/scripts/geodata/addresses/components.py index cfc3f830..e472744d 100644 --- a/scripts/geodata/addresses/components.py +++ b/scripts/geodata/addresses/components.py @@ -834,6 +834,19 @@ class AddressComponents(object): hyphen = six.u('-') if random.random < 0.5 else six.u(' ') address_components[AddressFormatter.SUBURB] = six.u('{}{}{}').format(neighborhood, hyphen, suffix) + japanese_node_admin_level_map = { + 'quarter': 9, + 'neighborhood': 10, + 'neighbourhood': 10, + } + + def japanese_neighborhood_sort_key(self, val): + admin_level = val.get('admin_level') + if admin_level and admin_level.isdigit(): + return int(admin_level) + else: + return self.japanese_node_admin_level_map.get(p.get('place'), 1000) + def abbreviated_state(self, state, country, language): abbreviate_state_prob = float(nested_get(self.config, ('state', 'abbreviated_probability'))) @@ -955,6 +968,9 @@ class AddressComponents(object): for component, components_values in grouped_osm_components.iteritems(): seen = set() + if country == JAPAN and component == AddressFormatter.SUBURB: + component_values = sorted(component_values, key=self.japanese_neighborhood_sort_key) + for component_value in components_values: if random_key and not (component in (AddressFormatter.STATE_DISTRICT, AddressFormatter.STATE) and not have_city): key, raw_key = self.pick_random_name_key(component_value, component, suffix=language_suffix)