Skip to content

Commit db76620

Browse files
committed
Updated XML and JSON parser
1 parent 37b52e8 commit db76620

File tree

1 file changed

+17
-15
lines changed

1 file changed

+17
-15
lines changed

leaflet-osm.js

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -141,9 +141,9 @@ L.OSM.DataLayer = L.FeatureGroup.extend({
141141
}
142142
},
143143

144-
buildFeatures: function (data, format = "application/xml") {
144+
buildFeatures: function (data) {
145145

146-
const parser = (format === "application/json") ? L.OSM.JSONParser : L.OSM.XMLParser;
146+
const parser = (data.version) ? L.OSM.JSONParser : L.OSM.XMLParser;
147147

148148
var features = parser.getChangesets(data),
149149
nodes = parser.getNodes(data),
@@ -322,6 +322,7 @@ L.OSM.XMLParser = {
322322
},
323323

324324
getTags: function (xml) {
325+
325326
var result = {};
326327

327328
var tags = xml.getElementsByTagName("tag");
@@ -337,16 +338,17 @@ L.OSM.JSONParser = {
337338
getChangesets: function (json) {
338339
var result = [];
339340

340-
var nodes = json.elements.filter(d => d.type === "changeset");
341-
for (var i = 0; i < nodes.length; i++) {
342-
var node = nodes[i], id = node["id"];
341+
var changesets = json.changeset ? [json.changeset] : [];
342+
343+
for (var i = 0; i < changesets.length; i++) {
344+
var cs = changesets[i];
343345
result.push({
344-
id: id,
346+
id: cs["id"].toString(),
345347
type: "changeset",
346348
latLngBounds: L.latLngBounds(
347-
[node["min_lat"], node["min_lon"]],
348-
[node["max_lat"], node["max_lon"]]),
349-
tags: this.getTags(node)
349+
[cs["min_lat"], cs["min_lon"]],
350+
[cs["max_lat"], cs["max_lon"]]),
351+
tags: this.getTags(cs)
350352
});
351353
}
352354

@@ -356,12 +358,12 @@ L.OSM.JSONParser = {
356358
getNodes: function (json) {
357359
var result = {};
358360

359-
var nodes = json.elements.filter(d => d.type === "node");
361+
var nodes = json.elements?.filter(d => d.type === "node") || [];
360362
for (var i = 0; i < nodes.length; i++) {
361363
var node = nodes[i], id = node["id"];
362364

363365
result[id] = {
364-
id: id,
366+
id: id.toString(),
365367
type: "node",
366368
latLng: L.latLng(node["lat"],
367369
node["lon"],
@@ -376,12 +378,12 @@ L.OSM.JSONParser = {
376378
getWays: function (json, nodes) {
377379
var result = [];
378380

379-
var ways = json.elements.filter(d => d.type === "way");
381+
var ways = json.elements?.filter(d => d.type === "way") || [];
380382
for (var i = 0; i < ways.length; i++) {
381383
var way = ways[i], nds = way.nodes;
382384

383385
var way_object = {
384-
id: way["id"],
386+
id: way["id"].toString(),
385387
type: "way",
386388
nodes: new Array(nds.length),
387389
tags: this.getTags(way)
@@ -400,12 +402,12 @@ L.OSM.JSONParser = {
400402
getRelations: function (json, nodes, ways) {
401403
var result = [];
402404

403-
var rels = json.elements.filter(d => d.type === "relation");
405+
var rels = json.elements?.filter(d => d.type === "relation") || [];
404406
for (var i = 0; i < rels.length; i++) {
405407
var rel = rels[i], members = rel["members"];
406408

407409
var rel_object = {
408-
id: rel["id"],
410+
id: rel["id"].toString(),
409411
type: "relation",
410412
members: new Array(members.length),
411413
tags: this.getTags(rel)

0 commit comments

Comments
 (0)