Bedeutung deutscher KFZ-Kennzeichen (volkstümliche Interpretation) (Software)
Man kann mit den Geodaten zwar auch sinnvolle Dinge anstellen, aber ich hatte letztlich eine Webseite mit volkstümlichen Interpretationen von KFZ-Kennzeichen gesehen und wollte den Quatsch unbedingt mal in Python umsetzen.
Falls jemand mit dem Programm oder den Daten herumspielen möchte, hier sind sie: ZIP-Archiv
Das Programm benötigt wegen der verwendeten f-Strings mindestens die Python-Version 3.6.
#!/usr/bin/env python3 import json import csv from tkinter import Tk, Canvas, Text from random import randint # Deutschlandkarte mit Anzeige der KFZ-Kennzeichen aller Kreise, Landkreise, # kreisfreien Städte und Kreisstädte sowie der angeblichen Volksmund- # Interpretationen dieser Kennzeichen. # # Info: https://bauforum.wirklichewelt.de/index.php?nr=11591 # def Zufallsfarben(Grundton): # Erzeugt zufällige Farben im Grundton des Bundeslandes. a, b = 100, 130 # Intervall der Zufallsstreuung der Bezirksfarbe c = 255-b # Einfluss des Bundeslandes auf die Farbe # Füllfarbe rf = randint(a, b)+c*int(Grundton[1:3], 16)//256 gf = randint(a, b)+c*int(Grundton[3:5], 16)//256 bf = randint(a, b)+c*int(Grundton[5:7], 16)//256 # Randfarbe wie Füllfarbe, nur dunkler rr = rf//2 gr = gf//2 br = bf//2 return (f"#{rf:02x}{gf:02x}{bf:02x}", f"#{rr:02x}{gr:02x}{br:02x}") class Bezirk: # Alle Informationen zu einem Bezirkspolygon def __init__(self, cid, B, Flächenfarbe, Randfarbe): # Canvas-ID der Bezirksfläche self.cid = cid # Informationen aus der Bezirkliste self.name = B["Name"] self.typ = B["Typ"] self.kfz = sorted(B["Kennzeichen"]) self.land = Bundesland[B["Bundesland"]][0] # Füllfarbe self.flächenfarbe = Flächenfarbe # Randfarbe self.randfarbe = Randfarbe # Wenn die Maus auf die Fläche kommt C.tag_bind(self.cid, "<Enter>", self.hervorhebung) # Wenn die Maus die Fläche wieder verlässt C.tag_bind(self.cid, "<Leave>", self.entfernehervorhebung) def hervorhebung(self, event=None): # Fläche rot einfärben, Rand dicker zeichnen C.itemconfig(self.cid, outline="red", fill="red", width=7) # Informationen im Textfenster ausgeben self.info() def entfernehervorhebung(self, event=None): # Ursprüngliche Flächenfarbe und Randstärke wiederherstellen C.itemconfig(self.cid, outline=self.randfarbe, fill=self.flächenfarbe, width=1) def info(self): # Informationen über den hervorgehobenen Bezirk ausgeben: # Textbereich löschen T.delete(1.0, "end") # Überschrift T.insert("end", f"n{self.typ} {self.name} in {self.land}n", "h1") # Liste der Kennzeichen und ihrer angeblichen Bedeutungen for k in self.kfz: T.insert("end", f"n{k} ({Kennzeichen[k]})n", "h2") if k in Interpretation: Ints = ("“n- „".join(sorted(Interpretation[k], key=lambda x: x.lower()))) T.insert("end", f"- „{Ints}“n") def canvaskoord(Polygon): # Umrechnung der Geokoordinaten auf das quadratische Canvas-Fenster return [(80*(x-5.5), Größe-100*(y-47.2)) for x, y in Polygon] # Umriss der BRD als Liste von Geokoordinaten with open("deutschland.json") as f: Deutschlandumriss = json.load(f) # Die „Bezirkliste“ ist eine Liste von Dictionarys mit Informationen über # Landkreise, Kreise und kreisfreie Städte in Deutschland. # # Koordinaten: entweder Liste mit Geokoordinaten (Ost, Nord) der Bezirksgrenzen # oder Liste solcher Listen für nicht zusammenhängende Flächen # # Name: Name des Bezirks # # Typ: Kreis, Landkreis oder kreisfreie Stadt # # Kennzeichen: Liste mit KFZ-Kennzeichen des Bezirks (einige Einträge sind # möglicherweise nicht korrekt, bitte überprüfen!) # # Bundesland: Kennzahl von "01" bis "16" with open("bezirke.json") as f: Bezirkliste = json.load(f) # Namen und Grundfarben der 16 Bundesländer; die fünf Farben sind # so gewählt, dass benachbarte Länder nicht dieselbe Farbe haben. with open("laender.csv") as f: Bundesland = {k: v for k, *v in csv.reader(f, delimiter="t")} # Liste der Ortskennzeichen with open("kfz.csv") as f: Kennzeichen = {k: v for k, v in csv.reader(f, delimiter="t")} # Liste mehr oder weniger geistreicher Interpretationen der Ortskennzeichen. # Verwendete Quellen: # https://www.chefkoch.de/forum/2,31,46569/Kfz-Zeichen-und-Ihre-ganz-spezielle-Deutung-aber-nicht-beleidigt-sein-Ck-users-danke.html # https://blog.jannewap.ws/2009/04/05/kfz-kennzeichen-fiese-interpretationen-gibt-es-uberall/ # https://www.meine-auto.info/ratgeber/kfz-kennzeichen/autokennzeichen-mal-anders.html # http://www.spiegel.de/auto/fahrkultur/auto-kennzeichen-kennen-sie-die-witzigsten-kuerzel-a-1192622.html # … sowie individuelle Einsendungen von Ortskundigen with open("kfzint.csv") as f: Interpretation = {k: v for k, *v in csv.reader(f, delimiter="t")} # GUI-Hauptfenster F = Tk() F.title("Deutschlands Kennzeichen") # Die Zeichenfläche/Canvas Größe = 800 C = Canvas(width=Größe, height=Größe, background="white", bd=0, highlightthickness=0) C.pack(side="left") # Infofenster rechts neben der Karte T = Text(width=40, wrap="word", font="sans 11", bd=0, highlightthickness=0) T.pack(fill="both", expand=True) # Erste Zeile des Infofensters hervorheben T.tag_config("h1", font="sans 12 bold") # Kennzeichen hervorheben T.tag_config("h2", font="sans 11 bold") # Gesamtumriss zeichnen for Polygon in Deutschlandumriss: C.create_polygon(canvaskoord(Polygon), fill="", outline="black", width=7) # Liste mit Bezirk-Objekten zusammenstellen: Bezirke = [] for B in Bezirkliste: # passende Farben aussuchen fläche, rand = Zufallsfarben(Bundesland[B["Bundesland"]][1]) # Liste der Polygone holen K = B["Koordinaten"] # Ist die Polygonliste nur eine Punkteliste? if type(K[0][0]) == float: # nochmal einpacken, Punkteliste wird zur Polygonliste K = [K] # für alle Polygone in der Polygonliste for Polygon in K: # Polygon zeichnen und Canvas-ID merken cid = C.create_polygon(canvaskoord(Polygon), fill=fläche, outline=rand, width=1) # Bezirk-Objekt anlegen Bezirke.append(Bezirk(cid, B, fläche, rand)) # Kreisfreie Städte und Stadtkreise dürfen nicht von den sie # umschließenden Kreisen und Landkreisen überdeckt werden und # werden deshalb in den Vordergrund gehoben: for B in Bezirke: if "Stadt" in B.typ: C.tag_raise(B.cid) F.mainloop()
--
Dipl.-Ing. Martin Vogel
Leiter des Bauforums
Bücher:
CAD mit BricsCAD
Bauinformatik mit Python
gesamter Thread:
- Geodaten aller Gemeinden in Deutschland als kostenloser JSON-Download -
Martin Vogel,
17.02.2018, 13:54
- Bedeutung deutscher KFZ-Kennzeichen (volkstümliche Interpretation) - Martin Vogel, 17.02.2018, 17:13