From 1dbfc6a87bacaccc49a650459ebfe507f3eae0a3 Mon Sep 17 00:00:00 2001 From: Al Date: Sun, 1 Nov 2015 01:24:43 -0400 Subject: [PATCH] [polygons/neighborhoods] Not counting local admin polys unless they match OSM, fix for Paris arrondissements --- scripts/geodata/polygons/reverse_geocode.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/scripts/geodata/polygons/reverse_geocode.py b/scripts/geodata/polygons/reverse_geocode.py index c89b99e1..d72607d3 100644 --- a/scripts/geodata/polygons/reverse_geocode.py +++ b/scripts/geodata/polygons/reverse_geocode.py @@ -173,6 +173,11 @@ class NeighborhoodReverseGeocoder(RTreePolygonIndex): 'local_admin': 1, } + regex_replacements = [ + # Paris arrondissements, listed like "PARIS-1ER-ARRONDISSEMENT" in Quqttroshapes + (re.compile('^paris-(?=[\d])', re.I), ''), + ] + @classmethod def clone_repo(cls, path): subprocess.check_call(['rm', '-rf', path]) @@ -305,6 +310,8 @@ class NeighborhoodReverseGeocoder(RTreePolygonIndex): max_sim = 0.0 arg_max = None + normalized_qs_names = {} + for osm_name in osm_names: contains_ideographs = any(((char_scripts[ord(c)] or '').lower() in ideographic_scripts @@ -312,9 +319,14 @@ class NeighborhoodReverseGeocoder(RTreePolygonIndex): for i in candidates: props, poly = idx.polygons[i] - name = props.get('name') + name = normalized_names.get(i) if not name: - continue + name = props.get('name') + if not name: + continue + for pattern, repl in cls.regex_replacements: + name = pattern.sub(repl, name) + normalized_names[i] = name level = props.get(QuattroshapesReverseGeocoder.LEVEL) if is_neighborhood and level != 'neighborhood': @@ -363,7 +375,8 @@ class NeighborhoodReverseGeocoder(RTreePolygonIndex): if idx is zs or props.get(QuattroshapesReverseGeocoder.LEVEL, None) == 'neighborhood': props['polygon_type'] = 'neighborhood' else: - props['polygon_type'] = 'local_admin' + # We don't actually care about local admin polygons unless they match OSM + continue index.index_polygon(poly.context) index.add_polygon(poly.context, props)