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