pvl2gunnar.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #Entfernungen berechnen
  2. #Python 2.7
  3. #Author Gunnar Egenolff
  4. #letzte Bearbeitung 16.5.19
  5. import re
  6. import math as m
  7. debug = 0
  8. #2x fuer Start und Ziel
  9. #Eingabe Ort
  10. x1 = []
  11. x2 = []
  12. def EINGABE(SZ, x):
  13. eingabe = raw_input(SZ)
  14. s = list(eingabe)
  15. if debug == 1: print "Eingabe als Liste: ", (s)
  16. laenge = len(s)
  17. if debug == 1: print "Anzahl der Listenelemente / Laenge der Eingabe: ", (laenge)
  18. #Umwandlung Ortsname in Suchbegriff mit Toleranz
  19. i = 0
  20. while i <= laenge - 1: #legt Liste mit regulaeren Ausdruecken an
  21. if debug == 1: print "Position des ersetzten Buchstaben: ", s[i]
  22. t = s[:] #Originalliste soll erhalten bleiben, gearbeitet wird mit modifizierter Liste
  23. t.insert(i,".?.?") #je ein Buchstabe wird durch Punkt ersetzt
  24. del t[i+1]
  25. mod = "".join(t)
  26. x.append("\t" + mod + "\s") #stellt sicher, dass Name nicht Teil eines laengeren Namens
  27. if debug == 1: print "geaenderte Liste: ", t
  28. if debug == 1: print "originale Liste: ", s
  29. if debug == 1: print "Liste der Suchbegriffe: ", x
  30. i = i + 1
  31. #zeilenweises Auslesen der Ortedatei, Abgleich mit Suchbegriff
  32. linenr = 0
  33. j = 0
  34. k = 1
  35. brt = []
  36. lag = []
  37. ort = []
  38. schonmalgesehen = []
  39. while j <= len(x) - 1: #fragt nacheinander alle Versionen des Ortsnamens ab
  40. linenr = 0
  41. input = open("DE.tab")
  42. Suchbegriff = str(x[j])
  43. while True: # liest Datenbank zeilenweise aus
  44. line = input.readline()
  45. if not line: break
  46. linenr += 1
  47. if re.search(Suchbegriff, line) and not linenr in schonmalgesehen: #findet Ortsname
  48. Liste = line.split("\t")
  49. print k, Liste[7], Liste[3], Liste[4], Liste[5] #Ausgabe Plz, Ortsname, Breite, Laenge
  50. ort.append(Liste[3])
  51. brt.append(Liste[4])
  52. lag.append(Liste[5])
  53. k += 1
  54. schonmalgesehen.append(linenr)
  55. if debug == 2: print schonmalgesehen
  56. if debug == 2: print lon, lat
  57. if debug == 1: print "Suchbegriff: ", str(x[j])
  58. j+=1
  59. line = True
  60. #Aufforderung zur Auswahl
  61. auswahl = 1000
  62. while auswahl - 1 > len(lag):
  63. while True:
  64. try:
  65. auswahl = raw_input("Bitte geben Sie die Nummer des gewuenschten Orts ein: ")
  66. auswahl = int(auswahl)
  67. break
  68. except ValueError:
  69. print "Bitte natuerliche Zahl eingeben!"
  70. Ort = ort [auswahl - 1]
  71. Laengengrad = lag [auswahl - 1]
  72. Breitengrad = brt [auswahl - 1]
  73. Koordinaten = []
  74. Koordinaten.append(Laengengrad)
  75. Koordinaten.append(Breitengrad)
  76. Koordinaten.append(Ort)
  77. return Koordinaten
  78. K1 = EINGABE("Start eingeben: ", x1)
  79. L1 = m.radians(float(K1[0]))
  80. B1 = m.radians(float(K1[1]))
  81. O1 = K1[2]
  82. #print lon1
  83. K2 = EINGABE("Ziel eingeben: ", x2)
  84. L2 = m.radians(float(K2[0]))
  85. B2 = m.radians(float(K2[1]))
  86. O2 = K2[2]
  87. #Berechnung der Entfernung
  88. if debug == 3: print "laenge1", L1, K1[0]
  89. if debug == 3: print "breite1", B1, K1[1]
  90. if debug == 3: print "laenge2", L2, K2[0]
  91. if debug == 3: print "breite2", B2, K2[1]
  92. distanz = 6371.0 * m.acos( m.cos(B1) * m.cos(B2) * m.cos(L2 - L1) + m.sin(B1) * m.sin(B2) )
  93. print "Die Entfernung zwischen", O1,"und", O2,"betraegt: ", distanz, "km."