Добавил модуль, который рендерит в файлы .osm при помощи движка шаблонов Django 1.3.

На входе - dict. На выходе - либо строка (.render(), .dumps()), либо в файловый поток (.dump())


import bz2
from osm2py import template
doc = {
    'nodes': [{'id': ..., 'tags': {'highway': 'primary'}, ...}, {'id': ...}],
    'ways': [...],
    'relations': [...],
}
osmbz2 = bz2.BZ2File('mymap.osm.bz2', 'w')
template.dump(doc, osmbz2)

Также умеет сделать из точек путь:

>>> nodes = [{u'changeset': 5423505, 
>>>  u'id': 848517446,
>>>  u'lat': 54.753465400000003,
>>>  u'lon': 83.128522599999997,
>>>  u'timestamp': u'2010-08-07T10:39:15Z',
>>>  u'uid': 237049,
>>>  u'user': u'siberiano',
>>>  u'version': u'1'},
>>> {u'changeset': 7016890,
>>>  u'id': 1109991376,
>>>  u'lat': 54.753030099999997,
>>>  u'lon': 83.134304200000003,
>>>  u'timestamp': u'2011-01-19T03:13:30Z',
>>>  u'uid': 237045,
>>>  u'user': u'Magomogo',
>>>  u'version': u'1'}]

>>> template.make_dummy_way(nodes, {'highway': 'motorway'})
{'nodes': [{u'changeset': 5423505,
            u'id': 848517446,
            u'lat': 54.753465400000003,
            u'lon': 83.128522599999997,
            u'timestamp': u'2010-08-07T10:39:15Z',
            u'uid': 237049,
            u'user': u'siberiano',
            u'version': u'1'},
           {u'changeset': 7016890,
            u'id': 1109991376,
            u'lat': 54.753030099999997,
            u'lon': 83.134304200000003,
            u'timestamp': u'2011-01-19T03:13:30Z',
            u'uid': 237045,
            u'user': u'Magomogo',
            u'version': u'1'}],
 'ways': [{'id': 1,
           'nodes': [{'ref': 848517446},
                     {'ref': 1109991376}],
           'tags': {'highway': 'motorway'}}]}

https://bitbucket.org/siberiano/osm2python