Das Programm über die Bahnhöfe der DB noch in Python 3.5:
from tkinter import *
#Klasse Bahnhof
class Bahnhof(object):
def __init__(self, name, breite, laenge):
self.name = name
self.breite = float(breite)
self.laenge = float(laenge)
def isHbf(self):
if self.name.find("Hbf")>-1:
return True
return False
#Parsen der csv-Datei und Erzeugen der Bahnhöfe
import csv
alleBahnhoefe = []
reader = csv.reader(open("DB_2016.csv"),delimiter=';')
for row in reader:
alleBahnhoefe.append(Bahnhof(row[2],row[4],row[5]))
#Bestimmen der max/min Breiten und Längen
maxLaenge = 0
for curBahnhof in alleBahnhoefe:
if curBahnhof.laenge>maxLaenge:
maxLaenge=curBahnhof.laenge
minLaenge = 10000000
for curBahnhof in alleBahnhoefe:
if curBahnhof.laenge<minLaenge:
minLaenge=curBahnhof.laenge
maxBreite = 0
for curBahnhof in alleBahnhoefe:
if curBahnhof.breite>maxBreite:
maxBreite=curBahnhof.breite
minBreite = 10000000
for curBahnhof in alleBahnhoefe:
if curBahnhof.breite<minBreite:
minBreite=curBahnhof.breite
#Zeichnen der Punkte
master = Tk()
canvas_width = 600
canvas_height = 600
w = Canvas(master, width=canvas_width,height=canvas_height)
w.pack()
#Normale Bahnhöfe in Blau
for curBahnhof in alleBahnhoefe:
actLaenge = (canvas_width) / (maxLaenge-minLaenge) * (curBahnhof.laenge-minLaenge);
actBreite = (canvas_height) / (maxBreite-minBreite) * (curBahnhof.breite-minBreite);
actX = int(actBreite);
actY = int(canvas_height-actLaenge);
w.create_oval(actX,actY, actX+5,actY+5, fill="#000000")
#Hauptbahnhöfe in Rot mit Namen (Ersten beiden Buchstaben)
for curBahnhof in alleBahnhoefe:
actLaenge = (canvas_width) / (maxLaenge-minLaenge) * (curBahnhof.laenge-minLaenge);
actBreite = (canvas_height) / (maxBreite-minBreite) * (curBahnhof.breite-minBreite);
actX = int(actBreite);
actY = int(canvas_height-actLaenge);
if curBahnhof.isHbf():
w.create_oval(actX,actY, actX+5,actY+5, fill="#ff0000")
w.create_text(actX+5,actY+5,text=curBahnhof.name[:2], fill="#ff0000")
mainloop()