@wemap/routers 6.0.0

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.
Files changed (49) hide show
  1. package/assets/bureaux-wemap-montpellier-network.osm +162 -0
  2. package/assets/gare-de-lyon-extract.osm +174 -0
  3. package/assets/itinerary-deutsche-bahn-1.json +368 -0
  4. package/assets/itinerary-grenoble-otp-1.json +1536 -0
  5. package/assets/itinerary-grenoble-otp-2.json +1092 -0
  6. package/assets/itinerary-lehavre-cityway-1.json +6799 -0
  7. package/assets/itinerary-lehavre-cityway-2.json +2133 -0
  8. package/assets/itinerary-lehavre-cityway-3.json +12577 -0
  9. package/assets/itinerary-lehavre-cityway-4.json +1451 -0
  10. package/assets/itinerary-lehavre-cityway-5.json +5925 -0
  11. package/assets/itinerary-montpellier-osrm-3.json +1 -0
  12. package/assets/itinerary-montpellier-outdoor-without-steps.json +110 -0
  13. package/assets/itinerary-montpellier-outdoor.json +513 -0
  14. package/assets/itinerary-with-duplicate-nodes.json +110 -0
  15. package/assets/network-conveying-backward.osm +74 -0
  16. package/assets/network-elevator.osm +48 -0
  17. package/assets/network-simple.osm +27 -0
  18. package/assets/network-with-modifiers.osm +39 -0
  19. package/assets/one-way.osm +46 -0
  20. package/dist/wemap-osm.es.js +2012 -0
  21. package/dist/wemap-osm.es.js.map +1 -0
  22. package/index.js +24 -0
  23. package/package.json +35 -0
  24. package/src/ItineraryInfoManager.js +148 -0
  25. package/src/ItineraryInfoManager.spec.js +54 -0
  26. package/src/Utils.js +64 -0
  27. package/src/cityway/CitywayUtils.js +240 -0
  28. package/src/cityway/CitywayUtils.spec.js +109 -0
  29. package/src/deutsche-bahn/DeutscheBahnRouterUtils.js +91 -0
  30. package/src/deutsche-bahn/DeutscheBahnRouterUtils.spec.js +54 -0
  31. package/src/model/Itinerary.js +197 -0
  32. package/src/model/Itinerary.type.spec.js +105 -0
  33. package/src/model/ItineraryInfo.js +34 -0
  34. package/src/model/Leg.js +113 -0
  35. package/src/model/LevelChange.js +65 -0
  36. package/src/model/RouterResponse.js +19 -0
  37. package/src/model/RouterResponse.type.spec.js +24 -0
  38. package/src/model/Step.js +118 -0
  39. package/src/osrm/OsrmUtils.js +269 -0
  40. package/src/osrm/OsrmUtils.spec.js +457 -0
  41. package/src/otp/OtpUtils.js +150 -0
  42. package/src/otp/OtpUtils.spec.js +97 -0
  43. package/src/wemap/WemapNetworkUtils.js +195 -0
  44. package/src/wemap/WemapNetworkUtils.spec.js +109 -0
  45. package/src/wemap/WemapRouter.js +27 -0
  46. package/src/wemap/WemapRouter.spec.js +221 -0
  47. package/src/wemap/WemapRouterOptions.js +32 -0
  48. package/src/wemap/WemapRouterUtils.js +46 -0
  49. package/src/wemap/WemapStepsGeneration.js +104 -0
@@ -0,0 +1,1092 @@
1
+ {
2
+ "requestParameters": {
3
+ "date": "2021-03-02",
4
+ "walkSpeed": "1.1112",
5
+ "walkReluctance": "5",
6
+ "fromPlace": "45.192514856662456,5.731452541397871",
7
+ "transferPenalty": "60",
8
+ "locale": "fr_FR",
9
+ "numItineraries": "2",
10
+ "mode": "WALK,TRANSIT",
11
+ "arriveBy": "false",
12
+ "minTransferTime": "60",
13
+ "showIntermediateStops": "true",
14
+ "routerId": "prod",
15
+ "ui_date": "",
16
+ "walkBoardCost": "300",
17
+ "toPlace": "45.18544,5.73123",
18
+ "time": "10:30"
19
+ },
20
+ "plan": {
21
+ "date": 1614677400000,
22
+ "from": {
23
+ "name": "Origin",
24
+ "lon": 5.731452541397871,
25
+ "lat": 45.192514856662456,
26
+ "orig": "",
27
+ "vertexType": "NORMAL"
28
+ },
29
+ "to": {
30
+ "name": "Destination",
31
+ "lon": 5.73123,
32
+ "lat": 45.18544,
33
+ "orig": "",
34
+ "vertexType": "NORMAL"
35
+ },
36
+ "itineraries": [
37
+ {
38
+ "duration": 1064,
39
+ "startTime": 1614677756000,
40
+ "endTime": 1614678820000,
41
+ "walkTime": 300,
42
+ "transitTime": 480,
43
+ "waitingTime": 284,
44
+ "walkDistance": 268.2566393118602,
45
+ "walkLimitExceeded": false,
46
+ "elevationLost": 0.4300000000000068,
47
+ "elevationGained": 0.2500000000000284,
48
+ "transfers": 1,
49
+ "fare": {
50
+ "fare": {
51
+ "regular": {
52
+ "currency": {
53
+ "symbol": "€",
54
+ "currencyCode": "EUR",
55
+ "currency": "EUR",
56
+ "defaultFractionDigits": 2
57
+ },
58
+ "cents": 160
59
+ }
60
+ }
61
+ },
62
+ "legs": [
63
+ {
64
+ "startTime": 1614677756000,
65
+ "endTime": 1614677879000,
66
+ "departureDelay": 0,
67
+ "arrivalDelay": 0,
68
+ "realTime": false,
69
+ "distance": 133.47299999999998,
70
+ "pathway": false,
71
+ "mode": "WALK",
72
+ "route": "",
73
+ "agencyTimeZoneOffset": 3600000,
74
+ "interlineWithPreviousLeg": false,
75
+ "from": {
76
+ "name": "Origin",
77
+ "lon": 5.731452541397871,
78
+ "lat": 45.192514856662456,
79
+ "departure": 1614677756000,
80
+ "orig": "",
81
+ "vertexType": "NORMAL"
82
+ },
83
+ "to": {
84
+ "name": "Grenoble, Sainte-Claire - Les Halles",
85
+ "stopId": "SEM:2043",
86
+ "stopCode": "2043",
87
+ "lon": 5.73063,
88
+ "lat": 45.19147,
89
+ "arrival": 1614677879000,
90
+ "departure": 1614677880000,
91
+ "stopIndex": 12,
92
+ "stopSequence": 13,
93
+ "vertexType": "TRANSIT"
94
+ },
95
+ "legGeometry": {
96
+ "points": "etyrGql~a@|@`@`BxAVTXP",
97
+ "length": 5
98
+ },
99
+ "rentedBike": false,
100
+ "duration": 123,
101
+ "transitLeg": false,
102
+ "intermediateStops": [],
103
+ "steps": [
104
+ {
105
+ "distance": 36.29,
106
+ "relativeDirection": "DEPART",
107
+ "streetName": "Place Notre-Dame (path)",
108
+ "absoluteDirection": "SOUTH",
109
+ "stayOn": false,
110
+ "area": false,
111
+ "bogusName": false,
112
+ "lon": 5.731452449455603,
113
+ "lat": 45.19251488096676,
114
+ "elevation": []
115
+ },
116
+ {
117
+ "distance": 65.191,
118
+ "relativeDirection": "CONTINUE",
119
+ "streetName": "Rue Président Sadi Carnot (pedestrian street)",
120
+ "absoluteDirection": "SOUTHWEST",
121
+ "stayOn": false,
122
+ "area": true,
123
+ "bogusName": false,
124
+ "lon": 5.731289800000001,
125
+ "lat": 45.1922093,
126
+ "elevation": [
127
+ {
128
+ "first": 0,
129
+ "second": 210.73
130
+ },
131
+ {
132
+ "first": 10,
133
+ "second": 210.74
134
+ },
135
+ {
136
+ "first": 20,
137
+ "second": 210.76
138
+ },
139
+ {
140
+ "first": 30,
141
+ "second": 210.78
142
+ },
143
+ {
144
+ "first": 40,
145
+ "second": 210.79
146
+ },
147
+ {
148
+ "first": 50,
149
+ "second": 210.81
150
+ },
151
+ {
152
+ "first": 60,
153
+ "second": 210.83
154
+ },
155
+ {
156
+ "first": 65.19,
157
+ "second": 210.84
158
+ }
159
+ ]
160
+ },
161
+ {
162
+ "distance": 31.992,
163
+ "relativeDirection": "CONTINUE",
164
+ "streetName": "Place Sainte-Claire (pedestrian street)",
165
+ "absoluteDirection": "SOUTHWEST",
166
+ "stayOn": false,
167
+ "area": true,
168
+ "bogusName": false,
169
+ "lon": 5.730834771776759,
170
+ "lat": 45.19171849560196,
171
+ "elevation": [
172
+ {
173
+ "first": 0,
174
+ "second": 210.84
175
+ },
176
+ {
177
+ "first": 10,
178
+ "second": 210.86
179
+ },
180
+ {
181
+ "first": 16.44,
182
+ "second": 210.87
183
+ }
184
+ ]
185
+ }
186
+ ]
187
+ },
188
+ {
189
+ "startTime": 1614677880000,
190
+ "endTime": 1614678060000,
191
+ "departureDelay": 0,
192
+ "arrivalDelay": 0,
193
+ "realTime": false,
194
+ "distance": 233.83522339610607,
195
+ "pathway": false,
196
+ "mode": "TRAM",
197
+ "route": "B",
198
+ "agencyName": "M",
199
+ "agencyUrl": "https://www.mobilites-m.fr/",
200
+ "agencyTimeZoneOffset": 3600000,
201
+ "routeColor": "479A45",
202
+ "routeType": 0,
203
+ "routeId": "SEM:B",
204
+ "routeTextColor": "FFFFFF",
205
+ "interlineWithPreviousLeg": false,
206
+ "headsign": "Grenoble, Oxford",
207
+ "agencyId": "SEM",
208
+ "tripId": "SEM:25183948",
209
+ "serviceDate": "20210302",
210
+ "from": {
211
+ "name": "Grenoble, Sainte-Claire - Les Halles",
212
+ "stopId": "SEM:2043",
213
+ "stopCode": "2043",
214
+ "lon": 5.73063,
215
+ "lat": 45.19147,
216
+ "arrival": 1614677879000,
217
+ "departure": 1614677880000,
218
+ "stopIndex": 12,
219
+ "stopSequence": 13,
220
+ "vertexType": "TRANSIT"
221
+ },
222
+ "to": {
223
+ "name": "Grenoble, Hubert Dubedout - Maison du Tourisme",
224
+ "stopId": "SEM:2020",
225
+ "stopCode": "2020",
226
+ "lon": 5.72822,
227
+ "lat": 45.19023,
228
+ "arrival": 1614678060000,
229
+ "departure": 1614678060000,
230
+ "stopIndex": 13,
231
+ "stopSequence": 14,
232
+ "vertexType": "TRANSIT"
233
+ },
234
+ "legGeometry": {
235
+ "points": "qmyrGwg~a@NFz@^FBHBJ@L?^An@CH?F?F@D@D@BBB@DDBF@D@D@F@H@J?H?z@CxCAVA`@E|A?D",
236
+ "length": 30
237
+ },
238
+ "routeShortName": "B",
239
+ "routeLongName": "Grenoble Presqu'île / Gières Plaine des Sports",
240
+ "rentedBike": false,
241
+ "duration": 180,
242
+ "transitLeg": true,
243
+ "intermediateStops": [],
244
+ "steps": []
245
+ },
246
+ {
247
+ "startTime": 1614678060000,
248
+ "endTime": 1614678078000,
249
+ "departureDelay": 0,
250
+ "arrivalDelay": 0,
251
+ "realTime": false,
252
+ "distance": 16.71,
253
+ "pathway": false,
254
+ "mode": "WALK",
255
+ "route": "",
256
+ "agencyTimeZoneOffset": 3600000,
257
+ "interlineWithPreviousLeg": false,
258
+ "from": {
259
+ "name": "Grenoble, Hubert Dubedout - Maison du Tourisme",
260
+ "stopId": "SEM:2020",
261
+ "stopCode": "2020",
262
+ "lon": 5.72822,
263
+ "lat": 45.19023,
264
+ "arrival": 1614678060000,
265
+ "departure": 1614678060000,
266
+ "stopIndex": 13,
267
+ "stopSequence": 14,
268
+ "vertexType": "TRANSIT"
269
+ },
270
+ "to": {
271
+ "name": "Grenoble, Hubert Dubedout - Maison du Tourisme",
272
+ "stopId": "SEM:2021",
273
+ "stopCode": "2021",
274
+ "lon": 5.72822,
275
+ "lat": 45.1902,
276
+ "arrival": 1614678078000,
277
+ "departure": 1614678360000,
278
+ "stopIndex": 10,
279
+ "stopSequence": 11,
280
+ "vertexType": "TRANSIT"
281
+ },
282
+ "legGeometry": {
283
+ "points": "{eyrGix}a@@SDHAH",
284
+ "length": 4
285
+ },
286
+ "rentedBike": false,
287
+ "duration": 18,
288
+ "transitLeg": false,
289
+ "intermediateStops": [],
290
+ "steps": [
291
+ {
292
+ "distance": 16.71,
293
+ "relativeDirection": "DEPART",
294
+ "streetName": "Grenoble, Hubert Dubedout - Maison du Tourisme => Grenoble, Hubert Dubedout - Maison du Tourisme",
295
+ "absoluteDirection": "SOUTH",
296
+ "stayOn": false,
297
+ "area": false,
298
+ "bogusName": false,
299
+ "lon": 5.72822,
300
+ "lat": 45.19023,
301
+ "elevation": []
302
+ }
303
+ ]
304
+ },
305
+ {
306
+ "startTime": 1614678360000,
307
+ "endTime": 1614678660000,
308
+ "departureDelay": 0,
309
+ "arrivalDelay": 0,
310
+ "realTime": false,
311
+ "distance": 734.3693096422119,
312
+ "pathway": false,
313
+ "mode": "TRAM",
314
+ "route": "A",
315
+ "agencyName": "M",
316
+ "agencyUrl": "https://www.mobilites-m.fr/",
317
+ "agencyTimeZoneOffset": 3600000,
318
+ "routeColor": "3376B8",
319
+ "routeType": 0,
320
+ "routeId": "SEM:A",
321
+ "routeTextColor": "FFFFFF",
322
+ "interlineWithPreviousLeg": false,
323
+ "headsign": "Le Pont-de-Claix, L'Etoile",
324
+ "agencyId": "SEM",
325
+ "tripId": "SEM:25182764",
326
+ "serviceDate": "20210302",
327
+ "from": {
328
+ "name": "Grenoble, Hubert Dubedout - Maison du Tourisme",
329
+ "stopId": "SEM:2021",
330
+ "stopCode": "2021",
331
+ "lon": 5.72822,
332
+ "lat": 45.1902,
333
+ "arrival": 1614678078000,
334
+ "departure": 1614678360000,
335
+ "stopIndex": 10,
336
+ "stopSequence": 11,
337
+ "vertexType": "TRANSIT"
338
+ },
339
+ "to": {
340
+ "name": "Grenoble, Chavant",
341
+ "stopId": "SEM:2255",
342
+ "stopCode": "2255",
343
+ "lon": 5.7317,
344
+ "lat": 45.18466,
345
+ "arrival": 1614678660000,
346
+ "departure": 1614678661000,
347
+ "stopIndex": 12,
348
+ "stopSequence": 13,
349
+ "vertexType": "TRANSIT"
350
+ },
351
+ "legGeometry": {
352
+ "points": "ieyrGgx}a@?GD}A?g@DmB?q@?M@y@BqD?G@C?C@E@C?CBE@EBA@CBCDEpA_AHGDABABABAB?B?@?@?B@B@B@B@BB@BBB@BBD@FL^@DBF@BBDBBBBD@BBB@B?D@B?DAB?BADCDCTOPOb@[FGf@]v@m@lEcDFEDCBADADAD?B?D?B@DBBBBBX\\BDDDBDDBDBhBpAFBFDDBDBFBD@D@B@D@hAN`AL",
353
+ "length": 96
354
+ },
355
+ "routeShortName": "A",
356
+ "routeLongName": "Fontaine La Poya / Pont De Claix L'Etoile",
357
+ "rentedBike": false,
358
+ "duration": 300,
359
+ "transitLeg": true,
360
+ "intermediateStops": [
361
+ {
362
+ "name": "Grenoble, Verdun - Préfecture",
363
+ "stopId": "SEM:2019",
364
+ "stopCode": "2019",
365
+ "lon": 5.73144,
366
+ "lat": 45.1883,
367
+ "arrival": 1614678480000,
368
+ "departure": 1614678480000,
369
+ "stopIndex": 11,
370
+ "stopSequence": 12,
371
+ "vertexType": "TRANSIT"
372
+ }
373
+ ],
374
+ "steps": []
375
+ },
376
+ {
377
+ "startTime": 1614678661000,
378
+ "endTime": 1614678820000,
379
+ "departureDelay": 0,
380
+ "arrivalDelay": 0,
381
+ "realTime": false,
382
+ "distance": 117.612,
383
+ "pathway": false,
384
+ "mode": "WALK",
385
+ "route": "",
386
+ "agencyTimeZoneOffset": 3600000,
387
+ "interlineWithPreviousLeg": false,
388
+ "from": {
389
+ "name": "Grenoble, Chavant",
390
+ "stopId": "SEM:2255",
391
+ "stopCode": "2255",
392
+ "lon": 5.7317,
393
+ "lat": 45.18466,
394
+ "arrival": 1614678660000,
395
+ "departure": 1614678661000,
396
+ "stopIndex": 12,
397
+ "stopSequence": 13,
398
+ "vertexType": "TRANSIT"
399
+ },
400
+ "to": {
401
+ "name": "Destination",
402
+ "lon": 5.73123,
403
+ "lat": 45.18544,
404
+ "arrival": 1614678820000,
405
+ "orig": "",
406
+ "vertexType": "NORMAL"
407
+ },
408
+ "legGeometry": {
409
+ "points": "ccxrGan~a@q@IO@OBAD?Fg@FOGCLCNGd@AL",
410
+ "length": 12
411
+ },
412
+ "rentedBike": false,
413
+ "duration": 159,
414
+ "transitLeg": false,
415
+ "intermediateStops": [],
416
+ "steps": [
417
+ {
418
+ "distance": 28.218,
419
+ "relativeDirection": "DEPART",
420
+ "streetName": "Chavant",
421
+ "absoluteDirection": "NORTH",
422
+ "stayOn": false,
423
+ "area": false,
424
+ "bogusName": false,
425
+ "lon": 5.731697067184234,
426
+ "lat": 45.18466030249286,
427
+ "elevation": []
428
+ },
429
+ {
430
+ "distance": 18.674,
431
+ "relativeDirection": "CONTINUE",
432
+ "streetName": "plate-forme",
433
+ "absoluteDirection": "NORTH",
434
+ "stayOn": false,
435
+ "area": true,
436
+ "bogusName": true,
437
+ "lon": 5.7317492,
438
+ "lat": 45.184911400000004,
439
+ "elevation": [
440
+ {
441
+ "first": 0,
442
+ "second": 213.62
443
+ },
444
+ {
445
+ "first": 9.79,
446
+ "second": 213.56
447
+ },
448
+ {
449
+ "first": 9.794,
450
+ "second": 213.56
451
+ },
452
+ {
453
+ "first": 18.674,
454
+ "second": 213.51
455
+ }
456
+ ]
457
+ },
458
+ {
459
+ "distance": 5.734,
460
+ "relativeDirection": "LEFT",
461
+ "streetName": "chemin",
462
+ "absoluteDirection": "WEST",
463
+ "stayOn": true,
464
+ "area": false,
465
+ "bogusName": true,
466
+ "lon": 5.731718000000001,
467
+ "lat": 45.1850779,
468
+ "elevation": [
469
+ {
470
+ "first": 0,
471
+ "second": 213.51
472
+ },
473
+ {
474
+ "first": 2.48,
475
+ "second": 213.51
476
+ },
477
+ {
478
+ "first": 2.48,
479
+ "second": 213.51
480
+ },
481
+ {
482
+ "first": 5.73,
483
+ "second": 213.51
484
+ }
485
+ ]
486
+ },
487
+ {
488
+ "distance": 31.823999999999998,
489
+ "relativeDirection": "RIGHT",
490
+ "streetName": "plateau piétonnier",
491
+ "absoluteDirection": "NORTH",
492
+ "stayOn": true,
493
+ "area": true,
494
+ "bogusName": true,
495
+ "lon": 5.7316456,
496
+ "lat": 45.185085400000006,
497
+ "elevation": [
498
+ {
499
+ "first": 0,
500
+ "second": 213.51
501
+ },
502
+ {
503
+ "first": 10,
504
+ "second": 213.45
505
+ },
506
+ {
507
+ "first": 22.17,
508
+ "second": 213.32
509
+ },
510
+ {
511
+ "first": 22.174,
512
+ "second": 213.32
513
+ },
514
+ {
515
+ "first": 31.823999999999998,
516
+ "second": 213.2
517
+ }
518
+ ]
519
+ },
520
+ {
521
+ "distance": 33.162,
522
+ "relativeDirection": "LEFT",
523
+ "streetName": "Boulevard Maréchal Lyautey",
524
+ "absoluteDirection": "WEST",
525
+ "stayOn": false,
526
+ "area": false,
527
+ "bogusName": false,
528
+ "lon": 5.7316411,
529
+ "lat": 45.1853665,
530
+ "elevation": [
531
+ {
532
+ "first": 0,
533
+ "second": 213.2
534
+ },
535
+ {
536
+ "first": 12.37,
537
+ "second": 213.19
538
+ },
539
+ {
540
+ "first": 12.366,
541
+ "second": 213.19
542
+ },
543
+ {
544
+ "first": 22.366,
545
+ "second": 213.26
546
+ },
547
+ {
548
+ "first": 27.426000000000002,
549
+ "second": 213.3
550
+ }
551
+ ]
552
+ }
553
+ ]
554
+ }
555
+ ],
556
+ "tooSloped": false
557
+ },
558
+ {
559
+ "duration": 1004,
560
+ "startTime": 1614678176000,
561
+ "endTime": 1614679180000,
562
+ "walkTime": 300,
563
+ "transitTime": 480,
564
+ "waitingTime": 224,
565
+ "walkDistance": 268.2566393118602,
566
+ "walkLimitExceeded": false,
567
+ "elevationLost": 0.4300000000000068,
568
+ "elevationGained": 0.2500000000000284,
569
+ "transfers": 1,
570
+ "fare": {
571
+ "fare": {
572
+ "regular": {
573
+ "currency": {
574
+ "symbol": "€",
575
+ "currencyCode": "EUR",
576
+ "currency": "EUR",
577
+ "defaultFractionDigits": 2
578
+ },
579
+ "cents": 160
580
+ }
581
+ }
582
+ },
583
+ "legs": [
584
+ {
585
+ "startTime": 1614678176000,
586
+ "endTime": 1614678299000,
587
+ "departureDelay": 0,
588
+ "arrivalDelay": 0,
589
+ "realTime": false,
590
+ "distance": 133.47299999999998,
591
+ "pathway": false,
592
+ "mode": "WALK",
593
+ "route": "",
594
+ "agencyTimeZoneOffset": 3600000,
595
+ "interlineWithPreviousLeg": false,
596
+ "from": {
597
+ "name": "Origin",
598
+ "lon": 5.731452541397871,
599
+ "lat": 45.192514856662456,
600
+ "departure": 1614678176000,
601
+ "orig": "",
602
+ "vertexType": "NORMAL"
603
+ },
604
+ "to": {
605
+ "name": "Grenoble, Sainte-Claire - Les Halles",
606
+ "stopId": "SEM:2043",
607
+ "stopCode": "2043",
608
+ "lon": 5.73063,
609
+ "lat": 45.19147,
610
+ "arrival": 1614678299000,
611
+ "departure": 1614678300000,
612
+ "stopIndex": 12,
613
+ "stopSequence": 13,
614
+ "vertexType": "TRANSIT"
615
+ },
616
+ "legGeometry": {
617
+ "points": "etyrGql~a@|@`@`BxAVTXP",
618
+ "length": 5
619
+ },
620
+ "rentedBike": false,
621
+ "duration": 123,
622
+ "transitLeg": false,
623
+ "intermediateStops": [],
624
+ "steps": [
625
+ {
626
+ "distance": 36.29,
627
+ "relativeDirection": "DEPART",
628
+ "streetName": "Place Notre-Dame (path)",
629
+ "absoluteDirection": "SOUTH",
630
+ "stayOn": false,
631
+ "area": false,
632
+ "bogusName": false,
633
+ "lon": 5.731452449455603,
634
+ "lat": 45.19251488096676,
635
+ "elevation": []
636
+ },
637
+ {
638
+ "distance": 65.191,
639
+ "relativeDirection": "CONTINUE",
640
+ "streetName": "Rue Président Sadi Carnot (pedestrian street)",
641
+ "absoluteDirection": "SOUTHWEST",
642
+ "stayOn": false,
643
+ "area": true,
644
+ "bogusName": false,
645
+ "lon": 5.731289800000001,
646
+ "lat": 45.1922093,
647
+ "elevation": [
648
+ {
649
+ "first": 0,
650
+ "second": 210.73
651
+ },
652
+ {
653
+ "first": 10,
654
+ "second": 210.74
655
+ },
656
+ {
657
+ "first": 20,
658
+ "second": 210.76
659
+ },
660
+ {
661
+ "first": 30,
662
+ "second": 210.78
663
+ },
664
+ {
665
+ "first": 40,
666
+ "second": 210.79
667
+ },
668
+ {
669
+ "first": 50,
670
+ "second": 210.81
671
+ },
672
+ {
673
+ "first": 60,
674
+ "second": 210.83
675
+ },
676
+ {
677
+ "first": 65.19,
678
+ "second": 210.84
679
+ }
680
+ ]
681
+ },
682
+ {
683
+ "distance": 31.992,
684
+ "relativeDirection": "CONTINUE",
685
+ "streetName": "Place Sainte-Claire (pedestrian street)",
686
+ "absoluteDirection": "SOUTHWEST",
687
+ "stayOn": false,
688
+ "area": true,
689
+ "bogusName": false,
690
+ "lon": 5.730834771776759,
691
+ "lat": 45.19171849560196,
692
+ "elevation": [
693
+ {
694
+ "first": 0,
695
+ "second": 210.84
696
+ },
697
+ {
698
+ "first": 10,
699
+ "second": 210.86
700
+ },
701
+ {
702
+ "first": 16.44,
703
+ "second": 210.87
704
+ }
705
+ ]
706
+ }
707
+ ]
708
+ },
709
+ {
710
+ "startTime": 1614678300000,
711
+ "endTime": 1614678480000,
712
+ "departureDelay": 0,
713
+ "arrivalDelay": 0,
714
+ "realTime": false,
715
+ "distance": 233.83522339610607,
716
+ "pathway": false,
717
+ "mode": "TRAM",
718
+ "route": "B",
719
+ "agencyName": "M",
720
+ "agencyUrl": "https://www.mobilites-m.fr/",
721
+ "agencyTimeZoneOffset": 3600000,
722
+ "routeColor": "479A45",
723
+ "routeType": 0,
724
+ "routeId": "SEM:B",
725
+ "routeTextColor": "FFFFFF",
726
+ "interlineWithPreviousLeg": false,
727
+ "headsign": "Grenoble, Oxford",
728
+ "agencyId": "SEM",
729
+ "tripId": "SEM:25183961",
730
+ "serviceDate": "20210302",
731
+ "from": {
732
+ "name": "Grenoble, Sainte-Claire - Les Halles",
733
+ "stopId": "SEM:2043",
734
+ "stopCode": "2043",
735
+ "lon": 5.73063,
736
+ "lat": 45.19147,
737
+ "arrival": 1614678299000,
738
+ "departure": 1614678300000,
739
+ "stopIndex": 12,
740
+ "stopSequence": 13,
741
+ "vertexType": "TRANSIT"
742
+ },
743
+ "to": {
744
+ "name": "Grenoble, Hubert Dubedout - Maison du Tourisme",
745
+ "stopId": "SEM:2020",
746
+ "stopCode": "2020",
747
+ "lon": 5.72822,
748
+ "lat": 45.19023,
749
+ "arrival": 1614678480000,
750
+ "departure": 1614678480000,
751
+ "stopIndex": 13,
752
+ "stopSequence": 14,
753
+ "vertexType": "TRANSIT"
754
+ },
755
+ "legGeometry": {
756
+ "points": "qmyrGwg~a@NFz@^FBHBJ@L?^An@CH?F?F@D@D@BBB@DDBF@D@D@F@H@J?H?z@CxCAVA`@E|A?D",
757
+ "length": 30
758
+ },
759
+ "routeShortName": "B",
760
+ "routeLongName": "Grenoble Presqu'île / Gières Plaine des Sports",
761
+ "rentedBike": false,
762
+ "duration": 180,
763
+ "transitLeg": true,
764
+ "intermediateStops": [],
765
+ "steps": []
766
+ },
767
+ {
768
+ "startTime": 1614678480000,
769
+ "endTime": 1614678498000,
770
+ "departureDelay": 0,
771
+ "arrivalDelay": 0,
772
+ "realTime": false,
773
+ "distance": 16.71,
774
+ "pathway": false,
775
+ "mode": "WALK",
776
+ "route": "",
777
+ "agencyTimeZoneOffset": 3600000,
778
+ "interlineWithPreviousLeg": false,
779
+ "from": {
780
+ "name": "Grenoble, Hubert Dubedout - Maison du Tourisme",
781
+ "stopId": "SEM:2020",
782
+ "stopCode": "2020",
783
+ "lon": 5.72822,
784
+ "lat": 45.19023,
785
+ "arrival": 1614678480000,
786
+ "departure": 1614678480000,
787
+ "stopIndex": 13,
788
+ "stopSequence": 14,
789
+ "vertexType": "TRANSIT"
790
+ },
791
+ "to": {
792
+ "name": "Grenoble, Hubert Dubedout - Maison du Tourisme",
793
+ "stopId": "SEM:2021",
794
+ "stopCode": "2021",
795
+ "lon": 5.72822,
796
+ "lat": 45.1902,
797
+ "arrival": 1614678498000,
798
+ "departure": 1614678720000,
799
+ "stopIndex": 10,
800
+ "stopSequence": 11,
801
+ "vertexType": "TRANSIT"
802
+ },
803
+ "legGeometry": {
804
+ "points": "{eyrGix}a@@SDHAH",
805
+ "length": 4
806
+ },
807
+ "rentedBike": false,
808
+ "duration": 18,
809
+ "transitLeg": false,
810
+ "intermediateStops": [],
811
+ "steps": [
812
+ {
813
+ "distance": 16.71,
814
+ "relativeDirection": "DEPART",
815
+ "streetName": "Grenoble, Hubert Dubedout - Maison du Tourisme => Grenoble, Hubert Dubedout - Maison du Tourisme",
816
+ "absoluteDirection": "SOUTH",
817
+ "stayOn": false,
818
+ "area": false,
819
+ "bogusName": false,
820
+ "lon": 5.72822,
821
+ "lat": 45.19023,
822
+ "elevation": []
823
+ }
824
+ ]
825
+ },
826
+ {
827
+ "startTime": 1614678720000,
828
+ "endTime": 1614679020000,
829
+ "departureDelay": 0,
830
+ "arrivalDelay": 0,
831
+ "realTime": false,
832
+ "distance": 734.3693096422119,
833
+ "pathway": false,
834
+ "mode": "TRAM",
835
+ "route": "A",
836
+ "agencyName": "M",
837
+ "agencyUrl": "https://www.mobilites-m.fr/",
838
+ "agencyTimeZoneOffset": 3600000,
839
+ "routeColor": "3376B8",
840
+ "routeType": 0,
841
+ "routeId": "SEM:A",
842
+ "routeTextColor": "FFFFFF",
843
+ "interlineWithPreviousLeg": false,
844
+ "headsign": "Le Pont-de-Claix, L'Etoile",
845
+ "agencyId": "SEM",
846
+ "tripId": "SEM:25182765",
847
+ "serviceDate": "20210302",
848
+ "from": {
849
+ "name": "Grenoble, Hubert Dubedout - Maison du Tourisme",
850
+ "stopId": "SEM:2021",
851
+ "stopCode": "2021",
852
+ "lon": 5.72822,
853
+ "lat": 45.1902,
854
+ "arrival": 1614678498000,
855
+ "departure": 1614678720000,
856
+ "stopIndex": 10,
857
+ "stopSequence": 11,
858
+ "vertexType": "TRANSIT"
859
+ },
860
+ "to": {
861
+ "name": "Grenoble, Chavant",
862
+ "stopId": "SEM:2255",
863
+ "stopCode": "2255",
864
+ "lon": 5.7317,
865
+ "lat": 45.18466,
866
+ "arrival": 1614679020000,
867
+ "departure": 1614679021000,
868
+ "stopIndex": 12,
869
+ "stopSequence": 13,
870
+ "vertexType": "TRANSIT"
871
+ },
872
+ "legGeometry": {
873
+ "points": "ieyrGgx}a@?GD}A?g@DmB?q@?M@y@BqD?G@C?C@E@C?CBE@EBA@CBCDEpA_AHGDABABABAB?B?@?@?B@B@B@B@BB@BBB@BBD@FL^@DBF@BBDBBBBD@BBB@B?D@B?DAB?BADCDCTOPOb@[FGf@]v@m@lEcDFEDCBADADAD?B?D?B@DBBBBBX\\BDDDBDDBDBhBpAFBFDDBDBFBD@D@B@D@hAN`AL",
874
+ "length": 96
875
+ },
876
+ "routeShortName": "A",
877
+ "routeLongName": "Fontaine La Poya / Pont De Claix L'Etoile",
878
+ "rentedBike": false,
879
+ "duration": 300,
880
+ "transitLeg": true,
881
+ "intermediateStops": [
882
+ {
883
+ "name": "Grenoble, Verdun - Préfecture",
884
+ "stopId": "SEM:2019",
885
+ "stopCode": "2019",
886
+ "lon": 5.73144,
887
+ "lat": 45.1883,
888
+ "arrival": 1614678840000,
889
+ "departure": 1614678840000,
890
+ "stopIndex": 11,
891
+ "stopSequence": 12,
892
+ "vertexType": "TRANSIT"
893
+ }
894
+ ],
895
+ "steps": []
896
+ },
897
+ {
898
+ "startTime": 1614679021000,
899
+ "endTime": 1614679180000,
900
+ "departureDelay": 0,
901
+ "arrivalDelay": 0,
902
+ "realTime": false,
903
+ "distance": 117.612,
904
+ "pathway": false,
905
+ "mode": "WALK",
906
+ "route": "",
907
+ "agencyTimeZoneOffset": 3600000,
908
+ "interlineWithPreviousLeg": false,
909
+ "from": {
910
+ "name": "Grenoble, Chavant",
911
+ "stopId": "SEM:2255",
912
+ "stopCode": "2255",
913
+ "lon": 5.7317,
914
+ "lat": 45.18466,
915
+ "arrival": 1614679020000,
916
+ "departure": 1614679021000,
917
+ "stopIndex": 12,
918
+ "stopSequence": 13,
919
+ "vertexType": "TRANSIT"
920
+ },
921
+ "to": {
922
+ "name": "Destination",
923
+ "lon": 5.73123,
924
+ "lat": 45.18544,
925
+ "arrival": 1614679180000,
926
+ "orig": "",
927
+ "vertexType": "NORMAL"
928
+ },
929
+ "legGeometry": {
930
+ "points": "ccxrGan~a@q@IO@OBAD?Fg@FOGCLCNGd@AL",
931
+ "length": 12
932
+ },
933
+ "rentedBike": false,
934
+ "duration": 159,
935
+ "transitLeg": false,
936
+ "intermediateStops": [],
937
+ "steps": [
938
+ {
939
+ "distance": 28.218,
940
+ "relativeDirection": "DEPART",
941
+ "streetName": "Chavant",
942
+ "absoluteDirection": "NORTH",
943
+ "stayOn": false,
944
+ "area": false,
945
+ "bogusName": false,
946
+ "lon": 5.731697067184234,
947
+ "lat": 45.18466030249286,
948
+ "elevation": []
949
+ },
950
+ {
951
+ "distance": 18.674,
952
+ "relativeDirection": "CONTINUE",
953
+ "streetName": "plate-forme",
954
+ "absoluteDirection": "NORTH",
955
+ "stayOn": false,
956
+ "area": true,
957
+ "bogusName": true,
958
+ "lon": 5.7317492,
959
+ "lat": 45.184911400000004,
960
+ "elevation": [
961
+ {
962
+ "first": 0,
963
+ "second": 213.62
964
+ },
965
+ {
966
+ "first": 9.79,
967
+ "second": 213.56
968
+ },
969
+ {
970
+ "first": 9.794,
971
+ "second": 213.56
972
+ },
973
+ {
974
+ "first": 18.674,
975
+ "second": 213.51
976
+ }
977
+ ]
978
+ },
979
+ {
980
+ "distance": 5.734,
981
+ "relativeDirection": "LEFT",
982
+ "streetName": "chemin",
983
+ "absoluteDirection": "WEST",
984
+ "stayOn": true,
985
+ "area": false,
986
+ "bogusName": true,
987
+ "lon": 5.731718000000001,
988
+ "lat": 45.1850779,
989
+ "elevation": [
990
+ {
991
+ "first": 0,
992
+ "second": 213.51
993
+ },
994
+ {
995
+ "first": 2.48,
996
+ "second": 213.51
997
+ },
998
+ {
999
+ "first": 2.48,
1000
+ "second": 213.51
1001
+ },
1002
+ {
1003
+ "first": 5.73,
1004
+ "second": 213.51
1005
+ }
1006
+ ]
1007
+ },
1008
+ {
1009
+ "distance": 31.823999999999998,
1010
+ "relativeDirection": "RIGHT",
1011
+ "streetName": "plateau piétonnier",
1012
+ "absoluteDirection": "NORTH",
1013
+ "stayOn": true,
1014
+ "area": true,
1015
+ "bogusName": true,
1016
+ "lon": 5.7316456,
1017
+ "lat": 45.185085400000006,
1018
+ "elevation": [
1019
+ {
1020
+ "first": 0,
1021
+ "second": 213.51
1022
+ },
1023
+ {
1024
+ "first": 10,
1025
+ "second": 213.45
1026
+ },
1027
+ {
1028
+ "first": 22.17,
1029
+ "second": 213.32
1030
+ },
1031
+ {
1032
+ "first": 22.174,
1033
+ "second": 213.32
1034
+ },
1035
+ {
1036
+ "first": 31.823999999999998,
1037
+ "second": 213.2
1038
+ }
1039
+ ]
1040
+ },
1041
+ {
1042
+ "distance": 33.162,
1043
+ "relativeDirection": "LEFT",
1044
+ "streetName": "Boulevard Maréchal Lyautey",
1045
+ "absoluteDirection": "WEST",
1046
+ "stayOn": false,
1047
+ "area": false,
1048
+ "bogusName": false,
1049
+ "lon": 5.7316411,
1050
+ "lat": 45.1853665,
1051
+ "elevation": [
1052
+ {
1053
+ "first": 0,
1054
+ "second": 213.2
1055
+ },
1056
+ {
1057
+ "first": 12.37,
1058
+ "second": 213.19
1059
+ },
1060
+ {
1061
+ "first": 12.366,
1062
+ "second": 213.19
1063
+ },
1064
+ {
1065
+ "first": 22.366,
1066
+ "second": 213.26
1067
+ },
1068
+ {
1069
+ "first": 27.426000000000002,
1070
+ "second": 213.3
1071
+ }
1072
+ ]
1073
+ }
1074
+ ]
1075
+ }
1076
+ ],
1077
+ "tooSloped": false
1078
+ }
1079
+ ]
1080
+ },
1081
+ "debugOutput": {
1082
+ "precalculationTime": 89,
1083
+ "pathCalculationTime": 50,
1084
+ "pathTimes": [
1085
+ 20,
1086
+ 30
1087
+ ],
1088
+ "renderingTime": 0,
1089
+ "totalTime": 139,
1090
+ "timedOut": false
1091
+ }
1092
+ }