#Entfernungen berechnen #Python 2.7 #Author Gunnar Egenolff #letzte Bearbeitung 16.5.19 import re import math as m debug = 0 #2x fuer Start und Ziel #Eingabe Ort x1 = [] x2 = [] def EINGABE(SZ, x): eingabe = raw_input(SZ) s = list(eingabe) if debug == 1: print "Eingabe als Liste: ", (s) laenge = len(s) if debug == 1: print "Anzahl der Listenelemente / Laenge der Eingabe: ", (laenge) #Umwandlung Ortsname in Suchbegriff mit Toleranz i = 0 while i <= laenge - 1: #legt Liste mit regulaeren Ausdruecken an if debug == 1: print "Position des ersetzten Buchstaben: ", s[i] t = s[:] #Originalliste soll erhalten bleiben, gearbeitet wird mit modifizierter Liste t.insert(i,".?.?") #je ein Buchstabe wird durch Punkt ersetzt del t[i+1] mod = "".join(t) x.append("\t" + mod + "\s") #stellt sicher, dass Name nicht Teil eines laengeren Namens if debug == 1: print "geaenderte Liste: ", t if debug == 1: print "originale Liste: ", s if debug == 1: print "Liste der Suchbegriffe: ", x i = i + 1 #zeilenweises Auslesen der Ortedatei, Abgleich mit Suchbegriff linenr = 0 j = 0 k = 1 brt = [] lag = [] ort = [] schonmalgesehen = [] while j <= len(x) - 1: #fragt nacheinander alle Versionen des Ortsnamens ab linenr = 0 input = open("DE.tab") Suchbegriff = str(x[j]) while True: # liest Datenbank zeilenweise aus line = input.readline() if not line: break linenr += 1 if re.search(Suchbegriff, line) and not linenr in schonmalgesehen: #findet Ortsname Liste = line.split("\t") print k, Liste[7], Liste[3], Liste[4], Liste[5] #Ausgabe Plz, Ortsname, Breite, Laenge ort.append(Liste[3]) brt.append(Liste[4]) lag.append(Liste[5]) k += 1 schonmalgesehen.append(linenr) if debug == 2: print schonmalgesehen if debug == 2: print lon, lat if debug == 1: print "Suchbegriff: ", str(x[j]) j+=1 line = True #Aufforderung zur Auswahl auswahl = 1000 while auswahl - 1 > len(lag): while True: try: auswahl = raw_input("Bitte geben Sie die Nummer des gewuenschten Orts ein: ") auswahl = int(auswahl) break except ValueError: print "Bitte natuerliche Zahl eingeben!" Ort = ort [auswahl - 1] Laengengrad = lag [auswahl - 1] Breitengrad = brt [auswahl - 1] Koordinaten = [] Koordinaten.append(Laengengrad) Koordinaten.append(Breitengrad) Koordinaten.append(Ort) return Koordinaten K1 = EINGABE("Start eingeben: ", x1) L1 = m.radians(float(K1[0])) B1 = m.radians(float(K1[1])) O1 = K1[2] #print lon1 K2 = EINGABE("Ziel eingeben: ", x2) L2 = m.radians(float(K2[0])) B2 = m.radians(float(K2[1])) O2 = K2[2] #Berechnung der Entfernung if debug == 3: print "laenge1", L1, K1[0] if debug == 3: print "breite1", B1, K1[1] if debug == 3: print "laenge2", L2, K2[0] if debug == 3: print "breite2", B2, K2[1] distanz = 6371.0 * m.acos( m.cos(B1) * m.cos(B2) * m.cos(L2 - L1) + m.sin(B1) * m.sin(B2) ) print "Die Entfernung zwischen", O1,"und", O2,"betraegt: ", distanz, "km."