
Geografische Angaben mit Python erstellen
Mal angenommen, man will sich eine Weltkarte basteln mit einigen Daten für statistische Erhebungen. Ich weiß, Statistik ist heutzutage sehr unbeliebt geworden, weil man weiß, dass sie leider gefälscht wird. Die berühmte Statistik über den Klimawandel ist ja sehr bekannt. Aber es gibt ja immer noch andere Statistiken, wie zum Beispiel, wo wir am häufigsten Brot gegessen.

Es geht jetzt nur um die Häufigkeit, nicht, ob man Brot gegessen kann oder nicht, ob es noch gesund ist oder nicht. Der Mensch ist bedauerlicherweise sehr misstrauisch geworden, aber auch zu misstrauisch. Wer das alles nicht glaubt, kann ja seine eigenen Erhebungen machen.
Aber es geht jetzt nicht um Statistik, sondern um ein Beispiel wie man Geoangaben herausfinden kann für seine Zwecke. Ohne moralische Statistiken zu sagen, könnte man herausfinden, ob die Stadt aus unserer Sicht südlich vom 35. Breitengrad sich befindet.
Südlich vom 35. Breitengrad bedeutet, dass man im Winter auch ein ausreichendes Vitamin D3 Produktion auf der Haut, sofern man sich recht offen von der Kleidung zeigt, erzeugen kann. Auf Fuerteventura (Kanaren, Spanien) in einem dicken Schneeanzug wird man wohl kaum Vitamin D3 erzeugen können.
Haversine-Formel
Mit der Python-Bibliothek geopy kann man die Breiten- und Längengrade herausfinden. Das Zusammenspiel von Breiten- und Längengrad und der Haversine-Formel (aber auch Semiversus-Formel) kann dazu dienen die Entfernung auf Erdkugel zu berechnen, auch mit der Berücksichtigung von der Kugelform. Es ist eine 3D-Formel.

Hier das Script zum automatischen Einfügen von den Geodaten:
import mariadb
import time
from getpass import getpass
from geopy.geocoders import Nominatim
from geopy.exc import GeocoderTimedOut
def update_coordinates():
pw = getpass("MariaDB Passwort für 'sven': ")
geolocator = Nominatim(user_agent="auswanderung_project_v1")
try:
conn = mariadb.connect(
user="sven",
password=pw,
host="127.0.0.1",
database="auswanderung"
)
cursor = conn.cursor()
# Suche alle Städte ohne Koordinaten
cursor.execute("SELECT id, town, country FROM weltweitstadt WHERE latitude IS NULL")
rows = cursor.fetchall()
if not rows:
print("✨ Alle Städte haben bereits Koordinaten.")
return
for city_id, town, country in rows:
print(f"Suche Koordinaten für: {town}, {country}...", end=" ", flush=True)
try:
# Suche über OSM
location = geolocator.geocode(f"{town}, {country}")
if location:
cursor.execute(
"UPDATE weltweitstadt SET latitude = %s, longitude = %s WHERE id = %s",
(location.latitude, location.longitude, city_id)
)
conn.commit()
print(f"✅ ({location.latitude}, {location.longitude})")
else:
print("❌ Nicht gefunden.")
# Wichtig: OSM erlaubt nur 1 Anfrage pro Sekunde (Rate Limiting)
time.sleep(1.2)
except GeocoderTimedOut:
print("⏳ Timeout... überspringe.")
conn.close()
print("\nFertig! Deine Datenbank ist nun geografisch bereit.")
except mariadb.Error as e:
print(f"Fehler: {e}")
if __name__ == "__main__":
update_coordinates()Wenn das dann auf der Kommandozeile ausführt, erhält man diese Ausgabe.
