Benutzer:MarcelM

Aus Piratenwiki
Wechseln zu: Navigation, Suche


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