/** * Routing provider registry (spec: "Routing & Tracking", v0.6.7). A * `RoutingProvider` computes a route from an origin/destination/waypoints * request — kept swappable in code (a plugin registry, the * `registerBasemap`/`registerTerrain` precedent) even though v1 ships * exactly one concrete adapter (NIKA, below), so a second provider is a * registry addition later, not a rewrite. * * Tracking deliberately has NO separate provider abstraction here: per the * design doc, live position updates ride the EXISTING data/source streaming * machinery (`OmMap.registerSource`) — a tracking feed is just a * `` whose `data` points at a `wss://` URL with a * registered `SourcePlugin` decoder, nothing new to build for that half. */ export interface RouteWaypoint { lng: number; lat: number; stop?: boolean; } export interface RouteRequest { waypoints: RouteWaypoint[]; profile?: "driving" | "walking" | "cycling"; } export interface RouteLeg { distanceMeters: number; durationSec: number; } /** Normalized route shape every provider returns — GeoJSON end-to-end (v1 ships GeoJSON only; encoded-polyline decoding is a deferred dependency, see the architecture doc). */ export interface Route { geometry: { type: "LineString"; coordinates: [number, number][]; }; distanceMeters: number; /** `NaN` when no speed model exists to derive it (the direct-`geometry` authoring path) — a provider-computed route always supplies a real value. */ durationSec: number; legs?: RouteLeg[]; } export interface RoutingProvider { computeRoute(request: RouteRequest, opts?: { signal?: AbortSignal; }): Promise; } export declare function registerRoutingProvider(name: string, provider: RoutingProvider): void; export declare function getRoutingProvider(name: string): RoutingProvider | undefined; /** Great-circle length of a LineString, in meters — used both by the direct-`geometry` authoring path (no provider round-trip needed for an already-computed route) and available to any provider adapter that needs it. */ export declare function lineStringLengthMeters(coordinates: readonly (readonly [number, number])[]): number; export declare const nikaRoutingProvider: RoutingProvider;