overpass/main.py

98 lines
3.3 KiB
Python

from overpass import load_pois, OverpassApiError
from models import POI
import logging
from queries.bergbahn import BERGBAHN_QUERY
from queries.restaurant import RESTAURANT_QUERY
from storage import store_to_disk, StorageError
from pathlib import Path
# ---------------------------------------------------------------------------
# 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 = {
# "SW": (45.8, 5.9, 46.8, 8.2),
# "SO": (45.8, 8.2, 46.8, 10.5),
# "NW": (46.8, 5.9, 47.8, 8.2),
# "NO": (46.8, 8.2, 47.8, 10.5)
# }
BBOXEN = {
1: (45.8, 5.9, 46.4667, 7.4333),
2: (45.8, 7.4333, 46.4667, 8.9667),
3: (45.8, 8.9667, 46.4667, 10.5),
4: (46.4667, 5.9, 47.1333, 7.4333),
5: (46.4667, 7.4333, 47.1333, 8.9667),
6: (46.4667, 8.9667, 47.1333, 10.5),
7: (47.1333, 5.9, 47.8, 7.4333),
8: (47.1333, 7.4333, 47.8, 8.9667),
9: (47.1333, 8.9667, 47.8, 10.5)
}
# BBOXEN = {
# 1: (45.8, 5.9, 46.3, 7.05), 2: (45.8, 7.05, 46.3, 8.2), 3: (45.8, 8.2, 46.3, 9.35), 4: (45.8, 9.35, 46.3, 10.5),
# 5: (46.3, 5.9, 46.8, 7.05), 6: (46.3, 7.05, 46.8, 8.2), 7: (46.3, 8.2, 46.8, 9.35), 8: (46.3, 9.35, 46.8, 10.5),
# 9: (46.8, 5.9, 47.3, 7.05), 10: (46.8, 7.05, 47.3, 8.2), 11: (46.8, 8.2, 47.3, 9.35), 12: (46.8, 9.35, 47.3, 10.5),
# 13: (47.3, 5.9, 47.8, 7.05), 14: (47.3, 7.05, 47.8, 8.2), 15: (47.3, 8.2, 47.8, 9.35), 16: (47.3, 9.35, 47.8, 10.5)
# }
QUERY = {"bergbahn": BERGBAHN_QUERY}
OUTPUT_DIR = Path("results")
# ---------------------------------------------------------------------------
# Hauptlogik
# ---------------------------------------------------------------------------
def main() -> None:
collected_pois: list[POI] = []
query_name: str = list(QUERY.keys())[0]
overpass_query: str = QUERY[query_name]
failed_query_boxes: list[int] = []
# get pois from API
for name, bbox in BBOXEN.items():
logger.info(f"Starte Abfrage für Query: {query_name}, '{name}' mit bbox={bbox}")
try:
pois: list[POI] = load_pois(overpass_query=overpass_query, bbox=bbox)
logger.info(f"{name}: {len(pois)} POIs gefunden")
collected_pois.extend(pois)
except OverpassApiError as exc:
logger.error(f"Fehler bei '{name}': {exc}")
failed_query_boxes.append(name)
continue
logger.warning(f"failed query boxes: {failed_query_boxes}")
# store pois
if collected_pois:
try:
saved_path = store_to_disk(
results=collected_pois,
poi_type=query_name,
output_dir=OUTPUT_DIR,
)
logger.info(f"{len(collected_pois)} POIs gespeichert in {saved_path}")
except StorageError as exc:
logger.error(f"Fehler beim Speichern: {exc}")
else:
logger.warning(f"Nichts zu speichern")
if __name__ == "__main__":
main()