@wemap/osm 11.0.2 → 11.3.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/elevator-models.osm +354 -0
- package/dist/index.js +15 -7
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +15 -7
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
- package/src/OsmNode.ts +9 -1
- package/src/OsmParser.ts +2 -6
- package/src/OsmWay.ts +8 -1
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
<?xml version='1.0' encoding='UTF-8'?>
|
|
2
|
+
<osm version='0.6' generator='JOSM'>
|
|
3
|
+
<node id='-144749' action='modify' visible='true' lat='43.46581979762' lon='5.32865289098' />
|
|
4
|
+
<node id='-144750' action='modify' visible='true' lat='43.4658202912' lon='5.32869310224'>
|
|
5
|
+
<tag k='door' v='*' />
|
|
6
|
+
<tag k='level' v='1' />
|
|
7
|
+
<tag k='name' v='t5b' />
|
|
8
|
+
<tag k='repeat_on' v='3;5' />
|
|
9
|
+
</node>
|
|
10
|
+
<node id='-144751' action='modify' visible='true' lat='43.46584913825' lon='5.32862238103' />
|
|
11
|
+
<node id='-144752' action='modify' visible='true' lat='43.46583903069' lon='5.32862330085'>
|
|
12
|
+
<tag k='name' v='s2' />
|
|
13
|
+
</node>
|
|
14
|
+
<node id='-144753' action='modify' visible='true' lat='43.46588228606' lon='5.32856079109'>
|
|
15
|
+
<tag k='name' v='f1a' />
|
|
16
|
+
</node>
|
|
17
|
+
<node id='-144754' action='modify' visible='true' lat='43.4658675595' lon='5.32858608608' />
|
|
18
|
+
<node id='-144755' action='modify' visible='true' lat='43.46588327658' lon='5.32867389111'>
|
|
19
|
+
<tag k='name' v='f3a' />
|
|
20
|
+
</node>
|
|
21
|
+
<node id='-144756' action='modify' visible='true' lat='43.46582035584' lon='5.32867836656' />
|
|
22
|
+
<node id='-144757' action='modify' visible='true' lat='43.46581966568' lon='5.32863796849'>
|
|
23
|
+
<tag k='door' v='*' />
|
|
24
|
+
<tag k='level' v='1' />
|
|
25
|
+
<tag k='name' v='t4c' />
|
|
26
|
+
<tag k='note' v='Alternative possible: level=3 repeat_on=5;1' />
|
|
27
|
+
<tag k='repeat_on' v='3;5' />
|
|
28
|
+
</node>
|
|
29
|
+
<node id='-144758' action='modify' visible='true' lat='43.46588387116' lon='5.32868699353'>
|
|
30
|
+
<tag k='name' v='f3b' />
|
|
31
|
+
</node>
|
|
32
|
+
<node id='-144759' action='modify' visible='true' lat='43.4658332345' lon='5.32867945425'>
|
|
33
|
+
<tag k='name' v='f5a' />
|
|
34
|
+
</node>
|
|
35
|
+
<node id='-144760' action='modify' visible='true' lat='43.46585342717' lon='5.32858372035' />
|
|
36
|
+
<node id='-144761' action='modify' visible='true' lat='43.46579840441' lon='5.32862340067' />
|
|
37
|
+
<node id='-144762' action='modify' visible='true' lat='43.46584940214' lon='5.32865222601' />
|
|
38
|
+
<node id='-144763' action='modify' visible='true' lat='43.46584927019' lon='5.32863730352'>
|
|
39
|
+
<tag k='door' v='*' />
|
|
40
|
+
<tag k='entrance' v='yes' />
|
|
41
|
+
<tag k='level' v='4' />
|
|
42
|
+
<tag k='name' v='t2a' />
|
|
43
|
+
</node>
|
|
44
|
+
<node id='-144764' action='modify' visible='true' lat='43.46585983485' lon='5.32863712618'>
|
|
45
|
+
<tag k='highway' v='elevator' />
|
|
46
|
+
<tag k='level' v='1;3;4;5' />
|
|
47
|
+
<tag k='name' v='t2b' />
|
|
48
|
+
</node>
|
|
49
|
+
<node id='-144765' action='modify' visible='true' lat='43.46584939895' lon='5.32868789701'>
|
|
50
|
+
<tag k='door' v='*' />
|
|
51
|
+
<tag k='entrance' v='yes' />
|
|
52
|
+
<tag k='level' v='4' />
|
|
53
|
+
<tag k='name' v='t3a' />
|
|
54
|
+
</node>
|
|
55
|
+
<node id='-144766' action='modify' visible='true' lat='43.46579935684' lon='5.32869346015'>
|
|
56
|
+
<tag k='door' v='*' />
|
|
57
|
+
<tag k='entrance' v='yes' />
|
|
58
|
+
<tag k='level' v='4' />
|
|
59
|
+
<tag k='name' v='t5a' />
|
|
60
|
+
<tag k='railway' v='train_station_entrance' />
|
|
61
|
+
</node>
|
|
62
|
+
<node id='-144767' action='modify' visible='true' lat='43.4658703995' lon='5.32863694885'>
|
|
63
|
+
<tag k='door' v='*' />
|
|
64
|
+
<tag k='level' v='1' />
|
|
65
|
+
<tag k='name' v='t2c' />
|
|
66
|
+
<tag k='note' v='Alternative possible: level=3 repeat_on=5;1' />
|
|
67
|
+
<tag k='repeat_on' v='3;5' />
|
|
68
|
+
</node>
|
|
69
|
+
<node id='-144768' action='modify' visible='true' lat='43.46588268223' lon='5.32869936822'>
|
|
70
|
+
<tag k='name' v='f3c' />
|
|
71
|
+
</node>
|
|
72
|
+
<node id='-144769' action='modify' visible='true' lat='43.4657994904' lon='5.32870856621' />
|
|
73
|
+
<node id='-144770' action='modify' visible='true' lat='43.46583221281' lon='5.3286481597'>
|
|
74
|
+
<tag k='name' v='f4c' />
|
|
75
|
+
</node>
|
|
76
|
+
<node id='-144771' action='modify' visible='true' lat='43.4657986683' lon='5.32865324565' />
|
|
77
|
+
<node id='-144772' action='modify' visible='true' lat='43.46588294662' lon='5.32864714006'>
|
|
78
|
+
<tag k='name' v='f2c' />
|
|
79
|
+
</node>
|
|
80
|
+
<node id='-144773' action='modify' visible='true' lat='43.46583906198' lon='5.32867389598'>
|
|
81
|
+
<tag k='name' v='s3' />
|
|
82
|
+
</node>
|
|
83
|
+
<node id='-144774' action='modify' visible='true' lat='43.46583260898' lon='5.32862432049'>
|
|
84
|
+
<tag k='name' v='f4a' />
|
|
85
|
+
</node>
|
|
86
|
+
<node id='-144775' action='modify' visible='true' lat='43.46586049357' lon='5.32858499388'>
|
|
87
|
+
<tag k='highway' v='elevator' />
|
|
88
|
+
<tag k='level' v='1;3;4;5' />
|
|
89
|
+
<tag k='name' v='Modèle sans indoor' />
|
|
90
|
+
</node>
|
|
91
|
+
<node id='-144776' action='modify' visible='true' lat='43.46582061973' lon='5.32870821154' />
|
|
92
|
+
<node id='-144777' action='modify' visible='true' lat='43.46580910102' lon='5.32863814582'>
|
|
93
|
+
<tag k='highway' v='elevator' />
|
|
94
|
+
<tag k='level' v='1;3;4;5' />
|
|
95
|
+
<tag k='name' v='t4b' />
|
|
96
|
+
</node>
|
|
97
|
+
<node id='-144778' action='modify' visible='true' lat='43.46587066182' lon='5.3287026484' />
|
|
98
|
+
<node id='-144779' action='modify' visible='true' lat='43.46578829685' lon='5.32862432049'>
|
|
99
|
+
<tag k='name' v='s4' />
|
|
100
|
+
</node>
|
|
101
|
+
<node id='-144780' action='modify' visible='true' lat='43.4658333354' lon='5.32863796894'>
|
|
102
|
+
<tag k='name' v='f4b' />
|
|
103
|
+
</node>
|
|
104
|
+
<node id='-144781' action='modify' visible='true' lat='43.46588334278' lon='5.32862330085'>
|
|
105
|
+
<tag k='name' v='f2a' />
|
|
106
|
+
</node>
|
|
107
|
+
<node id='-144782' action='modify' visible='true' lat='43.46588255038' lon='5.32858453916'>
|
|
108
|
+
<tag k='name' v='f1b' />
|
|
109
|
+
</node>
|
|
110
|
+
<node id='-144783' action='modify' visible='true' lat='43.46583382908' lon='5.32869255667'>
|
|
111
|
+
<tag k='name' v='f5b' />
|
|
112
|
+
</node>
|
|
113
|
+
<node id='-144784' action='modify' visible='true' lat='43.4658826824' lon='5.32860392005'>
|
|
114
|
+
<tag k='name' v='f1c' />
|
|
115
|
+
</node>
|
|
116
|
+
<node id='-144785' action='modify' visible='true' lat='43.46579922651' lon='5.32867872123' />
|
|
117
|
+
<node id='-144786' action='modify' visible='true' lat='43.46579853635' lon='5.32863832316'>
|
|
118
|
+
<tag k='door' v='*' />
|
|
119
|
+
<tag k='entrance' v='yes' />
|
|
120
|
+
<tag k='level' v='4' />
|
|
121
|
+
<tag k='name' v='t4a' />
|
|
122
|
+
<tag k='railway' v='train_station_entrance' />
|
|
123
|
+
</node>
|
|
124
|
+
<node id='-144787' action='modify' visible='true' lat='43.46583264015' lon='5.32870493136'>
|
|
125
|
+
<tag k='name' v='f5c' />
|
|
126
|
+
</node>
|
|
127
|
+
<node id='-144788' action='modify' visible='true' lat='43.46584926862' lon='5.32867315809' />
|
|
128
|
+
<node id='-144789' action='modify' visible='true' lat='43.46587026755' lon='5.32862202636' />
|
|
129
|
+
<node id='-144790' action='modify' visible='true' lat='43.46587053144' lon='5.32865187134' />
|
|
130
|
+
<node id='-144791' action='modify' visible='true' lat='43.46588406921' lon='5.3286369493'>
|
|
131
|
+
<tag k='name' v='f2b' />
|
|
132
|
+
</node>
|
|
133
|
+
<node id='-144792' action='modify' visible='true' lat='43.46586769157' lon='5.32858290144' />
|
|
134
|
+
<node id='-144793' action='modify' visible='true' lat='43.46578901986' lon='5.32867945912'>
|
|
135
|
+
<tag k='name' v='s5' />
|
|
136
|
+
</node>
|
|
137
|
+
<node id='-144794' action='modify' visible='true' lat='43.46587039793' lon='5.32867280342' />
|
|
138
|
+
<node id='-144795' action='modify' visible='true' lat='43.46584120998' lon='5.32856415757'>
|
|
139
|
+
<tag k='name' v='s1' />
|
|
140
|
+
</node>
|
|
141
|
+
<node id='-144796' action='modify' visible='true' lat='43.46584953251' lon='5.32870300307' />
|
|
142
|
+
<node id='-144797' action='modify' visible='true' lat='43.46587033329' lon='5.32868753911'>
|
|
143
|
+
<tag k='door' v='*' />
|
|
144
|
+
<tag k='level' v='1' />
|
|
145
|
+
<tag k='name' v='t3b' />
|
|
146
|
+
<tag k='repeat_on' v='3;5' />
|
|
147
|
+
</node>
|
|
148
|
+
<node id='-144798' action='modify' visible='true' lat='43.46581953373' lon='5.328623046' />
|
|
149
|
+
<way id='-119001' action='modify' visible='true'>
|
|
150
|
+
<nd ref='-144786' />
|
|
151
|
+
<nd ref='-144777' />
|
|
152
|
+
<tag k='highway' v='footway' />
|
|
153
|
+
<tag k='level' v='4' />
|
|
154
|
+
</way>
|
|
155
|
+
<way id='-119002' action='modify' visible='true'>
|
|
156
|
+
<nd ref='-144752' />
|
|
157
|
+
<nd ref='-144763' />
|
|
158
|
+
<tag k='highway' v='footway' />
|
|
159
|
+
<tag k='level' v='4' />
|
|
160
|
+
</way>
|
|
161
|
+
<way id='-119003' action='modify' visible='true'>
|
|
162
|
+
<nd ref='-144756' />
|
|
163
|
+
<nd ref='-144750' />
|
|
164
|
+
<nd ref='-144776' />
|
|
165
|
+
<nd ref='-144769' />
|
|
166
|
+
<nd ref='-144766' />
|
|
167
|
+
<nd ref='-144785' />
|
|
168
|
+
<nd ref='-144756' />
|
|
169
|
+
<tag k='highway' v='elevator' />
|
|
170
|
+
<tag k='indoor' v='room' />
|
|
171
|
+
<tag k='level' v='1;2;3;4;5' />
|
|
172
|
+
<tag k='name' v='Modèle conforme au Wiki OSM, variante entrée de gare' />
|
|
173
|
+
<tag k='note' v='Alternative possible : level=1-5' />
|
|
174
|
+
</way>
|
|
175
|
+
<way id='-119004' action='modify' visible='true'>
|
|
176
|
+
<nd ref='-144775' />
|
|
177
|
+
<nd ref='-144782' />
|
|
178
|
+
<tag k='highway' v='footway' />
|
|
179
|
+
<tag k='level' v='3' />
|
|
180
|
+
</way>
|
|
181
|
+
<way id='-119005' action='modify' visible='true'>
|
|
182
|
+
<nd ref='-144767' />
|
|
183
|
+
<nd ref='-144764' />
|
|
184
|
+
<tag k='highway' v='footway' />
|
|
185
|
+
<tag k='level' v='1' />
|
|
186
|
+
<tag k='note' v='Alternative possible: level=3 repeat_on=5;1' />
|
|
187
|
+
<tag k='repeat_on' v='3;5' />
|
|
188
|
+
</way>
|
|
189
|
+
<way id='-119006' action='modify' visible='true'>
|
|
190
|
+
<nd ref='-144784' />
|
|
191
|
+
<nd ref='-144754' />
|
|
192
|
+
<nd ref='-144775' />
|
|
193
|
+
<tag k='highway' v='footway' />
|
|
194
|
+
<tag k='level' v='5' />
|
|
195
|
+
</way>
|
|
196
|
+
<way id='-119007' action='modify' visible='true'>
|
|
197
|
+
<nd ref='-144755' />
|
|
198
|
+
<nd ref='-144797' />
|
|
199
|
+
<tag k='highway' v='footway' />
|
|
200
|
+
<tag k='level' v='1' />
|
|
201
|
+
</way>
|
|
202
|
+
<way id='-119008' action='modify' visible='true'>
|
|
203
|
+
<nd ref='-144798' />
|
|
204
|
+
<nd ref='-144757' />
|
|
205
|
+
<nd ref='-144749' />
|
|
206
|
+
<nd ref='-144771' />
|
|
207
|
+
<nd ref='-144786' />
|
|
208
|
+
<nd ref='-144761' />
|
|
209
|
+
<nd ref='-144798' />
|
|
210
|
+
<tag k='elevator' v='yes' />
|
|
211
|
+
<tag k='indoor' v='room' />
|
|
212
|
+
<tag k='level' v='1;2;3;4;5' />
|
|
213
|
+
<tag k='name' v='Modèle Transilien : variante entrée de gare' />
|
|
214
|
+
<tag k='note' v='Alternative possible : level=1-5' />
|
|
215
|
+
</way>
|
|
216
|
+
<way id='-119009' action='modify' visible='true'>
|
|
217
|
+
<nd ref='-144791' />
|
|
218
|
+
<nd ref='-144767' />
|
|
219
|
+
<tag k='highway' v='footway' />
|
|
220
|
+
<tag k='level' v='3' />
|
|
221
|
+
</way>
|
|
222
|
+
<way id='-119010' action='modify' visible='true'>
|
|
223
|
+
<nd ref='-144759' />
|
|
224
|
+
<nd ref='-144750' />
|
|
225
|
+
<tag k='highway' v='footway' />
|
|
226
|
+
<tag k='level' v='1' />
|
|
227
|
+
</way>
|
|
228
|
+
<way id='-119011' action='modify' visible='true'>
|
|
229
|
+
<nd ref='-144753' />
|
|
230
|
+
<nd ref='-144792' />
|
|
231
|
+
<nd ref='-144775' />
|
|
232
|
+
<tag k='highway' v='footway' />
|
|
233
|
+
<tag k='level' v='1' />
|
|
234
|
+
</way>
|
|
235
|
+
<way id='-119012' action='modify' visible='true'>
|
|
236
|
+
<nd ref='-144795' />
|
|
237
|
+
<nd ref='-144760' />
|
|
238
|
+
<nd ref='-144775' />
|
|
239
|
+
<tag k='highway' v='footway' />
|
|
240
|
+
<tag k='level' v='4' />
|
|
241
|
+
</way>
|
|
242
|
+
<way id='-119013' action='modify' visible='true'>
|
|
243
|
+
<nd ref='-144772' />
|
|
244
|
+
<nd ref='-144767' />
|
|
245
|
+
<tag k='highway' v='footway' />
|
|
246
|
+
<tag k='level' v='5' />
|
|
247
|
+
</way>
|
|
248
|
+
<way id='-119014' action='modify' visible='true'>
|
|
249
|
+
<nd ref='-144770' />
|
|
250
|
+
<nd ref='-144757' />
|
|
251
|
+
<tag k='highway' v='footway' />
|
|
252
|
+
<tag k='level' v='5' />
|
|
253
|
+
</way>
|
|
254
|
+
<way id='-119015' action='modify' visible='true'>
|
|
255
|
+
<nd ref='-144793' />
|
|
256
|
+
<nd ref='-144766' />
|
|
257
|
+
<tag k='highway' v='footway' />
|
|
258
|
+
</way>
|
|
259
|
+
<way id='-119016' action='modify' visible='true'>
|
|
260
|
+
<nd ref='-144774' />
|
|
261
|
+
<nd ref='-144757' />
|
|
262
|
+
<tag k='highway' v='footway' />
|
|
263
|
+
<tag k='level' v='1' />
|
|
264
|
+
</way>
|
|
265
|
+
<way id='-119017' action='modify' visible='true'>
|
|
266
|
+
<nd ref='-144763' />
|
|
267
|
+
<nd ref='-144764' />
|
|
268
|
+
<tag k='highway' v='footway' />
|
|
269
|
+
<tag k='level' v='4' />
|
|
270
|
+
</way>
|
|
271
|
+
<way id='-119018' action='modify' visible='true'>
|
|
272
|
+
<nd ref='-144757' />
|
|
273
|
+
<nd ref='-144777' />
|
|
274
|
+
<tag k='highway' v='footway' />
|
|
275
|
+
<tag k='level' v='1' />
|
|
276
|
+
<tag k='note' v='Alternative possible: level=3 repeat_on=5;1' />
|
|
277
|
+
<tag k='repeat_on' v='3;5' />
|
|
278
|
+
</way>
|
|
279
|
+
<way id='-119019' action='modify' visible='true'>
|
|
280
|
+
<nd ref='-144789' />
|
|
281
|
+
<nd ref='-144767' />
|
|
282
|
+
<nd ref='-144790' />
|
|
283
|
+
<nd ref='-144762' />
|
|
284
|
+
<nd ref='-144763' />
|
|
285
|
+
<nd ref='-144751' />
|
|
286
|
+
<nd ref='-144789' />
|
|
287
|
+
<tag k='elevator' v='yes' />
|
|
288
|
+
<tag k='indoor' v='room' />
|
|
289
|
+
<tag k='level' v='1;2;3;4;5' />
|
|
290
|
+
<tag k='name' v='Modèle Transilien' />
|
|
291
|
+
<tag k='note' v='Alternative possible : level=1-5' />
|
|
292
|
+
</way>
|
|
293
|
+
<way id='-119020' action='modify' visible='true'>
|
|
294
|
+
<nd ref='-144779' />
|
|
295
|
+
<nd ref='-144786' />
|
|
296
|
+
<tag k='highway' v='footway' />
|
|
297
|
+
</way>
|
|
298
|
+
<way id='-119021' action='modify' visible='true'>
|
|
299
|
+
<nd ref='-144758' />
|
|
300
|
+
<nd ref='-144797' />
|
|
301
|
+
<tag k='highway' v='footway' />
|
|
302
|
+
<tag k='level' v='3' />
|
|
303
|
+
</way>
|
|
304
|
+
<way id='-119022' action='modify' visible='true'>
|
|
305
|
+
<nd ref='-144781' />
|
|
306
|
+
<nd ref='-144767' />
|
|
307
|
+
<tag k='highway' v='footway' />
|
|
308
|
+
<tag k='level' v='1' />
|
|
309
|
+
</way>
|
|
310
|
+
<way id='-119023' action='modify' visible='true'>
|
|
311
|
+
<nd ref='-144787' />
|
|
312
|
+
<nd ref='-144750' />
|
|
313
|
+
<tag k='highway' v='footway' />
|
|
314
|
+
<tag k='level' v='5' />
|
|
315
|
+
</way>
|
|
316
|
+
<way id='-119024' action='modify' visible='true'>
|
|
317
|
+
<nd ref='-144773' />
|
|
318
|
+
<nd ref='-144765' />
|
|
319
|
+
<tag k='highway' v='footway' />
|
|
320
|
+
<tag k='level' v='4' />
|
|
321
|
+
</way>
|
|
322
|
+
<way id='-119025' action='modify' visible='true'>
|
|
323
|
+
<nd ref='-144794' />
|
|
324
|
+
<nd ref='-144797' />
|
|
325
|
+
<nd ref='-144778' />
|
|
326
|
+
<nd ref='-144796' />
|
|
327
|
+
<nd ref='-144765' />
|
|
328
|
+
<nd ref='-144788' />
|
|
329
|
+
<nd ref='-144794' />
|
|
330
|
+
<tag k='highway' v='elevator' />
|
|
331
|
+
<tag k='indoor' v='room' />
|
|
332
|
+
<tag k='level' v='1;2;3;4;5' />
|
|
333
|
+
<tag k='name' v='Modèle conforme au Wiki OSM' />
|
|
334
|
+
<tag k='note' v='Alternative possible : level=1-5' />
|
|
335
|
+
</way>
|
|
336
|
+
<way id='-119026' action='modify' visible='true'>
|
|
337
|
+
<nd ref='-144768' />
|
|
338
|
+
<nd ref='-144797' />
|
|
339
|
+
<tag k='highway' v='footway' />
|
|
340
|
+
<tag k='level' v='5' />
|
|
341
|
+
</way>
|
|
342
|
+
<way id='-119027' action='modify' visible='true'>
|
|
343
|
+
<nd ref='-144783' />
|
|
344
|
+
<nd ref='-144750' />
|
|
345
|
+
<tag k='highway' v='footway' />
|
|
346
|
+
<tag k='level' v='3' />
|
|
347
|
+
</way>
|
|
348
|
+
<way id='-119028' action='modify' visible='true'>
|
|
349
|
+
<nd ref='-144780' />
|
|
350
|
+
<nd ref='-144757' />
|
|
351
|
+
<tag k='highway' v='footway' />
|
|
352
|
+
<tag k='level' v='3' />
|
|
353
|
+
</way>
|
|
354
|
+
</osm>
|
package/dist/index.js
CHANGED
|
@@ -6,8 +6,8 @@ var __publicField = (obj, key, value) => {
|
|
|
6
6
|
return value;
|
|
7
7
|
};
|
|
8
8
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
9
|
-
const saxes = require("saxes");
|
|
10
9
|
const geo = require("@wemap/geo");
|
|
10
|
+
const saxes = require("saxes");
|
|
11
11
|
class OsmElement {
|
|
12
12
|
constructor(id, tags) {
|
|
13
13
|
__publicField(this, "id");
|
|
@@ -51,6 +51,12 @@ class OsmNode extends OsmElement {
|
|
|
51
51
|
__publicField(this, "ways", []);
|
|
52
52
|
__publicField(this, "relations", []);
|
|
53
53
|
this.coords = coords;
|
|
54
|
+
this.computeCoordsLevelFromTags();
|
|
55
|
+
}
|
|
56
|
+
computeCoordsLevelFromTags() {
|
|
57
|
+
if ("level" in this.tags) {
|
|
58
|
+
this.coords.level = geo.Level.fromString(this.tags.level);
|
|
59
|
+
}
|
|
54
60
|
}
|
|
55
61
|
get isElevator() {
|
|
56
62
|
return this.tags.highway === "elevator";
|
|
@@ -66,6 +72,12 @@ class OsmWay extends OsmElement {
|
|
|
66
72
|
__publicField(this, "relations", []);
|
|
67
73
|
__publicField(this, "level", null);
|
|
68
74
|
this.level = level;
|
|
75
|
+
this.computeLevelFromTags();
|
|
76
|
+
}
|
|
77
|
+
computeLevelFromTags() {
|
|
78
|
+
if ("level" in this.tags) {
|
|
79
|
+
this.level = geo.Level.fromString(this.tags.level);
|
|
80
|
+
}
|
|
69
81
|
}
|
|
70
82
|
get areStairs() {
|
|
71
83
|
return this.tags.highway === "steps";
|
|
@@ -193,12 +205,8 @@ class OsmParser {
|
|
|
193
205
|
}
|
|
194
206
|
});
|
|
195
207
|
parser.write(osmXmlString);
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
if (way.tags.level) {
|
|
199
|
-
way.level = geo.Level.fromString(way.tags.level);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
208
|
+
model.nodes.forEach((node) => node.computeCoordsLevelFromTags());
|
|
209
|
+
model.ways.forEach((way) => way.computeLevelFromTags());
|
|
202
210
|
return model;
|
|
203
211
|
}
|
|
204
212
|
static _parseNode(attr) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/OsmElement.ts","../src/OsmModel.ts","../src/OsmNode.ts","../src/OsmWay.ts","../src/OsmRelation.ts","../src/OsmParser.ts"],"sourcesContent":["\nexport type OsmTags = { [key: string]: string };\n\nclass OsmElement {\n\n id: number;\n tags: OsmTags;\n\n constructor(id: number, tags?: OsmTags) {\n this.id = id;\n this.tags = tags || {};\n }\n}\n\nexport default OsmElement;\n","import OsmNode from './OsmNode.js';\nimport OsmRelation from './OsmRelation.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmModel {\n\n nodes: OsmNode[];\n ways: OsmWay[];\n relations: OsmRelation[];\n\n constructor(nodes?: OsmNode[], ways?: OsmWay[], relations?: OsmRelation[]) {\n this.nodes = nodes || [];\n this.ways = ways || [];\n this.relations = relations || [];\n }\n\n getNodeById(id: number) {\n return this.nodes.find(node => node.id === id) || null;\n }\n\n getNodeByName(name: string) {\n return this.nodes.find(node => node.tags.name === name) || null;\n }\n\n getWayById(id: number) {\n return this.ways.find(way => way.id === id) || null;\n }\n\n getWayByName(name: string) {\n return this.ways.find(way => way.tags.name === name) || null;\n }\n\n getRelationById(id: number) {\n return this.relations.find(way => way.id === id) || null;\n }\n\n getRelationByName(name: string) {\n return this.relations.find(way => way.tags.name === name) || null;\n }\n}\n\nexport default OsmModel;\n","import { Coordinates } from '@wemap/geo';\n\nimport OsmElement, { OsmTags } from './OsmElement.js';\nimport OsmRelation from './OsmRelation.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmNode extends OsmElement {\n\n coords : Coordinates;\n ways: OsmWay[] = [];\n relations: OsmRelation[] = [];\n\n constructor(id: number, coords: Coordinates, tags?: OsmTags) {\n super(id, tags);\n this.coords = coords;\n }\n\n get isElevator() {\n return this.tags.highway === 'elevator';\n }\n\n get isConveying() {\n return this.isElevator;\n }\n}\n\nexport default OsmNode;\n","import { Level_t } from '@wemap/geo';\nimport OsmElement, { OsmTags } from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\nimport OsmRelation from './OsmRelation.js';\n\nclass OsmWay extends OsmElement {\n\n nodes: OsmNode[] = [];\n relations: OsmRelation[] = [];\n level: Level_t = null;\n\n constructor(id: number, tags?: OsmTags, level: Level_t = null) {\n super(id, tags);\n this.level = level;\n }\n\n get areStairs() {\n return this.tags.highway === 'steps';\n }\n\n get isConveying() {\n return this.tags.hasOwnProperty('conveying');\n }\n\n get isEscalator() {\n return this.areStairs && this.isConveying;\n }\n\n get isMovingWalkway() {\n return !this.areStairs && this.isConveying;\n }\n\n get isElevator() {\n return this.tags.highway === 'elevator';\n }\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 OsmElement, { OsmTags } from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\nimport type { Position, Polygon } from 'geojson';\n\nexport type OsmRelationMember = {\n ref: OsmRelation | OsmWay | OsmNode,\n role: string\n}\n\nclass OsmRelation extends OsmElement {\n\n relations: OsmRelation[] = [];\n\n constructor(\n id: number,\n public members: OsmRelationMember[] = [],\n tags?: OsmTags\n ) {\n super(id, tags);\n }\n\n isMultipolygon() {\n return this.tags.type === 'multipolygon';\n }\n\n getGeoJsonPolygon(): Polygon | null {\n if (!this.isMultipolygon()) return null;\n const outer = this.members.find(member => member.ref instanceof OsmWay && member.role === 'outer');\n if (!outer) return null;\n const inners = this.members.filter(member => member.ref instanceof OsmWay && member.role === 'inner');\n return {\n type: \"Polygon\",\n coordinates: [outer, ...inners].map(member => {\n const way = member.ref as OsmWay;\n return way.nodes.map(node => [node.coords.lng, node.coords.lat] as Position);\n })\n }\n }\n}\n\nexport default OsmRelation;\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';\nimport OsmRelation from './OsmRelation.js';\n\ntype OsmXmlElement = { action?: 'delete' };\ntype OsmXmlNode = { id: string, lat: string, lon: string } & OsmXmlElement;\ntype OsmXmlWay = { id: string } & OsmXmlElement;\ntype OsmXmlRelation = { id: string } & OsmXmlElement;\n\nclass OsmParser {\n\n static parseOsmXmlString(osmXmlString: string) {\n\n const model = new OsmModel();\n const parser = new SaxesParser();\n\n let buffer: OsmNode | OsmWay | OsmRelation | null;\n\n const isDeleted = (element: { attributes: OsmXmlElement }) =>\n 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 as OsmXmlNode);\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 as OsmXmlWay);\n buffer = osmWay;\n model.ways.push(osmWay);\n break;\n }\n case 'relation': {\n if (isDeleted(node)) {\n buffer = null;\n break;\n }\n const osmRelation = this._parseRelation(node.attributes as OsmXmlRelation);\n buffer = osmRelation;\n model.relations.push(osmRelation);\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 case 'member': {\n if (!buffer || !(buffer instanceof OsmRelation)) {\n return;\n }\n const memberId = Number(node.attributes.ref);\n const memberType = node.attributes.type;\n let refElement: OsmNode | OsmWay | OsmRelation | null = null;\n memberType === 'node' && (refElement = model.getNodeById(memberId));\n memberType === 'way' && (refElement = model.getWayById(memberId));\n memberType === 'relation' && (refElement = model.getRelationById(memberId));\n\n if (!refElement) {\n throw Error('Member: ' + memberId + ' in relation ' + buffer.id + ' not found');\n }\n\n buffer.members.push({ ref: refElement, role: node.attributes.role });\n refElement.relations.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: OsmXmlNode) {\n return new OsmNode(\n Number(attr.id),\n new Coordinates(Number(attr.lat), Number(attr.lon)));\n }\n\n static _parseWay(attr: { id: string }) {\n return new OsmWay(Number(attr.id));\n }\n\n static _parseRelation(attr: { id: string }) {\n return new OsmRelation(Number(attr.id));\n }\n}\n\nexport default OsmParser;\n"],"names":["SaxesParser","Level","Coordinates"],"mappings":";;;;;;;;;;AAGA,MAAM,WAAW;AAAA,EAKb,YAAY,IAAY,MAAgB;AAHxC;AACA;AAGI,SAAK,KAAK;AACL,SAAA,OAAO,QAAQ;EACxB;AACJ;ACRA,MAAM,SAAS;AAAA,EAMX,YAAY,OAAmB,MAAiB,WAA2B;AAJ3E;AACA;AACA;AAGS,SAAA,QAAQ,SAAS;AACjB,SAAA,OAAO,QAAQ;AACf,SAAA,YAAY,aAAa;EAClC;AAAA,EAEA,YAAY,IAAY;AACpB,WAAO,KAAK,MAAM,KAAK,UAAQ,KAAK,OAAO,EAAE,KAAK;AAAA,EACtD;AAAA,EAEA,cAAc,MAAc;AACjB,WAAA,KAAK,MAAM,KAAK,CAAA,SAAQ,KAAK,KAAK,SAAS,IAAI,KAAK;AAAA,EAC/D;AAAA,EAEA,WAAW,IAAY;AACnB,WAAO,KAAK,KAAK,KAAK,SAAO,IAAI,OAAO,EAAE,KAAK;AAAA,EACnD;AAAA,EAEA,aAAa,MAAc;AAChB,WAAA,KAAK,KAAK,KAAK,CAAA,QAAO,IAAI,KAAK,SAAS,IAAI,KAAK;AAAA,EAC5D;AAAA,EAEA,gBAAgB,IAAY;AACxB,WAAO,KAAK,UAAU,KAAK,SAAO,IAAI,OAAO,EAAE,KAAK;AAAA,EACxD;AAAA,EAEA,kBAAkB,MAAc;AACrB,WAAA,KAAK,UAAU,KAAK,CAAA,QAAO,IAAI,KAAK,SAAS,IAAI,KAAK;AAAA,EACjE;AACJ;ACjCA,MAAM,gBAAgB,WAAW;AAAA,EAM7B,YAAY,IAAY,QAAqB,MAAgB;AACzD,UAAM,IAAI,IAAI;AALlB;AACA,gCAAiB,CAAA;AACjB,qCAA2B,CAAA;AAIvB,SAAK,SAAS;AAAA,EAClB;AAAA,EAEA,IAAI,aAAa;AACN,WAAA,KAAK,KAAK,YAAY;AAAA,EACjC;AAAA,EAEA,IAAI,cAAc;AACd,WAAO,KAAK;AAAA,EAChB;AACJ;ACnBA,MAAM,eAAe,WAAW;AAAA,EAM5B,YAAY,IAAY,MAAgB,QAAiB,MAAM;AAC3D,UAAM,IAAI,IAAI;AALlB,iCAAmB,CAAA;AACnB,qCAA2B,CAAA;AAC3B,iCAAiB;AAIb,SAAK,QAAQ;AAAA,EACjB;AAAA,EAEA,IAAI,YAAY;AACL,WAAA,KAAK,KAAK,YAAY;AAAA,EACjC;AAAA,EAEA,IAAI,cAAc;AACP,WAAA,KAAK,KAAK,eAAe,WAAW;AAAA,EAC/C;AAAA,EAEA,IAAI,cAAc;AACP,WAAA,KAAK,aAAa,KAAK;AAAA,EAClC;AAAA,EAEA,IAAI,kBAAkB;AACX,WAAA,CAAC,KAAK,aAAa,KAAK;AAAA,EACnC;AAAA,EAEA,IAAI,aAAa;AACN,WAAA,KAAK,KAAK,YAAY;AAAA,EACjC;AAAA,EAEA,IAAI,SAAS;AAET,WAAO,KAAK,MAAM,OAAO,KAAK,MAAM,KAAK,MAAM,SAAS;AAAA,EAC5D;AACJ;AC9BA,MAAM,oBAAoB,WAAW;AAAA,EAIjC,YACI,IACO,UAA+B,CAAA,GACtC,MACF;AACE,UAAM,IAAI,IAAI;AAPlB,qCAA2B,CAAA;AAIhB,SAAA,UAAA;AAAA,EAIX;AAAA,EAEA,iBAAiB;AACN,WAAA,KAAK,KAAK,SAAS;AAAA,EAC9B;AAAA,EAEA,oBAAoC;AAC5B,QAAA,CAAC,KAAK,eAAe;AAAU,aAAA;AAC7B,UAAA,QAAQ,KAAK,QAAQ,KAAK,CAAA,WAAU,OAAO,eAAe,UAAU,OAAO,SAAS,OAAO;AACjG,QAAI,CAAC;AAAc,aAAA;AACb,UAAA,SAAS,KAAK,QAAQ,OAAO,CAAA,WAAU,OAAO,eAAe,UAAU,OAAO,SAAS,OAAO;AAC7F,WAAA;AAAA,MACH,MAAM;AAAA,MACN,aAAa,CAAC,OAAO,GAAG,MAAM,EAAE,IAAI,CAAU,WAAA;AAC1C,cAAM,MAAM,OAAO;AACZ,eAAA,IAAI,MAAM,IAAI,CAAQ,SAAA,CAAC,KAAK,OAAO,KAAK,KAAK,OAAO,GAAG,CAAa;AAAA,MAAA,CAC9E;AAAA,IAAA;AAAA,EAET;AACJ;ACtBA,MAAM,UAAU;AAAA,EAEZ,OAAO,kBAAkB,cAAsB;AAErC,UAAA,QAAQ,IAAI;AACZ,UAAA,SAAS,IAAIA,MAAAA;AAEf,QAAA;AAEE,UAAA,YAAY,CAAC,YACf,QAAQ,WAAW,UAAU,QAAQ,WAAW,WAAW;AAExD,WAAA,GAAG,WAAW,CAAC,SAAS;AAE3B,cAAQ,KAAK,MAAM;AAAA,QACf,KAAK,QAAQ;AACL,cAAA,UAAU,IAAI,GAAG;AACR,qBAAA;AACT;AAAA,UACJ;AACA,gBAAM,UAAU,KAAK,WAAW,KAAK,UAAwB;AACpD,mBAAA;AACH,gBAAA,MAAM,KAAK,OAAO;AACxB;AAAA,QACJ;AAAA,QACA,KAAK,OAAO;AACJ,cAAA,UAAU,IAAI,GAAG;AACR,qBAAA;AACT;AAAA,UACJ;AACA,gBAAM,SAAS,KAAK,UAAU,KAAK,UAAuB;AACjD,mBAAA;AACH,gBAAA,KAAK,KAAK,MAAM;AACtB;AAAA,QACJ;AAAA,QACA,KAAK,YAAY;AACT,cAAA,UAAU,IAAI,GAAG;AACR,qBAAA;AACT;AAAA,UACJ;AACA,gBAAM,cAAc,KAAK,eAAe,KAAK,UAA4B;AAChE,mBAAA;AACH,gBAAA,UAAU,KAAK,WAAW;AAChC;AAAA,QACJ;AAAA,QACA,KAAK,OAAO;AACR,cAAI,CAAC,QAAQ;AACT;AAAA,UACJ;AACM,gBAAA;AAAA,YACF;AAAA,YAAG;AAAA,UAAA,IACH,KAAK;AACT,iBAAO,KAAK,KAAK;AACjB;AAAA,QACJ;AAAA,QACA,KAAK,MAAM;AACP,cAAI,CAAC,UAAU,EAAE,kBAAkB,SAAS;AACxC;AAAA,UACJ;AACA,gBAAM,SAAS,OAAO,KAAK,WAAW,GAAG;AACnC,gBAAA,UAAU,MAAM,YAAY,MAAM;AACxC,cAAI,CAAC,SAAS;AACV,kBAAM,MAAM,WAAW,SAAS,aAAa,OAAO,KAAK,YAAY;AAAA,UACzE;AAEO,iBAAA,MAAM,KAAK,OAAO;AACjB,kBAAA,KAAK,KAAK,MAAM;AACxB;AAAA,QACJ;AAAA,QACA,KAAK,UAAU;AACX,cAAI,CAAC,UAAU,EAAE,kBAAkB,cAAc;AAC7C;AAAA,UACJ;AACA,gBAAM,WAAW,OAAO,KAAK,WAAW,GAAG;AACrC,gBAAA,aAAa,KAAK,WAAW;AACnC,cAAI,aAAoD;AACxD,yBAAe,WAAW,aAAa,MAAM,YAAY,QAAQ;AACjE,yBAAe,UAAU,aAAa,MAAM,WAAW,QAAQ;AAC/D,yBAAe,eAAe,aAAa,MAAM,gBAAgB,QAAQ;AAEzE,cAAI,CAAC,YAAY;AACb,kBAAM,MAAM,aAAa,WAAW,kBAAkB,OAAO,KAAK,YAAY;AAAA,UAClF;AAEO,iBAAA,QAAQ,KAAK,EAAE,KAAK,YAAY,MAAM,KAAK,WAAW,KAAA,CAAM;AACxD,qBAAA,UAAU,KAAK,MAAM;AAChC;AAAA,QACJ;AAAA,MACJ;AAAA,IAAA,CACH;AAED,WAAO,MAAM,YAAY;AAEzB,aAAS,IAAI,GAAG,IAAI,MAAM,KAAK,QAAQ,KAAK;AAClC,YAAA,MAAM,MAAM,KAAK;AACnB,UAAA,IAAI,KAAK,OAAO;AAChB,YAAI,QAAQC,UAAM,WAAW,IAAI,KAAK,KAAK;AAAA,MAC/C;AAAA,IACJ;AAEO,WAAA;AAAA,EACX;AAAA,EAGA,OAAO,WAAW,MAAkB;AAChC,WAAO,IAAI;AAAA,MACP,OAAO,KAAK,EAAE;AAAA,MACd,IAAIC,gBAAY,OAAO,KAAK,GAAG,GAAG,OAAO,KAAK,GAAG,CAAC;AAAA,IAAA;AAAA,EAC1D;AAAA,EAEA,OAAO,UAAU,MAAsB;AACnC,WAAO,IAAI,OAAO,OAAO,KAAK,EAAE,CAAC;AAAA,EACrC;AAAA,EAEA,OAAO,eAAe,MAAsB;AACxC,WAAO,IAAI,YAAY,OAAO,KAAK,EAAE,CAAC;AAAA,EAC1C;AACJ;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/OsmElement.ts","../src/OsmModel.ts","../src/OsmNode.ts","../src/OsmWay.ts","../src/OsmRelation.ts","../src/OsmParser.ts"],"sourcesContent":["\nexport type OsmTags = { [key: string]: string };\n\nclass OsmElement {\n\n id: number;\n tags: OsmTags;\n\n constructor(id: number, tags?: OsmTags) {\n this.id = id;\n this.tags = tags || {};\n }\n}\n\nexport default OsmElement;\n","import OsmNode from './OsmNode.js';\nimport OsmRelation from './OsmRelation.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmModel {\n\n nodes: OsmNode[];\n ways: OsmWay[];\n relations: OsmRelation[];\n\n constructor(nodes?: OsmNode[], ways?: OsmWay[], relations?: OsmRelation[]) {\n this.nodes = nodes || [];\n this.ways = ways || [];\n this.relations = relations || [];\n }\n\n getNodeById(id: number) {\n return this.nodes.find(node => node.id === id) || null;\n }\n\n getNodeByName(name: string) {\n return this.nodes.find(node => node.tags.name === name) || null;\n }\n\n getWayById(id: number) {\n return this.ways.find(way => way.id === id) || null;\n }\n\n getWayByName(name: string) {\n return this.ways.find(way => way.tags.name === name) || null;\n }\n\n getRelationById(id: number) {\n return this.relations.find(way => way.id === id) || null;\n }\n\n getRelationByName(name: string) {\n return this.relations.find(way => way.tags.name === name) || null;\n }\n}\n\nexport default OsmModel;\n","import { Coordinates, Level } from '@wemap/geo';\n\nimport OsmElement, { OsmTags } from './OsmElement.js';\nimport OsmRelation from './OsmRelation.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmNode extends OsmElement {\n\n coords : Coordinates;\n ways: OsmWay[] = [];\n relations: OsmRelation[] = [];\n\n constructor(id: number, coords: Coordinates, tags?: OsmTags) {\n super(id, tags);\n this.coords = coords;\n this.computeCoordsLevelFromTags();\n }\n\n computeCoordsLevelFromTags() {\n if ('level' in this.tags) {\n this.coords.level = Level.fromString(this.tags.level);\n }\n }\n\n get isElevator() {\n return this.tags.highway === 'elevator';\n }\n\n get isConveying() {\n return this.isElevator;\n }\n\n}\n\nexport default OsmNode;\n","import { Level, Level_t } from '@wemap/geo';\nimport OsmElement, { OsmTags } from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\nimport OsmRelation from './OsmRelation.js';\n\nclass OsmWay extends OsmElement {\n\n nodes: OsmNode[] = [];\n relations: OsmRelation[] = [];\n level: Level_t = null;\n\n constructor(id: number, tags?: OsmTags, level: Level_t = null) {\n super(id, tags);\n this.level = level;\n this.computeLevelFromTags();\n }\n\n computeLevelFromTags() {\n if ('level' in this.tags) {\n this.level = Level.fromString(this.tags.level);\n }\n }\n\n get areStairs() {\n return this.tags.highway === 'steps';\n }\n\n get isConveying() {\n return this.tags.hasOwnProperty('conveying');\n }\n\n get isEscalator() {\n return this.areStairs && this.isConveying;\n }\n\n get isMovingWalkway() {\n return !this.areStairs && this.isConveying;\n }\n\n get isElevator() {\n return this.tags.highway === 'elevator';\n }\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 OsmElement, { OsmTags } from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\nimport type { Position, Polygon } from 'geojson';\n\nexport type OsmRelationMember = {\n ref: OsmRelation | OsmWay | OsmNode,\n role: string\n}\n\nclass OsmRelation extends OsmElement {\n\n relations: OsmRelation[] = [];\n\n constructor(\n id: number,\n public members: OsmRelationMember[] = [],\n tags?: OsmTags\n ) {\n super(id, tags);\n }\n\n isMultipolygon() {\n return this.tags.type === 'multipolygon';\n }\n\n getGeoJsonPolygon(): Polygon | null {\n if (!this.isMultipolygon()) return null;\n const outer = this.members.find(member => member.ref instanceof OsmWay && member.role === 'outer');\n if (!outer) return null;\n const inners = this.members.filter(member => member.ref instanceof OsmWay && member.role === 'inner');\n return {\n type: \"Polygon\",\n coordinates: [outer, ...inners].map(member => {\n const way = member.ref as OsmWay;\n return way.nodes.map(node => [node.coords.lng, node.coords.lat] as Position);\n })\n }\n }\n}\n\nexport default OsmRelation;\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';\nimport OsmRelation from './OsmRelation.js';\n\ntype OsmXmlElement = { action?: 'delete' };\ntype OsmXmlNode = { id: string, lat: string, lon: string } & OsmXmlElement;\ntype OsmXmlWay = { id: string } & OsmXmlElement;\ntype OsmXmlRelation = { id: string } & OsmXmlElement;\n\nclass OsmParser {\n\n static parseOsmXmlString(osmXmlString: string) {\n\n const model = new OsmModel();\n const parser = new SaxesParser();\n\n let buffer: OsmNode | OsmWay | OsmRelation | null;\n\n const isDeleted = (element: { attributes: OsmXmlElement }) =>\n 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 as OsmXmlNode);\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 as OsmXmlWay);\n buffer = osmWay;\n model.ways.push(osmWay);\n break;\n }\n case 'relation': {\n if (isDeleted(node)) {\n buffer = null;\n break;\n }\n const osmRelation = this._parseRelation(node.attributes as OsmXmlRelation);\n buffer = osmRelation;\n model.relations.push(osmRelation);\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 case 'member': {\n if (!buffer || !(buffer instanceof OsmRelation)) {\n return;\n }\n const memberId = Number(node.attributes.ref);\n const memberType = node.attributes.type;\n let refElement: OsmNode | OsmWay | OsmRelation | null = null;\n memberType === 'node' && (refElement = model.getNodeById(memberId));\n memberType === 'way' && (refElement = model.getWayById(memberId));\n memberType === 'relation' && (refElement = model.getRelationById(memberId));\n\n if (!refElement) {\n throw Error('Member: ' + memberId + ' in relation ' + buffer.id + ' not found');\n }\n\n buffer.members.push({ ref: refElement, role: node.attributes.role });\n refElement.relations.push(buffer);\n break;\n }\n }\n });\n\n parser.write(osmXmlString);\n\n model.nodes.forEach(node => node.computeCoordsLevelFromTags());\n model.ways.forEach(way => way.computeLevelFromTags());\n\n return model;\n }\n\n\n static _parseNode(attr: OsmXmlNode) {\n return new OsmNode(\n Number(attr.id),\n new Coordinates(Number(attr.lat), Number(attr.lon)));\n }\n\n static _parseWay(attr: { id: string }) {\n return new OsmWay(Number(attr.id));\n }\n\n static _parseRelation(attr: { id: string }) {\n return new OsmRelation(Number(attr.id));\n }\n}\n\nexport default OsmParser;\n"],"names":["Level","SaxesParser","Coordinates"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -4,8 +4,8 @@ var __publicField = (obj, key, value) => {
|
|
|
4
4
|
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
5
|
return value;
|
|
6
6
|
};
|
|
7
|
-
import { SaxesParser } from "saxes";
|
|
8
7
|
import { Level, Coordinates } from "@wemap/geo";
|
|
8
|
+
import { SaxesParser } from "saxes";
|
|
9
9
|
class OsmElement {
|
|
10
10
|
constructor(id, tags) {
|
|
11
11
|
__publicField(this, "id");
|
|
@@ -49,6 +49,12 @@ class OsmNode extends OsmElement {
|
|
|
49
49
|
__publicField(this, "ways", []);
|
|
50
50
|
__publicField(this, "relations", []);
|
|
51
51
|
this.coords = coords;
|
|
52
|
+
this.computeCoordsLevelFromTags();
|
|
53
|
+
}
|
|
54
|
+
computeCoordsLevelFromTags() {
|
|
55
|
+
if ("level" in this.tags) {
|
|
56
|
+
this.coords.level = Level.fromString(this.tags.level);
|
|
57
|
+
}
|
|
52
58
|
}
|
|
53
59
|
get isElevator() {
|
|
54
60
|
return this.tags.highway === "elevator";
|
|
@@ -64,6 +70,12 @@ class OsmWay extends OsmElement {
|
|
|
64
70
|
__publicField(this, "relations", []);
|
|
65
71
|
__publicField(this, "level", null);
|
|
66
72
|
this.level = level;
|
|
73
|
+
this.computeLevelFromTags();
|
|
74
|
+
}
|
|
75
|
+
computeLevelFromTags() {
|
|
76
|
+
if ("level" in this.tags) {
|
|
77
|
+
this.level = Level.fromString(this.tags.level);
|
|
78
|
+
}
|
|
67
79
|
}
|
|
68
80
|
get areStairs() {
|
|
69
81
|
return this.tags.highway === "steps";
|
|
@@ -191,12 +203,8 @@ class OsmParser {
|
|
|
191
203
|
}
|
|
192
204
|
});
|
|
193
205
|
parser.write(osmXmlString);
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
if (way.tags.level) {
|
|
197
|
-
way.level = Level.fromString(way.tags.level);
|
|
198
|
-
}
|
|
199
|
-
}
|
|
206
|
+
model.nodes.forEach((node) => node.computeCoordsLevelFromTags());
|
|
207
|
+
model.ways.forEach((way) => way.computeLevelFromTags());
|
|
200
208
|
return model;
|
|
201
209
|
}
|
|
202
210
|
static _parseNode(attr) {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/OsmElement.ts","../src/OsmModel.ts","../src/OsmNode.ts","../src/OsmWay.ts","../src/OsmRelation.ts","../src/OsmParser.ts"],"sourcesContent":["\nexport type OsmTags = { [key: string]: string };\n\nclass OsmElement {\n\n id: number;\n tags: OsmTags;\n\n constructor(id: number, tags?: OsmTags) {\n this.id = id;\n this.tags = tags || {};\n }\n}\n\nexport default OsmElement;\n","import OsmNode from './OsmNode.js';\nimport OsmRelation from './OsmRelation.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmModel {\n\n nodes: OsmNode[];\n ways: OsmWay[];\n relations: OsmRelation[];\n\n constructor(nodes?: OsmNode[], ways?: OsmWay[], relations?: OsmRelation[]) {\n this.nodes = nodes || [];\n this.ways = ways || [];\n this.relations = relations || [];\n }\n\n getNodeById(id: number) {\n return this.nodes.find(node => node.id === id) || null;\n }\n\n getNodeByName(name: string) {\n return this.nodes.find(node => node.tags.name === name) || null;\n }\n\n getWayById(id: number) {\n return this.ways.find(way => way.id === id) || null;\n }\n\n getWayByName(name: string) {\n return this.ways.find(way => way.tags.name === name) || null;\n }\n\n getRelationById(id: number) {\n return this.relations.find(way => way.id === id) || null;\n }\n\n getRelationByName(name: string) {\n return this.relations.find(way => way.tags.name === name) || null;\n }\n}\n\nexport default OsmModel;\n","import { Coordinates } from '@wemap/geo';\n\nimport OsmElement, { OsmTags } from './OsmElement.js';\nimport OsmRelation from './OsmRelation.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmNode extends OsmElement {\n\n coords : Coordinates;\n ways: OsmWay[] = [];\n relations: OsmRelation[] = [];\n\n constructor(id: number, coords: Coordinates, tags?: OsmTags) {\n super(id, tags);\n this.coords = coords;\n }\n\n get isElevator() {\n return this.tags.highway === 'elevator';\n }\n\n get isConveying() {\n return this.isElevator;\n }\n}\n\nexport default OsmNode;\n","import { Level_t } from '@wemap/geo';\nimport OsmElement, { OsmTags } from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\nimport OsmRelation from './OsmRelation.js';\n\nclass OsmWay extends OsmElement {\n\n nodes: OsmNode[] = [];\n relations: OsmRelation[] = [];\n level: Level_t = null;\n\n constructor(id: number, tags?: OsmTags, level: Level_t = null) {\n super(id, tags);\n this.level = level;\n }\n\n get areStairs() {\n return this.tags.highway === 'steps';\n }\n\n get isConveying() {\n return this.tags.hasOwnProperty('conveying');\n }\n\n get isEscalator() {\n return this.areStairs && this.isConveying;\n }\n\n get isMovingWalkway() {\n return !this.areStairs && this.isConveying;\n }\n\n get isElevator() {\n return this.tags.highway === 'elevator';\n }\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 OsmElement, { OsmTags } from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\nimport type { Position, Polygon } from 'geojson';\n\nexport type OsmRelationMember = {\n ref: OsmRelation | OsmWay | OsmNode,\n role: string\n}\n\nclass OsmRelation extends OsmElement {\n\n relations: OsmRelation[] = [];\n\n constructor(\n id: number,\n public members: OsmRelationMember[] = [],\n tags?: OsmTags\n ) {\n super(id, tags);\n }\n\n isMultipolygon() {\n return this.tags.type === 'multipolygon';\n }\n\n getGeoJsonPolygon(): Polygon | null {\n if (!this.isMultipolygon()) return null;\n const outer = this.members.find(member => member.ref instanceof OsmWay && member.role === 'outer');\n if (!outer) return null;\n const inners = this.members.filter(member => member.ref instanceof OsmWay && member.role === 'inner');\n return {\n type: \"Polygon\",\n coordinates: [outer, ...inners].map(member => {\n const way = member.ref as OsmWay;\n return way.nodes.map(node => [node.coords.lng, node.coords.lat] as Position);\n })\n }\n }\n}\n\nexport default OsmRelation;\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';\nimport OsmRelation from './OsmRelation.js';\n\ntype OsmXmlElement = { action?: 'delete' };\ntype OsmXmlNode = { id: string, lat: string, lon: string } & OsmXmlElement;\ntype OsmXmlWay = { id: string } & OsmXmlElement;\ntype OsmXmlRelation = { id: string } & OsmXmlElement;\n\nclass OsmParser {\n\n static parseOsmXmlString(osmXmlString: string) {\n\n const model = new OsmModel();\n const parser = new SaxesParser();\n\n let buffer: OsmNode | OsmWay | OsmRelation | null;\n\n const isDeleted = (element: { attributes: OsmXmlElement }) =>\n 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 as OsmXmlNode);\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 as OsmXmlWay);\n buffer = osmWay;\n model.ways.push(osmWay);\n break;\n }\n case 'relation': {\n if (isDeleted(node)) {\n buffer = null;\n break;\n }\n const osmRelation = this._parseRelation(node.attributes as OsmXmlRelation);\n buffer = osmRelation;\n model.relations.push(osmRelation);\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 case 'member': {\n if (!buffer || !(buffer instanceof OsmRelation)) {\n return;\n }\n const memberId = Number(node.attributes.ref);\n const memberType = node.attributes.type;\n let refElement: OsmNode | OsmWay | OsmRelation | null = null;\n memberType === 'node' && (refElement = model.getNodeById(memberId));\n memberType === 'way' && (refElement = model.getWayById(memberId));\n memberType === 'relation' && (refElement = model.getRelationById(memberId));\n\n if (!refElement) {\n throw Error('Member: ' + memberId + ' in relation ' + buffer.id + ' not found');\n }\n\n buffer.members.push({ ref: refElement, role: node.attributes.role });\n refElement.relations.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: OsmXmlNode) {\n return new OsmNode(\n Number(attr.id),\n new Coordinates(Number(attr.lat), Number(attr.lon)));\n }\n\n static _parseWay(attr: { id: string }) {\n return new OsmWay(Number(attr.id));\n }\n\n static _parseRelation(attr: { id: string }) {\n return new OsmRelation(Number(attr.id));\n }\n}\n\nexport default OsmParser;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/OsmElement.ts","../src/OsmModel.ts","../src/OsmNode.ts","../src/OsmWay.ts","../src/OsmRelation.ts","../src/OsmParser.ts"],"sourcesContent":["\nexport type OsmTags = { [key: string]: string };\n\nclass OsmElement {\n\n id: number;\n tags: OsmTags;\n\n constructor(id: number, tags?: OsmTags) {\n this.id = id;\n this.tags = tags || {};\n }\n}\n\nexport default OsmElement;\n","import OsmNode from './OsmNode.js';\nimport OsmRelation from './OsmRelation.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmModel {\n\n nodes: OsmNode[];\n ways: OsmWay[];\n relations: OsmRelation[];\n\n constructor(nodes?: OsmNode[], ways?: OsmWay[], relations?: OsmRelation[]) {\n this.nodes = nodes || [];\n this.ways = ways || [];\n this.relations = relations || [];\n }\n\n getNodeById(id: number) {\n return this.nodes.find(node => node.id === id) || null;\n }\n\n getNodeByName(name: string) {\n return this.nodes.find(node => node.tags.name === name) || null;\n }\n\n getWayById(id: number) {\n return this.ways.find(way => way.id === id) || null;\n }\n\n getWayByName(name: string) {\n return this.ways.find(way => way.tags.name === name) || null;\n }\n\n getRelationById(id: number) {\n return this.relations.find(way => way.id === id) || null;\n }\n\n getRelationByName(name: string) {\n return this.relations.find(way => way.tags.name === name) || null;\n }\n}\n\nexport default OsmModel;\n","import { Coordinates, Level } from '@wemap/geo';\n\nimport OsmElement, { OsmTags } from './OsmElement.js';\nimport OsmRelation from './OsmRelation.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmNode extends OsmElement {\n\n coords : Coordinates;\n ways: OsmWay[] = [];\n relations: OsmRelation[] = [];\n\n constructor(id: number, coords: Coordinates, tags?: OsmTags) {\n super(id, tags);\n this.coords = coords;\n this.computeCoordsLevelFromTags();\n }\n\n computeCoordsLevelFromTags() {\n if ('level' in this.tags) {\n this.coords.level = Level.fromString(this.tags.level);\n }\n }\n\n get isElevator() {\n return this.tags.highway === 'elevator';\n }\n\n get isConveying() {\n return this.isElevator;\n }\n\n}\n\nexport default OsmNode;\n","import { Level, Level_t } from '@wemap/geo';\nimport OsmElement, { OsmTags } from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\nimport OsmRelation from './OsmRelation.js';\n\nclass OsmWay extends OsmElement {\n\n nodes: OsmNode[] = [];\n relations: OsmRelation[] = [];\n level: Level_t = null;\n\n constructor(id: number, tags?: OsmTags, level: Level_t = null) {\n super(id, tags);\n this.level = level;\n this.computeLevelFromTags();\n }\n\n computeLevelFromTags() {\n if ('level' in this.tags) {\n this.level = Level.fromString(this.tags.level);\n }\n }\n\n get areStairs() {\n return this.tags.highway === 'steps';\n }\n\n get isConveying() {\n return this.tags.hasOwnProperty('conveying');\n }\n\n get isEscalator() {\n return this.areStairs && this.isConveying;\n }\n\n get isMovingWalkway() {\n return !this.areStairs && this.isConveying;\n }\n\n get isElevator() {\n return this.tags.highway === 'elevator';\n }\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 OsmElement, { OsmTags } from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\nimport type { Position, Polygon } from 'geojson';\n\nexport type OsmRelationMember = {\n ref: OsmRelation | OsmWay | OsmNode,\n role: string\n}\n\nclass OsmRelation extends OsmElement {\n\n relations: OsmRelation[] = [];\n\n constructor(\n id: number,\n public members: OsmRelationMember[] = [],\n tags?: OsmTags\n ) {\n super(id, tags);\n }\n\n isMultipolygon() {\n return this.tags.type === 'multipolygon';\n }\n\n getGeoJsonPolygon(): Polygon | null {\n if (!this.isMultipolygon()) return null;\n const outer = this.members.find(member => member.ref instanceof OsmWay && member.role === 'outer');\n if (!outer) return null;\n const inners = this.members.filter(member => member.ref instanceof OsmWay && member.role === 'inner');\n return {\n type: \"Polygon\",\n coordinates: [outer, ...inners].map(member => {\n const way = member.ref as OsmWay;\n return way.nodes.map(node => [node.coords.lng, node.coords.lat] as Position);\n })\n }\n }\n}\n\nexport default OsmRelation;\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';\nimport OsmRelation from './OsmRelation.js';\n\ntype OsmXmlElement = { action?: 'delete' };\ntype OsmXmlNode = { id: string, lat: string, lon: string } & OsmXmlElement;\ntype OsmXmlWay = { id: string } & OsmXmlElement;\ntype OsmXmlRelation = { id: string } & OsmXmlElement;\n\nclass OsmParser {\n\n static parseOsmXmlString(osmXmlString: string) {\n\n const model = new OsmModel();\n const parser = new SaxesParser();\n\n let buffer: OsmNode | OsmWay | OsmRelation | null;\n\n const isDeleted = (element: { attributes: OsmXmlElement }) =>\n 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 as OsmXmlNode);\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 as OsmXmlWay);\n buffer = osmWay;\n model.ways.push(osmWay);\n break;\n }\n case 'relation': {\n if (isDeleted(node)) {\n buffer = null;\n break;\n }\n const osmRelation = this._parseRelation(node.attributes as OsmXmlRelation);\n buffer = osmRelation;\n model.relations.push(osmRelation);\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 case 'member': {\n if (!buffer || !(buffer instanceof OsmRelation)) {\n return;\n }\n const memberId = Number(node.attributes.ref);\n const memberType = node.attributes.type;\n let refElement: OsmNode | OsmWay | OsmRelation | null = null;\n memberType === 'node' && (refElement = model.getNodeById(memberId));\n memberType === 'way' && (refElement = model.getWayById(memberId));\n memberType === 'relation' && (refElement = model.getRelationById(memberId));\n\n if (!refElement) {\n throw Error('Member: ' + memberId + ' in relation ' + buffer.id + ' not found');\n }\n\n buffer.members.push({ ref: refElement, role: node.attributes.role });\n refElement.relations.push(buffer);\n break;\n }\n }\n });\n\n parser.write(osmXmlString);\n\n model.nodes.forEach(node => node.computeCoordsLevelFromTags());\n model.ways.forEach(way => way.computeLevelFromTags());\n\n return model;\n }\n\n\n static _parseNode(attr: OsmXmlNode) {\n return new OsmNode(\n Number(attr.id),\n new Coordinates(Number(attr.lat), Number(attr.lon)));\n }\n\n static _parseWay(attr: { id: string }) {\n return new OsmWay(Number(attr.id));\n }\n\n static _parseRelation(attr: { id: string }) {\n return new OsmRelation(Number(attr.id));\n }\n}\n\nexport default OsmParser;\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"directory": "packages/osm"
|
|
13
13
|
},
|
|
14
14
|
"name": "@wemap/osm",
|
|
15
|
-
"version": "11.0
|
|
15
|
+
"version": "11.3.0",
|
|
16
16
|
"bugs": {
|
|
17
17
|
"url": "https://github.com/wemap/wemap-modules-js/issues"
|
|
18
18
|
},
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
],
|
|
30
30
|
"license": "ISC",
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@wemap/geo": "^11.0
|
|
32
|
+
"@wemap/geo": "^11.3.0",
|
|
33
33
|
"@wemap/logger": "^11.0.1",
|
|
34
34
|
"saxes": "^5.0.1"
|
|
35
35
|
},
|
|
@@ -39,5 +39,5 @@
|
|
|
39
39
|
"require": "./dist/index.js"
|
|
40
40
|
}
|
|
41
41
|
},
|
|
42
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "61e38edddc0dc58fa32750b69939a580b204442e"
|
|
43
43
|
}
|
package/src/OsmNode.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Coordinates } from '@wemap/geo';
|
|
1
|
+
import { Coordinates, Level } from '@wemap/geo';
|
|
2
2
|
|
|
3
3
|
import OsmElement, { OsmTags } from './OsmElement.js';
|
|
4
4
|
import OsmRelation from './OsmRelation.js';
|
|
@@ -13,6 +13,13 @@ class OsmNode extends OsmElement {
|
|
|
13
13
|
constructor(id: number, coords: Coordinates, tags?: OsmTags) {
|
|
14
14
|
super(id, tags);
|
|
15
15
|
this.coords = coords;
|
|
16
|
+
this.computeCoordsLevelFromTags();
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
computeCoordsLevelFromTags() {
|
|
20
|
+
if ('level' in this.tags) {
|
|
21
|
+
this.coords.level = Level.fromString(this.tags.level);
|
|
22
|
+
}
|
|
16
23
|
}
|
|
17
24
|
|
|
18
25
|
get isElevator() {
|
|
@@ -22,6 +29,7 @@ class OsmNode extends OsmElement {
|
|
|
22
29
|
get isConveying() {
|
|
23
30
|
return this.isElevator;
|
|
24
31
|
}
|
|
32
|
+
|
|
25
33
|
}
|
|
26
34
|
|
|
27
35
|
export default OsmNode;
|
package/src/OsmParser.ts
CHANGED
|
@@ -108,12 +108,8 @@ class OsmParser {
|
|
|
108
108
|
|
|
109
109
|
parser.write(osmXmlString);
|
|
110
110
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
if (way.tags.level) {
|
|
114
|
-
way.level = Level.fromString(way.tags.level);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
111
|
+
model.nodes.forEach(node => node.computeCoordsLevelFromTags());
|
|
112
|
+
model.ways.forEach(way => way.computeLevelFromTags());
|
|
117
113
|
|
|
118
114
|
return model;
|
|
119
115
|
}
|
package/src/OsmWay.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Level_t } from '@wemap/geo';
|
|
1
|
+
import { Level, Level_t } from '@wemap/geo';
|
|
2
2
|
import OsmElement, { OsmTags } from './OsmElement.js';
|
|
3
3
|
import OsmNode from './OsmNode.js';
|
|
4
4
|
import OsmRelation from './OsmRelation.js';
|
|
@@ -12,6 +12,13 @@ class OsmWay extends OsmElement {
|
|
|
12
12
|
constructor(id: number, tags?: OsmTags, level: Level_t = null) {
|
|
13
13
|
super(id, tags);
|
|
14
14
|
this.level = level;
|
|
15
|
+
this.computeLevelFromTags();
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
computeLevelFromTags() {
|
|
19
|
+
if ('level' in this.tags) {
|
|
20
|
+
this.level = Level.fromString(this.tags.level);
|
|
21
|
+
}
|
|
15
22
|
}
|
|
16
23
|
|
|
17
24
|
get areStairs() {
|