Meßtischblätter – berechnet#

Für das Projekt »Gottesanberin gesucht« [1] stand die Frage, wie sich die Koordinaten aller Meldungen für Auswertungen nach Meßtischblattnummern aggregieren lassen. Nun wird auf Wikipedia das Meßtischblatt [2] als veraltet eingestuft, weil die Koordinaten der modernen Kartendienste sehr viel feiner auflösen können. Für die Publikation sensibler Daten, z.B. Standorte seltener Pflanzen und Tiere, ist eine gröbere Auflösung eventuell eine gute Lösung. Ein zweiter wichtiger Grund für die Verwendung der Meßtischblätter, sind alte Auswertungen, die sich so leichter vergleichen lassen, denn geforscht wurde auch schon vor der Erfindung des Internets.

Es war gar nicht so einfach eine Website zu finden, die man als Service hätte nutzen können. Es gibt solche Seiten, aber eine automatisierte Abfrage war generell schwierig.

Nun habe ich es noch einmal versucht, und ein kleines Python-Script löst nun die Aufgabe und berechnet aus den Koordinaten moderner Kartendienste die dazu passende Nummer des Meßtischblattes.

"""

   x-------o  o-------o o-------o o-------o o-------o o-------o
   |       |  |       | |       | |       | |       | |       |
   | 0502  |  |  ...  | | 0519  | | 0520  | | 0521  | | ...   |
   |       |  |       | |       | |       | |       | |       |
   o-------o  o-------o o-------o o-------o o-------o o-------o                                                            
                                                              
   o-------o                          ^                                   
   |       |                          |                   
   | ...   |                          |                   
   |       |                          o--- nördlichste    
   o-------o                               Meßtischblätter
                                                          
   o-------o   x = Nullpunkt  55.49839, 6.0                       
   |       |                                              
   | 4101  |  <-- Meßtischblatt am weitesten im Westen   
   |       |                                              
   o-------o   
               
   o-------o
   |       |   
   | ...   |   
   |       |   
   o-------o   


Ausgehend vom O-Punkt (virutelle Karte mit der Bezeichnung 0502
weil für Zeile 0519, 0520, 0521 die nördlichsten MTB existieren.
Für die Berechnung müssen die Opensteetmap-Koordinaten in Bogen-
maß umgerechent werden. Aus dem Kartenmaß für die Höhe (6 Grad)
und der Breite (10 Grad) kann dann die Kartennummer errechnet
werden.                                 
                                            
Die Grenzen, ob eine Karte mit der errechneten Nummer existiert
oder es eine virtuelle MTB-Nummer ist, wird nicht geprüft.
                                            
Ob die errechnite Nummer korrekt ist, kann auf der folgenden
Websiten nachgeprüft werden:            
                                            
- http://gk.historic.place/tools/selectbbox.htm
- https://moses-mendelssohn-institut.de/TK25  
"""

def get_mtb(zielbreite, ziellaenge):
    "Berechnung der Messtischblattnummer"
    
    # Berechnung der Zeilennummer

    zielbreite = float(str(zielbreite).replace(",", "."))
    ziellaenge = float(str(ziellaenge).replace(",", "."))
    
    startbreite = 55.49839 # Quadrat liegt im Meer Höhe Esbjerg (Dänemark)
    startlaenge = 6.0 #5.99931  # und markiert den 0-Punkt für die Berechnungen
    startnummer = 5 # Zeile im Kachelsystem 
    zielstunden, zielnach = (int(zielbreite // 1), zielbreite % 1)
    zielminsec = zielnach * 60              
    zielminuten = int(zielminsec // 1)      
    zielsekunden = (zielminsec % 1) * 60    
    startvor, startnach = (int(startbreite // 1), startbreite % 1)
    startminsec = startnach * 60            
    startminuten = int(startminsec // 1)    
    startsekunden = (startminsec % 1) * 60  
    diffstunden = startvor - zielstunden    
    diffminuten = startminuten - zielminuten
    diffgesamt = diffstunden * 60 + diffminuten
    part1 = int(startnummer + diffgesamt / 6)

    # Berechnung der Spaltennummer

    zielstunden, zielnach = (int(ziellaenge // 1), ziellaenge % 1)
    zielminsec = zielnach * 60              
    zielminuten = int(zielminsec // 1)      
    zielsekunden = (zielminsec % 1) * 60    
    startnummer = 2 # Spalte im Kachelsystem
                                            
    startvor, startnach = (int(startlaenge // 1), startlaenge % 1)
    startminsec = startnach * 60            
    startminuten = int(startminsec // 1)    
    startsekunden = (startminsec % 1) * 60  
    diffstunden = abs(startvor - zielstunden)
                                            
    diffminuten = abs(abs(startminuten) + abs(zielminuten))
    diffgesamt = abs(diffstunden) * 60 + abs(diffminuten)
    part2 = int(startnummer + diffgesamt / 10)

    return f"{part1:02d}{part2:02d}"        
                                            
if __name__ == '__main__':                  
                                            
                                            
    koordinaten = [
        (52.43257, 9.74487, 'Langenhagen'),
        (49.20753, 6.84002, 'Regionalverband Saarbrücken | Großro'), # mtb: 6707
        (51.3324, 12.07906, 'Leuna'), # mtb: 4638
        (50.71869, 7.11366, 'Kessenich | Bonn'), # mtb: 5208
        (52.05791, 13.18969, 'Kolzenburg'), # mtb: 3945
        (52.04057, 13.49549, 'Baruth'), # mtb: 3946 
        (51.36304, 11.11348, 'Kyffhäuserkreis | Bad Frankenhausen'), # mtb: 4632
        (51.57738, 13.99804, 'Großräschen'),   # mtb: 4450
        (52.95927, 9.9396, 'Visselhövede'),    # 
        (52.37225, 12.96936, 'Werder'),        # mtb: 3643
        (52.3874, 13.40296, 'Lichtenrade'),    # mtb: 3646
        (52.83862, 13.81361, 'Eberswalde'),    # mtb: 3149
    ]
    
    for zeile in koordinaten:

        zielbreite, ziellaenge, ort  =  zeile
        print(get_mtb(zielbreite, ziellaenge), ort)
        

Fußnoten#