@wemap/routers 12.8.9 → 12.8.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/itinerary-lemans-navitia.json +7768 -0
- package/assets/network-escalators.osm +50 -0
- package/dist/index.js +367 -31
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +367 -31
- package/dist/index.mjs.map +1 -1
- package/index.ts +1 -0
- package/package.json +2 -2
- package/src/RoutingError.ts +4 -0
- package/src/StatusCode.ts +2 -1
- package/src/remote/RemoteRouterManager.ts +2 -0
- package/src/remote/geovelo/GeoveloRemoteRouter.spec.ts +1 -1
- package/src/remote/navitia/NavitiaRemoteRouter.spec.ts +116 -0
- package/src/remote/navitia/NavitiaRemoteRouter.ts +445 -0
- package/src/remote/navitia/types.ts +73 -0
package/dist/index.mjs
CHANGED
|
@@ -2876,6 +2876,7 @@ var StatusCode = /* @__PURE__ */ ((StatusCode2) => {
|
|
|
2876
2876
|
StatusCode2[StatusCode2["UNIMPLEMENTED"] = 12] = "UNIMPLEMENTED";
|
|
2877
2877
|
StatusCode2[StatusCode2["INTERNAL"] = 13] = "INTERNAL";
|
|
2878
2878
|
StatusCode2[StatusCode2["UNAVAILABLE"] = 14] = "UNAVAILABLE";
|
|
2879
|
+
StatusCode2[StatusCode2["UNAUTHENTICATED"] = 16] = "UNAUTHENTICATED";
|
|
2879
2880
|
return StatusCode2;
|
|
2880
2881
|
})(StatusCode || {});
|
|
2881
2882
|
class RoutingError extends Error {
|
|
@@ -2909,6 +2910,9 @@ class RemoteRoutingError extends RoutingError {
|
|
|
2909
2910
|
static notFound(routerName, details) {
|
|
2910
2911
|
return new RemoteRoutingError(StatusCode.NOT_FOUND, routerName, `Cannot found an itinerary with ${routerName}. Details: ${details}`);
|
|
2911
2912
|
}
|
|
2913
|
+
static missingApiKey(routerName, details) {
|
|
2914
|
+
return new RemoteRoutingError(StatusCode.UNAUTHENTICATED, routerName, `API key is missing for ${routerName}. Details: ${details}`);
|
|
2915
|
+
}
|
|
2912
2916
|
static unreachableServer(routerName, url) {
|
|
2913
2917
|
return new RemoteRoutingError(StatusCode.NOT_FOUND, routerName, `Remote router server ${routerName} is unreachable. URL: ${url}`);
|
|
2914
2918
|
}
|
|
@@ -2927,7 +2931,7 @@ function dateWithTimeZone(year, month, day, hour, minute, second, timeZone = "Eu
|
|
|
2927
2931
|
date.setTime(date.getTime() + offset);
|
|
2928
2932
|
return date;
|
|
2929
2933
|
}
|
|
2930
|
-
function jsonToCoordinates$
|
|
2934
|
+
function jsonToCoordinates$3(json) {
|
|
2931
2935
|
return new Coordinates(json.Lat, json.Long);
|
|
2932
2936
|
}
|
|
2933
2937
|
function jsonDateToTimestamp(jsonDate) {
|
|
@@ -2948,29 +2952,29 @@ inputModeCorrespondance$1.set("CAR", "Car");
|
|
|
2948
2952
|
inputModeCorrespondance$1.set("WALK", "Walk");
|
|
2949
2953
|
inputModeCorrespondance$1.set("BIKE", "Bike");
|
|
2950
2954
|
inputModeCorrespondance$1.set("TRANSIT", "PT");
|
|
2951
|
-
const transitModeCorrespondance$
|
|
2952
|
-
transitModeCorrespondance$
|
|
2953
|
-
transitModeCorrespondance$
|
|
2954
|
-
transitModeCorrespondance$
|
|
2955
|
-
transitModeCorrespondance$
|
|
2956
|
-
transitModeCorrespondance$
|
|
2957
|
-
transitModeCorrespondance$
|
|
2958
|
-
transitModeCorrespondance$
|
|
2959
|
-
transitModeCorrespondance$
|
|
2960
|
-
transitModeCorrespondance$
|
|
2961
|
-
transitModeCorrespondance$
|
|
2962
|
-
transitModeCorrespondance$
|
|
2963
|
-
transitModeCorrespondance$
|
|
2964
|
-
transitModeCorrespondance$
|
|
2965
|
-
transitModeCorrespondance$
|
|
2966
|
-
transitModeCorrespondance$
|
|
2967
|
-
transitModeCorrespondance$
|
|
2968
|
-
transitModeCorrespondance$
|
|
2969
|
-
transitModeCorrespondance$
|
|
2970
|
-
transitModeCorrespondance$
|
|
2971
|
-
transitModeCorrespondance$
|
|
2972
|
-
transitModeCorrespondance$
|
|
2973
|
-
transitModeCorrespondance$
|
|
2955
|
+
const transitModeCorrespondance$3 = /* @__PURE__ */ new Map();
|
|
2956
|
+
transitModeCorrespondance$3.set("WALK", "WALK");
|
|
2957
|
+
transitModeCorrespondance$3.set("BICYCLE", "BIKE");
|
|
2958
|
+
transitModeCorrespondance$3.set("TRAMWAY", "TRAM");
|
|
2959
|
+
transitModeCorrespondance$3.set("METRO", "METRO");
|
|
2960
|
+
transitModeCorrespondance$3.set("FUNICULAR", "FUNICULAR");
|
|
2961
|
+
transitModeCorrespondance$3.set("BUS", "BUS");
|
|
2962
|
+
transitModeCorrespondance$3.set("COACH", "BUS");
|
|
2963
|
+
transitModeCorrespondance$3.set("SCHOOL", "BUS");
|
|
2964
|
+
transitModeCorrespondance$3.set("BUS_PMR", "BUS");
|
|
2965
|
+
transitModeCorrespondance$3.set("MINIBUS", "BUS");
|
|
2966
|
+
transitModeCorrespondance$3.set("TROLLEY_BUS", "BUS");
|
|
2967
|
+
transitModeCorrespondance$3.set("TAXIBUS", "BUS");
|
|
2968
|
+
transitModeCorrespondance$3.set("SHUTTLE", "BUS");
|
|
2969
|
+
transitModeCorrespondance$3.set("TRAIN", "TRAIN");
|
|
2970
|
+
transitModeCorrespondance$3.set("HST", "TRAIN");
|
|
2971
|
+
transitModeCorrespondance$3.set("LOCAL_TRAIN", "TRAIN");
|
|
2972
|
+
transitModeCorrespondance$3.set("AIR", "AIRPLANE");
|
|
2973
|
+
transitModeCorrespondance$3.set("FERRY", "BOAT");
|
|
2974
|
+
transitModeCorrespondance$3.set("TAXI", "UNKNOWN");
|
|
2975
|
+
transitModeCorrespondance$3.set("CAR_POOL", "UNKNOWN");
|
|
2976
|
+
transitModeCorrespondance$3.set("PRIVATE_VEHICLE", "CAR");
|
|
2977
|
+
transitModeCorrespondance$3.set("SCOOTER", "MOTO");
|
|
2974
2978
|
const planTripType = /* @__PURE__ */ new Map();
|
|
2975
2979
|
planTripType.set(0, "BUS");
|
|
2976
2980
|
planTripType.set(1, "WALK");
|
|
@@ -3053,7 +3057,7 @@ class CitywayRemoteRouter extends RemoteRouter {
|
|
|
3053
3057
|
const legs = [];
|
|
3054
3058
|
for (const jsonSection of trip.sections.Section) {
|
|
3055
3059
|
const jsonLeg = jsonSection.Leg ? jsonSection.Leg : jsonSection.PTRide;
|
|
3056
|
-
const legMode = transitModeCorrespondance$
|
|
3060
|
+
const legMode = transitModeCorrespondance$3.get(jsonLeg.TransportMode);
|
|
3057
3061
|
const legCoords = [];
|
|
3058
3062
|
let legStart, legEnd;
|
|
3059
3063
|
let transportInfo;
|
|
@@ -3064,11 +3068,11 @@ class CitywayRemoteRouter extends RemoteRouter {
|
|
|
3064
3068
|
if (legMode === "WALK" || legMode === "BIKE" || legMode === "CAR") {
|
|
3065
3069
|
legStart = {
|
|
3066
3070
|
name: jsonLeg.Departure.Site.Name,
|
|
3067
|
-
coords: jsonToCoordinates$
|
|
3071
|
+
coords: jsonToCoordinates$3(jsonLeg.Departure.Site.Position)
|
|
3068
3072
|
};
|
|
3069
3073
|
legEnd = {
|
|
3070
3074
|
name: jsonLeg.Arrival.Site.Name,
|
|
3071
|
-
coords: jsonToCoordinates$
|
|
3075
|
+
coords: jsonToCoordinates$3(jsonLeg.Arrival.Site.Position)
|
|
3072
3076
|
};
|
|
3073
3077
|
for (const jsonPathLink of jsonLeg.pathLinks.PathLink) {
|
|
3074
3078
|
let stepCoords;
|
|
@@ -3096,11 +3100,11 @@ class CitywayRemoteRouter extends RemoteRouter {
|
|
|
3096
3100
|
} else if (isTransitModePublicTransport(legMode)) {
|
|
3097
3101
|
legStart = {
|
|
3098
3102
|
name: jsonLeg.Departure.StopPlace.Name,
|
|
3099
|
-
coords: jsonToCoordinates$
|
|
3103
|
+
coords: jsonToCoordinates$3(jsonLeg.Departure.StopPlace.Position)
|
|
3100
3104
|
};
|
|
3101
3105
|
legEnd = {
|
|
3102
3106
|
name: jsonLeg.Arrival.StopPlace.Name,
|
|
3103
|
-
coords: jsonToCoordinates$
|
|
3107
|
+
coords: jsonToCoordinates$3(jsonLeg.Arrival.StopPlace.Position)
|
|
3104
3108
|
};
|
|
3105
3109
|
let transportName = jsonLeg.Line.Number;
|
|
3106
3110
|
if (legMode === "TRAM" && transportName.toLowerCase().includes("tram")) {
|
|
@@ -3148,9 +3152,9 @@ class CitywayRemoteRouter extends RemoteRouter {
|
|
|
3148
3152
|
const itinerary = new Itinerary({
|
|
3149
3153
|
duration: this.parseDuration(trip.Duration),
|
|
3150
3154
|
startTime: jsonDateToTimestamp(trip.Departure.Time),
|
|
3151
|
-
origin: jsonToCoordinates$
|
|
3155
|
+
origin: jsonToCoordinates$3(trip.Departure.Site.Position),
|
|
3152
3156
|
endTime: jsonDateToTimestamp(trip.Arrival.Time),
|
|
3153
|
-
destination: jsonToCoordinates$
|
|
3157
|
+
destination: jsonToCoordinates$3(trip.Arrival.Site.Position),
|
|
3154
3158
|
legs
|
|
3155
3159
|
});
|
|
3156
3160
|
itineraries.push(itinerary);
|
|
@@ -3175,6 +3179,336 @@ class CitywayRemoteRouter extends RemoteRouter {
|
|
|
3175
3179
|
}
|
|
3176
3180
|
}
|
|
3177
3181
|
const CitywayRemoteRouter$1 = new CitywayRemoteRouter();
|
|
3182
|
+
const transitModeCorrespondance$2 = /* @__PURE__ */ new Map();
|
|
3183
|
+
transitModeCorrespondance$2.set("Air", "AIRPLANE");
|
|
3184
|
+
transitModeCorrespondance$2.set("Boat", "BOAT");
|
|
3185
|
+
transitModeCorrespondance$2.set("Bus", "BUS");
|
|
3186
|
+
transitModeCorrespondance$2.set("BusRapidTransit", "BUS");
|
|
3187
|
+
transitModeCorrespondance$2.set("Coach", "BUS");
|
|
3188
|
+
transitModeCorrespondance$2.set("Ferry", "FERRY");
|
|
3189
|
+
transitModeCorrespondance$2.set("Funicular", "FUNICULAR");
|
|
3190
|
+
transitModeCorrespondance$2.set("LocalTrain", "TRAIN");
|
|
3191
|
+
transitModeCorrespondance$2.set("LongDistanceTrain", "TRAIN");
|
|
3192
|
+
transitModeCorrespondance$2.set("Metro", "METRO");
|
|
3193
|
+
transitModeCorrespondance$2.set("Métro", "METRO");
|
|
3194
|
+
transitModeCorrespondance$2.set("RailShuttle", "TRAIN");
|
|
3195
|
+
transitModeCorrespondance$2.set("RapidTransit", "BUS");
|
|
3196
|
+
transitModeCorrespondance$2.set("Shuttle", "BUS");
|
|
3197
|
+
transitModeCorrespondance$2.set("SuspendedCableCar", "FUNICULAR");
|
|
3198
|
+
transitModeCorrespondance$2.set("Taxi", "TAXI");
|
|
3199
|
+
transitModeCorrespondance$2.set("Train", "TRAIN");
|
|
3200
|
+
transitModeCorrespondance$2.set("RER", "TRAIN");
|
|
3201
|
+
transitModeCorrespondance$2.set("Tramway", "TRAM");
|
|
3202
|
+
transitModeCorrespondance$2.set("walking", "WALK");
|
|
3203
|
+
transitModeCorrespondance$2.set("bike", "BIKE");
|
|
3204
|
+
const TRANSPORT_IDS$1 = [
|
|
3205
|
+
"physical_mode:Air",
|
|
3206
|
+
"physical_mode:Boat",
|
|
3207
|
+
"physical_mode:Bus",
|
|
3208
|
+
"physical_mode:BusRapidTransit",
|
|
3209
|
+
"physical_mode:Coach",
|
|
3210
|
+
"physical_mode:Ferry",
|
|
3211
|
+
"physical_mode:Funicular",
|
|
3212
|
+
"physical_mode:LocalTrain",
|
|
3213
|
+
"physical_mode:LongDistanceTrain",
|
|
3214
|
+
"physical_mode:Metro",
|
|
3215
|
+
"physical_mode:RailShuttle",
|
|
3216
|
+
"physical_mode:RapidTransit",
|
|
3217
|
+
"physical_mode:Shuttle",
|
|
3218
|
+
"physical_mode:SuspendedCableCar",
|
|
3219
|
+
"physical_mode:Taxi",
|
|
3220
|
+
"physical_mode:Train",
|
|
3221
|
+
"physical_mode:Tramway"
|
|
3222
|
+
];
|
|
3223
|
+
function jsonToCoordinates$2(json) {
|
|
3224
|
+
return new Coordinates(Number(json.lat), Number(json.lon));
|
|
3225
|
+
}
|
|
3226
|
+
function last$2(array) {
|
|
3227
|
+
return array[array.length - 1];
|
|
3228
|
+
}
|
|
3229
|
+
function dateStringToTimestamp$1(stringDate, timeZone) {
|
|
3230
|
+
const yearStr = stringDate.substr(0, 4);
|
|
3231
|
+
const monthStr = stringDate.substr(4, 2);
|
|
3232
|
+
const dayStr = stringDate.substr(6, 2);
|
|
3233
|
+
const hoursStr = stringDate.substr(9, 2);
|
|
3234
|
+
const minutesStr = stringDate.substr(11, 2);
|
|
3235
|
+
const secondsStr = stringDate.substr(13, 2);
|
|
3236
|
+
return dateWithTimeZone(
|
|
3237
|
+
Number(yearStr),
|
|
3238
|
+
Number(monthStr) - 1,
|
|
3239
|
+
Number(dayStr),
|
|
3240
|
+
Number(hoursStr),
|
|
3241
|
+
Number(minutesStr),
|
|
3242
|
+
Number(secondsStr),
|
|
3243
|
+
timeZone
|
|
3244
|
+
).getTime();
|
|
3245
|
+
}
|
|
3246
|
+
class NavitiaRemoteRouter extends RemoteRouter {
|
|
3247
|
+
get rname() {
|
|
3248
|
+
return "navitia";
|
|
3249
|
+
}
|
|
3250
|
+
async getItineraries(endpointUrl, routerRequest) {
|
|
3251
|
+
const url = this.getURL(endpointUrl, routerRequest);
|
|
3252
|
+
const api_key = url.searchParams.get("api_key");
|
|
3253
|
+
if (!api_key) {
|
|
3254
|
+
throw RemoteRoutingError.missingApiKey(this.rname);
|
|
3255
|
+
}
|
|
3256
|
+
const res = await fetch(url, {
|
|
3257
|
+
method: "GET",
|
|
3258
|
+
headers: {
|
|
3259
|
+
"Authorization": api_key
|
|
3260
|
+
}
|
|
3261
|
+
}).catch(() => {
|
|
3262
|
+
throw RemoteRoutingError.unreachableServer(this.rname, url.toString());
|
|
3263
|
+
});
|
|
3264
|
+
const jsonResponse = await res.json().catch(() => {
|
|
3265
|
+
throw RemoteRoutingError.responseNotParsing(this.rname, url.toString());
|
|
3266
|
+
});
|
|
3267
|
+
if (jsonResponse && jsonResponse.error) {
|
|
3268
|
+
throw RemoteRoutingError.notFound(this.rname, jsonResponse.error.message);
|
|
3269
|
+
}
|
|
3270
|
+
const itineraries = this.parseResponse(jsonResponse);
|
|
3271
|
+
const sameModeFound = itineraries.some((itinerary) => areTransitAndTravelModeConsistent(itinerary.transitMode, routerRequest.travelMode));
|
|
3272
|
+
if (!sameModeFound) {
|
|
3273
|
+
throw RemoteRoutingError.notFound(
|
|
3274
|
+
this.rname,
|
|
3275
|
+
"Selected mode of transport was not found for this itinerary."
|
|
3276
|
+
);
|
|
3277
|
+
}
|
|
3278
|
+
return itineraries;
|
|
3279
|
+
}
|
|
3280
|
+
getURL(endpointUrl, routerRequest) {
|
|
3281
|
+
var _a;
|
|
3282
|
+
const { origin, destination, waypoints, travelMode } = routerRequest;
|
|
3283
|
+
if ((waypoints || []).length > 0) {
|
|
3284
|
+
Logger.warn(`${this.rname} router uses only the first 2 waypoints (asked ${waypoints == null ? void 0 : waypoints.length})`);
|
|
3285
|
+
}
|
|
3286
|
+
const url = new URL(endpointUrl);
|
|
3287
|
+
const coreParams = new URLSearchParams();
|
|
3288
|
+
coreParams.set("from", `${origin.longitude};${origin.latitude}`);
|
|
3289
|
+
coreParams.set("to", `${destination.longitude};${destination.latitude}`);
|
|
3290
|
+
coreParams.set("data_freshness", "realtime");
|
|
3291
|
+
if ((_a = routerRequest.itineraryModifiers) == null ? void 0 : _a.avoidStairs) {
|
|
3292
|
+
coreParams.set("wheelchair", "true");
|
|
3293
|
+
}
|
|
3294
|
+
let queryParams = new URLSearchParams();
|
|
3295
|
+
switch (travelMode) {
|
|
3296
|
+
case "WALK":
|
|
3297
|
+
queryParams = this.getWalkingQuery();
|
|
3298
|
+
break;
|
|
3299
|
+
case "BIKE":
|
|
3300
|
+
queryParams = this.getBikeQuery();
|
|
3301
|
+
break;
|
|
3302
|
+
case "CAR":
|
|
3303
|
+
queryParams = this.getCarQuery();
|
|
3304
|
+
break;
|
|
3305
|
+
}
|
|
3306
|
+
[coreParams, queryParams].map((params) => {
|
|
3307
|
+
for (const pair of params.entries()) {
|
|
3308
|
+
url.searchParams.append(pair[0], pair[1]);
|
|
3309
|
+
}
|
|
3310
|
+
});
|
|
3311
|
+
return url;
|
|
3312
|
+
}
|
|
3313
|
+
getCarQuery() {
|
|
3314
|
+
const urlSearchParams = new URLSearchParams();
|
|
3315
|
+
TRANSPORT_IDS$1.forEach((id) => {
|
|
3316
|
+
urlSearchParams.append("forbidden_uris[]", id);
|
|
3317
|
+
});
|
|
3318
|
+
urlSearchParams.append("first_section_mode[]", "walking");
|
|
3319
|
+
urlSearchParams.append("first_section_mode[]", "car");
|
|
3320
|
+
urlSearchParams.append("last_section_mode[]", "walking");
|
|
3321
|
+
urlSearchParams.append("last_section_mode[]", "car");
|
|
3322
|
+
return urlSearchParams;
|
|
3323
|
+
}
|
|
3324
|
+
getWalkingQuery() {
|
|
3325
|
+
const urlSearchParams = new URLSearchParams();
|
|
3326
|
+
TRANSPORT_IDS$1.forEach((id) => {
|
|
3327
|
+
urlSearchParams.append("forbidden_uris[]", id);
|
|
3328
|
+
});
|
|
3329
|
+
urlSearchParams.append("first_section_mode[]", "walking");
|
|
3330
|
+
urlSearchParams.append("last_section_mode[]", "walking");
|
|
3331
|
+
return urlSearchParams;
|
|
3332
|
+
}
|
|
3333
|
+
getBikeQuery() {
|
|
3334
|
+
const urlSearchParams = new URLSearchParams();
|
|
3335
|
+
TRANSPORT_IDS$1.forEach((id) => {
|
|
3336
|
+
urlSearchParams.append("forbidden_uris[]", id);
|
|
3337
|
+
});
|
|
3338
|
+
urlSearchParams.append("first_section_mode[]", "bike");
|
|
3339
|
+
urlSearchParams.append("last_section_mode[]", "bike");
|
|
3340
|
+
return urlSearchParams;
|
|
3341
|
+
}
|
|
3342
|
+
getSectionCoords(section) {
|
|
3343
|
+
let from;
|
|
3344
|
+
let to;
|
|
3345
|
+
if ("stop_point" in section.from) {
|
|
3346
|
+
from = section.from.stop_point.coord;
|
|
3347
|
+
} else if ("address" in section.from) {
|
|
3348
|
+
from = section.from.address.coord;
|
|
3349
|
+
} else {
|
|
3350
|
+
from = section.from.poi.coord;
|
|
3351
|
+
}
|
|
3352
|
+
if ("stop_point" in section.to) {
|
|
3353
|
+
to = section.to.stop_point.coord;
|
|
3354
|
+
} else if ("address" in section.to) {
|
|
3355
|
+
to = section.to.address.coord;
|
|
3356
|
+
} else {
|
|
3357
|
+
to = section.to.poi.coord;
|
|
3358
|
+
}
|
|
3359
|
+
return {
|
|
3360
|
+
from: jsonToCoordinates$2(from),
|
|
3361
|
+
to: jsonToCoordinates$2(to)
|
|
3362
|
+
};
|
|
3363
|
+
}
|
|
3364
|
+
/**
|
|
3365
|
+
* Since the navitia API does not provide coords for each step, we need to compute them
|
|
3366
|
+
* We trim the coordinates of the leg with the distance of each step and keep the last result as the coords of the step
|
|
3367
|
+
* @param {Leg} leg
|
|
3368
|
+
*/
|
|
3369
|
+
findStepsCoord(legCoords, steps) {
|
|
3370
|
+
const coords = legCoords;
|
|
3371
|
+
const duplicatedCoords = [...coords];
|
|
3372
|
+
let previousStep = steps[0];
|
|
3373
|
+
let accumulatedIndex = 0;
|
|
3374
|
+
const outputSteps = [];
|
|
3375
|
+
for (const [idx, step] of steps.entries()) {
|
|
3376
|
+
let newCoords;
|
|
3377
|
+
let _idCoordsInLeg;
|
|
3378
|
+
if (idx === 0) {
|
|
3379
|
+
_idCoordsInLeg = 0;
|
|
3380
|
+
newCoords = coords[0];
|
|
3381
|
+
} else if (idx === steps.length - 1) {
|
|
3382
|
+
_idCoordsInLeg = coords.length - 1;
|
|
3383
|
+
newCoords = last$2(coords);
|
|
3384
|
+
} else if (duplicatedCoords.length === 1) {
|
|
3385
|
+
accumulatedIndex++;
|
|
3386
|
+
_idCoordsInLeg = accumulatedIndex;
|
|
3387
|
+
newCoords = duplicatedCoords[0];
|
|
3388
|
+
coords[_idCoordsInLeg] = newCoords;
|
|
3389
|
+
} else {
|
|
3390
|
+
const result = Utils.trimRoute(duplicatedCoords, duplicatedCoords[0], previousStep.distance);
|
|
3391
|
+
accumulatedIndex += result.length - 1;
|
|
3392
|
+
duplicatedCoords.splice(0, result.length - 1);
|
|
3393
|
+
_idCoordsInLeg = accumulatedIndex;
|
|
3394
|
+
newCoords = last$2(result);
|
|
3395
|
+
coords[_idCoordsInLeg] = newCoords;
|
|
3396
|
+
}
|
|
3397
|
+
outputSteps.push({
|
|
3398
|
+
...step,
|
|
3399
|
+
coords: newCoords
|
|
3400
|
+
});
|
|
3401
|
+
previousStep = step;
|
|
3402
|
+
}
|
|
3403
|
+
return outputSteps;
|
|
3404
|
+
}
|
|
3405
|
+
findStepCoords(step, section) {
|
|
3406
|
+
var _a;
|
|
3407
|
+
if ("instruction_start_coordinate" in step) {
|
|
3408
|
+
return jsonToCoordinates$2(step.instruction_start_coordinate);
|
|
3409
|
+
}
|
|
3410
|
+
const via = (_a = section.vias) == null ? void 0 : _a.find((via2) => via2.id === step.via_uri);
|
|
3411
|
+
if (via) {
|
|
3412
|
+
return jsonToCoordinates$2(via.access_point.coord);
|
|
3413
|
+
}
|
|
3414
|
+
}
|
|
3415
|
+
parseResponse(json) {
|
|
3416
|
+
var _a;
|
|
3417
|
+
if (!json || !json.journeys) {
|
|
3418
|
+
throw RemoteRoutingError.notFound(this.rname, (_a = json.error) == null ? void 0 : _a.message);
|
|
3419
|
+
}
|
|
3420
|
+
const itineraries = [];
|
|
3421
|
+
const timeZone = json.context.timezone;
|
|
3422
|
+
for (const jsonItinerary of json.journeys) {
|
|
3423
|
+
const legs = [];
|
|
3424
|
+
for (const jsonSection of jsonItinerary.sections) {
|
|
3425
|
+
if (jsonSection.type === "waiting" || jsonSection.type === "transfer") {
|
|
3426
|
+
continue;
|
|
3427
|
+
}
|
|
3428
|
+
const { from: startSection, to: endSection } = this.getSectionCoords(jsonSection);
|
|
3429
|
+
let existingCoords = [];
|
|
3430
|
+
const legCoords = jsonSection.geojson.coordinates.reduce((acc, [lon, lat]) => {
|
|
3431
|
+
if (!existingCoords.includes(`${lon}-${lat}`)) {
|
|
3432
|
+
existingCoords = existingCoords.concat(`${lon}-${lat}`);
|
|
3433
|
+
acc.push(new Coordinates(lat, lon));
|
|
3434
|
+
}
|
|
3435
|
+
return acc;
|
|
3436
|
+
}, []);
|
|
3437
|
+
const stepsBuilder = new StepsBuilder().setStart(startSection).setEnd(endSection).setPathCoords(legCoords);
|
|
3438
|
+
let transportInfo;
|
|
3439
|
+
let transitMode = transitModeCorrespondance$2.get(jsonSection.mode);
|
|
3440
|
+
if (jsonSection.path) {
|
|
3441
|
+
const useNavitiaSteps = jsonSection.path.every((step) => "instruction_start_coordinate" in step || step.via_uri);
|
|
3442
|
+
const navitiaIntermediateSteps = [];
|
|
3443
|
+
for (const jsonPathLink of jsonSection.path) {
|
|
3444
|
+
let coords;
|
|
3445
|
+
if (useNavitiaSteps) {
|
|
3446
|
+
coords = this.findStepCoords(jsonPathLink, jsonSection);
|
|
3447
|
+
const intermediateStep = {
|
|
3448
|
+
name: jsonPathLink.name,
|
|
3449
|
+
distance: jsonPathLink.length,
|
|
3450
|
+
coords
|
|
3451
|
+
};
|
|
3452
|
+
stepsBuilder.addStepInfo(intermediateStep);
|
|
3453
|
+
} else {
|
|
3454
|
+
navitiaIntermediateSteps.push({
|
|
3455
|
+
name: jsonPathLink.name,
|
|
3456
|
+
distance: jsonPathLink.length
|
|
3457
|
+
});
|
|
3458
|
+
}
|
|
3459
|
+
}
|
|
3460
|
+
if (!useNavitiaSteps) {
|
|
3461
|
+
stepsBuilder.setStepsInfo(this.findStepsCoord(legCoords, navitiaIntermediateSteps));
|
|
3462
|
+
}
|
|
3463
|
+
}
|
|
3464
|
+
if (jsonSection.type === "public_transport") {
|
|
3465
|
+
transportInfo = {
|
|
3466
|
+
name: jsonSection.display_informations.code,
|
|
3467
|
+
routeColor: jsonSection.display_informations.color,
|
|
3468
|
+
routeTextColor: jsonSection.display_informations.text_color,
|
|
3469
|
+
directionName: jsonSection.display_informations.direction
|
|
3470
|
+
};
|
|
3471
|
+
transitMode = transitModeCorrespondance$2.get(jsonSection.display_informations.physical_mode);
|
|
3472
|
+
const legStep = {
|
|
3473
|
+
coords: legCoords[0],
|
|
3474
|
+
name: transportInfo.directionName,
|
|
3475
|
+
distance: jsonSection.geojson.properties[0].length
|
|
3476
|
+
};
|
|
3477
|
+
stepsBuilder.setStepsInfo([legStep]);
|
|
3478
|
+
}
|
|
3479
|
+
const leg = new Leg({
|
|
3480
|
+
transitMode,
|
|
3481
|
+
duration: jsonSection.duration,
|
|
3482
|
+
startTime: dateStringToTimestamp$1(jsonSection.departure_date_time, timeZone),
|
|
3483
|
+
endTime: dateStringToTimestamp$1(jsonSection.arrival_date_time, timeZone),
|
|
3484
|
+
start: {
|
|
3485
|
+
name: jsonSection.from.name,
|
|
3486
|
+
coords: startSection
|
|
3487
|
+
},
|
|
3488
|
+
end: {
|
|
3489
|
+
name: jsonSection.to.name,
|
|
3490
|
+
coords: endSection
|
|
3491
|
+
},
|
|
3492
|
+
coords: legCoords,
|
|
3493
|
+
transportInfo,
|
|
3494
|
+
steps: stepsBuilder.build()
|
|
3495
|
+
});
|
|
3496
|
+
legs.push(leg);
|
|
3497
|
+
}
|
|
3498
|
+
const itinerary = new Itinerary({
|
|
3499
|
+
duration: jsonItinerary.duration,
|
|
3500
|
+
startTime: dateStringToTimestamp$1(jsonItinerary.departure_date_time, timeZone),
|
|
3501
|
+
endTime: dateStringToTimestamp$1(jsonItinerary.arrival_date_time, timeZone),
|
|
3502
|
+
origin: this.getSectionCoords(jsonItinerary.sections[0]).from,
|
|
3503
|
+
destination: this.getSectionCoords(last$2(jsonItinerary.sections)).to,
|
|
3504
|
+
legs
|
|
3505
|
+
});
|
|
3506
|
+
itineraries.push(itinerary);
|
|
3507
|
+
}
|
|
3508
|
+
return itineraries;
|
|
3509
|
+
}
|
|
3510
|
+
}
|
|
3511
|
+
const NavitiaRemoteRouter$1 = new NavitiaRemoteRouter();
|
|
3178
3512
|
class DeutscheBahnRemoteRouter extends RemoteRouter {
|
|
3179
3513
|
/**
|
|
3180
3514
|
* @override
|
|
@@ -4070,6 +4404,7 @@ class WemapMultiRemoteRouter extends RemoteRouter {
|
|
|
4070
4404
|
const WemapMultiRemoteRouter$1 = new WemapMultiRemoteRouter();
|
|
4071
4405
|
const remoteRouters = [
|
|
4072
4406
|
CitywayRemoteRouter$1,
|
|
4407
|
+
NavitiaRemoteRouter$1,
|
|
4073
4408
|
DeutscheBahnRemoteRouter$1,
|
|
4074
4409
|
IdfmRemoteRouter$1,
|
|
4075
4410
|
OsrmRemoteRouter$1,
|
|
@@ -4734,6 +5069,7 @@ export {
|
|
|
4734
5069
|
Itinerary,
|
|
4735
5070
|
ItineraryInfoManager,
|
|
4736
5071
|
Leg,
|
|
5072
|
+
NavitiaRemoteRouter$1 as NavitiaRemoteRouter,
|
|
4737
5073
|
NoRouteFoundError,
|
|
4738
5074
|
OsmGraphUtils,
|
|
4739
5075
|
OsrmRemoteRouter$1 as OsrmRemoteRouter,
|