Skip to content

Commit 8baac05

Browse files
committed
JSON parser: more modern code style
1 parent 3ee5608 commit 8baac05

File tree

1 file changed

+41
-79
lines changed

1 file changed

+41
-79
lines changed

leaflet-osm.js

Lines changed: 41 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,6 @@ L.OSM.XMLParser = {
322322
},
323323

324324
getTags: function (xml) {
325-
326325
var result = {};
327326

328327
var tags = xml.getElementsByTagName("tag");
@@ -335,98 +334,61 @@ L.OSM.XMLParser = {
335334
}
336335

337336
L.OSM.JSONParser = {
338-
getChangesets: function (json) {
339-
var result = [];
340-
341-
var changesets = json.changeset ? [json.changeset] : [];
342-
343-
for (var i = 0; i < changesets.length; i++) {
344-
var cs = changesets[i];
345-
result.push({
346-
id: cs["id"].toString(),
347-
type: "changeset",
348-
latLngBounds: L.latLngBounds(
349-
[cs["min_lat"], cs["min_lon"]],
350-
[cs["max_lat"], cs["max_lon"]]),
351-
tags: this.getTags(cs)
352-
});
353-
}
354-
355-
return result;
337+
getChangesets(json) {
338+
const changesets = json.changeset ? [json.changeset] : [];
339+
340+
return changesets.map(cs => ({
341+
id: String(cs.id),
342+
type: "changeset",
343+
latLngBounds: L.latLngBounds(
344+
[cs.min_lat, cs.min_lon],
345+
[cs.max_lat, cs.max_lon]
346+
),
347+
tags: this.getTags(cs)
348+
}));
356349
},
357350

358-
getNodes: function (json) {
359-
var result = {};
360-
361-
var nodes = json.elements?.filter(d => d.type === "node") || [];
362-
for (var i = 0; i < nodes.length; i++) {
363-
var node = nodes[i], id = node["id"];
351+
getNodes(json) {
352+
const nodes = json.elements?.filter(el => el.type === "node") ?? [];
353+
let result = {};
364354

365-
result[id] = {
366-
id: id.toString(),
355+
for (const node of nodes) {
356+
result[node.id] = {
357+
id: String(node.id),
367358
type: "node",
368-
latLng: L.latLng(node["lat"],
369-
node["lon"],
370-
true),
359+
latLng: L.latLng(node.lat, node.lon, true),
371360
tags: this.getTags(node)
372361
};
373362
}
374363

375364
return result;
376365
},
377366

378-
getWays: function (json, nodes) {
379-
var result = [];
367+
getWays(json, nodes) {
368+
const ways = json.elements?.filter(el => el.type === "way") ?? [];
380369

381-
var ways = json.elements?.filter(d => d.type === "way") || [];
382-
for (var i = 0; i < ways.length; i++) {
383-
var way = ways[i], nds = way.nodes;
384-
385-
var way_object = {
386-
id: way["id"].toString(),
387-
type: "way",
388-
nodes: new Array(nds.length),
389-
tags: this.getTags(way)
390-
};
391-
392-
for (var j = 0; j < nds.length; j++) {
393-
way_object.nodes[j] = nodes[nds[j]];
394-
}
395-
396-
result.push(way_object);
397-
}
398-
399-
return result;
370+
return ways.map(way => ({
371+
id: String(way.id),
372+
type: "way",
373+
nodes: way.nodes.map(nodeId => nodes[nodeId]),
374+
tags: this.getTags(way)
375+
}));
400376
},
401377

402-
getRelations: function (json, nodes, ways) {
403-
var result = [];
404-
405-
var rels = json.elements?.filter(d => d.type === "relation") || [];
406-
for (var i = 0; i < rels.length; i++) {
407-
var rel = rels[i], members = rel["members"];
408-
409-
var rel_object = {
410-
id: rel["id"].toString(),
411-
type: "relation",
412-
members: new Array(members.length),
413-
tags: this.getTags(rel)
414-
};
415-
416-
for (var j = 0; j < members.length; j++) {
417-
if (members[j]["type"] === "node")
418-
rel_object.members[j] = nodes[members[j]["ref"]];
419-
else // relation-way and relation-relation membership not implemented
420-
rel_object.members[j] = null;
421-
}
422-
rel_object.members = rel_object.members.filter(i => i !== null && i !== undefined)
423-
result.push(rel_object);
424-
}
425-
426-
return result;
378+
getRelations(json, nodes) {
379+
const relations = json.elements?.filter(el => el.type === "relation") ?? [];
380+
381+
return relations.map(rel => ({
382+
id: String(rel.id),
383+
type: "relation",
384+
members: (rel.members ?? []) // relation-way and relation-relation membership not implemented
385+
.map(member => member.type === "node" ? nodes[member.ref] : null)
386+
.filter(Boolean), // filter out null and undefined
387+
tags: this.getTags(rel)
388+
}));
427389
},
428390

429-
getTags: function (json) {
430-
return json["tags"];
391+
getTags(json) {
392+
return json.tags ?? {};
431393
}
432-
}
394+
};

0 commit comments

Comments
 (0)