@wemap/routers 10.0.0-alpha.1 → 10.0.0-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.js CHANGED
@@ -12,7 +12,6 @@ export { default as ItineraryInfo } from './src/model/ItineraryInfo.js';
12
12
  export { default as WemapRouter } from './src/wemap/WemapRouter.js';
13
13
  export { default as WemapRouterOptions } from './src/wemap/WemapRouterOptions.js';
14
14
  export * as WemapRouterUtils from './src/wemap/WemapRouterUtils.js';
15
- export * as WemapNetworkUtils from './src/wemap/WemapNetworkUtils.js';
16
15
  export { default as WemapMetaRouter } from './src/wemap-meta/WemapMetaRouter.js';
17
16
  export { default as WemapMetaRouterOptions } from './src/wemap-meta/WemapMetaRouterOptions.js';
18
17
  export { default as WemapMetaRouterIOMap } from './src/wemap-meta/IOMap.js';
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "directory": "packages/routers"
12
12
  },
13
13
  "name": "@wemap/routers",
14
- "version": "10.0.0-alpha.1",
14
+ "version": "10.0.0-alpha.10",
15
15
  "bugs": {
16
16
  "url": "https://github.com/wemap/wemap-modules-js/issues"
17
17
  },
@@ -29,10 +29,10 @@
29
29
  "@turf/boolean-point-in-polygon": "^6.5.0",
30
30
  "@turf/convex": "^6.5.0",
31
31
  "@turf/helpers": "^6.5.0",
32
- "@wemap/geo": "^10.0.0-alpha.1",
33
- "@wemap/logger": "^9.0.0",
34
- "@wemap/maths": "^9.0.0",
35
- "@wemap/osm": "^10.0.0-alpha.1"
32
+ "@wemap/geo": "^10.0.0-alpha.10",
33
+ "@wemap/logger": "^10.0.0-alpha.8",
34
+ "@wemap/maths": "^10.0.0-alpha.10",
35
+ "@wemap/osm": "^10.0.0-alpha.10"
36
36
  },
37
- "gitHead": "21ba33bd03930c68e3f358534ba95936ad965e34"
37
+ "gitHead": "5970289ef2b1f06f9df382878f72bf48f57c4c00"
38
38
  }
@@ -63,8 +63,7 @@ const TRANSPORT_IDS = [
63
63
  'physical_mode:Tramway'
64
64
  ];
65
65
 
66
- const clientId = '539eec73-3bb5-4327-bb5e-a52672658592';
67
- const clientSecret = '899f4bb9-f1d5-45d3-9f67-530827bb6734';
66
+ const apiKey = 'qWHj6ax6DMttG8DX6tH9CQARaiTgQ1Di';
68
67
 
69
68
  /**
70
69
  * Get last item of a given array
@@ -80,10 +79,6 @@ function last(array) {
80
79
  */
81
80
  class IdfmRemoteRouter extends RemoteRouter {
82
81
 
83
- isLogged = false;
84
- token = null;
85
- expiresAt = null;
86
-
87
82
  /**
88
83
  * @override
89
84
  */
@@ -97,15 +92,11 @@ class IdfmRemoteRouter extends RemoteRouter {
97
92
  * @throws {RemoteRouterServerUnreachable}
98
93
  */
99
94
  async getItineraries(endpointUrl, mode, waypoints) {
100
- if (!this.canRequestService()) {
101
- await this._connect();
102
- }
103
-
104
95
  const url = this.getURL(endpointUrl, mode, waypoints);
105
96
 
106
97
  const res = await (fetch(url, {
107
98
  method: 'GET',
108
- headers: { Authorization: 'Bearer ' + this.token }
99
+ headers: { apiKey }
109
100
  }).catch(() => {
110
101
  throw new RemoteRouterServerUnreachable(this.rname, url);
111
102
  }));
@@ -130,52 +121,6 @@ class IdfmRemoteRouter extends RemoteRouter {
130
121
  return this.createRouterResponseFromJson(jsonResponse, waypoints[0], waypoints[1]);
131
122
  }
132
123
 
133
- /**
134
- * @throws {IdfmRemoteRouterTokenError}
135
- */
136
- async _connect() {
137
-
138
- const details = {
139
- 'grant_type': 'client_credentials',
140
- 'scope': 'read-data',
141
- 'client_id': clientId,
142
- 'client_secret': clientSecret
143
- };
144
-
145
- const data = new URLSearchParams();
146
- for (const property in details) {
147
- if (details.hasOwnProperty(property)) {
148
- const encodedKey = encodeURIComponent(property);
149
- const encodedValue = encodeURIComponent(details[property]);
150
- data.append(encodedKey, encodedValue);
151
- }
152
- }
153
-
154
- const headers = new Headers({
155
- 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
156
- });
157
-
158
- const res = await fetch('https://idfm.getwemap.com/api/oauth/token', {
159
- method: 'POST',
160
- body: data,
161
- headers
162
- });
163
- if (res.status !== 200) {
164
- throw new IdfmRemoteRouterTokenError();
165
- }
166
- const response = await res.json();
167
-
168
- if (response.access_token) {
169
- this.token = response.access_token;
170
- this.isLogged = true;
171
- this.expiresAt = new Date(new Date().getTime() + response.expires_in * 1000);
172
- }
173
- }
174
-
175
- canRequestService() {
176
- return this.token && this.expiresAt && this.expiresAt - new Date() > 0;
177
- }
178
-
179
124
  /**
180
125
  * @param {string} endpointUrl
181
126
  * @param {string} mode
@@ -6,13 +6,11 @@ import path from 'path';
6
6
  import { fileURLToPath } from 'url';
7
7
 
8
8
  import { Coordinates, GraphNode, Network, GraphItinerary } from '@wemap/geo';
9
- import { OsmElement, OsmParser } from '@wemap/osm';
10
-
9
+ import { OsmElement, OsmParser, OsmNetworkUtils } from '@wemap/osm';
11
10
 
12
11
  import WemapRouter from './WemapRouter.js';
13
12
  import WemapRouterOptions from './WemapRouterOptions.js';
14
13
  import WemapStepsGeneration from './WemapStepsGeneration.js';
15
- import { createNetworkFromOsmModel, getNodeByName } from './WemapNetworkUtils.js';
16
14
 
17
15
  import LevelChange from '../model/LevelChange.js';
18
16
 
@@ -20,6 +18,7 @@ const { expect } = chai;
20
18
  chai.use(chaiAlmost(0.01));
21
19
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
22
20
 
21
+ const { createNetworkFromOsmModel, getNodeByName } = OsmNetworkUtils;
23
22
 
24
23
  /**
25
24
  * @param {GraphItinerary<OsmElement>} _itinerary
@@ -39,7 +38,7 @@ const itineraryEnd = new Coordinates(43.6092602, 3.8842669, null, 1);
39
38
  * @returns {Network}
40
39
  */
41
40
  const loadNetwork = fileName => {
42
- const filePath = path.resolve(__dirname, '../../assets/' + fileName);
41
+ const filePath = path.resolve(__dirname, '../../../osm/assets/' + fileName);
43
42
  const osmXmlString = fs.readFileSync(filePath, 'utf8');
44
43
  const osmModel = OsmParser.parseOsmXmlString(osmXmlString);
45
44
  return createNetworkFromOsmModel(osmModel);
@@ -3,8 +3,8 @@ import convexHullFn from '@turf/convex';
3
3
  import { polygon as turfPolygon } from '@turf/helpers';
4
4
 
5
5
  import { Coordinates, GraphNode, GraphRouter, Network, NoRouteFoundError } from '@wemap/geo';
6
- import { OsmParser } from '@wemap/osm';
7
- import { Itinerary, WemapNetworkUtils, WemapRouterOptions, WemapRouterUtils } from '@wemap/routers';
6
+ import { OsmParser, OsmNetworkUtils } from '@wemap/osm';
7
+ import { Itinerary, WemapRouterOptions, WemapRouterUtils } from '@wemap/routers';
8
8
 
9
9
  import Constants from '../Constants.js';
10
10
 
@@ -64,7 +64,7 @@ class IOMap {
64
64
  static fromOsmXml(osmXmlString, name = null) {
65
65
 
66
66
  const osmModel = OsmParser.parseOsmXmlString(osmXmlString);
67
- const network = WemapNetworkUtils.createNetworkFromOsmModel(osmModel);
67
+ const network = OsmNetworkUtils.createNetworkFromOsmModel(osmModel);
68
68
 
69
69
  const entryPoints = osmModel.nodes
70
70
  .filter(({ tags }) => tags && tags['wemap:routing-io'])
@@ -103,7 +103,7 @@ class IOMap {
103
103
  getOrderedEntryPointsSortedByDistance(start, end) {
104
104
  const entryPointsCopy = [...this.entryPoints];
105
105
  return entryPointsCopy.sort((ep1, ep2) =>
106
- + ep1.coords.distanceTo(start) + ep1.coords.distanceTo(end)
106
+ Number(ep1.coords.distanceTo(start)) + ep1.coords.distanceTo(end)
107
107
  - ep2.coords.distanceTo(start) - ep2.coords.distanceTo(end)
108
108
  );
109
109
  }
@@ -31,7 +31,7 @@ function mockFetchWithJsonAsset(assetName) {
31
31
  }
32
32
 
33
33
  function createIOMapFromAsset(assetName) {
34
- const filePath = path.resolve(__dirname, '../../assets/' + assetName);
34
+ const filePath = path.resolve(__dirname, '../../../osm/assets/' + assetName);
35
35
  const osmXmlString = fs.readFileSync(filePath, 'utf8');
36
36
  const mapName = path.parse(assetName).name;
37
37
  return IOMap.fromOsmXml(osmXmlString, mapName);
@@ -1,163 +0,0 @@
1
- <?xml version='1.0' encoding='UTF-8'?>
2
- <osm version='0.6' generator='JOSM'>
3
- <node id='-460666' action='modify' visible='true' lat='48.87260236152' lon='2.34329666635' />
4
- <node id='-460667' action='modify' visible='true' lat='48.87250549777' lon='2.34328663305' />
5
- <node id='-460668' action='modify' visible='true' lat='48.87254375114' lon='2.34328204154' />
6
- <node id='-460669' action='modify' visible='true' lat='48.87256254226' lon='2.34328272177' />
7
- <node id='-460670' action='modify' visible='true' lat='48.87256546238' lon='2.3433422765' />
8
- <node id='-460671' action='modify' visible='true' lat='48.87249229923' lon='2.34346145052' />
9
- <node id='-460672' action='modify' visible='true' lat='48.87250820089' lon='2.34335069759' />
10
- <node id='-460673' action='modify' visible='true' lat='48.87250633659' lon='2.34330651324' />
11
- <node id='-460674' action='modify' visible='true' lat='48.87249106885' lon='2.34330823015' />
12
- <node id='-460675' action='modify' visible='true' lat='48.87248804885' lon='2.34333390859' />
13
- <node id='-460676' action='modify' visible='true' lat='48.87250347283' lon='2.34338322091' />
14
- <node id='-460677' action='modify' visible='true' lat='48.87247865327' lon='2.3433874762' />
15
- <node id='-460678' action='modify' visible='true' lat='48.87246936955' lon='2.34345396806' />
16
- <node id='-460679' action='modify' visible='true' lat='48.8725047148' lon='2.34346519175' />
17
- <node id='-460680' action='modify' visible='true' lat='48.87252014738' lon='2.34328487468' />
18
- <node id='-460681' action='modify' visible='true' lat='48.87252306794' lon='2.34334851119' />
19
- <node id='-460682' action='modify' visible='true' lat='48.87254679656' lon='2.34334502157' />
20
- <node id='-460683' action='modify' visible='true' lat='48.87255583689' lon='2.34334369207' />
21
- <node id='-460684' action='modify' visible='true' lat='48.87255247559' lon='2.34338781631' />
22
- <node id='-460685' action='modify' visible='true' lat='48.872553574' lon='2.34337339741' />
23
- <node id='-460686' action='modify' visible='true' lat='48.87258124098' lon='2.34333589031' />
24
- <node id='-460687' action='modify' visible='true' lat='48.8725647793' lon='2.34345056694' />
25
- <node id='-460688' action='modify' visible='true' lat='48.87256316665' lon='2.3432954559' />
26
- <node id='-460689' action='modify' visible='true' lat='48.87259140004' lon='2.34329003417' />
27
- <node id='-460690' action='modify' visible='true' lat='48.87257537018' lon='2.34337678796' />
28
- <node id='-460691' action='modify' visible='true' lat='48.87259587423' lon='2.34338390486' />
29
- <node id='-460692' action='modify' visible='true' lat='48.87258513645' lon='2.34345736901' />
30
- <node id='-460693' action='modify' visible='true' lat='48.87249947934' lon='2.34334343153' />
31
- <node id='-460694' action='modify' visible='true' lat='48.87249408198' lon='2.34338483096' />
32
- <node id='-460695' action='modify' visible='true' lat='48.8725017692' lon='2.34336624663' />
33
- <node id='-460696' action='modify' visible='true' lat='48.87258943336' lon='2.34352007038' />
34
- <node id='-460697' action='modify' visible='true' lat='48.87245061393' lon='2.34347443088' />
35
- <node id='-460698' action='modify' visible='true' lat='48.8726203618' lon='2.3433075471' />
36
- <node id='-460699' action='modify' visible='true' lat='48.87247787613' lon='2.34327167268' />
37
- <node id='-460700' action='modify' visible='true' lat='48.87259588375' lon='2.34325390292' />
38
- <node id='-460702' action='modify' visible='true' lat='48.87262168252' lon='2.34327125172'>
39
- <tag k='wemap:routing-io' v='yes' />
40
- </node>
41
- <way id='-460630' action='modify' visible='true'>
42
- <nd ref='-460666' />
43
- <nd ref='-460686' />
44
- <nd ref='-460670' />
45
- <nd ref='-460683' />
46
- <nd ref='-460682' />
47
- <nd ref='-460681' />
48
- <nd ref='-460672' />
49
- <nd ref='-460673' />
50
- <nd ref='-460667' />
51
- <nd ref='-460680' />
52
- <nd ref='-460668' />
53
- <nd ref='-460669' />
54
- <nd ref='-460688' />
55
- <nd ref='-460670' />
56
- <tag k='highway' v='footway' />
57
- </way>
58
- <way id='-460631' action='modify' visible='true'>
59
- <nd ref='-460671' />
60
- <nd ref='-460676' />
61
- <nd ref='-460672' />
62
- <tag k='highway' v='footway' />
63
- </way>
64
- <way id='-460632' action='modify' visible='true'>
65
- <nd ref='-460673' />
66
- <nd ref='-460674' />
67
- <nd ref='-460675' />
68
- <nd ref='-460693' />
69
- <nd ref='-460672' />
70
- <tag k='highway' v='footway' />
71
- </way>
72
- <way id='-460633' action='modify' visible='true'>
73
- <nd ref='-460676' />
74
- <nd ref='-460694' />
75
- <nd ref='-460677' />
76
- <nd ref='-460678' />
77
- <nd ref='-460671' />
78
- <tag k='highway' v='footway' />
79
- </way>
80
- <way id='-460634' action='modify' visible='true'>
81
- <nd ref='-460671' />
82
- <nd ref='-460679' />
83
- <tag k='highway' v='footway' />
84
- </way>
85
- <way id='-460635' action='modify' visible='true'>
86
- <nd ref='-460680' />
87
- <nd ref='-460681' />
88
- <tag k='highway' v='footway' />
89
- </way>
90
- <way id='-460636' action='modify' visible='true'>
91
- <nd ref='-460668' />
92
- <nd ref='-460682' />
93
- <tag k='highway' v='footway' />
94
- </way>
95
- <way id='-460637' action='modify' visible='true'>
96
- <nd ref='-460683' />
97
- <nd ref='-460685' />
98
- <nd ref='-460684' />
99
- <nd ref='-460685' />
100
- <tag k='highway' v='footway' />
101
- </way>
102
- <way id='-460638' action='modify' visible='true'>
103
- <nd ref='-460685' />
104
- <nd ref='-460681' />
105
- <tag k='highway' v='footway' />
106
- </way>
107
- <way id='-460639' action='modify' visible='true'>
108
- <nd ref='-460685' />
109
- <nd ref='-460682' />
110
- <tag k='highway' v='footway' />
111
- </way>
112
- <way id='-460640' action='modify' visible='true'>
113
- <nd ref='-460691' />
114
- <nd ref='-460686' />
115
- <nd ref='-460690' />
116
- <nd ref='-460687' />
117
- <tag k='highway' v='footway' />
118
- </way>
119
- <way id='-460641' action='modify' visible='true'>
120
- <nd ref='-460688' />
121
- <nd ref='-460689' />
122
- <nd ref='-460666' />
123
- <tag k='highway' v='footway' />
124
- </way>
125
- <way id='-460642' action='modify' visible='true'>
126
- <nd ref='-460690' />
127
- <nd ref='-460691' />
128
- <nd ref='-460692' />
129
- <tag k='highway' v='footway' />
130
- </way>
131
- <way id='-460643' action='modify' visible='true'>
132
- <nd ref='-460666' />
133
- <nd ref='-460691' />
134
- <tag k='highway' v='footway' />
135
- </way>
136
- <way id='-460644' action='modify' visible='true'>
137
- <nd ref='-460676' />
138
- <nd ref='-460695' />
139
- <nd ref='-460693' />
140
- <nd ref='-460694' />
141
- <tag k='highway' v='footway' />
142
- </way>
143
- <way id='-460645' action='modify' visible='true'>
144
- <nd ref='-460672' />
145
- <nd ref='-460695' />
146
- <nd ref='-460694' />
147
- <tag k='highway' v='footway' />
148
- </way>
149
- <way id='-460646' action='modify' visible='true'>
150
- <nd ref='-460700' />
151
- <nd ref='-460698' />
152
- <nd ref='-460696' />
153
- <nd ref='-460697' />
154
- <nd ref='-460699' />
155
- <nd ref='-460700' />
156
- <tag k='wemap:routing-bounds' v='yes' />
157
- </way>
158
- <way id='-460648' action='modify' visible='true'>
159
- <nd ref='-460666' />
160
- <nd ref='-460702' />
161
- <tag k='highway' v='footway' />
162
- </way>
163
- </osm>
@@ -1,174 +0,0 @@
1
- <?xml version='1.0' encoding='UTF-8'?>
2
- <osm version='0.6' generator='JOSM'>
3
- <node id='-440460' action='modify' visible='true' lat='43.60927603206' lon='3.88424673798'>
4
- <tag k='name' v='p7' />
5
- </node>
6
- <node id='-440462' action='modify' visible='true' lat='43.60913609818' lon='3.88411091795'>
7
- <tag k='name' v='p3' />
8
- </node>
9
- <node id='-440464' action='modify' visible='true' lat='43.60929353543' lon='3.88425183223'>
10
- <tag k='name' v='p8' />
11
- </node>
12
- <node id='-440466' action='modify' visible='true' lat='43.60930219142' lon='3.88427017086'>
13
- <tag k='name' v='p9' />
14
- </node>
15
- <node id='-440468' action='modify' visible='true' lat='43.60911942685' lon='3.88422017773'>
16
- <tag k='name' v='p4' />
17
- </node>
18
- <node id='-440470' action='modify' visible='true' lat='43.60935581261' lon='3.88428577699'>
19
- <tag k='name' v='p22' />
20
- </node>
21
- <node id='-440472' action='modify' visible='true' lat='43.60919651074' lon='3.88412853633'>
22
- <tag k='name' v='p1' />
23
- </node>
24
- <node id='-440474' action='modify' visible='true' lat='43.60931199709' lon='3.88413083832'>
25
- <tag k='name' v='p25' />
26
- </node>
27
- <node id='-440476' action='modify' visible='true' lat='43.60917494597' lon='3.88421731753'>
28
- <tag k='name' v='p6' />
29
- </node>
30
- <node id='-440478' action='modify' visible='true' lat='43.60918883875' lon='3.88412626772'>
31
- <tag k='name' v='p2' />
32
- </node>
33
- <node id='-440480' action='modify' visible='true' lat='43.60936726345' lon='3.88427546746'>
34
- <tag k='name' v='p23' />
35
- </node>
36
- <node id='-440482' action='modify' visible='true' lat='43.60917216742' lon='3.8842355275'>
37
- <tag k='name' v='p5' />
38
- </node>
39
- <node id='-440484' action='modify' visible='true' lat='43.60931231268' lon='3.8842731166'>
40
- <tag k='name' v='p10' />
41
- </node>
42
- <node id='-440486' action='modify' visible='true' lat='43.60932336323' lon='3.884200898'>
43
- <tag k='name' v='p11' />
44
- </node>
45
- <node id='-440488' action='modify' visible='true' lat='43.6093629216' lon='3.884212726'>
46
- <tag k='name' v='p12' />
47
- </node>
48
- <node id='-440490' action='modify' visible='true' lat='43.60935965678' lon='3.8842335535'>
49
- <tag k='name' v='p13' />
50
- </node>
51
- <node id='-440492' action='modify' visible='true' lat='43.60932022256' lon='3.88422176261'>
52
- <tag k='name' v='p14' />
53
- </node>
54
- <node id='-440494' action='modify' visible='true' lat='43.60931232238' lon='3.88427309743'>
55
- <tag k='name' v='p15' />
56
- </node>
57
- <node id='-440496' action='modify' visible='true' lat='43.60936673756' lon='3.88428907078'>
58
- <tag k='name' v='p24' />
59
- </node>
60
- <node id='-440498' action='modify' visible='true' lat='43.60926807571' lon='3.884260391'>
61
- <tag k='name' v='p16' />
62
- </node>
63
- <node id='-441184' action='modify' visible='true' lat='43.60932786117' lon='3.88427765877'>
64
- <tag k='name' v='p18' />
65
- </node>
66
- <node id='-441187' action='modify' visible='true' lat='43.60933232537' lon='3.88424831515'>
67
- <tag k='highway' v='elevator' />
68
- <tag k='level' v='0;2' />
69
- <tag k='name' v='p19' />
70
- </node>
71
- <node id='-441210' action='modify' visible='true' lat='43.60932786111' lon='3.8842776591'>
72
- <tag k='name' v='p17' />
73
- </node>
74
- <node id='-441270' action='modify' visible='true' lat='43.6093032' lon='3.8844388'>
75
- <tag k='name' v='p21' />
76
- </node>
77
- <node id='-441273' action='modify' visible='true' lat='43.6095297' lon='3.8845039'>
78
- <tag k='name' v='p22' />
79
- </node>
80
- <node id='-441286' action='modify' visible='true' lat='43.6095624' lon='3.8845134'>
81
- <tag k='name' v='p23' />
82
- </node>
83
- <way id='-440499' action='modify' visible='true'>
84
- <nd ref='-440476' />
85
- <nd ref='-440460' />
86
- <nd ref='-440464' />
87
- <nd ref='-440474' />
88
- <tag k='highway' v='footway' />
89
- <tag k='level' v='2' />
90
- <tag k='name' v='w2' />
91
- </way>
92
- <way id='-440500' action='modify' visible='true'>
93
- <nd ref='-440464' />
94
- <nd ref='-440466' />
95
- <nd ref='-440484' />
96
- <nd ref='-441184' />
97
- <nd ref='-440470' />
98
- <nd ref='-440480' />
99
- <tag k='highway' v='footway' />
100
- <tag k='level' v='2' />
101
- <tag k='name' v='w3' />
102
- </way>
103
- <way id='-440501' action='modify' visible='true'>
104
- <nd ref='-440472' />
105
- <nd ref='-440478' />
106
- <nd ref='-440462' />
107
- <nd ref='-440468' />
108
- <nd ref='-440482' />
109
- <nd ref='-440476' />
110
- <nd ref='-440478' />
111
- <tag k='highway' v='footway' />
112
- <tag k='level' v='2' />
113
- <tag k='name' v='w1' />
114
- </way>
115
- <way id='-440502' action='modify' visible='true'>
116
- <nd ref='-440486' />
117
- <nd ref='-440488' />
118
- <nd ref='-440490' />
119
- <nd ref='-440492' />
120
- <tag k='highway' v='steps' />
121
- <tag k='level' v='1;2' />
122
- <tag k='name' v='w6' />
123
- </way>
124
- <way id='-440503' action='modify' visible='true'>
125
- <nd ref='-440484' />
126
- <nd ref='-440486' />
127
- <tag k='highway' v='footway' />
128
- <tag k='level' v='2' />
129
- <tag k='name' v='w5' />
130
- </way>
131
- <way id='-440504' action='modify' visible='true'>
132
- <nd ref='-440492' />
133
- <nd ref='-440494' />
134
- <nd ref='-441210' />
135
- <nd ref='-440496' />
136
- <tag k='highway' v='footway' />
137
- <tag k='level' v='1' />
138
- <tag k='name' v='w7' />
139
- </way>
140
- <way id='-440505' action='modify' visible='true'>
141
- <nd ref='-440494' />
142
- <nd ref='-440498' />
143
- <tag k='highway' v='footway' />
144
- <tag k='level' v='1' />
145
- <tag k='name' v='w9' />
146
- </way>
147
- <way id='-441188' action='modify' visible='true'>
148
- <nd ref='-441184' />
149
- <nd ref='-441187' />
150
- <tag k='highway' v='footway' />
151
- <tag k='level' v='2' />
152
- <tag k='name' v='w4' />
153
- </way>
154
- <way id='-441214' action='modify' visible='true'>
155
- <nd ref='-441210' />
156
- <nd ref='-441187' />
157
- <tag k='highway' v='footway' />
158
- <tag k='level' v='1' />
159
- <tag k='name' v='w8' />
160
- </way>
161
- <way id='-441263' action='modify' visible='true'>
162
- <nd ref='-441187' />
163
- <nd ref='-441270' />
164
- <nd ref='-441273' />
165
- <tag k='highway' v='footway' />
166
- <tag k='level' v='0' />
167
- <tag k='name' v='w10' />
168
- </way>
169
- <way id='-441268' action='modify' visible='true'>
170
- <nd ref='-441273' />
171
- <nd ref='-441286' />
172
- <tag k='highway' v='footway' />
173
- </way>
174
- </osm>