Benutzer:MarcelM
Version vom 11. April 2010, 13:51 Uhr von imported>MarcelM
Beim Plakatieren bietet es sich an, ein GPS-Gerät mitzunehmen und an der Position jedes aufgehängten Plakats eine Wegpunktmarkierung zu setzen. Mit untenstehendem Skript kann die entstehende GPX-Datei umgewandelt werden, um die Koordinaten auf einer der Unterseiten von NRW:Landtagswahl_2010/Plakate einzutragen.
#!/usr/bin/env python # coding: utf-8 # # Author: Marcel Martin, marcel punkt martin at qusatz punkt de # import sys, getopt, urllib, json import xml.etree.cElementTree as etree ANZAHL = '1-2' AUFHAENGER = '[[Benutzer:XYZ|XYZ]]' GPX_NS = '{http://www.topografix.com/GPX/1/0}' def usage(): print "Aufruf: gpx2plakateliste <gpx-datei>" print print "Liest alle Wegpunkte (waypoints) aus einer GPX-Datei, fügt mit Nominatim" print "(http://nominatim.openstreetmap.org/) Straßennamen und Hausnummern hinzu (wenn vorhanden)" print "und gibt Zeilen aus, die in eine der Unterseiten von" print "http://wiki.piratenpartei.de/NRW:Landtagswahl_2010/Plakate" print "eingefügt werden können." print print "Optionen:" print print " -a <anzahl> Text, der in der 'Anzahl'-Spalte eingetragen wird. Vorgabe:", ANZAHL print " -b <benutzer> Text, der in der 'Aufhänger'-Spalte eingetragen wird. Vorgabe:", AUFHAENGER sys.exit(1) def gpx_waypoints(f): """Return a list of (lat, lon) tuples.""" doc = etree.parse(f) root = doc.getroot() waypoints = [] for e in root.findall(GPX_NS+'wpt'): lat = e.get('lat') lon = e.get('lon') waypoints.append( (lat, lon) ) return waypoints def main(): try: opts, args = getopt.getopt(sys.argv[1:], "a:b:") except getopt.GetoptError: usage() sys.exit(1) anzahl = ANZAHL aufhaenger = AUFHAENGER for o, a in opts: if o == '-a': anzahl = a if o == '-b': aufhaenger = a if len(args) != 1: print "Es fehlt der Name genau einer GPX-Datei." print usage() for (lat, lon) in gpx_waypoints(args[0]): url = 'http://nominatim.openstreetmap.org/reverse?format=json&lat=%(lat)s&lon=%(lon)s&zoom=18&addressdetails=1' % locals() content = urllib.urlopen(url).read() d = json.loads(content) road = d[u'address'].get(u'road') if road is None: address = '-' else: hn = d[u'address'].get(u'house_number') if hn is None: address = road else: address = road + " " + str(hn) print u"| %(address)s || %(lon)s || %(lat)s || DIN A1 || %(anzahl)s || - || %(aufhaenger)s || {{RAG-left-long-A}} || - || - ||\n|-" % locals() if __name__ == '__main__': main()