Benutzer: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()