2026-04-23 18:11:43 +02:00
2026-04-23 17:16:21 +02:00
2026-04-23 18:11:43 +02:00
2026-04-23 18:11:43 +02:00
2026-04-23 17:16:21 +02:00
2026-04-23 17:41:03 +02:00
2026-04-23 18:11:43 +02:00

README

Ich habe euch den GeoService demonstriert. Das ist ein Docker-basierter Mikroservice, welcher Fragen wie 'Zeige mir basierend auf meinem Standort die 3 per Auto nächstgelegenen Restaurants' oder 'Wieviele Schwimmbäder befinden sich im Umkreis von 3 Kilometer um meinen jetzigen Standort' etc.

Um den Service zu betreiben braucht es (valide) Daten. Diese kann man kaufen oder sich selbst bauen. Wir gehen hier den zweiten Weg :-). Das Ziel für die nächsten 3-4 Übungsstunden ist ein kleines Projekt, welches uns diese Basisdaten mithilfe von OpenStreetMap (Overpass) für die ganze Schweiz baut.

Es geht weniger darum, ein super End-Produkt zu bauen (also inhaltlich), als vielmehr darum viele in diesem Semester gelernte Konzepte und Techniken zu integrieren und an einem praxisnahen Beispiel miteinander zu erarbeiten und zu festigen.

Dies sind u.U.:

  • Zugriff mit Python auf eine API (Overpass)
  • Arbeiten mit git auf Gitea (commits, clone, checkout)
  • Dataclasses
  • sauberer Python-Code mit docstrings, typehints und logging
  • Speichern der Resultate in eine postgres-Datenbank
  • Parallelisierung (multithreading, multiprocessing) von Abfragen auf Overpass-API
  • Dekorator-Pattern (für Zeitmessung)
  • Schreiben von Pytests mit und ohne Mocks

Ziel:

Valide Daten für ausgewählte POI's (Points Of Interests) zu produzieren, z.B.

{
  "generated_at": "2026-03-09T23:03:40.107307+00:00",
  "poi_type": "rail_station",
  "count": 2511,
  "pois": [
    {
      "id": "node/2068758717",
      "type": "rail_station",
      "name": "St. Urban Ziegelei",
      "lat": 47.2271478,
      "lon": 7.8361018,
      "tags": {
        "name": "St. Urban Ziegelei"
      }
    },
    {
      "id": "node/2068760081",
      "type": "rail_station",
      "name": "St. Urban",
      "lat": 47.2317566,
      "lon": 7.8359882,
      "tags": {
        "name": "St. Urban"
      }
    }
  ]
}

Für die POIs machen wir unseren eigenen Datatyp 'POI' (dataclass) Ein einzelner POI:

      "id": "node/2068758717",
      "type": "rail_station",
      "name": "St. Urban Ziegelei",
      "lat": 47.2271478,
      "lon": 7.8361018,
      "tags": {
        "name": "St. Urban Ziegelei"
      }

Die Daten beziehen wir von https://overpass-turbo.eu/. Overpass bietet nebst diesem frontend-basierten Ansatz auch eine API-Schnittstelle (POST- und GET-Requests) an, welche wir nutzen können (OVERPASS_URL=https://overpass-api.de/api/interpreter).

Viel Spass im Projekt!

Description
No description provided
Readme 55 KiB
Languages
Python 100%