/* global console: true */ L.OSM = L.FeatureGroup.extend({ options: { async: true, forceAll: false }, initialize: function(url, options) { L.Util.setOptions(this, options); this._url = url; this._layers = {}; if (url) { this.addXML(url, options, this.options.async); } }, loadXML: function(url, cb, options, async) { if (async === undefined) async = this.options.async; if (options === undefined) options = this.options; var req = new window.XMLHttpRequest(); req.open('GET', url, async); req.overrideMimeType('text/xml'); req.onreadystatechange = function() { if (req.readyState !== 4) return; if (req.status === 200) cb(req.responseXML, options); }; req.send(null); }, addXML: function(url, options, async) { var _this = this; var cb = function(xml, options) { _this._addXML(xml, options); }; this.loadXML(url, cb, options, async); }, _addXML: function(xml, options) { var layers = this.parseOSM(xml, options); if (!layers) return; this.addLayer(layers); this.fire('loaded'); }, parseOSM: function(xml, options) { var i, el, ll, layers = []; var nodes = {}; var ways = {}; var named = false; el = xml.getElementsByTagName('node'); for (i = 0; i < el.length; i++) { var l = this.parse_node(el[i], xml, options); if (l === undefined) continue; nodes[l.osmid] = l; if (!this.options.forceAll && !l.tags.length) continue; var m = this.named_node(l, options); if (!ll) ll = m.getLatLng(); if (this.parse_name(m, l, 'Node')) named = true; layers.push(m); } el = xml.getElementsByTagName('way'); for (i = 0; i < el.length; i++) { if (i > 10) break; var way = this.parse_way(el[i], nodes, options); if (!way) continue; if (!ll) ll = way.getLatLngs()[0]; if (this.parse_name(way, way, 'Way')) named = true; layers.push(way); ways[way.osmid] = way; } el = xml.getElementsByTagName('relation'); for (i = 0; i < el.length; i++) { if (i > 10) break; var relation = this.parse_relation(el[i], ways, options); if (!relation) continue; if (!ll) ll = relation.getLatLngs()[0]; if (this.parse_name(relation, relation, 'Relation')) named = true; layers.push(relation); } if (!layers.length) return; var layer = layers[0]; if (layers.length > 1) layer = new L.FeatureGroup(layers); if (!named) this.parse_name(xml, layer); layer.focusPoint = ll; return layer; }, parse_name: function(layer, obj, obj_name) { console.info('parse name'); console.info(this.options); if (!this.options.forceAll) if (!obj.tags || !obj.tags.length) return; var i, txt = '
| ' + t.k + ' | = | ' + t.v + ' |