@wemap/osm 3.2.17 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -81,6 +81,7 @@
81
81
  <nd ref='-440474' />
82
82
  <tag k='highway' v='footway' />
83
83
  <tag k='level' v='2' />
84
+ <tag k='name' v='w2' />
84
85
  </way>
85
86
  <way id='-440500' action='modify' visible='true'>
86
87
  <nd ref='-440464' />
@@ -91,6 +92,7 @@
91
92
  <nd ref='-440480' />
92
93
  <tag k='highway' v='footway' />
93
94
  <tag k='level' v='2' />
95
+ <tag k='name' v='w3' />
94
96
  </way>
95
97
  <way id='-440501' action='modify' visible='true'>
96
98
  <nd ref='-440472' />
@@ -102,6 +104,7 @@
102
104
  <nd ref='-440478' />
103
105
  <tag k='highway' v='footway' />
104
106
  <tag k='level' v='2' />
107
+ <tag k='name' v='w1' />
105
108
  </way>
106
109
  <way id='-440502' action='modify' visible='true'>
107
110
  <nd ref='-440486' />
@@ -110,12 +113,14 @@
110
113
  <nd ref='-440492' />
111
114
  <tag k='highway' v='steps' />
112
115
  <tag k='level' v='1;2' />
116
+ <tag k='name' v='w6' />
113
117
  </way>
114
118
  <way id='-440503' action='modify' visible='true'>
115
119
  <nd ref='-440484' />
116
120
  <nd ref='-440486' />
117
121
  <tag k='highway' v='footway' />
118
122
  <tag k='level' v='2' />
123
+ <tag k='name' v='w5' />
119
124
  </way>
120
125
  <way id='-440504' action='modify' visible='true'>
121
126
  <nd ref='-440492' />
@@ -124,29 +129,34 @@
124
129
  <nd ref='-440496' />
125
130
  <tag k='highway' v='footway' />
126
131
  <tag k='level' v='1' />
132
+ <tag k='name' v='w7' />
127
133
  </way>
128
134
  <way id='-440505' action='modify' visible='true'>
129
135
  <nd ref='-440494' />
130
136
  <nd ref='-440498' />
131
137
  <tag k='highway' v='footway' />
132
138
  <tag k='level' v='1' />
139
+ <tag k='name' v='w9' />
133
140
  </way>
134
141
  <way id='-441188' action='modify' visible='true'>
135
142
  <nd ref='-441184' />
136
143
  <nd ref='-441187' />
137
144
  <tag k='highway' v='footway' />
138
145
  <tag k='level' v='2' />
146
+ <tag k='name' v='w4' />
139
147
  </way>
140
148
  <way id='-441214' action='modify' visible='true'>
141
149
  <nd ref='-441210' />
142
150
  <nd ref='-441187' />
143
151
  <tag k='highway' v='footway' />
144
152
  <tag k='level' v='1' />
153
+ <tag k='name' v='w8' />
145
154
  </way>
146
155
  <way id='-441263' action='modify' visible='true'>
147
156
  <nd ref='-441187' />
148
157
  <nd ref='-441262' />
149
158
  <tag k='highway' v='footway' />
150
159
  <tag k='level' v='0' />
160
+ <tag k='name' v='w10' />
151
161
  </way>
152
162
  </osm>
@@ -1,47 +1,47 @@
1
1
  <?xml version='1.0' encoding='UTF-8'?>
2
- <osm>
3
- <node id='1' lat='43.60933232537' lon='3.88424831515'>
2
+ <osm version='0.6'>
3
+ <node id='-1' lat='43.60933232537' lon='3.88424831515' version='1'>
4
4
  <tag k='highway' v='elevator' />
5
5
  <tag k='level' v='1;3' />
6
- <tag k='name' v='p2' />
6
+ <tag k='name' v='px' />
7
7
  </node>
8
- <node id='2' lat='43.60932786117' lon='3.88427765877'>
8
+ <node id='1' lat='43.60932786117' lon='3.88427765877' version='1'>
9
9
  <tag k='name' v='p1' />
10
10
  </node>
11
- <node id='3' lat='43.60932786111' lon='3.8842776591'>
12
- <tag k='name' v='p3' />
11
+ <node id='2' lat='43.60932786111' lon='3.8842776591' version='1'>
12
+ <tag k='name' v='p2' />
13
13
  </node>
14
- <node id='4' lat='43.60932198746' lon='3.8843159771'>
15
- <tag k='name' v='p4' />
14
+ <node id='3' lat='43.60932198746' lon='3.8843159771' version='1'>
15
+ <tag k='name' v='p3-1' />
16
16
  </node>
17
- <node id='5' lat='43.60932198746' lon='3.8843159771'>
18
- <tag k='name' v='p5' />
17
+ <node id='4' lat='43.60932198746' lon='3.8843159771' version='1'>
18
+ <tag k='name' v='p3-2' />
19
19
  </node>
20
- <way id='101'>
20
+ <way id='101' version='1'>
21
+ <nd ref='-1' />
21
22
  <nd ref='1' />
22
- <nd ref='2' />
23
- <tag k='highway' v='footway'>
23
+ <tag k='highway' v='footway' />
24
24
  <tag k='level' v='1' />
25
25
  <tag k='name' v='w1' />
26
26
  </way>
27
- <way id='102'>
28
- <nd ref='1' />
29
- <nd ref='3' />
30
- <tag k='highway' v='footway'>
27
+ <way id='102' version='1'>
28
+ <nd ref='-1' />
29
+ <nd ref='2' />
30
+ <tag k='highway' v='footway' />
31
31
  <tag k='level' v='2' />
32
32
  <tag k='name' v='w2' />
33
33
  </way>
34
- <way id='103'>
35
- <nd ref='1' />
36
- <nd ref='4' />
37
- <tag k='highway' v='footway'>
34
+ <way id='103' version='1'>
35
+ <nd ref='-1' />
36
+ <nd ref='3' />
37
+ <tag k='highway' v='footway' />
38
38
  <tag k='level' v='3' />
39
- <tag k='name' v='w3' />
39
+ <tag k='name' v='w3-1' />
40
40
  </way>
41
- <way id='104'>
42
- <nd ref='1' />
43
- <nd ref='5' />
44
- <tag k='highway' v='footway'>
41
+ <way id='104' version='1'>
42
+ <nd ref='-1' />
43
+ <nd ref='4' />
44
+ <tag k='highway' v='footway' />
45
45
  <tag k='level' v='3' />
46
46
  <tag k='name' v='w3-2' />
47
47
  </way>
package/index.js CHANGED
@@ -1,19 +1,7 @@
1
- import OsmElement from './src/model/OsmElement.js';
2
- import OsmModel from './src/model/OsmModel.js';
3
- import OsmNetwork from './src/network/OsmNetwork.js';
4
- import OsmNode from './src/model/OsmNode.js';
5
- import OsmParser from './src/model/OsmParser.js';
6
- import OsmRouter from './src/network/OsmRouter.js';
7
- import OsmWay from './src/model/OsmWay.js';
8
- import OsrmUtils from './src/osrm/OsrmUtils.js';
9
-
10
- export {
11
- OsmElement,
12
- OsmModel,
13
- OsmNetwork,
14
- OsmNode,
15
- OsmParser,
16
- OsmRouter,
17
- OsmWay,
18
- OsrmUtils
19
- };
1
+ export { default as OsmElement } from './src/model/OsmElement.js';
2
+ export { default as OsmModel } from './src/model/OsmModel.js';
3
+ export { default as OsmNetworkUtils } from './src/network/OsmNetworkUtils.js';
4
+ export { default as OsmNode } from './src/model/OsmNode.js';
5
+ export { default as OsmParser } from './src/model/OsmParser.js';
6
+ export { default as OsmWay } from './src/model/OsmWay.js';
7
+ export * as OsrmUtils from './src/osrm/OsrmUtils.js';
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "directory": "packages/osm"
12
12
  },
13
13
  "name": "@wemap/osm",
14
- "version": "3.2.17",
14
+ "version": "4.0.0",
15
15
  "bugs": {
16
16
  "url": "https://github.com/wemap/wemap-modules-js/issues"
17
17
  },
@@ -25,11 +25,10 @@
25
25
  ],
26
26
  "license": "ISC",
27
27
  "dependencies": {
28
- "@wemap/geo": "^3.2.17",
29
- "@wemap/graph": "^3.2.17",
30
- "@wemap/logger": "^3.2.17",
31
- "@wemap/maths": "^3.2.17",
28
+ "@wemap/geo": "^4.0.0",
29
+ "@wemap/logger": "^4.0.0",
30
+ "@wemap/maths": "^4.0.0",
32
31
  "sax": "^1.2.4"
33
32
  },
34
- "gitHead": "8b5e0144472bfaa8e07ac24cb227294c83a7541a"
33
+ "gitHead": "8b72858590fc2ff33fbea4f090de8cd353a7445f"
35
34
  }
@@ -50,6 +50,7 @@ class OsmModel {
50
50
  getWayByName(name) {
51
51
  return this.ways.find(way => way.tags.name === name) || null;
52
52
  }
53
+
53
54
  }
54
55
 
55
56
  export default OsmModel;
@@ -8,15 +8,17 @@ class OsmWay extends OsmElement {
8
8
  /** @type {OsmNode[]} */
9
9
  nodes = [];
10
10
 
11
- /** @type {Level} */
11
+ /** @type {?Level} */
12
12
  level = null;
13
13
 
14
14
  /**
15
15
  * @param {number} id
16
16
  * @param {object} tags
17
+ * @param {?Level} level
17
18
  */
18
- constructor(id, tags) {
19
+ constructor(id, tags, level) {
19
20
  super(id, tags);
21
+ this.level = level || null;
20
22
  }
21
23
 
22
24
  /**
@@ -0,0 +1,159 @@
1
+ import { Level, Edge, Node, Network } from '@wemap/geo';
2
+
3
+ import OsmModel from '../model/OsmModel.js';
4
+ import OsmNode from '../model/OsmNode.js';
5
+
6
+
7
+ class OsmNetworkUtils {
8
+
9
+ static HIGHWAYS_PEDESTRIANS = ['footway', 'steps', 'pedestrian', 'living_street', 'path', 'track', 'sidewalk'];
10
+ static DEFAULT_WAY_SELECTOR = way => this.HIGHWAYS_PEDESTRIANS.includes(way.tags.highway) || way.tags.footway === 'sidewalk';
11
+
12
+ /**
13
+ * @param {OsmModel} osmModel
14
+ * @param {function} _waySelectionFilter
15
+ * @returns {Network}
16
+ */
17
+ static createNetworkFromOsmModel(osmModel, waySelectionFilter = this.DEFAULT_WAY_SELECTOR) {
18
+
19
+ const networkModel = new Network();
20
+
21
+ const nodesCreated = {};
22
+ const elevatorNodes = [];
23
+
24
+ /**
25
+ * @param {OsmNode} osmNode
26
+ */
27
+ const getOrCreateNode = osmNode => {
28
+ let node = nodesCreated[osmNode.id];
29
+ if (!node) {
30
+ node = new Node(osmNode.coords);
31
+ this._applyNodePropertiesFromTags(node, osmNode.tags);
32
+ nodesCreated[osmNode.id] = node;
33
+ networkModel.nodes.push(node);
34
+
35
+ if (osmNode.tags.highway === 'elevator') {
36
+ elevatorNodes.push(node);
37
+ }
38
+ }
39
+ return node;
40
+ };
41
+
42
+ osmModel.ways.forEach(way => {
43
+ if (!waySelectionFilter(way)) {
44
+ return;
45
+ }
46
+
47
+ let firstNode = getOrCreateNode(way.nodes[0]);
48
+ for (let i = 1; i < way.nodes.length; i++) {
49
+ const secondNode = getOrCreateNode(way.nodes[i]);
50
+
51
+ const edge = new Edge(firstNode, secondNode);
52
+ edge.level = way.level;
53
+ this._applyEdgePropertiesFromTags(edge, way.tags);
54
+ networkModel.edges.push(edge);
55
+
56
+ firstNode = secondNode;
57
+ }
58
+
59
+ });
60
+
61
+ elevatorNodes.forEach(node => {
62
+ // We have to clone this node for each connected edge
63
+ this._createNodesAndEdgesFromElevator(networkModel, node);
64
+ });
65
+
66
+ Node.generateNodesLevels(networkModel.nodes);
67
+
68
+ return networkModel;
69
+ }
70
+
71
+
72
+ /**
73
+ * @param {node} node
74
+ * @param {object} tags
75
+ */
76
+ static _applyNodePropertiesFromTags(node, tags) {
77
+ node.name = tags.name || null;
78
+ }
79
+
80
+ /**
81
+ * @param {Edge} edge
82
+ * @param {object} tags
83
+ */
84
+ static _applyEdgePropertiesFromTags(edge, tags) {
85
+ const { highway, oneway, conveying, name } = tags;
86
+ edge.name = name || null;
87
+ edge.isStairs = highway === 'steps';
88
+ edge.isConveying = 'conveying' in tags;
89
+ edge.isOneway = Boolean((oneway === 'yes' || oneway === 'true' || oneway === '1')
90
+ || (conveying && highway && ['yes', 'forward', 'backward'].includes(conveying)));
91
+
92
+ if (conveying === 'backward') {
93
+ const tmpNode = edge.node1;
94
+ edge.node1 = edge.node2;
95
+ edge.node2 = tmpNode;
96
+ }
97
+
98
+ }
99
+
100
+ /**
101
+ * @param {Network} networkModel
102
+ * @param {Node} node
103
+ */
104
+ static _createNodesAndEdgesFromElevator(networkModel, node) {
105
+
106
+ /** @type {Node[]} */
107
+ const createdNodes = [];
108
+ const getOrCreateLevelNode = level => {
109
+ let levelNode = createdNodes.find(({ coords }) => Level.equalsTo(level, coords.level));
110
+ if (!levelNode) {
111
+ levelNode = node.clone();
112
+ levelNode.applyProperties(node.extractProperties());
113
+ levelNode.coords.level = level;
114
+ createdNodes.push(levelNode);
115
+ networkModel.nodes.push(levelNode);
116
+ }
117
+ return levelNode;
118
+ };
119
+
120
+ // Create nodes from node.edges
121
+ node.edges.forEach(edge => {
122
+ if (edge.level.isRange) {
123
+ throw new Error('Cannot handle this elevator edge due to ambiguity');
124
+ }
125
+
126
+ const levelNode = getOrCreateLevelNode(edge.level);
127
+ if (edge.node1 === node) {
128
+ edge.node1 = levelNode;
129
+ } else {
130
+ edge.node2 = levelNode;
131
+ }
132
+ levelNode.edges.push(edge);
133
+ });
134
+
135
+ // Create edges from createdNodes
136
+ for (let i = 0; i < createdNodes.length; i++) {
137
+ for (let j = i + 1; j < createdNodes.length; j++) {
138
+
139
+ const createdNode1 = createdNodes[i];
140
+ const createdNode2 = createdNodes[j];
141
+
142
+ const newEdge = new Edge(
143
+ createdNode1,
144
+ createdNode2,
145
+ new Level(createdNode1.coords.level.val, createdNode2.coords.level.val)
146
+ );
147
+ newEdge.name = node.name;
148
+ newEdge.isElevator = true;
149
+ networkModel.edges.push(newEdge);
150
+ }
151
+ }
152
+
153
+ // Remove the historical elevator node from the network
154
+ networkModel.nodes = networkModel.nodes.filter(_node => _node !== node);
155
+ }
156
+
157
+ }
158
+
159
+ export default OsmNetworkUtils;
@@ -0,0 +1,130 @@
1
+ /* eslint-disable max-statements */
2
+ import chai from 'chai';
3
+ import fs from 'fs';
4
+ import path from 'path';
5
+ import { fileURLToPath } from 'url';
6
+
7
+ import { Network } from '@wemap/geo';
8
+ import { verifyCoherence } from '@wemap/geo/tests/CommonTest.js';
9
+
10
+ import OsmParser from '../model/OsmParser.js';
11
+ import OsmModel from '../model/OsmModel.js';
12
+ import OsmNetworkUtils from './OsmNetworkUtils.js';
13
+
14
+ const { expect } = chai;
15
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
16
+
17
+
18
+ const loadFile = fileName => {
19
+ const filePath = path.resolve(__dirname, '../../assets/' + fileName);
20
+ return fs.readFileSync(filePath, 'utf8');
21
+ };
22
+
23
+ describe('OsmNetwork - simple', () => {
24
+
25
+ /** @type {OsmModel} */
26
+ let osmModel;
27
+
28
+ /** @type {Network} */
29
+ let network;
30
+ const osmXmlString = loadFile('network-simple.osm');
31
+
32
+ it('Network creation', () => {
33
+
34
+ osmModel = OsmParser.parseOsmXmlString(osmXmlString);
35
+ network = OsmNetworkUtils.createNetworkFromOsmModel(osmModel);
36
+
37
+ verifyCoherence(network);
38
+ expect(network.nodes.length).equals(3);
39
+ expect(network.edges.length).equals(2);
40
+ });
41
+
42
+
43
+ it('Network creation - waySelectionFilter', () => {
44
+
45
+ const selectionNetwork = OsmNetworkUtils.createNetworkFromOsmModel(osmModel, () => true);
46
+
47
+ verifyCoherence(selectionNetwork);
48
+ expect(selectionNetwork.nodes.length).equals(4);
49
+ expect(selectionNetwork.edges.length).equals(3);
50
+ });
51
+
52
+ it('Network creation - elevator', () => {
53
+
54
+ const elevatorModel = OsmParser.parseOsmXmlString(loadFile('network-elevator.osm'));
55
+ const elevatorNetwork = OsmNetworkUtils.createNetworkFromOsmModel(elevatorModel);
56
+
57
+ verifyCoherence(elevatorNetwork);
58
+ expect(elevatorNetwork.nodes.length).equals(7);
59
+ expect(elevatorNetwork.edges.length).equals(7);
60
+
61
+
62
+ const osmModel2 = OsmParser.parseOsmXmlString(`
63
+ <osm>
64
+ <node id='1' lat='43' lon='4'>
65
+ <tag k='highway' v='elevator' />
66
+ <tag k='level' v='0;1' />
67
+ </node>
68
+ <node id='2' lat='43' lon='3' />
69
+ <way id='3'>
70
+ <nd ref='1' />
71
+ <nd ref='2' />
72
+ <tag k='highway' v='footway' />
73
+ <tag k='level' v='0;1' />
74
+ </way>
75
+ </osm>
76
+ `);
77
+ expect(() => OsmNetworkUtils.fromOsmModel(osmModel2)).throw(Error);
78
+ });
79
+
80
+ it('getNodeByName', () => {
81
+ let node = network.getNodeByName('p1');
82
+ expect(node).not.undefined;
83
+ expect(node.name).equal('p1');
84
+
85
+ node = network.getNodeByName('p5');
86
+ expect(node).undefined;
87
+ });
88
+
89
+ it('toCompressedJson / fromCompressedJson', () => {
90
+
91
+ // const elevatorModel = OsmParser.parseOsmXmlString(loadFile('network-elevator.osm'));
92
+ // const elevatorNetwork = OsmNetworkUtils.fromOsmModel(elevatorModel);
93
+
94
+ // const json = elevatorNetwork.toCompressedJson();
95
+ // expect(() => JSON.stringify(json)).not.throw(Error);
96
+
97
+ // const elevatorNetworkBis = Network.fromCompressedJson(json);
98
+
99
+ // verifyCoherence(elevatorNetwork);
100
+ // expect(elevatorNetwork.edges.length).equal(elevatorNetworkBis.edges.length);
101
+ // expect(elevatorNetwork.nodes.length).equal(elevatorNetworkBis.nodes.length);
102
+ // elevatorNetwork.edges.forEach((edge, idx) => {
103
+ // expect(edge.properties.id).equal(elevatorNetworkBis.edges[idx].properties.id);
104
+ // expect(edge.properties.tags).deep.equal(elevatorNetworkBis.edges[idx].properties.tags);
105
+ // });
106
+
107
+ });
108
+ });
109
+
110
+
111
+ describe('OsmNetwork - with stairs', () => {
112
+
113
+ /** @type {OsmModel} */
114
+ let osmModel;
115
+
116
+ /** @type {Network} */
117
+ let network;
118
+ const osmXmlString = loadFile('bureaux-wemap-montpellier-network.osm');
119
+
120
+ it('Network creation', () => {
121
+
122
+ osmModel = OsmParser.parseOsmXmlString(osmXmlString);
123
+ network = OsmNetworkUtils.createNetworkFromOsmModel(osmModel);
124
+
125
+ verifyCoherence(network);
126
+
127
+ expect(network.getEdgeByName('w6').isStairs).true;
128
+ });
129
+
130
+ });
@@ -5,13 +5,12 @@ import path from 'path';
5
5
  import { fileURLToPath } from 'url';
6
6
 
7
7
  import {
8
- Level, Coordinates
8
+ Level, Coordinates, Node, Network, GraphRouter, Itinerary
9
9
  } from '@wemap/geo';
10
- import { Node } from '@wemap/graph';
10
+ import { verifyCoherence } from '@wemap/geo/tests/CommonTest.js';
11
11
 
12
12
  import OsmParser from '../model/OsmParser.js';
13
- import OsmRouter from './OsmRouter.js';
14
- import OsmNetwork from './OsmNetwork.js';
13
+ import OsmNetworkUtils from './OsmNetworkUtils.js';
15
14
 
16
15
  const { expect } = chai;
17
16
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
@@ -20,20 +19,24 @@ const itineraryStart = new Coordinates(43.6092754, 3.8842306, null, new Level(2)
20
19
  const itineraryEnd = new Coordinates(43.6092602, 3.8842669, null, new Level(1));
21
20
 
22
21
 
22
+ /**
23
+ * @param {string} fileName
24
+ * @returns {Network}
25
+ */
23
26
  const loadNetwork = fileName => {
24
27
  const filePath = path.resolve(__dirname, '../../assets/' + fileName);
25
28
  const osmXmlString = fs.readFileSync(filePath, 'utf8');
26
29
  const osmModel = OsmParser.parseOsmXmlString(osmXmlString);
27
- return OsmNetwork.fromOsmModel(osmModel);
30
+ return OsmNetworkUtils.createNetworkFromOsmModel(osmModel);
28
31
  };
29
32
 
30
33
  const verifyNodesOrder = (nodes, names) => {
31
34
  expect(nodes.length).equals(names.length);
32
35
  for (let i = 0; i < names.length; i++) {
33
- if (!nodes[i].data || !nodes[i].data.tags || !nodes[i].data.tags.name) {
36
+ if (!nodes[i].name) {
34
37
  expect(names[i]).is.null;
35
38
  } else {
36
- expect(names[i]).equals(nodes[i].data.tags.name);
39
+ expect(names[i]).equals(nodes[i].name);
37
40
  }
38
41
  }
39
42
  };
@@ -44,7 +47,7 @@ const generateNodeNames = (start, end) =>
44
47
  describe('OsmRouter - Multi-level itinerary', () => {
45
48
 
46
49
  const networkModel = loadNetwork('bureaux-wemap-montpellier-network.osm');
47
- const router = new OsmRouter(networkModel);
50
+ const router = new GraphRouter(networkModel);
48
51
 
49
52
  const itinerary = router.getShortestPath(itineraryStart, itineraryEnd);
50
53
 
@@ -58,7 +61,7 @@ describe('OsmRouter - Multi-level itinerary', () => {
58
61
 
59
62
  it('Router return shortest path', () => {
60
63
  expect(itinerary.nodes.length).equal(11);
61
- verifyNodesOrder(itinerary.nodes, [null, ...generateNodeNames(7, 16)]);
64
+ verifyNodesOrder(itinerary.nodes, ['w2', ...generateNodeNames(7, 16)]);
62
65
  });
63
66
 
64
67
  it('Verify steps', () => {
@@ -66,7 +69,7 @@ describe('OsmRouter - Multi-level itinerary', () => {
66
69
  const steps = itinerary.steps;
67
70
  expect(steps.length).equal(8);
68
71
 
69
- verifyNodesOrder(steps[0].nodes, [null, 'p7', 'p8']);
72
+ verifyNodesOrder(steps[0].nodes, ['w2', 'p7', 'p8']);
70
73
  verifyNodesOrder(steps[1].nodes, ['p8', 'p9']);
71
74
  verifyNodesOrder(steps[2].nodes, ['p9', 'p10']);
72
75
  verifyNodesOrder(steps[3].nodes, ['p10', 'p11']);
@@ -84,16 +87,24 @@ describe('OsmRouter - Multi-level itinerary', () => {
84
87
  const itinerary2 = router.getShortestPath(start, end);
85
88
 
86
89
  expect(itinerary2.nodes.length).equal(3);
87
- expect(itinerary2.nodes[1].data.tags.name).equal('p6');
88
- expect(itinerary2.nodes[2].data.tags.name).equal('p5');
90
+ expect(itinerary2.nodes[1].name).equal('p6');
91
+ expect(itinerary2.nodes[2].name).equal('p5');
89
92
  });
90
93
 
91
94
  it('do not use stairs', () => {
92
95
  const itineraryWithoutStairs = router.getShortestPath(itineraryStart, itineraryEnd, { useStairs: false });
93
96
  expect(itineraryWithoutStairs.nodes.length).equal(11);
94
- expect(itineraryWithoutStairs.nodes[6].data.isElevator).is.true;
95
- expect(itineraryWithoutStairs.nodes[7].data.isElevator).is.true;
96
- expect(itineraryWithoutStairs.edges[6].data.isElevator).is.true;
97
+ expect(itineraryWithoutStairs.edges.some(edge => edge.isStairs)).false;
98
+ });
99
+
100
+ it('toCompressedJson / fromCompressedJson', () => {
101
+ const json = itinerary.toCompressedJson();
102
+ expect(() => JSON.stringify(json)).not.throw(Error);
103
+
104
+ const itineraryBis = Itinerary.fromCompressedJson(json);
105
+ verifyCoherence(itineraryBis);
106
+ expect(itineraryBis.nodes.length).equal(11);
107
+ verifyNodesOrder(itineraryBis.nodes, ['w2', ...generateNodeNames(7, 16)]);
97
108
  });
98
109
 
99
110
  });
@@ -101,7 +112,7 @@ describe('OsmRouter - Multi-level itinerary', () => {
101
112
  describe('OsmRouter - One Way itinerary', () => {
102
113
 
103
114
  const networkModel = loadNetwork('one-way.osm');
104
- const router = new OsmRouter(networkModel);
115
+ const router = new GraphRouter(networkModel);
105
116
 
106
117
  it('do not use oneway', () => {
107
118
 
@@ -122,7 +133,7 @@ describe('OsmRouter - One Way itinerary', () => {
122
133
  describe('OsmRouter - Conveying', () => {
123
134
 
124
135
  const networkModel = loadNetwork('gare-de-lyon-extract.osm');
125
- const router = new OsmRouter(networkModel);
136
+ const router = new GraphRouter(networkModel);
126
137
 
127
138
  it('do not use oneway conveying', () => {
128
139
 
@@ -143,7 +154,7 @@ describe('OsmRouter - Conveying', () => {
143
154
  describe('OsmRouter - Conveying - backward', () => {
144
155
 
145
156
  const networkModel = loadNetwork('network-conveying-backward.osm');
146
- const router = new OsmRouter(networkModel);
157
+ const router = new GraphRouter(networkModel);
147
158
 
148
159
  it('do not use oneway conveying', () => {
149
160