overpass_old/main.py

82 lines
2.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import logging
from overpass import fetch_overpass
from queries.bergbahn import BERGBAHN_QUERY
from queries.restaurant import RESTAURANT_QUERY
import requests
# ---------------------------------------------------------------------------
# Logging konfigurieren
# ---------------------------------------------------------------------------
# Erinnerung: Log-Levels -> DEBUG, INFO, WARNING, ERROR, CRITICAL
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(message)s",
datefmt="%H:%M:%S",
)
logger = logging.getLogger(__name__)
# ---------------------------------------------------------------------------
# Konfiguration
# ---------------------------------------------------------------------------
BBOXEN = {
"davos": (46.72, 9.70, 46.92, 10.00),
"schweiz": (45.8, 5.9, 47.8, 10.5),
}
QUERY = {"bergbahn": BERGBAHN_QUERY}
# ---------------------------------------------------------------------------
# Hauptlogik
# ---------------------------------------------------------------------------
def main() -> None:
query_name = list(QUERY.keys())[0]
for name, bbox in BBOXEN.items():
logger.info(f"Starte Abfrage für Query: {query_name}, '{name}' mit bbox={bbox}")
try:
result = fetch_overpass(overpass_query=QUERY.get(query_name,""), bbox=bbox)
except RuntimeError as e:
logger.error(f"API-Fehler bei '{name}': {e}")
continue
except requests.Timeout:
logger.error(f"Timeout bei '{name}' — bbox zu gross oder Server überlastet")
continue
elements = result.get("elements", [])
logger.info(f"'{name}': {len(elements)} Elemente gefunden")
for el in elements:
el_type = el.get("type", "?")
tags = el.get("tags", {})
el_name = tags.get("name", "")
logger.debug(f" [{el_type}] {el_name}")
logger.info("Fertig.")
if __name__ == "__main__":
main()
# Was ist passiert?
# * Wir haben den Logger eingebaut und können auf verschiedenen Levels loggen
# * Wir haben ein neues Model 'queries' erstellt und darin die Queries für bergbahn und restaurant abgelegt.
# -> Prinzip der Trennung von Daten und Logik!
# TASK:
# * bbox für Schweiz scheint zu gross und wirft einen error ... Lösungsmöglichkeiten?
# -> Wir können die Schweiz (Koordinaten) in Unterregionen aufsplitten. Macht das bitte.
# -> entfernt dazu die bbox für 'davos', nehmt die 'schweiz' und splittet sie in 4, 9 oder 16
# Koordinaten-Tuples auf.
# * Speichert und loggt in welchen Koordinaten-Tuples ein Fehler auftritt (gebt am Schluss eine Zusammenfassung
# dieser fehlerhaften Queries aus)
# * Baut eine neue Liste für die erfolgreichen Resultate und speichert diese Liste am Schluss als .json auf
# eurer Festplatte