From OpenStreetMap Wiki
Jump to: navigation, search

osm2python : A Simple Python OSM XML Converter

Repository on BitBucket

Usage is extremely simple:

   >>> from osm2python import load_osm, dump_osm
   >>> load_osm(open('my_file.osm'))
   [<a list of all the XML elements as dictionaries (see help(load_osm) for more info)>]

Dump it back:

>>> dump_osm(open('another_file.osm', 'w'), new_doc_dictionary)

If you want to save the elements into a custom storage, define a callback:

>>> def cb(current, parent):
        print current
 >>> load_osm(open('my_file.osm'), cb)
(will just print all the dictionaries)

You can also create an arbitrary filter for the elements:

>>> flt = lambda elt: (elt['name'] == 'node' and
     (54 < int(elt['attrs']['lat']) < 56) and
     (82 < int(elt['attrs']['lon']) < 84))
>>> load_osm(open('my_file.osm'), element_filter=flt)
<list of dictionaries>

Another example: we want to get all the tags (filter) and print them (callback):

def cb(elt, parent=None):
    print "{k}: {v}".format(elt['attrs'])
flt = lambda elt: elt['name'] == 'tag'
load_osm(open('my_file.osm'), cb, flt)

This will print every tag value consecutively.

The project contains sample scripts to showcase the usage:

  • tree.py can import from OSM XML in Python objects representing the document and linking correctly one another.
  • osm_json.py dumps these dictionaries in json format.

Note: This project is not a PyPI package yet.