Logo

RecyclRoute - Dokumentation RecyclRoute

Aufbau der Geodateninfrastruktur (GDI)

Die Geodateninfrastruktur von RecyclRoute besteht aus zwei Backends, einem Frontend sowie einem weiteren Backend-Docker-Server (Valhalla). Die folgende Darstellung zeigt die momentane Systemarchitektur von RecyclRoute:

GDI Architektur Schema

Backend

Das Backend umfasst sämtliche serverseitigen Prozesse und Daten. Die zugrundeliegende PostgreSQL/PostGIS-Datenbank wird über ein Python-Skript (API-Abfragen) automatisiert mit Geodaten und Routen befüllt. Das Backend interagiert dabei direkt mit der PostgreSQL/PostGIS-Datenbank, um neue Informationen abzuspeichern, um bestehende Informationen abzufragen oder um bestehende Informationen zu löschen. Das Backend ist in 3 verschiedene Server unterteilt. Der Hauptserver wird auf einem RaspberryPi gehostet und umfasst alle Anfragen an die Datenbank sowie an den zweiten Server. Da der RaspberryPi nur eine geringe Rechenleistung bietet, wird ein zweiter Server auf einem Laptop gehostet, dieser umfasst den gesamten Berechnungsprozess. Da der zweite Server auf eine API-Schnittstelle vom Repository Valhalla zugreifen muss, wird ein Docker-Container mit entsprechendem Image von Valhalla ebenfalls auf einem Laptop gehostet.

Hauptserver Punktverwaltung

Endpunkt Funktion Verwendung
GET /getPointTypes Gibt eine Liste von vordefinierten Punkt-Typen (z. B. „falsch deponiert“) zurück. add_marker_popup.jsx: greift alle möglichen Punkttypen ab
GET /getPointsByProject/{project_id} Holt alle Punkte, die einem bestimmten Projekt zugeordnet sind. Enthält Typ, Datum, Bild (als Base64), Koordinaten. MapLayerPopup.jsx : erstellt für jeden Punkt aus der Datenbank ein Marker mit zugehörigem Popup
POST /addPointWithDetails Fügt einen neuen Punkt zu einem Projekt hinzu. Übergibt Punkt-Typ, Datum, Koordinaten und ein Bild (Dateiupload per FormData). add_marker_popup.jsx: schickt einen neuen Punkt mit allen notwendigen informationen an die Datenbank um diesen dort zu speichern
DELETE /deletePoint/{point_id} Löscht einen Punkt anhand seiner ID aus der Datenbank. Wurde noch nicht im Frontend Implementiert

Hauptserver Projektverwaltung

Endpunkt Funktion Verwendung
POST /addProject Fügt ein neues Projekt hinzu mit Name, Gemeinde, Datum und Perimeter (Polygon). Berechnet Fläche und speichert GeoJSON. plannerpage.jsx und MapSwissimage.jsx : Sendet ein neues Projekt mit zugehöriger Geometrie in die Datenbank, um diese zu speichern.
GET /getProjects Holt alle Projekte aus der Datenbank, inklusive Geometrie (als GeoJSON) und Metadaten. plannerpage.jsx, add_marker_popup.jsx, ProjectManagerButton.jsxund MapLayerPopup.jsx: schreibt alle verfügbaren Projekte in eine Statevariabel
DELETE /deleteProject/{project_id} Löscht ein Projekt anhand der ID. Alle zugehörigen Punkte werden durch ON DELETE CASCADE mitgelöscht. ProjectDeleteCallbackPopup.jsx: Löscht das ausgewählte projekt und alle abhängigkeiten in der DB

Hauptserver Berechnungen

Endpunkt Funktion Verwendung
POST /berechnen Sendet Projekt-Perimeter und eine Punktgeometrie an einen zweiten Dienst (localhost:7999/calculate) zur Berechnung/Analyse. plannerpage.jsx : sendet das aktive Projekt mitsamt einem startpunkt um die Berechnung zu starten
POST /notifyCalculationDone Wird vom externen Dienst aufgerufen, sobald eine Berechnung abgeschlossen ist. Aktualisiert den internen Status. Main2.py (Berechnungsserver) : Der zweite Server schickt eine Nachricht an den ersten Server damit dieser weiss die Berechnung ist fertig.
GET /getCalculationStatus Gibt zurück, ob die Berechnung für ein bestimmtes Projekt abgeschlossen ist (pending oder done). CalculateWaitingPopUp.jsx : fragt periodisch ab ob die Berechnung beendet ist.

Berechnungsserver: Berechnungen

Endpunkt Funktion Verwendung
POST /calculate Führt eine Routing-Berechnung durch, basierend auf einem Polygon (Projekt-Perimeter) und einem Startpunkt. Main.py (Hauptserver) : Schickt eine anfrage mit Polygon und Startpunkt sowie Projekt ID an den Berechnungsserver, um die Berechnung zu starten.
GET /test Führt eine Test-Routing-Berechnung mit statischen, vordefinierten Daten aus. Wird lediglich für Debugging und Testzwecke verwendet.

Grundlagedaten

Name Herkunft Verwendung
swissTLM3D Bundesamt für Landestopografie (swisstopo) Bereitstellung der Strassengeometrie (Linien, Knoten, Topologie) für Routing und Kartenvisualisierung.
SwissImage Bundesamt für Landestopografie (swisstopo) Hochaufgelöster Bildhintergrund (Orthofoto) für die Kartenbasis.
Nominatim (OpenStreetMap) OpenStreetMap-Community (nominatim.openstreetmap.org) Suchfunktion (Geocoding) zur Adress- und Ortsnamenssuche.

Datenquellen-Details

swissTLM3D

SwissImage

Nominatim (OSM)

Datenbank

Die Datenbank wurde in PostgreSQL/PostGIS aufgebaut. Sie enthält u. a. folgende Tabellen:

Die folgenden Tabellen wurden nicht wie im geplanten Logischen Datenmodell erstellt:

Die Daten werden via den Hauptserver im Backend abgefragt und im Frontend genutzt oder vom Frontend über den Hauptserver in die Datenbank geschrieben.

Frontend

Das Frontend von RecyclRoute ist eine interaktive Webanwendung, die auf React und MapLibre basiert. Es besteht aus mehreren Komponenten:

React

React dient dem Aufbau der Benutzeroberfläche. Es wird verwendet, um interaktive Elemente wie die Kartenansicht, Navigation, Suchfunktionen, Eingabeboxen und Infoboxen umzusetzen. Der Zustand der Anwendung (z. B. „neues Projekt erstellen“) wird komponentenbasiert verwaltet und mit Popup-Fenstern angesteuert.

npm

Der Node Package Manager (npm) wird verwendet, um alle benötigten Bibliotheken und Abhängigkeiten (z.B. MapLibre, React, etc.) zu verwalten und das Frontend zu bauen.

MapLibre

MapLibre ist für die Darstellung und Interaktion mit der Karte zuständig. Layer aus der Datenbank werden via API (WMS/WFS) eingebunden, Routen dargestellt, Polygone und Punkte erfasst und Benutzerinteraktionen ermöglicht. Die Abfrage von Features (z. B. aktiviertes Projekt / Layer darstellen) erfolgt dynamisch.

Aufbau Frontend

Frontend_Aufbau

UI Design

Das Design von RecyclRoute ist bewusst minimalistisch und funktional gehalten. Die Farben Grün, Beige und Dunkelbraun spiegeln das Thema Nachhaltigkeit und Orientierung wider. Buttons und Kartenlayer sind einheitlich gestaltet und reagieren auf Mausbewegungen durch Hover- und Fokuszustände. Die Plannerpage und die Reportpage wurden bewusst farblich getrennt, um dem User bewusst zu machen, dass dies zwei unterschiedliche Funktionen für unterschiedliche Anwender sind.

Alle UI-Komponenten, wie auch Dropdowns und andere interaktive Felder wurden manuell mit HTML und CSS gestaltet. Es wurde bewusst auf die Verwendung von Material UI verzichtet, um so die gewünschten Visualisierungen besser umsetzen zu können und die Komponenten von Null auf aufgebaut werden konnten.

UX Design

Im Zentrum der User Experience (UX) steht eine intuitive Nutzerführung: Points of Interest (POI) oder Projekte sowie die dazugehörige Navigation lassen sich einfach erkunden, bearbeiten und aktualisieren. Die Anwendung wurde mit dem durchspielen eines gewöhnlichen Userpfades auf eine einfache Bedienbarkeit überprüft und optimiert.

Das gesamte Frontend wurde so programmiert, dass die meisten Aktionen in möglichst wenigen Klicks und mit einem geleiteten Pfad angewendet werden können, um entweder einen POI abzusetzen oder ein neues Projekt zu erstellen bis hin zur Routennavigation.


↑ Zurück zum Beginn der Webseite

← Funktionen Report
Installation →