#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 lon = [] lat = [] #Eingabe Ort x1 = [] x2 = [] def EINGABE(SZ, x): lon1 = 0.0 lon2 = 0.0 lat1 = 0.0 lat2 = 0.0 eingabe = raw_input(SZ) s = list(eingabe) print s 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 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, lon, lat lon.append(Liste[4]) lat.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 = raw_input("Bitte geben Sie die Nummer des gewuenschten Orts ein: ") auswahl = int(auswahl) print lon [auswahl - 1] Laengengrad = lon [auswahl - 1] Breitengrad = lat [auswahl - 1] Koordinaten = [] Koordinaten.append(Laengengrad) Koordinaten.append(Breitengrad) return Koordinaten K1 = EINGABE("Start eingeben: ", x1) print K1 L1 = float(K1[0]) B1 = float(K1[1]) #print lon1 K2 = EINGABE("Ziel eingeben: ", x2) L2 = float(K2[0]) B2 = float(K2[1]) #Berechnung der Entfernung print L1 print L2 distanz = 6371.0 * m.acos( m.cos(B1) * m.cos(B2) * m.cos(L1 - L2) + m.sin(L1) * m.sin(L2) ) print distanz