123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- #########################################################################
- # Beschreibung: Berechnung der Distanz Luftlinie zweier Orte #
- # in Deutschland in km. #
- # #
- # Erstellt von: Francine Theil, Kristin Weber, Willi Schlegel #
- # Datum: 10.06.2017 #
- # #
- #########################################################################
- #--------------------------------------------------------------
- # benoetigte module importieren
- import re # modul fuer regulaere ausdruecke
- import sys # modul fuer systemoperationen
- import math as m # modul fuer mathematische berechnungen
- import logging # modul fuer protokolierungen
- #--------------------------------------------------------------
- # verwendung von logging
- # das log-file wird als log.txt im hauptverzeichnis abgelegt
- deb=logging.basicConfig(filename="log.txt", level=logging.DEBUG,
- format="%(asctime)s: %(levelname)s: %(message)s ") #debug logging
- err=logging.basicConfig(filename="log.txt", level=logging.ERROR,
- format="%(asktime)s: %(levelname)s: %(message)s ") #error logging
- inf=logging.basicConfig(filename="log.txt", level=logging.INFO,
- format="%(asktime)s: $(levelname)s: %(message)s ") #info logging
- #-------------------------------------------------------------
- # menue erstellen ab diesem punkt beginnt die anwendung
- def menu(): #funktion als menue
- logging.info("Die Anwendung wurde ordnungsgemaess gestartet") #wenn die anwendung gestarten werden konnte, erfolgt ein logging
- print " "
- wahl = raw_input("Berechnung beginnen? [y/n] ") #abfrage ob die berechnug durchgefuehrt werden soll
- print " "
- if wahl == "y": #bei der eingabe eines y wird die funktion ort1() ausgefuehrt
- ort1()
- elif wahl == "n": #bei der eingabe eines n wird die anwendung beendet
- logging.info("Die Anwendung wurde ordnungsgemaess beendet") #logging ausgeben
- sys.exit()
- else: #falls eine falsche eingabe erfolgt wird ein error logging erzeugt
- logging.error("Die Anwendung konnte nicht gestartet werden") #und die funktion menu wird erneut ausgefuehrt
- menu()
- #--------------------------------------------------------------
- # funktion (menue) fuer die eingabe des ersten ortes
- def ort1(): #funktion fuer die eingabe des ersten ortes
- eingabe1=raw_input("Ersten Ort eingeben: ") #eingabe des ersten ortes
- datei=open("DE.tab") #datei oeffnen
- tmp = [] #datei temporaer gespeichert
- print " "
- for line in datei: #zeilenweise auslesen der datei
- if re.findall(eingabe1, line): #weiter wenn die eingabe mit dem ort in der datei ubereinstimmen
- logging.info("Der erste eingegebene Ort wurde gefunden") #logging als info wenn ort in der datei gefunden wurde
- a=line.split("\t") #eichenketten der gelesenen zeilen aufteilen
- print a[3] #dritte zeichenkette/spalte ausgeben
- tmp.append(a) #auflisten der gefundenen ergebnisse
- logging.debug(a) #logging als debug vermerken
- datei.close() #datei schliessen
- print " "
- nr = int(raw_input("Welcher Vorschlag soll verwendet werden? ")) #auswahl der vorgeschlagenen staedte
- print " "
- ort2(tmp[nr]) #weiter zur funktion -ort2- inkl. globale variablen
- #---------------------------------------------------------------
- def ort2(a): #funktion fuer die eingabe des zweiten ortes $
- eingabe2=raw_input("Zweiten Ort eingeben: ") #eingabe des zweiten ortes
- datei=open("DE.tab") #datei oeffnen
- tmp = [] #datei temporaer gespeichert
- print " "
- for line in datei: #zeilenweise auslesen aus der datei
- if re.findall(eingabe2, line): #weiter wenn die eingabe mit dem ort in der datei ubereinstimmen
- b=line.split("\t") #gelesene zeilen aufteilen (rstrip) und die position 7 bis 15 ([]) m$
- print b[3] #dritte zeichenkette/spalte ausgeben
- tmp.append(b) #auflisten der gefundenen ergebnisse
- logging.debug(b) #logging als debug ausgeben
- datei.close() #datei schliessen
- print " "
- nr = int(raw_input("Welcher Vorschlag soll verwendet werden? ")) #Abfrage, welcher Vorschlag verwendet werden soll
- print " "
- koordinaten(a,tmp[nr]) #
- #--------------------------------------------------------------
- # longitude und latidude beider orte definieren
- def koordinaten(a,b): #funktion fuer das auslesen der koordinaten des ersten ortes
- lat=a[4] #latitude des ersten ortes aus der liste extrahieren
- long=a[5] #longitude des ersten ortes aus der liste extrahieren
- koordinaten2(lat, long, b) #zur funktion -koordinaten2- uebergehen
- def koordinaten2(x1, y1, b): #funktion fuer da auslesen der koordinaten des zweiten ortes
- logging.debug("Die Koordinaten fuer den ersten Ort konnten ermittelt werden") #logging ausgeben
- lat = b[4] #latitude des zweiten ortes aus der liste extrahieren
- long = b[5] #longtude des zweiten ortes aus der liste extrahieren
- ausgabe(x1, y1, lat, long) #weiter zur funktion -ausgabe-
- def ausgabe(x1, y1, x2, y2): #funktioon zur ausgabe der extrahierten koordinaten
- logging.debug("Die Koordinaten fuer den zweiten Ort konnten ermittelt werden") #logging ausgeben
- print " "
- print "{}{}".format("Die X-Koordinate des ersten Ortes lautet: ", y1)
- print "{}{}".format("Die Y-Koordinate des ersten Ortes lautet: ", x1)
- print " "
- print "{}{}".format("Die X-Koordinaten des zweiten Ortes lautet: ", y2)
- print "{}{}".format("Die Y-Koordinaten des zweiten Ortes lautet: ", x2)
- print " "
- #--------------------------------------------------------------
- # funktion zur berechnung der distanz beider eingegebenen orte
- r = 6371.0 #angabe des radius der erde
- lat1=float(x1)*2*m.pi/360 #latitude des ersten ortes in bogenmass umrechnen
- lat2=float(x2)*2*m.pi/360 #latitude des zweiten ortes in bogenmass umrechnen
- long1=float(y1)*2*m.pi/360 #longtude des ersten ortes in bogenmass umrechnen
- long2=float(y2)*2*m.pi/360 #longtude des zweiten ortes in bogenmass umrechnen
- x1 = float(r*m.cos(long1)*m.cos(lat1)) #x koordinaten des ersten ortes berechnen
- y1 = float(r*m.sin(long1)*m.cos(lat1)) #y koordinaten des ersten ortes berechnen
- z1 = float(r*m.sin(lat1)) #z koordinaten des ersten ortes berechnen
- x2 = float(r*m.cos(long2)*m.cos(lat2)) #x koordinaten des zweiten ortes berechnen
- y2 = float(r*m.sin(long2)*m.cos(lat2)) #y koordinaten des zweiten ortes berechnen
- z2 = float(r*m.sin(lat2)) #z koordinaten des zweiten ortes berechnen
- skalarprod = x1*x2+y1*y2+z1*z2 #skalarprodukt der koordinaten bilden
- Betrag1 = m.sqrt(x1*x1+y1*y1+z1*z1) #betrag des ersten ortes bilden
- Betrag2 = m.sqrt(x2*x2+y2*y2+z2*z2) #betrag des zweiten ortes bilden
- tmp=m.acos(skalarprod/(Betrag1*Betrag2)) #arcuskosinus bilden
- ergebnis = tmp * r #ergebnis der entfernung beider orte
- ergebnis = round(ergebnis) #aufgerundetes ergebnis der entfernung beider orte
- print "{} {} {}".format("Die Orte sind ", ergebnis, "Km voneinander entfernt") #ausgabe der berechnung
- print " "
- logging.debug("Die Distanz konnte berechnet werden") #logging ausgeben
- menu() #zurueck zum menu
- #---------------------------------------------------------------
- # menue zur erneuten abfrage der berechnung
- menu() #funktion schliessen - zurueck zum menu - als "schleife"
|