Skip to content

Commit bfaf336

Browse files
committed
Modernize L.OSM.XMLParser implementation
1 parent 6777e17 commit bfaf336

File tree

1 file changed

+45
-72
lines changed

1 file changed

+45
-72
lines changed

leaflet-osm.js

Lines changed: 45 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -232,101 +232,74 @@ L.OSM.DataLayer = L.FeatureGroup.extend({
232232
});
233233

234234
L.OSM.XMLParser = {
235-
getChangesets: function (xml) {
236-
var result = [];
237-
238-
var nodes = xml.getElementsByTagName("changeset");
239-
for (var i = 0; i < nodes.length; i++) {
240-
var node = nodes[i], id = node.getAttribute("id");
241-
result.push({
242-
id: id,
243-
type: "changeset",
244-
latLngBounds: L.latLngBounds(
245-
[node.getAttribute("min_lat"), node.getAttribute("min_lon")],
246-
[node.getAttribute("max_lat"), node.getAttribute("max_lon")]),
247-
tags: this.getTags(node)
248-
});
249-
}
250-
251-
return result;
235+
getChangesets(xml) {
236+
const nodes = [...xml.getElementsByTagName("changeset")];
237+
return nodes.map(node => ({
238+
id: String(node.getAttribute("id")),
239+
type: "changeset",
240+
latLngBounds: L.latLngBounds(
241+
[node.getAttribute("min_lat"), node.getAttribute("min_lon")],
242+
[node.getAttribute("max_lat"), node.getAttribute("max_lon")]
243+
),
244+
tags: this.getTags(node)
245+
}));
252246
},
253247

254-
getNodes: function (xml) {
255-
var result = {};
248+
getNodes(xml) {
249+
const result = {};
250+
const nodes = [...xml.getElementsByTagName("node")];
256251

257-
var nodes = xml.getElementsByTagName("node");
258-
for (var i = 0; i < nodes.length; i++) {
259-
var node = nodes[i], id = node.getAttribute("id");
252+
for (const node of nodes) {
253+
const id = String(node.getAttribute("id"));
260254
result[id] = {
261-
id: id,
255+
id,
262256
type: "node",
263-
latLng: L.latLng(node.getAttribute("lat"),
264-
node.getAttribute("lon"),
265-
true),
257+
latLng: L.latLng(
258+
node.getAttribute("lat"),
259+
node.getAttribute("lon"),
260+
true
261+
),
266262
tags: this.getTags(node)
267263
};
268264
}
269265

270266
return result;
271267
},
272268

273-
getWays: function (xml, nodes) {
274-
var result = [];
275-
276-
var ways = xml.getElementsByTagName("way");
277-
for (var i = 0; i < ways.length; i++) {
278-
var way = ways[i], nds = way.getElementsByTagName("nd");
279-
280-
var way_object = {
281-
id: way.getAttribute("id"),
269+
getWays(xml, nodes) {
270+
const ways = [...xml.getElementsByTagName("way")];
271+
return ways.map(way => {
272+
const nds = [...way.getElementsByTagName("nd")];
273+
return {
274+
id: String(way.getAttribute("id")),
282275
type: "way",
283-
nodes: new Array(nds.length),
276+
nodes: nds.map(nd => nodes[nd.getAttribute("ref")]),
284277
tags: this.getTags(way)
285278
};
286-
287-
for (var j = 0; j < nds.length; j++) {
288-
way_object.nodes[j] = nodes[nds[j].getAttribute("ref")];
289-
}
290-
291-
result.push(way_object);
292-
}
293-
294-
return result;
279+
});
295280
},
296281

297-
getRelations: function (xml, nodes, ways) {
298-
var result = [];
299-
300-
var rels = xml.getElementsByTagName("relation");
301-
for (var i = 0; i < rels.length; i++) {
302-
var rel = rels[i], members = rel.getElementsByTagName("member");
303-
304-
var rel_object = {
305-
id: rel.getAttribute("id"),
282+
getRelations(xml, nodes, ways) {
283+
const rels = [...xml.getElementsByTagName("relation")];
284+
return rels.map(rel => {
285+
const members = [...rel.getElementsByTagName("member")];
286+
return {
287+
id: String(rel.getAttribute("id")),
306288
type: "relation",
307-
members: new Array(members.length),
289+
members: members // relation-way and relation-relation membership not implemented
290+
.map(member => member.getAttribute("type") === "node" ? nodes[member.getAttribute("ref")] : null)
291+
.filter(Boolean), // filter out null and undefined
308292
tags: this.getTags(rel)
309293
};
310-
311-
for (var j = 0; j < members.length; j++) {
312-
if (members[j].getAttribute("type") === "node")
313-
rel_object.members[j] = nodes[members[j].getAttribute("ref")];
314-
else // relation-way and relation-relation membership not implemented
315-
rel_object.members[j] = null;
316-
}
317-
rel_object.members = rel_object.members.filter(i => i !== null && i !== undefined)
318-
result.push(rel_object);
319-
}
320-
321-
return result;
294+
});
322295
},
323296

324-
getTags: function (xml) {
325-
var result = {};
297+
getTags(xml) {
298+
const result = {};
299+
const tags = [...xml.getElementsByTagName("tag")];
326300

327-
var tags = xml.getElementsByTagName("tag");
328-
for (var j = 0; j < tags.length; j++) {
329-
result[tags[j].getAttribute("k")] = tags[j].getAttribute("v");
301+
for (const tag of tags) {
302+
result[tag.getAttribute("k")] = tag.getAttribute("v");
330303
}
331304

332305
return result;

0 commit comments

Comments
 (0)