[polygons] Property transforms/validation in Quattroshapes reverse geocoder
This commit is contained in:
@@ -30,62 +30,63 @@ class ReverseGeocoder(RTreePolygonIndex):
|
|||||||
|
|
||||||
sort_levels = {k: i for i, k in enumerate(sorted_levels)}
|
sort_levels = {k: i for i, k in enumerate(sorted_levels)}
|
||||||
|
|
||||||
include_properties_by_file = {
|
polygon_properties = {
|
||||||
COUNTRIES_FILENAME: set([
|
COUNTRIES_FILENAME: {
|
||||||
'qs_a0',
|
'qs_a0': safe_decode,
|
||||||
'qs_iso_cc',
|
'qs_iso_cc': safe_decode,
|
||||||
'qs_level',
|
'qs_level': safe_decode,
|
||||||
'qs_gn_id',
|
'qs_gn_id': int,
|
||||||
'qs_woe_id',
|
'qs_woe_id': int,
|
||||||
]),
|
},
|
||||||
ADMIN1_FILENAME: set([
|
ADMIN1_FILENAME: {
|
||||||
'qs_a1',
|
'qs_a1': safe_decode,
|
||||||
'qs_a1_lc',
|
'qs_a1_lc': safe_decode,
|
||||||
'qs_level',
|
'qs_level': safe_decode,
|
||||||
'qs_gn_id',
|
'qs_gn_id': int,
|
||||||
'qs_woe_id',
|
'qs_woe_id': int,
|
||||||
]),
|
},
|
||||||
ADMIN1_REGION_FILENAME: set([
|
ADMIN1_REGION_FILENAME: {
|
||||||
'qs_a1r',
|
'qs_a1r': safe_decode,
|
||||||
'qs_a1r_lc',
|
'qs_a1r_lc': safe_decode,
|
||||||
'qs_level',
|
'qs_level': safe_decode,
|
||||||
'qs_gn_id',
|
'qs_gn_id': int,
|
||||||
'qs_woe_id',
|
'qs_woe_id': int,
|
||||||
]),
|
},
|
||||||
ADMIN2_FILENAME: set([
|
ADMIN2_FILENAME: {
|
||||||
'qs_a2',
|
'qs_a2': safe_decode,
|
||||||
'qs_a2_lc',
|
'qs_a2_lc': safe_decode,
|
||||||
'qs_level',
|
'qs_level': safe_decode,
|
||||||
'qs_gn_id',
|
'qs_gn_id': int,
|
||||||
'qs_woe_id'
|
'qs_woe_id': int,
|
||||||
]),
|
},
|
||||||
ADMIN2_REGION_FILENAME: set([
|
ADMIN2_REGION_FILENAME: {
|
||||||
'qs_a2r',
|
'qs_a2r': safe_decode,
|
||||||
'qs_a2r_lc',
|
'qs_a2r_lc': safe_decode,
|
||||||
'qs_level',
|
'qs_level': safe_decode,
|
||||||
'qs_gn_id',
|
'qs_gn_id': int,
|
||||||
'qs_woe_id',
|
'qs_woe_id': int,
|
||||||
]),
|
},
|
||||||
LOCAL_ADMIN_FILENAME: set([
|
LOCAL_ADMIN_FILENAME: {
|
||||||
'qs_la',
|
'qs_la': safe_decode,
|
||||||
'qs_la_lc',
|
'qs_la_lc': safe_decode,
|
||||||
'qs_level',
|
'qs_level': safe_decode,
|
||||||
'qs_gn_id',
|
'qs_gn_id': int,
|
||||||
'qs_woe_id',
|
'qs_woe_id': int,
|
||||||
]),
|
},
|
||||||
LOCALITIES_FILENAME: set([
|
LOCALITIES_FILENAME: {
|
||||||
'qs_loc',
|
'qs_loc': safe_decode,
|
||||||
'qs_loc_alt',
|
'qs_loc_alt': safe_decode,
|
||||||
'qs_level',
|
'qs_level': safe_decode,
|
||||||
'qs_gn_id',
|
'qs_gn_id': int,
|
||||||
'qs_woe_id',
|
'qs_woe_id': int,
|
||||||
]),
|
},
|
||||||
NEIGHBORHOODS_FILENAME: set([
|
NEIGHBORHOODS_FILENAME: {
|
||||||
'name',
|
'name': safe_decode,
|
||||||
'name_en',
|
'name_en': safe_decode,
|
||||||
'woe_id',
|
'qs_level': safe_decode,
|
||||||
'gn_id'
|
'woe_id': int,
|
||||||
])
|
'gn_id': int,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@@ -103,10 +104,7 @@ class ReverseGeocoder(RTreePolygonIndex):
|
|||||||
for input_file in input_files:
|
for input_file in input_files:
|
||||||
f = fiona.open(input_file)
|
f = fiona.open(input_file)
|
||||||
|
|
||||||
if include_only_properties is not None:
|
include_props = polygon_properties.get(input_file)
|
||||||
include_props = include_only_properties.get(input_file, cls.include_only_properties)
|
|
||||||
else:
|
|
||||||
include_props = cls.include_only_properties
|
|
||||||
|
|
||||||
filename = os.path.split(input_file)[-1]
|
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']:
|
if not rec or not rec.get('geometry') or 'type' not in rec['geometry']:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
properties = rec['properties']
|
||||||
|
|
||||||
if filename == cls.NEIGHBORHOODS_FILENAME:
|
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']
|
poly_type = rec['geometry']['type']
|
||||||
if poly_type == 'Polygon':
|
if poly_type == 'Polygon':
|
||||||
|
|||||||
Reference in New Issue
Block a user