[polygons] Property transforms/validation in Quattroshapes reverse geocoder

This commit is contained in:
Al
2015-10-13 10:55:17 -04:00
parent 09beae845e
commit 28d1c471a7

View File

@@ -30,62 +30,63 @@ class ReverseGeocoder(RTreePolygonIndex):
sort_levels = {k: i for i, k in enumerate(sorted_levels)}
include_properties_by_file = {
COUNTRIES_FILENAME: set([
'qs_a0',
'qs_iso_cc',
'qs_level',
'qs_gn_id',
'qs_woe_id',
]),
ADMIN1_FILENAME: set([
'qs_a1',
'qs_a1_lc',
'qs_level',
'qs_gn_id',
'qs_woe_id',
]),
ADMIN1_REGION_FILENAME: set([
'qs_a1r',
'qs_a1r_lc',
'qs_level',
'qs_gn_id',
'qs_woe_id',
]),
ADMIN2_FILENAME: set([
'qs_a2',
'qs_a2_lc',
'qs_level',
'qs_gn_id',
'qs_woe_id'
]),
ADMIN2_REGION_FILENAME: set([
'qs_a2r',
'qs_a2r_lc',
'qs_level',
'qs_gn_id',
'qs_woe_id',
]),
LOCAL_ADMIN_FILENAME: set([
'qs_la',
'qs_la_lc',
'qs_level',
'qs_gn_id',
'qs_woe_id',
]),
LOCALITIES_FILENAME: set([
'qs_loc',
'qs_loc_alt',
'qs_level',
'qs_gn_id',
'qs_woe_id',
]),
NEIGHBORHOODS_FILENAME: set([
'name',
'name_en',
'woe_id',
'gn_id'
])
polygon_properties = {
COUNTRIES_FILENAME: {
'qs_a0': safe_decode,
'qs_iso_cc': safe_decode,
'qs_level': safe_decode,
'qs_gn_id': int,
'qs_woe_id': int,
},
ADMIN1_FILENAME: {
'qs_a1': safe_decode,
'qs_a1_lc': safe_decode,
'qs_level': safe_decode,
'qs_gn_id': int,
'qs_woe_id': int,
},
ADMIN1_REGION_FILENAME: {
'qs_a1r': safe_decode,
'qs_a1r_lc': safe_decode,
'qs_level': safe_decode,
'qs_gn_id': int,
'qs_woe_id': int,
},
ADMIN2_FILENAME: {
'qs_a2': safe_decode,
'qs_a2_lc': safe_decode,
'qs_level': safe_decode,
'qs_gn_id': int,
'qs_woe_id': int,
},
ADMIN2_REGION_FILENAME: {
'qs_a2r': safe_decode,
'qs_a2r_lc': safe_decode,
'qs_level': safe_decode,
'qs_gn_id': int,
'qs_woe_id': int,
},
LOCAL_ADMIN_FILENAME: {
'qs_la': safe_decode,
'qs_la_lc': safe_decode,
'qs_level': safe_decode,
'qs_gn_id': int,
'qs_woe_id': int,
},
LOCALITIES_FILENAME: {
'qs_loc': safe_decode,
'qs_loc_alt': safe_decode,
'qs_level': safe_decode,
'qs_gn_id': int,
'qs_woe_id': int,
},
NEIGHBORHOODS_FILENAME: {
'name': safe_decode,
'name_en': safe_decode,
'qs_level': safe_decode,
'woe_id': int,
'gn_id': int,
}
}
@classmethod
@@ -103,10 +104,7 @@ class ReverseGeocoder(RTreePolygonIndex):
for input_file in input_files:
f = fiona.open(input_file)
if include_only_properties is not None:
include_props = include_only_properties.get(input_file, cls.include_only_properties)
else:
include_props = cls.include_only_properties
include_props = polygon_properties.get(input_file)
filename = os.path.split(input_file)[-1]
@@ -114,8 +112,18 @@ class ReverseGeocoder(RTreePolygonIndex):
if not rec or not rec.get('geometry') or 'type' not in rec['geometry']:
continue
properties = rec['properties']
if filename == cls.NEIGHBORHOODS_FILENAME:
rec['properties']['qs_level'] = 'neighborhood'
properties['qs_level'] = 'neighborhood'
if include_props:
for k, func in include_props.iteritems():
v = properties.get(k, None)
if v is not None:
properties[k] = func(v)
include_props = set(include_props.keys())
poly_type = rec['geometry']['type']
if poly_type == 'Polygon':