diff --git a/scripts/geodata/polygons/reverse_geocode.py b/scripts/geodata/polygons/reverse_geocode.py index 5d63f637..659268c3 100644 --- a/scripts/geodata/polygons/reverse_geocode.py +++ b/scripts/geodata/polygons/reverse_geocode.py @@ -611,6 +611,9 @@ class OSMReverseGeocoder(RTreePolygonIndex): for the dependency lookups and Tarjan's algorithm for finding strongly connected components to stitch together the polygons. ''' + + ADMIN_LEVEL = 'admin_level' + include_property_patterns = set([ 'name', 'name:*', @@ -622,6 +625,7 @@ class OSMReverseGeocoder(RTreePolygonIndex): 'short_name', 'short_name:*', 'admin_level', + 'place', 'wikipedia', 'wikipedia:*', ]) @@ -715,6 +719,13 @@ class OSMReverseGeocoder(RTreePolygonIndex): return index + def sort_level(self, i): + props, p = self.polygons[i] + return self.sort_levels.get(props[self.ADMIN_LEVEL], 0) + + def get_candidate_polygons(self, lat, lon, all_levels=False): + candidates = super(OSMReverseGeocoder, self).get_candidate_polygons(lat, lon, all_levels=all_levels) + return sorted(candidates, key=self.sort_level, reverse=True) if __name__ == '__main__': # Handle argument parsing here