@wemap/osm 5.6.1 → 5.8.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.
- package/assets/itinerary-deutsche-bahn-1.json +368 -0
- package/dist/wemap-osm.es.js +12 -2
- package/dist/wemap-osm.es.js.map +1 -1
- package/index.js +2 -1
- package/package.json +2 -2
- package/src/routers/Itinerary.js +4 -3
- package/src/routers/deutsche-bahn/DeutscheBahnRouterUtils.js +93 -0
- package/src/routers/deutsche-bahn/DeutscheBahnRouterUtils.spec.js +54 -0
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
{
|
|
2
|
+
"segments": [
|
|
3
|
+
{
|
|
4
|
+
"type": "WALK",
|
|
5
|
+
"level": -10,
|
|
6
|
+
"fromLevel": -10,
|
|
7
|
+
"toLevel": -10,
|
|
8
|
+
"length": 34.32968908548355,
|
|
9
|
+
"polyline": [
|
|
10
|
+
{
|
|
11
|
+
"lon": 13.36836586,
|
|
12
|
+
"lat": 52.52585157
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"lon": 13.36838947,
|
|
16
|
+
"lat": 52.52584586
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"lon": 13.36841308,
|
|
20
|
+
"lat": 52.52584014
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"lon": 13.36842018,
|
|
24
|
+
"lat": 52.5258301
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"lon": 13.36842729,
|
|
28
|
+
"lat": 52.52582006
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"lon": 13.36843439,
|
|
32
|
+
"lat": 52.52581002
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"lon": 13.3684415,
|
|
36
|
+
"lat": 52.52579998
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"lon": 13.36844861,
|
|
40
|
+
"lat": 52.52578994
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"lon": 13.36845571,
|
|
44
|
+
"lat": 52.5257799
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"lon": 13.36846282,
|
|
48
|
+
"lat": 52.52576986
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"lon": 13.36846993,
|
|
52
|
+
"lat": 52.52575983
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"lon": 13.36847703,
|
|
56
|
+
"lat": 52.52574979
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"lon": 13.36848414,
|
|
60
|
+
"lat": 52.52573975
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"lon": 13.36849125,
|
|
64
|
+
"lat": 52.52572971
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"lon": 13.36849835,
|
|
68
|
+
"lat": 52.52571967
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"lon": 13.36850546,
|
|
72
|
+
"lat": 52.52570963
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"lon": 13.36851257,
|
|
76
|
+
"lat": 52.52569959
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"lon": 13.36851967,
|
|
80
|
+
"lat": 52.52568955
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"lon": 13.36852678,
|
|
84
|
+
"lat": 52.52567951
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"lon": 13.36853389,
|
|
88
|
+
"lat": 52.52566947
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"lon": 13.36854099,
|
|
92
|
+
"lat": 52.52565943
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"lon": 13.3685481,
|
|
96
|
+
"lat": 52.52564939
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"lon": 13.3685552,
|
|
100
|
+
"lat": 52.52563935
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"lon": 13.36856231,
|
|
104
|
+
"lat": 52.52562931
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"lon": 13.36856942,
|
|
108
|
+
"lat": 52.52561927
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"lon": 13.36857652,
|
|
112
|
+
"lat": 52.52560923
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"lon": 13.36858363,
|
|
116
|
+
"lat": 52.5255992
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"lon": 13.36859074,
|
|
120
|
+
"lat": 52.52558916
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"lon": 13.36859343,
|
|
124
|
+
"lat": 52.52558535
|
|
125
|
+
}
|
|
126
|
+
]
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"type": "ESCALATOR",
|
|
130
|
+
"level": -10,
|
|
131
|
+
"fromLevel": -10,
|
|
132
|
+
"toLevel": -5,
|
|
133
|
+
"length": 20.609539031982422,
|
|
134
|
+
"polyline": [
|
|
135
|
+
{
|
|
136
|
+
"lon": 13.36859343,
|
|
137
|
+
"lat": 52.52558535
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"lon": 13.36871379,
|
|
141
|
+
"lat": 52.52541531
|
|
142
|
+
}
|
|
143
|
+
]
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"type": "WALK",
|
|
147
|
+
"level": -5,
|
|
148
|
+
"fromLevel": -5,
|
|
149
|
+
"toLevel": -5,
|
|
150
|
+
"length": 38.39028958231211,
|
|
151
|
+
"polyline": [
|
|
152
|
+
{
|
|
153
|
+
"lon": 13.36871379,
|
|
154
|
+
"lat": 52.52541531
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"lon": 13.36871865,
|
|
158
|
+
"lat": 52.52540845
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"lon": 13.36872576,
|
|
162
|
+
"lat": 52.52539841
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"lon": 13.36874937,
|
|
166
|
+
"lat": 52.52539269
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
"lon": 13.36877298,
|
|
170
|
+
"lat": 52.52538698
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
"lon": 13.36879658,
|
|
174
|
+
"lat": 52.52538126
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"lon": 13.36882019,
|
|
178
|
+
"lat": 52.52537554
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"lon": 13.3688438,
|
|
182
|
+
"lat": 52.52536983
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"lon": 13.36886741,
|
|
186
|
+
"lat": 52.52536411
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"lon": 13.36889101,
|
|
190
|
+
"lat": 52.5253584
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
"lon": 13.36891462,
|
|
194
|
+
"lat": 52.52535268
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
"lon": 13.36893823,
|
|
198
|
+
"lat": 52.52534697
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"lon": 13.36896184,
|
|
202
|
+
"lat": 52.52534125
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"lon": 13.36896894,
|
|
206
|
+
"lat": 52.52533121
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
"lon": 13.36897605,
|
|
210
|
+
"lat": 52.52532117
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
"lon": 13.36899966,
|
|
214
|
+
"lat": 52.52531546
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
"lon": 13.36902326,
|
|
218
|
+
"lat": 52.52530974
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"lon": 13.36904687,
|
|
222
|
+
"lat": 52.52530402
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
"lon": 13.36907048,
|
|
226
|
+
"lat": 52.52529831
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
"lon": 13.36909409,
|
|
230
|
+
"lat": 52.52529259
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
"lon": 13.36911769,
|
|
234
|
+
"lat": 52.52528688
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
"lon": 13.3691413,
|
|
238
|
+
"lat": 52.52528116
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"lon": 13.36914853,
|
|
242
|
+
"lat": 52.52527941
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
"lon": 13.36915688,
|
|
246
|
+
"lat": 52.52528024
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
"lon": 13.36915862,
|
|
250
|
+
"lat": 52.52528011
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
"lon": 13.36916021,
|
|
254
|
+
"lat": 52.52527938
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"lon": 13.36916145,
|
|
258
|
+
"lat": 52.52527815
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
"lon": 13.36916305,
|
|
262
|
+
"lat": 52.5252759
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
"lon": 13.36916361,
|
|
266
|
+
"lat": 52.5252751
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
"lon": 13.36916491,
|
|
270
|
+
"lat": 52.52527544
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
"lon": 13.36917202,
|
|
274
|
+
"lat": 52.52526541
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
"lon": 13.36917912,
|
|
278
|
+
"lat": 52.52525537
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
"lon": 13.36918077,
|
|
282
|
+
"lat": 52.52525304
|
|
283
|
+
}
|
|
284
|
+
]
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
"type": "ESCALATOR",
|
|
288
|
+
"level": -5,
|
|
289
|
+
"fromLevel": -5,
|
|
290
|
+
"toLevel": 0,
|
|
291
|
+
"length": 21.538557052612305,
|
|
292
|
+
"polyline": [
|
|
293
|
+
{
|
|
294
|
+
"lon": 13.36918077,
|
|
295
|
+
"lat": 52.52525304
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
"lon": 13.36930656,
|
|
299
|
+
"lat": 52.52507534
|
|
300
|
+
}
|
|
301
|
+
]
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
"type": "WALK",
|
|
305
|
+
"level": 0,
|
|
306
|
+
"fromLevel": 0,
|
|
307
|
+
"toLevel": 0,
|
|
308
|
+
"length": 14.703765034675598,
|
|
309
|
+
"polyline": [
|
|
310
|
+
{
|
|
311
|
+
"lon": 13.36930704,
|
|
312
|
+
"lat": 52.52507466
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
"lon": 13.36933065,
|
|
316
|
+
"lat": 52.52506894
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
"lon": 13.36935426,
|
|
320
|
+
"lat": 52.52506322
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
"lon": 13.36937786,
|
|
324
|
+
"lat": 52.52505751
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
"lon": 13.36940147,
|
|
328
|
+
"lat": 52.52505179
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
"lon": 13.36942508,
|
|
332
|
+
"lat": 52.52504608
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
"lon": 13.36943218,
|
|
336
|
+
"lat": 52.52503604
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
"lon": 13.36943929,
|
|
340
|
+
"lat": 52.525026
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
"lon": 13.3694464,
|
|
344
|
+
"lat": 52.52501596
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
"lon": 13.3694535,
|
|
348
|
+
"lat": 52.52500592
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
"lon": 13.36946061,
|
|
352
|
+
"lat": 52.52499588
|
|
353
|
+
}
|
|
354
|
+
]
|
|
355
|
+
}
|
|
356
|
+
],
|
|
357
|
+
"length": 129.57183978706598,
|
|
358
|
+
"viewPort": {
|
|
359
|
+
"topRight": {
|
|
360
|
+
"lon": 13.36946061,
|
|
361
|
+
"lat": 52.52585157
|
|
362
|
+
},
|
|
363
|
+
"bottomLeft": {
|
|
364
|
+
"lon": 13.36836586,
|
|
365
|
+
"lat": 52.52499588
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
package/dist/wemap-osm.es.js
CHANGED
|
@@ -2,6 +2,7 @@ import { Level, Coordinates, GraphRouterOptions, GraphRouter, GraphUtils, Networ
|
|
|
2
2
|
import { SaxesParser } from 'saxes';
|
|
3
3
|
import { deg2rad, diffAngle, positiveMod, rad2deg } from '@wemap/maths';
|
|
4
4
|
import Polyline from '@mapbox/polyline';
|
|
5
|
+
import Logger from '@wemap/logger';
|
|
5
6
|
|
|
6
7
|
class OsmElement {
|
|
7
8
|
|
|
@@ -1755,7 +1756,7 @@ function createRouterResponseFromJson(json) {
|
|
|
1755
1756
|
leg.steps.push(step);
|
|
1756
1757
|
}
|
|
1757
1758
|
|
|
1758
|
-
} else if (leg.mode === 'BUS' || leg.mode === '
|
|
1759
|
+
} else if (leg.mode === 'BUS' || leg.mode === 'TRAMWAY' || leg.mode === 'FUNICULAR') {
|
|
1759
1760
|
|
|
1760
1761
|
leg.from = {
|
|
1761
1762
|
name: jsonLeg.Departure.StopPlace.Name,
|
|
@@ -1766,8 +1767,15 @@ function createRouterResponseFromJson(json) {
|
|
|
1766
1767
|
coords: jsonToCoordinates(jsonLeg.Arrival.StopPlace.Position)
|
|
1767
1768
|
};
|
|
1768
1769
|
|
|
1770
|
+
let transportName = jsonLeg.Line.Number;
|
|
1771
|
+
if (leg.mode === 'TRAMWAY') {
|
|
1772
|
+
leg.mode = 'TRAM';
|
|
1773
|
+
// In order to remove the "TRAM " prefix.
|
|
1774
|
+
transportName = transportName.substr(5);
|
|
1775
|
+
}
|
|
1776
|
+
|
|
1769
1777
|
leg.transportInfo = {
|
|
1770
|
-
name:
|
|
1778
|
+
name: transportName,
|
|
1771
1779
|
routeColor: jsonLeg.Line.Color,
|
|
1772
1780
|
routeTextColor: jsonLeg.Line.TextColor,
|
|
1773
1781
|
directionName: jsonLeg.Destination
|
|
@@ -1793,6 +1801,8 @@ function createRouterResponseFromJson(json) {
|
|
|
1793
1801
|
legStep.levelChange = null;
|
|
1794
1802
|
legStep.distance = jsonLeg.Distance;
|
|
1795
1803
|
leg.steps = [legStep];
|
|
1804
|
+
} else {
|
|
1805
|
+
Logger.warn(`[CitywayParser] Unknown leg mode: ${leg.mode}`);
|
|
1796
1806
|
}
|
|
1797
1807
|
|
|
1798
1808
|
leg.distance = leg.coords.reduce((acc, coords, idx, arr) => {
|
package/dist/wemap-osm.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wemap-osm.es.js","sources":["../src/model/OsmElement.js","../src/model/OsmWay.js","../src/model/OsmNode.js","../src/model/OsmModel.js","../src/model/OsmParser.js","../src/routers/custom/OsmRouterOptions.js","../src/routers/custom/OsmRouter.js","../src/routers/LevelChange.js","../src/routers/Step.js","../src/routers/Leg.js","../src/routers/Itinerary.js","../src/routers/custom/StepsGeneration.js","../src/routers/custom/OsmRouterUtils.js","../src/routers/custom/OsmNetworkUtils.js","../src/routers/RouterResponse.js","../src/routers/Utils.js","../src/routers/osrm/OsrmUtils.js","../src/routers/otp/OtpUtils.js","../src/routers/cityway/CitywayUtils.js","../src/routers/info/ItineraryInfo.js","../src/routers/info/ItineraryInfoManager.js"],"sourcesContent":["class OsmElement {\n\n /** @type {number|null} */\n id;\n\n /** @type {object} */\n tags;\n\n /**\n * @param {number} id\n * @param {object} tags\n */\n constructor(id, tags) {\n this.id = id;\n this.tags = tags || {};\n }\n}\n\nexport default OsmElement;\n","import { Level } from '@wemap/geo';\n\nimport OsmElement from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\n\nclass OsmWay extends OsmElement {\n\n /** @type {OsmNode[]} */\n nodes = [];\n\n /** @type {?Level} */\n level = null;\n\n /**\n * @param {number} id\n * @param {object} tags\n * @param {?Level} level\n */\n constructor(id, tags, level) {\n super(id, tags);\n this.level = level || null;\n }\n\n /**\n * @returns {boolean}\n */\n get areStairs() {\n return this.tags.highway === 'steps';\n }\n\n /**\n * @returns {boolean}\n */\n get isConveying() {\n return this.tags.hasOwnProperty('conveying');\n }\n\n /**\n * @returns {boolean}\n */\n get isEscalator() {\n return this.areStairs && this.isConveying;\n }\n\n /**\n * @returns {boolean}\n */\n get isMovingWalkway() {\n return !this.areStairs && this.isConveying;\n }\n\n /**\n * @returns {boolean}\n */\n get isArea() {\n // That is not the real definition for OSM\n return this.nodes[0] === this.nodes[this.nodes.length - 1];\n }\n}\n\nexport default OsmWay;\n","import { Coordinates } from '@wemap/geo';\n\nimport OsmElement from './OsmElement.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmNode extends OsmElement {\n\n /** @type {Coordinates} */\n coords = null;\n\n /** @type {OsmWay[]} */\n ways = [];\n\n /**\n * @param {number} id\n * @param {Coordinates} coords\n * @param {object} tags\n */\n constructor(id, coords, tags) {\n super(id, tags);\n this.coords = coords;\n }\n\n /**\n * @returns {boolean}\n */\n get isElevator() {\n return this.tags.highway === 'elevator';\n }\n\n /**\n * @returns {boolean}\n */\n get isConveying() {\n return this.isElevator;\n }\n}\n\nexport default OsmNode;\n","import OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmModel {\n\n /** @type {OsmNode[]} */\n nodes;\n\n /** @type {OsmWay[]} */\n ways;\n\n /**\n * @param {OsmNode[]|undefined} nodes\n * @param {OsmWay[]|undefined} ways\n */\n constructor(nodes, ways) {\n this.nodes = nodes || [];\n this.ways = ways || [];\n }\n\n /**\n * @param {number} id\n * @returns {OsmNode|null}\n */\n getNodeById(id) {\n return this.nodes.find(node => node.id === id) || null;\n }\n\n /**\n * @param {string} name\n * @returns {OsmNode|null}\n */\n getNodeByName(name) {\n return this.nodes.find(node => node.tags.name === name) || null;\n }\n\n\n /**\n * @param {number} id\n * @returns {OsmWay|null}\n */\n getWayById(id) {\n return this.ways.find(way => way.id === id) || null;\n }\n\n /**\n * @param {string} name\n * @returns {OsmWay|null}\n */\n getWayByName(name) {\n return this.ways.find(way => way.tags.name === name) || null;\n }\n\n}\n\nexport default OsmModel;\n","/* eslint-disable max-statements */\nimport { SaxesParser } from 'saxes';\n\nimport {\n Level, Coordinates\n} from '@wemap/geo';\n\nimport OsmModel from './OsmModel.js';\nimport OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmParser {\n\n /**\n * @param {string} osmXmlString\n * @returns {OsmModel}\n */\n static parseOsmXmlString(osmXmlString) {\n\n const model = new OsmModel();\n const parser = new SaxesParser(true);\n\n let buffer;\n\n const isDeleted = element => element.attributes.action && element.attributes.action === 'delete';\n\n parser.on('opentag', (node) => {\n\n switch (node.name) {\n case 'node': {\n if (isDeleted(node)) {\n buffer = null;\n break;\n }\n const osmNode = this._parseNode(node.attributes);\n buffer = osmNode;\n model.nodes.push(osmNode);\n break;\n }\n case 'way': {\n if (isDeleted(node)) {\n buffer = null;\n break;\n }\n const osmWay = this._parseWay(node.attributes);\n buffer = osmWay;\n model.ways.push(osmWay);\n break;\n }\n case 'tag': {\n if (!buffer) {\n return;\n }\n const {\n k, v\n } = node.attributes;\n buffer.tags[k] = v;\n break;\n }\n case 'nd': {\n if (!buffer || !(buffer instanceof OsmWay)) {\n return;\n }\n const nodeId = Number(node.attributes.ref);\n const refNode = model.getNodeById(nodeId);\n if (!refNode) {\n throw Error('Node: ' + nodeId + ' in way ' + buffer.id + ' not found');\n }\n\n buffer.nodes.push(refNode);\n refNode.ways.push(buffer);\n break;\n }\n }\n });\n\n parser.write(osmXmlString);\n\n for (let i = 0; i < model.ways.length; i++) {\n const way = model.ways[i];\n if (way.tags.level) {\n way.level = Level.fromString(way.tags.level);\n }\n }\n\n return model;\n }\n\n\n static _parseNode(attr) {\n return new OsmNode(\n Number(attr.id),\n new Coordinates(Number(attr.lat), Number(attr.lon)));\n }\n\n static _parseWay(attr) {\n return new OsmWay(Number(attr.id));\n }\n}\n\nexport default OsmParser;\n","import { GraphRouterOptions } from '@wemap/geo';\n\nimport OsmElement from '../../model/OsmElement.js';\n\nclass OsmRouterOptions extends GraphRouterOptions {\n\n /** @type {OsmRouterOptions} */\n static DEFAULT = new OsmRouterOptions();\n\n /**\n * @returns {OsmRouterOptions}\n */\n static get WITHOUT_STAIRS() {\n const options = new OsmRouterOptions();\n options.acceptEdgeFn = edge => edge.builtFrom.tags.highway !== 'steps';\n return options;\n }\n\n /**\n * Get route duration\n * @param {Number} speed in km/h\n */\n static getDurationFromLength(length, speed = 5) {\n return length / (speed * 1000 / 3600);\n }\n\n /** @type {function(GraphEdge<OsmElement>):boolean} */\n weightEdgeFn = edge => edge.builtFrom.isElevator ? 30 : OsmRouterOptions.getDurationFromLength(edge.length);\n\n\n}\n\nexport default OsmRouterOptions;\n","import { Coordinates, GraphItinerary, GraphRouter, Network } from '@wemap/geo';\n\nimport OsmRouterOptions from './OsmRouterOptions.js';\nimport OsmElement from '../../model/OsmElement.js';\n\nclass OsmRouter extends GraphRouter {\n\n /**\n * @param {!Network<OsmElement>} network\n */\n constructor(network) {\n super(network);\n }\n\n /**\n * @param {Coordinates} start\n * @param {Coordinates} end\n * @param {OsmRouterOptions} options\n * @returns {GraphItinerary<OsmElement>}\n */\n getShortestPath(start, end, options = new OsmRouterOptions()) {\n return super.getShortestPath(start, end, options);\n }\n\n}\n\nexport default OsmRouter;\n","import { Level, GraphNode, GraphUtils } from '@wemap/geo';\n\nimport OsmElement from '../model/OsmElement.js';\n\nclass LevelChange {\n\n /** @type {!string} [up|down] */\n direction;\n\n /** @type {!number} [-2, -1, 1, ...] */\n difference;\n\n /** @type {?string} [elevator|conveyor|stairs] */\n type = null;\n\n /**\n * @param {GraphNode<OsmElement>} firstNode\n * @param {GraphNode<OsmElement>} secondNode\n * @returns {LevelChange}\n */\n static fromTwoNodes(firstNode, secondNode) {\n\n const levelChange = new LevelChange();\n\n const edge = GraphUtils.getEdgeByNodes(firstNode.edges, firstNode, secondNode);\n\n if (edge.builtFrom.isElevator) {\n levelChange.type = 'elevator';\n } else if (edge.builtFrom.isConveying) {\n levelChange.type = 'conveyor';\n } else if (edge.builtFrom.areStairs) {\n levelChange.type = 'stairs';\n }\n\n levelChange.difference = Level.diff(firstNode.coords.level, secondNode.coords.level);\n levelChange.direction = levelChange.difference > 0 ? 'up' : 'down';\n\n return levelChange;\n }\n\n /**\n * @returns {object}\n */\n toJson() {\n return {\n direction: this.direction,\n difference: this.difference,\n type: this.type\n };\n }\n\n /**\n * @param {object} json\n * @returns {LevelChange}\n */\n static fromJson(json) {\n const levelChange = new LevelChange();\n levelChange.direction = json.direction;\n levelChange.difference = json.difference;\n levelChange.type = json.type;\n return levelChange;\n }\n}\n\nexport default LevelChange;\n","import { Coordinates } from '@wemap/geo';\n\nimport LevelChange from './LevelChange.js';\n\nclass Step {\n\n /** @type {!boolean} */\n firstStep = false;\n\n /** @type {!boolean} */\n lastStep = false;\n\n /** @type {!number} */\n number;\n\n /** @type {!Coordinates} */\n coords = [];\n\n\n /** @type {!number} */\n angle;\n\n /** @type {!number} */\n previousBearing;\n\n /** @type {!number} */\n nextBearing;\n\n\n /** @type {!number} */\n distance;\n\n /** @type {?number} */\n duration = null;\n\n /** @type {?string} */\n name = null;\n\n\n /** @type {?LevelChange} */\n levelChange = null;\n\n /** @type {?{?subwayEntrance: boolean, ?subwayEntranceRef: string}} */\n extras = {};\n\n /** @type {!number} */\n _idCoordsInLeg = null;\n\n /**\n * @returns {object}\n */\n toJson() {\n const output = {\n number: this.number,\n coords: this.coords.toCompressedJson(),\n angle: this.angle,\n previousBearing: this.previousBearing,\n nextBearing: this.nextBearing,\n distance: this.distance,\n _idCoordsInLeg: this._idCoordsInLeg\n };\n if (this.firstStep) {\n output.firstStep = true;\n }\n if (this.lastStep) {\n output.lastStep = true;\n }\n if (this.duration !== null) {\n output.duration = this.duration;\n }\n if (this.name !== null) {\n output.name = this.name;\n }\n if (this.levelChange !== null) {\n output.levelChange = this.levelChange.toJson();\n }\n if (this.extras && Object.keys(this.extras).length !== 0) {\n output.extras = this.extras;\n }\n return output;\n }\n\n /**\n * @param {object} json\n * @returns {Step}\n */\n static fromJson(json) {\n const step = new Step();\n step.number = json.number;\n step.coords = Coordinates.fromCompressedJson(json.coords);\n step.angle = json.angle;\n step.previousBearing = json.previousBearing;\n step.nextBearing = json.nextBearing;\n step.distance = json.distance;\n step._idCoordsInLeg = json._idCoordsInLeg;\n if (json.firstStep) {\n step.firstStep = json.firstStep;\n }\n if (json.lastStep) {\n step.lastStep = json.lastStep;\n }\n if (json.duration) {\n step.duration = json.duration;\n }\n if (json.name) {\n step.name = json.name;\n }\n if (json.levelChange) {\n step.levelChange = LevelChange.fromJson(json.levelChange);\n }\n if (json.extras) {\n step.extras = json.extras;\n }\n return step;\n }\n}\n\nexport default Step;\n","import { Coordinates, Network } from '@wemap/geo';\n\nimport Step from './Step.js';\n\nclass Leg {\n\n /** @type {!string} can be WALK, BIKE, BUS, TRAM, CAR, FUNICULAR */\n mode;\n\n /** @type {!number} */\n distance;\n\n /** @type {!number} */\n duration;\n\n /** @type {?number} */\n startTime = null;\n\n /** @type {?number} */\n endTime = null;\n\n /** @type {!{name: ?string, coords: !Coordinates}} */\n from;\n\n /** @type {!{name: ?string, coords: !Coordinates}} */\n to;\n\n /** @type {!Coordinates[]} */\n coords;\n\n /** @type {?{name: !string, routeColor: ?string, routeTextColor: ?string, directionName: ?string}} */\n transportInfo = null;\n\n /** @type {?(Step[])} */\n steps = null;\n\n /**\n * @returns {Network}\n */\n toNetwork() {\n return Network.fromCoordinates([this.coords]);\n }\n\n /**\n * @returns {object}\n */\n toJson() {\n const output = {\n mode: this.mode,\n from: { coords: this.from.coords.toCompressedJson() },\n to: { coords: this.to.coords.toCompressedJson() },\n distance: this.distance,\n duration: this.duration,\n coords: this.coords.map(coords => coords.toCompressedJson())\n };\n if (this.from.name) {\n output.from.name = this.from.name;\n }\n if (this.to.name) {\n output.to.name = this.to.name;\n }\n if (this.startTime !== null) {\n output.startTime = this.startTime;\n }\n if (this.endTime !== null) {\n output.endTime = this.endTime;\n }\n if (this.transportInfo !== null) {\n output.transportInfo = this.transportInfo;\n }\n if (this.steps !== null && this.steps.length > 0) {\n output.steps = this.steps.map(step => step.toJson());\n }\n return output;\n }\n\n\n /**\n * @param {object} json\n * @returns {Leg}\n */\n static fromJson(json) {\n const leg = new Leg();\n leg.mode = json.mode;\n leg.from = { coords: Coordinates.fromCompressedJson(json.from.coords) };\n leg.to = { coords: Coordinates.fromCompressedJson(json.to.coords) };\n leg.distance = json.distance;\n leg.duration = json.duration;\n leg.coords = json.coords.map(Coordinates.fromCompressedJson);\n if (json.from.name) {\n leg.from.name = json.from.name;\n }\n if (json.to.name) {\n leg.to.name = json.to.name;\n }\n if (json.startTime) {\n leg.startTime = json.startTime;\n }\n if (json.endTime) {\n leg.endTime = json.endTime;\n }\n if (json.transportInfo) {\n leg.transportInfo = json.transportInfo;\n }\n if (json.steps) {\n leg.steps = json.steps.map(Step.fromJson);\n }\n return leg;\n }\n\n}\n\nexport default Leg;\n","/* eslint-disable max-statements */\nimport { Coordinates, Network } from '@wemap/geo';\nimport Leg from './Leg.js';\nimport Step from './Step.js';\n\n/**\n * Main attributes are:\n * nodes: the ordered list of Node\n * edges: the ordered list of Edge\n * start: the start point (Coordinates)\n * end: the end point (Coordinates)\n * length: the route length\n */\nclass Itinerary {\n\n /** @type {!Coordinates} */\n from;\n\n /** @type {!Coordinates} */\n to;\n\n /** @type {!number} */\n distance;\n\n /** @type {!number} */\n duration;\n\n /** @type {?number} */\n startTime = null;\n\n /** @type {?number} */\n endTime = null;\n\n /** @type {!(Leg[])} */\n legs = [];\n\n /** @type {?Coordinates[]} */\n _coords = null;\n\n set coords(_) {\n throw new Error('Itinerary.coords cannot be set. They are calculated from Itinerary.legs.');\n }\n\n /** @type {!(Coordinates[])} */\n get coords() {\n if (!this._coords) {\n // Returns the coordinates contained in all legs and remove duplicates between array\n this._coords = this.legs.reduce((acc, val) => {\n const isDuplicate = acc.length && val.coords.length && acc[acc.length - 1].equalsTo(val.coords[0]);\n acc.push(...val.coords.slice(isDuplicate ? 1 : 0));\n return acc;\n }, []);\n }\n return this._coords;\n }\n\n set steps(_) {\n throw new Error('Itinerary.step cannot be set. They are calculated from Itinerary.legs.');\n }\n\n /** @type {!(Step[])} */\n get steps() {\n return this.legs.map(leg => leg.steps).flat();\n }\n\n /**\n * @returns {Network}\n */\n toNetwork() {\n return Network.fromCoordinates([this.coords]);\n }\n\n /**\n * @param {Itinerary[]} itineraries\n * @returns {Itinerary}\n */\n static fromItineraries(...itineraries) {\n const itinerary = new Itinerary();\n itinerary.from = itineraries[0].from;\n itinerary.to = itineraries[itineraries.length - 1].to;\n itinerary.distance = 0;\n itinerary.duration = 0;\n itinerary.legs = [];\n\n itineraries.forEach(_itinerary => {\n itinerary.distance += _itinerary.distance;\n itinerary.duration += _itinerary.duration;\n itinerary.legs.push(..._itinerary.legs);\n itinerary.legs.forEach(leg => {\n leg.steps[0].firstStep = false;\n leg.steps[leg.steps.length - 1].lastStep = false;\n });\n });\n\n itinerary.legs[0].steps[0].firstStep = true;\n const lastLeg = itinerary.legs[itinerary.legs.length - 1];\n lastLeg.steps[lastLeg.steps.length - 1].lastStep = true;\n\n return itinerary;\n }\n\n /**\n * Convert lat/lng/level points to Itinerary\n * @param {number[][]} points 2D points array of lat/lng/level (level is optional)\n * @param {Coordinates} from\n * @param {Coordinates} to\n * @param {string} mode\n * @returns {Itinerary}\n */\n static fromOrderedPointsArray(points, start, end) {\n\n const pointToCoordinates = point => new Coordinates(point[0], point[1], null, point[2]);\n\n return this.fromOrderedCoordinates(\n points.map(pointToCoordinates),\n pointToCoordinates(start),\n pointToCoordinates(end)\n );\n }\n\n /**\n * Convert ordered Coordinates to Itinerary\n * @param {Coordinates[]} points\n * @param {Coordinates} from\n * @param {Coordinates} to\n * @param {string} mode\n * @returns {Itinerary}\n */\n static fromOrderedCoordinates(points, from, to, mode = 'WALK') {\n\n const itinerary = new Itinerary();\n itinerary.from = from;\n itinerary.to = to;\n\n const leg = new Leg();\n leg.mode = mode;\n leg.from = from;\n leg.to = to;\n\n leg.coords = points;\n leg.distance = points.reduce((acc, coords, idx, arr) => {\n if (idx !== 0) {\n return acc + arr[idx - 1].distanceTo(coords);\n }\n return acc;\n }, 0);\n leg.duration = leg.distance;\n itinerary.legs.push(leg);\n\n itinerary.distance = leg.distance;\n itinerary.duration = leg.duration;\n\n return itinerary;\n }\n\n /**\n * @returns {object}\n */\n toJson() {\n const output = {\n from: this.from.toCompressedJson(),\n to: this.to.toCompressedJson(),\n distance: this.distance,\n duration: this.duration,\n legs: this.legs.map(leg => leg.toJson())\n };\n if (this.startTime !== null) {\n output.startTime = this.startTime;\n }\n if (this.endTime !== null) {\n output.endTime = this.endTime;\n }\n return output;\n }\n\n /**\n * @param {object} json\n * @returns {Itinerary}\n */\n static fromJson(json) {\n const itinerary = new Itinerary();\n itinerary.from = Coordinates.fromCompressedJson(json.from);\n itinerary.to = Coordinates.fromCompressedJson(json.to);\n itinerary.distance = json.distance;\n itinerary.duration = json.duration;\n itinerary.legs = json.legs.map(Leg.fromJson);\n if (json.startTime) {\n itinerary.startTime = json.startTime;\n }\n if (json.endTime) {\n itinerary.endTime = json.endTime;\n }\n return itinerary;\n }\n}\nexport default Itinerary;\n","/* eslint-disable complexity */\n/* eslint-disable max-statements */\nimport { Coordinates, GraphItinerary } from '@wemap/geo';\nimport { diffAngle, deg2rad } from '@wemap/maths';\n\nimport OsmElement from '../../model/OsmElement.js';\nimport Step from '../Step.js';\nimport LevelChange from '../LevelChange.js';\n\nconst SKIP_STEP_ANGLE_MAX = deg2rad(20);\n\nclass StepsGeneration {\n\n /**\n * @param {GraphItinerary<OsmElement>} itinerary\n * @returns {Step[]}\n */\n static fromGraphItinerary(itinerary) {\n\n const steps = [];\n\n const { start, end, nodes, edges } = itinerary;\n\n let currentStep, previousStep;\n let previousBearing = start.bearingTo(nodes[0].coords);\n\n for (let i = 0; i < nodes.length - 1; i++) {\n\n const isFirstStep = !currentStep;\n\n const node = nodes[i];\n const nextNode = nodes[i + 1];\n const edge = edges[i];\n\n const bearing = edge.bearing;\n const angle = diffAngle(previousBearing, bearing + Math.PI);\n\n let splitByAngle = Math.abs(diffAngle(Math.PI, angle)) >= SKIP_STEP_ANGLE_MAX;\n\n const splitByLevel = edge.level && edge.level.isRange\n && node.coords.level && !node.coords.level.isRange;\n splitByAngle = splitByAngle && !(node.coords.level && node.coords.level.isRange);\n\n const splitStepCondition = splitByAngle || splitByLevel;\n\n const isSubwayEntrance = node ? node.builtFrom.tags.railway === 'subway_entrance' : false;\n\n // New step creation\n if (isFirstStep || splitStepCondition || isSubwayEntrance) {\n\n previousStep = currentStep;\n\n currentStep = new Step();\n currentStep.coords = node.coords;\n currentStep.number = steps.length + 1;\n currentStep.angle = angle;\n currentStep.previousBearing = previousBearing;\n currentStep.nextBearing = bearing;\n currentStep.name = edge.builtFrom.tags.name || null;\n currentStep.distance = 0;\n currentStep.duration = 0;\n\n if (isSubwayEntrance) {\n currentStep.extras.subwayEntrance = true;\n currentStep.name = node.builtFrom.tags.name;\n if (node.builtFrom.tags.ref) {\n currentStep.extras.subwayEntranceRef = node.builtFrom.tags.ref;\n }\n }\n\n if (splitByLevel) {\n currentStep.levelChange = LevelChange.fromTwoNodes(node, nextNode);\n }\n\n steps.push(currentStep);\n\n if (!previousStep) {\n currentStep.firstStep = true;\n }\n }\n\n currentStep.distance += edge.length;\n currentStep.duration += itinerary.edgesWeights[i];\n previousBearing = bearing;\n }\n\n const lastNode = nodes[nodes.length - 1];\n const lastStep = new Step();\n lastStep.coords = lastNode.coords;\n lastStep.number = steps.length + 1;\n lastStep.previousBearing = previousBearing;\n lastStep.distance = lastNode.coords.distanceTo(end);\n if (!Coordinates.equalsTo(lastNode.coords, end)) {\n lastStep.nextBearing = lastNode.coords.bearingTo(end);\n lastStep.angle = diffAngle(lastStep.previousBearing, lastStep.nextBearing + Math.PI);\n }\n lastStep.lastStep = true;\n steps.push(lastStep);\n\n return steps;\n }\n\n}\nexport default StepsGeneration;\n","import { GraphItinerary } from '@wemap/geo';\n\nimport OsmElement from '../../model/OsmElement.js';\nimport Itinerary from '../Itinerary.js';\nimport Leg from '../Leg.js';\nimport StepsGeneration from './StepsGeneration.js';\n\n/**\n * @param {GraphItinerary<OsmElement>} graphItinerary\n * @param {string} mode\n * @returns {Leg}\n */\nexport function createLegFromGraphItinerary(graphItinerary, mode = 'WALK') {\n\n const leg = new Leg();\n\n leg.from = { coords: graphItinerary.start };\n leg.to = { coords: graphItinerary.end };\n leg.coords = graphItinerary.nodes.map(node => node.coords);\n leg.distance = graphItinerary.edges.reduce((acc, edge) => acc + edge.length, 0);\n leg.duration = graphItinerary.edgesWeights.reduce((acc, weight) => acc + weight, 0);\n leg.mode = mode;\n leg.steps = StepsGeneration.fromGraphItinerary(graphItinerary);\n\n return leg;\n}\n\n/**\n * @param {GraphItinerary<OsmElement>} graphItinerary\n * @param {string} mode\n * @returns {Itinerary}\n */\nexport function createItineraryFromGraphItinerary(graphItinerary, mode = 'WALK') {\n\n const leg = createLegFromGraphItinerary(graphItinerary, mode);\n\n const itinerary = new Itinerary();\n\n itinerary.from = graphItinerary.start;\n itinerary.to = graphItinerary.end;\n itinerary.distance = leg.distance;\n itinerary.duration = leg.duration;\n itinerary.legs.push(leg);\n\n return itinerary;\n}\n","import { Level, GraphEdge, GraphNode, Network } from '@wemap/geo';\n\nimport OsmElement from '../../model/OsmElement.js';\nimport OsmModel from '../../model/OsmModel.js';\nimport OsmNode from '../../model/OsmNode.js';\nimport OsmWay from '../../model/OsmWay.js';\n\n\nexport const HIGHWAYS_PEDESTRIANS = ['footway', 'steps', 'pedestrian', 'living_street', 'path', 'track', 'sidewalk'];\n\nexport const DEFAULT_WAY_SELECTOR = way => {\n return HIGHWAYS_PEDESTRIANS.includes(way.tags.highway)\n || way.tags.footway === 'sidewalk'\n || way.tags.public_transport === 'platform'\n || way.tags.railway === 'platform';\n};\n\n/**\n * @param {Network<OsmElement>} network\n * @param {string} name\n */\nexport function getNodeByName(network, name) {\n return network.nodes.find(({ builtFrom }) => builtFrom.tags.name === name);\n}\n\n/**\n * @param {Network<OsmElement>} network\n * @param {string} name\n */\nexport function getEdgeByName(network, name) {\n return network.edges.find(({ builtFrom }) => builtFrom.tags.name === name);\n}\n\n/**\n * @param {GraphEdge<OsmElement>} edge\n * @param {OsmWay} way\n * @returns {boolean}\n */\nfunction manageOneWay(edge, way) {\n\n const { highway, oneway, conveying } = way.tags;\n\n edge.isOneway = Boolean((oneway === 'yes' || oneway === 'true' || oneway === '1')\n || (conveying && highway && ['yes', 'forward', 'backward'].includes(conveying)));\n\n if (edge.isOneway && conveying === 'backward') {\n const tmpNode = edge.node1;\n edge.node1 = edge.node2;\n edge.node2 = tmpNode;\n }\n}\n\n/**\n * @param {Network} networkModel\n * @param {GraphNode} node\n */\nfunction createNodesAndEdgesFromElevator(networkModel, node) {\n\n /** @type {GraphNode[]} */\n const createdNodes = [];\n const getOrCreateLevelNode = (level, builtFrom) => {\n let levelNode = createdNodes.find(({ coords }) => Level.equalsTo(level, coords.level));\n if (!levelNode) {\n levelNode = new GraphNode(node.coords.clone(), builtFrom);\n levelNode.coords.level = level;\n createdNodes.push(levelNode);\n networkModel.nodes.push(levelNode);\n }\n return levelNode;\n };\n\n // Create nodes from node.edges\n node.edges.forEach(edge => {\n if (edge.level.isRange) {\n throw new Error('Cannot handle this elevator edge due to ambiguity');\n }\n\n const levelNode = getOrCreateLevelNode(edge.level, node.builtFrom);\n if (edge.node1 === node) {\n edge.node1 = levelNode;\n } else {\n edge.node2 = levelNode;\n }\n levelNode.edges.push(edge);\n });\n\n // Create edges from createdNodes\n for (let i = 0; i < createdNodes.length; i++) {\n for (let j = i + 1; j < createdNodes.length; j++) {\n\n const createdNode1 = createdNodes[i];\n const createdNode2 = createdNodes[j];\n\n const newEdge = new GraphEdge(\n createdNode1,\n createdNode2,\n new Level(createdNode1.coords.level.val, createdNode2.coords.level.val),\n node.builtFrom\n );\n networkModel.edges.push(newEdge);\n }\n }\n\n // Remove the historical elevator node from the network\n networkModel.nodes = networkModel.nodes.filter(_node => _node !== node);\n}\n\n\n/**\n * @param {OsmModel} osmModel\n * @param {function} _waySelectionFilter\n * @returns {Network<OsmElement>}\n */\nexport function createNetworkFromOsmModel(\n osmModel,\n waySelectionFilter = DEFAULT_WAY_SELECTOR\n) {\n\n const networkModel = new Network();\n\n const nodesCreated = {};\n const elevatorNodes = [];\n\n /**\n * @param {OsmNode} osmNode\n */\n const getOrCreateNode = osmNode => {\n let node = nodesCreated[osmNode.id];\n if (!node) {\n node = new GraphNode(osmNode.coords, osmNode);\n nodesCreated[osmNode.id] = node;\n networkModel.nodes.push(node);\n\n if (osmNode.tags.highway === 'elevator') {\n elevatorNodes.push(node);\n }\n }\n return node;\n };\n\n osmModel.ways.forEach(way => {\n if (!waySelectionFilter(way)) {\n return;\n }\n\n let firstNode = getOrCreateNode(way.nodes[0]);\n for (let i = 1; i < way.nodes.length; i++) {\n const secondNode = getOrCreateNode(way.nodes[i]);\n\n const edge = new GraphEdge(firstNode, secondNode, way.level, way);\n manageOneWay(edge, way);\n networkModel.edges.push(edge);\n firstNode = secondNode;\n }\n\n });\n\n elevatorNodes.forEach(node => {\n // We have to clone this node for each connected edge\n createNodesAndEdgesFromElevator(networkModel, node);\n });\n\n GraphNode.generateNodesLevels(networkModel.nodes);\n\n return networkModel;\n}\n\n\n// /**\n// * @param {GraphNode} node\n// * @param {object} tags\n// */\n// static _applyNodePropertiesFromTags(node, tags) {\n// node.name = tags.name || null;\n// node.subwayEntrance = tags.railway === 'subway_entrance';\n// if (node.subwayEntrance && tags.ref) {\n// node.subwayEntranceRef = tags.ref;\n// }\n// }\n\n// /**\n// * @param {GraphEdge} edge\n// * @param {object} tags\n// */\n// static _applyEdgePropertiesFromTags(edge, tags) {\n// const { highway, oneway, conveying, name } = tags;\n// edge.name = name || null;\n// edge.isStairs = highway === 'steps';\n// edge.isConveying = 'conveying' in tags;\n// edge.isOneway = Boolean((oneway === 'yes' || oneway === 'true' || oneway === '1')\n// || (conveying && highway && ['yes', 'forward', 'backward'].includes(conveying)));\n\n// if (conveying === 'backward') {\n// const tmpNode = edge.node1;\n// edge.node1 = edge.node2;\n// edge.node2 = tmpNode;\n// }\n\n// }\n","import { Coordinates } from '@wemap/geo';\n\nimport Itinerary from './Itinerary.js';\nclass RouterResponse {\n\n /** @type {!string} */\n routerName;\n\n /** @type {!Coordinates} */\n from;\n\n /** @type {!Coordinates} */\n to;\n\n /** @type {!(Itinerary[])} */\n itineraries = [];\n}\n\nexport default RouterResponse;\n","import { diffAngle } from '@wemap/maths';\n\nimport Itinerary from './Itinerary.js';\n\n/**\n * @param {Itinerary} itinerary\n */\nexport function generateStepsMetadata(itinerary) {\n\n let counter = 1;\n\n itinerary.legs.forEach((leg, legId) => {\n leg.steps.forEach((step, stepId) => {\n\n if (counter === 1) {\n step.firstStep = true;\n }\n if (legId === itinerary.legs.length - 1\n && stepId === leg.steps.length - 1) {\n step.lastStep = true;\n }\n\n step.number = counter++;\n\n\n /*\n * Generate previousBearing, nextBearing and angle\n */\n\n let coordsBeforeStep;\n if (step._idCoordsInLeg > 0) {\n coordsBeforeStep = leg.coords[step._idCoordsInLeg - 1];\n } else if (legId === 0) {\n coordsBeforeStep = itinerary.from;\n } else {\n coordsBeforeStep = itinerary.legs[legId - 1].to.coords;\n }\n\n let coordsAfterStep;\n if (step._idCoordsInLeg !== leg.coords.length - 1) {\n coordsAfterStep = leg.coords[step._idCoordsInLeg + 1];\n } else if (legId === itinerary.legs.length - 1) {\n coordsAfterStep = itinerary.to;\n } else {\n coordsAfterStep = itinerary.legs[legId + 1].from.coords;\n }\n\n step.previousBearing = coordsBeforeStep.bearingTo(step.coords);\n step.nextBearing = step.coords.bearingTo(coordsAfterStep);\n step.angle = diffAngle(step.previousBearing, step.nextBearing + Math.PI);\n\n });\n });\n}\n","/* eslint-disable max-statements */\n\nimport { Level, Coordinates } from '@wemap/geo';\nimport { rad2deg, positiveMod } from '@wemap/maths';\n\nimport Itinerary from '../Itinerary.js';\nimport Leg from '../Leg.js';\nimport LevelChange from '../LevelChange.js';\nimport RouterResponse from '../RouterResponse.js';\nimport Step from '../Step.js';\nimport { generateStepsMetadata } from '../Utils.js';\n\n/**\n * @param {Coordinates} coordinates\n * @returns {object}\n */\nexport function coordinatesToJson(coordinates) {\n const output = [coordinates.lng, coordinates.lat];\n if (coordinates.level) {\n output.push(coordinates.level.toString());\n }\n return output;\n}\n\n/**\n * @param {object} json\n * @returns {Coordinates}\n */\nexport function jsonToCoordinates(json) {\n const output = new Coordinates(json[1], json[0]);\n if (json.length > 2) {\n output.level = Level.fromString(json[2]);\n }\n return output;\n}\n\nexport function nodesToJsonCoords(nodes) {\n return nodes.map(node => coordinatesToJson(node.coords));\n}\n\n\nexport function getModifierFromAngle(_angle) {\n\n const angle = positiveMod(rad2deg(_angle), 360);\n\n if (angle > 0 && angle < 60) {\n return 'sharp right';\n }\n if (angle >= 60 && angle < 140) {\n return 'right';\n }\n if (angle >= 140 && angle < 160) {\n return 'slight right';\n }\n if (angle >= 160 && angle <= 200) {\n return 'straight';\n }\n if (angle > 200 && angle <= 220) {\n return 'slight left';\n }\n if (angle > 220 && angle <= 300) {\n return 'left';\n }\n if (angle > 300 && angle < 360) {\n return 'sharp left';\n }\n return 'u turn';\n}\n\n\nexport function noRouteFoundJson(message) {\n return {\n 'code': 'NoRoute',\n message\n };\n}\n\n/**\n * @param {Itinerary} itinerary\n * @returns {object}\n */\nexport function itineraryToOsrmJson(itinerary) {\n\n const lastLegId = itinerary.legs.length - 1;\n\n const jsonLegs = itinerary.legs.map(({ distance, duration, coords, steps }, idLeg) => {\n\n const lastStepId = steps.length - 1;\n\n return {\n distance,\n duration,\n steps: steps.map((step, idStep, arr) => {\n\n let type = idStep === 0 && idLeg === 0 ? 'depart' : 'turn';\n type = idStep === lastStepId && idLeg === lastLegId ? 'arrive' : type;\n\n const stepCoordsIdx = coords.findIndex(p => p.equalsTo(step.coords));\n const nextStepCoordsIdx = idStep === lastStepId\n ? stepCoordsIdx\n : coords.findIndex(p => p.equalsTo(arr[idStep + 1].coords));\n\n const jsonStep = {\n geometry: {\n type: 'LineString',\n coordinates: coords.slice(stepCoordsIdx, nextStepCoordsIdx + 1).map(coordinatesToJson)\n },\n distance: step.distance,\n duration: step.duration,\n name: step.name,\n maneuver: {\n bearing_before: rad2deg(step.previousBearing),\n bearing_after: rad2deg(step.nextBearing),\n location: coordinatesToJson(step.coords),\n modifier: getModifierFromAngle(step.angle),\n type\n }\n };\n if (step.levelChange !== null) {\n jsonStep.levelChange = step.levelChange.toJson();\n }\n if (typeof step.extras === 'object' && Object.keys(step.extras).length !== 0) {\n jsonStep.extras = step.extras;\n }\n\n return jsonStep;\n })\n };\n });\n\n return {\n 'code': 'Ok',\n 'routes': [\n {\n 'geometry': {\n 'type': 'LineString',\n 'coordinates': itinerary.coords.map(coordinatesToJson)\n },\n 'legs': jsonLegs,\n 'distance': itinerary.distance,\n 'duration': itinerary.duration,\n 'weight_name': 'routability',\n 'weight': 0\n }\n ],\n 'waypoints': []\n };\n}\n\n\n/**\n * @param {object} jsonSteps\n * @param {Coordinates[]} legCoords\n * @returns {Step[]}\n */\nfunction parseJsonSteps(jsonSteps, legCoords) {\n\n if (!jsonSteps) {\n return [];\n }\n\n return jsonSteps.map(jsonStep => {\n\n const step = new Step();\n step.coords = jsonToCoordinates(jsonStep.maneuver.location);\n\n // Sometimes, OSRM step does not have the same coordinates than a point in legCoords.\n // ex: first step of https://routing.getwemap.com/route/v1/walking/2.33222164147,48.87084765712;2.3320734,48.8730212?geometries=geojson&overview=full&steps=true\n // That is why we look for the closest point.\n const distances = legCoords.map(coords => coords.distanceTo(step.coords));\n const idStepCoordsInLeg = distances.indexOf(Math.min(...distances));\n if (idStepCoordsInLeg < 0) {\n throw new Error('Osrm Parser: Cannot find step coords in leg coordinates');\n }\n step._idCoordsInLeg = idStepCoordsInLeg;\n\n step.name = jsonStep.name;\n step.levelChange = jsonStep.levelChange ? LevelChange.fromJson(jsonStep.levelChange) : null;\n\n step.distance = jsonStep.distance;\n step.duration = jsonStep.duration;\n\n if (jsonStep.extras && jsonStep.extras.subwayEntrance) {\n step.extras.subwayEntrance = true;\n if (jsonStep.extras.subwayEntranceRef) {\n step.extras.subwayEntranceRef = jsonStep.extras.subwayEntranceRef;\n }\n }\n\n return step;\n });\n}\n\n\n/**\n * Generate multi itineraries from OSRM JSON\n * @param {object} json JSON file provided by OSRM.\n * @param {Coordinates} from itinerary start\n * @param {Coordinates} to itinerary end\n * @param {?string} routingMode [walking|driving|bicycle]\n * @returns {?RouterResponse}\n */\nexport function createRouterResponseFromJson(json, from, to, routingMode = 'walking') {\n\n const { routes: jsonRoutes } = json;\n\n if (!jsonRoutes) {\n return null;\n }\n\n const routingModeCorrespondance = new Map();\n routingModeCorrespondance.set('walking', 'WALK');\n routingModeCorrespondance.set('driving', 'CAR');\n routingModeCorrespondance.set('bicycle', 'BIKE');\n const mode = routingModeCorrespondance.get(routingMode) || null;\n\n const routerResponse = new RouterResponse();\n routerResponse.routerName = 'osrm';\n\n routerResponse.from = from;\n routerResponse.to = to;\n\n for (const jsonItinerary of jsonRoutes) {\n\n const itinerary = new Itinerary();\n\n // itinerary.coords = jsonItinerary.geometry.coordinates.map(jsonToCoordinates);\n itinerary.distance = jsonItinerary.distance;\n itinerary.duration = jsonItinerary.duration;\n itinerary.from = from;\n itinerary.to = to;\n\n routerResponse.itineraries.push(itinerary);\n\n for (const jsonLeg of jsonItinerary.legs) {\n\n const leg = new Leg();\n\n leg.mode = mode;\n leg.distance = jsonLeg.distance;\n leg.duration = jsonLeg.duration;\n\n leg.coords = jsonLeg.steps\n .map(step => step.geometry.coordinates.map(jsonToCoordinates))\n .flat()\n // Remove duplicates\n .filter((coords, idx, arr) => idx === 0 || !arr[idx - 1].equalsTo(coords));\n\n leg.from = {\n name: null,\n coords: leg.coords[0]\n };\n leg.to = {\n name: null,\n coords: leg.coords[leg.coords.length - 1]\n };\n\n leg.steps = parseJsonSteps(jsonLeg.steps, leg.coords);\n\n itinerary.legs.push(leg);\n }\n\n // All legs have to be parsed before computing steps metadata\n generateStepsMetadata(itinerary);\n\n }\n\n return routerResponse;\n}\n","/* eslint-disable max-statements */\nimport Polyline from '@mapbox/polyline';\n\nimport { Coordinates } from '@wemap/geo';\n\nimport Itinerary from '../Itinerary.js';\nimport Leg from '../Leg.js';\nimport RouterResponse from '../RouterResponse.js';\nimport Step from '../Step.js';\nimport { generateStepsMetadata } from '../Utils.js';\n\n/**\n * @param {object} json\n * @returns {Coordinates}\n */\nexport function jsonToCoordinates(json) {\n return new Coordinates(json.lat, json.lon);\n}\n\n/**\n * @param {object} jsonSteps\n * @param {Coordinates[]} legCoords\n * @returns {Step[]}\n */\nfunction parseJsonSteps(jsonSteps, legCoords) {\n\n if (!jsonSteps) {\n return [];\n }\n\n return jsonSteps.map(jsonStep => {\n\n const step = new Step();\n const stepCoords = jsonToCoordinates(jsonStep);\n\n // OTP step does not have the same coordinates than a point in legCoords.\n // That is why we look for the closest point.\n const distances = legCoords.map(coords => coords.distanceTo(stepCoords));\n const idStepCoordsInLeg = distances.indexOf(Math.min(...distances));\n if (idStepCoordsInLeg < 0) {\n throw new Error('OTP Parser: Cannot find closest step');\n }\n step.coords = legCoords[idStepCoordsInLeg];\n step._idCoordsInLeg = idStepCoordsInLeg;\n\n step.name = jsonStep.streetName;\n step.levelChange = null;\n\n step.distance = jsonStep.distance;\n\n return step;\n });\n}\n\n/**\n * Generate multi itineraries from OTP JSON\n * @param {object} json JSON file provided by OTP.\n * @returns {?RouterResponse}\n */\nexport function createRouterResponseFromJson(json) {\n\n const { plan: jsonPlan } = json;\n\n if (!jsonPlan) {\n return null;\n }\n\n const routerResponse = new RouterResponse();\n routerResponse.routerName = 'otp';\n\n routerResponse.from = jsonToCoordinates(jsonPlan.from);\n routerResponse.to = jsonToCoordinates(jsonPlan.to);\n\n for (const jsonItinerary of jsonPlan.itineraries) {\n\n const itinerary = new Itinerary();\n\n itinerary.duration = jsonItinerary.duration;\n itinerary.startTime = jsonItinerary.startTime;\n itinerary.endTime = jsonItinerary.endTime;\n itinerary.from = routerResponse.from;\n itinerary.to = routerResponse.to;\n\n routerResponse.itineraries.push(itinerary);\n\n for (const jsonLeg of jsonItinerary.legs) {\n\n const leg = new Leg();\n\n leg.mode = jsonLeg.mode;\n leg.duration = jsonLeg.duration;\n leg.startTime = jsonLeg.startTime;\n leg.endTime = jsonLeg.endTime;\n leg.from = {\n name: jsonLeg.from.name,\n coords: jsonToCoordinates(jsonLeg.from)\n };\n leg.to = {\n name: jsonLeg.to.name,\n coords: jsonToCoordinates(jsonLeg.to)\n };\n leg.coords = Polyline.decode(jsonLeg.legGeometry.points).map(([lat, lon]) => new Coordinates(lat, lon));\n\n leg.steps = parseJsonSteps(jsonLeg.steps, leg.coords);\n\n if (leg.mode === 'BUS' || leg.mode === 'TRAM') {\n leg.transportInfo = {\n name: jsonLeg.route,\n routeColor: jsonLeg.routeColor,\n routeTextColor: jsonLeg.routeTextColor,\n directionName: jsonLeg.headsign\n };\n\n const legStep = new Step();\n legStep.coords = leg.coords[0];\n legStep._idCoordsInLeg = 0;\n legStep.name = jsonLeg.headsign;\n legStep.levelChange = null;\n legStep.distance = jsonLeg.distance;\n leg.steps = [legStep];\n }\n\n // jsonLeg.distance is not reliable when compared to the array of leg coords.\n // leg.distance = jsonLeg.distance;\n leg.distance = leg.coords.reduce((acc, coords, idx, arr) => {\n if (idx === 0) {\n return acc;\n }\n return acc + arr[idx - 1].distanceTo(coords);\n }, 0);\n\n itinerary.legs.push(leg);\n\n }\n\n itinerary.distance = itinerary.coords.reduce((acc, coords, idx, arr) => {\n if (idx === 0) {\n return acc;\n }\n return acc + arr[idx - 1].distanceTo(coords);\n }, 0);\n\n // All legs have to be parsed before computing steps metadata\n generateStepsMetadata(itinerary);\n }\n\n return routerResponse;\n}\n\n\n","/* eslint-disable max-depth */\n/* eslint-disable max-statements */\nimport { Coordinates } from '@wemap/geo';\n\nimport Itinerary from '../Itinerary.js';\nimport Leg from '../Leg.js';\nimport RouterResponse from '../RouterResponse.js';\nimport Step from '../Step.js';\nimport { generateStepsMetadata } from '../Utils.js';\n\n/**\n * @param {object} json\n * @returns {Coordinates}\n */\nexport function jsonToCoordinates(json) {\n return new Coordinates(json.Lat, json.Long);\n}\n\n/**\n * @param {string} jsonDate\n * @returns {number}\n */\nfunction jsonDateToTimestamp(jsonDate) {\n const [dateStr, timeStr] = jsonDate.split(' ');\n const [dayStr, monthStr, yearStr] = dateStr.split('/');\n const [hoursStr, minutesStr, secondsStr] = timeStr.split(':');\n const date = new Date(\n Number(yearStr), Number(monthStr) - 1, Number(dayStr),\n Number(hoursStr), Number(minutesStr), Number(secondsStr)\n );\n return date.getTime();\n}\n\n/**\n * @param {string} wktGeometry\n * @returns {Coordinates[]}\n */\nfunction parseWKTGeometry(wktGeometry) {\n const tmpCoordsStr = wktGeometry.match(/LINESTRING \\((.*)\\)/i);\n if (!tmpCoordsStr) {\n return null;\n }\n return tmpCoordsStr[1].split(',').map(str => {\n const sp = str.trim().split(' ');\n return new Coordinates(Number(sp[1]), Number(sp[0]));\n });\n}\n\n/**\n * @param {string} iso8601Duration\n * @see https://stackoverflow.com/a/29153059/2239938\n */\nfunction parseDuration(iso8601Duration) {\n const iso8601DurationRegex = /(-)?P(?:([.,\\d]+)Y)?(?:([.,\\d]+)M)?(?:([.,\\d]+)W)?(?:([.,\\d]+)D)?T(?:([.,\\d]+)H)?(?:([.,\\d]+)M)?(?:([.,\\d]+)S)?/;\n\n var matches = iso8601Duration.match(iso8601DurationRegex);\n\n // const sign = typeof matches[1] === 'undefined' ? '+' : '-',\n const years = typeof matches[2] === 'undefined' ? 0 : Number(matches[2]);\n const months = typeof matches[3] === 'undefined' ? 0 : Number(matches[3]);\n const weeks = typeof matches[4] === 'undefined' ? 0 : Number(matches[4]);\n const days = typeof matches[5] === 'undefined' ? 0 : Number(matches[5]);\n const hours = typeof matches[6] === 'undefined' ? 0 : Number(matches[6]);\n const minutes = typeof matches[7] === 'undefined' ? 0 : Number(matches[7]);\n const seconds = typeof matches[8] === 'undefined' ? 0 : Number(matches[8]);\n\n return seconds\n + minutes * 60\n + hours * 3600\n + days * 86400\n + weeks * (86400 * 7)\n + months * (86400 * 30)\n + years * (86400 * 365.25);\n}\n\n/**\n * Generate multi itineraries from Cityway JSON\n * @param {object} json JSON file provided by Cityway.\n * @returns {?RouterResponse}\n * @example https://preprod.api.lia2.cityway.fr/journeyplanner/api/opt/PlanTrips/json?DepartureLatitude=49.51509388236216&DepartureLongitude=0.09341749619366316&ArrivalLatitude=49.5067090188444&ArrivalLongitude=0.1694842115417831&DepartureType=COORDINATES&ArrivalType=COORDINATES\n */\nexport function createRouterResponseFromJson(json) {\n\n if (json.StatusCode !== 200 || !json.Data || !json.Data.length) {\n return null;\n }\n\n const routerResponse = new RouterResponse();\n routerResponse.routerName = 'cityway';\n\n\n // Do not know if it the best approach, but it works...\n const allJsonTrips = json.Data.reduce((acc, dataObj) => {\n acc.push(...dataObj.response.trips.Trip);\n return acc;\n }, []);\n\n for (const trip of allJsonTrips) {\n\n const itinerary = new Itinerary();\n\n itinerary.duration = parseDuration(trip.Duration);\n itinerary.startTime = jsonDateToTimestamp(trip.Departure.Time);\n itinerary.from = jsonToCoordinates(trip.Departure.Site.Position);\n itinerary.endTime = jsonDateToTimestamp(trip.Arrival.Time);\n itinerary.to = jsonToCoordinates(trip.Arrival.Site.Position);\n routerResponse.itineraries.push(itinerary);\n\n for (const jsonSection of trip.sections.Section) {\n\n const jsonLeg = jsonSection.Leg ? jsonSection.Leg : jsonSection.PTRide;\n\n const leg = new Leg();\n\n leg.mode = jsonLeg.TransportMode;\n leg.duration = parseDuration(jsonLeg.Duration);\n leg.startTime = jsonDateToTimestamp(jsonLeg.Departure.Time);\n leg.endTime = jsonDateToTimestamp(jsonLeg.Arrival.Time);\n leg.coords = [];\n\n if (leg.mode === 'WALK' || leg.mode === 'BICYCLE') {\n\n leg.from = {\n name: jsonLeg.Departure.Site.Name,\n coords: jsonToCoordinates(jsonLeg.Departure.Site.Position)\n };\n leg.to = {\n name: jsonLeg.Arrival.Site.Name,\n coords: jsonToCoordinates(jsonLeg.Arrival.Site.Position)\n };\n\n leg.steps = [];\n for (const jsonPathLink of jsonLeg.pathLinks.PathLink) {\n const step = new Step();\n let stepCoords;\n if (jsonPathLink.Geometry) {\n stepCoords = parseWKTGeometry(jsonPathLink.Geometry);\n } else {\n stepCoords = [leg.from.coords, leg.to.coords];\n }\n step.coords = stepCoords[0];\n step._idCoordsInLeg = leg.coords.length;\n stepCoords.forEach((coords, idx) => {\n if (\n idx !== 0\n || leg.coords.length === 0\n || !leg.coords[leg.coords.length - 1].equalsTo(coords)\n ) {\n leg.coords.push(coords);\n }\n });\n\n\n step.name = jsonPathLink.Departure.Site.Name;\n step.levelChange = null;\n\n step.distance = jsonPathLink.Distance;\n\n leg.steps.push(step);\n }\n\n } else if (leg.mode === 'BUS' || leg.mode === 'TRAM' || leg.mode === 'FUNICULAR') {\n\n leg.from = {\n name: jsonLeg.Departure.StopPlace.Name,\n coords: jsonToCoordinates(jsonLeg.Departure.StopPlace.Position)\n };\n leg.to = {\n name: jsonLeg.Arrival.StopPlace.Name,\n coords: jsonToCoordinates(jsonLeg.Arrival.StopPlace.Position)\n };\n\n leg.transportInfo = {\n name: jsonLeg.Line.Number,\n routeColor: jsonLeg.Line.Color,\n routeTextColor: jsonLeg.Line.TextColor,\n directionName: jsonLeg.Destination\n };\n\n for (const jsonStep of jsonLeg.steps.Step) {\n const stepCoords = parseWKTGeometry(jsonStep.Geometry);\n stepCoords.forEach((coords, idx) => {\n if (\n idx !== 0\n || leg.coords.length === 0\n || !leg.coords[leg.coords.length - 1].equalsTo(coords)\n ) {\n leg.coords.push(coords);\n }\n });\n }\n\n const legStep = new Step();\n legStep.coords = leg.coords[0];\n legStep._idCoordsInLeg = 0;\n legStep.name = jsonLeg.Line.Name;\n legStep.levelChange = null;\n legStep.distance = jsonLeg.Distance;\n leg.steps = [legStep];\n }\n\n leg.distance = leg.coords.reduce((acc, coords, idx, arr) => {\n if (idx === 0) {\n return acc;\n }\n return acc + arr[idx - 1].distanceTo(coords);\n }, 0);\n\n itinerary.legs.push(leg);\n\n }\n\n itinerary.distance = itinerary.coords.reduce((acc, coords, idx, arr) => {\n if (idx === 0) {\n return acc;\n }\n return acc + arr[idx - 1].distanceTo(coords);\n }, 0);\n\n // All legs have to be parsed before computing steps metadata\n generateStepsMetadata(itinerary);\n }\n\n routerResponse.from = routerResponse.itineraries[0].from;\n routerResponse.to = routerResponse.itineraries[routerResponse.itineraries.length - 1].to;\n\n return routerResponse;\n}\n\n\n","import { GraphProjection } from '@wemap/geo';\n\nimport Leg from '../Leg.js';\nimport Step from '../Step.js';\n\nclass ItineraryInfo {\n\n /** @type {Step} */\n nextStep;\n\n /** @type {Step} */\n previousStep;\n\n /** @type {GraphProjection} */\n projection;\n\n /** @type {Leg} */\n leg;\n\n /** @type {number} */\n traveledDistance;\n\n /** @type {number} */\n traveledPercentage;\n\n /** @type {number} */\n remainingDistance;\n\n /** @type {number} */\n remainingPercentage;\n\n}\n\nexport default ItineraryInfo;\n","/* eslint-disable max-statements */\nimport { Coordinates, GraphEdge, GraphNode, MapMatching, Network } from '@wemap/geo';\n\nimport Itinerary from '../Itinerary.js';\nimport Leg from '../Leg.js';\nimport Step from '../Step.js';\nimport ItineraryInfo from './ItineraryInfo.js';\n\nclass ItineraryInfoManager {\n\n /** @type {Itinerary} */\n _itinerary;\n\n /** @type {Network} */\n _network;\n\n /** @type {Network} */\n _mapMatching;\n\n /** @type {Step[]} */\n _steps;\n\n /** @type {Step[]} */\n _coordsNextStep;\n\n /** @type {Step[]} */\n _coordsPreviousStep;\n\n /** @type {number[]} */\n _coordsDistanceTraveled;\n\n /** @type {Leg[]} */\n _coordsLeg;\n\n /** @type {Itinerary} */\n set itinerary(itinerary) {\n\n if (itinerary === null) {\n this._itinerary = null;\n return;\n }\n\n this._itinerary = itinerary;\n this._steps = itinerary.steps;\n this._network = itinerary.toNetwork();\n this._mapMatching = new MapMatching(this._network);\n\n this._coordsNextStep = new Array(itinerary.coords.length);\n this._coordsPreviousStep = new Array(itinerary.coords.length);\n this._coordsDistanceTraveled = new Array(itinerary.coords.length);\n this._coordsLeg = new Array(itinerary.coords.length);\n\n let stepId = 0;\n let previousStep = null;\n let nextStep = this._steps[0];\n let distanceTraveled = 0;\n\n itinerary.coords.forEach((coords, idx, arr) => {\n if (stepId < this._steps.length && this._steps[stepId].coords.equalsTo(coords)) {\n previousStep = this._steps[stepId];\n nextStep = stepId === this._steps.length - 1 ? null : this._steps[stepId + 1];\n stepId++;\n }\n if (idx !== 0) {\n distanceTraveled += arr[idx - 1].distanceTo(coords);\n }\n\n this._coordsNextStep[idx] = nextStep;\n this._coordsPreviousStep[idx] = previousStep;\n this._coordsDistanceTraveled[idx] = distanceTraveled;\n this._coordsLeg[idx] = itinerary.legs.find(leg => leg.coords.includes(coords));\n });\n }\n\n /**\n * @param {Coordinates} position\n * @returns {ItineraryInfo}\n */\n getInfo(position) {\n\n if (!this._itinerary) {\n return null;\n }\n\n if (!(position instanceof Coordinates)) {\n return null;\n }\n\n const projection = this._mapMatching.getProjection(position);\n if (!projection) {\n return null;\n }\n\n let itineraryInfo = null;\n\n if (projection.nearestElement instanceof GraphNode) {\n const idx = this._itinerary.coords.findIndex(\n coords => projection.nearestElement.coords === coords\n );\n if (idx === -1) {\n throw new Error('ItineraryInfoManager: could not find projection in itinerary (Node)');\n }\n\n itineraryInfo = new ItineraryInfo();\n itineraryInfo.nextStep = this._coordsNextStep[idx];\n itineraryInfo.previousStep = this._coordsPreviousStep[idx];\n itineraryInfo.projection = projection;\n itineraryInfo.leg = this._coordsLeg[idx];\n itineraryInfo.traveledDistance = this._coordsDistanceTraveled[idx];\n itineraryInfo.remainingDistance = this._itinerary.distance - itineraryInfo.traveledDistance;\n itineraryInfo.traveledPercentage = itineraryInfo.traveledDistance / this._itinerary.distance;\n itineraryInfo.remainingPercentage = itineraryInfo.remainingDistance / this._itinerary.distance;\n\n } else if (projection.nearestElement instanceof GraphEdge) {\n\n let firstNode = projection.nearestElement.node1.coords;\n let idx = this._itinerary.coords.findIndex(coords => firstNode === coords);\n if (idx === -1) {\n throw new Error('ItineraryInfoManager: could not find projection in itinerary (Edge)');\n }\n\n // graphEdge is not necessarly ordered. We have to look for the first point\n if (idx === this._itinerary.coords.length - 1\n || this._itinerary.coords[idx + 1] !== projection.nearestElement.node2.coords\n ) {\n firstNode = projection.nearestElement.node2.coords;\n idx--;\n }\n\n itineraryInfo = new ItineraryInfo();\n itineraryInfo.nextStep = this._coordsNextStep[idx];\n itineraryInfo.previousStep = this._coordsPreviousStep[idx];\n itineraryInfo.projection = projection;\n itineraryInfo.leg = this._coordsLeg[idx];\n itineraryInfo.traveledDistance = this._coordsDistanceTraveled[idx]\n + projection.projection.distanceTo(firstNode);\n itineraryInfo.remainingDistance = this._itinerary.distance - itineraryInfo.traveledDistance;\n itineraryInfo.traveledPercentage = itineraryInfo.traveledDistance / this._itinerary.distance;\n itineraryInfo.remainingPercentage = itineraryInfo.remainingDistance / this._itinerary.distance;\n\n }\n\n return itineraryInfo;\n }\n\n}\n\nexport default ItineraryInfoManager;\n"],"names":["jsonToCoordinates","parseJsonSteps","createRouterResponseFromJson"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wemap-osm.es.js","sources":["../src/model/OsmElement.js","../src/model/OsmWay.js","../src/model/OsmNode.js","../src/model/OsmModel.js","../src/model/OsmParser.js","../src/routers/custom/OsmRouterOptions.js","../src/routers/custom/OsmRouter.js","../src/routers/LevelChange.js","../src/routers/Step.js","../src/routers/Leg.js","../src/routers/Itinerary.js","../src/routers/custom/StepsGeneration.js","../src/routers/custom/OsmRouterUtils.js","../src/routers/custom/OsmNetworkUtils.js","../src/routers/RouterResponse.js","../src/routers/Utils.js","../src/routers/osrm/OsrmUtils.js","../src/routers/otp/OtpUtils.js","../src/routers/cityway/CitywayUtils.js","../src/routers/info/ItineraryInfo.js","../src/routers/info/ItineraryInfoManager.js"],"sourcesContent":["class OsmElement {\n\n /** @type {number|null} */\n id;\n\n /** @type {object} */\n tags;\n\n /**\n * @param {number} id\n * @param {object} tags\n */\n constructor(id, tags) {\n this.id = id;\n this.tags = tags || {};\n }\n}\n\nexport default OsmElement;\n","import { Level } from '@wemap/geo';\n\nimport OsmElement from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\n\nclass OsmWay extends OsmElement {\n\n /** @type {OsmNode[]} */\n nodes = [];\n\n /** @type {?Level} */\n level = null;\n\n /**\n * @param {number} id\n * @param {object} tags\n * @param {?Level} level\n */\n constructor(id, tags, level) {\n super(id, tags);\n this.level = level || null;\n }\n\n /**\n * @returns {boolean}\n */\n get areStairs() {\n return this.tags.highway === 'steps';\n }\n\n /**\n * @returns {boolean}\n */\n get isConveying() {\n return this.tags.hasOwnProperty('conveying');\n }\n\n /**\n * @returns {boolean}\n */\n get isEscalator() {\n return this.areStairs && this.isConveying;\n }\n\n /**\n * @returns {boolean}\n */\n get isMovingWalkway() {\n return !this.areStairs && this.isConveying;\n }\n\n /**\n * @returns {boolean}\n */\n get isArea() {\n // That is not the real definition for OSM\n return this.nodes[0] === this.nodes[this.nodes.length - 1];\n }\n}\n\nexport default OsmWay;\n","import { Coordinates } from '@wemap/geo';\n\nimport OsmElement from './OsmElement.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmNode extends OsmElement {\n\n /** @type {Coordinates} */\n coords = null;\n\n /** @type {OsmWay[]} */\n ways = [];\n\n /**\n * @param {number} id\n * @param {Coordinates} coords\n * @param {object} tags\n */\n constructor(id, coords, tags) {\n super(id, tags);\n this.coords = coords;\n }\n\n /**\n * @returns {boolean}\n */\n get isElevator() {\n return this.tags.highway === 'elevator';\n }\n\n /**\n * @returns {boolean}\n */\n get isConveying() {\n return this.isElevator;\n }\n}\n\nexport default OsmNode;\n","import OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmModel {\n\n /** @type {OsmNode[]} */\n nodes;\n\n /** @type {OsmWay[]} */\n ways;\n\n /**\n * @param {OsmNode[]|undefined} nodes\n * @param {OsmWay[]|undefined} ways\n */\n constructor(nodes, ways) {\n this.nodes = nodes || [];\n this.ways = ways || [];\n }\n\n /**\n * @param {number} id\n * @returns {OsmNode|null}\n */\n getNodeById(id) {\n return this.nodes.find(node => node.id === id) || null;\n }\n\n /**\n * @param {string} name\n * @returns {OsmNode|null}\n */\n getNodeByName(name) {\n return this.nodes.find(node => node.tags.name === name) || null;\n }\n\n\n /**\n * @param {number} id\n * @returns {OsmWay|null}\n */\n getWayById(id) {\n return this.ways.find(way => way.id === id) || null;\n }\n\n /**\n * @param {string} name\n * @returns {OsmWay|null}\n */\n getWayByName(name) {\n return this.ways.find(way => way.tags.name === name) || null;\n }\n\n}\n\nexport default OsmModel;\n","/* eslint-disable max-statements */\nimport { SaxesParser } from 'saxes';\n\nimport {\n Level, Coordinates\n} from '@wemap/geo';\n\nimport OsmModel from './OsmModel.js';\nimport OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmParser {\n\n /**\n * @param {string} osmXmlString\n * @returns {OsmModel}\n */\n static parseOsmXmlString(osmXmlString) {\n\n const model = new OsmModel();\n const parser = new SaxesParser(true);\n\n let buffer;\n\n const isDeleted = element => element.attributes.action && element.attributes.action === 'delete';\n\n parser.on('opentag', (node) => {\n\n switch (node.name) {\n case 'node': {\n if (isDeleted(node)) {\n buffer = null;\n break;\n }\n const osmNode = this._parseNode(node.attributes);\n buffer = osmNode;\n model.nodes.push(osmNode);\n break;\n }\n case 'way': {\n if (isDeleted(node)) {\n buffer = null;\n break;\n }\n const osmWay = this._parseWay(node.attributes);\n buffer = osmWay;\n model.ways.push(osmWay);\n break;\n }\n case 'tag': {\n if (!buffer) {\n return;\n }\n const {\n k, v\n } = node.attributes;\n buffer.tags[k] = v;\n break;\n }\n case 'nd': {\n if (!buffer || !(buffer instanceof OsmWay)) {\n return;\n }\n const nodeId = Number(node.attributes.ref);\n const refNode = model.getNodeById(nodeId);\n if (!refNode) {\n throw Error('Node: ' + nodeId + ' in way ' + buffer.id + ' not found');\n }\n\n buffer.nodes.push(refNode);\n refNode.ways.push(buffer);\n break;\n }\n }\n });\n\n parser.write(osmXmlString);\n\n for (let i = 0; i < model.ways.length; i++) {\n const way = model.ways[i];\n if (way.tags.level) {\n way.level = Level.fromString(way.tags.level);\n }\n }\n\n return model;\n }\n\n\n static _parseNode(attr) {\n return new OsmNode(\n Number(attr.id),\n new Coordinates(Number(attr.lat), Number(attr.lon)));\n }\n\n static _parseWay(attr) {\n return new OsmWay(Number(attr.id));\n }\n}\n\nexport default OsmParser;\n","import { GraphRouterOptions } from '@wemap/geo';\n\nimport OsmElement from '../../model/OsmElement.js';\n\nclass OsmRouterOptions extends GraphRouterOptions {\n\n /** @type {OsmRouterOptions} */\n static DEFAULT = new OsmRouterOptions();\n\n /**\n * @returns {OsmRouterOptions}\n */\n static get WITHOUT_STAIRS() {\n const options = new OsmRouterOptions();\n options.acceptEdgeFn = edge => edge.builtFrom.tags.highway !== 'steps';\n return options;\n }\n\n /**\n * Get route duration\n * @param {Number} speed in km/h\n */\n static getDurationFromLength(length, speed = 5) {\n return length / (speed * 1000 / 3600);\n }\n\n /** @type {function(GraphEdge<OsmElement>):boolean} */\n weightEdgeFn = edge => edge.builtFrom.isElevator ? 30 : OsmRouterOptions.getDurationFromLength(edge.length);\n\n\n}\n\nexport default OsmRouterOptions;\n","import { Coordinates, GraphItinerary, GraphRouter, Network } from '@wemap/geo';\n\nimport OsmRouterOptions from './OsmRouterOptions.js';\nimport OsmElement from '../../model/OsmElement.js';\n\nclass OsmRouter extends GraphRouter {\n\n /**\n * @param {!Network<OsmElement>} network\n */\n constructor(network) {\n super(network);\n }\n\n /**\n * @param {Coordinates} start\n * @param {Coordinates} end\n * @param {OsmRouterOptions} options\n * @returns {GraphItinerary<OsmElement>}\n */\n getShortestPath(start, end, options = new OsmRouterOptions()) {\n return super.getShortestPath(start, end, options);\n }\n\n}\n\nexport default OsmRouter;\n","import { Level, GraphNode, GraphUtils } from '@wemap/geo';\n\nimport OsmElement from '../model/OsmElement.js';\n\nclass LevelChange {\n\n /** @type {!string} [up|down] */\n direction;\n\n /** @type {!number} [-2, -1, 1, ...] */\n difference;\n\n /** @type {?string} [elevator|conveyor|stairs] */\n type = null;\n\n /**\n * @param {GraphNode<OsmElement>} firstNode\n * @param {GraphNode<OsmElement>} secondNode\n * @returns {LevelChange}\n */\n static fromTwoNodes(firstNode, secondNode) {\n\n const levelChange = new LevelChange();\n\n const edge = GraphUtils.getEdgeByNodes(firstNode.edges, firstNode, secondNode);\n\n if (edge.builtFrom.isElevator) {\n levelChange.type = 'elevator';\n } else if (edge.builtFrom.isConveying) {\n levelChange.type = 'conveyor';\n } else if (edge.builtFrom.areStairs) {\n levelChange.type = 'stairs';\n }\n\n levelChange.difference = Level.diff(firstNode.coords.level, secondNode.coords.level);\n levelChange.direction = levelChange.difference > 0 ? 'up' : 'down';\n\n return levelChange;\n }\n\n /**\n * @returns {object}\n */\n toJson() {\n return {\n direction: this.direction,\n difference: this.difference,\n type: this.type\n };\n }\n\n /**\n * @param {object} json\n * @returns {LevelChange}\n */\n static fromJson(json) {\n const levelChange = new LevelChange();\n levelChange.direction = json.direction;\n levelChange.difference = json.difference;\n levelChange.type = json.type;\n return levelChange;\n }\n}\n\nexport default LevelChange;\n","import { Coordinates } from '@wemap/geo';\n\nimport LevelChange from './LevelChange.js';\n\nclass Step {\n\n /** @type {!boolean} */\n firstStep = false;\n\n /** @type {!boolean} */\n lastStep = false;\n\n /** @type {!number} */\n number;\n\n /** @type {!Coordinates} */\n coords = [];\n\n\n /** @type {!number} */\n angle;\n\n /** @type {!number} */\n previousBearing;\n\n /** @type {!number} */\n nextBearing;\n\n\n /** @type {!number} */\n distance;\n\n /** @type {?number} */\n duration = null;\n\n /** @type {?string} */\n name = null;\n\n\n /** @type {?LevelChange} */\n levelChange = null;\n\n /** @type {?{?subwayEntrance: boolean, ?subwayEntranceRef: string}} */\n extras = {};\n\n /** @type {!number} */\n _idCoordsInLeg = null;\n\n /**\n * @returns {object}\n */\n toJson() {\n const output = {\n number: this.number,\n coords: this.coords.toCompressedJson(),\n angle: this.angle,\n previousBearing: this.previousBearing,\n nextBearing: this.nextBearing,\n distance: this.distance,\n _idCoordsInLeg: this._idCoordsInLeg\n };\n if (this.firstStep) {\n output.firstStep = true;\n }\n if (this.lastStep) {\n output.lastStep = true;\n }\n if (this.duration !== null) {\n output.duration = this.duration;\n }\n if (this.name !== null) {\n output.name = this.name;\n }\n if (this.levelChange !== null) {\n output.levelChange = this.levelChange.toJson();\n }\n if (this.extras && Object.keys(this.extras).length !== 0) {\n output.extras = this.extras;\n }\n return output;\n }\n\n /**\n * @param {object} json\n * @returns {Step}\n */\n static fromJson(json) {\n const step = new Step();\n step.number = json.number;\n step.coords = Coordinates.fromCompressedJson(json.coords);\n step.angle = json.angle;\n step.previousBearing = json.previousBearing;\n step.nextBearing = json.nextBearing;\n step.distance = json.distance;\n step._idCoordsInLeg = json._idCoordsInLeg;\n if (json.firstStep) {\n step.firstStep = json.firstStep;\n }\n if (json.lastStep) {\n step.lastStep = json.lastStep;\n }\n if (json.duration) {\n step.duration = json.duration;\n }\n if (json.name) {\n step.name = json.name;\n }\n if (json.levelChange) {\n step.levelChange = LevelChange.fromJson(json.levelChange);\n }\n if (json.extras) {\n step.extras = json.extras;\n }\n return step;\n }\n}\n\nexport default Step;\n","import { Coordinates, Network } from '@wemap/geo';\n\nimport Step from './Step.js';\n\nclass Leg {\n\n /** @type {!string} can be WALK, BIKE, BUS, TRAM, CAR, FUNICULAR */\n mode;\n\n /** @type {!number} */\n distance;\n\n /** @type {!number} */\n duration;\n\n /** @type {?number} */\n startTime = null;\n\n /** @type {?number} */\n endTime = null;\n\n /** @type {!{name: ?string, coords: !Coordinates}} */\n from;\n\n /** @type {!{name: ?string, coords: !Coordinates}} */\n to;\n\n /** @type {!Coordinates[]} */\n coords;\n\n /** @type {?{name: !string, routeColor: ?string, routeTextColor: ?string, directionName: ?string}} */\n transportInfo = null;\n\n /** @type {?(Step[])} */\n steps = null;\n\n /**\n * @returns {Network}\n */\n toNetwork() {\n return Network.fromCoordinates([this.coords]);\n }\n\n /**\n * @returns {object}\n */\n toJson() {\n const output = {\n mode: this.mode,\n from: { coords: this.from.coords.toCompressedJson() },\n to: { coords: this.to.coords.toCompressedJson() },\n distance: this.distance,\n duration: this.duration,\n coords: this.coords.map(coords => coords.toCompressedJson())\n };\n if (this.from.name) {\n output.from.name = this.from.name;\n }\n if (this.to.name) {\n output.to.name = this.to.name;\n }\n if (this.startTime !== null) {\n output.startTime = this.startTime;\n }\n if (this.endTime !== null) {\n output.endTime = this.endTime;\n }\n if (this.transportInfo !== null) {\n output.transportInfo = this.transportInfo;\n }\n if (this.steps !== null && this.steps.length > 0) {\n output.steps = this.steps.map(step => step.toJson());\n }\n return output;\n }\n\n\n /**\n * @param {object} json\n * @returns {Leg}\n */\n static fromJson(json) {\n const leg = new Leg();\n leg.mode = json.mode;\n leg.from = { coords: Coordinates.fromCompressedJson(json.from.coords) };\n leg.to = { coords: Coordinates.fromCompressedJson(json.to.coords) };\n leg.distance = json.distance;\n leg.duration = json.duration;\n leg.coords = json.coords.map(Coordinates.fromCompressedJson);\n if (json.from.name) {\n leg.from.name = json.from.name;\n }\n if (json.to.name) {\n leg.to.name = json.to.name;\n }\n if (json.startTime) {\n leg.startTime = json.startTime;\n }\n if (json.endTime) {\n leg.endTime = json.endTime;\n }\n if (json.transportInfo) {\n leg.transportInfo = json.transportInfo;\n }\n if (json.steps) {\n leg.steps = json.steps.map(Step.fromJson);\n }\n return leg;\n }\n\n}\n\nexport default Leg;\n","/* eslint-disable max-statements */\nimport { Coordinates, Network } from '@wemap/geo';\nimport Leg from './Leg.js';\nimport Step from './Step.js';\n\n/**\n * Main attributes are:\n * nodes: the ordered list of Node\n * edges: the ordered list of Edge\n * start: the start point (Coordinates)\n * end: the end point (Coordinates)\n * length: the route length\n */\nclass Itinerary {\n\n /** @type {!Coordinates} */\n from;\n\n /** @type {!Coordinates} */\n to;\n\n /** @type {!number} */\n distance;\n\n /** @type {!number} */\n duration;\n\n /** @type {?number} */\n startTime = null;\n\n /** @type {?number} */\n endTime = null;\n\n /** @type {!(Leg[])} */\n legs = [];\n\n /** @type {?Coordinates[]} */\n _coords = null;\n\n set coords(_) {\n throw new Error('Itinerary.coords cannot be set. They are calculated from Itinerary.legs.');\n }\n\n /** @type {!(Coordinates[])} */\n get coords() {\n if (!this._coords) {\n // Returns the coordinates contained in all legs and remove duplicates between array\n this._coords = this.legs.reduce((acc, val) => {\n const isDuplicate = acc.length && val.coords.length && acc[acc.length - 1].equalsTo(val.coords[0]);\n acc.push(...val.coords.slice(isDuplicate ? 1 : 0));\n return acc;\n }, []);\n }\n return this._coords;\n }\n\n set steps(_) {\n throw new Error('Itinerary.step cannot be set. They are calculated from Itinerary.legs.');\n }\n\n /** @type {!(Step[])} */\n get steps() {\n return this.legs.map(leg => leg.steps).flat();\n }\n\n /**\n * @returns {Network}\n */\n toNetwork() {\n return Network.fromCoordinates([this.coords]);\n }\n\n /**\n * @param {Itinerary[]} itineraries\n * @returns {Itinerary}\n */\n static fromItineraries(...itineraries) {\n const itinerary = new Itinerary();\n itinerary.from = itineraries[0].from;\n itinerary.to = itineraries[itineraries.length - 1].to;\n itinerary.distance = 0;\n itinerary.duration = 0;\n itinerary.legs = [];\n\n itineraries.forEach(_itinerary => {\n itinerary.distance += _itinerary.distance;\n itinerary.duration += _itinerary.duration;\n itinerary.legs.push(..._itinerary.legs);\n itinerary.legs.forEach(leg => {\n leg.steps[0].firstStep = false;\n leg.steps[leg.steps.length - 1].lastStep = false;\n });\n });\n\n itinerary.legs[0].steps[0].firstStep = true;\n const lastLeg = itinerary.legs[itinerary.legs.length - 1];\n lastLeg.steps[lastLeg.steps.length - 1].lastStep = true;\n\n return itinerary;\n }\n\n /**\n * Convert lat/lng/level points to Itinerary\n * @param {number[][]} points 2D points array of lat/lng/level (level is optional)\n * @param {Coordinates} from\n * @param {Coordinates} to\n * @param {string} mode\n * @returns {Itinerary}\n */\n static fromOrderedPointsArray(points, start, end) {\n\n const pointToCoordinates = point => new Coordinates(point[0], point[1], null, point[2]);\n\n return this.fromOrderedCoordinates(\n points.map(pointToCoordinates),\n pointToCoordinates(start),\n pointToCoordinates(end)\n );\n }\n\n /**\n * Convert ordered Coordinates to Itinerary\n * @param {Coordinates[]} points\n * @param {Coordinates} from\n * @param {Coordinates} to\n * @param {string} mode\n * @returns {Itinerary}\n */\n static fromOrderedCoordinates(points, from, to, mode = 'WALK') {\n\n const itinerary = new Itinerary();\n itinerary.from = from;\n itinerary.to = to;\n\n const leg = new Leg();\n leg.mode = mode;\n leg.from = from;\n leg.to = to;\n\n leg.coords = points;\n leg.distance = points.reduce((acc, coords, idx, arr) => {\n if (idx !== 0) {\n return acc + arr[idx - 1].distanceTo(coords);\n }\n return acc;\n }, 0);\n leg.duration = leg.distance;\n itinerary.legs.push(leg);\n\n itinerary.distance = leg.distance;\n itinerary.duration = leg.duration;\n\n return itinerary;\n }\n\n /**\n * @returns {object}\n */\n toJson() {\n const output = {\n from: this.from.toCompressedJson(),\n to: this.to.toCompressedJson(),\n distance: this.distance,\n duration: this.duration,\n legs: this.legs.map(leg => leg.toJson())\n };\n if (this.startTime !== null) {\n output.startTime = this.startTime;\n }\n if (this.endTime !== null) {\n output.endTime = this.endTime;\n }\n return output;\n }\n\n /**\n * @param {object} json\n * @returns {Itinerary}\n */\n static fromJson(json) {\n const itinerary = new Itinerary();\n itinerary.from = Coordinates.fromCompressedJson(json.from);\n itinerary.to = Coordinates.fromCompressedJson(json.to);\n itinerary.distance = json.distance;\n itinerary.duration = json.duration;\n itinerary.legs = json.legs.map(Leg.fromJson);\n if (json.startTime) {\n itinerary.startTime = json.startTime;\n }\n if (json.endTime) {\n itinerary.endTime = json.endTime;\n }\n return itinerary;\n }\n}\nexport default Itinerary;\n","/* eslint-disable complexity */\n/* eslint-disable max-statements */\nimport { Coordinates, GraphItinerary } from '@wemap/geo';\nimport { diffAngle, deg2rad } from '@wemap/maths';\n\nimport OsmElement from '../../model/OsmElement.js';\nimport Step from '../Step.js';\nimport LevelChange from '../LevelChange.js';\n\nconst SKIP_STEP_ANGLE_MAX = deg2rad(20);\n\nclass StepsGeneration {\n\n /**\n * @param {GraphItinerary<OsmElement>} itinerary\n * @returns {Step[]}\n */\n static fromGraphItinerary(itinerary) {\n\n const steps = [];\n\n const { start, end, nodes, edges } = itinerary;\n\n let currentStep, previousStep;\n let previousBearing = start.bearingTo(nodes[0].coords);\n\n for (let i = 0; i < nodes.length - 1; i++) {\n\n const isFirstStep = !currentStep;\n\n const node = nodes[i];\n const nextNode = nodes[i + 1];\n const edge = edges[i];\n\n const bearing = edge.bearing;\n const angle = diffAngle(previousBearing, bearing + Math.PI);\n\n let splitByAngle = Math.abs(diffAngle(Math.PI, angle)) >= SKIP_STEP_ANGLE_MAX;\n\n const splitByLevel = edge.level && edge.level.isRange\n && node.coords.level && !node.coords.level.isRange;\n splitByAngle = splitByAngle && !(node.coords.level && node.coords.level.isRange);\n\n const splitStepCondition = splitByAngle || splitByLevel;\n\n const isSubwayEntrance = node ? node.builtFrom.tags.railway === 'subway_entrance' : false;\n\n // New step creation\n if (isFirstStep || splitStepCondition || isSubwayEntrance) {\n\n previousStep = currentStep;\n\n currentStep = new Step();\n currentStep.coords = node.coords;\n currentStep.number = steps.length + 1;\n currentStep.angle = angle;\n currentStep.previousBearing = previousBearing;\n currentStep.nextBearing = bearing;\n currentStep.name = edge.builtFrom.tags.name || null;\n currentStep.distance = 0;\n currentStep.duration = 0;\n\n if (isSubwayEntrance) {\n currentStep.extras.subwayEntrance = true;\n currentStep.name = node.builtFrom.tags.name;\n if (node.builtFrom.tags.ref) {\n currentStep.extras.subwayEntranceRef = node.builtFrom.tags.ref;\n }\n }\n\n if (splitByLevel) {\n currentStep.levelChange = LevelChange.fromTwoNodes(node, nextNode);\n }\n\n steps.push(currentStep);\n\n if (!previousStep) {\n currentStep.firstStep = true;\n }\n }\n\n currentStep.distance += edge.length;\n currentStep.duration += itinerary.edgesWeights[i];\n previousBearing = bearing;\n }\n\n const lastNode = nodes[nodes.length - 1];\n const lastStep = new Step();\n lastStep.coords = lastNode.coords;\n lastStep.number = steps.length + 1;\n lastStep.previousBearing = previousBearing;\n lastStep.distance = lastNode.coords.distanceTo(end);\n if (!Coordinates.equalsTo(lastNode.coords, end)) {\n lastStep.nextBearing = lastNode.coords.bearingTo(end);\n lastStep.angle = diffAngle(lastStep.previousBearing, lastStep.nextBearing + Math.PI);\n }\n lastStep.lastStep = true;\n steps.push(lastStep);\n\n return steps;\n }\n\n}\nexport default StepsGeneration;\n","import { GraphItinerary } from '@wemap/geo';\n\nimport OsmElement from '../../model/OsmElement.js';\nimport Itinerary from '../Itinerary.js';\nimport Leg from '../Leg.js';\nimport StepsGeneration from './StepsGeneration.js';\n\n/**\n * @param {GraphItinerary<OsmElement>} graphItinerary\n * @param {string} mode\n * @returns {Leg}\n */\nexport function createLegFromGraphItinerary(graphItinerary, mode = 'WALK') {\n\n const leg = new Leg();\n\n leg.from = { coords: graphItinerary.start };\n leg.to = { coords: graphItinerary.end };\n leg.coords = graphItinerary.nodes.map(node => node.coords);\n leg.distance = graphItinerary.edges.reduce((acc, edge) => acc + edge.length, 0);\n leg.duration = graphItinerary.edgesWeights.reduce((acc, weight) => acc + weight, 0);\n leg.mode = mode;\n leg.steps = StepsGeneration.fromGraphItinerary(graphItinerary);\n\n return leg;\n}\n\n/**\n * @param {GraphItinerary<OsmElement>} graphItinerary\n * @param {string} mode\n * @returns {Itinerary}\n */\nexport function createItineraryFromGraphItinerary(graphItinerary, mode = 'WALK') {\n\n const leg = createLegFromGraphItinerary(graphItinerary, mode);\n\n const itinerary = new Itinerary();\n\n itinerary.from = graphItinerary.start;\n itinerary.to = graphItinerary.end;\n itinerary.distance = leg.distance;\n itinerary.duration = leg.duration;\n itinerary.legs.push(leg);\n\n return itinerary;\n}\n","import { Level, GraphEdge, GraphNode, Network } from '@wemap/geo';\n\nimport OsmElement from '../../model/OsmElement.js';\nimport OsmModel from '../../model/OsmModel.js';\nimport OsmNode from '../../model/OsmNode.js';\nimport OsmWay from '../../model/OsmWay.js';\n\n\nexport const HIGHWAYS_PEDESTRIANS = ['footway', 'steps', 'pedestrian', 'living_street', 'path', 'track', 'sidewalk'];\n\nexport const DEFAULT_WAY_SELECTOR = way => {\n return HIGHWAYS_PEDESTRIANS.includes(way.tags.highway)\n || way.tags.footway === 'sidewalk'\n || way.tags.public_transport === 'platform'\n || way.tags.railway === 'platform';\n};\n\n/**\n * @param {Network<OsmElement>} network\n * @param {string} name\n */\nexport function getNodeByName(network, name) {\n return network.nodes.find(({ builtFrom }) => builtFrom.tags.name === name);\n}\n\n/**\n * @param {Network<OsmElement>} network\n * @param {string} name\n */\nexport function getEdgeByName(network, name) {\n return network.edges.find(({ builtFrom }) => builtFrom.tags.name === name);\n}\n\n/**\n * @param {GraphEdge<OsmElement>} edge\n * @param {OsmWay} way\n * @returns {boolean}\n */\nfunction manageOneWay(edge, way) {\n\n const { highway, oneway, conveying } = way.tags;\n\n edge.isOneway = Boolean((oneway === 'yes' || oneway === 'true' || oneway === '1')\n || (conveying && highway && ['yes', 'forward', 'backward'].includes(conveying)));\n\n if (edge.isOneway && conveying === 'backward') {\n const tmpNode = edge.node1;\n edge.node1 = edge.node2;\n edge.node2 = tmpNode;\n }\n}\n\n/**\n * @param {Network} networkModel\n * @param {GraphNode} node\n */\nfunction createNodesAndEdgesFromElevator(networkModel, node) {\n\n /** @type {GraphNode[]} */\n const createdNodes = [];\n const getOrCreateLevelNode = (level, builtFrom) => {\n let levelNode = createdNodes.find(({ coords }) => Level.equalsTo(level, coords.level));\n if (!levelNode) {\n levelNode = new GraphNode(node.coords.clone(), builtFrom);\n levelNode.coords.level = level;\n createdNodes.push(levelNode);\n networkModel.nodes.push(levelNode);\n }\n return levelNode;\n };\n\n // Create nodes from node.edges\n node.edges.forEach(edge => {\n if (edge.level.isRange) {\n throw new Error('Cannot handle this elevator edge due to ambiguity');\n }\n\n const levelNode = getOrCreateLevelNode(edge.level, node.builtFrom);\n if (edge.node1 === node) {\n edge.node1 = levelNode;\n } else {\n edge.node2 = levelNode;\n }\n levelNode.edges.push(edge);\n });\n\n // Create edges from createdNodes\n for (let i = 0; i < createdNodes.length; i++) {\n for (let j = i + 1; j < createdNodes.length; j++) {\n\n const createdNode1 = createdNodes[i];\n const createdNode2 = createdNodes[j];\n\n const newEdge = new GraphEdge(\n createdNode1,\n createdNode2,\n new Level(createdNode1.coords.level.val, createdNode2.coords.level.val),\n node.builtFrom\n );\n networkModel.edges.push(newEdge);\n }\n }\n\n // Remove the historical elevator node from the network\n networkModel.nodes = networkModel.nodes.filter(_node => _node !== node);\n}\n\n\n/**\n * @param {OsmModel} osmModel\n * @param {function} _waySelectionFilter\n * @returns {Network<OsmElement>}\n */\nexport function createNetworkFromOsmModel(\n osmModel,\n waySelectionFilter = DEFAULT_WAY_SELECTOR\n) {\n\n const networkModel = new Network();\n\n const nodesCreated = {};\n const elevatorNodes = [];\n\n /**\n * @param {OsmNode} osmNode\n */\n const getOrCreateNode = osmNode => {\n let node = nodesCreated[osmNode.id];\n if (!node) {\n node = new GraphNode(osmNode.coords, osmNode);\n nodesCreated[osmNode.id] = node;\n networkModel.nodes.push(node);\n\n if (osmNode.tags.highway === 'elevator') {\n elevatorNodes.push(node);\n }\n }\n return node;\n };\n\n osmModel.ways.forEach(way => {\n if (!waySelectionFilter(way)) {\n return;\n }\n\n let firstNode = getOrCreateNode(way.nodes[0]);\n for (let i = 1; i < way.nodes.length; i++) {\n const secondNode = getOrCreateNode(way.nodes[i]);\n\n const edge = new GraphEdge(firstNode, secondNode, way.level, way);\n manageOneWay(edge, way);\n networkModel.edges.push(edge);\n firstNode = secondNode;\n }\n\n });\n\n elevatorNodes.forEach(node => {\n // We have to clone this node for each connected edge\n createNodesAndEdgesFromElevator(networkModel, node);\n });\n\n GraphNode.generateNodesLevels(networkModel.nodes);\n\n return networkModel;\n}\n\n\n// /**\n// * @param {GraphNode} node\n// * @param {object} tags\n// */\n// static _applyNodePropertiesFromTags(node, tags) {\n// node.name = tags.name || null;\n// node.subwayEntrance = tags.railway === 'subway_entrance';\n// if (node.subwayEntrance && tags.ref) {\n// node.subwayEntranceRef = tags.ref;\n// }\n// }\n\n// /**\n// * @param {GraphEdge} edge\n// * @param {object} tags\n// */\n// static _applyEdgePropertiesFromTags(edge, tags) {\n// const { highway, oneway, conveying, name } = tags;\n// edge.name = name || null;\n// edge.isStairs = highway === 'steps';\n// edge.isConveying = 'conveying' in tags;\n// edge.isOneway = Boolean((oneway === 'yes' || oneway === 'true' || oneway === '1')\n// || (conveying && highway && ['yes', 'forward', 'backward'].includes(conveying)));\n\n// if (conveying === 'backward') {\n// const tmpNode = edge.node1;\n// edge.node1 = edge.node2;\n// edge.node2 = tmpNode;\n// }\n\n// }\n","import { Coordinates } from '@wemap/geo';\n\nimport Itinerary from './Itinerary.js';\nclass RouterResponse {\n\n /** @type {!string} */\n routerName;\n\n /** @type {!Coordinates} */\n from;\n\n /** @type {!Coordinates} */\n to;\n\n /** @type {!(Itinerary[])} */\n itineraries = [];\n}\n\nexport default RouterResponse;\n","import { diffAngle } from '@wemap/maths';\n\nimport Itinerary from './Itinerary.js';\n\n/**\n * @param {Itinerary} itinerary\n */\nexport function generateStepsMetadata(itinerary) {\n\n let counter = 1;\n\n itinerary.legs.forEach((leg, legId) => {\n leg.steps.forEach((step, stepId) => {\n\n if (counter === 1) {\n step.firstStep = true;\n }\n if (legId === itinerary.legs.length - 1\n && stepId === leg.steps.length - 1) {\n step.lastStep = true;\n }\n\n step.number = counter++;\n\n\n /*\n * Generate previousBearing, nextBearing and angle\n */\n\n let coordsBeforeStep;\n if (step._idCoordsInLeg > 0) {\n coordsBeforeStep = leg.coords[step._idCoordsInLeg - 1];\n } else if (legId === 0) {\n coordsBeforeStep = itinerary.from;\n } else {\n coordsBeforeStep = itinerary.legs[legId - 1].to.coords;\n }\n\n let coordsAfterStep;\n if (step._idCoordsInLeg !== leg.coords.length - 1) {\n coordsAfterStep = leg.coords[step._idCoordsInLeg + 1];\n } else if (legId === itinerary.legs.length - 1) {\n coordsAfterStep = itinerary.to;\n } else {\n coordsAfterStep = itinerary.legs[legId + 1].from.coords;\n }\n\n step.previousBearing = coordsBeforeStep.bearingTo(step.coords);\n step.nextBearing = step.coords.bearingTo(coordsAfterStep);\n step.angle = diffAngle(step.previousBearing, step.nextBearing + Math.PI);\n\n });\n });\n}\n","/* eslint-disable max-statements */\n\nimport { Level, Coordinates } from '@wemap/geo';\nimport { rad2deg, positiveMod } from '@wemap/maths';\n\nimport Itinerary from '../Itinerary.js';\nimport Leg from '../Leg.js';\nimport LevelChange from '../LevelChange.js';\nimport RouterResponse from '../RouterResponse.js';\nimport Step from '../Step.js';\nimport { generateStepsMetadata } from '../Utils.js';\n\n/**\n * @param {Coordinates} coordinates\n * @returns {object}\n */\nexport function coordinatesToJson(coordinates) {\n const output = [coordinates.lng, coordinates.lat];\n if (coordinates.level) {\n output.push(coordinates.level.toString());\n }\n return output;\n}\n\n/**\n * @param {object} json\n * @returns {Coordinates}\n */\nexport function jsonToCoordinates(json) {\n const output = new Coordinates(json[1], json[0]);\n if (json.length > 2) {\n output.level = Level.fromString(json[2]);\n }\n return output;\n}\n\nexport function nodesToJsonCoords(nodes) {\n return nodes.map(node => coordinatesToJson(node.coords));\n}\n\n\nexport function getModifierFromAngle(_angle) {\n\n const angle = positiveMod(rad2deg(_angle), 360);\n\n if (angle > 0 && angle < 60) {\n return 'sharp right';\n }\n if (angle >= 60 && angle < 140) {\n return 'right';\n }\n if (angle >= 140 && angle < 160) {\n return 'slight right';\n }\n if (angle >= 160 && angle <= 200) {\n return 'straight';\n }\n if (angle > 200 && angle <= 220) {\n return 'slight left';\n }\n if (angle > 220 && angle <= 300) {\n return 'left';\n }\n if (angle > 300 && angle < 360) {\n return 'sharp left';\n }\n return 'u turn';\n}\n\n\nexport function noRouteFoundJson(message) {\n return {\n 'code': 'NoRoute',\n message\n };\n}\n\n/**\n * @param {Itinerary} itinerary\n * @returns {object}\n */\nexport function itineraryToOsrmJson(itinerary) {\n\n const lastLegId = itinerary.legs.length - 1;\n\n const jsonLegs = itinerary.legs.map(({ distance, duration, coords, steps }, idLeg) => {\n\n const lastStepId = steps.length - 1;\n\n return {\n distance,\n duration,\n steps: steps.map((step, idStep, arr) => {\n\n let type = idStep === 0 && idLeg === 0 ? 'depart' : 'turn';\n type = idStep === lastStepId && idLeg === lastLegId ? 'arrive' : type;\n\n const stepCoordsIdx = coords.findIndex(p => p.equalsTo(step.coords));\n const nextStepCoordsIdx = idStep === lastStepId\n ? stepCoordsIdx\n : coords.findIndex(p => p.equalsTo(arr[idStep + 1].coords));\n\n const jsonStep = {\n geometry: {\n type: 'LineString',\n coordinates: coords.slice(stepCoordsIdx, nextStepCoordsIdx + 1).map(coordinatesToJson)\n },\n distance: step.distance,\n duration: step.duration,\n name: step.name,\n maneuver: {\n bearing_before: rad2deg(step.previousBearing),\n bearing_after: rad2deg(step.nextBearing),\n location: coordinatesToJson(step.coords),\n modifier: getModifierFromAngle(step.angle),\n type\n }\n };\n if (step.levelChange !== null) {\n jsonStep.levelChange = step.levelChange.toJson();\n }\n if (typeof step.extras === 'object' && Object.keys(step.extras).length !== 0) {\n jsonStep.extras = step.extras;\n }\n\n return jsonStep;\n })\n };\n });\n\n return {\n 'code': 'Ok',\n 'routes': [\n {\n 'geometry': {\n 'type': 'LineString',\n 'coordinates': itinerary.coords.map(coordinatesToJson)\n },\n 'legs': jsonLegs,\n 'distance': itinerary.distance,\n 'duration': itinerary.duration,\n 'weight_name': 'routability',\n 'weight': 0\n }\n ],\n 'waypoints': []\n };\n}\n\n\n/**\n * @param {object} jsonSteps\n * @param {Coordinates[]} legCoords\n * @returns {Step[]}\n */\nfunction parseJsonSteps(jsonSteps, legCoords) {\n\n if (!jsonSteps) {\n return [];\n }\n\n return jsonSteps.map(jsonStep => {\n\n const step = new Step();\n step.coords = jsonToCoordinates(jsonStep.maneuver.location);\n\n // Sometimes, OSRM step does not have the same coordinates than a point in legCoords.\n // ex: first step of https://routing.getwemap.com/route/v1/walking/2.33222164147,48.87084765712;2.3320734,48.8730212?geometries=geojson&overview=full&steps=true\n // That is why we look for the closest point.\n const distances = legCoords.map(coords => coords.distanceTo(step.coords));\n const idStepCoordsInLeg = distances.indexOf(Math.min(...distances));\n if (idStepCoordsInLeg < 0) {\n throw new Error('Osrm Parser: Cannot find step coords in leg coordinates');\n }\n step._idCoordsInLeg = idStepCoordsInLeg;\n\n step.name = jsonStep.name;\n step.levelChange = jsonStep.levelChange ? LevelChange.fromJson(jsonStep.levelChange) : null;\n\n step.distance = jsonStep.distance;\n step.duration = jsonStep.duration;\n\n if (jsonStep.extras && jsonStep.extras.subwayEntrance) {\n step.extras.subwayEntrance = true;\n if (jsonStep.extras.subwayEntranceRef) {\n step.extras.subwayEntranceRef = jsonStep.extras.subwayEntranceRef;\n }\n }\n\n return step;\n });\n}\n\n\n/**\n * Generate multi itineraries from OSRM JSON\n * @param {object} json JSON file provided by OSRM.\n * @param {Coordinates} from itinerary start\n * @param {Coordinates} to itinerary end\n * @param {?string} routingMode [walking|driving|bicycle]\n * @returns {?RouterResponse}\n */\nexport function createRouterResponseFromJson(json, from, to, routingMode = 'walking') {\n\n const { routes: jsonRoutes } = json;\n\n if (!jsonRoutes) {\n return null;\n }\n\n const routingModeCorrespondance = new Map();\n routingModeCorrespondance.set('walking', 'WALK');\n routingModeCorrespondance.set('driving', 'CAR');\n routingModeCorrespondance.set('bicycle', 'BIKE');\n const mode = routingModeCorrespondance.get(routingMode) || null;\n\n const routerResponse = new RouterResponse();\n routerResponse.routerName = 'osrm';\n\n routerResponse.from = from;\n routerResponse.to = to;\n\n for (const jsonItinerary of jsonRoutes) {\n\n const itinerary = new Itinerary();\n\n // itinerary.coords = jsonItinerary.geometry.coordinates.map(jsonToCoordinates);\n itinerary.distance = jsonItinerary.distance;\n itinerary.duration = jsonItinerary.duration;\n itinerary.from = from;\n itinerary.to = to;\n\n routerResponse.itineraries.push(itinerary);\n\n for (const jsonLeg of jsonItinerary.legs) {\n\n const leg = new Leg();\n\n leg.mode = mode;\n leg.distance = jsonLeg.distance;\n leg.duration = jsonLeg.duration;\n\n leg.coords = jsonLeg.steps\n .map(step => step.geometry.coordinates.map(jsonToCoordinates))\n .flat()\n // Remove duplicates\n .filter((coords, idx, arr) => idx === 0 || !arr[idx - 1].equalsTo(coords));\n\n leg.from = {\n name: null,\n coords: leg.coords[0]\n };\n leg.to = {\n name: null,\n coords: leg.coords[leg.coords.length - 1]\n };\n\n leg.steps = parseJsonSteps(jsonLeg.steps, leg.coords);\n\n itinerary.legs.push(leg);\n }\n\n // All legs have to be parsed before computing steps metadata\n generateStepsMetadata(itinerary);\n\n }\n\n return routerResponse;\n}\n","/* eslint-disable max-statements */\nimport Polyline from '@mapbox/polyline';\n\nimport { Coordinates } from '@wemap/geo';\n\nimport Itinerary from '../Itinerary.js';\nimport Leg from '../Leg.js';\nimport RouterResponse from '../RouterResponse.js';\nimport Step from '../Step.js';\nimport { generateStepsMetadata } from '../Utils.js';\n\n/**\n * @param {object} json\n * @returns {Coordinates}\n */\nexport function jsonToCoordinates(json) {\n return new Coordinates(json.lat, json.lon);\n}\n\n/**\n * @param {object} jsonSteps\n * @param {Coordinates[]} legCoords\n * @returns {Step[]}\n */\nfunction parseJsonSteps(jsonSteps, legCoords) {\n\n if (!jsonSteps) {\n return [];\n }\n\n return jsonSteps.map(jsonStep => {\n\n const step = new Step();\n const stepCoords = jsonToCoordinates(jsonStep);\n\n // OTP step does not have the same coordinates than a point in legCoords.\n // That is why we look for the closest point.\n const distances = legCoords.map(coords => coords.distanceTo(stepCoords));\n const idStepCoordsInLeg = distances.indexOf(Math.min(...distances));\n if (idStepCoordsInLeg < 0) {\n throw new Error('OTP Parser: Cannot find closest step');\n }\n step.coords = legCoords[idStepCoordsInLeg];\n step._idCoordsInLeg = idStepCoordsInLeg;\n\n step.name = jsonStep.streetName;\n step.levelChange = null;\n\n step.distance = jsonStep.distance;\n\n return step;\n });\n}\n\n/**\n * Generate multi itineraries from OTP JSON\n * @param {object} json JSON file provided by OTP.\n * @returns {?RouterResponse}\n */\nexport function createRouterResponseFromJson(json) {\n\n const { plan: jsonPlan } = json;\n\n if (!jsonPlan) {\n return null;\n }\n\n const routerResponse = new RouterResponse();\n routerResponse.routerName = 'otp';\n\n routerResponse.from = jsonToCoordinates(jsonPlan.from);\n routerResponse.to = jsonToCoordinates(jsonPlan.to);\n\n for (const jsonItinerary of jsonPlan.itineraries) {\n\n const itinerary = new Itinerary();\n\n itinerary.duration = jsonItinerary.duration;\n itinerary.startTime = jsonItinerary.startTime;\n itinerary.endTime = jsonItinerary.endTime;\n itinerary.from = routerResponse.from;\n itinerary.to = routerResponse.to;\n\n routerResponse.itineraries.push(itinerary);\n\n for (const jsonLeg of jsonItinerary.legs) {\n\n const leg = new Leg();\n\n leg.mode = jsonLeg.mode;\n leg.duration = jsonLeg.duration;\n leg.startTime = jsonLeg.startTime;\n leg.endTime = jsonLeg.endTime;\n leg.from = {\n name: jsonLeg.from.name,\n coords: jsonToCoordinates(jsonLeg.from)\n };\n leg.to = {\n name: jsonLeg.to.name,\n coords: jsonToCoordinates(jsonLeg.to)\n };\n leg.coords = Polyline.decode(jsonLeg.legGeometry.points).map(([lat, lon]) => new Coordinates(lat, lon));\n\n leg.steps = parseJsonSteps(jsonLeg.steps, leg.coords);\n\n if (leg.mode === 'BUS' || leg.mode === 'TRAM') {\n leg.transportInfo = {\n name: jsonLeg.route,\n routeColor: jsonLeg.routeColor,\n routeTextColor: jsonLeg.routeTextColor,\n directionName: jsonLeg.headsign\n };\n\n const legStep = new Step();\n legStep.coords = leg.coords[0];\n legStep._idCoordsInLeg = 0;\n legStep.name = jsonLeg.headsign;\n legStep.levelChange = null;\n legStep.distance = jsonLeg.distance;\n leg.steps = [legStep];\n }\n\n // jsonLeg.distance is not reliable when compared to the array of leg coords.\n // leg.distance = jsonLeg.distance;\n leg.distance = leg.coords.reduce((acc, coords, idx, arr) => {\n if (idx === 0) {\n return acc;\n }\n return acc + arr[idx - 1].distanceTo(coords);\n }, 0);\n\n itinerary.legs.push(leg);\n\n }\n\n itinerary.distance = itinerary.coords.reduce((acc, coords, idx, arr) => {\n if (idx === 0) {\n return acc;\n }\n return acc + arr[idx - 1].distanceTo(coords);\n }, 0);\n\n // All legs have to be parsed before computing steps metadata\n generateStepsMetadata(itinerary);\n }\n\n return routerResponse;\n}\n\n\n","/* eslint-disable max-depth */\n/* eslint-disable max-statements */\nimport { Coordinates } from '@wemap/geo';\nimport Logger from '@wemap/logger';\n\nimport Itinerary from '../Itinerary.js';\nimport Leg from '../Leg.js';\nimport RouterResponse from '../RouterResponse.js';\nimport Step from '../Step.js';\nimport { generateStepsMetadata } from '../Utils.js';\n\n/**\n * @param {object} json\n * @returns {Coordinates}\n */\nexport function jsonToCoordinates(json) {\n return new Coordinates(json.Lat, json.Long);\n}\n\n/**\n * @param {string} jsonDate\n * @returns {number}\n */\nfunction jsonDateToTimestamp(jsonDate) {\n const [dateStr, timeStr] = jsonDate.split(' ');\n const [dayStr, monthStr, yearStr] = dateStr.split('/');\n const [hoursStr, minutesStr, secondsStr] = timeStr.split(':');\n const date = new Date(\n Number(yearStr), Number(monthStr) - 1, Number(dayStr),\n Number(hoursStr), Number(minutesStr), Number(secondsStr)\n );\n return date.getTime();\n}\n\n/**\n * @param {string} wktGeometry\n * @returns {Coordinates[]}\n */\nfunction parseWKTGeometry(wktGeometry) {\n const tmpCoordsStr = wktGeometry.match(/LINESTRING \\((.*)\\)/i);\n if (!tmpCoordsStr) {\n return null;\n }\n return tmpCoordsStr[1].split(',').map(str => {\n const sp = str.trim().split(' ');\n return new Coordinates(Number(sp[1]), Number(sp[0]));\n });\n}\n\n/**\n * @param {string} iso8601Duration\n * @see https://stackoverflow.com/a/29153059/2239938\n */\nfunction parseDuration(iso8601Duration) {\n const iso8601DurationRegex = /(-)?P(?:([.,\\d]+)Y)?(?:([.,\\d]+)M)?(?:([.,\\d]+)W)?(?:([.,\\d]+)D)?T(?:([.,\\d]+)H)?(?:([.,\\d]+)M)?(?:([.,\\d]+)S)?/;\n\n var matches = iso8601Duration.match(iso8601DurationRegex);\n\n // const sign = typeof matches[1] === 'undefined' ? '+' : '-',\n const years = typeof matches[2] === 'undefined' ? 0 : Number(matches[2]);\n const months = typeof matches[3] === 'undefined' ? 0 : Number(matches[3]);\n const weeks = typeof matches[4] === 'undefined' ? 0 : Number(matches[4]);\n const days = typeof matches[5] === 'undefined' ? 0 : Number(matches[5]);\n const hours = typeof matches[6] === 'undefined' ? 0 : Number(matches[6]);\n const minutes = typeof matches[7] === 'undefined' ? 0 : Number(matches[7]);\n const seconds = typeof matches[8] === 'undefined' ? 0 : Number(matches[8]);\n\n return seconds\n + minutes * 60\n + hours * 3600\n + days * 86400\n + weeks * (86400 * 7)\n + months * (86400 * 30)\n + years * (86400 * 365.25);\n}\n\n/**\n * Generate multi itineraries from Cityway JSON\n * @param {object} json JSON file provided by Cityway.\n * @returns {?RouterResponse}\n * @example https://preprod.api.lia2.cityway.fr/journeyplanner/api/opt/PlanTrips/json?DepartureLatitude=49.51509388236216&DepartureLongitude=0.09341749619366316&ArrivalLatitude=49.5067090188444&ArrivalLongitude=0.1694842115417831&DepartureType=COORDINATES&ArrivalType=COORDINATES\n */\nexport function createRouterResponseFromJson(json) {\n\n if (json.StatusCode !== 200 || !json.Data || !json.Data.length) {\n return null;\n }\n\n const routerResponse = new RouterResponse();\n routerResponse.routerName = 'cityway';\n\n\n // Do not know if it the best approach, but it works...\n const allJsonTrips = json.Data.reduce((acc, dataObj) => {\n acc.push(...dataObj.response.trips.Trip);\n return acc;\n }, []);\n\n for (const trip of allJsonTrips) {\n\n const itinerary = new Itinerary();\n\n itinerary.duration = parseDuration(trip.Duration);\n itinerary.startTime = jsonDateToTimestamp(trip.Departure.Time);\n itinerary.from = jsonToCoordinates(trip.Departure.Site.Position);\n itinerary.endTime = jsonDateToTimestamp(trip.Arrival.Time);\n itinerary.to = jsonToCoordinates(trip.Arrival.Site.Position);\n routerResponse.itineraries.push(itinerary);\n\n for (const jsonSection of trip.sections.Section) {\n\n const jsonLeg = jsonSection.Leg ? jsonSection.Leg : jsonSection.PTRide;\n\n const leg = new Leg();\n\n leg.mode = jsonLeg.TransportMode;\n leg.duration = parseDuration(jsonLeg.Duration);\n leg.startTime = jsonDateToTimestamp(jsonLeg.Departure.Time);\n leg.endTime = jsonDateToTimestamp(jsonLeg.Arrival.Time);\n leg.coords = [];\n\n if (leg.mode === 'WALK' || leg.mode === 'BICYCLE') {\n\n leg.from = {\n name: jsonLeg.Departure.Site.Name,\n coords: jsonToCoordinates(jsonLeg.Departure.Site.Position)\n };\n leg.to = {\n name: jsonLeg.Arrival.Site.Name,\n coords: jsonToCoordinates(jsonLeg.Arrival.Site.Position)\n };\n\n leg.steps = [];\n for (const jsonPathLink of jsonLeg.pathLinks.PathLink) {\n const step = new Step();\n let stepCoords;\n if (jsonPathLink.Geometry) {\n stepCoords = parseWKTGeometry(jsonPathLink.Geometry);\n } else {\n stepCoords = [leg.from.coords, leg.to.coords];\n }\n step.coords = stepCoords[0];\n step._idCoordsInLeg = leg.coords.length;\n stepCoords.forEach((coords, idx) => {\n if (\n idx !== 0\n || leg.coords.length === 0\n || !leg.coords[leg.coords.length - 1].equalsTo(coords)\n ) {\n leg.coords.push(coords);\n }\n });\n\n\n step.name = jsonPathLink.Departure.Site.Name;\n step.levelChange = null;\n\n step.distance = jsonPathLink.Distance;\n\n leg.steps.push(step);\n }\n\n } else if (leg.mode === 'BUS' || leg.mode === 'TRAMWAY' || leg.mode === 'FUNICULAR') {\n\n leg.from = {\n name: jsonLeg.Departure.StopPlace.Name,\n coords: jsonToCoordinates(jsonLeg.Departure.StopPlace.Position)\n };\n leg.to = {\n name: jsonLeg.Arrival.StopPlace.Name,\n coords: jsonToCoordinates(jsonLeg.Arrival.StopPlace.Position)\n };\n\n let transportName = jsonLeg.Line.Number;\n if (leg.mode === 'TRAMWAY') {\n leg.mode = 'TRAM';\n // In order to remove the \"TRAM \" prefix.\n transportName = transportName.substr(5);\n }\n\n leg.transportInfo = {\n name: transportName,\n routeColor: jsonLeg.Line.Color,\n routeTextColor: jsonLeg.Line.TextColor,\n directionName: jsonLeg.Destination\n };\n\n for (const jsonStep of jsonLeg.steps.Step) {\n const stepCoords = parseWKTGeometry(jsonStep.Geometry);\n stepCoords.forEach((coords, idx) => {\n if (\n idx !== 0\n || leg.coords.length === 0\n || !leg.coords[leg.coords.length - 1].equalsTo(coords)\n ) {\n leg.coords.push(coords);\n }\n });\n }\n\n const legStep = new Step();\n legStep.coords = leg.coords[0];\n legStep._idCoordsInLeg = 0;\n legStep.name = jsonLeg.Line.Name;\n legStep.levelChange = null;\n legStep.distance = jsonLeg.Distance;\n leg.steps = [legStep];\n } else {\n Logger.warn(`[CitywayParser] Unknown leg mode: ${leg.mode}`);\n }\n\n leg.distance = leg.coords.reduce((acc, coords, idx, arr) => {\n if (idx === 0) {\n return acc;\n }\n return acc + arr[idx - 1].distanceTo(coords);\n }, 0);\n\n itinerary.legs.push(leg);\n\n }\n\n itinerary.distance = itinerary.coords.reduce((acc, coords, idx, arr) => {\n if (idx === 0) {\n return acc;\n }\n return acc + arr[idx - 1].distanceTo(coords);\n }, 0);\n\n // All legs have to be parsed before computing steps metadata\n generateStepsMetadata(itinerary);\n }\n\n routerResponse.from = routerResponse.itineraries[0].from;\n routerResponse.to = routerResponse.itineraries[routerResponse.itineraries.length - 1].to;\n\n return routerResponse;\n}\n\n\n","import { GraphProjection } from '@wemap/geo';\n\nimport Leg from '../Leg.js';\nimport Step from '../Step.js';\n\nclass ItineraryInfo {\n\n /** @type {Step} */\n nextStep;\n\n /** @type {Step} */\n previousStep;\n\n /** @type {GraphProjection} */\n projection;\n\n /** @type {Leg} */\n leg;\n\n /** @type {number} */\n traveledDistance;\n\n /** @type {number} */\n traveledPercentage;\n\n /** @type {number} */\n remainingDistance;\n\n /** @type {number} */\n remainingPercentage;\n\n}\n\nexport default ItineraryInfo;\n","/* eslint-disable max-statements */\nimport { Coordinates, GraphEdge, GraphNode, MapMatching, Network } from '@wemap/geo';\n\nimport Itinerary from '../Itinerary.js';\nimport Leg from '../Leg.js';\nimport Step from '../Step.js';\nimport ItineraryInfo from './ItineraryInfo.js';\n\nclass ItineraryInfoManager {\n\n /** @type {Itinerary} */\n _itinerary;\n\n /** @type {Network} */\n _network;\n\n /** @type {Network} */\n _mapMatching;\n\n /** @type {Step[]} */\n _steps;\n\n /** @type {Step[]} */\n _coordsNextStep;\n\n /** @type {Step[]} */\n _coordsPreviousStep;\n\n /** @type {number[]} */\n _coordsDistanceTraveled;\n\n /** @type {Leg[]} */\n _coordsLeg;\n\n /** @type {Itinerary} */\n set itinerary(itinerary) {\n\n if (itinerary === null) {\n this._itinerary = null;\n return;\n }\n\n this._itinerary = itinerary;\n this._steps = itinerary.steps;\n this._network = itinerary.toNetwork();\n this._mapMatching = new MapMatching(this._network);\n\n this._coordsNextStep = new Array(itinerary.coords.length);\n this._coordsPreviousStep = new Array(itinerary.coords.length);\n this._coordsDistanceTraveled = new Array(itinerary.coords.length);\n this._coordsLeg = new Array(itinerary.coords.length);\n\n let stepId = 0;\n let previousStep = null;\n let nextStep = this._steps[0];\n let distanceTraveled = 0;\n\n itinerary.coords.forEach((coords, idx, arr) => {\n if (stepId < this._steps.length && this._steps[stepId].coords.equalsTo(coords)) {\n previousStep = this._steps[stepId];\n nextStep = stepId === this._steps.length - 1 ? null : this._steps[stepId + 1];\n stepId++;\n }\n if (idx !== 0) {\n distanceTraveled += arr[idx - 1].distanceTo(coords);\n }\n\n this._coordsNextStep[idx] = nextStep;\n this._coordsPreviousStep[idx] = previousStep;\n this._coordsDistanceTraveled[idx] = distanceTraveled;\n this._coordsLeg[idx] = itinerary.legs.find(leg => leg.coords.includes(coords));\n });\n }\n\n /**\n * @param {Coordinates} position\n * @returns {ItineraryInfo}\n */\n getInfo(position) {\n\n if (!this._itinerary) {\n return null;\n }\n\n if (!(position instanceof Coordinates)) {\n return null;\n }\n\n const projection = this._mapMatching.getProjection(position);\n if (!projection) {\n return null;\n }\n\n let itineraryInfo = null;\n\n if (projection.nearestElement instanceof GraphNode) {\n const idx = this._itinerary.coords.findIndex(\n coords => projection.nearestElement.coords === coords\n );\n if (idx === -1) {\n throw new Error('ItineraryInfoManager: could not find projection in itinerary (Node)');\n }\n\n itineraryInfo = new ItineraryInfo();\n itineraryInfo.nextStep = this._coordsNextStep[idx];\n itineraryInfo.previousStep = this._coordsPreviousStep[idx];\n itineraryInfo.projection = projection;\n itineraryInfo.leg = this._coordsLeg[idx];\n itineraryInfo.traveledDistance = this._coordsDistanceTraveled[idx];\n itineraryInfo.remainingDistance = this._itinerary.distance - itineraryInfo.traveledDistance;\n itineraryInfo.traveledPercentage = itineraryInfo.traveledDistance / this._itinerary.distance;\n itineraryInfo.remainingPercentage = itineraryInfo.remainingDistance / this._itinerary.distance;\n\n } else if (projection.nearestElement instanceof GraphEdge) {\n\n let firstNode = projection.nearestElement.node1.coords;\n let idx = this._itinerary.coords.findIndex(coords => firstNode === coords);\n if (idx === -1) {\n throw new Error('ItineraryInfoManager: could not find projection in itinerary (Edge)');\n }\n\n // graphEdge is not necessarly ordered. We have to look for the first point\n if (idx === this._itinerary.coords.length - 1\n || this._itinerary.coords[idx + 1] !== projection.nearestElement.node2.coords\n ) {\n firstNode = projection.nearestElement.node2.coords;\n idx--;\n }\n\n itineraryInfo = new ItineraryInfo();\n itineraryInfo.nextStep = this._coordsNextStep[idx];\n itineraryInfo.previousStep = this._coordsPreviousStep[idx];\n itineraryInfo.projection = projection;\n itineraryInfo.leg = this._coordsLeg[idx];\n itineraryInfo.traveledDistance = this._coordsDistanceTraveled[idx]\n + projection.projection.distanceTo(firstNode);\n itineraryInfo.remainingDistance = this._itinerary.distance - itineraryInfo.traveledDistance;\n itineraryInfo.traveledPercentage = itineraryInfo.traveledDistance / this._itinerary.distance;\n itineraryInfo.remainingPercentage = itineraryInfo.remainingDistance / this._itinerary.distance;\n\n }\n\n return itineraryInfo;\n }\n\n}\n\nexport default ItineraryInfoManager;\n"],"names":["jsonToCoordinates","parseJsonSteps","createRouterResponseFromJson"],"mappings":"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"}
|
package/index.js
CHANGED
|
@@ -11,10 +11,11 @@ export { default as OsmRouterOptions } from './src/routers/custom/OsmRouterOptio
|
|
|
11
11
|
export * as OsmRouterUtils from './src/routers/custom/OsmRouterUtils.js';
|
|
12
12
|
export * as OsmNetworkUtils from './src/routers/custom/OsmNetworkUtils.js';
|
|
13
13
|
|
|
14
|
-
/*
|
|
14
|
+
/* Other Routers */
|
|
15
15
|
export * as OsrmUtils from './src/routers/osrm/OsrmUtils.js';
|
|
16
16
|
export * as OtpUtils from './src/routers/otp/OtpUtils.js';
|
|
17
17
|
export * as CitywayUtils from './src/routers/cityway/CitywayUtils.js';
|
|
18
|
+
export * as DeutscheBahnRouterUtils from './src/routers/deutsche-bahn/DeutscheBahnRouterUtils.js';
|
|
18
19
|
|
|
19
20
|
/* Router model */
|
|
20
21
|
export { default as RouterResponse } from './src/routers/RouterResponse.js';
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"directory": "packages/osm"
|
|
12
12
|
},
|
|
13
13
|
"name": "@wemap/osm",
|
|
14
|
-
"version": "5.
|
|
14
|
+
"version": "5.8.0",
|
|
15
15
|
"bugs": {
|
|
16
16
|
"url": "https://github.com/wemap/wemap-modules-js/issues"
|
|
17
17
|
},
|
|
@@ -31,5 +31,5 @@
|
|
|
31
31
|
"@wemap/maths": "^5.6.0",
|
|
32
32
|
"saxes": "^5.0.1"
|
|
33
33
|
},
|
|
34
|
-
"gitHead": "
|
|
34
|
+
"gitHead": "09cd417cec44833c571406d74836ce476ab2a277"
|
|
35
35
|
}
|
package/src/routers/Itinerary.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { Coordinates, Network } from '@wemap/geo';
|
|
3
3
|
import Leg from './Leg.js';
|
|
4
4
|
import Step from './Step.js';
|
|
5
|
+
import OsmRouterOptions from './custom/OsmRouterOptions.js';
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* Main attributes are:
|
|
@@ -134,8 +135,8 @@ class Itinerary {
|
|
|
134
135
|
|
|
135
136
|
const leg = new Leg();
|
|
136
137
|
leg.mode = mode;
|
|
137
|
-
leg.from = from;
|
|
138
|
-
leg.to = to;
|
|
138
|
+
leg.from = { name: null, coords: from };
|
|
139
|
+
leg.to = { name: null, coords: to };
|
|
139
140
|
|
|
140
141
|
leg.coords = points;
|
|
141
142
|
leg.distance = points.reduce((acc, coords, idx, arr) => {
|
|
@@ -144,7 +145,7 @@ class Itinerary {
|
|
|
144
145
|
}
|
|
145
146
|
return acc;
|
|
146
147
|
}, 0);
|
|
147
|
-
leg.duration = leg.distance;
|
|
148
|
+
leg.duration = OsmRouterOptions.getDurationFromLength(leg.distance);
|
|
148
149
|
itinerary.legs.push(leg);
|
|
149
150
|
|
|
150
151
|
itinerary.distance = leg.distance;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/* eslint-disable max-statements */
|
|
2
|
+
|
|
3
|
+
import { Coordinates, GraphEdge, GraphItinerary, GraphNode, Level } from '@wemap/geo';
|
|
4
|
+
|
|
5
|
+
import OsmNode from '../../model/OsmNode.js';
|
|
6
|
+
import OsmWay from '../../model/OsmWay.js';
|
|
7
|
+
import Itinerary from '../Itinerary.js';
|
|
8
|
+
import RouterResponse from '../RouterResponse.js';
|
|
9
|
+
import { generateStepsMetadata } from '../Utils.js';
|
|
10
|
+
import OsmElement from '../../model/OsmElement.js';
|
|
11
|
+
import StepsGeneration from '../custom/StepsGeneration.js';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Generate multi itineraries from the DB JSON
|
|
15
|
+
* @param {object} json JSON file provided by the DB.
|
|
16
|
+
* @param {Coordinates} from itinerary start
|
|
17
|
+
* @param {Coordinates} to itinerary end
|
|
18
|
+
* @returns {?RouterResponse}
|
|
19
|
+
*/
|
|
20
|
+
export function createRouterResponseFromJson(json, from, to) {
|
|
21
|
+
|
|
22
|
+
const { segments: jsonSegments } = json;
|
|
23
|
+
|
|
24
|
+
if (!jsonSegments) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const routerResponse = new RouterResponse();
|
|
29
|
+
routerResponse.routerName = 'deutsche-bahn';
|
|
30
|
+
|
|
31
|
+
routerResponse.from = from;
|
|
32
|
+
routerResponse.to = to;
|
|
33
|
+
|
|
34
|
+
/** @type {GraphEdge<OsmElement>[]} */
|
|
35
|
+
const edges = [];
|
|
36
|
+
|
|
37
|
+
/** @type {GraphNode<OsmElement>[]} */
|
|
38
|
+
const nodes = [];
|
|
39
|
+
|
|
40
|
+
/** @type {number[]} */
|
|
41
|
+
const edgesWeights = [];
|
|
42
|
+
|
|
43
|
+
let id = 1;
|
|
44
|
+
for (const jsonSegment of jsonSegments) {
|
|
45
|
+
|
|
46
|
+
const level = new Level(jsonSegment.fromLevel, jsonSegment.toLevel);
|
|
47
|
+
const osmWay = new OsmWay(id++, null, level);
|
|
48
|
+
|
|
49
|
+
for (const jsonPoint of jsonSegment.polyline) {
|
|
50
|
+
const coord = new Coordinates(jsonPoint.lat, jsonPoint.lon, null, level);
|
|
51
|
+
|
|
52
|
+
if (nodes.length !== 0
|
|
53
|
+
&& nodes[nodes.length - 1].coords.equalsTo(coord)) {
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const osmNode = new OsmNode(id++, coord);
|
|
58
|
+
const node = new GraphNode(osmNode.coords, osmNode);
|
|
59
|
+
|
|
60
|
+
if (nodes.length !== 0) {
|
|
61
|
+
const prevNode = nodes[nodes.length - 1];
|
|
62
|
+
const edge = new GraphEdge(prevNode, node, level, osmWay);
|
|
63
|
+
edges.push(edge);
|
|
64
|
+
edgesWeights.push(prevNode.coords.distanceTo(osmNode));
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
nodes.push(node);
|
|
68
|
+
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** @type {GraphItinerary<OsmElement>} */
|
|
73
|
+
const graphItinerary = new GraphItinerary();
|
|
74
|
+
graphItinerary.nodes = nodes;
|
|
75
|
+
graphItinerary.edges = edges;
|
|
76
|
+
graphItinerary.edgesWeights = edgesWeights;
|
|
77
|
+
graphItinerary.start = nodes[0].coords;
|
|
78
|
+
graphItinerary.end = nodes[nodes.length - 1].coords;
|
|
79
|
+
|
|
80
|
+
const points = nodes.map(node => node.coords);
|
|
81
|
+
const itinerary = Itinerary.fromOrderedCoordinates(points, from, to);
|
|
82
|
+
itinerary.legs[0].steps = StepsGeneration.fromGraphItinerary(graphItinerary);
|
|
83
|
+
itinerary.legs[0].steps.map((step, idx) => (step._idCoordsInLeg = idx));
|
|
84
|
+
|
|
85
|
+
// All legs have to be parsed before computing steps metadata
|
|
86
|
+
generateStepsMetadata(itinerary);
|
|
87
|
+
|
|
88
|
+
routerResponse.itineraries.push(itinerary);
|
|
89
|
+
|
|
90
|
+
return routerResponse;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/* eslint-disable max-statements */
|
|
2
|
+
import chai from 'chai';
|
|
3
|
+
import chaiAlmost from 'chai-almost';
|
|
4
|
+
import fs from 'fs';
|
|
5
|
+
import path from 'path';
|
|
6
|
+
import { fileURLToPath } from 'url';
|
|
7
|
+
|
|
8
|
+
import { Coordinates, Level } from '@wemap/geo';
|
|
9
|
+
|
|
10
|
+
import { createRouterResponseFromJson } from './DeutscheBahnRouterUtils.js';
|
|
11
|
+
|
|
12
|
+
import { verifyRouterResponseData } from '../RouterResponse.type.spec.js';
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
const { expect } = chai;
|
|
16
|
+
chai.use(chaiAlmost(0.1));
|
|
17
|
+
|
|
18
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
19
|
+
|
|
20
|
+
describe('OtpUtils - createRouterResponseFromJson', () => {
|
|
21
|
+
|
|
22
|
+
it('RouterResponse - 1', () => {
|
|
23
|
+
|
|
24
|
+
const filePath = path.resolve(__dirname, '../../../assets/itinerary-deutsche-bahn-1.json');
|
|
25
|
+
const fileString = fs.readFileSync(filePath, 'utf8');
|
|
26
|
+
const json = JSON.parse(fileString);
|
|
27
|
+
|
|
28
|
+
const from = new Coordinates(52.5258473, 13.3683657, null, new Level(-10));
|
|
29
|
+
const to = new Coordinates(52.52499085853664, 13.369467296949914, null, new Level(0));
|
|
30
|
+
|
|
31
|
+
const routerResponse = createRouterResponseFromJson(json, from, to);
|
|
32
|
+
verifyRouterResponseData(routerResponse);
|
|
33
|
+
|
|
34
|
+
expect(routerResponse.routerName).equal('deutsche-bahn');
|
|
35
|
+
expect(routerResponse.itineraries.length).equal(1);
|
|
36
|
+
expect(routerResponse.from.equalsTo(from)).true;
|
|
37
|
+
expect(routerResponse.to.equalsTo(to)).true;
|
|
38
|
+
|
|
39
|
+
const itinerary1 = routerResponse.itineraries[0];
|
|
40
|
+
expect(itinerary1.coords.length).equal(77);
|
|
41
|
+
expect(itinerary1.distance).almost.equal(129.673);
|
|
42
|
+
expect(itinerary1.duration).almost.equal(93.365);
|
|
43
|
+
|
|
44
|
+
const itinerary1leg1 = itinerary1.legs[0];
|
|
45
|
+
expect(itinerary1leg1.distance).almost.equal(129.673);
|
|
46
|
+
expect(itinerary1leg1.mode).equal('WALK');
|
|
47
|
+
expect(itinerary1leg1.from.name).is.null;
|
|
48
|
+
expect(itinerary1leg1.from.coords.equalsTo(from)).true;
|
|
49
|
+
expect(itinerary1leg1.to.name).is.null;
|
|
50
|
+
expect(itinerary1leg1.to.coords.equalsTo(to)).true;
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
});
|
|
54
|
+
|