def export_osm(osm_type, osm_id, name):
place = Place.get_or_abort(osm_type, osm_id)
items = place.items_with_candidates()
items = list(matcher.filter_candidates_more(items, bad=get_bad(items)))
if not any('candidate' in match for _, match in items):
abort(404)
items = [(item, match['candidate']) for item, match in items if 'candidate' in match]
lookup = {}
for item, osm in items:
lookup[(osm.osm_type, osm.osm_id)] = item
filename = cache_filename('{}_{}_overpass_export.xml'.format(osm_type, osm_id))
if os.path.exists(filename):
overpass_xml = open(filename, 'rb').read()
else:
overpass_xml = overpass.items_as_xml(items)
with open(filename, 'wb') as f:
f.write(overpass_xml)
root = etree.fromstring(overpass_xml)
for e in root:
if e.tag not in {'way', 'node', 'relation'}:
continue
for f in 'uid', 'user', 'timestamp', 'changeset':
del e.attrib[f]
pair = (e.tag, int(e.attrib['id']))
item = lookup.get(pair)
if not item:
continue
e.attrib['action'] = 'modify'
tag = etree.Element('tag', k='wikidata', v=item.qid)
e.append(tag)
xml = etree.tostring(root, pretty_print=True)
return Response(xml, mimetype='text/xml')
评论列表
文章目录