@@ -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
337336L . 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