feat: added broken map for supporting multiple tracks (will likely get removed) and added colorless rendering for tracks in point cloud
Some checks failed
Build and Push Docker Image / build-and-push (push) Failing after 47s

This commit is contained in:
2025-01-13 00:49:08 +01:00
parent 8a59bbbea7
commit df1795c0bd
11 changed files with 147263 additions and 175 deletions

View File

@ -2,7 +2,7 @@ import datetime
import gpxpy
import gpxpy.gpx
from sqlalchemy.orm import Session
from geojson import Feature, LineString
from geojson import Feature, LineString, FeatureCollection
from geopy.distance import geodesic
from errors.NotFoundException import NotFoundError
@ -92,6 +92,31 @@ class GPXHandler:
feature = Feature(geometry=LineString(coordinates))
return feature
# handles getting all infos of a track from the database
def getTrackMeta(self, trackID):
track = self.__dbSession.query(Track).filter_by(id=trackID).first()
if not track:
raise NotFoundError(f"track with id {trackID} not found", errors=[])
trackObject = {
"id": track.id,
"name": track.trackName,
"driver": {
"id": track.driver.id,
"name": track.driver.name
} if track.driver else None,
"vehicle": {
"id": track.vehicle.id,
"name": track.vehicle.name,
"licenseplate": track.vehicle.licenseplate
} if track.vehicle else None,
"distance": track.distance,
"time": track.date,
}
return trackObject
# grabs only the tracks from the database and returns them as json object
def getTracks(self):
tracks = self.__dbSession.query(Track).all()
@ -100,23 +125,39 @@ class GPXHandler:
{
"id": track.id,
"name": track.trackName,
# "driver": {
# "id": track.driver.id,
# "name": track.driver.name
# } if track.driver else None,
# "vehicle": {
# "id": track.vehicle.id,
# "name": track.vehicle.name
# } if track.vehicle else None,
# "distance": track.distance,
# "startTime": track.start.isoformat() if track.start else None,
# "endTime": track.end.isoformat() if track.end else None,
"time": track.date,
}
for track in tracks # iterates all tracks and appends them to the list
]
return track_list
def getTracksInTimeWithGeoData(self, start, end):
# Alle Tracks in der Zeitspanne abfragen
tracks = self.__dbSession.query(Track).filter(Track.date.between(start, end)).all()
# Eine Liste von GeoJSON-Features für alle Tracks
features = []
# Für jedes Track-Objekt die Waypoints abfragen und die GeoJSON-Daten generieren
for track in tracks:
# Waypoints für das Track laden
waypoints = track.waypoints # track.waypoints ist bereits korrekt verknüpft
# Waypoints in GeoJSON-kompatible Koordinaten umwandeln
coordinates = [(wp.lon, wp.lat) for wp in waypoints]
# LineString Feature für das Track erstellen
feature = Feature(geometry=LineString(coordinates))
features.append(feature)
# Ein FeatureCollection erstellen, das alle Track-Features enthält
feature_collection = FeatureCollection(features)
# GeoJSON zurückgeben, das von Leaflet verarbeitet werden kann
return feature_collection
def getTracksInTime(self, start, end):
tracks = self.__dbSession.query(Track).filter(Track.date.between(start, end)).all()
@ -134,10 +175,9 @@ class GPXHandler:
"name": track.vehicle.name
} if track.vehicle else None,
"distance": track.distance,
"startTime": track.start.isoformat() if track.start else None,
"end_time": track.end.isoformat() if track.end else None,
"time": track.date,
}
for track in tracks # iterates all tracks and appends them to the list
]
return track_list
return track_list