Die Skigebiets-App zielt darauf ab, eine zentrale Plattform für verschiedene Skigebiete bereitzustellen, die wichtige Funktionen für den Wintersport bietet. Zu diesen Funktionen gehören eine hochwertige Karte für die Orientierung und Navigation im Gelände, aktuelle Wetter- und Lawinensituationen sowie Informationen zu Verpflegungsmöglichkeiten. Darüber hinaus ermöglicht die App die Darstellung von Statistiken für den Benutzer.
Die Dokumentation zum Projekt befindet sich hier.
- Hochwertige Karten zur Orientierung und Navigation im Gelände.
- Aktuelle Informationen über Wetter und Lawinensituation für jedes Skigebiet.
- Informationen zu Verpflegungsmöglichkeiten in den Skigebieten.
- Statistikfunktionen zur Analyse der Aktivitäten des Benutzers.
Hier sind die wichtigsten Ordner und Dateien für die Installation aufgelistet.
Mit Git in einem Terminal das GitHub Repository Alpine_Ace in ein lokales Verzeichnis klonen.
- Speicherort angeben
cd /path/to/workspace- Repository klonen
git clone https://github.com/AlpineAceManagement/Alpine_Ace.gitFolgende Python-Module müssen für das Backend Installiert werden:
- Python 3.8.19
- openmeteo-requests
- psycopg2
- requests
- requests-cache
- retry-requests
- pyproj
- pandas
- shutil
Die Module können über das requirements.txt im gewünschten Prompt installiert werden. Folgend den Code für die Erstellung des Environments mit Anaconda
- Speicherort für Environment festlegen
cd path/to/workspace- Python Environment erstellen
conda create -n my_env python=3.8.19 -c conda-forge --file path/to/requirements.txtFME Workbench 2023.1 (Build 23619) oder aktueller. Kann auf der Webseite von Safe Software heruntergeladen werden. Die Software ist Lizenzpflichtig.
QGIS Desktop 3.32.3-Lima oder aktueller. Kann auf der Webseite von QGIS heruntergeladen werden. Die Software ist Open-Source.
Die Webapp wurde mit der Node version 18.18.0 getestet.
Voraussetzung für das Projekt ist die GeoServer Version 2.24.2. Hier ist die offizielle Installationsanleitung für die verschieden Betriebssysteme.
Um die Webapp zum Laufen zu bringen, müssen folgende Schritte ausgeführt werden:
- neues Terminal öffnen -> als GitBash
- Ordner wechseln
cd alpine_ace- npm Module installieren
npm install-
In der Datei
alpine_ace\src\Components\Network\network_config.jsdie aktuelle IP Adresse eintragen. -
React-App starten
npm startDas Backend besteht aus vier Komponenten. Einem Datenbezugsteil (Python), einer Datenbank (Postgres inkl. Postgis), einem Node-Server und einem GeoServer der die Geodaten zur Verfügung stellt.
Das Schema der DB findet sich unter DB_PG/geoserver_DB_erstellen.txt. Schema in pgAdmin kopieren und ausführen.
Für die Python und Javascript Programme gibt es je eine Datei, in der die Verbindungsinformationen gespeichert sind.
Damit die bezogenen Daten per Python Script über die APIs gespeichert werden können, muss das config_template.py angepasst und in config.py umbenannt werden. Die Datei ist im Ordner API. Es müssen folgende Parameter geändert werden:
db_config = {
'host': 'host', #Hostname der DB
'port': 'port', #Port der DB
'database': 'database', #Name der DB
'user': 'user', #Username für die Verbindung zur DB
'password': 'password' #Passwort des Username
}Damit die Daten in der React App mit der Express API von der Datenbank bezogen werden können, muss das config_template.js angepasst und in config.js umbenannt werden. Die Datei ist im Ordner alpine_ace\src\DB. Es müssen folgende Parameter geändert werden:
module.exports = {
user: "username", // Username für die Verbindung zur DB
host: "hostname", // Hostname der DB
database: "databasename", //Name der DB
password: "password", //Passwort des Username
port: "portnumber", //Port der DB
};- Mit pgAdmin 4 eine neue Datenbank erstellen mit dem Namen:
geoserver - Extension postgis und pgrouting installieren.
CREATE EXTENSION postgis;
CREATE EXTENSION pgrouting;Download vom Höhenmodell DHM25 der Swisstopo. Wird für den Datenimport in der FME Workbench verwendet.
- Zurück ins Basisverzeichnis navigieren:
cd $(git rev-parse --show-toplevel)- Daten download starten:
python DB_PG/ASCII_Hoehenmodell_download.py- Verzeichnis
DB_PGöffnen. In diesem sind alle Dateien für den Datenbank Import gespeichert. Jedes Datenformat hat einen eigenen Unterordner. - Öffnen der FME Workbench
geoserver_Datenimport.fmw. Es werden alle Daten aus den verschiedenen Ordner und Datenformate in die Datenbank geschrieben. Dabei werden die Attribute und Geometrien so extrahiert und verändert, dass diese dem Datenbankschema entsprechen. Vor dem Start der FME Workbench muss unterTools -> FME Options -> Database Connectionsdie Verbindungsinformationen zur Datenbank eintragen werden. Vor dem Ausführen muss überprüft werden, das der Reader Pfad auf die Daten zeigen.
DB_PG\geoserver_DB_erstellen.txt: Datenbankschema für den ReaderDB_erstellen_script. Das Datenbankschema ist in der Dokumentation näher beschrieben
GeoPackage Daten:
DB_PG\gpkg_Daten\Pisten_OSM.gpkg: Daten für den ReaderPisten_OSMDB_PG\gpkg_Daten\Pisten_OSM.gpkg: Daten für den ReaderSkigebiete_OSMDB_PG\gpkg_Daten\Anlagen.gpkg: Daten für den ReaderAnlagen
Höhenmodell DHM 25:
DB_PG\ASCII_Hoehenmodell\dhm25_grid_raster.asc: Daten für den ReaderDHM25
CSV Dateien:
DB_PG\CSV_Daten\Restaurants_Arosa_Lenzerheide.csv: Daten für den ReaderRestaurants_Arosa_LenzerheideDB_PG\CSV_Daten\Parkplatz.csv: Daten für den ReaderParkplatzDB_PG\CSV_Daten\OeV.csv: Daten für den ReaderOeVDB_PG\CSV_Daten\meteo_stationen.csv: Daten für den Readermeteo_stationen
- Jetzt kann die Workbench ausgeführt werden, unter dem grünen Play-Button oben links. Die Userparameter sind in der Dokumentation näher beschrieben im Kapitel Pisten und Anlagen. Das ändern der Standartwerte ist nur Fortgeschritten Nutzern empfohlen.
Der Datenimport für alle Daten, das Routing ausgenommen, ist jetzt abgeschlossen.
- Verzeichnis
Routingöffnen. Hier sind alle Dateien für die Prozessierung des Routings. - Öffnen der FME Workbench
Routing_geoserver.fmw. Vor dem Ausführen muss überprüft werden, das der Reader Pfad auf die Daten zeigen.
Routing\alpine_ace_routing_DB_erweitern.txt: Datenbankschema für die Routing Erweiterung für den ReaderDB_erweitern_Routing- Daten von Reader
geoserver_datenvon der Datenbank
-
Jetzt kann die Workbench ausgeführt werden, unter dem grünen Play-Button oben links. Die Userparameter sind in der Dokumentation näher beschrieben im Kapitel Aufbereitung der Daten. Das ändern der Standartwerte ist nur Fortgeschritten Nutzern empfohlen.
-
Wenn nötig, anpassen der aufbereiteten Routing Daten im QGIS, siehe Dokumentation.
-
Routing Script in PG Admin 4 kopieren und ausführen:
Routing\alpine_ace_routing.txt
- Zu Datenbank Dump navigieren in Ordner
DB_PG.
cd DB_PG- Datenbank Dump importieren mit SQL. Username und Passwort der Datenbank einsetzten. Die Datei
DatenbankDump.sqlerhält alle Daten sowie das Datenbankschema. Das Routing ist bereits berechnet.
psql --host "#hostname" --port "5432" --username "#username" --dbname "geoserver" --file "DatenbankDump.sql"Um die Datenbank mit den API Daten zu befüllen, muss das main.py in Backend/API ausgeführt werden.
- Neues Terminal öffnen -> als Command Prompt
- Ordner wechseln
cd API- main.py ausführen
python main.py- neues Terminal öffnen -> als GitBash
- Verbindungsaufbau zum Node Server
cd alpine_ace/src/DB- Node Server starten
node connect_db.jsGeoServer Basis Installation gemäss Folien.
-
In der GeoServer Installation in den Ordner
webapps\geoserver\WEB-INFnavigieren. -
Kopiere die Datei
docs\web.xmlaus dem Repository und ersetze die entsprechende Datei in der GeoServer Installation. -
GeoServer neu starten mit der Start Datei unter:
bin\startup
- Arbeitsbereiche
- Arbeitsbereich hinzufügen
- Name
Alpine_Ace
- Namensraum URI
http://geoserver.org/Alpine_Ace
-
- Standardarbeitsbereich
- Security
-
- Erlaube Zugriff auf jede Rolle
- Speichern
- Datenspeicher
- Datenspeicher hinzufügen
- PostGIS
- Arbeitsbereich
Alpine_Aceauswählen - Name der Datenquelle
geoserver
- host
localhost
- port:
Portnummer - database
geoserver
- user
postgres
- passwd:
Passwort - Speichern
- Datenspeicher
- Datenspeicher hinzufügen
- Vektordatenquelle
GeoPackage - Arbeitsbereich
Alpine_Aceauswählen - Name der Datenquelle
swissBOUNDARIES3D
- Verbindungsparameter, database
DurchsuchenDateipfad:DB_PG\gpkg_Daten\swissBOUNDARIES3D_1_5_LV95_LN02.gpkg - Speichern
Folgende Layers müssen erstellt werden:
- Neuer Layer
- Arbeitsbereich:
Alpine_Ace:geoserveranwählen - Unter Layer mit Namensraum und Präfix , Zeile
restaurantauswählen undPublizieren - Koordinatenreferenzsystem:
Suche nach
EPSG:2056 - Begrenzendes Rechteck: Aus den Grenzen des Koordinatenreferenzsystems berechnen, anklicken
- Aus den nativen Grenzen berechnen, anklicken
- Speichern
- Neuer Layer
- Arbeitsbereich:
Alpine_Ace:geoserveranwählen - Unter Layer mit Namensraum und Präfix , Zeile
anlagenauswählen undPublizieren - Koordinatenreferenzsystem:
Suche nach
EPSG:2056 - Begrenzendes Rechteck: Aus den Grenzen des Koordinatenreferenzsystems berechnen, anklicken
- Aus den nativen Grenzen berechnen, anklicken
- Speichern
- Neuer Layer
- Arbeitsbereich:
Alpine_Ace:geoserveranwählen - Unter Layer mit Namensraum und Präfix , Zeile
bulletinsauswählen undPublizieren - Koordinatenreferenzsystem:
Suche nach
EPSG:2056 - Begrenzendes Rechteck: Aus den Grenzen des Koordinatenreferenzsystems berechnen, anklicken
- Aus den nativen Grenzen berechnen, anklicken
- Speichern
- Neuer Layer
- Arbeitsbereich:
Alpine_Ace:geoserveranwählen - Unter Layer mit Namensraum und Präfix , Zeile
oevauswählen undPublizieren - Koordinatenreferenzsystem:
Suche nach
EPSG:2056 - Begrenzendes Rechteck: Aus den Grenzen des Koordinatenreferenzsystems berechnen, anklicken
- Aus den nativen Grenzen berechnen, anklicken
- Speichern
- Neuer Layer
- Arbeitsbereich:
Alpine_Ace:geoserveranwählen - Unter Layer mit Namensraum und Präfix , Zeile
parkplatzauswählen undPublizieren - Koordinatenreferenzsystem:
Suche nach
EPSG:2056 - Begrenzendes Rechteck: Aus den Grenzen des Koordinatenreferenzsystems berechnen, anklicken
- Aus den nativen Grenzen berechnen, anklicken
- Speichern
- Neuer Layer
- Arbeitsbereich:
Alpine_Ace:geoserveranwählen - Unter Layer mit Namensraum und Präfix , Zeile
pistenauswählen undPublizieren - Koordinatenreferenzsystem:
Suche nach
EPSG:2056 - Begrenzendes Rechteck: Aus den Grenzen des Koordinatenreferenzsystems berechnen, anklicken
- Aus den nativen Grenzen berechnen, anklicken
- Speichern
- Layer hinzufügen
- Arbeitsbereich
Alpine_Ace:swissBOUNDARIES3Dauswählen - Unter Layer mit Namensraum und Präfix , Zeile
tlm_kantonsgebietauswählen undPublizieren - Koordinatenreferenzsystem:
Suche nach
EPSG:2056 - Begrenzendes Rechteck: Aus den Grenzen des Koordinatenreferenzsystems berechnen, anklicken
- Aus den nativen Grenzen berechnen, anklicken
- Speichern
- Layer hinzufügen
- Arbeitsbereich
Alpine_Ace:swissBOUNDARIES3Dauswählen - Unter Layer mit Namensraum und Präfix , Zeile
tlm_landesgebietauswählen undPublizieren - Koordinatenreferenzsystem:
Suche nach
EPSG:2056 - Begrenzendes Rechteck: Aus den Grenzen des Koordinatenreferenzsystems berechnen, anklicken
- Aus den nativen Grenzen berechnen, anklicken
- Speichern
Folgende SQL views müssen erstellt werden:
- Neuer Layer
- Arbeitsbereich:
Alpine_Ace:geoserveranwählen - SQL View konfigurieren
- Name der View:
a_a_nearest_vertex
- SQL-Statement:
SELECT
v.id,
v.the_geom
FROM
a_a_routing_noded_vertices_pgr AS v,
a_a_routing_noded AS e
WHERE
v.id = (
SELECT
id
FROM
a_a_routing_noded_vertices_pgr
ORDER BY
the_geom <-> ST_SetSRID(ST_MakePoint(%x%, %y%), 2056)
LIMIT 1
)
AND (e.source = v.id OR e.target = v.id)
GROUP BY
v.id, v.the_geomSchlage Parameter vor- Standardwert für x
2600000
Reguläre Ausdruck-Validierung
^[\d\.\+]+$- Standardwert für y
1200000
Reguläre Ausdruck-Validierung
^[\d\.\+]+$- Attribute: Aktualisieren
- the_geo:
Pointauswählen als Typ - Speichern
- Koordinatenreferenzsystem:
Suche nach
EPSG:2056 - Begrenzendes Rechteck: Aus den Grenzen des Koordinatenreferenzsystems berechnen, anklicken
- Aus den nativen Grenzen berechnen, anklicken
- Speichern
- Neuer Layer
- Arbeitsbereich:
Alpine_Ace:geoserveranwählen - SQL View konfigurieren
- Name der View:
a_a_shortest_path_test
- SQL-Statement:
SELECT
min(r.seq) AS seq,
e.old_id AS id,
e.p_farbe,
sum(e.distance) AS distance,
ST_Collect(e.the_geom) AS geom,
sum(e.cost) AS cost, -- Adding the 'cost' column
sum(e.rcost) AS rcost -- Adding the 'rcost' column
FROM
pgr_dijkstra(
'SELECT id,source,target,distance AS cost, rcost FROM a_a_routing_noded', %source%, %target%, false
) AS r,
a_a_routing_noded AS e
WHERE
r.edge = e.id
GROUP BY
e.old_id, e.p_farbeSchlage Parameter vor- Standardwert für source
0
Reguläre Ausdruck-Validierung
\d+- Standartwert für target
0
Reguläre Ausdruck-Validierung
\d+- Attribute: Aktualisieren
- the_geo:
MultiLineStringauswählen als Typ - Speichern
- Koordinatenreferenzsystem:
Suche nach
EPSG:2056 - Begrenzendes Rechteck: Aus den Grenzen des Koordinatenreferenzsystems berechnen, anklicken
- Aus den nativen Grenzen berechnen, anklicken
- Speichern
- Neuer Layer
- Arbeitsbereich:
Alpine_Ace:geoserveranwählen - SQL View konfigurieren
- Name der View:
a_a_restaurant
- SQL-Statement:
SELECT
v.Restaurant_ID,
v.R_Name,
v.R_Oeffnungszeiten,
v.R_Telefon,
v.R_Email,
v.R_Webseite,
v.R_Geometry
FROM
Restaurant AS v
WHERE
v.Restaurant_ID= %Restaurant_ID%Schlage Parameter vor- Standardwert für Restaurant_ID
0
Reguläre Ausdruck-Validierung
\d+- Attribute: Aktualisieren
- the_geo:
Pointauswählen als Typ - Speichern
- Koordinatenreferenzsystem:
Suche nach
EPSG:2056 - Begrenzendes Rechteck: Aus den Grenzen des Koordinatenreferenzsystems berechnen, anklicken
- Aus den nativen Grenzen berechnen, anklicken
- Speichern
- Neuer Layer
- Arbeitsbereich:
Alpine_Ace:geoserveranwählen - SQL View konfigurieren
- Name der View:
a_a_skidaten_weg
- SQL-Statement:
SELECT
v.Skidaten_ID,
v.SD_Date,
v.SD_Hoehenmeter,
v.SD_Distanz,
v.SD_Dauer,
v.SD_Geschwindigkeit,
v.SD_MaxGeschwindigkeit,
v.SD_Saison,
v.Benutzername,
v.SD_Geometrie
FROM
Skidaten AS v
WHERE
v.Skidaten_ID = %Skidaten_ID%Schlage Parameter vor- Standartwert für Skidaten_ID
0
Reguläre Ausdruck-Validierung
\d+- Attribute: Aktualisieren
- the_geo:
LineStringauswählen als Typ - Speichern
- Koordinatenreferenzsystem:
Suche nach
EPSG:2056 - Begrenzendes Rechteck: Aus den Grenzen des Koordinatenreferenzsystems berechnen, anklicken
- Aus den nativen Grenzen berechnen, anklicken
- Speichern
Momentan müssen die GPX-Dateien noch manuell in die Datenbank eingelesen werden. Dazu muss das File gpx_to_db.py im Ordner API ausgeführt werden. Im File muss dabei der Pfad zur GPX-Datei angegeben werden:
# GPX-Datei hochladen
path = "path/to/gpx"Es empfiehlt sich, innerhalb des Projekts einen Ordner namens "GPX" anzulegen und dort die GPX-Dateien zu speichern.
Für weiter Informationen zum Projekt besuche unsere GitHub Page: alpineacemanagement.github.io
Es werden drei APIs verwendet. Die Dokumentationen dazu sind unter folgenden Links ersichtlich:

