Attraktiver Weg zwischen Sehenswürdigkeiten in Zürich

Geplant die Stadt Zürich zu besuchen? Auf dieser interaktiven Karte werden Sehenswürdigkeiten der Stadt Zürich dargestellt. Popup-Fenster liefern zusätzliche Informationen zu jeder Sehenswürdigkeit. Im Menü können Sehenswürdigkeiten ausgewählt und einen Weg zwischen den ausgewählten Sehenswürdigkeiten berechnet werden. Der Weg ist für den Fuss- oder Veloverkehr optimiert und kann für die Weiterverwendung als .gpx-Datei heruntergeladen werden.

Ich wollte die Methode Constraint Programming mit raumbezogenen Daten an einem konkreten Beispiel anwenden. Die seit Februar 2021 über den Open Data Katalog der Stadt Zürich frei verfügbaren Sehenswürdigkeiten der Region Zürich haben mich zu diesem Projekt inspiriert. In diesem Blog-Post beschreibe ich einige Hintergründe zu diesem Projekt.

Constraint Programming

Viele Fragestellungen können als Optimierungsproblem mit (Neben-) Bedingungen formuliert werden. Mithilfe von Constraint Programming und geeigneten Solvern können oft gute Lösungen gefunden werden. Typische Beispiele von Fragestellungen sind:

  • Erstellung von Mitarbeitende-Einsatzplänen
  • Planung von Maschinenauslastungen
  • Routenberechnungen von Lieferdiensten

Für dieses Projekt nutze ich Constraint Programming, um einen optimalen Weg zwischen ausgewählten Sehenswürdigkeiten zu finden. Sind ausgewählte Sehenswürdigkeiten gegeben, so soll das Programm eine Besuchsreihenfolge der Sehenswürdigkeiten bestimmen, welche die Gesamtdistanz des Weges minimiert. Diese Fragestellung kann auch als «Traveling Salesman Problem» betrachtet werden.

In diesem Projekt wird die Besuchsreihenfolge der Sehenswürdigkeiten mithilfe eines Python-Skripts berechnet. Dieses Skript benutzt dazu die OR-Tools von Google.

Datengrundlagen

Für die interaktive Karte werden folgende frei verfügbaren Datenquellen benutzt:

  • Standorte und Informationen von Sehenswürdigkeiten der Stadt Zürich. Folgende Kategorien werden berücksichtigt: Architektur, Aussichtspunkte, Denkmäler, Kirchen, Kunstobjekte im öffentlichen Raum (KiöR), Parks&Gärten, Plätze&Strassen sowie Zoo. Quellen: Zürich Tourismus und Open Data Katalog der Stadt Zürich
  • Attraktive Wege für den Fuss- und Veloverkehr werden mithilfe des Routing-Service der Stadt Zürich bezogen. Quelle: Open Data Katalog der Stadt Zürich
  • Die Daten der dargestellten Hintergrundkarte stammen von OpenStreetMap.

Aufbereitung der Daten

Damit das Endprodukt performant benutzt werden kann, werden die Informationen zu den Sehenswürdigkeiten sowie der Wege bezogen und vorverarbeitet. Insbesondere werden folgende Schritte ausgeführt:

  • Einige Standorte von Sehenswürdigkeiten werden angepasst, damit nicht mehrere Sehenswürdigkeiten am selben Standort auf der Karte dargestellt werden.
  • Zwischen jeder Kombination zweier Sehenswürdigkeiten wird ein attraktiver Weg für den Fuss- und Veloverkehr in beide Richtungen abgefragt. Der erhaltene Weg sowie die Weglänge wird gespeichert.
  • Die für die interaktive Karte benötigten Daten werden in einer Form gespeichert, so dass bei der Ausführung der Programms möglichst wenige Berechnungsschritte notwendig sind. Beispielsweise werden die Inhalte der Popup-Fenster der Sehenswürdigkeiten als Texte im html-Format gespeichert. Folglich müssen bei einem Abfrage diese Inhalte nicht zuerst aus den Rohdaten generiert werden.

Interaktive Karte

Die interaktive Karte ist eine Shiny-App basierend auf einem R-Skript. Beim Aufruf der interaktiven Karte werden alle verfügbaren Sehenswürdigkeiten als blaue Kreise dargestellt. Beim Anklicken einer Sehenswürdigkeit öffnet sich ein Popup-Fenster mit zusätzlichen Informationen zur entsprechender Sehenswürdigkeit.

Über das Menü oben links können Sehenswürdigkeiten aus einer Liste ausgewählt werden. Die Liste öffnet sich durch Anklicken des Feldes «Please select attractions». Ausgewählte Sehenswürdigkeiten erscheinen nun als orange Kreise. Unterhalb der ausgewählten Sehenswürdigkeiten kann ausgewählt werden, ob einen Weg für den Fussverkehr oder Veloverkehr angezeigt werden soll.

Damit einen Weg berechnet werden kann, müssen mindestens zwei unterschiedliche Sehenswürdigkeiten ausgewählt werden. Ist dies der Fall, wird mit einem Klick auf «Calculate path» ein optimierter Weg zwischen den ausgewählten Sehenswürdigkeiten berechnet und als blaue Linie auf der Karte dargestellt. Der vorgeschlagene Weg beginnt bei der nun grün dargestellten Sehenswürdigkeit und endet bei der rot dargestellten Sehenswürdigkeit. Weitere ausgewählte Sehenswürdigkeiten werden in orange dargestellt, alle weiteren Sehenswürdigkeiten grau. Durch Anklicken des Weges kann die totale Distanz abgefragt werden.

Bei der Berechnung des Weges wird ein Python-Skript ausgeführt. Vor der ersten Berechnung eines Weges wird im Hintergrund eine Python-Umgebung eingerichtet. Aus diesem Grund dauert die Berechnung und Darstellung eines Weges bei der ersten Ausführung länger.

Um den dargestellten Weg beispielsweise zur Navigation benutzen zu können, kann durch einen Klick auf «Download path as gpx» den Weg als .gpx-Datei heruntergeladen werden.

Ausblick

Während diesem Projekt habe ich mir einige Ideen notiert, wie diese Karte weiterentwickelt werden könnte. Bei Gelegenheit setze ich gerne weitere Ideen um. Aus diesem Grund freue ich mich auch auf Rückmeldungen vor Dir, insbesondere zu folgender Frage: Welche Funktionen fehlen Dir in der interaktiven Karte heute?

Ein Kommentar zu “Attraktiver Weg zwischen Sehenswürdigkeiten in Zürich

  1. Super. Sieht so einfach aus für mich als User; dürfte riesige Arbeit gewesen sein für Dich als Entwickler. Gratulation.
    Bei meinem kleinen (Online-)Spaziergang hat mich das Programm vom Rathaus über den Nord-Zugang auf den Lindenhof geführt. Real würden wir vermutlich eher über den Süd-Zugang hinauf gehen.
    Der Umweg über die Nordseite könnte zeitlich sogar gleichlang sein, also alles bestens.
    Mit besten Wünschen und
    mif freundichen Grüssen,
    Philipp

    Gefällt 1 Person

Hinterlasse einen Kommentar

Erstelle eine Website wie diese mit WordPress.com
Jetzt starten