Rub21
4/26/2013 - 10:36 PM

gistfile1.txt

#!/usr/bin/env python

import sys
import xml.parsers.expat
from dateutil.parser import parse
import json

if (len(sys.argv) < 2):
    raise 'Usage: stm.py changeset.osm changeset.json'

osm_filename = sys.argv[1]
json_filename = sys.argv[2]

print("piping %s -> %s" % (osm_filename, json_filename))

geojson = { "type": "FeatureCollection", "features": [] }
counter = 0
def save(attrib):
    global counter
    counter = counter +1   
    #print counter  
    attrib_user = attrib.get('user', "none")
    pt = {
            "type": "Feature",
            "geometry": {
                "type": 'Point',
                "coordinates": [float(attrib.get('lon', 0)), float(attrib.get('lat', 0))]
            },
            "properties": {
                "user": attrib_user,
                "version": int(attrib['version']),
                "timestamp": int(parse(attrib["timestamp"]).strftime('%s'))
            }
        } 
    geojson['features'].append(pt)
    if (counter % 10000 == 0):
        #print counter
        json.dump(geojson, open(json_filename, 'w'))
        print("%d done" % counter)


def start_element(name, attrs):
    if name == 'node':
        save(attrs)

p = xml.parsers.expat.ParserCreate()
p.StartElementHandler = start_element

p.ParseFile(open(osm_filename))