@wemap/osm 13.2.0 → 14.2.0-beta.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/README.md +2 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +216 -2
- package/dist/src/OsmElement.d.ts +1 -0
- package/dist/src/OsmElement.d.ts.map +1 -0
- package/dist/src/OsmModel.d.ts +1 -0
- package/dist/src/OsmModel.d.ts.map +1 -0
- package/dist/src/OsmNode.d.ts +2 -1
- package/dist/src/OsmNode.d.ts.map +1 -0
- package/dist/src/OsmParser.d.ts +1 -0
- package/dist/src/OsmParser.d.ts.map +1 -0
- package/dist/src/OsmRelation.d.ts +5 -2
- package/dist/src/OsmRelation.d.ts.map +1 -0
- package/dist/src/OsmTags.d.ts +1 -0
- package/dist/src/OsmTags.d.ts.map +1 -0
- package/dist/src/OsmTagsUtils.d.ts +2 -1
- package/dist/src/OsmTagsUtils.d.ts.map +1 -0
- package/dist/src/OsmTypes.d.ts +1 -0
- package/dist/src/OsmTypes.d.ts.map +1 -0
- package/dist/src/OsmWay.d.ts +2 -1
- package/dist/src/OsmWay.d.ts.map +1 -0
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/package.json +26 -48
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -289
- package/dist/index.mjs.map +0 -1
package/README.md
ADDED
package/dist/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,216 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { Coordinates, Level } from "@wemap/geo";
|
|
2
|
+
import { SaxesParser } from "saxes";
|
|
3
|
+
var OsmElement_default = class {
|
|
4
|
+
id;
|
|
5
|
+
tags;
|
|
6
|
+
constructor(e, i) {
|
|
7
|
+
this.id = e, this.tags = i || {};
|
|
8
|
+
}
|
|
9
|
+
get name() {
|
|
10
|
+
return this.tags.name;
|
|
11
|
+
}
|
|
12
|
+
}, OsmWay_default = class extends OsmElement_default {
|
|
13
|
+
nodes = [];
|
|
14
|
+
relations = [];
|
|
15
|
+
level = null;
|
|
16
|
+
constructor(e, i, a = null) {
|
|
17
|
+
super(e, i), this.level = a, this.computeLevelFromTags();
|
|
18
|
+
}
|
|
19
|
+
computeLevelFromTags() {
|
|
20
|
+
this.tags.level !== void 0 && (this.level = Level.fromString(this.tags.level));
|
|
21
|
+
}
|
|
22
|
+
get isGeometryClosed() {
|
|
23
|
+
return this.nodes[0] === this.nodes[this.nodes.length - 1];
|
|
24
|
+
}
|
|
25
|
+
getGeoJsonPolygon() {
|
|
26
|
+
let e = this.nodes.map((e) => [e.coords.lng, e.coords.lat]);
|
|
27
|
+
return this.isGeometryClosed || e.push([this.nodes[0].coords.lng, this.nodes[0].coords.lat]), {
|
|
28
|
+
type: "Polygon",
|
|
29
|
+
coordinates: [e]
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
}, OsmRelation_default = class extends OsmElement_default {
|
|
33
|
+
relations = [];
|
|
34
|
+
members = [];
|
|
35
|
+
nodes = [];
|
|
36
|
+
ways = [];
|
|
37
|
+
constructor(e, i) {
|
|
38
|
+
super(e, i);
|
|
39
|
+
}
|
|
40
|
+
isMultipolygon() {
|
|
41
|
+
return this.tags.type === "multipolygon";
|
|
42
|
+
}
|
|
43
|
+
getGeoJsonPolygon() {
|
|
44
|
+
if (!this.isMultipolygon()) return null;
|
|
45
|
+
let e = this.members.find((e) => e.ref instanceof OsmWay_default && e.role === "outer");
|
|
46
|
+
return e ? {
|
|
47
|
+
type: "Polygon",
|
|
48
|
+
coordinates: [e, ...this.members.filter((e) => e.ref instanceof OsmWay_default && e.role === "inner")].map((e) => e.ref.nodes.map((e) => [e.coords.lng, e.coords.lat]))
|
|
49
|
+
} : null;
|
|
50
|
+
}
|
|
51
|
+
}, OsmNode_default = class extends OsmElement_default {
|
|
52
|
+
coords;
|
|
53
|
+
ways = [];
|
|
54
|
+
relations = [];
|
|
55
|
+
constructor(e, i, a) {
|
|
56
|
+
super(e, a), this.coords = i, this.computeCoordsLevelFromTags();
|
|
57
|
+
}
|
|
58
|
+
computeCoordsLevelFromTags() {
|
|
59
|
+
this.tags.level !== void 0 && (this.coords.level = Level.fromString(this.tags.level));
|
|
60
|
+
}
|
|
61
|
+
}, OsmModel_default = class {
|
|
62
|
+
nodes;
|
|
63
|
+
ways;
|
|
64
|
+
relations;
|
|
65
|
+
constructor(e, i, a) {
|
|
66
|
+
this.nodes = e || [], this.ways = i || [], this.relations = a || [];
|
|
67
|
+
}
|
|
68
|
+
getNodeById(e) {
|
|
69
|
+
return this.nodes.find((i) => i.id === e) || null;
|
|
70
|
+
}
|
|
71
|
+
getNodeByName(e) {
|
|
72
|
+
return this.nodes.find((i) => i.tags.name === e) || null;
|
|
73
|
+
}
|
|
74
|
+
getWayById(e) {
|
|
75
|
+
return this.ways.find((i) => i.id === e) || null;
|
|
76
|
+
}
|
|
77
|
+
getWayByName(e) {
|
|
78
|
+
return this.ways.find((i) => i.tags.name === e) || null;
|
|
79
|
+
}
|
|
80
|
+
getRelationById(e) {
|
|
81
|
+
return this.relations.find((i) => i.id === e) || null;
|
|
82
|
+
}
|
|
83
|
+
getRelationByName(e) {
|
|
84
|
+
return this.relations.find((i) => i.tags.name === e) || null;
|
|
85
|
+
}
|
|
86
|
+
}, OsmParser_default = class {
|
|
87
|
+
static parseOsmXmlString(e) {
|
|
88
|
+
let i = new OsmModel_default(), o = new SaxesParser(), c, l = (e) => e.attributes.action && e.attributes.action === "delete";
|
|
89
|
+
return o.on("opentag", (e) => {
|
|
90
|
+
switch (e.name) {
|
|
91
|
+
case "node": {
|
|
92
|
+
if (l(e)) {
|
|
93
|
+
c = null;
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
let a = this._parseNode(e.attributes);
|
|
97
|
+
c = a, i.nodes.push(a);
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
case "way": {
|
|
101
|
+
if (l(e)) {
|
|
102
|
+
c = null;
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
let a = this._parseWay(e.attributes);
|
|
106
|
+
c = a, i.ways.push(a);
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
case "relation": {
|
|
110
|
+
if (l(e)) {
|
|
111
|
+
c = null;
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
let a = this._parseRelation(e.attributes);
|
|
115
|
+
c = a, i.relations.push(a);
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
case "tag": {
|
|
119
|
+
if (!c) return;
|
|
120
|
+
let { k: i, v: a } = e.attributes;
|
|
121
|
+
c.tags[i] = a;
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
case "nd": {
|
|
125
|
+
if (!c || !(c instanceof OsmWay_default)) return;
|
|
126
|
+
let a = Number(e.attributes.ref), o = i.getNodeById(a);
|
|
127
|
+
if (!o) throw Error("Node: " + a + " in way " + c.id + " not found");
|
|
128
|
+
c.nodes.push(o), o.ways.push(c);
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
case "member": {
|
|
132
|
+
if (!c || !(c instanceof OsmRelation_default)) return;
|
|
133
|
+
let a = Number(e.attributes.ref), o = e.attributes.type, s = null;
|
|
134
|
+
if (o === "node" && (s = i.getNodeById(a)), o === "way" && (s = i.getWayById(a)), o === "relation" && (s = i.getRelationById(a)), !s) throw Error("Member: " + a + " in relation " + c.id + " not found");
|
|
135
|
+
c.members.push({
|
|
136
|
+
ref: s,
|
|
137
|
+
role: e.attributes.role
|
|
138
|
+
}), s.relations.push(c);
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}), o.write(e), i.nodes.forEach((e) => e.computeCoordsLevelFromTags()), i.ways.forEach((e) => e.computeLevelFromTags()), i;
|
|
143
|
+
}
|
|
144
|
+
static _parseNode(i) {
|
|
145
|
+
return new OsmNode_default(Number(i.id), new Coordinates(Number(i.lat), Number(i.lon)));
|
|
146
|
+
}
|
|
147
|
+
static _parseWay(e) {
|
|
148
|
+
return new OsmWay_default(Number(e.id));
|
|
149
|
+
}
|
|
150
|
+
static _parseRelation(e) {
|
|
151
|
+
return new OsmRelation_default(Number(e.id));
|
|
152
|
+
}
|
|
153
|
+
}, OsmTagsUtils = class {
|
|
154
|
+
static elementName(e) {
|
|
155
|
+
return e.name;
|
|
156
|
+
}
|
|
157
|
+
static areStairs(e) {
|
|
158
|
+
return e.highway === "steps" && !e.conveying;
|
|
159
|
+
}
|
|
160
|
+
static isConveying(e) {
|
|
161
|
+
return !!e.conveying || this.isElevator(e);
|
|
162
|
+
}
|
|
163
|
+
static isElevator(e) {
|
|
164
|
+
return e.highway === "elevator";
|
|
165
|
+
}
|
|
166
|
+
static isEscalator(e) {
|
|
167
|
+
return e.highway === "steps" && this.isConveying(e);
|
|
168
|
+
}
|
|
169
|
+
static isMovingWalkway(e) {
|
|
170
|
+
return !!e.highway && e.highway !== "steps" && this.isConveying(e);
|
|
171
|
+
}
|
|
172
|
+
static isOneway(e) {
|
|
173
|
+
let { highway: i, oneway: a, conveying: o } = e;
|
|
174
|
+
return !!(a === "yes" || o && i && ["forward", "backward"].includes(o));
|
|
175
|
+
}
|
|
176
|
+
static isOnewayBackward(e) {
|
|
177
|
+
return this.isOneway(e) && e.conveying === "backward";
|
|
178
|
+
}
|
|
179
|
+
static needTicket(e) {
|
|
180
|
+
return !1;
|
|
181
|
+
}
|
|
182
|
+
static getIncline(e) {
|
|
183
|
+
if (e.incline && ["up", "down"].includes(e.incline)) return e.incline;
|
|
184
|
+
}
|
|
185
|
+
static getWheelchair(e) {
|
|
186
|
+
return "wheelchair" in e ? e.wheelchair : void 0;
|
|
187
|
+
}
|
|
188
|
+
static getSurface(e) {
|
|
189
|
+
return "surface" in e ? e.surface : void 0;
|
|
190
|
+
}
|
|
191
|
+
static getSmoothness(e) {
|
|
192
|
+
return "smoothness" in e ? e.smoothness : void 0;
|
|
193
|
+
}
|
|
194
|
+
static isSubwayEntrance(e) {
|
|
195
|
+
return e.railway === "subway_entrance";
|
|
196
|
+
}
|
|
197
|
+
static getRef(e) {
|
|
198
|
+
return e.ref;
|
|
199
|
+
}
|
|
200
|
+
static isGate(e) {
|
|
201
|
+
return e.barrier === "gate" || e.aeroway === "gate";
|
|
202
|
+
}
|
|
203
|
+
static isArea(e) {
|
|
204
|
+
return e.area === "yes";
|
|
205
|
+
}
|
|
206
|
+
static isTurnstile(e) {
|
|
207
|
+
return e.barrier === "turnstile";
|
|
208
|
+
}
|
|
209
|
+
static isRoutingBounds(e) {
|
|
210
|
+
return e["wemap:routing-bounds"] === "yes";
|
|
211
|
+
}
|
|
212
|
+
static isRoutingBoundsEntryPoint(e) {
|
|
213
|
+
return e["wemap:routing-io"] === "yes";
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
export { OsmElement_default as OsmElement, OsmModel_default as OsmModel, OsmNode_default as OsmNode, OsmParser_default as OsmParser, OsmRelation_default as OsmRelation, OsmTagsUtils, OsmWay_default as OsmWay };
|
package/dist/src/OsmElement.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OsmElement.d.ts","sourceRoot":"","sources":["../../src/OsmElement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,cAAM,UAAU;IAEZ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC;gBAEF,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO;IAKtC,IAAI,IAAI,IAAI,MAAM,GAAG,SAAS,CAE7B;CACJ;AAED,eAAe,UAAU,CAAC"}
|
package/dist/src/OsmModel.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OsmModel.d.ts","sourceRoot":"","sources":["../../src/OsmModel.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,cAAM,QAAQ;IAEV,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,WAAW,EAAE,CAAC;gBAEb,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,EAAE,WAAW,EAAE;IAMzE,WAAW,CAAC,EAAE,EAAE,MAAM;IAItB,aAAa,CAAC,IAAI,EAAE,MAAM;IAI1B,UAAU,CAAC,EAAE,EAAE,MAAM;IAIrB,YAAY,CAAC,IAAI,EAAE,MAAM;IAIzB,eAAe,CAAC,EAAE,EAAE,MAAM;IAI1B,iBAAiB,CAAC,IAAI,EAAE,MAAM;CAGjC;AAED,eAAe,QAAQ,CAAC"}
|
package/dist/src/OsmNode.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Coordinates } from '
|
|
1
|
+
import { Coordinates } from '../../geo';
|
|
2
2
|
import { default as OsmElement } from './OsmElement.js';
|
|
3
3
|
import { default as OsmRelation } from './OsmRelation.js';
|
|
4
4
|
import { default as OsmWay } from './OsmWay.js';
|
|
@@ -11,3 +11,4 @@ declare class OsmNode extends OsmElement {
|
|
|
11
11
|
computeCoordsLevelFromTags(): void;
|
|
12
12
|
}
|
|
13
13
|
export default OsmNode;
|
|
14
|
+
//# sourceMappingURL=OsmNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OsmNode.d.ts","sourceRoot":"","sources":["../../src/OsmNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAS,MAAM,YAAY,CAAC;AAEhD,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,cAAM,OAAQ,SAAQ,UAAU;IAE5B,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAM;IACpB,SAAS,EAAE,WAAW,EAAE,CAAM;gBAElB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,OAAO;IAM3D,0BAA0B;CAM7B;AAED,eAAe,OAAO,CAAC"}
|
package/dist/src/OsmParser.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OsmParser.d.ts","sourceRoot":"","sources":["../../src/OsmParser.ts"],"names":[],"mappings":"AAKA,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAG3C,KAAK,aAAa,GAAG;IAAE,MAAM,CAAC,EAAE,QAAQ,CAAA;CAAE,CAAC;AAC3C,KAAK,UAAU,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,aAAa,CAAC;AAI3E,cAAM,SAAS;IAEX,MAAM,CAAC,iBAAiB,CAAC,YAAY,EAAE,MAAM;IAkG7C,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU;IAMlC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE;IAIrC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE;CAG7C;AAED,eAAe,SAAS,CAAC"}
|
|
@@ -8,10 +8,13 @@ export type OsmRelationMember = {
|
|
|
8
8
|
role: string;
|
|
9
9
|
};
|
|
10
10
|
declare class OsmRelation extends OsmElement {
|
|
11
|
-
members: OsmRelationMember[];
|
|
12
11
|
relations: OsmRelation[];
|
|
13
|
-
|
|
12
|
+
members: OsmRelationMember[];
|
|
13
|
+
nodes: OsmNode[];
|
|
14
|
+
ways: OsmWay[];
|
|
15
|
+
constructor(id: number, tags?: OsmTags);
|
|
14
16
|
isMultipolygon(): boolean;
|
|
15
17
|
getGeoJsonPolygon(): Polygon | null;
|
|
16
18
|
}
|
|
17
19
|
export default OsmRelation;
|
|
20
|
+
//# sourceMappingURL=OsmRelation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OsmRelation.d.ts","sourceRoot":"","sources":["../../src/OsmRelation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,OAAO,EAAE,MAAM,SAAS,CAAC;AAEjD,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,MAAM,iBAAiB,GAAG;IAC5B,GAAG,EAAE,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC;IACpC,IAAI,EAAE,MAAM,CAAA;CACf,CAAA;AAED,cAAM,WAAY,SAAQ,UAAU;IAEhC,SAAS,EAAE,WAAW,EAAE,CAAM;IAC9B,OAAO,EAAE,iBAAiB,EAAE,CAAM;IAClC,KAAK,EAAE,OAAO,EAAE,CAAM;IACtB,IAAI,EAAE,MAAM,EAAE,CAAM;gBAGhB,EAAE,EAAE,MAAM,EACV,IAAI,CAAC,EAAE,OAAO;IAKlB,cAAc;IAId,iBAAiB,IAAI,OAAO,GAAG,IAAI;CAatC;AAED,eAAe,WAAW,CAAC"}
|
package/dist/src/OsmTags.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OsmTags.d.ts","sourceRoot":"","sources":["../../src/OsmTags.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,eAAe,GAAG,MAAM,GAAG,OAAO,CAAC;AAE7I,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,MAAM,GAAG,cAAc,GAAG,KAAK,GAAG,UAAU,CAAC;AAEvF,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,YAAY,CAAC;AAEpE,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,gBAAgB,CAAC;AAE7E,MAAM,MAAM,OAAO,GAAG;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,SAAS,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;IAC1D,MAAM,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,UAAU,CAAC;IAChF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,WAAW,CAAC;IACrE,OAAO,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC7B,IAAI,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,YAAY,CAAC;IACnC,MAAM,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,WAAW,GAAG,YAAY,GAAG,aAAa,CAAC;IAC/E,OAAO,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IAClC,gBAAgB,CAAC,EAAE,UAAU,GAAG,eAAe,GAAG,SAAS,GAAG,WAAW,CAAC;IAC1E,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAExC,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GACtC,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,WAAW,GAC7C,gBAAgB,GAAG,eAAe,GAAG,WAAW,CAAC;IAGvD,sBAAsB,CAAC,EAAE,KAAK,CAAC;IAC/B,kBAAkB,CAAC,EAAE,KAAK,CAAC;CAC9B,CAAA"}
|
|
@@ -8,7 +8,7 @@ export default class OsmTagsUtils {
|
|
|
8
8
|
static isMovingWalkway(tags: OsmTags): boolean;
|
|
9
9
|
static isOneway(tags: OsmTags): boolean;
|
|
10
10
|
static isOnewayBackward(tags: OsmTags): boolean;
|
|
11
|
-
static needTicket(
|
|
11
|
+
static needTicket(_tags: OsmTags): boolean;
|
|
12
12
|
static getIncline(tags: OsmTags): "up" | "down" | undefined;
|
|
13
13
|
static getWheelchair(tags: OsmTags): import('./OsmTags.js').OsmWheelchair | undefined;
|
|
14
14
|
static getSurface(tags: OsmTags): import('./OsmTags.js').OsmSurface | undefined;
|
|
@@ -21,3 +21,4 @@ export default class OsmTagsUtils {
|
|
|
21
21
|
static isRoutingBounds(tags: OsmTags): boolean;
|
|
22
22
|
static isRoutingBoundsEntryPoint(tags: OsmTags): boolean;
|
|
23
23
|
}
|
|
24
|
+
//# sourceMappingURL=OsmTagsUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OsmTagsUtils.d.ts","sourceRoot":"","sources":["../../src/OsmTagsUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,CAAC,OAAO,OAAO,YAAY;IAE7B,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO;IAIhC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO;IAI9B,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO;IAIhC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO;IAI/B,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO;IAIhC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO;IAIpC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO;IAM7B,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO;IAIrC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO;IAKhC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO;IAK/B,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO;IAIlC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO;IAI/B,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO;IAIlC,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO;IAIrC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO;IAI3B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO;IAI3B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO;IAI3B,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO;IAMhC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO;IAIpC,MAAM,CAAC,yBAAyB,CAAC,IAAI,EAAE,OAAO;CAKjD"}
|
package/dist/src/OsmTypes.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export type OsmSurface = 'asphalt' | 'compacted' | 'concrete' | 'grass' | 'gravel' | 'ground' | 'metal' | 'paving_stones' | 'wood';
|
|
2
2
|
export type OsmSmoothness = 'excellent' | 'good' | 'intermediate' | 'bad' | 'horrible';
|
|
3
3
|
export type OsmWheelchair = 'yes' | 'no' | 'designated';
|
|
4
|
+
//# sourceMappingURL=OsmTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OsmTypes.d.ts","sourceRoot":"","sources":["../../src/OsmTypes.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,eAAe,GAAG,MAAM,CAAC;AAEnI,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,MAAM,GAAG,cAAc,GAAG,KAAK,GAAG,UAAU,CAAC;AAEvF,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,IAAI,GAAG,YAAY,CAAC"}
|
package/dist/src/OsmWay.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Polygon } from 'geojson';
|
|
2
|
-
import { Level_t } from '
|
|
2
|
+
import { Level_t } from '../../geo';
|
|
3
3
|
import { default as OsmElement } from './OsmElement.js';
|
|
4
4
|
import { default as OsmNode } from './OsmNode.js';
|
|
5
5
|
import { default as OsmRelation } from './OsmRelation.js';
|
|
@@ -14,3 +14,4 @@ declare class OsmWay extends OsmElement {
|
|
|
14
14
|
getGeoJsonPolygon(): Polygon;
|
|
15
15
|
}
|
|
16
16
|
export default OsmWay;
|
|
17
|
+
//# sourceMappingURL=OsmWay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OsmWay.d.ts","sourceRoot":"","sources":["../../src/OsmWay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,cAAM,MAAO,SAAQ,UAAU;IAE3B,KAAK,EAAE,OAAO,EAAE,CAAM;IACtB,SAAS,EAAE,WAAW,EAAE,CAAM;IAC9B,KAAK,EAAE,OAAO,CAAQ;gBAEV,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,GAAE,OAAc;IAM7D,oBAAoB;IAMpB,IAAI,gBAAgB,YAEnB;IAED,iBAAiB,IAAK,OAAO;CAahC;AAED,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitest.config.d.ts","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":";AAMA,wBAcG"}
|
package/package.json
CHANGED
|
@@ -1,50 +1,28 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
"wemap"
|
|
29
|
-
],
|
|
30
|
-
"license": "ISC",
|
|
31
|
-
"dependencies": {
|
|
32
|
-
"@wemap/geo": "^13.1.0",
|
|
33
|
-
"@wemap/logger": "^13.0.0",
|
|
34
|
-
"saxes": "^5.0.1"
|
|
35
|
-
},
|
|
36
|
-
"files": [
|
|
37
|
-
"dist"
|
|
38
|
-
],
|
|
39
|
-
"exports": {
|
|
40
|
-
".": {
|
|
41
|
-
"types": "./dist/index.d.ts",
|
|
42
|
-
"import": "./dist/index.mjs",
|
|
43
|
-
"require": "./dist/index.js"
|
|
44
|
-
}
|
|
45
|
-
},
|
|
46
|
-
"devDependencies": {
|
|
47
|
-
"@types/geojson": "^7946.0.14"
|
|
48
|
-
},
|
|
49
|
-
"gitHead": "94a6b032965510c3128d570acccf3fb963161c38"
|
|
2
|
+
"name": "@wemap/osm",
|
|
3
|
+
"version": "14.2.0-beta.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"private": false,
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "public"
|
|
8
|
+
},
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"import": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist"
|
|
19
|
+
],
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"@wemap/geo": "14.2.0-beta.0",
|
|
22
|
+
"saxes": "^5.0.1"
|
|
23
|
+
},
|
|
24
|
+
"devDependencies": {
|
|
25
|
+
"@types/geojson": "^7946.0.14",
|
|
26
|
+
"@wemap/logger-legacy": "^13.3.0"
|
|
27
|
+
}
|
|
50
28
|
}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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","../src/OsmTagsUtils.ts"],"sourcesContent":["import { OsmTags } from './OsmTags.js';\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 get name(): string | undefined {\n return this.tags.name;\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 from './OsmElement.js';\nimport OsmRelation from './OsmRelation.js';\nimport OsmWay from './OsmWay.js';\nimport type { OsmTags } from './OsmTags.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 (typeof this.tags.level !== 'undefined') {\n this.coords.level = Level.fromString(this.tags.level);\n }\n }\n\n}\n\nexport default OsmNode;\n","import { Polygon } from 'geojson';\n\nimport { Level, Level_t } from '@wemap/geo';\n\nimport OsmElement from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\nimport OsmRelation from './OsmRelation.js';\nimport { OsmTags } from './OsmTags.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 (typeof this.tags.level !== 'undefined') {\n this.level = Level.fromString(this.tags.level);\n }\n }\n\n get isGeometryClosed() {\n return this.nodes[0] === this.nodes[this.nodes.length - 1];\n }\n\n getGeoJsonPolygon() : Polygon {\n const coordinates = this.nodes.map(node => [node.coords.lng, node.coords.lat]);\n \n // If the way is not already closed, add the first node at the end\n if (!this.isGeometryClosed) {\n coordinates.push([this.nodes[0].coords.lng, this.nodes[0].coords.lat]);\n }\n\n return {\n type: 'Polygon',\n coordinates: [coordinates]\n };\n }\n}\n\nexport default OsmWay;\n","import type { Position, Polygon } from 'geojson';\n\nimport OsmElement from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\nimport type { OsmTags } from './OsmTags.js';\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 { Coordinates } from '@wemap/geo';\n\nimport OsmModel from './OsmModel.js';\nimport OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\nimport OsmRelation from './OsmRelation.js';\nimport { OsmTags } from './OsmTags.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 as keyof OsmTags] = v as any;\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","import { OsmTags } from './OsmTags.js';\n\nexport default class OsmTagsUtils {\n\n static elementName(tags: OsmTags) {\n return tags.name;\n }\n\n static areStairs(tags: OsmTags) {\n return tags.highway === 'steps' && !tags.conveying;\n }\n\n static isConveying(tags: OsmTags) {\n return Boolean(tags.conveying) || this.isElevator(tags);\n }\n\n static isElevator(tags: OsmTags) {\n return tags.highway === 'elevator';\n }\n\n static isEscalator(tags: OsmTags) {\n return tags.highway === 'steps' && this.isConveying(tags);\n }\n\n static isMovingWalkway(tags: OsmTags) {\n return Boolean(tags.highway) && tags.highway !== 'steps' && this.isConveying(tags);\n }\n\n static isOneway(tags: OsmTags) {\n const { highway, oneway, conveying } = tags;\n return Boolean((oneway === 'yes')\n || (conveying && highway && ['forward', 'backward'].includes(conveying)));\n }\n\n static isOnewayBackward(tags: OsmTags) {\n return this.isOneway(tags) && tags.conveying === 'backward';\n }\n\n static needTicket(tags: OsmTags) {\n // TODO\n return false;\n }\n\n static getIncline(tags: OsmTags) {\n if (tags.incline && ['up', 'down'].includes(tags.incline))\n return tags.incline;\n }\n\n static getWheelchair(tags: OsmTags) {\n return 'wheelchair' in tags ? tags.wheelchair : undefined;\n }\n\n static getSurface(tags: OsmTags) {\n return 'surface' in tags ? tags.surface : undefined;\n }\n\n static getSmoothness(tags: OsmTags) {\n return 'smoothness' in tags ? tags.smoothness : undefined;\n }\n\n static isSubwayEntrance(tags: OsmTags) {\n return tags.railway === 'subway_entrance';\n }\n\n static getRef(tags: OsmTags) {\n return tags.ref;\n }\n\n static isGate(tags: OsmTags) {\n return tags.barrier === 'gate' || tags.aeroway === 'gate';\n }\n\n static isArea(tags: OsmTags) {\n return tags.area === 'yes';\n }\n\n static isTurnstile(tags: OsmTags) {\n return tags.barrier === 'turnstile';\n }\n\n // Wemap specific\n\n static isRoutingBounds(tags: OsmTags) {\n return tags['wemap:routing-bounds'] === 'yes';\n }\n\n static isRoutingBoundsEntryPoint(tags: OsmTags) {\n return tags['wemap:routing-io'] === 'yes';\n }\n \n \n}"],"names":["OsmElement","constructor","id","tags","__publicField","this","name","OsmModel","nodes","ways","relations","getNodeById","find","node","getNodeByName","getWayById","way","getWayByName","getRelationById","getRelationByName","OsmNode","coords","super","computeCoordsLevelFromTags","level","Level","fromString","OsmWay","computeLevelFromTags","isGeometryClosed","length","getGeoJsonPolygon","coordinates","map","lng","lat","push","type","OsmRelation","members","isMultipolygon","outer","member","ref","role","filter","parseOsmXmlString","osmXmlString","model","parser","SaxesParser","buffer","isDeleted","element","attributes","action","on","osmNode","_parseNode","osmWay","_parseWay","osmRelation","_parseRelation","k","v","nodeId","Number","refNode","Error","memberId","memberType","refElement","write","forEach","attr","Coordinates","lon","elementName","areStairs","highway","conveying","isConveying","Boolean","isElevator","isEscalator","isMovingWalkway","isOneway","oneway","includes","isOnewayBackward","needTicket","getIncline","incline","getWheelchair","wheelchair","getSurface","surface","getSmoothness","smoothness","isSubwayEntrance","railway","getRef","isGate","barrier","aeroway","isArea","area","isTurnstile","isRoutingBounds","isRoutingBoundsEntryPoint"],"mappings":"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"}
|
package/dist/index.mjs
DELETED
|
@@ -1,289 +0,0 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
-
var __publicField = (obj, key, value) => {
|
|
4
|
-
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
-
return value;
|
|
6
|
-
};
|
|
7
|
-
import { Level, Coordinates } from "@wemap/geo";
|
|
8
|
-
import { SaxesParser } from "saxes";
|
|
9
|
-
class OsmElement {
|
|
10
|
-
constructor(id, tags) {
|
|
11
|
-
__publicField(this, "id");
|
|
12
|
-
__publicField(this, "tags");
|
|
13
|
-
this.id = id;
|
|
14
|
-
this.tags = tags || {};
|
|
15
|
-
}
|
|
16
|
-
get name() {
|
|
17
|
-
return this.tags.name;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
class OsmModel {
|
|
21
|
-
constructor(nodes, ways, relations) {
|
|
22
|
-
__publicField(this, "nodes");
|
|
23
|
-
__publicField(this, "ways");
|
|
24
|
-
__publicField(this, "relations");
|
|
25
|
-
this.nodes = nodes || [];
|
|
26
|
-
this.ways = ways || [];
|
|
27
|
-
this.relations = relations || [];
|
|
28
|
-
}
|
|
29
|
-
getNodeById(id) {
|
|
30
|
-
return this.nodes.find((node) => node.id === id) || null;
|
|
31
|
-
}
|
|
32
|
-
getNodeByName(name) {
|
|
33
|
-
return this.nodes.find((node) => node.tags.name === name) || null;
|
|
34
|
-
}
|
|
35
|
-
getWayById(id) {
|
|
36
|
-
return this.ways.find((way) => way.id === id) || null;
|
|
37
|
-
}
|
|
38
|
-
getWayByName(name) {
|
|
39
|
-
return this.ways.find((way) => way.tags.name === name) || null;
|
|
40
|
-
}
|
|
41
|
-
getRelationById(id) {
|
|
42
|
-
return this.relations.find((way) => way.id === id) || null;
|
|
43
|
-
}
|
|
44
|
-
getRelationByName(name) {
|
|
45
|
-
return this.relations.find((way) => way.tags.name === name) || null;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
class OsmNode extends OsmElement {
|
|
49
|
-
constructor(id, coords, tags) {
|
|
50
|
-
super(id, tags);
|
|
51
|
-
__publicField(this, "coords");
|
|
52
|
-
__publicField(this, "ways", []);
|
|
53
|
-
__publicField(this, "relations", []);
|
|
54
|
-
this.coords = coords;
|
|
55
|
-
this.computeCoordsLevelFromTags();
|
|
56
|
-
}
|
|
57
|
-
computeCoordsLevelFromTags() {
|
|
58
|
-
if (typeof this.tags.level !== "undefined") {
|
|
59
|
-
this.coords.level = Level.fromString(this.tags.level);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
class OsmWay extends OsmElement {
|
|
64
|
-
constructor(id, tags, level = null) {
|
|
65
|
-
super(id, tags);
|
|
66
|
-
__publicField(this, "nodes", []);
|
|
67
|
-
__publicField(this, "relations", []);
|
|
68
|
-
__publicField(this, "level", null);
|
|
69
|
-
this.level = level;
|
|
70
|
-
this.computeLevelFromTags();
|
|
71
|
-
}
|
|
72
|
-
computeLevelFromTags() {
|
|
73
|
-
if (typeof this.tags.level !== "undefined") {
|
|
74
|
-
this.level = Level.fromString(this.tags.level);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
get isGeometryClosed() {
|
|
78
|
-
return this.nodes[0] === this.nodes[this.nodes.length - 1];
|
|
79
|
-
}
|
|
80
|
-
getGeoJsonPolygon() {
|
|
81
|
-
const coordinates = this.nodes.map((node) => [node.coords.lng, node.coords.lat]);
|
|
82
|
-
if (!this.isGeometryClosed) {
|
|
83
|
-
coordinates.push([this.nodes[0].coords.lng, this.nodes[0].coords.lat]);
|
|
84
|
-
}
|
|
85
|
-
return {
|
|
86
|
-
type: "Polygon",
|
|
87
|
-
coordinates: [coordinates]
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
class OsmRelation extends OsmElement {
|
|
92
|
-
constructor(id, members = [], tags) {
|
|
93
|
-
super(id, tags);
|
|
94
|
-
__publicField(this, "relations", []);
|
|
95
|
-
this.members = members;
|
|
96
|
-
}
|
|
97
|
-
isMultipolygon() {
|
|
98
|
-
return this.tags.type === "multipolygon";
|
|
99
|
-
}
|
|
100
|
-
getGeoJsonPolygon() {
|
|
101
|
-
if (!this.isMultipolygon())
|
|
102
|
-
return null;
|
|
103
|
-
const outer = this.members.find((member) => member.ref instanceof OsmWay && member.role === "outer");
|
|
104
|
-
if (!outer)
|
|
105
|
-
return null;
|
|
106
|
-
const inners = this.members.filter((member) => member.ref instanceof OsmWay && member.role === "inner");
|
|
107
|
-
return {
|
|
108
|
-
type: "Polygon",
|
|
109
|
-
coordinates: [outer, ...inners].map((member) => {
|
|
110
|
-
const way = member.ref;
|
|
111
|
-
return way.nodes.map((node) => [node.coords.lng, node.coords.lat]);
|
|
112
|
-
})
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
class OsmParser {
|
|
117
|
-
static parseOsmXmlString(osmXmlString) {
|
|
118
|
-
const model = new OsmModel();
|
|
119
|
-
const parser = new SaxesParser();
|
|
120
|
-
let buffer;
|
|
121
|
-
const isDeleted = (element) => element.attributes.action && element.attributes.action === "delete";
|
|
122
|
-
parser.on("opentag", (node) => {
|
|
123
|
-
switch (node.name) {
|
|
124
|
-
case "node": {
|
|
125
|
-
if (isDeleted(node)) {
|
|
126
|
-
buffer = null;
|
|
127
|
-
break;
|
|
128
|
-
}
|
|
129
|
-
const osmNode = this._parseNode(node.attributes);
|
|
130
|
-
buffer = osmNode;
|
|
131
|
-
model.nodes.push(osmNode);
|
|
132
|
-
break;
|
|
133
|
-
}
|
|
134
|
-
case "way": {
|
|
135
|
-
if (isDeleted(node)) {
|
|
136
|
-
buffer = null;
|
|
137
|
-
break;
|
|
138
|
-
}
|
|
139
|
-
const osmWay = this._parseWay(node.attributes);
|
|
140
|
-
buffer = osmWay;
|
|
141
|
-
model.ways.push(osmWay);
|
|
142
|
-
break;
|
|
143
|
-
}
|
|
144
|
-
case "relation": {
|
|
145
|
-
if (isDeleted(node)) {
|
|
146
|
-
buffer = null;
|
|
147
|
-
break;
|
|
148
|
-
}
|
|
149
|
-
const osmRelation = this._parseRelation(node.attributes);
|
|
150
|
-
buffer = osmRelation;
|
|
151
|
-
model.relations.push(osmRelation);
|
|
152
|
-
break;
|
|
153
|
-
}
|
|
154
|
-
case "tag": {
|
|
155
|
-
if (!buffer) {
|
|
156
|
-
return;
|
|
157
|
-
}
|
|
158
|
-
const {
|
|
159
|
-
k,
|
|
160
|
-
v
|
|
161
|
-
} = node.attributes;
|
|
162
|
-
buffer.tags[k] = v;
|
|
163
|
-
break;
|
|
164
|
-
}
|
|
165
|
-
case "nd": {
|
|
166
|
-
if (!buffer || !(buffer instanceof OsmWay)) {
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
const nodeId = Number(node.attributes.ref);
|
|
170
|
-
const refNode = model.getNodeById(nodeId);
|
|
171
|
-
if (!refNode) {
|
|
172
|
-
throw Error("Node: " + nodeId + " in way " + buffer.id + " not found");
|
|
173
|
-
}
|
|
174
|
-
buffer.nodes.push(refNode);
|
|
175
|
-
refNode.ways.push(buffer);
|
|
176
|
-
break;
|
|
177
|
-
}
|
|
178
|
-
case "member": {
|
|
179
|
-
if (!buffer || !(buffer instanceof OsmRelation)) {
|
|
180
|
-
return;
|
|
181
|
-
}
|
|
182
|
-
const memberId = Number(node.attributes.ref);
|
|
183
|
-
const memberType = node.attributes.type;
|
|
184
|
-
let refElement = null;
|
|
185
|
-
memberType === "node" && (refElement = model.getNodeById(memberId));
|
|
186
|
-
memberType === "way" && (refElement = model.getWayById(memberId));
|
|
187
|
-
memberType === "relation" && (refElement = model.getRelationById(memberId));
|
|
188
|
-
if (!refElement) {
|
|
189
|
-
throw Error("Member: " + memberId + " in relation " + buffer.id + " not found");
|
|
190
|
-
}
|
|
191
|
-
buffer.members.push({ ref: refElement, role: node.attributes.role });
|
|
192
|
-
refElement.relations.push(buffer);
|
|
193
|
-
break;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
});
|
|
197
|
-
parser.write(osmXmlString);
|
|
198
|
-
model.nodes.forEach((node) => node.computeCoordsLevelFromTags());
|
|
199
|
-
model.ways.forEach((way) => way.computeLevelFromTags());
|
|
200
|
-
return model;
|
|
201
|
-
}
|
|
202
|
-
static _parseNode(attr) {
|
|
203
|
-
return new OsmNode(
|
|
204
|
-
Number(attr.id),
|
|
205
|
-
new Coordinates(Number(attr.lat), Number(attr.lon))
|
|
206
|
-
);
|
|
207
|
-
}
|
|
208
|
-
static _parseWay(attr) {
|
|
209
|
-
return new OsmWay(Number(attr.id));
|
|
210
|
-
}
|
|
211
|
-
static _parseRelation(attr) {
|
|
212
|
-
return new OsmRelation(Number(attr.id));
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
class OsmTagsUtils {
|
|
216
|
-
static elementName(tags) {
|
|
217
|
-
return tags.name;
|
|
218
|
-
}
|
|
219
|
-
static areStairs(tags) {
|
|
220
|
-
return tags.highway === "steps" && !tags.conveying;
|
|
221
|
-
}
|
|
222
|
-
static isConveying(tags) {
|
|
223
|
-
return Boolean(tags.conveying) || this.isElevator(tags);
|
|
224
|
-
}
|
|
225
|
-
static isElevator(tags) {
|
|
226
|
-
return tags.highway === "elevator";
|
|
227
|
-
}
|
|
228
|
-
static isEscalator(tags) {
|
|
229
|
-
return tags.highway === "steps" && this.isConveying(tags);
|
|
230
|
-
}
|
|
231
|
-
static isMovingWalkway(tags) {
|
|
232
|
-
return Boolean(tags.highway) && tags.highway !== "steps" && this.isConveying(tags);
|
|
233
|
-
}
|
|
234
|
-
static isOneway(tags) {
|
|
235
|
-
const { highway, oneway, conveying } = tags;
|
|
236
|
-
return Boolean(oneway === "yes" || conveying && highway && ["forward", "backward"].includes(conveying));
|
|
237
|
-
}
|
|
238
|
-
static isOnewayBackward(tags) {
|
|
239
|
-
return this.isOneway(tags) && tags.conveying === "backward";
|
|
240
|
-
}
|
|
241
|
-
static needTicket(tags) {
|
|
242
|
-
return false;
|
|
243
|
-
}
|
|
244
|
-
static getIncline(tags) {
|
|
245
|
-
if (tags.incline && ["up", "down"].includes(tags.incline))
|
|
246
|
-
return tags.incline;
|
|
247
|
-
}
|
|
248
|
-
static getWheelchair(tags) {
|
|
249
|
-
return "wheelchair" in tags ? tags.wheelchair : void 0;
|
|
250
|
-
}
|
|
251
|
-
static getSurface(tags) {
|
|
252
|
-
return "surface" in tags ? tags.surface : void 0;
|
|
253
|
-
}
|
|
254
|
-
static getSmoothness(tags) {
|
|
255
|
-
return "smoothness" in tags ? tags.smoothness : void 0;
|
|
256
|
-
}
|
|
257
|
-
static isSubwayEntrance(tags) {
|
|
258
|
-
return tags.railway === "subway_entrance";
|
|
259
|
-
}
|
|
260
|
-
static getRef(tags) {
|
|
261
|
-
return tags.ref;
|
|
262
|
-
}
|
|
263
|
-
static isGate(tags) {
|
|
264
|
-
return tags.barrier === "gate" || tags.aeroway === "gate";
|
|
265
|
-
}
|
|
266
|
-
static isArea(tags) {
|
|
267
|
-
return tags.area === "yes";
|
|
268
|
-
}
|
|
269
|
-
static isTurnstile(tags) {
|
|
270
|
-
return tags.barrier === "turnstile";
|
|
271
|
-
}
|
|
272
|
-
// Wemap specific
|
|
273
|
-
static isRoutingBounds(tags) {
|
|
274
|
-
return tags["wemap:routing-bounds"] === "yes";
|
|
275
|
-
}
|
|
276
|
-
static isRoutingBoundsEntryPoint(tags) {
|
|
277
|
-
return tags["wemap:routing-io"] === "yes";
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
export {
|
|
281
|
-
OsmElement,
|
|
282
|
-
OsmModel,
|
|
283
|
-
OsmNode,
|
|
284
|
-
OsmParser,
|
|
285
|
-
OsmRelation,
|
|
286
|
-
OsmTagsUtils,
|
|
287
|
-
OsmWay
|
|
288
|
-
};
|
|
289
|
-
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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","../src/OsmTagsUtils.ts"],"sourcesContent":["import { OsmTags } from './OsmTags.js';\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 get name(): string | undefined {\n return this.tags.name;\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 from './OsmElement.js';\nimport OsmRelation from './OsmRelation.js';\nimport OsmWay from './OsmWay.js';\nimport type { OsmTags } from './OsmTags.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 (typeof this.tags.level !== 'undefined') {\n this.coords.level = Level.fromString(this.tags.level);\n }\n }\n\n}\n\nexport default OsmNode;\n","import { Polygon } from 'geojson';\n\nimport { Level, Level_t } from '@wemap/geo';\n\nimport OsmElement from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\nimport OsmRelation from './OsmRelation.js';\nimport { OsmTags } from './OsmTags.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 (typeof this.tags.level !== 'undefined') {\n this.level = Level.fromString(this.tags.level);\n }\n }\n\n get isGeometryClosed() {\n return this.nodes[0] === this.nodes[this.nodes.length - 1];\n }\n\n getGeoJsonPolygon() : Polygon {\n const coordinates = this.nodes.map(node => [node.coords.lng, node.coords.lat]);\n \n // If the way is not already closed, add the first node at the end\n if (!this.isGeometryClosed) {\n coordinates.push([this.nodes[0].coords.lng, this.nodes[0].coords.lat]);\n }\n\n return {\n type: 'Polygon',\n coordinates: [coordinates]\n };\n }\n}\n\nexport default OsmWay;\n","import type { Position, Polygon } from 'geojson';\n\nimport OsmElement from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\nimport type { OsmTags } from './OsmTags.js';\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 { Coordinates } from '@wemap/geo';\n\nimport OsmModel from './OsmModel.js';\nimport OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\nimport OsmRelation from './OsmRelation.js';\nimport { OsmTags } from './OsmTags.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 as keyof OsmTags] = v as any;\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","import { OsmTags } from './OsmTags.js';\n\nexport default class OsmTagsUtils {\n\n static elementName(tags: OsmTags) {\n return tags.name;\n }\n\n static areStairs(tags: OsmTags) {\n return tags.highway === 'steps' && !tags.conveying;\n }\n\n static isConveying(tags: OsmTags) {\n return Boolean(tags.conveying) || this.isElevator(tags);\n }\n\n static isElevator(tags: OsmTags) {\n return tags.highway === 'elevator';\n }\n\n static isEscalator(tags: OsmTags) {\n return tags.highway === 'steps' && this.isConveying(tags);\n }\n\n static isMovingWalkway(tags: OsmTags) {\n return Boolean(tags.highway) && tags.highway !== 'steps' && this.isConveying(tags);\n }\n\n static isOneway(tags: OsmTags) {\n const { highway, oneway, conveying } = tags;\n return Boolean((oneway === 'yes')\n || (conveying && highway && ['forward', 'backward'].includes(conveying)));\n }\n\n static isOnewayBackward(tags: OsmTags) {\n return this.isOneway(tags) && tags.conveying === 'backward';\n }\n\n static needTicket(tags: OsmTags) {\n // TODO\n return false;\n }\n\n static getIncline(tags: OsmTags) {\n if (tags.incline && ['up', 'down'].includes(tags.incline))\n return tags.incline;\n }\n\n static getWheelchair(tags: OsmTags) {\n return 'wheelchair' in tags ? tags.wheelchair : undefined;\n }\n\n static getSurface(tags: OsmTags) {\n return 'surface' in tags ? tags.surface : undefined;\n }\n\n static getSmoothness(tags: OsmTags) {\n return 'smoothness' in tags ? tags.smoothness : undefined;\n }\n\n static isSubwayEntrance(tags: OsmTags) {\n return tags.railway === 'subway_entrance';\n }\n\n static getRef(tags: OsmTags) {\n return tags.ref;\n }\n\n static isGate(tags: OsmTags) {\n return tags.barrier === 'gate' || tags.aeroway === 'gate';\n }\n\n static isArea(tags: OsmTags) {\n return tags.area === 'yes';\n }\n\n static isTurnstile(tags: OsmTags) {\n return tags.barrier === 'turnstile';\n }\n\n // Wemap specific\n\n static isRoutingBounds(tags: OsmTags) {\n return tags['wemap:routing-bounds'] === 'yes';\n }\n\n static isRoutingBoundsEntryPoint(tags: OsmTags) {\n return tags['wemap:routing-io'] === 'yes';\n }\n \n \n}"],"names":[],"mappings":"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"}
|