Optimized routing
Test and publish container images / test (push) Successful in 2m21s
Test and publish container images / publish (push) Failing after 4s

This commit is contained in:
BuTzZ
2026-07-27 10:18:31 +02:00
parent 55ce94066e
commit 9813a1fafb
16 changed files with 1602 additions and 364 deletions
+37 -4
View File
@@ -1,4 +1,10 @@
import type { Coordinate, RouteResult, RouteWarning, VesselProfile } from "@watermaps/shared";
import type {
Coordinate,
RouteResult,
RouteSnaps,
RouteWarning,
VesselProfile
} from "@watermaps/shared";
export const OFFLINE_VOYAGES_STORAGE_KEY = "watermaps.offline-voyages.v1";
export const LEGACY_OFFLINE_VOYAGES_STORAGE_KEY = "seacompass.offline-voyages.v1";
@@ -145,8 +151,9 @@ export function createOfflineVoyageRecord(
throw new OfflineVoyageStorageError("Ungültige Kennung für die Offline-Route.");
}
const defaultStart = { lat: first[1], lon: first[0] };
const defaultDestination = { lat: last[1], lon: last[0] };
const defaultStart = route.routeSnaps?.start.requested ?? { lat: first[1], lon: first[0] };
const defaultDestination =
route.routeSnaps?.destination.requested ?? { lat: last[1], lon: last[0] };
const planInput = input.plan ?? {};
return {
@@ -215,6 +222,8 @@ function normalizeRoute(value: unknown): RouteResult {
typeof value.departureTime === "string" ? normalizeIsoDate(value.departureTime) : undefined;
const durationMinutes =
value.durationMinutes === undefined ? undefined : finiteNumber(value.durationMinutes, 0, 10_000_000);
const routeSnaps =
value.routeSnaps === undefined ? undefined : normalizeRouteSnaps(value.routeSnaps);
return {
...(id ? { id } : {}),
@@ -228,7 +237,31 @@ function normalizeRoute(value: unknown): RouteResult {
dataSources,
...(departureTime ? { departureTime } : {}),
...(durationMinutes !== undefined ? { durationMinutes } : {}),
...(routingMode ? { routingMode } : {})
...(routingMode ? { routingMode } : {}),
...(routeSnaps ? { routeSnaps } : {})
};
}
function normalizeRouteSnaps(value: unknown): RouteSnaps {
if (!isRecord(value) || !Array.isArray(value.waypoints) || value.waypoints.length > 25) {
throw new OfflineVoyageStorageError("Die Snap-Metadaten der Offline-Route sind ungültig.");
}
return {
start: normalizeRouteSnap(value.start),
waypoints: value.waypoints.map(normalizeRouteSnap),
destination: normalizeRouteSnap(value.destination)
};
}
function normalizeRouteSnap(value: unknown): RouteSnaps["start"] {
if (!isRecord(value)) {
throw new OfflineVoyageStorageError("Ein Snap-Punkt der Offline-Route ist ungültig.");
}
return {
requested: normalizeCoordinate(value.requested),
snapped: normalizeCoordinate(value.snapped),
distanceM: finiteNumber(value.distanceM, 0, 100_000)
};
}