regions.py

changeset 2
7378b802ddf8
parent 1
f9788970fa46
child 4
ac067a42b00f
equal deleted inserted replaced
1:f9788970fa46 2:7378b802ddf8
31 result[key] = child.attrib['v'] 31 result[key] = child.attrib['v']
32 if key == 'boundary' and result['boundary'] not in REGION_KEY_VALUES: 32 if key == 'boundary' and result['boundary'] not in REGION_KEY_VALUES:
33 return None # we're not interested in it! 33 return None # we're not interested in it!
34 if shape[-1] != shape[0]: 34 if shape[-1] != shape[0]:
35 raise ValueError('polygon is not closed: %r' % result) 35 raise ValueError('polygon is not closed: %r' % result)
36 if 'boundary' not in result: 36 if 'boundary' in result:
37 raise ValueError('polygon not tagged as a boundary: %r' % result) 37 shape = [nodes[ref] for ref in shape[:-1]]
38 shape = [nodes[ref] for ref in shape[:-1]] 38 choose_shapes(result, result['boundary']).append(Polygon(*shape))
39 choose_shapes(result, result['boundary']).append(Polygon(*shape)) 39 return result
40 return result
41 40
42 def parse_boundaries(root, *, nodes): 41 def parse_boundaries(root, *, nodes):
43 for child in root: 42 for child in root:
44 if child.tag == 'way': 43 if child.tag == 'way':
45 way = parse_way(child, nodes = nodes) 44 way = parse_way(child, nodes = nodes)
52 root = tree.getroot() 51 root = tree.getroot()
53 nodes = parse_nodes(root) 52 nodes = parse_nodes(root)
54 regions = dict() 53 regions = dict()
55 extra_shapes = list() 54 extra_shapes = list()
56 for way in parse_boundaries(root, nodes = nodes): 55 for way in parse_boundaries(root, nodes = nodes):
57 if 'boundary' in way and way['boundary'] != 'subregion' and 'name' in way: 56 if 'boundary' in way and 'ref' in way:
58 # defines a region 57 # defines a region
59 way['via_factor'] = int(way.get('via_factor', 1)) 58 way['via_factor'] = int(way.get('via_factor', 1))
60 if way['name'] in regions: 59 if way['ref'] in regions:
61 raise ValueError(str.format( 60 raise ValueError(str.format(
62 'Region {name} defined twice', 61 'Region {ref} defined twice',
63 name = repr(way['name']), 62 ref = repr(way['ref']),
64 )) 63 ))
65 regions[way['name']] = way 64 regions[way['ref']] = way
66 del way['boundary'] 65 del way['boundary']
67 if 'external' in way: 66 if 'external' in way:
68 way['boundary'] = 'minor_region' 67 way['boundary'] = 'minor_region'
69 for prefix in ['', 'short_', 'internal_']: 68 for prefix in ['', 'short_', 'internal_']:
70 name_key = prefix + 'name' 69 name_key = prefix + 'name:fi'
71 if name_key in way and way[name_key] and name_key + ':ja' not in way: 70 ja_name_key = prefix + 'name:ja'
72 way[name_key + ':ja'] = transliterate_katakana(way[name_key]) 71 if name_key in way and way[name_key] and ja_name_key not in way:
72 way[ja_name_key] = transliterate_katakana(way[name_key])
73 elif 'boundary' in way and 'is_in' in way: 73 elif 'boundary' in way and 'is_in' in way:
74 # adds an extra shape to an existing region 74 # adds an extra shape to an existing region
75 extra_shapes.append(way) 75 extra_shapes.append(way)
76 for extra_shape in extra_shapes: 76 for extra_shape in extra_shapes:
77 name = extra_shape['is_in'] 77 name = extra_shape['is_in']

mercurial