X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/f2d13c075660efb9582d7fb600bd6798d7a382ca..2059c8346c9bc46173568f10058cee6988c9dc03:/vendor/assets/iD/iD.js diff --git a/vendor/assets/iD/iD.js b/vendor/assets/iD/iD.js index c7bb96219..84eabfdad 100644 --- a/vendor/assets/iD/iD.js +++ b/vendor/assets/iD/iD.js @@ -174,11 +174,13 @@ } })(this); -d3 = (function(){ - var d3 = {version: "3.3.10"}; // semver -d3.ascending = function(a, b) { +!function(){ + var d3 = {version: "3.5.5"}; // semver +d3.ascending = d3_ascending; + +function d3_ascending(a, b) { return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; -}; +} d3.descending = function(a, b) { return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; }; @@ -188,10 +190,10 @@ d3.min = function(array, f) { a, b; if (arguments.length === 1) { - while (++i < n && !((a = array[i]) != null && a <= a)) a = undefined; + while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; } while (++i < n) if ((b = array[i]) != null && a > b) a = b; } else { - while (++i < n && !((a = f.call(array, array[i], i)) != null && a <= a)) a = undefined; + while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) { a = b; break; } while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b; } return a; @@ -202,10 +204,10 @@ d3.max = function(array, f) { a, b; if (arguments.length === 1) { - while (++i < n && !((a = array[i]) != null && a <= a)) a = undefined; + while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; } while (++i < n) if ((b = array[i]) != null && b > a) a = b; } else { - while (++i < n && !((a = f.call(array, array[i], i)) != null && a <= a)) a = undefined; + while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) { a = b; break; } while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b; } return a; @@ -217,13 +219,13 @@ d3.extent = function(array, f) { b, c; if (arguments.length === 1) { - while (++i < n && !((a = c = array[i]) != null && a <= a)) a = c = undefined; + while (++i < n) if ((b = array[i]) != null && b >= b) { a = c = b; break; } while (++i < n) if ((b = array[i]) != null) { if (a > b) a = b; if (c < b) c = b; } } else { - while (++i < n && !((a = c = f.call(array, array[i], i)) != null && a <= a)) a = undefined; + while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) { a = c = b; break; } while (++i < n) if ((b = f.call(array, array[i], i)) != null) { if (a > b) a = b; if (c < b) c = b; @@ -231,36 +233,39 @@ d3.extent = function(array, f) { } return [a, c]; }; +function d3_number(x) { + return x === null ? NaN : +x; +} + +function d3_numeric(x) { + return !isNaN(x); +} + d3.sum = function(array, f) { var s = 0, n = array.length, a, i = -1; - if (arguments.length === 1) { - while (++i < n) if (!isNaN(a = +array[i])) s += a; + while (++i < n) if (d3_numeric(a = +array[i])) s += a; // zero and null are equivalent } else { - while (++i < n) if (!isNaN(a = +f.call(array, array[i], i))) s += a; + while (++i < n) if (d3_numeric(a = +f.call(array, array[i], i))) s += a; } - return s; }; -function d3_number(x) { - return x != null && !isNaN(x); -} d3.mean = function(array, f) { - var n = array.length, + var s = 0, + n = array.length, a, - m = 0, i = -1, - j = 0; + j = n; if (arguments.length === 1) { - while (++i < n) if (d3_number(a = array[i])) m += (a - m) / ++j; + while (++i < n) if (d3_numeric(a = d3_number(array[i]))) s += a; else --j; } else { - while (++i < n) if (d3_number(a = f.call(array, array[i], i))) m += (a - m) / ++j; + while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) s += a; else --j; } - return j ? m : undefined; + if (j) return s / j; }; // R-7 per d3.quantile = function(values, p) { @@ -272,18 +277,59 @@ d3.quantile = function(values, p) { }; d3.median = function(array, f) { - if (arguments.length > 1) array = array.map(f); - array = array.filter(d3_number); - return array.length ? d3.quantile(array.sort(d3.ascending), .5) : undefined; + var numbers = [], + n = array.length, + a, + i = -1; + if (arguments.length === 1) { + while (++i < n) if (d3_numeric(a = d3_number(array[i]))) numbers.push(a); + } else { + while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) numbers.push(a); + } + if (numbers.length) return d3.quantile(numbers.sort(d3_ascending), .5); }; -d3.bisector = function(f) { + +d3.variance = function(array, f) { + var n = array.length, + m = 0, + a, + d, + s = 0, + i = -1, + j = 0; + if (arguments.length === 1) { + while (++i < n) { + if (d3_numeric(a = d3_number(array[i]))) { + d = a - m; + m += d / ++j; + s += d * (a - m); + } + } + } else { + while (++i < n) { + if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) { + d = a - m; + m += d / ++j; + s += d * (a - m); + } + } + } + if (j > 1) return s / (j - 1); +}; + +d3.deviation = function() { + var v = d3.variance.apply(this, arguments); + return v ? Math.sqrt(v) : v; +}; + +function d3_bisector(compare) { return { left: function(a, x, lo, hi) { if (arguments.length < 3) lo = 0; if (arguments.length < 4) hi = a.length; while (lo < hi) { var mid = lo + hi >>> 1; - if (f.call(a, a[mid], mid) < x) lo = mid + 1; + if (compare(a[mid], x) < 0) lo = mid + 1; else hi = mid; } return lo; @@ -293,22 +339,29 @@ d3.bisector = function(f) { if (arguments.length < 4) hi = a.length; while (lo < hi) { var mid = lo + hi >>> 1; - if (x < f.call(a, a[mid], mid)) hi = mid; + if (compare(a[mid], x) > 0) hi = mid; else lo = mid + 1; } return lo; } }; -}; +} + +var d3_bisect = d3_bisector(d3_ascending); +d3.bisectLeft = d3_bisect.left; +d3.bisect = d3.bisectRight = d3_bisect.right; -var d3_bisector = d3.bisector(function(d) { return d; }); -d3.bisectLeft = d3_bisector.left; -d3.bisect = d3.bisectRight = d3_bisector.right; -d3.shuffle = function(array) { - var m = array.length, t, i; +d3.bisector = function(f) { + return d3_bisector(f.length === 1 + ? function(d, x) { return d3_ascending(f(d), x); } + : f); +}; +d3.shuffle = function(array, i0, i1) { + if ((m = arguments.length) < 3) { i1 = array.length; if (m < 2) i0 = 0; } + var m = i1 - i0, t, i; while (m) { i = Math.random() * m-- | 0; - t = array[m], array[m] = array[i], array[i] = t; + t = array[m + i0], array[m + i0] = array[i + i0], array[i + i0] = t; } return array; }; @@ -403,67 +456,96 @@ function d3_range_integerScale(x) { return k; } function d3_class(ctor, properties) { - try { - for (var key in properties) { - Object.defineProperty(ctor.prototype, key, { - value: properties[key], - enumerable: false - }); - } - } catch (e) { - ctor.prototype = properties; + for (var key in properties) { + Object.defineProperty(ctor.prototype, key, { + value: properties[key], + enumerable: false + }); } } -d3.map = function(object) { +d3.map = function(object, f) { var map = new d3_Map; - if (object instanceof d3_Map) object.forEach(function(key, value) { map.set(key, value); }); - else for (var key in object) map.set(key, object[key]); + if (object instanceof d3_Map) { + object.forEach(function(key, value) { map.set(key, value); }); + } else if (Array.isArray(object)) { + var i = -1, + n = object.length, + o; + if (arguments.length === 1) while (++i < n) map.set(i, object[i]); + else while (++i < n) map.set(f.call(object, o = object[i], i), o); + } else { + for (var key in object) map.set(key, object[key]); + } return map; }; -function d3_Map() {} +function d3_Map() { + this._ = Object.create(null); +} + +var d3_map_proto = "__proto__", + d3_map_zero = "\0"; d3_class(d3_Map, { - has: function(key) { - return d3_map_prefix + key in this; - }, + has: d3_map_has, get: function(key) { - return this[d3_map_prefix + key]; + return this._[d3_map_escape(key)]; }, set: function(key, value) { - return this[d3_map_prefix + key] = value; - }, - remove: function(key) { - key = d3_map_prefix + key; - return key in this && delete this[key]; - }, - keys: function() { - var keys = []; - this.forEach(function(key) { keys.push(key); }); - return keys; + return this._[d3_map_escape(key)] = value; }, + remove: d3_map_remove, + keys: d3_map_keys, values: function() { var values = []; - this.forEach(function(key, value) { values.push(value); }); + for (var key in this._) values.push(this._[key]); return values; }, entries: function() { var entries = []; - this.forEach(function(key, value) { entries.push({key: key, value: value}); }); + for (var key in this._) entries.push({key: d3_map_unescape(key), value: this._[key]}); return entries; }, + size: d3_map_size, + empty: d3_map_empty, forEach: function(f) { - for (var key in this) { - if (key.charCodeAt(0) === d3_map_prefixCode) { - f.call(this, key.substring(1), this[key]); - } - } + for (var key in this._) f.call(this, d3_map_unescape(key), this._[key]); } }); -var d3_map_prefix = "\0", // prevent collision with built-ins - d3_map_prefixCode = d3_map_prefix.charCodeAt(0); +function d3_map_escape(key) { + return (key += "") === d3_map_proto || key[0] === d3_map_zero ? d3_map_zero + key : key; +} + +function d3_map_unescape(key) { + return (key += "")[0] === d3_map_zero ? key.slice(1) : key; +} + +function d3_map_has(key) { + return d3_map_escape(key) in this._; +} + +function d3_map_remove(key) { + return (key = d3_map_escape(key)) in this._ && delete this._[key]; +} + +function d3_map_keys() { + var keys = []; + for (var key in this._) keys.push(d3_map_unescape(key)); + return keys; +} + +function d3_map_size() { + var size = 0; + for (var key in this._) ++size; + return size; +} + +function d3_map_empty() { + for (var key in this._) return false; + return true; +} d3.nest = function() { var nest = {}, @@ -567,52 +649,39 @@ d3.set = function(array) { return set; }; -function d3_Set() {} +function d3_Set() { + this._ = Object.create(null); +} d3_class(d3_Set, { - has: function(value) { - return d3_map_prefix + value in this; - }, - add: function(value) { - this[d3_map_prefix + value] = true; - return value; - }, - remove: function(value) { - value = d3_map_prefix + value; - return value in this && delete this[value]; - }, - values: function() { - var values = []; - this.forEach(function(value) { - values.push(value); - }); - return values; + has: d3_map_has, + add: function(key) { + this._[d3_map_escape(key += "")] = true; + return key; }, + remove: d3_map_remove, + values: d3_map_keys, + size: d3_map_size, + empty: d3_map_empty, forEach: function(f) { - for (var value in this) { - if (value.charCodeAt(0) === d3_map_prefixCode) { - f.call(this, value.substring(1)); - } - } + for (var key in this._) f.call(this, d3_map_unescape(key)); } }); d3.behavior = {}; -var d3_arraySlice = [].slice, - d3_array = function(list) { return d3_arraySlice.call(list); }; // conversion for NodeLists +var d3_document = this.document; -var d3_document = document, - d3_documentElement = d3_document.documentElement, - d3_window = window; - -// Redefine d3_array if the browser doesn’t support slice-based conversion. -try { - d3_array(d3_documentElement.childNodes)[0].nodeType; -} catch(e) { - d3_array = function(list) { - var i = list.length, array = new Array(i); - while (i--) array[i] = list[i]; - return array; - }; +function d3_documentElement(node) { + return node + && (node.ownerDocument // node is a Node + || node.document // node is a Window + || node).documentElement; // node is a Document +} + +function d3_window(node) { + return node + && ((node.ownerDocument && node.ownerDocument.defaultView) // node is a Node + || (node.document && node) // node is a Window + || node.defaultView); // node is a Document } // Copies a variable number of methods from source to target. d3.rebind = function(target, source) { @@ -630,10 +699,9 @@ function d3_rebind(target, source, method) { return value === source ? target : value; }; } - function d3_vendorSymbol(object, name) { if (name in object) return name; - name = name.charAt(0).toUpperCase() + name.substring(1); + name = name.charAt(0).toUpperCase() + name.slice(1); for (var i = 0, n = d3_vendorPrefixes.length; i < n; ++i) { var prefixName = d3_vendorPrefixes[i] + name; if (prefixName in object) return prefixName; @@ -641,6 +709,8 @@ function d3_vendorSymbol(object, name) { } var d3_vendorPrefixes = ["webkit", "ms", "moz", "Moz", "o", "O"]; +var d3_arraySlice = [].slice, + d3_array = function(list) { return d3_arraySlice.call(list); }; // conversion for NodeLists function d3_noop() {} d3.dispatch = function() { @@ -659,8 +729,8 @@ d3_dispatch.prototype.on = function(type, listener) { // Extract optional namespace, e.g., "click.foo" if (i >= 0) { - name = type.substring(i + 1); - type = type.substring(0, i); + name = type.slice(i + 1); + type = type.slice(0, i); } if (type) return arguments.length < 2 @@ -788,18 +858,23 @@ function d3_selection(groups) { var d3_select = function(s, n) { return n.querySelector(s); }, d3_selectAll = function(s, n) { return n.querySelectorAll(s); }, - d3_selectMatcher = d3_documentElement[d3_vendorSymbol(d3_documentElement, "matchesSelector")], - d3_selectMatches = function(n, s) { return d3_selectMatcher.call(n, s); }; + d3_selectMatches = function(n, s) { + var d3_selectMatcher = n.matches || n[d3_vendorSymbol(n, "matchesSelector")]; + d3_selectMatches = function(n, s) { + return d3_selectMatcher.call(n, s); + }; + return d3_selectMatches(n, s); + }; // Prefer Sizzle, if available. if (typeof Sizzle === "function") { d3_select = function(s, n) { return Sizzle(s, n)[0] || null; }; - d3_selectAll = function(s, n) { return Sizzle.uniqueSort(Sizzle(s, n)); }; + d3_selectAll = Sizzle; d3_selectMatches = Sizzle.matchesSelector; } d3.selection = function() { - return d3_selectionRoot; + return d3.select(d3_document.documentElement); }; var d3_selectionPrototype = d3.selection.prototype = []; @@ -874,8 +949,8 @@ d3.ns = { var i = name.indexOf(":"), prefix = name; if (i >= 0) { - prefix = name.substring(0, i); - name = name.substring(i + 1); + prefix = name.slice(0, i); + name = name.slice(i + 1); } return d3_nsPrefix.hasOwnProperty(prefix) ? {space: d3_nsPrefix[prefix], local: name} @@ -954,7 +1029,7 @@ d3_selectionPrototype.classed = function(name, value) { // probably doesn't support it on SVG elements (which can be animated). if (typeof name === "string") { var node = this.node(), - n = (name = name.trim().split(/^|\s+/g)).length, + n = (name = d3_selection_classes(name)).length, i = -1; if (value = node.classList) { while (++i < n) if (!value.contains(name[i])) return false; @@ -979,9 +1054,13 @@ function d3_selection_classedRe(name) { return new RegExp("(?:^|\\s+)" + d3.requote(name) + "(?:\\s+|$)", "g"); } +function d3_selection_classes(name) { + return (name + "").trim().split(/^|\s+/); +} + // Multiple class names are allowed (e.g., "foo bar"). function d3_selection_classed(name, value) { - name = name.trim().split(/\s+/).map(d3_selection_classedName); + name = d3_selection_classes(name).map(d3_selection_classedName); var n = name.length; function classedConstant() { @@ -1030,7 +1109,10 @@ d3_selectionPrototype.style = function(name, value, priority) { } // For style(string), return the computed style value for the first node. - if (n < 2) return d3_window.getComputedStyle(this.node(), null).getPropertyValue(name); + if (n < 2) { + var node = this.node(); + return d3_window(node).getComputedStyle(node, null).getPropertyValue(name); + } // For style(string, string) or style(string, function), use the default // priority. The priority is ignored for style(string, null). @@ -1137,9 +1219,22 @@ d3_selectionPrototype.append = function(name) { }; function d3_selection_creator(name) { + + function create() { + var document = this.ownerDocument, + namespace = this.namespaceURI; + return namespace + ? document.createElementNS(namespace, name) + : document.createElement(name); + } + + function createNS() { + return this.ownerDocument.createElementNS(name.space, name.local); + } + return typeof name === "function" ? name - : (name = d3.ns.qualify(name)).local ? function() { return this.ownerDocument.createElementNS(name.space, name.local); } - : function() { return this.ownerDocument.createElementNS(this.namespaceURI, name); }; + : (name = d3.ns.qualify(name)).local ? createNS + : create; } d3_selectionPrototype.insert = function(name, before) { @@ -1154,12 +1249,14 @@ d3_selectionPrototype.insert = function(name, before) { // TODO remove(node)? // TODO remove(function)? d3_selectionPrototype.remove = function() { - return this.each(function() { - var parent = this.parentNode; - if (parent) parent.removeChild(this); - }); + return this.each(d3_selectionRemove); }; +function d3_selectionRemove() { + var parent = this.parentNode; + if (parent) parent.removeChild(this); +} + d3_selectionPrototype.data = function(value, key) { var i = -1, n = this.length, @@ -1190,34 +1287,30 @@ d3_selectionPrototype.data = function(value, key) { if (key) { var nodeByKeyValue = new d3_Map, - dataByKeyValue = new d3_Map, - keyValues = [], + keyValues = new Array(n), keyValue; for (i = -1; ++i < n;) { - keyValue = key.call(node = group[i], node.__data__, i); - if (nodeByKeyValue.has(keyValue)) { + if (nodeByKeyValue.has(keyValue = key.call(node = group[i], node.__data__, i))) { exitNodes[i] = node; // duplicate selection key } else { nodeByKeyValue.set(keyValue, node); } - keyValues.push(keyValue); + keyValues[i] = keyValue; } for (i = -1; ++i < m;) { - keyValue = key.call(groupData, nodeData = groupData[i], i); - if (node = nodeByKeyValue.get(keyValue)) { + if (!(node = nodeByKeyValue.get(keyValue = key.call(groupData, nodeData = groupData[i], i)))) { + enterNodes[i] = d3_selection_dataNode(nodeData); + } else if (node !== true) { // no duplicate data key updateNodes[i] = node; node.__data__ = nodeData; - } else if (!dataByKeyValue.has(keyValue)) { // no duplicate data key - enterNodes[i] = d3_selection_dataNode(nodeData); } - dataByKeyValue.set(keyValue, nodeData); - nodeByKeyValue.remove(keyValue); + nodeByKeyValue.set(keyValue, true); } for (i = -1; ++i < n;) { - if (nodeByKeyValue.has(keyValues[i])) { + if (nodeByKeyValue.get(keyValues[i]) !== true) { exitNodes[i] = group[i]; } } @@ -1328,7 +1421,7 @@ d3_selectionPrototype.sort = function(comparator) { }; function d3_selection_sortComparator(comparator) { - if (!arguments.length) comparator = d3.ascending; + if (!arguments.length) comparator = d3_ascending; return function(a, b) { return a && b ? comparator(a.__data__, b.__data__) : !a - !b; }; @@ -1371,7 +1464,7 @@ d3_selectionPrototype.node = function() { d3_selectionPrototype.size = function() { var n = 0; - this.each(function() { ++n; }); + d3_selection_each(this, function() { ++n; }); return n; }; @@ -1435,51 +1528,31 @@ function d3_selection_enterInsertBefore(enter) { }; } -// import "../transition/transition"; - -d3_selectionPrototype.transition = function() { - var id = d3_transitionInheritId || ++d3_transitionId, - subgroups = [], - subgroup, - node, - transition = d3_transitionInherit || {time: Date.now(), ease: d3_ease_cubicInOut, delay: 0, duration: 250}; - - for (var j = -1, m = this.length; ++j < m;) { - subgroups.push(subgroup = []); - for (var group = this[j], i = -1, n = group.length; ++i < n;) { - if (node = group[i]) d3_transitionNode(node, i, id, transition); - subgroup.push(node); - } - } - - return d3_transition(subgroups, id); -}; -// import "../transition/transition"; - -d3_selectionPrototype.interrupt = function() { - return this.each(d3_selection_interrupt); -}; - -function d3_selection_interrupt() { - var lock = this.__transition__; - if (lock) ++lock.active; -} - // TODO fast singleton implementation? d3.select = function(node) { - var group = [typeof node === "string" ? d3_select(node, d3_document) : node]; - group.parentNode = d3_documentElement; + var group; + if (typeof node === "string") { + group = [d3_select(node, d3_document)]; + group.parentNode = d3_document.documentElement; + } else { + group = [node]; + group.parentNode = d3_documentElement(node); + } return d3_selection([group]); }; d3.selectAll = function(nodes) { - var group = d3_array(typeof nodes === "string" ? d3_selectAll(nodes, d3_document) : nodes); - group.parentNode = d3_documentElement; + var group; + if (typeof nodes === "string") { + group = d3_array(d3_selectAll(nodes, d3_document)); + group.parentNode = d3_document.documentElement; + } else { + group = nodes; + group.parentNode = null; + } return d3_selection([group]); }; -var d3_selectionRoot = d3.select(d3_documentElement); - d3_selectionPrototype.on = function(type, listener, capture) { var n = arguments.length; if (n < 3) { @@ -1509,7 +1582,7 @@ function d3_selection_on(type, listener, capture) { i = type.indexOf("."), wrap = d3_selection_onListener; - if (i > 0) type = type.substring(0, i); + if (i > 0) type = type.slice(0, i); var filter = d3_selection_onFilters.get(type); if (filter) type = filter, wrap = d3_selection_onFilter; @@ -1551,9 +1624,11 @@ var d3_selection_onFilters = d3.map({ mouseleave: "mouseout" }); -d3_selection_onFilters.forEach(function(k) { - if ("on" + k in d3_document) d3_selection_onFilters.remove(k); -}); +if (d3_document) { + d3_selection_onFilters.forEach(function(k) { + if ("on" + k in d3_document) d3_selection_onFilters.remove(k); + }); +} function d3_selection_onListener(listener, argumentz) { return function(e) { @@ -1578,26 +1653,33 @@ function d3_selection_onFilter(listener, argumentz) { }; } -var d3_event_dragSelect = "onselectstart" in d3_document ? null : d3_vendorSymbol(d3_documentElement.style, "userSelect"), +var d3_event_dragSelect, d3_event_dragId = 0; -function d3_event_dragSuppress() { +function d3_event_dragSuppress(node) { var name = ".dragsuppress-" + ++d3_event_dragId, click = "click" + name, - w = d3.select(d3_window) + w = d3.select(d3_window(node)) .on("touchmove" + name, d3_eventPreventDefault) .on("dragstart" + name, d3_eventPreventDefault) .on("selectstart" + name, d3_eventPreventDefault); + + if (d3_event_dragSelect == null) { + d3_event_dragSelect = "onselectstart" in node ? false + : d3_vendorSymbol(node.style, "userSelect"); + } + if (d3_event_dragSelect) { - var style = d3_documentElement.style, + var style = d3_documentElement(node).style, select = style[d3_event_dragSelect]; style[d3_event_dragSelect] = "none"; } + return function(suppressClick) { w.on(name, null); if (d3_event_dragSelect) style[d3_event_dragSelect] = select; if (suppressClick) { // suppress the next click, but only if it’s immediate - function off() { w.on(click, null); } + var off = function() { w.on(click, null); }; w.on(click, function() { d3_eventCancel(); off(); }, true); setTimeout(off, 0); } @@ -1609,25 +1691,28 @@ d3.mouse = function(container) { }; // https://bugs.webkit.org/show_bug.cgi?id=44083 -var d3_mouse_bug44083 = /WebKit/.test(d3_window.navigator.userAgent) ? -1 : 0; +var d3_mouse_bug44083 = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0; function d3_mousePoint(container, e) { if (e.changedTouches) e = e.changedTouches[0]; var svg = container.ownerSVGElement || container; if (svg.createSVGPoint) { var point = svg.createSVGPoint(); - if (d3_mouse_bug44083 < 0 && (d3_window.scrollX || d3_window.scrollY)) { - svg = d3.select("body").append("svg").style({ - position: "absolute", - top: 0, - left: 0, - margin: 0, - padding: 0, - border: "none" - }, "important"); - var ctm = svg[0][0].getScreenCTM(); - d3_mouse_bug44083 = !(ctm.f || ctm.e); - svg.remove(); + if (d3_mouse_bug44083 < 0) { + var window = d3_window(container); + if (window.scrollX || window.scrollY) { + svg = d3.select("body").append("svg").style({ + position: "absolute", + top: 0, + left: 0, + margin: 0, + padding: 0, + border: "none" + }, "important"); + var ctm = svg[0][0].getScreenCTM(); + d3_mouse_bug44083 = !(ctm.f || ctm.e); + svg.remove(); + } } if (d3_mouse_bug44083) point.x = e.pageX, point.y = e.pageY; else point.x = e.clientX, point.y = e.clientY; @@ -1646,11 +1731,12 @@ d3.touches = function(container, touches) { return point; }) : []; }; -var π = Math.PI, +var ε = 1e-6, + ε2 = ε * ε, + π = Math.PI, τ = 2 * π, + τε = τ - ε, halfπ = π / 2, - ε = 1e-6, - ε2 = ε * ε, d3_radians = π / 180, d3_degrees = 180 / π; @@ -1658,6 +1744,14 @@ function d3_sgn(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; } +// Returns the 2D cross product of AB and AC vectors, i.e., the z-component of +// the 3D cross product in a quadrant I Cartesian coordinate system (+x is +// right, +y is up). Returns a positive value if ABC is counter-clockwise, +// negative if clockwise, and zero if the points are collinear. +function d3_cross2d(a, b, c) { + return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]); +} + function d3_acos(x) { return x > 1 ? 0 : x < -1 ? π : Math.acos(x); } @@ -1731,9 +1825,12 @@ d3.interpolateZoom = function(p0, p1) { d3.behavior.zoom = function() { var view = {x: 0, y: 0, k: 1}, translate0, // translate when we started zooming (to avoid drift) - center, // desired position of translate0 after zooming + center0, // implicit desired position of translate0 after zooming + center, // explicit desired position of translate0 after zooming size = [960, 500], // viewport size; required for zoom interpolation scaleExtent = d3_behavior_zoomInfinity, + duration = 250, + zooming = 0, mousedown = "mousedown.zoom", mousemove = "mousemove.zoom", mouseup = "mouseup.zoom", @@ -1746,47 +1843,57 @@ d3.behavior.zoom = function() { y0, y1; + // Lazily determine the DOM’s support for Wheel events. + // https://developer.mozilla.org/en-US/docs/Mozilla_event_reference/wheel + if (!d3_behavior_zoomWheel) { + d3_behavior_zoomWheel = "onwheel" in d3_document ? (d3_behavior_zoomDelta = function() { return -d3.event.deltaY * (d3.event.deltaMode ? 120 : 1); }, "wheel") + : "onmousewheel" in d3_document ? (d3_behavior_zoomDelta = function() { return d3.event.wheelDelta; }, "mousewheel") + : (d3_behavior_zoomDelta = function() { return -d3.event.detail; }, "MozMousePixelScroll"); + } + function zoom(g) { g .on(mousedown, mousedowned) .on(d3_behavior_zoomWheel + ".zoom", mousewheeled) - .on(mousemove, mousewheelreset) .on("dblclick.zoom", dblclicked) .on(touchstart, touchstarted); } zoom.event = function(g) { g.each(function() { - var event_ = event.of(this, arguments), + var dispatch = event.of(this, arguments), view1 = view; if (d3_transitionInheritId) { - d3.select(this).transition() - .each("start.zoom", function() { - view = this.__chart__ || {x: 0, y: 0, k: 1}; // pre-transition state - zoomstarted(event_); - }) - .tween("zoom:zoom", function() { - var dx = size[0], - dy = size[1], - cx = dx / 2, - cy = dy / 2, - i = d3.interpolateZoom( - [(cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k], - [(cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k] - ); - return function(t) { - var l = i(t), k = dx / l[2]; - this.__chart__ = view = {x: cx - l[0] * k, y: cy - l[1] * k, k: k}; - zoomed(event_); - }; - }) - .each("end.zoom", function() { - zoomended(event_); - }); + d3.select(this).transition() + .each("start.zoom", function() { + view = this.__chart__ || {x: 0, y: 0, k: 1}; // pre-transition state + zoomstarted(dispatch); + }) + .tween("zoom:zoom", function() { + var dx = size[0], + dy = size[1], + cx = center0 ? center0[0] : dx / 2, + cy = center0 ? center0[1] : dy / 2, + i = d3.interpolateZoom( + [(cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k], + [(cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k] + ); + return function(t) { + var l = i(t), k = dx / l[2]; + this.__chart__ = view = {x: cx - l[0] * k, y: cy - l[1] * k, k: k}; + zoomed(dispatch); + }; + }) + .each("interrupt.zoom", function() { + zoomended(dispatch); + }) + .each("end.zoom", function() { + zoomended(dispatch); + }); } else { this.__chart__ = view; - zoomstarted(event_); - zoomed(event_); - zoomended(event_); + zoomstarted(dispatch); + zoomed(dispatch); + zoomended(dispatch); } }); } @@ -1823,6 +1930,12 @@ d3.behavior.zoom = function() { return zoom; }; + zoom.duration = function(_) { + if (!arguments.length) return duration; + duration = +_; // TODO function based on interpolateZoom distance? + return zoom; + }; + zoom.x = function(z) { if (!arguments.length) return x1; x1 = z; @@ -1857,70 +1970,85 @@ d3.behavior.zoom = function() { view.y += p[1] - l[1]; } + function zoomTo(that, p, l, k) { + that.__chart__ = {x: view.x, y: view.y, k: view.k}; + + scaleTo(Math.pow(2, k)); + translateTo(center0 = p, l); + + that = d3.select(that); + if (duration > 0) that = that.transition().duration(duration); + that.call(zoom.event); + } + function rescale() { if (x1) x1.domain(x0.range().map(function(x) { return (x - view.x) / view.k; }).map(x0.invert)); if (y1) y1.domain(y0.range().map(function(y) { return (y - view.y) / view.k; }).map(y0.invert)); } - function zoomstarted(event) { - event({type: "zoomstart"}); + function zoomstarted(dispatch) { + if (!zooming++) dispatch({type: "zoomstart"}); } - function zoomed(event) { + function zoomed(dispatch) { rescale(); - event({type: "zoom", scale: view.k, translate: [view.x, view.y]}); + dispatch({type: "zoom", scale: view.k, translate: [view.x, view.y]}); } - function zoomended(event) { - event({type: "zoomend"}); + function zoomended(dispatch) { + if (!--zooming) dispatch({type: "zoomend"}); + center0 = null; } function mousedowned() { - var target = this, - event_ = event.of(target, arguments), - eventTarget = d3.event.target, + var that = this, + target = d3.event.target, + dispatch = event.of(that, arguments), dragged = 0, - w = d3.select(d3_window).on(mousemove, moved).on(mouseup, ended), - l = location(d3.mouse(target)), - dragRestore = d3_event_dragSuppress(); + subject = d3.select(d3_window(that)).on(mousemove, moved).on(mouseup, ended), + location0 = location(d3.mouse(that)), + dragRestore = d3_event_dragSuppress(that); - d3_selection_interrupt.call(target); - zoomstarted(event_); + d3_selection_interrupt.call(that); + zoomstarted(dispatch); function moved() { dragged = 1; - translateTo(d3.mouse(target), l); - zoomed(event_); + translateTo(d3.mouse(that), location0); + zoomed(dispatch); } function ended() { - w.on(mousemove, d3_window === target ? mousewheelreset : null).on(mouseup, null); - dragRestore(dragged && d3.event.target === eventTarget); - zoomended(event_); + subject.on(mousemove, null).on(mouseup, null); + dragRestore(dragged && d3.event.target === target); + zoomended(dispatch); } } // These closures persist for as long as at least one touch is active. function touchstarted() { - var target = this, - event_ = event.of(target, arguments), + var that = this, + dispatch = event.of(that, arguments), locations0 = {}, // touchstart locations distance0 = 0, // distance² between initial touches scale0, // scale when we started touching - eventId = d3.event.changedTouches[0].identifier, - touchmove = "touchmove.zoom-" + eventId, - touchend = "touchend.zoom-" + eventId, - w = d3.select(d3_window).on(touchmove, moved).on(touchend, ended), - t = d3.select(target).on(mousedown, null).on(touchstart, started), // prevent duplicate events - dragRestore = d3_event_dragSuppress(); - - d3_selection_interrupt.call(target); + zoomName = ".zoom-" + d3.event.changedTouches[0].identifier, + touchmove = "touchmove" + zoomName, + touchend = "touchend" + zoomName, + targets = [], + subject = d3.select(that), + dragRestore = d3_event_dragSuppress(that); + started(); - zoomstarted(event_); + zoomstarted(dispatch); + + // Workaround for Chrome issue 412723: the touchstart listener must be set + // after the touchmove listener. + subject.on(mousedown, null).on(touchstart, started); // prevent duplicate events // Updates locations of any touches in locations0. function relocate() { - var touches = d3.touches(target); + var touches = d3.touches(that); scale0 = view.k; touches.forEach(function(t) { if (t.identifier in locations0) locations0[t.identifier] = location(t); @@ -1930,7 +2058,13 @@ d3.behavior.zoom = function() { // Temporarily override touchstart while gesture is active. function started() { - // Only track touches started on the target element. + + // Listen for touchmove and touchend on the target of touchstart. + var target = d3.event.target; + d3.select(target).on(touchmove, moved).on(touchend, ended); + targets.push(target); + + // Only track touches started on the same subject element. var changed = d3.event.changedTouches; for (var i = 0, n = changed.length; i < n; ++i) { locations0[changed[i].identifier] = null; @@ -1941,11 +2075,9 @@ d3.behavior.zoom = function() { if (touches.length === 1) { if (now - touchtime < 500) { // dbltap - var p = touches[0], l = locations0[p.identifier]; - scaleTo(view.k * 2); - translateTo(p, l); + var p = touches[0]; + zoomTo(that, p, locations0[p.identifier], Math.floor(Math.log(view.k) / Math.LN2) + 1); d3_eventPreventDefault(); - zoomed(event_); } touchtime = now; } else if (touches.length > 1) { @@ -1956,9 +2088,12 @@ d3.behavior.zoom = function() { } function moved() { - var touches = d3.touches(target), + var touches = d3.touches(that), p0, l0, p1, l1; + + d3_selection_interrupt.call(that); + for (var i = 0, n = touches.length; i < n; ++i, l1 = null) { p1 = touches[i]; if (l1 = locations0[p1.identifier]) { @@ -1977,7 +2112,7 @@ d3.behavior.zoom = function() { touchtime = null; translateTo(p0, l0); - zoomed(event_); + zoomed(dispatch); } function ended() { @@ -1995,64 +2130,58 @@ d3.behavior.zoom = function() { } } // Otherwise, remove touchmove and touchend listeners. - w.on(touchmove, null).on(touchend, null); - t.on(mousedown, mousedowned).on(touchstart, touchstarted); + d3.selectAll(targets).on(zoomName, null); + subject.on(mousedown, mousedowned).on(touchstart, touchstarted); dragRestore(); - zoomended(event_); + zoomended(dispatch); } } function mousewheeled() { - var event_ = event.of(this, arguments); + var dispatch = event.of(this, arguments); if (mousewheelTimer) clearTimeout(mousewheelTimer); - else d3_selection_interrupt.call(this), zoomstarted(event_); - mousewheelTimer = setTimeout(function() { mousewheelTimer = null; zoomended(event_); }, 50); + else translate0 = location(center0 = center || d3.mouse(this)), d3_selection_interrupt.call(this), zoomstarted(dispatch); + mousewheelTimer = setTimeout(function() { mousewheelTimer = null; zoomended(dispatch); }, 50); d3_eventPreventDefault(); - var point = center || d3.mouse(this); - if (!translate0) translate0 = location(point); scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * view.k); - translateTo(point, translate0); - zoomed(event_); - } - - function mousewheelreset() { - translate0 = null; + translateTo(center0, translate0); + zoomed(dispatch); } function dblclicked() { - var event_ = event.of(this, arguments), - p = d3.mouse(this), - l = location(p), + var p = d3.mouse(this), k = Math.log(view.k) / Math.LN2; - zoomstarted(event_); - scaleTo(Math.pow(2, d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1)); - translateTo(p, l); - zoomed(event_); - zoomended(event_); + + zoomTo(this, p, location(p), d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1); } return d3.rebind(zoom, event, "on"); }; -var d3_behavior_zoomInfinity = [0, Infinity]; // default scale extent - -// https://developer.mozilla.org/en-US/docs/Mozilla_event_reference/wheel -var d3_behavior_zoomDelta, d3_behavior_zoomWheel - = "onwheel" in d3_document ? (d3_behavior_zoomDelta = function() { return -d3.event.deltaY * (d3.event.deltaMode ? 120 : 1); }, "wheel") - : "onmousewheel" in d3_document ? (d3_behavior_zoomDelta = function() { return d3.event.wheelDelta; }, "mousewheel") - : (d3_behavior_zoomDelta = function() { return -d3.event.detail; }, "MozMousePixelScroll"); +var d3_behavior_zoomInfinity = [0, Infinity], // default scale extent + d3_behavior_zoomDelta, // initialized lazily + d3_behavior_zoomWheel; function d3_functor(v) { return typeof v === "function" ? v : function() { return v; }; } d3.functor = d3_functor; +d3.touch = function(container, touches, identifier) { + if (arguments.length < 3) identifier = touches, touches = d3_eventSource().changedTouches; + if (touches) for (var i = 0, n = touches.length, touch; i < n; ++i) { + if ((touch = touches[i]).identifier === identifier) { + return d3_mousePoint(container, touch); + } + } +}; + var d3_timer_queueHead, d3_timer_queueTail, d3_timer_interval, // is an interval (or frame) active? d3_timer_timeout, // is a timeout active? d3_timer_active, // active timer object - d3_timer_frame = d3_window[d3_vendorSymbol(d3_window, "requestAnimationFrame")] || function(callback) { setTimeout(callback, 17); }; + d3_timer_frame = this[d3_vendorSymbol(this, "requestAnimationFrame")] || function(callback) { setTimeout(callback, 17); }; // The timer will continue to fire until callback returns true. d3.timer = function(callback, delay, then) { @@ -2122,67 +2251,176 @@ function d3_timer_sweep() { return time; } d3.geo = {}; -function d3_identity(d) { - return d; -} -function d3_true() { - return true; -} -function d3_geo_spherical(cartesian) { - return [ - Math.atan2(cartesian[1], cartesian[0]), - d3_asin(cartesian[2]) - ]; -} +d3.geo.stream = function(object, listener) { + if (object && d3_geo_streamObjectType.hasOwnProperty(object.type)) { + d3_geo_streamObjectType[object.type](object, listener); + } else { + d3_geo_streamGeometry(object, listener); + } +}; -function d3_geo_sphericalEqual(a, b) { - return abs(a[0] - b[0]) < ε && abs(a[1] - b[1]) < ε; +function d3_geo_streamGeometry(geometry, listener) { + if (geometry && d3_geo_streamGeometryType.hasOwnProperty(geometry.type)) { + d3_geo_streamGeometryType[geometry.type](geometry, listener); + } } -// General spherical polygon clipping algorithm: takes a polygon, cuts it into -// visible line segments and rejoins the segments by interpolating along the -// clip edge. -function d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener) { - var subject = [], - clip = []; - - segments.forEach(function(segment) { - if ((n = segment.length - 1) <= 0) return; - var n, p0 = segment[0], p1 = segment[n]; - - // If the first and last points of a segment are coincident, then treat as - // a closed ring. - // TODO if all rings are closed, then the winding order of the exterior - // ring should be checked. - if (d3_geo_sphericalEqual(p0, p1)) { - listener.lineStart(); - for (var i = 0; i < n; ++i) listener.point((p0 = segment[i])[0], p0[1]); - listener.lineEnd(); - return; - } - - var a = new d3_geo_clipPolygonIntersection(p0, segment, null, true), - b = new d3_geo_clipPolygonIntersection(p0, null, a, false); - a.o = b; - subject.push(a); - clip.push(b); - a = new d3_geo_clipPolygonIntersection(p1, segment, null, false); - b = new d3_geo_clipPolygonIntersection(p1, null, a, true); - a.o = b; - subject.push(a); - clip.push(b); - }); - clip.sort(compare); - d3_geo_clipPolygonLinkCircular(subject); - d3_geo_clipPolygonLinkCircular(clip); - if (!subject.length) return; - - for (var i = 0, entry = clipStartInside, n = clip.length; i < n; ++i) { - clip[i].e = entry = !entry; +var d3_geo_streamObjectType = { + Feature: function(feature, listener) { + d3_geo_streamGeometry(feature.geometry, listener); + }, + FeatureCollection: function(object, listener) { + var features = object.features, i = -1, n = features.length; + while (++i < n) d3_geo_streamGeometry(features[i].geometry, listener); } +}; - var start = subject[0], +var d3_geo_streamGeometryType = { + Sphere: function(object, listener) { + listener.sphere(); + }, + Point: function(object, listener) { + object = object.coordinates; + listener.point(object[0], object[1], object[2]); + }, + MultiPoint: function(object, listener) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) object = coordinates[i], listener.point(object[0], object[1], object[2]); + }, + LineString: function(object, listener) { + d3_geo_streamLine(object.coordinates, listener, 0); + }, + MultiLineString: function(object, listener) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) d3_geo_streamLine(coordinates[i], listener, 0); + }, + Polygon: function(object, listener) { + d3_geo_streamPolygon(object.coordinates, listener); + }, + MultiPolygon: function(object, listener) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) d3_geo_streamPolygon(coordinates[i], listener); + }, + GeometryCollection: function(object, listener) { + var geometries = object.geometries, i = -1, n = geometries.length; + while (++i < n) d3_geo_streamGeometry(geometries[i], listener); + } +}; + +function d3_geo_streamLine(coordinates, listener, closed) { + var i = -1, n = coordinates.length - closed, coordinate; + listener.lineStart(); + while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1], coordinate[2]); + listener.lineEnd(); +} + +function d3_geo_streamPolygon(coordinates, listener) { + var i = -1, n = coordinates.length; + listener.polygonStart(); + while (++i < n) d3_geo_streamLine(coordinates[i], listener, 1); + listener.polygonEnd(); +} + +d3.geo.length = function(object) { + d3_geo_lengthSum = 0; + d3.geo.stream(object, d3_geo_length); + return d3_geo_lengthSum; +}; + +var d3_geo_lengthSum; + +var d3_geo_length = { + sphere: d3_noop, + point: d3_noop, + lineStart: d3_geo_lengthLineStart, + lineEnd: d3_noop, + polygonStart: d3_noop, + polygonEnd: d3_noop +}; + +function d3_geo_lengthLineStart() { + var λ0, sinφ0, cosφ0; + + d3_geo_length.point = function(λ, φ) { + λ0 = λ * d3_radians, sinφ0 = Math.sin(φ *= d3_radians), cosφ0 = Math.cos(φ); + d3_geo_length.point = nextPoint; + }; + + d3_geo_length.lineEnd = function() { + d3_geo_length.point = d3_geo_length.lineEnd = d3_noop; + }; + + function nextPoint(λ, φ) { + var sinφ = Math.sin(φ *= d3_radians), + cosφ = Math.cos(φ), + t = abs((λ *= d3_radians) - λ0), + cosΔλ = Math.cos(t); + d3_geo_lengthSum += Math.atan2(Math.sqrt((t = cosφ * Math.sin(t)) * t + (t = cosφ0 * sinφ - sinφ0 * cosφ * cosΔλ) * t), sinφ0 * sinφ + cosφ0 * cosφ * cosΔλ); + λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ; + } +} +function d3_identity(d) { + return d; +} +function d3_true() { + return true; +} + +function d3_geo_spherical(cartesian) { + return [ + Math.atan2(cartesian[1], cartesian[0]), + d3_asin(cartesian[2]) + ]; +} + +function d3_geo_sphericalEqual(a, b) { + return abs(a[0] - b[0]) < ε && abs(a[1] - b[1]) < ε; +} + +// General spherical polygon clipping algorithm: takes a polygon, cuts it into +// visible line segments and rejoins the segments by interpolating along the +// clip edge. +function d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener) { + var subject = [], + clip = []; + + segments.forEach(function(segment) { + if ((n = segment.length - 1) <= 0) return; + var n, p0 = segment[0], p1 = segment[n]; + + // If the first and last points of a segment are coincident, then treat as + // a closed ring. + // TODO if all rings are closed, then the winding order of the exterior + // ring should be checked. + if (d3_geo_sphericalEqual(p0, p1)) { + listener.lineStart(); + for (var i = 0; i < n; ++i) listener.point((p0 = segment[i])[0], p0[1]); + listener.lineEnd(); + return; + } + + var a = new d3_geo_clipPolygonIntersection(p0, segment, null, true), + b = new d3_geo_clipPolygonIntersection(p0, null, a, false); + a.o = b; + subject.push(a); + clip.push(b); + a = new d3_geo_clipPolygonIntersection(p1, segment, null, false); + b = new d3_geo_clipPolygonIntersection(p1, null, a, true); + a.o = b; + subject.push(a); + clip.push(b); + }); + clip.sort(compare); + d3_geo_clipPolygonLinkCircular(subject); + d3_geo_clipPolygonLinkCircular(clip); + if (!subject.length) return; + + for (var i = 0, entry = clipStartInside, n = clip.length; i < n; ++i) { + clip[i].e = entry = !entry; + } + + var start = subject[0], points, point; while (1) { @@ -2257,7 +2495,6 @@ function d3_geo_clip(pointVisible, clipLine, interpolate, clipStart) { clip.lineEnd = ringEnd; segments = []; polygon = []; - listener.polygonStart(); }, polygonEnd: function() { clip.point = point; @@ -2267,13 +2504,15 @@ function d3_geo_clip(pointVisible, clipLine, interpolate, clipStart) { segments = d3.merge(segments); var clipStartInside = d3_geo_pointInPolygon(rotatedClipStart, polygon); if (segments.length) { + if (!polygonStarted) listener.polygonStart(), polygonStarted = true; d3_geo_clipPolygon(segments, d3_geo_clipSort, clipStartInside, interpolate, listener); } else if (clipStartInside) { + if (!polygonStarted) listener.polygonStart(), polygonStarted = true; listener.lineStart(); interpolate(null, null, 1, listener); listener.lineEnd(); } - listener.polygonEnd(); + if (polygonStarted) listener.polygonEnd(), polygonStarted = false; segments = polygon = null; }, sphere: function() { @@ -2300,6 +2539,7 @@ function d3_geo_clip(pointVisible, clipLine, interpolate, clipStart) { var buffer = d3_geo_clipBufferListener(), ringListener = clipLine(buffer), + polygonStarted = false, polygon, ring; @@ -2335,9 +2575,12 @@ function d3_geo_clip(pointVisible, clipLine, interpolate, clipStart) { var n = segment.length - 1, i = -1, point; - listener.lineStart(); - while (++i < n) listener.point((point = segment[i])[0], point[1]); - listener.lineEnd(); + if (n > 0) { + if (!polygonStarted) listener.polygonStart(), polygonStarted = true; + listener.lineStart(); + while (++i < n) listener.point((point = segment[i])[0], point[1]); + listener.lineEnd(); + } return; } @@ -2381,172 +2624,97 @@ function d3_geo_clipSort(a, b) { return ((a = a.x)[0] < 0 ? a[1] - halfπ - ε : halfπ - a[1]) - ((b = b.x)[0] < 0 ? b[1] - halfπ - ε : halfπ - b[1]); } -// Adds floating point numbers with twice the normal precision. -// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and -// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3) -// 305–363 (1997). -// Code adapted from GeographicLib by Charles F. F. Karney, -// http://geographiclib.sourceforge.net/ -// See lib/geographiclib/LICENSE for details. -function d3_adder() {} +var d3_geo_clipAntimeridian = d3_geo_clip( + d3_true, + d3_geo_clipAntimeridianLine, + d3_geo_clipAntimeridianInterpolate, + [-π, -π / 2]); -d3_adder.prototype = { - s: 0, // rounded value - t: 0, // exact error - add: function(y) { - d3_adderSum(y, this.t, d3_adderTemp); - d3_adderSum(d3_adderTemp.s, this.s, this); - if (this.s) this.t += d3_adderTemp.t; - else this.s = d3_adderTemp.t; - }, - reset: function() { - this.s = this.t = 0; - }, - valueOf: function() { - return this.s; - } -}; +// Takes a line and cuts into visible segments. Return values: +// 0: there were intersections or the line was empty. +// 1: no intersections. +// 2: there were intersections, and the first and last segments should be +// rejoined. +function d3_geo_clipAntimeridianLine(listener) { + var λ0 = NaN, + φ0 = NaN, + sλ0 = NaN, + clean; // no intersections -var d3_adderTemp = new d3_adder; + return { + lineStart: function() { + listener.lineStart(); + clean = 1; + }, + point: function(λ1, φ1) { + var sλ1 = λ1 > 0 ? π : -π, + dλ = abs(λ1 - λ0); + if (abs(dλ - π) < ε) { // line crosses a pole + listener.point(λ0, φ0 = (φ0 + φ1) / 2 > 0 ? halfπ : -halfπ); + listener.point(sλ0, φ0); + listener.lineEnd(); + listener.lineStart(); + listener.point(sλ1, φ0); + listener.point(λ1, φ0); + clean = 0; + } else if (sλ0 !== sλ1 && dλ >= π) { // line crosses antimeridian + // handle degeneracies + if (abs(λ0 - sλ0) < ε) λ0 -= sλ0 * ε; + if (abs(λ1 - sλ1) < ε) λ1 -= sλ1 * ε; + φ0 = d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1); + listener.point(sλ0, φ0); + listener.lineEnd(); + listener.lineStart(); + listener.point(sλ1, φ0); + clean = 0; + } + listener.point(λ0 = λ1, φ0 = φ1); + sλ0 = sλ1; + }, + lineEnd: function() { + listener.lineEnd(); + λ0 = φ0 = NaN; + }, + // if there are intersections, we always rejoin the first and last segments. + clean: function() { return 2 - clean; } + }; +} -function d3_adderSum(a, b, o) { - var x = o.s = a + b, // a + b - bv = x - a, av = x - bv; // b_virtual & a_virtual - o.t = (a - av) + (b - bv); // a_roundoff + b_roundoff +function d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1) { + var cosφ0, + cosφ1, + sinλ0_λ1 = Math.sin(λ0 - λ1); + return abs(sinλ0_λ1) > ε + ? Math.atan((Math.sin(φ0) * (cosφ1 = Math.cos(φ1)) * Math.sin(λ1) + - Math.sin(φ1) * (cosφ0 = Math.cos(φ0)) * Math.sin(λ0)) + / (cosφ0 * cosφ1 * sinλ0_λ1)) + : (φ0 + φ1) / 2; } -d3.geo.stream = function(object, listener) { - if (object && d3_geo_streamObjectType.hasOwnProperty(object.type)) { - d3_geo_streamObjectType[object.type](object, listener); +function d3_geo_clipAntimeridianInterpolate(from, to, direction, listener) { + var φ; + if (from == null) { + φ = direction * halfπ; + listener.point(-π, φ); + listener.point( 0, φ); + listener.point( π, φ); + listener.point( π, 0); + listener.point( π, -φ); + listener.point( 0, -φ); + listener.point(-π, -φ); + listener.point(-π, 0); + listener.point(-π, φ); + } else if (abs(from[0] - to[0]) > ε) { + var s = from[0] < to[0] ? π : -π; + φ = direction * s / 2; + listener.point(-s, φ); + listener.point( 0, φ); + listener.point( s, φ); } else { - d3_geo_streamGeometry(object, listener); - } -}; - -function d3_geo_streamGeometry(geometry, listener) { - if (geometry && d3_geo_streamGeometryType.hasOwnProperty(geometry.type)) { - d3_geo_streamGeometryType[geometry.type](geometry, listener); + listener.point(to[0], to[1]); } } - -var d3_geo_streamObjectType = { - Feature: function(feature, listener) { - d3_geo_streamGeometry(feature.geometry, listener); - }, - FeatureCollection: function(object, listener) { - var features = object.features, i = -1, n = features.length; - while (++i < n) d3_geo_streamGeometry(features[i].geometry, listener); - } -}; - -var d3_geo_streamGeometryType = { - Sphere: function(object, listener) { - listener.sphere(); - }, - Point: function(object, listener) { - object = object.coordinates; - listener.point(object[0], object[1], object[2]); - }, - MultiPoint: function(object, listener) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) object = coordinates[i], listener.point(object[0], object[1], object[2]); - }, - LineString: function(object, listener) { - d3_geo_streamLine(object.coordinates, listener, 0); - }, - MultiLineString: function(object, listener) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) d3_geo_streamLine(coordinates[i], listener, 0); - }, - Polygon: function(object, listener) { - d3_geo_streamPolygon(object.coordinates, listener); - }, - MultiPolygon: function(object, listener) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) d3_geo_streamPolygon(coordinates[i], listener); - }, - GeometryCollection: function(object, listener) { - var geometries = object.geometries, i = -1, n = geometries.length; - while (++i < n) d3_geo_streamGeometry(geometries[i], listener); - } -}; - -function d3_geo_streamLine(coordinates, listener, closed) { - var i = -1, n = coordinates.length - closed, coordinate; - listener.lineStart(); - while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1], coordinate[2]); - listener.lineEnd(); -} - -function d3_geo_streamPolygon(coordinates, listener) { - var i = -1, n = coordinates.length; - listener.polygonStart(); - while (++i < n) d3_geo_streamLine(coordinates[i], listener, 1); - listener.polygonEnd(); -} - -d3.geo.area = function(object) { - d3_geo_areaSum = 0; - d3.geo.stream(object, d3_geo_area); - return d3_geo_areaSum; -}; - -var d3_geo_areaSum, - d3_geo_areaRingSum = new d3_adder; - -var d3_geo_area = { - sphere: function() { d3_geo_areaSum += 4 * π; }, - point: d3_noop, - lineStart: d3_noop, - lineEnd: d3_noop, - - // Only count area for polygon rings. - polygonStart: function() { - d3_geo_areaRingSum.reset(); - d3_geo_area.lineStart = d3_geo_areaRingStart; - }, - polygonEnd: function() { - var area = 2 * d3_geo_areaRingSum; - d3_geo_areaSum += area < 0 ? 4 * π + area : area; - d3_geo_area.lineStart = d3_geo_area.lineEnd = d3_geo_area.point = d3_noop; - } -}; - -function d3_geo_areaRingStart() { - var λ00, φ00, λ0, cosφ0, sinφ0; // start point and previous point - - // For the first point, … - d3_geo_area.point = function(λ, φ) { - d3_geo_area.point = nextPoint; - λ0 = (λ00 = λ) * d3_radians, cosφ0 = Math.cos(φ = (φ00 = φ) * d3_radians / 2 + π / 4), sinφ0 = Math.sin(φ); - }; - - // For subsequent points, … - function nextPoint(λ, φ) { - λ *= d3_radians; - φ = φ * d3_radians / 2 + π / 4; // half the angular distance from south pole - - // Spherical excess E for a spherical triangle with vertices: south pole, - // previous point, current point. Uses a formula derived from Cagnoli’s - // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2). - var dλ = λ - λ0, - cosφ = Math.cos(φ), - sinφ = Math.sin(φ), - k = sinφ0 * sinφ, - u = cosφ0 * cosφ + k * Math.cos(dλ), - v = k * Math.sin(dλ); - d3_geo_areaRingSum.add(Math.atan2(v, u)); - - // Advance the previous points. - λ0 = λ, cosφ0 = cosφ, sinφ0 = sinφ; - } - - // For the last point, return to the start. - d3_geo_area.lineEnd = function() { - nextPoint(λ00, φ00); - }; -} // TODO // cross and scale return new vectors, // whereas add and normalize operate in-place @@ -2594,188 +2762,45 @@ function d3_geo_cartesianNormalize(d) { d[1] /= l; d[2] /= l; } +function d3_geo_compose(a, b) { -function d3_geo_pointInPolygon(point, polygon) { - var meridian = point[0], - parallel = point[1], - meridianNormal = [Math.sin(meridian), -Math.cos(meridian), 0], - polarAngle = 0, - winding = 0; - d3_geo_areaRingSum.reset(); + function compose(x, y) { + return x = a(x, y), b(x[0], x[1]); + } - for (var i = 0, n = polygon.length; i < n; ++i) { - var ring = polygon[i], - m = ring.length; - if (!m) continue; - var point0 = ring[0], - λ0 = point0[0], - φ0 = point0[1] / 2 + π / 4, - sinφ0 = Math.sin(φ0), - cosφ0 = Math.cos(φ0), - j = 1; + if (a.invert && b.invert) compose.invert = function(x, y) { + return x = b.invert(x, y), x && a.invert(x[0], x[1]); + }; - while (true) { - if (j === m) j = 0; - point = ring[j]; - var λ = point[0], - φ = point[1] / 2 + π / 4, - sinφ = Math.sin(φ), - cosφ = Math.cos(φ), - dλ = λ - λ0, - antimeridian = abs(dλ) > π, - k = sinφ0 * sinφ; - d3_geo_areaRingSum.add(Math.atan2(k * Math.sin(dλ), cosφ0 * cosφ + k * Math.cos(dλ))); + return compose; +} - polarAngle += antimeridian ? dλ + (dλ >= 0 ? τ : -τ): dλ; +function d3_geo_equirectangular(λ, φ) { + return [λ, φ]; +} - // Are the longitudes either side of the point's meridian, and are the - // latitudes smaller than the parallel? - if (antimeridian ^ λ0 >= meridian ^ λ >= meridian) { - var arc = d3_geo_cartesianCross(d3_geo_cartesian(point0), d3_geo_cartesian(point)); - d3_geo_cartesianNormalize(arc); - var intersection = d3_geo_cartesianCross(meridianNormal, arc); - d3_geo_cartesianNormalize(intersection); - var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]); - if (parallel > φarc || parallel === φarc && (arc[0] || arc[1])) { - winding += antimeridian ^ dλ >= 0 ? 1 : -1; - } - } - if (!j++) break; - λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ, point0 = point; - } - } +(d3.geo.equirectangular = function() { + return d3_geo_projection(d3_geo_equirectangular); +}).raw = d3_geo_equirectangular.invert = d3_geo_equirectangular; - // First, determine whether the South pole is inside or outside: - // - // It is inside if: - // * the polygon winds around it in a clockwise direction. - // * the polygon does not (cumulatively) wind around it, but has a negative - // (counter-clockwise) area. - // - // Second, count the (signed) number of times a segment crosses a meridian - // from the point to the South pole. If it is zero, then the point is the - // same side as the South pole. +d3.geo.rotation = function(rotate) { + rotate = d3_geo_rotation(rotate[0] % 360 * d3_radians, rotate[1] * d3_radians, rotate.length > 2 ? rotate[2] * d3_radians : 0); - return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < 0) ^ (winding & 1); -} + function forward(coordinates) { + coordinates = rotate(coordinates[0] * d3_radians, coordinates[1] * d3_radians); + return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates; + } -var d3_geo_clipAntimeridian = d3_geo_clip( - d3_true, - d3_geo_clipAntimeridianLine, - d3_geo_clipAntimeridianInterpolate, - [-π, -π / 2]); + forward.invert = function(coordinates) { + coordinates = rotate.invert(coordinates[0] * d3_radians, coordinates[1] * d3_radians); + return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates; + }; -// Takes a line and cuts into visible segments. Return values: -// 0: there were intersections or the line was empty. -// 1: no intersections. -// 2: there were intersections, and the first and last segments should be -// rejoined. -function d3_geo_clipAntimeridianLine(listener) { - var λ0 = NaN, - φ0 = NaN, - sλ0 = NaN, - clean; // no intersections + return forward; +}; - return { - lineStart: function() { - listener.lineStart(); - clean = 1; - }, - point: function(λ1, φ1) { - var sλ1 = λ1 > 0 ? π : -π, - dλ = abs(λ1 - λ0); - if (abs(dλ - π) < ε) { // line crosses a pole - listener.point(λ0, φ0 = (φ0 + φ1) / 2 > 0 ? halfπ : -halfπ); - listener.point(sλ0, φ0); - listener.lineEnd(); - listener.lineStart(); - listener.point(sλ1, φ0); - listener.point(λ1, φ0); - clean = 0; - } else if (sλ0 !== sλ1 && dλ >= π) { // line crosses antimeridian - // handle degeneracies - if (abs(λ0 - sλ0) < ε) λ0 -= sλ0 * ε; - if (abs(λ1 - sλ1) < ε) λ1 -= sλ1 * ε; - φ0 = d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1); - listener.point(sλ0, φ0); - listener.lineEnd(); - listener.lineStart(); - listener.point(sλ1, φ0); - clean = 0; - } - listener.point(λ0 = λ1, φ0 = φ1); - sλ0 = sλ1; - }, - lineEnd: function() { - listener.lineEnd(); - λ0 = φ0 = NaN; - }, - // if there are intersections, we always rejoin the first and last segments. - clean: function() { return 2 - clean; } - }; -} - -function d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1) { - var cosφ0, - cosφ1, - sinλ0_λ1 = Math.sin(λ0 - λ1); - return abs(sinλ0_λ1) > ε - ? Math.atan((Math.sin(φ0) * (cosφ1 = Math.cos(φ1)) * Math.sin(λ1) - - Math.sin(φ1) * (cosφ0 = Math.cos(φ0)) * Math.sin(λ0)) - / (cosφ0 * cosφ1 * sinλ0_λ1)) - : (φ0 + φ1) / 2; -} - -function d3_geo_clipAntimeridianInterpolate(from, to, direction, listener) { - var φ; - if (from == null) { - φ = direction * halfπ; - listener.point(-π, φ); - listener.point( 0, φ); - listener.point( π, φ); - listener.point( π, 0); - listener.point( π, -φ); - listener.point( 0, -φ); - listener.point(-π, -φ); - listener.point(-π, 0); - listener.point(-π, φ); - } else if (abs(from[0] - to[0]) > ε) { - var s = from[0] < to[0] ? π : -π; - φ = direction * s / 2; - listener.point(-s, φ); - listener.point( 0, φ); - listener.point( s, φ); - } else { - listener.point(to[0], to[1]); - } -} - -function d3_geo_equirectangular(λ, φ) { - return [λ, φ]; -} - -(d3.geo.equirectangular = function() { - return d3_geo_projection(d3_geo_equirectangular); -}).raw = d3_geo_equirectangular.invert = d3_geo_equirectangular; - -d3.geo.rotation = function(rotate) { - rotate = d3_geo_rotation(rotate[0] % 360 * d3_radians, rotate[1] * d3_radians, rotate.length > 2 ? rotate[2] * d3_radians : 0); - - function forward(coordinates) { - coordinates = rotate(coordinates[0] * d3_radians, coordinates[1] * d3_radians); - return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates; - } - - forward.invert = function(coordinates) { - coordinates = rotate.invert(coordinates[0] * d3_radians, coordinates[1] * d3_radians); - return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates; - }; - - return forward; -}; - -function d3_geo_identityRotation(λ, φ) { - return [λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ]; +function d3_geo_identityRotation(λ, φ) { + return [λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ]; } d3_geo_identityRotation.invert = d3_geo_equirectangular; @@ -2908,6 +2933,170 @@ function d3_geo_circleAngle(cr, point) { var angle = d3_acos(-a[1]); return ((-a[2] < 0 ? -angle : angle) + 2 * Math.PI - ε) % (2 * Math.PI); } +// Adds floating point numbers with twice the normal precision. +// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and +// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3) +// 305–363 (1997). +// Code adapted from GeographicLib by Charles F. F. Karney, +// http://geographiclib.sourceforge.net/ +// See lib/geographiclib/LICENSE for details. + +function d3_adder() {} + +d3_adder.prototype = { + s: 0, // rounded value + t: 0, // exact error + add: function(y) { + d3_adderSum(y, this.t, d3_adderTemp); + d3_adderSum(d3_adderTemp.s, this.s, this); + if (this.s) this.t += d3_adderTemp.t; + else this.s = d3_adderTemp.t; + }, + reset: function() { + this.s = this.t = 0; + }, + valueOf: function() { + return this.s; + } +}; + +var d3_adderTemp = new d3_adder; + +function d3_adderSum(a, b, o) { + var x = o.s = a + b, // a + b + bv = x - a, av = x - bv; // b_virtual & a_virtual + o.t = (a - av) + (b - bv); // a_roundoff + b_roundoff +} + +d3.geo.area = function(object) { + d3_geo_areaSum = 0; + d3.geo.stream(object, d3_geo_area); + return d3_geo_areaSum; +}; + +var d3_geo_areaSum, + d3_geo_areaRingSum = new d3_adder; + +var d3_geo_area = { + sphere: function() { d3_geo_areaSum += 4 * π; }, + point: d3_noop, + lineStart: d3_noop, + lineEnd: d3_noop, + + // Only count area for polygon rings. + polygonStart: function() { + d3_geo_areaRingSum.reset(); + d3_geo_area.lineStart = d3_geo_areaRingStart; + }, + polygonEnd: function() { + var area = 2 * d3_geo_areaRingSum; + d3_geo_areaSum += area < 0 ? 4 * π + area : area; + d3_geo_area.lineStart = d3_geo_area.lineEnd = d3_geo_area.point = d3_noop; + } +}; + +function d3_geo_areaRingStart() { + var λ00, φ00, λ0, cosφ0, sinφ0; // start point and previous point + + // For the first point, … + d3_geo_area.point = function(λ, φ) { + d3_geo_area.point = nextPoint; + λ0 = (λ00 = λ) * d3_radians, cosφ0 = Math.cos(φ = (φ00 = φ) * d3_radians / 2 + π / 4), sinφ0 = Math.sin(φ); + }; + + // For subsequent points, … + function nextPoint(λ, φ) { + λ *= d3_radians; + φ = φ * d3_radians / 2 + π / 4; // half the angular distance from south pole + + // Spherical excess E for a spherical triangle with vertices: south pole, + // previous point, current point. Uses a formula derived from Cagnoli’s + // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2). + var dλ = λ - λ0, + sdλ = dλ >= 0 ? 1 : -1, + adλ = sdλ * dλ, + cosφ = Math.cos(φ), + sinφ = Math.sin(φ), + k = sinφ0 * sinφ, + u = cosφ0 * cosφ + k * Math.cos(adλ), + v = k * sdλ * Math.sin(adλ); + d3_geo_areaRingSum.add(Math.atan2(v, u)); + + // Advance the previous points. + λ0 = λ, cosφ0 = cosφ, sinφ0 = sinφ; + } + + // For the last point, return to the start. + d3_geo_area.lineEnd = function() { + nextPoint(λ00, φ00); + }; +} + +function d3_geo_pointInPolygon(point, polygon) { + var meridian = point[0], + parallel = point[1], + meridianNormal = [Math.sin(meridian), -Math.cos(meridian), 0], + polarAngle = 0, + winding = 0; + d3_geo_areaRingSum.reset(); + + for (var i = 0, n = polygon.length; i < n; ++i) { + var ring = polygon[i], + m = ring.length; + if (!m) continue; + var point0 = ring[0], + λ0 = point0[0], + φ0 = point0[1] / 2 + π / 4, + sinφ0 = Math.sin(φ0), + cosφ0 = Math.cos(φ0), + j = 1; + + while (true) { + if (j === m) j = 0; + point = ring[j]; + var λ = point[0], + φ = point[1] / 2 + π / 4, + sinφ = Math.sin(φ), + cosφ = Math.cos(φ), + dλ = λ - λ0, + sdλ = dλ >= 0 ? 1 : -1, + adλ = sdλ * dλ, + antimeridian = adλ > π, + k = sinφ0 * sinφ; + d3_geo_areaRingSum.add(Math.atan2(k * sdλ * Math.sin(adλ), cosφ0 * cosφ + k * Math.cos(adλ))); + + polarAngle += antimeridian ? dλ + sdλ * τ : dλ; + + // Are the longitudes either side of the point's meridian, and are the + // latitudes smaller than the parallel? + if (antimeridian ^ λ0 >= meridian ^ λ >= meridian) { + var arc = d3_geo_cartesianCross(d3_geo_cartesian(point0), d3_geo_cartesian(point)); + d3_geo_cartesianNormalize(arc); + var intersection = d3_geo_cartesianCross(meridianNormal, arc); + d3_geo_cartesianNormalize(intersection); + var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]); + if (parallel > φarc || parallel === φarc && (arc[0] || arc[1])) { + winding += antimeridian ^ dλ >= 0 ? 1 : -1; + } + } + if (!j++) break; + λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ, point0 = point; + } + } + + // First, determine whether the South pole is inside or outside: + // + // It is inside if: + // * the polygon winds around it in a clockwise direction. + // * the polygon does not (cumulatively) wind around it, but has a negative + // (counter-clockwise) area. + // + // Second, count the (signed) number of times a segment crosses a meridian + // from the point to the South pole. If it is zero, then the point is the + // same side as the South pole. + + return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < 0) ^ (winding & 1); +} // Clip features against a small circle centered at [0°, 0°]. function d3_geo_clipCircle(radius) { @@ -3218,9 +3407,9 @@ function d3_geo_clipExtent(x0, y0, x1, y1) { for (var j = 1, v = polygon[i], m = v.length, a = v[0], b; j < m; ++j) { b = v[j]; if (a[1] <= y) { - if (b[1] > y && isLeft(a, b, p) > 0) ++wn; + if (b[1] > y && d3_cross2d(a, b, p) > 0) ++wn; } else { - if (b[1] <= y && isLeft(a, b, p) < 0) --wn; + if (b[1] <= y && d3_cross2d(a, b, p) < 0) --wn; } a = b; } @@ -3228,10 +3417,6 @@ function d3_geo_clipExtent(x0, y0, x1, y1) { return wn !== 0; } - function isLeft(a, b, c) { - return (b[0] - a[0]) * (c[1] - a[1]) - (c[0] - a[0]) * (b[1] - a[1]); - } - function interpolate(from, to, direction, listener) { var a = 0, a1 = 0; if (from == null || @@ -3337,18 +3522,6 @@ function d3_geo_clipExtent(x0, y0, x1, y1) { : b[0] - a[0]; } } -function d3_geo_compose(a, b) { - - function compose(x, y) { - return x = a(x, y), b(x[0], x[1]); - } - - if (a.invert && b.invert) compose.invert = function(x, y) { - return x = b.invert(x, y), x && a.invert(x[0], x[1]); - }; - - return compose; -} function d3_geo_conic(projectAt) { var φ0 = 0, @@ -4053,7 +4226,7 @@ function d3_geo_pathContext(context) { }; function point(x, y) { - context.moveTo(x, y); + context.moveTo(x + pointRadius, y); context.arc(x, y, pointRadius, 0, τ); } @@ -4546,118 +4719,149 @@ function d3_geom_polygonClosed(coordinates) { b = coordinates[coordinates.length - 1]; return !(a[0] - b[0] || a[1] - b[1]); } +function d3_geom_pointX(d) { + return d[0]; +} -var d3_ease_default = function() { return d3_identity; }; +function d3_geom_pointY(d) { + return d[1]; +} -var d3_ease = d3.map({ - linear: d3_ease_default, - poly: d3_ease_poly, - quad: function() { return d3_ease_quad; }, - cubic: function() { return d3_ease_cubic; }, - sin: function() { return d3_ease_sin; }, - exp: function() { return d3_ease_exp; }, - circle: function() { return d3_ease_circle; }, - elastic: d3_ease_elastic, - back: d3_ease_back, - bounce: function() { return d3_ease_bounce; } -}); +/** + * Computes the 2D convex hull of a set of points using the monotone chain + * algorithm: + * http://en.wikibooks.org/wiki/Algorithm_Implementation/Geometry/Convex_hull/Monotone_chain) + * + * The runtime of this algorithm is O(n log n), where n is the number of input + * points. However in practice it outperforms other O(n log n) hulls. + * + * @param vertices [[x1, y1], [x2, y2], ...] + * @returns polygon [[x1, y1], [x2, y2], ...] + */ +d3.geom.hull = function(vertices) { + var x = d3_geom_pointX, + y = d3_geom_pointY; -var d3_ease_mode = d3.map({ - "in": d3_identity, - "out": d3_ease_reverse, - "in-out": d3_ease_reflect, - "out-in": function(f) { return d3_ease_reflect(d3_ease_reverse(f)); } -}); + if (arguments.length) return hull(vertices); -d3.ease = function(name) { - var i = name.indexOf("-"), - t = i >= 0 ? name.substring(0, i) : name, - m = i >= 0 ? name.substring(i + 1) : "in"; - t = d3_ease.get(t) || d3_ease_default; - m = d3_ease_mode.get(m) || d3_identity; - return d3_ease_clamp(m(t.apply(null, d3_arraySlice.call(arguments, 1)))); -}; + function hull(data) { + // Hull of < 3 points is not well-defined + if (data.length < 3) return []; -function d3_ease_clamp(f) { - return function(t) { - return t <= 0 ? 0 : t >= 1 ? 1 : f(t); - }; -} + var fx = d3_functor(x), + fy = d3_functor(y), + i, + n = data.length, + points = [], // of the form [[x0, y0, 0], ..., [xn, yn, n]] + flippedPoints = []; -function d3_ease_reverse(f) { - return function(t) { - return 1 - f(1 - t); + for (i = 0 ; i < n; i++) { + points.push([+fx.call(this, data[i], i), +fy.call(this, data[i], i), i]); + } + + // sort ascending by x-coord first, y-coord second + points.sort(d3_geom_hullOrder); + + // we flip bottommost points across y axis so we can use the upper hull routine on both + for (i = 0; i < n; i++) flippedPoints.push([points[i][0], -points[i][1]]); + + var upper = d3_geom_hullUpper(points), + lower = d3_geom_hullUpper(flippedPoints); + + // construct the polygon, removing possible duplicate endpoints + var skipLeft = lower[0] === upper[0], + skipRight = lower[lower.length - 1] === upper[upper.length - 1], + polygon = []; + + // add upper hull in r->l order + // then add lower hull in l->r order + for (i = upper.length - 1; i >= 0; --i) polygon.push(data[points[upper[i]][2]]); + for (i = +skipLeft; i < lower.length - skipRight; ++i) polygon.push(data[points[lower[i]][2]]); + + return polygon; + } + + hull.x = function(_) { + return arguments.length ? (x = _, hull) : x; }; -} -function d3_ease_reflect(f) { - return function(t) { - return .5 * (t < .5 ? f(2 * t) : (2 - f(2 - 2 * t))); + hull.y = function(_) { + return arguments.length ? (y = _, hull) : y; }; -} -function d3_ease_quad(t) { - return t * t; -} + return hull; +}; -function d3_ease_cubic(t) { - return t * t * t; -} +// finds the 'upper convex hull' (see wiki link above) +// assumes points arg has >=3 elements, is sorted by x, unique in y +// returns array of indices into points in left to right order +function d3_geom_hullUpper(points) { + var n = points.length, + hull = [0, 1], + hs = 2; // hull size -// Optimized clamp(reflect(poly(3))). -function d3_ease_cubicInOut(t) { - if (t <= 0) return 0; - if (t >= 1) return 1; - var t2 = t * t, t3 = t2 * t; - return 4 * (t < .5 ? t3 : 3 * (t - t2) + t3 - .75); -} + for (var i = 2; i < n; i++) { + while (hs > 1 && d3_cross2d(points[hull[hs-2]], points[hull[hs-1]], points[i]) <= 0) --hs; + hull[hs++] = i; + } -function d3_ease_poly(e) { - return function(t) { - return Math.pow(t, e); - }; + // we slice to make sure that the points we 'popped' from hull don't stay behind + return hull.slice(0, hs); } -function d3_ease_sin(t) { - return 1 - Math.cos(t * halfπ); +// comparator for ascending sort by x-coord first, y-coord second +function d3_geom_hullOrder(a, b) { + return a[0] - b[0] || a[1] - b[1]; } +// import "../transition/transition"; -function d3_ease_exp(t) { - return Math.pow(2, 10 * (t - 1)); -} +d3_selectionPrototype.transition = function(name) { + var id = d3_transitionInheritId || ++d3_transitionId, + ns = d3_transitionNamespace(name), + subgroups = [], + subgroup, + node, + transition = d3_transitionInherit || {time: Date.now(), ease: d3_ease_cubicInOut, delay: 0, duration: 250}; -function d3_ease_circle(t) { - return 1 - Math.sqrt(1 - t * t); -} + for (var j = -1, m = this.length; ++j < m;) { + subgroups.push(subgroup = []); + for (var group = this[j], i = -1, n = group.length; ++i < n;) { + if (node = group[i]) d3_transitionNode(node, i, ns, id, transition); + subgroup.push(node); + } + } -function d3_ease_elastic(a, p) { - var s; - if (arguments.length < 2) p = 0.45; - if (arguments.length) s = p / τ * Math.asin(1 / a); - else a = 1, s = p / 4; - return function(t) { - return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * τ / p); - }; -} + return d3_transition(subgroups, ns, id); +}; +// import "../transition/transition"; -function d3_ease_back(s) { - if (!s) s = 1.70158; - return function(t) { - return t * t * ((s + 1) * t - s); - }; -} +// TODO Interrupt transitions for all namespaces? +d3_selectionPrototype.interrupt = function(name) { + return this.each(name == null + ? d3_selection_interrupt + : d3_selection_interruptNS(d3_transitionNamespace(name))); +}; -function d3_ease_bounce(t) { - return t < 1 / 2.75 ? 7.5625 * t * t - : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 - : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 - : 7.5625 * (t -= 2.625 / 2.75) * t + .984375; +var d3_selection_interrupt = d3_selection_interruptNS(d3_transitionNamespace()); + +function d3_selection_interruptNS(ns) { + return function() { + var lock, active; + if ((lock = this[ns]) && (active = lock[lock.active])) { + if (--lock.count) delete lock[lock.active]; + else delete this[ns]; + lock.active += .5; + active.event && active.event.interrupt.call(this, this.__data__, active.index); + } + }; } -function d3_transition(groups, id) { +function d3_transition(groups, ns, id) { d3_subclass(groups, d3_transitionPrototype); - groups.id = id; // Note: read-only! + // Note: read-only! + groups.namespace = ns; + groups.id = id; return groups; } @@ -4672,10 +4876,10 @@ d3_transitionPrototype.empty = d3_selectionPrototype.empty; d3_transitionPrototype.node = d3_selectionPrototype.node; d3_transitionPrototype.size = d3_selectionPrototype.size; -d3.transition = function(selection) { - return arguments.length - ? (d3_transitionInheritId ? selection.transition() : selection) - : d3_selectionRoot.transition(); +d3.transition = function(selection, name) { + return selection && selection.transition + ? (d3_transitionInheritId ? selection.transition(name) : selection) + : d3.selection().transition(selection); }; d3.transition.prototype = d3_transitionPrototype; @@ -4683,6 +4887,7 @@ d3.transition.prototype = d3_transitionPrototype; d3_transitionPrototype.select = function(selector) { var id = this.id, + ns = this.namespace, subgroups = [], subgroup, subnode, @@ -4695,7 +4900,7 @@ d3_transitionPrototype.select = function(selector) { for (var group = this[j], i = -1, n = group.length; ++i < n;) { if ((node = group[i]) && (subnode = selector.call(node, node.__data__, i, j))) { if ("__data__" in node) subnode.__data__ = node.__data__; - d3_transitionNode(subnode, i, id, node.__transition__[id]); + d3_transitionNode(subnode, i, ns, id, node[ns][id]); subgroup.push(subnode); } else { subgroup.push(null); @@ -4703,11 +4908,12 @@ d3_transitionPrototype.select = function(selector) { } } - return d3_transition(subgroups, id); + return d3_transition(subgroups, ns, id); }; d3_transitionPrototype.selectAll = function(selector) { var id = this.id, + ns = this.namespace, subgroups = [], subgroup, subnodes, @@ -4720,18 +4926,18 @@ d3_transitionPrototype.selectAll = function(selector) { for (var j = -1, m = this.length; ++j < m;) { for (var group = this[j], i = -1, n = group.length; ++i < n;) { if (node = group[i]) { - transition = node.__transition__[id]; + transition = node[ns][id]; subnodes = selector.call(node, node.__data__, i, j); subgroups.push(subgroup = []); for (var k = -1, o = subnodes.length; ++k < o;) { - if (subnode = subnodes[k]) d3_transitionNode(subnode, k, id, transition); + if (subnode = subnodes[k]) d3_transitionNode(subnode, k, ns, id, transition); subgroup.push(subnode); } } } } - return d3_transition(subgroups, id); + return d3_transition(subgroups, ns, id); }; d3_transitionPrototype.filter = function(filter) { @@ -4751,41 +4957,35 @@ d3_transitionPrototype.filter = function(filter) { } } - return d3_transition(subgroups, this.id); + return d3_transition(subgroups, this.namespace, this.id); }; -function d3_Color() {} +d3.color = d3_color; + +function d3_color() {} -d3_Color.prototype.toString = function() { +d3_color.prototype.toString = function() { return this.rgb() + ""; }; -d3.hsl = function(h, s, l) { - return arguments.length === 1 - ? (h instanceof d3_Hsl ? d3_hsl(h.h, h.s, h.l) - : d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl)) - : d3_hsl(+h, +s, +l); -}; +d3.hsl = d3_hsl; function d3_hsl(h, s, l) { - return new d3_Hsl(h, s, l); -} - -function d3_Hsl(h, s, l) { - this.h = h; - this.s = s; - this.l = l; + return this instanceof d3_hsl ? void (this.h = +h, this.s = +s, this.l = +l) + : arguments.length < 2 ? (h instanceof d3_hsl ? new d3_hsl(h.h, h.s, h.l) + : d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl)) + : new d3_hsl(h, s, l); } -var d3_hslPrototype = d3_Hsl.prototype = new d3_Color; +var d3_hslPrototype = d3_hsl.prototype = new d3_color; d3_hslPrototype.brighter = function(k) { k = Math.pow(0.7, arguments.length ? k : 1); - return d3_hsl(this.h, this.s, this.l / k); + return new d3_hsl(this.h, this.s, this.l / k); }; d3_hslPrototype.darker = function(k) { k = Math.pow(0.7, arguments.length ? k : 1); - return d3_hsl(this.h, this.s, k * this.l); + return new d3_hsl(this.h, this.s, k * this.l); }; d3_hslPrototype.rgb = function() { @@ -4818,35 +5018,27 @@ function d3_hsl_rgb(h, s, l) { return Math.round(v(h) * 255); } - return d3_rgb(vv(h + 120), vv(h), vv(h - 120)); + return new d3_rgb(vv(h + 120), vv(h), vv(h - 120)); } -d3.hcl = function(h, c, l) { - return arguments.length === 1 - ? (h instanceof d3_Hcl ? d3_hcl(h.h, h.c, h.l) - : (h instanceof d3_Lab ? d3_lab_hcl(h.l, h.a, h.b) - : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b))) - : d3_hcl(+h, +c, +l); -}; +d3.hcl = d3_hcl; function d3_hcl(h, c, l) { - return new d3_Hcl(h, c, l); -} - -function d3_Hcl(h, c, l) { - this.h = h; - this.c = c; - this.l = l; + return this instanceof d3_hcl ? void (this.h = +h, this.c = +c, this.l = +l) + : arguments.length < 2 ? (h instanceof d3_hcl ? new d3_hcl(h.h, h.c, h.l) + : (h instanceof d3_lab ? d3_lab_hcl(h.l, h.a, h.b) + : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b))) + : new d3_hcl(h, c, l); } -var d3_hclPrototype = d3_Hcl.prototype = new d3_Color; +var d3_hclPrototype = d3_hcl.prototype = new d3_color; d3_hclPrototype.brighter = function(k) { - return d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1))); + return new d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1))); }; d3_hclPrototype.darker = function(k) { - return d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1))); + return new d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1))); }; d3_hclPrototype.rgb = function() { @@ -4856,25 +5048,17 @@ d3_hclPrototype.rgb = function() { function d3_hcl_lab(h, c, l) { if (isNaN(h)) h = 0; if (isNaN(c)) c = 0; - return d3_lab(l, Math.cos(h *= d3_radians) * c, Math.sin(h) * c); + return new d3_lab(l, Math.cos(h *= d3_radians) * c, Math.sin(h) * c); } -d3.lab = function(l, a, b) { - return arguments.length === 1 - ? (l instanceof d3_Lab ? d3_lab(l.l, l.a, l.b) - : (l instanceof d3_Hcl ? d3_hcl_lab(l.l, l.c, l.h) - : d3_rgb_lab((l = d3.rgb(l)).r, l.g, l.b))) - : d3_lab(+l, +a, +b); -}; +d3.lab = d3_lab; function d3_lab(l, a, b) { - return new d3_Lab(l, a, b); -} - -function d3_Lab(l, a, b) { - this.l = l; - this.a = a; - this.b = b; + return this instanceof d3_lab ? void (this.l = +l, this.a = +a, this.b = +b) + : arguments.length < 2 ? (l instanceof d3_lab ? new d3_lab(l.l, l.a, l.b) + : (l instanceof d3_hcl ? d3_hcl_lab(l.h, l.c, l.l) + : d3_rgb_lab((l = d3_rgb(l)).r, l.g, l.b))) + : new d3_lab(l, a, b); } // Corresponds roughly to RGB brighter/darker @@ -4885,14 +5069,14 @@ var d3_lab_X = 0.950470, d3_lab_Y = 1, d3_lab_Z = 1.088830; -var d3_labPrototype = d3_Lab.prototype = new d3_Color; +var d3_labPrototype = d3_lab.prototype = new d3_color; d3_labPrototype.brighter = function(k) { - return d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b); + return new d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b); }; d3_labPrototype.darker = function(k) { - return d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b); + return new d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b); }; d3_labPrototype.rgb = function() { @@ -4906,7 +5090,7 @@ function d3_lab_rgb(l, a, b) { x = d3_lab_xyz(x) * d3_lab_X; y = d3_lab_xyz(y) * d3_lab_Y; z = d3_lab_xyz(z) * d3_lab_Z; - return d3_rgb( + return new d3_rgb( d3_xyz_rgb( 3.2404542 * x - 1.5371385 * y - 0.4985314 * z), d3_xyz_rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z), d3_xyz_rgb( 0.0556434 * x - 0.2040259 * y + 1.0572252 * z) @@ -4915,8 +5099,8 @@ function d3_lab_rgb(l, a, b) { function d3_lab_hcl(l, a, b) { return l > 0 - ? d3_hcl(Math.atan2(b, a) * d3_degrees, Math.sqrt(a * a + b * b), l) - : d3_hcl(NaN, NaN, l); + ? new d3_hcl(Math.atan2(b, a) * d3_degrees, Math.sqrt(a * a + b * b), l) + : new d3_hcl(NaN, NaN, l); } function d3_lab_xyz(x) { @@ -4930,32 +5114,24 @@ function d3_xyz_rgb(r) { return Math.round(255 * (r <= 0.00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - 0.055)); } -d3.rgb = function(r, g, b) { - return arguments.length === 1 - ? (r instanceof d3_Rgb ? d3_rgb(r.r, r.g, r.b) +d3.rgb = d3_rgb; + +function d3_rgb(r, g, b) { + return this instanceof d3_rgb ? void (this.r = ~~r, this.g = ~~g, this.b = ~~b) + : arguments.length < 2 ? (r instanceof d3_rgb ? new d3_rgb(r.r, r.g, r.b) : d3_rgb_parse("" + r, d3_rgb, d3_hsl_rgb)) - : d3_rgb(~~r, ~~g, ~~b); -}; + : new d3_rgb(r, g, b); +} function d3_rgbNumber(value) { - return d3_rgb(value >> 16, value >> 8 & 0xff, value & 0xff); + return new d3_rgb(value >> 16, value >> 8 & 0xff, value & 0xff); } function d3_rgbString(value) { return d3_rgbNumber(value) + ""; } -function d3_rgb(r, g, b) { - return new d3_Rgb(r, g, b); -} - -function d3_Rgb(r, g, b) { - this.r = r; - this.g = g; - this.b = b; -} - -var d3_rgbPrototype = d3_Rgb.prototype = new d3_Color; +var d3_rgbPrototype = d3_rgb.prototype = new d3_color; d3_rgbPrototype.brighter = function(k) { k = Math.pow(0.7, arguments.length ? k : 1); @@ -4963,16 +5139,16 @@ d3_rgbPrototype.brighter = function(k) { g = this.g, b = this.b, i = 30; - if (!r && !g && !b) return d3_rgb(i, i, i); + if (!r && !g && !b) return new d3_rgb(i, i, i); if (r && r < i) r = i; if (g && g < i) g = i; if (b && b < i) b = i; - return d3_rgb(Math.min(255, ~~(r / k)), Math.min(255, ~~(g / k)), Math.min(255, ~~(b / k))); + return new d3_rgb(Math.min(255, r / k), Math.min(255, g / k), Math.min(255, b / k)); }; d3_rgbPrototype.darker = function(k) { k = Math.pow(0.7, arguments.length ? k : 1); - return d3_rgb(~~(k * this.r), ~~(k * this.g), ~~(k * this.b)); + return new d3_rgb(k * this.r, k * this.g, k * this.b); }; d3_rgbPrototype.hsl = function() { @@ -4995,7 +5171,7 @@ function d3_rgb_parse(format, rgb, hsl) { b = 0, // blue channel; int in [0, 255] m1, // CSS color specification match m2, // CSS color specification type (e.g., rgb) - name; + color; /* Handle hsl, rgb. */ m1 = /([a-z]+)\((.*)\)/i.exec(format); @@ -5020,22 +5196,21 @@ function d3_rgb_parse(format, rgb, hsl) { } /* Named colors. */ - if (name = d3_rgb_names.get(format)) return rgb(name.r, name.g, name.b); + if (color = d3_rgb_names.get(format.toLowerCase())) { + return rgb(color.r, color.g, color.b); + } /* Hexadecimal colors: #rgb and #rrggbb. */ - if (format != null && format.charAt(0) === "#") { + if (format != null && format.charAt(0) === "#" && !isNaN(color = parseInt(format.slice(1), 16))) { if (format.length === 4) { - r = format.charAt(1); r += r; - g = format.charAt(2); g += g; - b = format.charAt(3); b += b; + r = (color & 0xf00) >> 4; r = (r >> 4) | r; + g = (color & 0xf0); g = (g >> 4) | g; + b = (color & 0xf); b = (b << 4) | b; } else if (format.length === 7) { - r = format.substring(1, 3); - g = format.substring(3, 5); - b = format.substring(5, 7); + r = (color & 0xff0000) >> 16; + g = (color & 0xff00) >> 8; + b = (color & 0xff); } - r = parseInt(r, 16); - g = parseInt(g, 16); - b = parseInt(b, 16); } return rgb(r, g, b); @@ -5058,7 +5233,7 @@ function d3_rgb_hsl(r, g, b) { h = NaN; s = l > 0 && l < 1 ? 0 : h; } - return d3_hsl(h, s, l); + return new d3_hsl(h, s, l); } function d3_rgb_lab(r, g, b) { @@ -5200,6 +5375,7 @@ var d3_rgb_names = d3.map({ plum: 0xdda0dd, powderblue: 0xb0e0e6, purple: 0x800080, + rebeccapurple: 0x663399, red: 0xff0000, rosybrown: 0xbc8f8f, royalblue: 0x4169e1, @@ -5297,96 +5473,62 @@ function d3_interpolateArray(a, b) { d3.interpolateNumber = d3_interpolateNumber; function d3_interpolateNumber(a, b) { - b -= a = +a; - return function(t) { return a + b * t; }; + a = +a, b = +b; + return function(t) { return a * (1 - t) + b * t; }; } d3.interpolateString = d3_interpolateString; function d3_interpolateString(a, b) { - var m, // current match - i, // current index - j, // current index (for coalescing) - s0 = 0, // start index of current string prefix - s1 = 0, // end index of current string prefix + var bi = d3_interpolate_numberA.lastIndex = d3_interpolate_numberB.lastIndex = 0, // scan index for next number in b + am, // current match in a + bm, // current match in b + bs, // string preceding current number in b, if any + i = -1, // index in s s = [], // string constants and placeholders - q = [], // number interpolators - n, // q.length - o; + q = []; // number interpolators // Coerce inputs to strings. a = a + "", b = b + ""; - // Reset our regular expression! - d3_interpolate_number.lastIndex = 0; - - // Find all numbers in b. - for (i = 0; m = d3_interpolate_number.exec(b); ++i) { - if (m.index) s.push(b.substring(s0, s1 = m.index)); - q.push({i: s.length, x: m[0]}); - s.push(null); - s0 = d3_interpolate_number.lastIndex; - } - if (s0 < b.length) s.push(b.substring(s0)); - - // Find all numbers in a. - for (i = 0, n = q.length; (m = d3_interpolate_number.exec(a)) && i < n; ++i) { - o = q[i]; - if (o.x == m[0]) { // The numbers match, so coalesce. - if (o.i) { - if (s[o.i + 1] == null) { // This match is followed by another number. - s[o.i - 1] += o.x; - s.splice(o.i, 1); - for (j = i + 1; j < n; ++j) q[j].i--; - } else { // This match is followed by a string, so coalesce twice. - s[o.i - 1] += o.x + s[o.i + 1]; - s.splice(o.i, 2); - for (j = i + 1; j < n; ++j) q[j].i -= 2; - } - } else { - if (s[o.i + 1] == null) { // This match is followed by another number. - s[o.i] = o.x; - } else { // This match is followed by a string, so coalesce twice. - s[o.i] = o.x + s[o.i + 1]; - s.splice(o.i + 1, 1); - for (j = i + 1; j < n; ++j) q[j].i--; - } - } - q.splice(i, 1); - n--; - i--; - } else { - o.x = d3_interpolateNumber(parseFloat(m[0]), parseFloat(o.x)); + // Interpolate pairs of numbers in a & b. + while ((am = d3_interpolate_numberA.exec(a)) + && (bm = d3_interpolate_numberB.exec(b))) { + if ((bs = bm.index) > bi) { // a string precedes the next number in b + bs = b.slice(bi, bs); + if (s[i]) s[i] += bs; // coalesce with previous string + else s[++i] = bs; } - } - - // Remove any numbers in b not found in a. - while (i < n) { - o = q.pop(); - if (s[o.i + 1] == null) { // This match is followed by another number. - s[o.i] = o.x; - } else { // This match is followed by a string, so coalesce twice. - s[o.i] = o.x + s[o.i + 1]; - s.splice(o.i + 1, 1); + if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match + if (s[i]) s[i] += bm; // coalesce with previous string + else s[++i] = bm; + } else { // interpolate non-matching numbers + s[++i] = null; + q.push({i: i, x: d3_interpolateNumber(am, bm)}); } - n--; + bi = d3_interpolate_numberB.lastIndex; } - // Special optimization for only a single match. - if (s.length === 1) { - return s[0] == null - ? (o = q[0].x, function(t) { return o(t) + ""; }) - : function() { return b; }; + // Add remains of b. + if (bi < b.length) { + bs = b.slice(bi); + if (s[i]) s[i] += bs; // coalesce with previous string + else s[++i] = bs; } + // Special optimization for only a single match. // Otherwise, interpolate each of the numbers and rejoin the string. - return function(t) { - for (i = 0; i < n; ++i) s[(o = q[i]).i] = o.x(t); - return s.join(""); - }; + return s.length < 2 + ? (q[0] ? (b = q[0].x, function(t) { return b(t) + ""; }) + : function() { return b; }) + : (b = q.length, function(t) { + for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t); + return s.join(""); + }); } -var d3_interpolate_number = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g; +var d3_interpolate_numberA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, + d3_interpolate_numberB = new RegExp(d3_interpolate_numberA.source, "g"); d3.interpolate = d3_interpolate; @@ -5400,8 +5542,9 @@ d3.interpolators = [ function(a, b) { var t = typeof b; return (t === "string" ? (d3_rgb_names.has(b) || /^(#|rgb\(|hsl\()/.test(b) ? d3_interpolateRgb : d3_interpolateString) - : b instanceof d3_Color ? d3_interpolateRgb - : t === "object" ? (Array.isArray(b) ? d3_interpolateArray : d3_interpolateObject) + : b instanceof d3_color ? d3_interpolateRgb + : Array.isArray(b) ? d3_interpolateArray + : t === "object" && isNaN(b) ? d3_interpolateObject : d3_interpolateNumber)(a, b); } ]; @@ -5523,18 +5666,18 @@ function d3_interpolateTransform(a, b) { } d3_transitionPrototype.tween = function(name, tween) { - var id = this.id; - if (arguments.length < 2) return this.node().__transition__[id].tween.get(name); + var id = this.id, ns = this.namespace; + if (arguments.length < 2) return this.node()[ns][id].tween.get(name); return d3_selection_each(this, tween == null - ? function(node) { node.__transition__[id].tween.remove(name); } - : function(node) { node.__transition__[id].tween.set(name, tween); }); + ? function(node) { node[ns][id].tween.remove(name); } + : function(node) { node[ns][id].tween.set(name, tween); }); }; function d3_transition_tween(groups, name, value, tween) { - var id = groups.id; + var id = groups.id, ns = groups.namespace; return d3_selection_each(groups, typeof value === "function" - ? function(node, i, j) { node.__transition__[id].tween.set(name, tween(value.call(node, node.__data__, i, j))); } - : (value = tween(value), function(node) { node.__transition__[id].tween.set(name, value); })); + ? function(node, i, j) { node[ns][id].tween.set(name, tween(value.call(node, node.__data__, i, j))); } + : (value = tween(value), function(node) { node[ns][id].tween.set(name, value); })); } d3_transitionPrototype.attr = function(nameNS, value) { @@ -5620,7 +5763,7 @@ d3_transitionPrototype.style = function(name, value, priority) { // Otherwise, a name, value and priority are specified, and handled as below. function styleString(b) { return b == null ? styleNull : (b += "", function() { - var a = d3_window.getComputedStyle(this, null).getPropertyValue(name), i; + var a = d3_window(this).getComputedStyle(this, null).getPropertyValue(name), i; return a !== b && (i = d3_interpolate(a, b), function(t) { this.style.setProperty(name, i(t), priority); }); }); } @@ -5632,7 +5775,7 @@ d3_transitionPrototype.styleTween = function(name, tween, priority) { if (arguments.length < 3) priority = ""; function styleTween(d, i) { - var f = tween.call(this, d, i, d3_window.getComputedStyle(this, null).getPropertyValue(name)); + var f = tween.call(this, d, i, d3_window(this).getComputedStyle(this, null).getPropertyValue(name)); return f && function(t) { this.style.setProperty(name, f(t), priority); }; } @@ -5649,49 +5792,162 @@ function d3_transition_text(b) { } d3_transitionPrototype.remove = function() { + var ns = this.namespace; return this.each("end.transition", function() { var p; - if (this.__transition__.count < 2 && (p = this.parentNode)) p.removeChild(this); + if (this[ns].count < 2 && (p = this.parentNode)) p.removeChild(this); }); }; +var d3_ease_default = function() { return d3_identity; }; + +var d3_ease = d3.map({ + linear: d3_ease_default, + poly: d3_ease_poly, + quad: function() { return d3_ease_quad; }, + cubic: function() { return d3_ease_cubic; }, + sin: function() { return d3_ease_sin; }, + exp: function() { return d3_ease_exp; }, + circle: function() { return d3_ease_circle; }, + elastic: d3_ease_elastic, + back: d3_ease_back, + bounce: function() { return d3_ease_bounce; } +}); + +var d3_ease_mode = d3.map({ + "in": d3_identity, + "out": d3_ease_reverse, + "in-out": d3_ease_reflect, + "out-in": function(f) { return d3_ease_reflect(d3_ease_reverse(f)); } +}); + +d3.ease = function(name) { + var i = name.indexOf("-"), + t = i >= 0 ? name.slice(0, i) : name, + m = i >= 0 ? name.slice(i + 1) : "in"; + t = d3_ease.get(t) || d3_ease_default; + m = d3_ease_mode.get(m) || d3_identity; + return d3_ease_clamp(m(t.apply(null, d3_arraySlice.call(arguments, 1)))); +}; + +function d3_ease_clamp(f) { + return function(t) { + return t <= 0 ? 0 : t >= 1 ? 1 : f(t); + }; +} + +function d3_ease_reverse(f) { + return function(t) { + return 1 - f(1 - t); + }; +} + +function d3_ease_reflect(f) { + return function(t) { + return .5 * (t < .5 ? f(2 * t) : (2 - f(2 - 2 * t))); + }; +} + +function d3_ease_quad(t) { + return t * t; +} + +function d3_ease_cubic(t) { + return t * t * t; +} + +// Optimized clamp(reflect(poly(3))). +function d3_ease_cubicInOut(t) { + if (t <= 0) return 0; + if (t >= 1) return 1; + var t2 = t * t, t3 = t2 * t; + return 4 * (t < .5 ? t3 : 3 * (t - t2) + t3 - .75); +} + +function d3_ease_poly(e) { + return function(t) { + return Math.pow(t, e); + }; +} + +function d3_ease_sin(t) { + return 1 - Math.cos(t * halfπ); +} + +function d3_ease_exp(t) { + return Math.pow(2, 10 * (t - 1)); +} + +function d3_ease_circle(t) { + return 1 - Math.sqrt(1 - t * t); +} + +function d3_ease_elastic(a, p) { + var s; + if (arguments.length < 2) p = 0.45; + if (arguments.length) s = p / τ * Math.asin(1 / a); + else a = 1, s = p / 4; + return function(t) { + return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * τ / p); + }; +} + +function d3_ease_back(s) { + if (!s) s = 1.70158; + return function(t) { + return t * t * ((s + 1) * t - s); + }; +} + +function d3_ease_bounce(t) { + return t < 1 / 2.75 ? 7.5625 * t * t + : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 + : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 + : 7.5625 * (t -= 2.625 / 2.75) * t + .984375; +} + d3_transitionPrototype.ease = function(value) { - var id = this.id; - if (arguments.length < 1) return this.node().__transition__[id].ease; + var id = this.id, ns = this.namespace; + if (arguments.length < 1) return this.node()[ns][id].ease; if (typeof value !== "function") value = d3.ease.apply(d3, arguments); - return d3_selection_each(this, function(node) { node.__transition__[id].ease = value; }); + return d3_selection_each(this, function(node) { node[ns][id].ease = value; }); }; d3_transitionPrototype.delay = function(value) { - var id = this.id; + var id = this.id, ns = this.namespace; + if (arguments.length < 1) return this.node()[ns][id].delay; return d3_selection_each(this, typeof value === "function" - ? function(node, i, j) { node.__transition__[id].delay = +value.call(node, node.__data__, i, j); } - : (value = +value, function(node) { node.__transition__[id].delay = value; })); + ? function(node, i, j) { node[ns][id].delay = +value.call(node, node.__data__, i, j); } + : (value = +value, function(node) { node[ns][id].delay = value; })); }; d3_transitionPrototype.duration = function(value) { - var id = this.id; + var id = this.id, ns = this.namespace; + if (arguments.length < 1) return this.node()[ns][id].duration; return d3_selection_each(this, typeof value === "function" - ? function(node, i, j) { node.__transition__[id].duration = Math.max(1, value.call(node, node.__data__, i, j)); } - : (value = Math.max(1, value), function(node) { node.__transition__[id].duration = value; })); + ? function(node, i, j) { node[ns][id].duration = Math.max(1, value.call(node, node.__data__, i, j)); } + : (value = Math.max(1, value), function(node) { node[ns][id].duration = value; })); }; d3_transitionPrototype.each = function(type, listener) { - var id = this.id; + var id = this.id, ns = this.namespace; if (arguments.length < 2) { var inherit = d3_transitionInherit, inheritId = d3_transitionInheritId; - d3_transitionInheritId = id; - d3_selection_each(this, function(node, i, j) { - d3_transitionInherit = node.__transition__[id]; - type.call(node, node.__data__, i, j); - }); - d3_transitionInherit = inherit; - d3_transitionInheritId = inheritId; + try { + d3_transitionInheritId = id; + d3_selection_each(this, function(node, i, j) { + d3_transitionInherit = node[ns][id]; + type.call(node, node.__data__, i, j); + }); + } finally { + d3_transitionInherit = inherit; + d3_transitionInheritId = inheritId; + } } else { d3_selection_each(this, function(node) { - var transition = node.__transition__[id]; - (transition.event || (transition.event = d3.dispatch("start", "end"))).on(type, listener); + var transition = node[ns][id]; + (transition.event || (transition.event = d3.dispatch("start", "end", "interrupt"))).on(type, listener); }); } return this; @@ -5700,6 +5956,7 @@ d3_transitionPrototype.each = function(type, listener) { d3_transitionPrototype.transition = function() { var id0 = this.id, id1 = ++d3_transitionId, + ns = this.namespace, subgroups = [], subgroup, group, @@ -5710,19 +5967,22 @@ d3_transitionPrototype.transition = function() { subgroups.push(subgroup = []); for (var group = this[j], i = 0, n = group.length; i < n; i++) { if (node = group[i]) { - transition = Object.create(node.__transition__[id0]); - transition.delay += transition.duration; - d3_transitionNode(node, i, id1, transition); + transition = node[ns][id0]; + d3_transitionNode(node, i, ns, id1, {time: transition.time, ease: transition.ease, delay: transition.delay + transition.duration, duration: transition.duration}); } subgroup.push(node); } } - return d3_transition(subgroups, id1); + return d3_transition(subgroups, ns, id1); }; -function d3_transitionNode(node, i, id, inherit) { - var lock = node.__transition__ || (node.__transition__ = {active: 0, count: 0}), +function d3_transitionNamespace(name) { + return name == null ? "__transition__" : "__transition_" + name + "__"; +} + +function d3_transitionNode(node, i, ns, id, inherit) { + var lock = node[ns] || (node[ns] = {active: 0, count: 0}), transition = lock[id]; if (!transition) { @@ -5731,18 +5991,20 @@ function d3_transitionNode(node, i, id, inherit) { transition = lock[id] = { tween: new d3_Map, time: time, - ease: inherit.ease, delay: inherit.delay, - duration: inherit.duration + duration: inherit.duration, + ease: inherit.ease, + index: i }; + inherit = null; // allow gc + ++lock.count; d3.timer(function(elapsed) { - var d = node.__data__, - ease = transition.ease, - delay = transition.delay, - duration = transition.duration, + var delay = transition.delay, + duration, + ease, timer = d3_timer_active, tweened = []; @@ -5752,15 +6014,28 @@ function d3_transitionNode(node, i, id, inherit) { function start(elapsed) { if (lock.active > id) return stop(); + + var active = lock[lock.active]; + if (active) { + --lock.count; + delete lock[lock.active]; + active.event && active.event.interrupt.call(node, node.__data__, active.index); + } + lock.active = id; - transition.event && transition.event.start.call(node, d, i); + + transition.event && transition.event.start.call(node, node.__data__, i); transition.tween.forEach(function(key, value) { - if (value = value.call(node, d, i)) { + if (value = value.call(node, node.__data__, i)) { tweened.push(value); } }); + // Deferred capture to allow tweens to initialize ease & duration. + ease = transition.ease; + duration = transition.duration; + d3.timer(function() { // defer to end of current frame timer.c = tick(elapsed || 1) ? d3_true : tick; return 1; @@ -5768,7 +6043,7 @@ function d3_transitionNode(node, i, id, inherit) { } function tick(elapsed) { - if (lock.active !== id) return stop(); + if (lock.active !== id) return 1; var t = elapsed / duration, e = ease(t), @@ -5779,14 +6054,14 @@ function d3_transitionNode(node, i, id, inherit) { } if (t >= 1) { - transition.event && transition.event.end.call(node, d, i); + transition.event && transition.event.end.call(node, node.__data__, i); return stop(); } } function stop() { if (--lock.count) delete lock[id]; - else delete node.__transition__; + else delete node[ns]; return 1; } }, 0, time); @@ -5810,7 +6085,7 @@ function d3_xhr(url, mimeType, response, callback) { responseType = null; // If IE does not support CORS, use XDomainRequest. - if (d3_window.XDomainRequest + if (this.XDomainRequest && !("withCredentials" in request) && /^(http(s)?:)?\/\//.test(url)) request = new XDomainRequest; @@ -5820,7 +6095,7 @@ function d3_xhr(url, mimeType, response, callback) { function respond() { var status = request.status, result; - if (!status && request.responseText || status >= 200 && status < 300 || status === 304) { + if (!status && d3_xhrHasResponse(request) || status >= 200 && status < 300 || status === 304) { try { result = response.call(xhr, request); } catch (e) { @@ -5907,6 +6182,13 @@ function d3_xhr_fixCallback(callback) { : callback; } +function d3_xhrHasResponse(request) { + var type = request.responseType; + return type && type !== "text" + ? request.response // null on error + : request.responseText; // "" on error +} + d3.text = d3_xhrType(function(request) { return request.responseText; }); @@ -5932,8 +6214,10 @@ function d3_html(request) { d3.xml = d3_xhrType(function(request) { return request.responseXML; }); - return d3; -})(); + if (typeof define === "function" && define.amd) define(d3); + else if (typeof module === "object" && module.exports) module.exports = d3; + this.d3 = d3; +}(); d3.combobox = function() { var event = d3.dispatch('accept'), data = [], @@ -5980,8 +6264,12 @@ d3.combobox = function() { // on mousedown d3.event.stopPropagation(); d3.event.preventDefault(); - input.node().focus(); - fetch('', render); + if (!shown) { + input.node().focus(); + fetch('', render); + } else { + hide(); + } }); }); @@ -6119,7 +6407,7 @@ d3.combobox = function() { for (var i = 0; i < suggestions.length; i++) { if (suggestions[i].value.toLowerCase().indexOf(v.toLowerCase()) === 0) { - var completion = v + suggestions[i].value.substr(v.length); + var completion = suggestions[i].value; idx = i; input.property('value', completion); input.node().setSelectionRange(v.length, completion.length); @@ -6203,7 +6491,27 @@ d3.combobox = function() { return d3.rebind(combobox, event, 'on'); }; -d3.geo.tile = function() { + +d3.combobox.off = function(input) { + data = null; + fetcher = null; + + input + .on('focus.typeahead', null) + .on('blur.typeahead', null) + .on('keydown.typeahead', null) + .on('keyup.typeahead', null) + .on('input.typeahead', null) + .each(function() { + d3.select(this.parentNode).selectAll('.combobox-caret') + .filter(function(d) { return d === input.node(); }) + .on('mousedown', null); + }); + + d3.select(document.body) + .on('scroll.combobox', null); +}; +d3.geo.tile = function() { var size = [960, 500], scale = 256, scaleExtent = [0, 20], @@ -6433,14 +6741,20 @@ d3.keybinding = function(namespace) { // Up Arrow Key, or ↓ '↓': 40, down: 40, 'arrow-down': 40, // odities, printing characters that come out wrong: + // Firefox Equals + 'ffequals': 61, // Num-Multiply, or * '*': 106, star: 106, asterisk: 106, multiply: 106, // Num-Plus or + '+': 107, 'plus': 107, // Num-Subtract, or - '-': 109, subtract: 109, + // Firefox Minus + 'ffplus': 171, + // Firefox Minus + 'ffminus': 173, // Semicolon - ';': 186, semicolon:186, + ';': 186, semicolon: 186, // = or equals '=': 187, 'equals': 187, // Comma, or , @@ -6499,12 +6813,27 @@ d3.selection.prototype.one = function (type, listener, capture) { return this; }; d3.selection.prototype.dimensions = function (dimensions) { + var refresh = (function(node) { + var cr = node.getBoundingClientRect(); + prop = [cr.width, cr.height]; + this.property('__dimensions__', prop); + return prop; + }).bind(this); + + var node = this.node(); + if (!arguments.length) { - var node = this.node(); - return [node.offsetWidth, - node.offsetHeight]; + if (!node) return [0,0]; + return this.property('__dimensions__') || refresh(node); + } + if (dimensions === null) { + if (!node) return [0,0]; + return refresh(node); } - return this.attr({width: dimensions[0], height: dimensions[1]}); + + return this + .property('__dimensions__', [dimensions[0], dimensions[1]]) + .attr({width: dimensions[0], height: dimensions[1]}); }; d3.selection.prototype.trigger = function (type) { this.each(function() { @@ -6513,122 +6842,6 @@ d3.selection.prototype.trigger = function (type) { this.dispatchEvent(evt); }); }; -d3.typeahead = function() { - var event = d3.dispatch('accept'), - autohighlight = false, - data; - - var typeahead = function(selection) { - var container, - hidden, - idx = autohighlight ? 0 : -1; - - function setup() { - var rect = selection.node().getBoundingClientRect(); - container = d3.select(document.body) - .append('div').attr('class', 'typeahead') - .style({ - position: 'absolute', - left: rect.left + 'px', - top: rect.bottom + 'px' - }); - selection - .on('keyup.typeahead', key); - hidden = false; - } - - function hide() { - container.remove(); - idx = autohighlight ? 0 : -1; - hidden = true; - } - - function slowHide() { - if (autohighlight) { - if (container.select('a.selected').node()) { - select(container.select('a.selected').datum()); - event.accept(); - } - } - window.setTimeout(hide, 150); - } - - selection - .on('focus.typeahead', setup) - .on('blur.typeahead', slowHide); - - function key() { - var len = container.selectAll('a').data().length; - if (d3.event.keyCode === 40) { - idx = Math.min(idx + 1, len - 1); - return highlight(); - } else if (d3.event.keyCode === 38) { - idx = Math.max(idx - 1, 0); - return highlight(); - } else if (d3.event.keyCode === 13) { - if (container.select('a.selected').node()) { - select(container.select('a.selected').datum()); - } - event.accept(); - hide(); - } else { - update(); - } - } - - function highlight() { - container - .selectAll('a') - .classed('selected', function(d, i) { return i == idx; }); - } - - function update() { - if (hidden) setup(); - - data(selection, function(data) { - container.style('display', function() { - return data.length ? 'block' : 'none'; - }); - - var options = container - .selectAll('a') - .data(data, function(d) { return d.value; }); - - options.enter() - .append('a') - .text(function(d) { return d.value; }) - .attr('title', function(d) { return d.title; }) - .on('click', select); - - options.exit().remove(); - - options - .classed('selected', function(d, i) { return i == idx; }); - }); - } - - function select(d) { - selection - .property('value', d.value) - .trigger('change'); - } - - }; - - typeahead.data = function(_) { - if (!arguments.length) return data; - data = _; - return typeahead; - }; - - typeahead.autohighlight = function(_) { - if (!arguments.length) return autohighlight; - autohighlight = _; - return typeahead; - }; - - return d3.rebind(typeahead, event, 'on'); -}; // Tooltips and svg mask used to highlight certain features d3.curtain = function() { @@ -6786,6 +6999,437 @@ d3.selection.prototype.value = function(value) { if (!arguments.length) return this.property('value'); return this.each(d3_selection_value(value)); }; +// Copyright (c) 2006, 2008 Tony Garnock-Jones +// Copyright (c) 2006, 2008 LShift Ltd. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation files +// (the "Software"), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, +// subject to the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +// BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +// source: https://bitbucket.org/lshift/synchrotron/src + +Diff3 = (function() { + 'use strict'; + + var diff3 = { + longest_common_subsequence: function(file1, file2) { + /* Text diff algorithm following Hunt and McIlroy 1976. + * J. W. Hunt and M. D. McIlroy, An algorithm for differential file + * comparison, Bell Telephone Laboratories CSTR #41 (1976) + * http://www.cs.dartmouth.edu/~doug/ + * + * Expects two arrays of strings. + */ + var equivalenceClasses; + var file2indices; + var newCandidate; + var candidates; + var line; + var c, i, j, jX, r, s; + + equivalenceClasses = {}; + for (j = 0; j < file2.length; j++) { + line = file2[j]; + if (equivalenceClasses[line]) { + equivalenceClasses[line].push(j); + } else { + equivalenceClasses[line] = [j]; + } + } + + candidates = [{file1index: -1, + file2index: -1, + chain: null}]; + + for (i = 0; i < file1.length; i++) { + line = file1[i]; + file2indices = equivalenceClasses[line] || []; + + r = 0; + c = candidates[0]; + + for (jX = 0; jX < file2indices.length; jX++) { + j = file2indices[jX]; + + for (s = 0; s < candidates.length; s++) { + if ((candidates[s].file2index < j) && + ((s == candidates.length - 1) || + (candidates[s + 1].file2index > j))) + break; + } + + if (s < candidates.length) { + newCandidate = {file1index: i, + file2index: j, + chain: candidates[s]}; + if (r == candidates.length) { + candidates.push(c); + } else { + candidates[r] = c; + } + r = s + 1; + c = newCandidate; + if (r == candidates.length) { + break; // no point in examining further (j)s + } + } + } + + candidates[r] = c; + } + + // At this point, we know the LCS: it's in the reverse of the + // linked-list through .chain of + // candidates[candidates.length - 1]. + + return candidates[candidates.length - 1]; + }, + + diff_comm: function(file1, file2) { + // We apply the LCS to build a "comm"-style picture of the + // differences between file1 and file2. + + var result = []; + var tail1 = file1.length; + var tail2 = file2.length; + var common = {common: []}; + + function processCommon() { + if (common.common.length) { + common.common.reverse(); + result.push(common); + common = {common: []}; + } + } + + for (var candidate = Diff3.longest_common_subsequence(file1, file2); + candidate !== null; + candidate = candidate.chain) + { + var different = {file1: [], file2: []}; + + while (--tail1 > candidate.file1index) { + different.file1.push(file1[tail1]); + } + + while (--tail2 > candidate.file2index) { + different.file2.push(file2[tail2]); + } + + if (different.file1.length || different.file2.length) { + processCommon(); + different.file1.reverse(); + different.file2.reverse(); + result.push(different); + } + + if (tail1 >= 0) { + common.common.push(file1[tail1]); + } + } + + processCommon(); + + result.reverse(); + return result; + }, + + diff_patch: function(file1, file2) { + // We apply the LCD to build a JSON representation of a + // diff(1)-style patch. + + var result = []; + var tail1 = file1.length; + var tail2 = file2.length; + + function chunkDescription(file, offset, length) { + var chunk = []; + for (var i = 0; i < length; i++) { + chunk.push(file[offset + i]); + } + return {offset: offset, + length: length, + chunk: chunk}; + } + + for (var candidate = Diff3.longest_common_subsequence(file1, file2); + candidate !== null; + candidate = candidate.chain) + { + var mismatchLength1 = tail1 - candidate.file1index - 1; + var mismatchLength2 = tail2 - candidate.file2index - 1; + tail1 = candidate.file1index; + tail2 = candidate.file2index; + + if (mismatchLength1 || mismatchLength2) { + result.push({file1: chunkDescription(file1, + candidate.file1index + 1, + mismatchLength1), + file2: chunkDescription(file2, + candidate.file2index + 1, + mismatchLength2)}); + } + } + + result.reverse(); + return result; + }, + + strip_patch: function(patch) { + // Takes the output of Diff3.diff_patch(), and removes + // information from it. It can still be used by patch(), + // below, but can no longer be inverted. + var newpatch = []; + for (var i = 0; i < patch.length; i++) { + var chunk = patch[i]; + newpatch.push({file1: {offset: chunk.file1.offset, + length: chunk.file1.length}, + file2: {chunk: chunk.file2.chunk}}); + } + return newpatch; + }, + + invert_patch: function(patch) { + // Takes the output of Diff3.diff_patch(), and inverts the + // sense of it, so that it can be applied to file2 to give + // file1 rather than the other way around. + + for (var i = 0; i < patch.length; i++) { + var chunk = patch[i]; + var tmp = chunk.file1; + chunk.file1 = chunk.file2; + chunk.file2 = tmp; + } + }, + + patch: function (file, patch) { + // Applies a patch to a file. + // + // Given file1 and file2, Diff3.patch(file1, + // Diff3.diff_patch(file1, file2)) should give file2. + + var result = []; + var commonOffset = 0; + + function copyCommon(targetOffset) { + while (commonOffset < targetOffset) { + result.push(file[commonOffset]); + commonOffset++; + } + } + + for (var chunkIndex = 0; chunkIndex < patch.length; chunkIndex++) { + var chunk = patch[chunkIndex]; + copyCommon(chunk.file1.offset); + for (var lineIndex = 0; lineIndex < chunk.file2.chunk.length; lineIndex++) { + result.push(chunk.file2.chunk[lineIndex]); + } + commonOffset += chunk.file1.length; + } + + copyCommon(file.length); + return result; + }, + + diff_indices: function(file1, file2) { + // We apply the LCS to give a simple representation of the + // offsets and lengths of mismatched chunks in the input + // files. This is used by diff3_merge_indices below. + + var result = []; + var tail1 = file1.length; + var tail2 = file2.length; + + for (var candidate = Diff3.longest_common_subsequence(file1, file2); + candidate !== null; + candidate = candidate.chain) + { + var mismatchLength1 = tail1 - candidate.file1index - 1; + var mismatchLength2 = tail2 - candidate.file2index - 1; + tail1 = candidate.file1index; + tail2 = candidate.file2index; + + if (mismatchLength1 || mismatchLength2) { + result.push({file1: [tail1 + 1, mismatchLength1], + file2: [tail2 + 1, mismatchLength2]}); + } + } + + result.reverse(); + return result; + }, + + diff3_merge_indices: function (a, o, b) { + // Given three files, A, O, and B, where both A and B are + // independently derived from O, returns a fairly complicated + // internal representation of merge decisions it's taken. The + // interested reader may wish to consult + // + // Sanjeev Khanna, Keshav Kunal, and Benjamin C. Pierce. "A + // Formal Investigation of Diff3." In Arvind and Prasad, + // editors, Foundations of Software Technology and Theoretical + // Computer Science (FSTTCS), December 2007. + // + // (http://www.cis.upenn.edu/~bcpierce/papers/diff3-short.pdf) + var i; + + var m1 = Diff3.diff_indices(o, a); + var m2 = Diff3.diff_indices(o, b); + + var hunks = []; + function addHunk(h, side) { + hunks.push([h.file1[0], side, h.file1[1], h.file2[0], h.file2[1]]); + } + for (i = 0; i < m1.length; i++) { addHunk(m1[i], 0); } + for (i = 0; i < m2.length; i++) { addHunk(m2[i], 2); } + hunks.sort(); + + var result = []; + var commonOffset = 0; + function copyCommon(targetOffset) { + if (targetOffset > commonOffset) { + result.push([1, commonOffset, targetOffset - commonOffset]); + commonOffset = targetOffset; + } + } + + for (var hunkIndex = 0; hunkIndex < hunks.length; hunkIndex++) { + var firstHunkIndex = hunkIndex; + var hunk = hunks[hunkIndex]; + var regionLhs = hunk[0]; + var regionRhs = regionLhs + hunk[2]; + while (hunkIndex < hunks.length - 1) { + var maybeOverlapping = hunks[hunkIndex + 1]; + var maybeLhs = maybeOverlapping[0]; + if (maybeLhs > regionRhs) break; + regionRhs = maybeLhs + maybeOverlapping[2]; + hunkIndex++; + } + + copyCommon(regionLhs); + if (firstHunkIndex == hunkIndex) { + // The "overlap" was only one hunk long, meaning that + // there's no conflict here. Either a and o were the + // same, or b and o were the same. + if (hunk[4] > 0) { + result.push([hunk[1], hunk[3], hunk[4]]); + } + } else { + // A proper conflict. Determine the extents of the + // regions involved from a, o and b. Effectively merge + // all the hunks on the left into one giant hunk, and + // do the same for the right; then, correct for skew + // in the regions of o that each side changed, and + // report appropriate spans for the three sides. + var regions = { + 0: [a.length, -1, o.length, -1], + 2: [b.length, -1, o.length, -1] + }; + for (i = firstHunkIndex; i <= hunkIndex; i++) { + hunk = hunks[i]; + var side = hunk[1]; + var r = regions[side]; + var oLhs = hunk[0]; + var oRhs = oLhs + hunk[2]; + var abLhs = hunk[3]; + var abRhs = abLhs + hunk[4]; + r[0] = Math.min(abLhs, r[0]); + r[1] = Math.max(abRhs, r[1]); + r[2] = Math.min(oLhs, r[2]); + r[3] = Math.max(oRhs, r[3]); + } + var aLhs = regions[0][0] + (regionLhs - regions[0][2]); + var aRhs = regions[0][1] + (regionRhs - regions[0][3]); + var bLhs = regions[2][0] + (regionLhs - regions[2][2]); + var bRhs = regions[2][1] + (regionRhs - regions[2][3]); + result.push([-1, + aLhs, aRhs - aLhs, + regionLhs, regionRhs - regionLhs, + bLhs, bRhs - bLhs]); + } + commonOffset = regionRhs; + } + + copyCommon(o.length); + return result; + }, + + diff3_merge: function (a, o, b, excludeFalseConflicts) { + // Applies the output of Diff3.diff3_merge_indices to actually + // construct the merged file; the returned result alternates + // between "ok" and "conflict" blocks. + + var result = []; + var files = [a, o, b]; + var indices = Diff3.diff3_merge_indices(a, o, b); + + var okLines = []; + function flushOk() { + if (okLines.length) { + result.push({ok: okLines}); + } + okLines = []; + } + function pushOk(xs) { + for (var j = 0; j < xs.length; j++) { + okLines.push(xs[j]); + } + } + + function isTrueConflict(rec) { + if (rec[2] != rec[6]) return true; + var aoff = rec[1]; + var boff = rec[5]; + for (var j = 0; j < rec[2]; j++) { + if (a[j + aoff] != b[j + boff]) return true; + } + return false; + } + + for (var i = 0; i < indices.length; i++) { + var x = indices[i]; + var side = x[0]; + if (side == -1) { + if (excludeFalseConflicts && !isTrueConflict(x)) { + pushOk(files[0].slice(x[1], x[1] + x[2])); + } else { + flushOk(); + result.push({conflict: {a: a.slice(x[1], x[1] + x[2]), + aIndex: x[1], + o: o.slice(x[3], x[3] + x[4]), + oIndex: x[3], + b: b.slice(x[5], x[5] + x[6]), + bIndex: x[5]}}); + } + } else { + pushOk(files[side].slice(x[1], x[1] + x[2])); + } + } + + flushOk(); + return result; + } + }; + return diff3; +})(); + +if (typeof module !== 'undefined') module.exports = Diff3; var JXON = new (function () { var sValueProp = "keyValue", sAttributesProp = "keyAttributes", sAttrPref = "@", /* you can customize these values */ @@ -6929,145 +7573,191 @@ var JXON = new (function () { // we got our Document instance! try: alert((new XMLSerializer()).serializeToString(newDoc)); /** * @license - * Lo-Dash 2.3.0 (Custom Build) - * Build: `lodash include="any,assign,bind,clone,compact,contains,debounce,difference,each,every,extend,filter,find,first,forEach,groupBy,indexOf,intersection,isEmpty,isEqual,isFunction,keys,last,map,omit,pairs,pluck,reject,some,throttle,union,uniq,unique,values,without,flatten,value,chain,cloneDeep,merge" exports="global,node"` - * Copyright 2012-2013 The Dojo Foundation - * Based on Underscore.js 1.5.2 - * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license + * lodash 3.9.3 (Custom Build) + * Build: `lodash --development --output js/lib/lodash.js include="any,assign,bind,chunk,clone,compact,contains,debounce,difference,each,every,extend,filter,find,first,forEach,forOwn,groupBy,indexOf,intersection,isEmpty,isEqual,isFunction,keys,last,map,omit,pairs,pluck,reject,some,throttle,union,uniq,unique,values,without,flatten,value,chain,cloneDeep,merge,pick,reduce" exports="global,node"` + * Copyright 2012-2015 The Dojo Foundation + * Based on Underscore.js 1.8.3 + * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license */ ;(function() { - /** Used as a safe reference for `undefined` in pre ES5 environments */ + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ var undefined; - /** Used to pool arrays and objects used internally */ - var arrayPool = [], - objectPool = []; - - /** Used internally to indicate various things */ - var indicatorObject = {}; - - /** Used to prefix keys to avoid issues with `__proto__` and properties on `Object.prototype` */ - var keyPrefix = +new Date + ''; + /** Used as the semantic version number. */ + var VERSION = '3.9.3'; + + /** Used to compose bitmasks for wrapper metadata. */ + var BIND_FLAG = 1, + BIND_KEY_FLAG = 2, + CURRY_BOUND_FLAG = 4, + CURRY_FLAG = 8, + CURRY_RIGHT_FLAG = 16, + PARTIAL_FLAG = 32, + PARTIAL_RIGHT_FLAG = 64, + ARY_FLAG = 128, + REARG_FLAG = 256; + + /** Used to detect when a function becomes hot. */ + var HOT_COUNT = 150, + HOT_SPAN = 16; + + /** Used to indicate the type of lazy iteratees. */ + var LAZY_DROP_WHILE_FLAG = 0, + LAZY_FILTER_FLAG = 1, + LAZY_MAP_FLAG = 2; + + /** Used as the `TypeError` message for "Functions" methods. */ + var FUNC_ERROR_TEXT = 'Expected a function'; + + /** Used as the internal argument placeholder. */ + var PLACEHOLDER = '__lodash_placeholder__'; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + weakMapTag = '[object WeakMap]'; + + var arrayBufferTag = '[object ArrayBuffer]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + + /** Used to match property names within property paths. */ + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g; - /** Used as the size when optimizations are enabled for large arrays */ - var largeArraySize = 75; + /** + * Used to match `RegExp` [special characters](http://www.regular-expressions.info/characters.html#special). + * In addition to special characters the forward slash is escaped to allow for + * easier `eval` use and `Function` compilation. + */ + var reRegExpChars = /[.*+?^${}()|[\]\/\\]/g, + reHasRegExpChars = RegExp(reRegExpChars.source); - /** Used as the max size of the `arrayPool` and `objectPool` */ - var maxPoolSize = 40; + /** Used to match backslashes in property paths. */ + var reEscapeChar = /\\(\\)?/g; - /** Used to match regexp flags from their coerced string values */ + /** Used to match `RegExp` flags from their coerced string values. */ var reFlags = /\w*$/; - /** Used to detected named functions */ - var reFuncName = /^\s*function[ \n\r\t]+\w/; + /** Used to detect host constructors (Safari > 5). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; - /** Used to detect functions containing a `this` reference */ - var reThis = /\bthis\b/; + /** Used to detect unsigned integer values. */ + var reIsUint = /^\d+$/; - /** Used to fix the JScript [[DontEnum]] bug */ - var shadowedProps = [ + /** Used to fix the JScript `[[DontEnum]]` bug. */ + var shadowProps = [ 'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'valueOf' ]; - /** `Object#toString` result shortcuts */ - var argsClass = '[object Arguments]', - arrayClass = '[object Array]', - boolClass = '[object Boolean]', - dateClass = '[object Date]', - errorClass = '[object Error]', - funcClass = '[object Function]', - numberClass = '[object Number]', - objectClass = '[object Object]', - regexpClass = '[object RegExp]', - stringClass = '[object String]'; - - /** Used to identify object classifications that `_.clone` supports */ - var cloneableClasses = {}; - cloneableClasses[funcClass] = false; - cloneableClasses[argsClass] = cloneableClasses[arrayClass] = - cloneableClasses[boolClass] = cloneableClasses[dateClass] = - cloneableClasses[numberClass] = cloneableClasses[objectClass] = - cloneableClasses[regexpClass] = cloneableClasses[stringClass] = true; - - /** Used as an internal `_.debounce` options object */ + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag] = typedArrayTags[arrayTag] = + typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = + typedArrayTags[dateTag] = typedArrayTags[errorTag] = + typedArrayTags[funcTag] = typedArrayTags[mapTag] = + typedArrayTags[numberTag] = typedArrayTags[objectTag] = + typedArrayTags[regexpTag] = typedArrayTags[setTag] = + typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; + + /** Used to identify `toStringTag` values supported by `_.clone`. */ + var cloneableTags = {}; + cloneableTags[argsTag] = cloneableTags[arrayTag] = + cloneableTags[arrayBufferTag] = cloneableTags[boolTag] = + cloneableTags[dateTag] = cloneableTags[float32Tag] = + cloneableTags[float64Tag] = cloneableTags[int8Tag] = + cloneableTags[int16Tag] = cloneableTags[int32Tag] = + cloneableTags[numberTag] = cloneableTags[objectTag] = + cloneableTags[regexpTag] = cloneableTags[stringTag] = + cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = + cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; + cloneableTags[errorTag] = cloneableTags[funcTag] = + cloneableTags[mapTag] = cloneableTags[setTag] = + cloneableTags[weakMapTag] = false; + + /** Used as an internal `_.debounce` options object by `_.throttle`. */ var debounceOptions = { 'leading': false, 'maxWait': 0, 'trailing': false }; - /** Used as the property descriptor for `__bindData__` */ - var descriptor = { - 'configurable': false, - 'enumerable': false, - 'value': null, - 'writable': false - }; - - /** Used as the data object for `iteratorTemplate` */ - var iteratorData = { - 'args': '', - 'array': null, - 'bottom': '', - 'firstArg': '', - 'init': '', - 'keys': null, - 'loop': '', - 'shadowedProps': null, - 'support': null, - 'top': '', - 'useHas': false - }; - - /** Used to determine if values are of the language type Object */ + /** Used to determine if values are of the language type `Object`. */ var objectTypes = { - 'boolean': false, 'function': true, - 'object': true, - 'number': false, - 'string': false, - 'undefined': false + 'object': true }; - /** Used as a reference to the global object */ - var root = (objectTypes[typeof window] && window) || this; - - /** Detect free variable `exports` */ + /** Detect free variable `exports`. */ var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports; - /** Detect free variable `module` */ + /** Detect free variable `module`. */ var freeModule = objectTypes[typeof module] && module && !module.nodeType && module; - /** Detect the popular CommonJS extension `module.exports` */ + /** Detect free variable `global` from Node.js. */ + var freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global; + + /** Detect free variable `self`. */ + var freeSelf = objectTypes[typeof self] && self && self.Object && self; + + /** Detect free variable `window`. */ + var freeWindow = objectTypes[typeof window] && window && window.Object && window; + + /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports && freeExports; - /** Detect free variable `global` from Node.js or Browserified code and use it as `root` */ - var freeGlobal = objectTypes[typeof global] && global; - if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) { - root = freeGlobal; - } + /** + * Used as a reference to the global object. + * + * The `this` value is used if it's the global object to avoid Greasemonkey's + * restricted `window` object, otherwise the `window` object is used. + */ + var root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this; /*--------------------------------------------------------------------------*/ /** - * The base implementation of `_.indexOf` without support for binary searches - * or `fromIndex` constraints. + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for callback shorthands and `this` binding. * * @private * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the matched value or `-1`. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. */ - function baseIndexOf(array, value, fromIndex) { - var index = (fromIndex || 0) - 1, - length = array ? array.length : 0; + function baseFindIndex(array, predicate, fromRight) { + var length = array.length, + index = fromRight ? length : -1; - while (++index < length) { - if (array[index] === value) { + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { return index; } } @@ -7075,333 +7765,361 @@ var JXON = new (function () { } /** - * An implementation of `_.contains` for cache objects that mimics the return - * signature of `_.indexOf` by returning `0` if the value is found, else `-1`. + * The base implementation of `_.indexOf` without support for binary searches. * * @private - * @param {Object} cache The cache object to inspect. + * @param {Array} array The array to search. * @param {*} value The value to search for. - * @returns {number} Returns `0` if `value` is found, else `-1`. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. */ - function cacheIndexOf(cache, value) { - var type = typeof value; - cache = cache.cache; - - if (type == 'boolean' || value == null) { - return cache[value] ? 0 : -1; - } - if (type != 'number' && type != 'string') { - type = 'object'; + function baseIndexOf(array, value, fromIndex) { + if (value !== value) { + return indexOfNaN(array, fromIndex); } - var key = type == 'number' ? value : keyPrefix + value; - cache = (cache = cache[type]) && cache[key]; + var index = fromIndex - 1, + length = array.length; - return type == 'object' - ? (cache && baseIndexOf(cache, value) > -1 ? 0 : -1) - : (cache ? 0 : -1); + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; } /** - * Adds a given value to the corresponding cache object. + * The base implementation of `_.isFunction` without support for environments + * with incorrect `typeof` results. * * @private - * @param {*} value The value to add to the cache. + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. */ - function cachePush(value) { - var cache = this.cache, - type = typeof value; - - if (type == 'boolean' || value == null) { - cache[value] = true; - } else { - if (type != 'number' && type != 'string') { - type = 'object'; - } - var key = type == 'number' ? value : keyPrefix + value, - typeCache = cache[type] || (cache[type] = {}); - - if (type == 'object') { - (typeCache[key] || (typeCache[key] = [])).push(value); - } else { - typeCache[key] = true; - } - } + function baseIsFunction(value) { + // Avoid a Chakra JIT bug in compatibility modes of IE 11. + // See https://github.com/jashkenas/underscore/issues/1621 for more details. + return typeof value == 'function' || false; } /** - * Creates a cache object to optimize linear searches of large arrays. + * Converts `value` to a string if it's not one. An empty string is returned + * for `null` or `undefined` values. * * @private - * @param {Array} [array=[]] The array to search. - * @returns {null|Object} Returns the cache object or `null` if caching should not be used. + * @param {*} value The value to process. + * @returns {string} Returns the string. */ - function createCache(array) { - var index = -1, - length = array.length, - first = array[0], - mid = array[(length / 2) | 0], - last = array[length - 1]; - - if (first && typeof first == 'object' && - mid && typeof mid == 'object' && last && typeof last == 'object') { - return false; - } - var cache = getObject(); - cache['false'] = cache['null'] = cache['true'] = cache['undefined'] = false; - - var result = getObject(); - result.array = array; - result.cache = cache; - result.push = cachePush; - - while (++index < length) { - result.push(array[index]); + function baseToString(value) { + if (typeof value == 'string') { + return value; } - return result; + return value == null ? '' : (value + ''); } /** - * Gets an array from the array pool or creates a new one if the pool is empty. + * Gets the index at which the first occurrence of `NaN` is found in `array`. * * @private - * @returns {Array} The array from the pool. + * @param {Array} array The array to search. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched `NaN`, else `-1`. */ - function getArray() { - return arrayPool.pop() || []; + function indexOfNaN(array, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 0 : -1); + + while ((fromRight ? index-- : ++index < length)) { + var other = array[index]; + if (other !== other) { + return index; + } + } + return -1; } /** - * Gets an object from the object pool or creates a new one if the pool is empty. + * Checks if `value` is a host object in IE < 9. * * @private - * @returns {Object} The object from the pool. + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a host object, else `false`. */ - function getObject() { - return objectPool.pop() || { - 'array': null, - 'cache': null, - 'false': false, - 'null': false, - 'number': null, - 'object': null, - 'push': null, - 'string': null, - 'true': false, - 'undefined': false + var isHostObject = (function() { + try { + Object({ 'toString': 0 } + ''); + } catch(e) { + return function() { return false; }; + } + return function(value) { + // IE < 9 presents many host objects as `Object` objects that can coerce + // to strings despite having improperly defined `toString` methods. + return typeof value.toString != 'function' && typeof (value + '') == 'string'; }; - } + }()); /** - * Checks if `value` is a DOM node in IE < 9. + * Checks if `value` is object-like. * * @private * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a DOM node, else `false`. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. */ - function isNode(value) { - // IE < 9 presents DOM nodes as `Object` objects except they have `toString` - // methods that are `typeof` "string" and still can coerce nodes to strings - return typeof value.toString != 'function' && typeof (value + '') == 'string'; + function isObjectLike(value) { + return !!value && typeof value == 'object'; } /** - * Releases the given array back to the array pool. + * Replaces all `placeholder` elements in `array` with an internal placeholder + * and returns an array of their indexes. * * @private - * @param {Array} [array] The array to release. + * @param {Array} array The array to modify. + * @param {*} placeholder The placeholder to replace. + * @returns {Array} Returns the new array of placeholder indexes. */ - function releaseArray(array) { - array.length = 0; - if (arrayPool.length < maxPoolSize) { - arrayPool.push(array); - } - } - - /** - * Releases the given object back to the object pool. - * - * @private - * @param {Object} [object] The object to release. - */ - function releaseObject(object) { - var cache = object.cache; - if (cache) { - releaseObject(cache); - } - object.array = object.cache =object.object = object.number = object.string =null; - if (objectPool.length < maxPoolSize) { - objectPool.push(object); + function replaceHolders(array, placeholder) { + var index = -1, + length = array.length, + resIndex = -1, + result = []; + + while (++index < length) { + if (array[index] === placeholder) { + array[index] = PLACEHOLDER; + result[++resIndex] = index; + } } + return result; } /** - * Slices the `collection` from the `start` index up to, but not including, - * the `end` index. - * - * Note: This function is used instead of `Array#slice` to support node lists - * in IE < 9 and to ensure dense arrays are returned. + * An implementation of `_.uniq` optimized for sorted arrays without support + * for callback shorthands and `this` binding. * * @private - * @param {Array|Object|string} collection The collection to slice. - * @param {number} start The start index. - * @param {number} end The end index. - * @returns {Array} Returns the new array. + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The function invoked per iteration. + * @returns {Array} Returns the new duplicate-value-free array. */ - function slice(array, start, end) { - start || (start = 0); - if (typeof end == 'undefined') { - end = array ? array.length : 0; - } - var index = -1, - length = end - start || 0, - result = Array(length < 0 ? 0 : length); + function sortedUniq(array, iteratee) { + var seen, + index = -1, + length = array.length, + resIndex = -1, + result = []; while (++index < length) { - result[index] = array[start + index]; + var value = array[index], + computed = iteratee ? iteratee(value, index, array) : value; + + if (!index || seen !== computed) { + seen = computed; + result[++resIndex] = value; + } } return result; } /*--------------------------------------------------------------------------*/ - /** - * Used for `Array` method references. - * - * Normally `Array.prototype` would suffice, however, using an array literal - * avoids issues in Narwhal. - */ - var arrayRef = []; - - /** Used for native method references */ - var errorProto = Error.prototype, + /** Used for native method references. */ + var arrayProto = Array.prototype, + errorProto = Error.prototype, objectProto = Object.prototype, stringProto = String.prototype; - /** Used to resolve the internal [[Class]] of values */ - var toString = objectProto.toString; + /** Used to resolve the decompiled source of functions. */ + var fnToString = Function.prototype.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * Used to resolve the [`toStringTag`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.prototype.tostring) + * of values. + */ + var objToString = objectProto.toString; - /** Used to detect if a method is native */ - var reNative = RegExp('^' + - String(toString) - .replace(/[.*+?^${}()|[\]\\]/g, '\\$&') - .replace(/toString| for [^\]]+/g, '.*?') + '$' + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + escapeRegExp(fnToString.call(hasOwnProperty)) + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' ); - /** Native method shortcuts */ - var fnToString = Function.prototype.toString, - getPrototypeOf = reNative.test(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf, - hasOwnProperty = objectProto.hasOwnProperty, - now = reNative.test(now = Date.now) && now || function() { return +new Date; }, - push = arrayRef.push, - propertyIsEnumerable = objectProto.propertyIsEnumerable; - - /** Used to set meta data on functions */ - var defineProperty = (function() { - // IE 8 only accepts DOM elements + /** Native method references. */ + var ArrayBuffer = getNative(root, 'ArrayBuffer'), + bufferSlice = getNative(ArrayBuffer && new ArrayBuffer(0), 'slice'), + ceil = Math.ceil, + floor = Math.floor, + getPrototypeOf = getNative(Object, 'getPrototypeOf'), + push = arrayProto.push, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + Set = getNative(root, 'Set'), + splice = arrayProto.splice, + Uint8Array = getNative(root, 'Uint8Array'), + WeakMap = getNative(root, 'WeakMap'); + + /** Used to clone array buffers. */ + var Float64Array = (function() { + // Safari 5 errors when using an array buffer to initialize a typed array + // where the array buffer's `byteLength` is not a multiple of the typed + // array's `BYTES_PER_ELEMENT`. try { - var o = {}, - func = reNative.test(func = Object.defineProperty) && func, - result = func(o, o, o) && func; - } catch(e) { } - return result; + var func = getNative(root, 'Float64Array'), + result = new func(new ArrayBuffer(10), 0, 1) && func; + } catch(e) {} + return result || null; }()); - /* Native method shortcuts for methods with the same name as other `lodash` methods */ - var nativeCreate = reNative.test(nativeCreate = Object.create) && nativeCreate, - nativeIsArray = reNative.test(nativeIsArray = Array.isArray) && nativeIsArray, - nativeKeys = reNative.test(nativeKeys = Object.keys) && nativeKeys, + /* Native method references for those with the same name as other `lodash` methods. */ + var nativeCreate = getNative(Object, 'create'), + nativeIsArray = getNative(Array, 'isArray'), + nativeKeys = getNative(Object, 'keys'), nativeMax = Math.max, - nativeMin = Math.min; - - /** Used to lookup a built-in constructor by [[Class]] */ - var ctorByClass = {}; - ctorByClass[arrayClass] = Array; - ctorByClass[boolClass] = Boolean; - ctorByClass[dateClass] = Date; - ctorByClass[funcClass] = Function; - ctorByClass[objectClass] = Object; - ctorByClass[numberClass] = Number; - ctorByClass[regexpClass] = RegExp; - ctorByClass[stringClass] = String; - - /** Used to avoid iterating non-enumerable properties in IE < 9 */ - var nonEnumProps = {}; - nonEnumProps[arrayClass] = nonEnumProps[dateClass] = nonEnumProps[numberClass] = { 'constructor': true, 'toLocaleString': true, 'toString': true, 'valueOf': true }; - nonEnumProps[boolClass] = nonEnumProps[stringClass] = { 'constructor': true, 'toString': true, 'valueOf': true }; - nonEnumProps[errorClass] = nonEnumProps[funcClass] = nonEnumProps[regexpClass] = { 'constructor': true, 'toString': true }; - nonEnumProps[objectClass] = { 'constructor': true }; + nativeMin = Math.min, + nativeNow = getNative(Date, 'now'); - (function() { - var length = shadowedProps.length; - while (length--) { - var key = shadowedProps[length]; - for (var className in nonEnumProps) { - if (hasOwnProperty.call(nonEnumProps, className) && !hasOwnProperty.call(nonEnumProps[className], key)) { - nonEnumProps[className][key] = false; - } + /** Used as references for `-Infinity` and `Infinity`. */ + var POSITIVE_INFINITY = Number.POSITIVE_INFINITY; + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + + /** Used as the size, in bytes, of each `Float64Array` element. */ + var FLOAT64_BYTES_PER_ELEMENT = Float64Array ? Float64Array.BYTES_PER_ELEMENT : 0; + + /** + * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer) + * of an array-like value. + */ + var MAX_SAFE_INTEGER = 9007199254740991; + + /** Used to store function metadata. */ + var metaMap = WeakMap && new WeakMap; + + /** Used to lookup unminified function names. */ + var realNames = {}; + + /** Used to lookup a type array constructors by `toStringTag`. */ + var ctorByTag = {}; + ctorByTag[float32Tag] = root.Float32Array; + ctorByTag[float64Tag] = root.Float64Array; + ctorByTag[int8Tag] = root.Int8Array; + ctorByTag[int16Tag] = root.Int16Array; + ctorByTag[int32Tag] = root.Int32Array; + ctorByTag[uint8Tag] = root.Uint8Array; + ctorByTag[uint8ClampedTag] = root.Uint8ClampedArray; + ctorByTag[uint16Tag] = root.Uint16Array; + ctorByTag[uint32Tag] = root.Uint32Array; + + /** Used to avoid iterating over non-enumerable properties in IE < 9. */ + var nonEnumProps = {}; + nonEnumProps[arrayTag] = nonEnumProps[dateTag] = nonEnumProps[numberTag] = { 'constructor': true, 'toLocaleString': true, 'toString': true, 'valueOf': true }; + nonEnumProps[boolTag] = nonEnumProps[stringTag] = { 'constructor': true, 'toString': true, 'valueOf': true }; + nonEnumProps[errorTag] = nonEnumProps[funcTag] = nonEnumProps[regexpTag] = { 'constructor': true, 'toString': true }; + nonEnumProps[objectTag] = { 'constructor': true }; + + arrayEach(shadowProps, function(key) { + for (var tag in nonEnumProps) { + if (hasOwnProperty.call(nonEnumProps, tag)) { + var props = nonEnumProps[tag]; + props[key] = hasOwnProperty.call(props, key); } } - }()); + }); - /*--------------------------------------------------------------------------*/ + /*------------------------------------------------------------------------*/ /** - * Creates a `lodash` object which wraps the given value to enable intuitive - * method chaining. - * - * In addition to Lo-Dash methods, wrappers also have the following `Array` methods: - * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`, - * and `unshift` - * - * Chaining is supported in custom builds as long as the `value` method is - * implicitly or explicitly included in the build. - * - * The chainable wrapper functions are: - * `after`, `assign`, `bind`, `bindAll`, `bindKey`, `chain`, `compact`, - * `compose`, `concat`, `countBy`, `create`, `createCallback`, `curry`, - * `debounce`, `defaults`, `defer`, `delay`, `difference`, `filter`, `flatten`, - * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`, - * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`, - * `invoke`, `keys`, `map`, `max`, `memoize`, `merge`, `min`, `object`, `omit`, - * `once`, `pairs`, `partial`, `partialRight`, `pick`, `pluck`, `pull`, `push`, - * `range`, `reject`, `remove`, `rest`, `reverse`, `shuffle`, `slice`, `sort`, - * `sortBy`, `splice`, `tap`, `throttle`, `times`, `toArray`, `transform`, - * `union`, `uniq`, `unshift`, `unzip`, `values`, `where`, `without`, `wrap`, - * and `zip` - * - * The non-chainable wrapper functions are: - * `clone`, `cloneDeep`, `contains`, `escape`, `every`, `find`, `findIndex`, - * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `has`, `identity`, - * `indexOf`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`, - * `isEmpty`, `isEqual`, `isFinite`, `isFunction`, `isNaN`, `isNull`, `isNumber`, - * `isObject`, `isPlainObject`, `isRegExp`, `isString`, `isUndefined`, `join`, - * `lastIndexOf`, `mixin`, `noConflict`, `parseInt`, `pop`, `random`, `reduce`, - * `reduceRight`, `result`, `shift`, `size`, `some`, `sortedIndex`, `runInContext`, - * `template`, `unescape`, `uniqueId`, and `value` - * - * The wrapper functions `first` and `last` return wrapped values when `n` is - * provided, otherwise they return unwrapped values. - * - * Explicit chaining can be enabled by using the `_.chain` method. + * Creates a `lodash` object which wraps `value` to enable implicit chaining. + * Methods that operate on and return arrays, collections, and functions can + * be chained together. Methods that return a boolean or single value will + * automatically end the chain returning the unwrapped value. Explicit chaining + * may be enabled using `_.chain`. The execution of chained methods is lazy, + * that is, execution is deferred until `_#value` is implicitly or explicitly + * called. + * + * Lazy evaluation allows several methods to support shortcut fusion. Shortcut + * fusion is an optimization that merges iteratees to avoid creating intermediate + * arrays and reduce the number of iteratee executions. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, + * `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `compact`, `drop`, `dropRight`, `dropRightWhile`, `dropWhile`, `filter`, + * `first`, `initial`, `last`, `map`, `pluck`, `reject`, `rest`, `reverse`, + * `slice`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, `toArray`, + * and `where` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `at`, `before`, `bind`, `bindAll`, `bindKey`, + * `callback`, `chain`, `chunk`, `commit`, `compact`, `concat`, `constant`, + * `countBy`, `create`, `curry`, `debounce`, `defaults`, `defer`, `delay`, + * `difference`, `drop`, `dropRight`, `dropRightWhile`, `dropWhile`, `fill`, + * `filter`, `flatten`, `flattenDeep`, `flow`, `flowRight`, `forEach`, + * `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `functions`, + * `groupBy`, `indexBy`, `initial`, `intersection`, `invert`, `invoke`, `keys`, + * `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, + * `memoize`, `merge`, `method`, `methodOf`, `mixin`, `negate`, `omit`, `once`, + * `pairs`, `partial`, `partialRight`, `partition`, `pick`, `plant`, `pluck`, + * `property`, `propertyOf`, `pull`, `pullAt`, `push`, `range`, `rearg`, + * `reject`, `remove`, `rest`, `restParam`, `reverse`, `set`, `shuffle`, + * `slice`, `sort`, `sortBy`, `sortByAll`, `sortByOrder`, `splice`, `spread`, + * `take`, `takeRight`, `takeRightWhile`, `takeWhile`, `tap`, `throttle`, + * `thru`, `times`, `toArray`, `toPlainObject`, `transform`, `union`, `uniq`, + * `unshift`, `unzip`, `unzipWith`, `values`, `valuesIn`, `where`, `without`, + * `wrap`, `xor`, `zip`, `zipObject`, `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `clone`, `cloneDeep`, `deburr`, + * `endsWith`, `escape`, `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, + * `findLast`, `findLastIndex`, `findLastKey`, `findWhere`, `first`, `get`, + * `gt`, `gte`, `has`, `identity`, `includes`, `indexOf`, `inRange`, `isArguments`, + * `isArray`, `isBoolean`, `isDate`, `isElement`, `isEmpty`, `isEqual`, `isError`, + * `isFinite` `isFunction`, `isMatch`, `isNative`, `isNaN`, `isNull`, `isNumber`, + * `isObject`, `isPlainObject`, `isRegExp`, `isString`, `isUndefined`, + * `isTypedArray`, `join`, `kebabCase`, `last`, `lastIndexOf`, `lt`, `lte`, + * `max`, `min`, `noConflict`, `noop`, `now`, `pad`, `padLeft`, `padRight`, + * `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, `repeat`, `result`, + * `runInContext`, `shift`, `size`, `snakeCase`, `some`, `sortedIndex`, + * `sortedLastIndex`, `startCase`, `startsWith`, `sum`, `template`, `trim`, + * `trimLeft`, `trimRight`, `trunc`, `unescape`, `uniqueId`, `value`, and `words` + * + * The wrapper method `sample` will return a wrapped value when `n` is provided, + * otherwise an unwrapped value is returned. * * @name _ * @constructor - * @category Chaining + * @category Chain * @param {*} value The value to wrap in a `lodash` instance. - * @returns {Object} Returns a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. * @example * * var wrapped = _([1, 2, 3]); * * // returns an unwrapped value - * wrapped.reduce(function(sum, num) { - * return sum + num; + * wrapped.reduce(function(total, n) { + * return total + n; * }); * // => 6 * * // returns a wrapped value - * var squares = wrapped.map(function(num) { - * return num * num; + * var squares = wrapped.map(function(n) { + * return n * n; * }); * * _.isArray(squares); @@ -7411,29 +8129,42 @@ var JXON = new (function () { * // => true */ function lodash(value) { - // don't wrap if already wrapped, even if wrapped by a different `lodash` constructor - return (value && typeof value == 'object' && !isArray(value) && hasOwnProperty.call(value, '__wrapped__')) - ? value - : new lodashWrapper(value); + if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { + if (value instanceof LodashWrapper) { + return value; + } + if (hasOwnProperty.call(value, '__chain__') && hasOwnProperty.call(value, '__wrapped__')) { + return wrapperClone(value); + } + } + return new LodashWrapper(value); } /** - * A fast path for creating `lodash` wrapper objects. + * The function whose prototype all chaining wrappers inherit from. * * @private - * @param {*} value The value to wrap in a `lodash` instance. - * @param {boolean} chainAll A flag to enable chaining for all methods - * @returns {Object} Returns a `lodash` instance. */ - function lodashWrapper(value, chainAll) { - this.__chain__ = !!chainAll; + function baseLodash() { + // No operation performed. + } + + /** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable chaining for all wrapper methods. + * @param {Array} [actions=[]] Actions to peform to resolve the unwrapped value. + */ + function LodashWrapper(value, chainAll, actions) { this.__wrapped__ = value; + this.__actions__ = actions || []; + this.__chain__ = !!chainAll; } - // ensure `new lodashWrapper` is an instance of `lodash` - lodashWrapper.prototype = lodash.prototype; /** - * An object used to flag environments features. + * An object environment feature flags. * * @static * @memberOf _ @@ -7441,84 +8172,51 @@ var JXON = new (function () { */ var support = lodash.support = {}; - (function() { - var ctor = function() { this.x = 1; }, - object = { '0': 1, 'length': 1 }, + (function(x) { + var Ctor = function() { this.x = x; }, + object = { '0': x, 'length': x }, props = []; - ctor.prototype = { 'valueOf': 1, 'y': 1 }; - for (var key in new ctor) { props.push(key); } - for (key in arguments) { } - - /** - * Detect if an `arguments` object's [[Class]] is resolvable (all but Firefox < 4, IE < 9). - * - * @memberOf _.support - * @type boolean - */ - support.argsClass = toString.call(arguments) == argsClass; + Ctor.prototype = { 'valueOf': x, 'y': x }; + for (var key in new Ctor) { props.push(key); } /** - * Detect if `arguments` objects are `Object` objects (all but Narwhal and Opera < 10.5). + * Detect if the `toStringTag` of `arguments` objects is resolvable + * (all but Firefox < 4, IE < 9). * * @memberOf _.support * @type boolean */ - support.argsObject = arguments.constructor == Object && !(arguments instanceof Array); + support.argsTag = objToString.call(arguments) == argsTag; /** * Detect if `name` or `message` properties of `Error.prototype` are - * enumerable by default. (IE < 9, Safari < 5.1) + * enumerable by default (IE < 9, Safari < 5.1). * * @memberOf _.support * @type boolean */ - support.enumErrorProps = propertyIsEnumerable.call(errorProto, 'message') || propertyIsEnumerable.call(errorProto, 'name'); + support.enumErrorProps = propertyIsEnumerable.call(errorProto, 'message') || + propertyIsEnumerable.call(errorProto, 'name'); /** * Detect if `prototype` properties are enumerable by default. * * Firefox < 3.6, Opera > 9.50 - Opera < 11.60, and Safari < 5.1 * (if the prototype or a property on the prototype has been set) - * incorrectly sets a function's `prototype` property [[Enumerable]] - * value to `true`. - * - * @memberOf _.support - * @type boolean - */ - support.enumPrototypes = propertyIsEnumerable.call(ctor, 'prototype'); - - /** - * Detect if functions can be decompiled by `Function#toString` - * (all but PS3 and older Opera mobile browsers & avoided in Windows 8 apps). - * - * @memberOf _.support - * @type boolean - */ - support.funcDecomp = !reNative.test(root.WinRTError) && reThis.test(function() { return this; }); - - /** - * Detect if `Function#name` is supported (all but IE). - * - * @memberOf _.support - * @type boolean - */ - support.funcNames = typeof Function.name == 'string'; - - /** - * Detect if `arguments` object indexes are non-enumerable - * (Firefox < 4, IE < 9, PhantomJS, Safari < 5.1). + * incorrectly set the `[[Enumerable]]` value of a function's `prototype` + * property to `true`. * * @memberOf _.support * @type boolean */ - support.nonEnumArgs = key != 0; + support.enumPrototypes = propertyIsEnumerable.call(Ctor, 'prototype'); /** * Detect if properties shadowing those on `Object.prototype` are non-enumerable. * - * In IE < 9 an objects own properties, shadowing non-enumerable ones, are - * made non-enumerable as well (a.k.a the JScript [[DontEnum]] bug). + * In IE < 9 an object's own properties, shadowing non-enumerable ones, + * are made non-enumerable as well (a.k.a the JScript `[[DontEnum]]` bug). * * @memberOf _.support * @type boolean @@ -7526,7 +8224,7 @@ var JXON = new (function () { support.nonEnumShadows = !/valueOf/.test(props); /** - * Detect if own properties are iterated after inherited properties (all but IE < 9). + * Detect if own properties are iterated after inherited properties (IE < 9). * * @memberOf _.support * @type boolean @@ -7534,110213 +8232,32331 @@ var JXON = new (function () { support.ownLast = props[0] != 'x'; /** - * Detect if `Array#shift` and `Array#splice` augment array-like objects correctly. + * Detect if `Array#shift` and `Array#splice` augment array-like objects + * correctly. * - * Firefox < 10, IE compatibility mode, and IE < 9 have buggy Array `shift()` - * and `splice()` functions that fail to remove the last element, `value[0]`, - * of array-like objects even though the `length` property is set to `0`. - * The `shift()` method is buggy in IE 8 compatibility mode, while `splice()` - * is buggy regardless of mode in IE < 9 and buggy in compatibility mode in IE 9. + * Firefox < 10, compatibility modes of IE 8, and IE < 9 have buggy Array + * `shift()` and `splice()` functions that fail to remove the last element, + * `value[0]`, of array-like objects even though the "length" property is + * set to `0`. The `shift()` method is buggy in compatibility modes of IE 8, + * while `splice()` is buggy regardless of mode in IE < 9. * * @memberOf _.support * @type boolean */ - support.spliceObjects = (arrayRef.splice.call(object, 0, 1), !object[0]); + support.spliceObjects = (splice.call(object, 0, 1), !object[0]); /** * Detect lack of support for accessing string characters by index. * - * IE < 8 can't access characters by index and IE 8 can only access - * characters by index on string literals. + * IE < 8 can't access characters by index. IE 8 can only access characters + * by index on string literals, not string objects. * * @memberOf _.support * @type boolean */ support.unindexedChars = ('x'[0] + Object('x')[0]) != 'xx'; + }(1, 0)); - /** - * Detect if a DOM node's [[Class]] is resolvable (all but IE < 9) - * and that the JS engine errors when attempting to coerce an object to - * a string without a `toString` function. - * - * @memberOf _.support - * @type boolean - */ - try { - support.nodeClass = !(toString.call(document) == objectClass && !({ 'toString': 0 } + '')); - } catch(e) { - support.nodeClass = true; - } - }(1)); - - /*--------------------------------------------------------------------------*/ + /*------------------------------------------------------------------------*/ /** - * The template used to create iterator functions. + * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. * * @private - * @param {Object} data The data object used to populate the text. - * @returns {string} Returns the interpolated text. + * @param {*} value The value to wrap. */ - var iteratorTemplate = function(obj) { - - var __p = 'var index, iterable = ' + - (obj.firstArg) + - ', result = ' + - (obj.init) + - ';\nif (!iterable) return result;\n' + - (obj.top) + - ';'; - if (obj.array) { - __p += '\nvar length = iterable.length; index = -1;\nif (' + - (obj.array) + - ') { '; - if (support.unindexedChars) { - __p += '\n if (isString(iterable)) {\n iterable = iterable.split(\'\')\n } '; - } - __p += '\n while (++index < length) {\n ' + - (obj.loop) + - ';\n }\n}\nelse { '; - } else if (support.nonEnumArgs) { - __p += '\n var length = iterable.length; index = -1;\n if (length && isArguments(iterable)) {\n while (++index < length) {\n index += \'\';\n ' + - (obj.loop) + - ';\n }\n } else { '; - } + function LazyWrapper(value) { + this.__wrapped__ = value; + this.__actions__ = null; + this.__dir__ = 1; + this.__dropCount__ = 0; + this.__filtered__ = false; + this.__iteratees__ = null; + this.__takeCount__ = POSITIVE_INFINITY; + this.__views__ = null; + } - if (support.enumPrototypes) { - __p += '\n var skipProto = typeof iterable == \'function\';\n '; - } + /** + * Creates a clone of the lazy wrapper object. + * + * @private + * @name clone + * @memberOf LazyWrapper + * @returns {Object} Returns the cloned `LazyWrapper` object. + */ + function lazyClone() { + var actions = this.__actions__, + iteratees = this.__iteratees__, + views = this.__views__, + result = new LazyWrapper(this.__wrapped__); + + result.__actions__ = actions ? arrayCopy(actions) : null; + result.__dir__ = this.__dir__; + result.__filtered__ = this.__filtered__; + result.__iteratees__ = iteratees ? arrayCopy(iteratees) : null; + result.__takeCount__ = this.__takeCount__; + result.__views__ = views ? arrayCopy(views) : null; + return result; + } - if (support.enumErrorProps) { - __p += '\n var skipErrorProps = iterable === errorProto || iterable instanceof Error;\n '; - } + /** + * Reverses the direction of lazy iteration. + * + * @private + * @name reverse + * @memberOf LazyWrapper + * @returns {Object} Returns the new reversed `LazyWrapper` object. + */ + function lazyReverse() { + if (this.__filtered__) { + var result = new LazyWrapper(this); + result.__dir__ = -1; + result.__filtered__ = true; + } else { + result = this.clone(); + result.__dir__ *= -1; + } + return result; + } - var conditions = []; if (support.enumPrototypes) { conditions.push('!(skipProto && index == "prototype")'); } if (support.enumErrorProps) { conditions.push('!(skipErrorProps && (index == "message" || index == "name"))'); } + /** + * Extracts the unwrapped value from its lazy wrapper. + * + * @private + * @name value + * @memberOf LazyWrapper + * @returns {*} Returns the unwrapped value. + */ + function lazyValue() { + var array = this.__wrapped__.value(); + if (!isArray(array)) { + return baseWrapperValue(array, this.__actions__); + } + var dir = this.__dir__, + isRight = dir < 0, + view = getView(0, array.length, this.__views__), + start = view.start, + end = view.end, + length = end - start, + index = isRight ? end : (start - 1), + takeCount = nativeMin(length, this.__takeCount__), + iteratees = this.__iteratees__, + iterLength = iteratees ? iteratees.length : 0, + resIndex = 0, + result = []; - if (obj.useHas && obj.keys) { - __p += '\n var ownIndex = -1,\n ownProps = objectTypes[typeof iterable] && keys(iterable),\n length = ownProps ? ownProps.length : 0;\n\n while (++ownIndex < length) {\n index = ownProps[ownIndex];\n'; - if (conditions.length) { - __p += ' if (' + - (conditions.join(' && ')) + - ') {\n '; - } - __p += - (obj.loop) + - '; '; - if (conditions.length) { - __p += '\n }'; - } - __p += '\n } '; - } else { - __p += '\n for (index in iterable) {\n'; - if (obj.useHas) { conditions.push("hasOwnProperty.call(iterable, index)"); } if (conditions.length) { - __p += ' if (' + - (conditions.join(' && ')) + - ') {\n '; - } - __p += - (obj.loop) + - '; '; - if (conditions.length) { - __p += '\n }'; - } - __p += '\n } '; - if (support.nonEnumShadows) { - __p += '\n\n if (iterable !== objectProto) {\n var ctor = iterable.constructor,\n isProto = iterable === (ctor && ctor.prototype),\n className = iterable === stringProto ? stringClass : iterable === errorProto ? errorClass : toString.call(iterable),\n nonEnum = nonEnumProps[className];\n '; - for (k = 0; k < 7; k++) { - __p += '\n index = \'' + - (obj.shadowedProps[k]) + - '\';\n if ((!(isProto && nonEnum[index]) && hasOwnProperty.call(iterable, index))'; - if (!obj.useHas) { - __p += ' || (!nonEnum[index] && iterable[index] !== objectProto[index])'; - } - __p += ') {\n ' + - (obj.loop) + - ';\n } '; - } - __p += '\n } '; - } + outer: + while (length-- && resIndex < takeCount) { + index += dir; - } + var iterIndex = -1, + value = array[index]; - if (obj.array || support.nonEnumArgs) { - __p += '\n}'; - } - __p += - (obj.bottom) + - ';\nreturn result'; + while (++iterIndex < iterLength) { + var data = iteratees[iterIndex], + iteratee = data.iteratee, + type = data.type; - return __p - }; + if (type == LAZY_DROP_WHILE_FLAG) { + if (data.done && (isRight ? (index > data.index) : (index < data.index))) { + data.count = 0; + data.done = false; + } + data.index = index; + if (!data.done) { + var limit = data.limit; + if (!(data.done = limit > -1 ? (data.count++ >= limit) : !iteratee(value))) { + continue outer; + } + } + } else { + var computed = iteratee(value); + if (type == LAZY_MAP_FLAG) { + value = computed; + } else if (!computed) { + if (type == LAZY_FILTER_FLAG) { + continue outer; + } else { + break outer; + } + } + } + } + result[resIndex++] = value; + } + return result; + } - /*--------------------------------------------------------------------------*/ + /*------------------------------------------------------------------------*/ /** - * The base implementation of `_.bind` that creates the bound function and - * sets its meta data. + * + * Creates a cache object to store unique values. * * @private - * @param {Array} bindData The bind data array. - * @returns {Function} Returns the new bound function. + * @param {Array} [values] The values to cache. */ - function baseBind(bindData) { - var func = bindData[0], - partialArgs = bindData[2], - thisArg = bindData[4]; - - function bound() { - // `Function#bind` spec - // http://es5.github.io/#x15.3.4.5 - if (partialArgs) { - var args = partialArgs.slice(); - push.apply(args, arguments); - } - // mimic the constructor's `return` behavior - // http://es5.github.io/#x13.2.2 - if (this instanceof bound) { - // ensure `new bound` is an instance of `func` - var thisBinding = baseCreate(func.prototype), - result = func.apply(thisBinding, args || arguments); - return isObject(result) ? result : thisBinding; - } - return func.apply(thisArg, args || arguments); + function SetCache(values) { + var length = values ? values.length : 0; + + this.data = { 'hash': nativeCreate(null), 'set': new Set }; + while (length--) { + this.push(values[length]); } - setBindData(bound, bindData); - return bound; } /** - * The base implementation of `_.clone` without argument juggling or support - * for `thisArg` binding. + * Checks if `value` is in `cache` mimicking the return signature of + * `_.indexOf` by returning `0` if the value is found, else `-1`. * * @private - * @param {*} value The value to clone. - * @param {boolean} [isDeep=false] Specify a deep clone. - * @param {Function} [callback] The function to customize cloning values. - * @param {Array} [stackA=[]] Tracks traversed source objects. - * @param {Array} [stackB=[]] Associates clones with source counterparts. - * @returns {*} Returns the cloned value. + * @param {Object} cache The cache to search. + * @param {*} value The value to search for. + * @returns {number} Returns `0` if `value` is found, else `-1`. */ - function baseClone(value, isDeep, callback, stackA, stackB) { - if (callback) { - var result = callback(value); - if (typeof result != 'undefined') { - return result; - } - } - // inspect [[Class]] - var isObj = isObject(value); - if (isObj) { - var className = toString.call(value); - if (!cloneableClasses[className] || (!support.nodeClass && isNode(value))) { - return value; - } - var ctor = ctorByClass[className]; - switch (className) { - case boolClass: - case dateClass: - return new ctor(+value); - - case numberClass: - case stringClass: - return new ctor(value); - - case regexpClass: - result = ctor(value.source, reFlags.exec(value)); - result.lastIndex = value.lastIndex; - return result; - } - } else { - return value; - } - var isArr = isArray(value); - if (isDeep) { - // check for circular references and return corresponding clone - var initedStack = !stackA; - stackA || (stackA = getArray()); - stackB || (stackB = getArray()); - - var length = stackA.length; - while (length--) { - if (stackA[length] == value) { - return stackB[length]; - } - } - result = isArr ? ctor(value.length) : {}; - } - else { - result = isArr ? slice(value) : assign({}, value); - } - // add array properties assigned by `RegExp#exec` - if (isArr) { - if (hasOwnProperty.call(value, 'index')) { - result.index = value.index; - } - if (hasOwnProperty.call(value, 'input')) { - result.input = value.input; - } - } - // exit for shallow clone - if (!isDeep) { - return result; - } - // add the source value to the stack of traversed objects - // and associate it with its clone - stackA.push(value); - stackB.push(result); + function cacheIndexOf(cache, value) { + var data = cache.data, + result = (typeof value == 'string' || isObject(value)) ? data.set.has(value) : data.hash[value]; - // recursively populate clone (susceptible to call stack limits) - (isArr ? baseEach : forOwn)(value, function(objValue, key) { - result[key] = baseClone(objValue, isDeep, callback, stackA, stackB); - }); + return result ? 0 : -1; + } - if (initedStack) { - releaseArray(stackA); - releaseArray(stackB); + /** + * Adds `value` to the cache. + * + * @private + * @name push + * @memberOf SetCache + * @param {*} value The value to cache. + */ + function cachePush(value) { + var data = this.data; + if (typeof value == 'string' || isObject(value)) { + data.set.add(value); + } else { + data.hash[value] = true; } - return result; } + /*------------------------------------------------------------------------*/ + /** - * The base implementation of `_.create` without support for assigning - * properties to the created object. + * Copies the values of `source` to `array`. * * @private - * @param {Object} prototype The object to inherit from. - * @returns {Object} Returns the new object. + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. */ - function baseCreate(prototype, properties) { - return isObject(prototype) ? nativeCreate(prototype) : {}; - } - // fallback for browsers without `Object.create` - if (!nativeCreate) { - baseCreate = (function() { - function Object() {} - return function(prototype) { - if (isObject(prototype)) { - Object.prototype = prototype; - var result = new Object; - Object.prototype = null; - } - return result || root.Object(); - }; - }()); + function arrayCopy(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; } /** - * The base implementation of `_.createCallback` without support for creating - * "_.pluck" or "_.where" style callbacks. + * A specialized version of `_.forEach` for arrays without support for callback + * shorthands and `this` binding. * * @private - * @param {*} [func=identity] The value to convert to a callback. - * @param {*} [thisArg] The `this` binding of the created callback. - * @param {number} [argCount] The number of arguments the callback accepts. - * @returns {Function} Returns a callback function. + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. */ - function baseCreateCallback(func, thisArg, argCount) { - if (typeof func != 'function') { - return identity; - } - // exit early for no `thisArg` or already bound by `Function#bind` - if (typeof thisArg == 'undefined' || !('prototype' in func)) { - return func; - } - var bindData = func.__bindData__; - if (typeof bindData == 'undefined') { - if (support.funcNames) { - bindData = !func.name; - } - bindData = bindData || !support.funcDecomp; - if (!bindData) { - var source = fnToString.call(func); - if (!support.funcNames) { - bindData = !reFuncName.test(source); - } - if (!bindData) { - // checks if `func` references the `this` keyword and stores the result - bindData = reThis.test(source); - setBindData(func, bindData); - } + function arrayEach(array, iteratee) { + var index = -1, + length = array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; } } - // exit early if there are no `this` references or `func` is bound - if (bindData === false || (bindData !== true && bindData[1] & 1)) { - return func; - } - switch (argCount) { - case 1: return function(value) { - return func.call(thisArg, value); - }; - case 2: return function(a, b) { - return func.call(thisArg, a, b); - }; - case 3: return function(value, index, collection) { - return func.call(thisArg, value, index, collection); - }; - case 4: return function(accumulator, value, index, collection) { - return func.call(thisArg, accumulator, value, index, collection); - }; - } - return bind(func, thisArg); + return array; } /** - * The base implementation of `createWrapper` that creates the wrapper and - * sets its meta data. + * A specialized version of `_.every` for arrays without support for callback + * shorthands and `this` binding. * * @private - * @param {Array} bindData The bind data array. - * @returns {Function} Returns the new function. + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. */ - function baseCreateWrapper(bindData) { - var func = bindData[0], - bitmask = bindData[1], - partialArgs = bindData[2], - partialRightArgs = bindData[3], - thisArg = bindData[4], - arity = bindData[5]; - - var isBind = bitmask & 1, - isBindKey = bitmask & 2, - isCurry = bitmask & 4, - isCurryBound = bitmask & 8, - key = func; - - function bound() { - var thisBinding = isBind ? thisArg : this; - if (partialArgs) { - var args = partialArgs.slice(); - push.apply(args, arguments); - } - if (partialRightArgs || isCurry) { - args || (args = slice(arguments)); - if (partialRightArgs) { - push.apply(args, partialRightArgs); - } - if (isCurry && args.length < arity) { - bitmask |= 16 & ~32; - return baseCreateWrapper([func, (isCurryBound ? bitmask : bitmask & ~3), args, null, thisArg, arity]); - } - } - args || (args = arguments); - if (isBindKey) { - func = thisBinding[key]; - } - if (this instanceof bound) { - thisBinding = baseCreate(func.prototype); - var result = func.apply(thisBinding, args); - return isObject(result) ? result : thisBinding; + function arrayEvery(array, predicate) { + var index = -1, + length = array.length; + + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false; } - return func.apply(thisBinding, args); } - setBindData(bound, bindData); - return bound; + return true; } /** - * The base implementation of `_.difference` that accepts a single array - * of values to exclude. + * A specialized version of `_.filter` for arrays without support for callback + * shorthands and `this` binding. * * @private - * @param {Array} array The array to process. - * @param {Array} [values] The array of values to exclude. - * @returns {Array} Returns a new array of filtered values. + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. */ - function baseDifference(array, values) { + function arrayFilter(array, predicate) { var index = -1, - indexOf = getIndexOf(), - length = array ? array.length : 0, - isLarge = length >= largeArraySize && indexOf === baseIndexOf, + length = array.length, + resIndex = -1, result = []; - if (isLarge) { - var cache = createCache(values); - if (cache) { - indexOf = cacheIndexOf; - values = cache; - } else { - isLarge = false; - } - } while (++index < length) { var value = array[index]; - if (indexOf(values, value) < 0) { - result.push(value); + if (predicate(value, index, array)) { + result[++resIndex] = value; } } - if (isLarge) { - releaseObject(values); - } return result; } /** - * The base implementation of `_.flatten` without support for callback - * shorthands or `thisArg` binding. + * A specialized version of `_.map` for arrays without support for callback + * shorthands and `this` binding. * * @private - * @param {Array} array The array to flatten. - * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level. - * @param {boolean} [isStrict=false] A flag to restrict flattening to arrays and `arguments` objects. - * @param {number} [fromIndex=0] The index to start from. - * @returns {Array} Returns a new flattened array. + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. */ - function baseFlatten(array, isShallow, isStrict, fromIndex) { - var index = (fromIndex || 0) - 1, - length = array ? array.length : 0, - result = []; + function arrayMap(array, iteratee) { + var index = -1, + length = array.length, + result = Array(length); while (++index < length) { - var value = array[index]; + result[index] = iteratee(array[index], index, array); + } + return result; + } - if (value && typeof value == 'object' && typeof value.length == 'number' - && (isArray(value) || isArguments(value))) { - // recursively flatten arrays (susceptible to call stack limits) - if (!isShallow) { - value = baseFlatten(value, isShallow, isStrict); - } - var valIndex = -1, - valLength = value.length, - resIndex = result.length; + /** + * A specialized version of `_.reduce` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initFromArray] Specify using the first element of `array` + * as the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduce(array, iteratee, accumulator, initFromArray) { + var index = -1, + length = array.length; - result.length += valLength; - while (++valIndex < valLength) { - result[resIndex++] = value[valIndex]; - } - } else if (!isStrict) { - result.push(value); + if (initFromArray && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; + } + + /** + * A specialized version of `_.some` for arrays without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function arraySome(array, predicate) { + var index = -1, + length = array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; } } - return result; + return false; } /** - * The base implementation of `_.isEqual`, without support for `thisArg` binding, - * that allows partial "_.where" style comparisons. + * A specialized version of `_.assign` for customizing assigned values without + * support for argument juggling, multiple sources, and `this` binding `customizer` + * functions. * * @private - * @param {*} a The value to compare. - * @param {*} b The other value to compare. - * @param {Function} [callback] The function to customize comparing values. - * @param {Function} [isWhere=false] A flag to indicate performing partial comparisons. - * @param {Array} [stackA=[]] Tracks traversed `a` objects. - * @param {Array} [stackB=[]] Tracks traversed `b` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {Function} customizer The function to customize assigned values. + * @returns {Object} Returns `object`. */ - function baseIsEqual(a, b, callback, isWhere, stackA, stackB) { - // used to indicate that when comparing objects, `a` has at least the properties of `b` - if (callback) { - var result = callback(a, b); - if (typeof result != 'undefined') { - return !!result; + function assignWith(object, source, customizer) { + var index = -1, + props = keys(source), + length = props.length; + + while (++index < length) { + var key = props[index], + value = object[key], + result = customizer(value, source[key], key, object, source); + + if ((result === result ? (result !== value) : (value === value)) || + (value === undefined && !(key in object))) { + object[key] = result; } } - // exit early for identical values - if (a === b) { - // treat `+0` vs. `-0` as not equal - return a !== 0 || (1 / a == 1 / b); + return object; + } + + /** + * The base implementation of `_.assign` without support for argument juggling, + * multiple sources, and `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssign(object, source) { + return source == null + ? object + : baseCopy(source, keys(source), object); + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property names to copy. + * @param {Object} [object={}] The object to copy properties to. + * @returns {Object} Returns `object`. + */ + function baseCopy(source, props, object) { + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + object[key] = source[key]; } - var type = typeof a, - otherType = typeof b; + return object; + } - // exit early for unlike primitive values - if (a === a && - !(a && objectTypes[type]) && - !(b && objectTypes[otherType])) { - return false; + /** + * The base implementation of `_.callback` which supports specifying the + * number of arguments to provide to `func`. + * + * @private + * @param {*} [func=_.identity] The value to convert to a callback. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {number} [argCount] The number of arguments to provide to `func`. + * @returns {Function} Returns the callback. + */ + function baseCallback(func, thisArg, argCount) { + var type = typeof func; + if (type == 'function') { + return thisArg === undefined + ? func + : bindCallback(func, thisArg, argCount); } - // exit early for `null` and `undefined` avoiding ES3's Function#call behavior - // http://es5.github.io/#x15.3.4.4 - if (a == null || b == null) { - return a === b; + if (func == null) { + return identity; + } + if (type == 'object') { + return baseMatches(func); } - // compare [[Class]] names - var className = toString.call(a), - otherClass = toString.call(b); + return thisArg === undefined + ? property(func) + : baseMatchesProperty(func, thisArg); + } - if (className == argsClass) { - className = objectClass; + /** + * The base implementation of `_.clone` without support for argument juggling + * and `this` binding `customizer` functions. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @param {Function} [customizer] The function to customize cloning values. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The object `value` belongs to. + * @param {Array} [stackA=[]] Tracks traversed source objects. + * @param {Array} [stackB=[]] Associates clones with source counterparts. + * @returns {*} Returns the cloned value. + */ + function baseClone(value, isDeep, customizer, key, object, stackA, stackB) { + var result; + if (customizer) { + result = object ? customizer(value, key, object) : customizer(value); } - if (otherClass == argsClass) { - otherClass = objectClass; + if (result !== undefined) { + return result; } - if (className != otherClass) { - return false; + if (!isObject(value)) { + return value; } - switch (className) { - case boolClass: - case dateClass: - // coerce dates and booleans to numbers, dates to milliseconds and booleans - // to `1` or `0` treating invalid dates coerced to `NaN` as not equal - return +a == +b; - - case numberClass: - // treat `NaN` vs. `NaN` as equal - return (a != +a) - ? b != +b - // but treat `+0` vs. `-0` as not equal - : (a == 0 ? (1 / a == 1 / b) : a == +b); - - case regexpClass: - case stringClass: - // coerce regexes to strings (http://es5.github.io/#x15.10.6.4) - // treat string primitives and their corresponding object instances as equal - return a == String(b); - } - var isArr = className == arrayClass; - if (!isArr) { - // unwrap any `lodash` wrapped values - var aWrapped = hasOwnProperty.call(a, '__wrapped__'), - bWrapped = hasOwnProperty.call(b, '__wrapped__'); - - if (aWrapped || bWrapped) { - return baseIsEqual(aWrapped ? a.__wrapped__ : a, bWrapped ? b.__wrapped__ : b, callback, isWhere, stackA, stackB); - } - // exit for functions and DOM nodes - if (className != objectClass || (!support.nodeClass && (isNode(a) || isNode(b)))) { - return false; + var isArr = isArray(value); + if (isArr) { + result = initCloneArray(value); + if (!isDeep) { + return arrayCopy(value, result); } - // in older versions of Opera, `arguments` objects have `Array` constructors - var ctorA = !support.argsObject && isArguments(a) ? Object : a.constructor, - ctorB = !support.argsObject && isArguments(b) ? Object : b.constructor; - - // non `Object` object instances with different constructors are not equal - if (ctorA != ctorB && - !(isFunction(ctorA) && ctorA instanceof ctorA && isFunction(ctorB) && ctorB instanceof ctorB) && - ('constructor' in a && 'constructor' in b) - ) { - return false; + } else { + var tag = objToString.call(value), + isFunc = tag == funcTag; + + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + if (isHostObject(value)) { + return object ? value : {}; + } + result = initCloneObject(isFunc ? {} : value); + if (!isDeep) { + return baseAssign(result, value); + } + } else { + return cloneableTags[tag] + ? initCloneByTag(value, tag, isDeep) + : (object ? value : {}); } } - // assume cyclic structures are equal - // the algorithm for detecting cyclic structures is adapted from ES 5.1 - // section 15.12.3, abstract operation `JO` (http://es5.github.io/#x15.12.3) - var initedStack = !stackA; - stackA || (stackA = getArray()); - stackB || (stackB = getArray()); + // Check for circular references and return corresponding clone. + stackA || (stackA = []); + stackB || (stackB = []); var length = stackA.length; while (length--) { - if (stackA[length] == a) { - return stackB[length] == b; + if (stackA[length] == value) { + return stackB[length]; } } - var size = 0; - result = true; - - // add `a` and `b` to the stack of traversed objects - stackA.push(a); - stackB.push(b); - - // recursively compare objects and arrays (susceptible to call stack limits) - if (isArr) { - length = a.length; - size = b.length; + // Add the source value to the stack of traversed objects and associate it with its clone. + stackA.push(value); + stackB.push(result); - // compare lengths to determine if a deep comparison is necessary - result = size == a.length; - if (!result && !isWhere) { - return result; - } - // deep compare the contents, ignoring non-numeric properties - while (size--) { - var index = length, - value = b[size]; - - if (isWhere) { - while (index--) { - if ((result = baseIsEqual(a[index], value, callback, isWhere, stackA, stackB))) { - break; - } - } - } else if (!(result = baseIsEqual(a[size], value, callback, isWhere, stackA, stackB))) { - break; - } - } - return result; - } - // deep compare objects using `forIn`, instead of `forOwn`, to avoid `Object.keys` - // which, in this case, is more costly - forIn(b, function(value, key, b) { - if (hasOwnProperty.call(b, key)) { - // count the number of properties. - size++; - // deep compare each property value. - return (result = hasOwnProperty.call(a, key) && baseIsEqual(a[key], value, callback, isWhere, stackA, stackB)); - } + // Recursively populate clone (susceptible to call stack limits). + (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) { + result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB); }); - - if (result && !isWhere) { - // ensure both objects have the same number of properties - forIn(a, function(value, key, a) { - if (hasOwnProperty.call(a, key)) { - // `size` will be `-1` if `a` has more properties than `b` - return (result = --size > -1); - } - }); - } - if (initedStack) { - releaseArray(stackA); - releaseArray(stackB); - } return result; } /** - * The base implementation of `_.merge` without argument juggling or support - * for `thisArg` binding. + * The base implementation of `_.create` without support for assigning + * properties to the created object. * * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {Function} [callback] The function to customize merging properties. - * @param {Array} [stackA=[]] Tracks traversed source objects. - * @param {Array} [stackB=[]] Associates values with source counterparts. + * @param {Object} prototype The object to inherit from. + * @returns {Object} Returns the new object. */ - function baseMerge(object, source, callback, stackA, stackB) { - (isArray(source) ? forEach : forOwn)(source, function(source, key) { - var found, - isArr, - result = source, - value = object[key]; - - if (source && ((isArr = isArray(source)) || isPlainObject(source))) { - // avoid merging previously merged cyclic sources - var stackLength = stackA.length; - while (stackLength--) { - if ((found = stackA[stackLength] == source)) { - value = stackB[stackLength]; - break; - } - } - if (!found) { - var isShallow; - if (callback) { - result = callback(value, source); - if ((isShallow = typeof result != 'undefined')) { - value = result; - } - } - if (!isShallow) { - value = isArr - ? (isArray(value) ? value : []) - : (isPlainObject(value) ? value : {}); - } - // add `source` and associated `value` to the stack of traversed objects - stackA.push(source); - stackB.push(value); - - // recursively merge objects and arrays (susceptible to call stack limits) - if (!isShallow) { - baseMerge(value, source, callback, stackA, stackB); - } - } - } - else { - if (callback) { - result = callback(value, source); - if (typeof result == 'undefined') { - result = source; - } - } - if (typeof result != 'undefined') { - value = result; - } + var baseCreate = (function() { + function object() {} + return function(prototype) { + if (isObject(prototype)) { + object.prototype = prototype; + var result = new object; + object.prototype = null; } - object[key] = value; - }); - } + return result || {}; + }; + }()); /** - * The base implementation of `_.uniq` without support for callback shorthands - * or `thisArg` binding. + * The base implementation of `_.difference` which accepts a single array + * of values to exclude. * * @private - * @param {Array} array The array to process. - * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted. - * @param {Function} [callback] The function called per iteration. - * @returns {Array} Returns a duplicate-value-free array. + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @returns {Array} Returns the new array of filtered values. */ - function baseUniq(array, isSorted, callback) { - var index = -1, - indexOf = getIndexOf(), - length = array ? array.length : 0, + function baseDifference(array, values) { + var length = array ? array.length : 0, result = []; - var isLarge = !isSorted && length >= largeArraySize && indexOf === baseIndexOf, - seen = (callback || isLarge) ? getArray() : result; + if (!length) { + return result; + } + var index = -1, + indexOf = getIndexOf(), + isCommon = indexOf == baseIndexOf, + cache = (isCommon && values.length >= 200) ? createCache(values) : null, + valuesLength = values.length; - if (isLarge) { - var cache = createCache(seen); - if (cache) { - indexOf = cacheIndexOf; - seen = cache; - } else { - isLarge = false; - seen = callback ? seen : (releaseArray(seen), result); - } + if (cache) { + indexOf = cacheIndexOf; + isCommon = false; + values = cache; } + outer: while (++index < length) { - var value = array[index], - computed = callback ? callback(value, index, array) : value; + var value = array[index]; - if (isSorted - ? !index || seen[seen.length - 1] !== computed - : indexOf(seen, computed) < 0 - ) { - if (callback || isLarge) { - seen.push(computed); + if (isCommon && value === value) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === value) { + continue outer; + } } result.push(value); } - } - if (isLarge) { - releaseArray(seen.array); - releaseObject(seen); - } else if (callback) { - releaseArray(seen); + else if (indexOf(values, value, 0) < 0) { + result.push(value); + } } return result; } /** - * Creates a function that aggregates a collection, creating an object composed - * of keys generated from the results of running each element of the collection - * through a callback. The given `setter` function sets the keys and values - * of the composed object. + * The base implementation of `_.forEach` without support for callback + * shorthands and `this` binding. * * @private - * @param {Function} setter The setter function. - * @returns {Function} Returns the new aggregator function. + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object|string} Returns `collection`. */ - function createAggregator(setter) { - return function(collection, callback, thisArg) { - var result = {}; - callback = lodash.createCallback(callback, thisArg, 3); - - if (isArray(collection)) { - var index = -1, - length = collection.length; + var baseEach = createBaseEach(baseForOwn); - while (++index < length) { - var value = collection[index]; - setter(result, value, callback(value, index, collection), collection); - } - } else { - baseEach(collection, function(value, key, collection) { - setter(result, value, callback(value, key, collection), collection); - }); - } + /** + * The base implementation of `_.every` without support for callback + * shorthands and `this` binding. + * + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ + function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); return result; - }; + }); + return result; } /** - * Creates a function that, when called, either curries or invokes `func` - * with an optional `this` binding and partially applied arguments. + * The base implementation of `_.filter` without support for callback + * shorthands and `this` binding. * * @private - * @param {Function|string} func The function or method name to reference. - * @param {number} bitmask The bitmask of method flags to compose. - * The bitmask may be composed of the following flags: - * 1 - `_.bind` - * 2 - `_.bindKey` - * 4 - `_.curry` - * 8 - `_.curry` (bound) - * 16 - `_.partial` - * 32 - `_.partialRight` - * @param {Array} [partialArgs] An array of arguments to prepend to those - * provided to the new function. - * @param {Array} [partialRightArgs] An array of arguments to append to those - * provided to the new function. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new function. + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. */ - function createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) { - var isBind = bitmask & 1, - isBindKey = bitmask & 2, - isCurry = bitmask & 4, - isCurryBound = bitmask & 8, - isPartial = bitmask & 16, - isPartialRight = bitmask & 32; - - if (!isBindKey && !isFunction(func)) { - throw new TypeError; - } - if (isPartial && !partialArgs.length) { - bitmask &= ~16; - isPartial = partialArgs = false; - } - if (isPartialRight && !partialRightArgs.length) { - bitmask &= ~32; - isPartialRight = partialRightArgs = false; - } - var bindData = func && func.__bindData__; - if (bindData && bindData !== true) { - bindData = bindData.slice(); - - // set `thisBinding` is not previously bound - if (isBind && !(bindData[1] & 1)) { - bindData[4] = thisArg; - } - // set if previously bound but not currently (subsequent curried functions) - if (!isBind && bindData[1] & 1) { - bitmask |= 8; - } - // set curried arity if not yet set - if (isCurry && !(bindData[1] & 4)) { - bindData[5] = arity; - } - // append partial left arguments - if (isPartial) { - push.apply(bindData[2] || (bindData[2] = []), partialArgs); - } - // append partial right arguments - if (isPartialRight) { - push.apply(bindData[3] || (bindData[3] = []), partialRightArgs); + function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); } - // merge flags - bindData[1] |= bitmask; - return createWrapper.apply(null, bindData); - } - // fast path for `_.bind` - var creater = (bitmask == 1 || bitmask === 17) ? baseBind : baseCreateWrapper; - return creater([func, bitmask, partialArgs, partialRightArgs, thisArg, arity]); + }); + return result; } /** - * Creates compiled iteration functions. + * The base implementation of `_.find`, `_.findLast`, `_.findKey`, and `_.findLastKey`, + * without support for callback shorthands and `this` binding, which iterates + * over `collection` using the provided `eachFunc`. * * @private - * @param {...Object} [options] The compile options object(s). - * @param {string} [options.array] Code to determine if the iterable is an array or array-like. - * @param {boolean} [options.useHas] Specify using `hasOwnProperty` checks in the object loop. - * @param {Function} [options.keys] A reference to `_.keys` for use in own property iteration. - * @param {string} [options.args] A comma separated string of iteration function arguments. - * @param {string} [options.top] Code to execute before the iteration branches. - * @param {string} [options.loop] Code to execute in the object loop. - * @param {string} [options.bottom] Code to execute after the iteration branches. - * @returns {Function} Returns the compiled function. + * @param {Array|Object|string} collection The collection to search. + * @param {Function} predicate The function invoked per iteration. + * @param {Function} eachFunc The function to iterate over `collection`. + * @param {boolean} [retKey] Specify returning the key of the found element + * instead of the element itself. + * @returns {*} Returns the found element or its key, else `undefined`. */ - function createIterator() { - // data properties - iteratorData.shadowedProps = shadowedProps; - - // iterator options - iteratorData.array = iteratorData.bottom = iteratorData.loop = iteratorData.top = ''; - iteratorData.init = 'iterable'; - iteratorData.useHas = true; - - // merge options into a template data object - for (var object, index = 0; object = arguments[index]; index++) { - for (var key in object) { - iteratorData[key] = object[key]; + function baseFind(collection, predicate, eachFunc, retKey) { + var result; + eachFunc(collection, function(value, key, collection) { + if (predicate(value, key, collection)) { + result = retKey ? key : value; + return false; } - } - var args = iteratorData.args; - iteratorData.firstArg = /^[^,]+/.exec(args)[0]; - - // create the function factory - var factory = Function( - 'baseCreateCallback, errorClass, errorProto, hasOwnProperty, ' + - 'indicatorObject, isArguments, isArray, isString, keys, objectProto, ' + - 'objectTypes, nonEnumProps, stringClass, stringProto, toString', - 'return function(' + args + ') {\n' + iteratorTemplate(iteratorData) + '\n}' - ); - - // return the compiled function - return factory( - baseCreateCallback, errorClass, errorProto, hasOwnProperty, - indicatorObject, isArguments, isArray, isString, iteratorData.keys, objectProto, - objectTypes, nonEnumProps, stringClass, stringProto, toString - ); + }); + return result; } /** - * Gets the appropriate "indexOf" function. If the `_.indexOf` method is - * customized, this method returns the custom method, otherwise it returns - * the `baseIndexOf` function. + * The base implementation of `_.flatten` with added support for restricting + * flattening and specifying the start index. * * @private - * @returns {Function} Returns the "indexOf" function. + * @param {Array} array The array to flatten. + * @param {boolean} [isDeep] Specify a deep flatten. + * @param {boolean} [isStrict] Restrict flattening to arrays-like objects. + * @returns {Array} Returns the new flattened array. */ - function getIndexOf() { - var result = (result = lodash.indexOf) === indexOf ? baseIndexOf : result; + function baseFlatten(array, isDeep, isStrict) { + var index = -1, + length = array.length, + resIndex = -1, + result = []; + + while (++index < length) { + var value = array[index]; + if (isObjectLike(value) && isArrayLike(value) && + (isStrict || isArray(value) || isArguments(value))) { + if (isDeep) { + // Recursively flatten arrays (susceptible to call stack limits). + value = baseFlatten(value, isDeep, isStrict); + } + var valIndex = -1, + valLength = value.length; + + while (++valIndex < valLength) { + result[++resIndex] = value[valIndex]; + } + } else if (!isStrict) { + result[++resIndex] = value; + } + } return result; } /** - * Sets `this` binding data on a given function. + * The base implementation of `baseForIn` and `baseForOwn` which iterates + * over `object` properties returned by `keysFunc` invoking `iteratee` for + * each property. Iteratee functions may exit iteration early by explicitly + * returning `false`. * * @private - * @param {Function} func The function to set data on. - * @param {Array} value The data array to set. + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. */ - var setBindData = !defineProperty ? noop : function(func, value) { - descriptor.value = value; - defineProperty(func, '__bindData__', descriptor); - }; + var baseFor = createBaseFor(); /** - * A fallback implementation of `isPlainObject` which checks if a given value - * is an object created by the `Object` constructor, assuming objects created - * by the `Object` constructor have no inherited enumerable properties and that - * there are no `Object.prototype` extensions. + * The base implementation of `_.forIn` without support for callback + * shorthands and `this` binding. * * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. */ - function shimIsPlainObject(value) { - var ctor, - result; - - // avoid non Object objects, `arguments` objects, and DOM elements - if (!(value && toString.call(value) == objectClass) || - (ctor = value.constructor, isFunction(ctor) && !(ctor instanceof ctor)) || - (!support.argsClass && isArguments(value)) || - (!support.nodeClass && isNode(value))) { - return false; - } - // IE < 9 iterates inherited properties before own properties. If the first - // iterated property is an object's own property then there are no inherited - // enumerable properties. - if (support.ownLast) { - forIn(value, function(value, key, object) { - result = hasOwnProperty.call(object, key); - return false; - }); - return result !== false; - } - // In most environments an object's own properties are iterated before - // its inherited properties. If the last iterated property is an object's - // own property then there are no inherited enumerable properties. - forIn(value, function(value, key) { - result = key; - }); - return typeof result == 'undefined' || hasOwnProperty.call(value, result); + function baseForIn(object, iteratee) { + return baseFor(object, iteratee, keysIn); } - /*--------------------------------------------------------------------------*/ - /** - * Checks if `value` is an `arguments` object. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is an `arguments` object, else `false`. - * @example - * - * (function() { return _.isArguments(arguments); })(1, 2, 3); - * // => true + * The base implementation of `_.forOwn` without support for callback + * shorthands and `this` binding. * - * _.isArguments([1, 2, 3]); - * // => false + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. */ - function isArguments(value) { - return value && typeof value == 'object' && typeof value.length == 'number' && - toString.call(value) == argsClass || false; - } - // fallback for browsers that can't detect `arguments` objects by [[Class]] - if (!support.argsClass) { - isArguments = function(value) { - return value && typeof value == 'object' && typeof value.length == 'number' && - hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee') || false; - }; + function baseForOwn(object, iteratee) { + return baseFor(object, iteratee, keys); } /** - * Checks if `value` is an array. - * - * @static - * @memberOf _ - * @type Function - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is an array, else `false`. - * @example - * - * (function() { return _.isArray(arguments); })(); - * // => false + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from those provided. * - * _.isArray([1, 2, 3]); - * // => true + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the new array of filtered property names. */ - var isArray = nativeIsArray || function(value) { - return value && typeof value == 'object' && typeof value.length == 'number' && - toString.call(value) == arrayClass || false; - }; + function baseFunctions(object, props) { + var index = -1, + length = props.length, + resIndex = -1, + result = []; + + while (++index < length) { + var key = props[index]; + if (isFunction(object[key])) { + result[++resIndex] = key; + } + } + return result; + } /** - * A fallback implementation of `Object.keys` which produces an array of the - * given object's own enumerable property names. + * The base implementation of `get` without support for string paths + * and default values. * * @private - * @type Function - * @param {Object} object The object to inspect. - * @returns {Array} Returns an array of property names. + * @param {Object} object The object to query. + * @param {Array} path The path of the property to get. + * @param {string} [pathKey] The key representation of path. + * @returns {*} Returns the resolved value. */ - var shimKeys = createIterator({ - 'args': 'object', - 'init': '[]', - 'top': 'if (!(objectTypes[typeof object])) return result', - 'loop': 'result.push(index)' - }); + function baseGet(object, path, pathKey) { + if (object == null) { + return; + } + object = toObject(object); + if (pathKey !== undefined && pathKey in object) { + path = [pathKey]; + } + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = toObject(object)[path[index++]]; + } + return (index && index == length) ? object : undefined; + } /** - * Creates an array composed of the own enumerable property names of an object. + * The base implementation of `_.isEqual` without support for `this` binding + * `customizer` functions. * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to inspect. - * @returns {Array} Returns an array of property names. - * @example + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparing values. + * @param {boolean} [isLoose] Specify performing partial comparisons. + * @param {Array} [stackA] Tracks traversed `value` objects. + * @param {Array} [stackB] Tracks traversed `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB); + } + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. * - * _.keys({ 'one': 1, 'two': 2, 'three': 3 }); - * // => ['one', 'two', 'three'] (property order is not guaranteed across environments) + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparing objects. + * @param {boolean} [isLoose] Specify performing partial comparisons. + * @param {Array} [stackA=[]] Tracks traversed `value` objects. + * @param {Array} [stackB=[]] Tracks traversed `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ - var keys = !nativeKeys ? shimKeys : function(object) { - if (!isObject(object)) { - return []; + function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = arrayTag, + othTag = arrayTag; + + if (!objIsArr) { + objTag = objToString.call(object); + if (objTag == argsTag) { + objTag = objectTag; + } else if (objTag != objectTag) { + objIsArr = isTypedArray(object); + } } - if ((support.enumPrototypes && typeof object == 'function') || - (support.nonEnumArgs && object.length && isArguments(object))) { - return shimKeys(object); + if (!othIsArr) { + othTag = objToString.call(other); + if (othTag == argsTag) { + othTag = objectTag; + } else if (othTag != objectTag) { + othIsArr = isTypedArray(other); + } } - return nativeKeys(object); - }; + var objIsObj = objTag == objectTag && !isHostObject(object), + othIsObj = othTag == objectTag && !isHostObject(other), + isSameTag = objTag == othTag; - /** Reusable iterator options shared by `each`, `forIn`, and `forOwn` */ - var eachIteratorOptions = { - 'args': 'collection, callback, thisArg', - 'top': "callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3)", - 'array': "typeof length == 'number'", - 'keys': keys, - 'loop': 'if (callback(iterable[index], index, collection) === false) return result' - }; + if (isSameTag && !(objIsArr || objIsObj)) { + return equalByTag(object, other, objTag); + } + if (!isLoose) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); - /** Reusable iterator options for `assign` and `defaults` */ - var defaultsIteratorOptions = { - 'args': 'object, source, guard', - 'top': - 'var args = arguments,\n' + - ' argsIndex = 0,\n' + - " argsLength = typeof guard == 'number' ? 2 : args.length;\n" + - 'while (++argsIndex < argsLength) {\n' + - ' iterable = args[argsIndex];\n' + - ' if (iterable && objectTypes[typeof iterable]) {', - 'keys': keys, - 'loop': "if (typeof result[index] == 'undefined') result[index] = iterable[index]", - 'bottom': ' }\n}' - }; + if (objIsWrapped || othIsWrapped) { + return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB); + } + } + if (!isSameTag) { + return false; + } + // Assume cyclic values are equal. + // For more information on detecting circular references see https://es5.github.io/#JO. + stackA || (stackA = []); + stackB || (stackB = []); - /** Reusable iterator options for `forIn` and `forOwn` */ - var forOwnIteratorOptions = { - 'top': 'if (!objectTypes[typeof iterable]) return result;\n' + eachIteratorOptions.top, - 'array': false - }; + var length = stackA.length; + while (length--) { + if (stackA[length] == object) { + return stackB[length] == other; + } + } + // Add `object` and `other` to the stack of traversed objects. + stackA.push(object); + stackB.push(other); + + var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB); + + stackA.pop(); + stackB.pop(); + + return result; + } /** - * A function compiled to iterate `arguments` objects, arrays, objects, and - * strings consistenly across environments, executing the callback for each - * element in the collection. The callback is bound to `thisArg` and invoked - * with three arguments; (value, index|key, collection). Callbacks may exit - * iteration early by explicitly returning `false`. + * The base implementation of `_.isMatch` without support for callback + * shorthands and `this` binding. * * @private - * @type Function - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array|Object|string} Returns `collection`. + * @param {Object} object The object to inspect. + * @param {Array} matchData The propery names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparing objects. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. */ - var baseEach = createIterator(eachIteratorOptions); + function baseIsMatch(object, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; - /*--------------------------------------------------------------------------*/ + if (object == null) { + return !length; + } + object = toObject(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var result = customizer ? customizer(objValue, srcValue, key) : undefined; + if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, true) : result)) { + return false; + } + } + } + return true; + } /** - * Assigns own enumerable properties of source object(s) to the destination - * object. Subsequent sources will overwrite property assignments of previous - * sources. If a callback is provided it will be executed to produce the - * assigned values. The callback is bound to `thisArg` and invoked with two - * arguments; (objectValue, sourceValue). - * - * @static - * @memberOf _ - * @type Function - * @alias extend - * @category Objects - * @param {Object} object The destination object. - * @param {...Object} [source] The source objects. - * @param {Function} [callback] The function to customize assigning values. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns the destination object. - * @example - * - * _.assign({ 'name': 'fred' }, { 'employer': 'slate' }); - * // => { 'name': 'fred', 'employer': 'slate' } - * - * var defaults = _.partialRight(_.assign, function(a, b) { - * return typeof a == 'undefined' ? b : a; - * }); + * The base implementation of `_.map` without support for callback shorthands + * and `this` binding. * - * var object = { 'name': 'barney' }; - * defaults(object, { 'name': 'fred', 'employer': 'slate' }); - * // => { 'name': 'barney', 'employer': 'slate' } + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. */ - var assign = createIterator(defaultsIteratorOptions, { - 'top': - defaultsIteratorOptions.top.replace(';', - ';\n' + - "if (argsLength > 3 && typeof args[argsLength - 2] == 'function') {\n" + - ' var callback = baseCreateCallback(args[--argsLength - 1], args[argsLength--], 2);\n' + - "} else if (argsLength > 2 && typeof args[argsLength - 1] == 'function') {\n" + - ' callback = args[--argsLength];\n' + - '}' - ), - 'loop': 'result[index] = callback ? callback(result[index], iterable[index]) : iterable[index]' - }); + function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; + } /** - * Creates a clone of `value`. If `isDeep` is `true` nested objects will also - * be cloned, otherwise they will be assigned by reference. If a callback - * is provided it will be executed to produce the cloned values. If the - * callback returns `undefined` cloning will be handled by the method instead. - * The callback is bound to `thisArg` and invoked with one argument; (value). - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to clone. - * @param {boolean} [isDeep=false] Specify a deep clone. - * @param {Function} [callback] The function to customize cloning values. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the cloned value. - * @example - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; - * - * var shallow = _.clone(characters); - * shallow[0] === characters[0]; - * // => true - * - * var deep = _.clone(characters, true); - * deep[0] === characters[0]; - * // => false - * - * _.mixin({ - * 'clone': _.partialRight(_.clone, function(value) { - * return _.isElement(value) ? value.cloneNode(false) : undefined; - * }) - * }); + * The base implementation of `_.matches` which does not clone `source`. * - * var clone = _.clone(document.body); - * clone.childNodes.length; - * // => 0 + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new function. */ - function clone(value, isDeep, callback, thisArg) { - // allows working with "Collections" methods without using their `index` - // and `collection` arguments for `isDeep` and `callback` - if (typeof isDeep != 'boolean' && isDeep != null) { - thisArg = callback; - callback = isDeep; - isDeep = false; + function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + var key = matchData[0][0], + value = matchData[0][1]; + + return function(object) { + if (object == null) { + return false; + } + object = toObject(object); + return object[key] === value && (value !== undefined || (key in object)); + }; } - return baseClone(value, isDeep, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1)); + return function(object) { + return baseIsMatch(object, matchData); + }; } /** - * Creates a deep clone of `value`. If a callback is provided it will be - * executed to produce the cloned values. If the callback returns `undefined` - * cloning will be handled by the method instead. The callback is bound to - * `thisArg` and invoked with one argument; (value). - * - * Note: This method is loosely based on the structured clone algorithm. Functions - * and DOM nodes are **not** cloned. The enumerable properties of `arguments` objects and - * objects created by constructors other than `Object` are cloned to plain `Object` objects. - * See http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to deep clone. - * @param {Function} [callback] The function to customize cloning values. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the deep cloned value. - * @example - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; + * The base implementation of `_.matchesProperty` which does not clone `srcValue`. * - * var deep = _.cloneDeep(characters); - * deep[0] === characters[0]; - * // => false - * - * var view = { - * 'label': 'docs', - * 'node': element - * }; - * - * var clone = _.cloneDeep(view, function(value) { - * return _.isElement(value) ? value.cloneNode(true) : undefined; - * }); - * - * clone.node == view.node; - * // => false + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to compare. + * @returns {Function} Returns the new function. */ - function cloneDeep(value, callback, thisArg) { - return baseClone(value, true, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1)); + function baseMatchesProperty(path, srcValue) { + var isArr = isArray(path), + isCommon = isKey(path) && isStrictComparable(srcValue), + pathKey = (path + ''); + + path = toPath(path); + return function(object) { + if (object == null) { + return false; + } + var key = pathKey; + object = toObject(object); + if ((isArr || !isCommon) && !(key in object)) { + object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); + if (object == null) { + return false; + } + key = last(path); + object = toObject(object); + } + return object[key] === srcValue + ? (srcValue !== undefined || (key in object)) + : baseIsEqual(srcValue, object[key], undefined, true); + }; } /** - * Iterates over own and inherited enumerable properties of an object, - * executing the callback for each property. The callback is bound to `thisArg` - * and invoked with three arguments; (value, key, object). Callbacks may exit - * iteration early by explicitly returning `false`. + * The base implementation of `_.merge` without support for argument juggling, + * multiple sources, and `this` binding `customizer` functions. * - * @static - * @memberOf _ - * @type Function - * @category Objects - * @param {Object} object The object to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {Function} [customizer] The function to customize merging properties. + * @param {Array} [stackA=[]] Tracks traversed source objects. + * @param {Array} [stackB=[]] Associates values with source counterparts. * @returns {Object} Returns `object`. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * Shape.prototype.move = function(x, y) { - * this.x += x; - * this.y += y; - * }; - * - * _.forIn(new Shape, function(value, key) { - * console.log(key); - * }); - * // => logs 'x', 'y', and 'move' (property order is not guaranteed across environments) */ - var forIn = createIterator(eachIteratorOptions, forOwnIteratorOptions, { - 'useHas': false - }); + function baseMerge(object, source, customizer, stackA, stackB) { + if (!isObject(object)) { + return object; + } + var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)), + props = isSrcArr ? null : keys(source); - /** - * Iterates over own enumerable properties of an object, executing the callback - * for each property. The callback is bound to `thisArg` and invoked with three - * arguments; (value, key, object). Callbacks may exit iteration early by - * explicitly returning `false`. - * - * @static - * @memberOf _ - * @type Function - * @category Objects - * @param {Object} object The object to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns `object`. - * @example - * - * _.forOwn({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) { - * console.log(key); - * }); - * // => logs '0', '1', and 'length' (property order is not guaranteed across environments) - */ - var forOwn = createIterator(eachIteratorOptions, forOwnIteratorOptions); + arrayEach(props || source, function(srcValue, key) { + if (props) { + key = srcValue; + srcValue = source[key]; + } + if (isObjectLike(srcValue)) { + stackA || (stackA = []); + stackB || (stackB = []); + baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB); + } + else { + var value = object[key], + result = customizer ? customizer(value, srcValue, key, object, source) : undefined, + isCommon = result === undefined; - /** - * Creates a sorted array of property names of all enumerable properties, - * own and inherited, of `object` that have function values. - * - * @static - * @memberOf _ - * @alias methods - * @category Objects - * @param {Object} object The object to inspect. - * @returns {Array} Returns an array of property names that have function values. - * @example - * - * _.functions(_); - * // => ['all', 'any', 'bind', 'bindAll', 'clone', 'compact', 'compose', ...] - */ - function functions(object) { - var result = []; - forIn(object, function(value, key) { - if (isFunction(value)) { - result.push(key); + if (isCommon) { + result = srcValue; + } + if ((result !== undefined || (isSrcArr && !(key in object))) && + (isCommon || (result === result ? (result !== value) : (value === value)))) { + object[key] = result; + } } }); - return result.sort(); + return object; } /** - * Checks if `value` is empty. Arrays, strings, or `arguments` objects with a - * length of `0` and objects with no own enumerable properties are considered - * "empty". + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. * - * @static - * @memberOf _ - * @category Objects - * @param {Array|Object|string} value The value to inspect. - * @returns {boolean} Returns `true` if the `value` is empty, else `false`. - * @example - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({}); - * // => true - * - * _.isEmpty(''); - * // => true + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize merging properties. + * @param {Array} [stackA=[]] Tracks traversed source objects. + * @param {Array} [stackB=[]] Associates values with source counterparts. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ - function isEmpty(value) { - var result = true; - if (!value) { - return result; + function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) { + var length = stackA.length, + srcValue = source[key]; + + while (length--) { + if (stackA[length] == srcValue) { + object[key] = stackB[length]; + return; + } } - var className = toString.call(value), - length = value.length; + var value = object[key], + result = customizer ? customizer(value, srcValue, key, object, source) : undefined, + isCommon = result === undefined; - if ((className == arrayClass || className == stringClass || - (support.argsClass ? className == argsClass : isArguments(value))) || - (className == objectClass && typeof length == 'number' && isFunction(value.splice))) { - return !length; + if (isCommon) { + result = srcValue; + if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) { + result = isArray(value) + ? value + : (isArrayLike(value) ? arrayCopy(value) : []); + } + else if (isPlainObject(srcValue) || isArguments(srcValue)) { + result = isArguments(value) + ? toPlainObject(value) + : (isPlainObject(value) ? value : {}); + } + else { + isCommon = false; + } } - forOwn(value, function() { - return (result = false); - }); - return result; - } + // Add the source value to the stack of traversed objects and associate + // it with its merged value. + stackA.push(srcValue); + stackB.push(result); - /** - * Performs a deep comparison between two values to determine if they are - * equivalent to each other. If a callback is provided it will be executed - * to compare values. If the callback returns `undefined` comparisons will - * be handled by the method instead. The callback is bound to `thisArg` and - * invoked with two arguments; (a, b). - * - * @static - * @memberOf _ - * @category Objects - * @param {*} a The value to compare. - * @param {*} b The other value to compare. - * @param {Function} [callback] The function to customize comparing values. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'name': 'fred' }; - * var copy = { 'name': 'fred' }; - * - * object == copy; - * // => false - * - * _.isEqual(object, copy); - * // => true - * - * var words = ['hello', 'goodbye']; - * var otherWords = ['hi', 'goodbye']; - * - * _.isEqual(words, otherWords, function(a, b) { - * var reGreet = /^(?:hello|hi)$/i, - * aGreet = _.isString(a) && reGreet.test(a), - * bGreet = _.isString(b) && reGreet.test(b); - * - * return (aGreet || bGreet) ? (aGreet == bGreet) : undefined; - * }); - * // => true - */ - function isEqual(a, b, callback, thisArg) { - return baseIsEqual(a, b, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 2)); + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB); + } else if (result === result ? (result !== value) : (value === value)) { + object[key] = result; + } } /** - * Checks if `value` is a function. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a function, else `false`. - * @example + * The base implementation of `_.property` without support for deep paths. * - * _.isFunction(_); - * // => true + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new function. */ - function isFunction(value) { - return typeof value == 'function'; - } - // fallback for older versions of Chrome and Safari - if (isFunction(/x/)) { - isFunction = function(value) { - return typeof value == 'function' && toString.call(value) == funcClass; + function baseProperty(key) { + return function(object) { + return object == null ? undefined : toObject(object)[key]; }; } /** - * Checks if `value` is the language type of Object. - * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true + * A specialized version of `baseProperty` which supports deep paths. * - * _.isObject(1); - * // => false + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new function. */ - function isObject(value) { - // check if the value is the ECMAScript language type of Object - // http://es5.github.io/#x8 - // and avoid a V8 bug - // http://code.google.com/p/v8/issues/detail?id=2291 - return !!(value && objectTypes[typeof value]); + function basePropertyDeep(path) { + var pathKey = (path + ''); + path = toPath(path); + return function(object) { + return baseGet(object, path, pathKey); + }; } /** - * Checks if `value` is an object created by the `Object` constructor. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * _.isPlainObject(new Shape); - * // => false - * - * _.isPlainObject([1, 2, 3]); - * // => false + * The base implementation of `_.reduce` and `_.reduceRight` without support + * for callback shorthands and `this` binding, which iterates over `collection` + * using the provided `eachFunc`. * - * _.isPlainObject({ 'x': 0, 'y': 0 }); - * // => true + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initFromCollection Specify using the first or last element + * of `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. */ - var isPlainObject = !getPrototypeOf ? shimIsPlainObject : function(value) { - if (!(value && toString.call(value) == objectClass) || (!support.argsClass && isArguments(value))) { - return false; - } - var valueOf = value.valueOf, - objProto = typeof valueOf == 'function' && (objProto = getPrototypeOf(valueOf)) && getPrototypeOf(objProto); - - return objProto - ? (value == objProto || getPrototypeOf(value) == objProto) - : shimIsPlainObject(value); - }; + function baseReduce(collection, iteratee, accumulator, initFromCollection, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initFromCollection + ? (initFromCollection = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } /** - * Checks if `value` is a string. - * - * @static - * @memberOf _ - * @category Objects - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the `value` is a string, else `false`. - * @example + * The base implementation of `setData` without support for hot loop detection. * - * _.isString('fred'); - * // => true + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. */ - function isString(value) { - return typeof value == 'string' || - value && typeof value == 'object' && toString.call(value) == stringClass || false; - } + var baseSetData = !metaMap ? identity : function(func, data) { + metaMap.set(func, data); + return func; + }; /** - * Recursively merges own enumerable properties of the source object(s), that - * don't resolve to `undefined` into the destination object. Subsequent sources - * will overwrite property assignments of previous sources. If a callback is - * provided it will be executed to produce the merged values of the destination - * and source properties. If the callback returns `undefined` merging will - * be handled by the method instead. The callback is bound to `thisArg` and - * invoked with two arguments; (objectValue, sourceValue). - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The destination object. - * @param {...Object} [source] The source objects. - * @param {Function} [callback] The function to customize merging properties. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns the destination object. - * @example - * - * var names = { - * 'characters': [ - * { 'name': 'barney' }, - * { 'name': 'fred' } - * ] - * }; - * - * var ages = { - * 'characters': [ - * { 'age': 36 }, - * { 'age': 40 } - * ] - * }; - * - * _.merge(names, ages); - * // => { 'characters': [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 }] } - * - * var food = { - * 'fruits': ['apple'], - * 'vegetables': ['beet'] - * }; - * - * var otherFood = { - * 'fruits': ['banana'], - * 'vegetables': ['carrot'] - * }; + * The base implementation of `_.slice` without an iteratee call guard. * - * _.merge(food, otherFood, function(a, b) { - * return _.isArray(a) ? a.concat(b) : undefined; - * }); - * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot] } + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. */ - function merge(object) { - var args = arguments, - length = 2; - - if (!isObject(object)) { - return object; - } + function baseSlice(array, start, end) { + var index = -1, + length = array.length; - // allows working with `_.reduce` and `_.reduceRight` without using - // their `index` and `collection` arguments - if (typeof args[2] != 'number') { - length = args.length; + start = start == null ? 0 : (+start || 0); + if (start < 0) { + start = -start > length ? 0 : (length + start); } - if (length > 3 && typeof args[length - 2] == 'function') { - var callback = baseCreateCallback(args[--length - 1], args[length--], 2); - } else if (length > 2 && typeof args[length - 1] == 'function') { - callback = args[--length]; + end = (end === undefined || end > length) ? length : (+end || 0); + if (end < 0) { + end += length; } - var sources = slice(arguments, 1, length), - index = -1, - stackA = getArray(), - stackB = getArray(); + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + var result = Array(length); while (++index < length) { - baseMerge(object, sources[index], callback, stackA, stackB); + result[index] = array[index + start]; } - releaseArray(stackA); - releaseArray(stackB); - return object; + return result; } /** - * Creates a shallow clone of `object` excluding the specified properties. - * Property names may be specified as individual arguments or as arrays of - * property names. If a callback is provided it will be executed for each - * property of `object` omitting the properties the callback returns truey - * for. The callback is bound to `thisArg` and invoked with three arguments; - * (value, key, object). - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The source object. - * @param {Function|...string|string[]} [callback] The properties to omit or the - * function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns an object without the omitted properties. - * @example + * The base implementation of `_.some` without support for callback shorthands + * and `this` binding. * - * _.omit({ 'name': 'fred', 'age': 40 }, 'age'); - * // => { 'name': 'fred' } + * @private + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; + } + + /** + * The base implementation of `_.uniq` without support for callback shorthands + * and `this` binding. * - * _.omit({ 'name': 'fred', 'age': 40 }, function(value) { - * return typeof value == 'number'; - * }); - * // => { 'name': 'fred' } + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The function invoked per iteration. + * @returns {Array} Returns the new duplicate-value-free array. */ - function omit(object, callback, thisArg) { - var result = {}; - if (typeof callback != 'function') { - var props = []; - forIn(object, function(value, key) { - props.push(key); - }); - props = baseDifference(props, baseFlatten(arguments, true, false, 1)); + function baseUniq(array, iteratee) { + var index = -1, + indexOf = getIndexOf(), + length = array.length, + isCommon = indexOf == baseIndexOf, + isLarge = isCommon && length >= 200, + seen = isLarge ? createCache() : null, + result = []; - var index = -1, - length = props.length; + if (seen) { + indexOf = cacheIndexOf; + isCommon = false; + } else { + isLarge = false; + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value, index, array) : value; - while (++index < length) { - var key = props[index]; - result[key] = object[key]; + if (isCommon && value === value) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); } - } else { - callback = lodash.createCallback(callback, thisArg, 3); - forIn(object, function(value, key, object) { - if (!callback(value, key, object)) { - result[key] = value; + else if (indexOf(seen, computed, 0) < 0) { + if (iteratee || isLarge) { + seen.push(computed); } - }); + result.push(value); + } } return result; } /** - * Creates a two dimensional array of an object's key-value pairs, - * i.e. `[[key1, value1], [key2, value2]]`. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to inspect. - * @returns {Array} Returns new array of key-value pairs. - * @example + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. * - * _.pairs({ 'barney': 36, 'fred': 40 }); - * // => [['barney', 36], ['fred', 40]] (property order is not guaranteed across environments) + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. */ - function pairs(object) { + function baseValues(object, props) { var index = -1, - props = keys(object), length = props.length, result = Array(length); while (++index < length) { - var key = props[index]; - result[index] = [key, object[key]]; + result[index] = object[props[index]]; } return result; } /** - * Creates an array composed of the own enumerable property values of `object`. - * - * @static - * @memberOf _ - * @category Objects - * @param {Object} object The object to inspect. - * @returns {Array} Returns an array of property values. - * @example + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. * - * _.values({ 'one': 1, 'two': 2, 'three': 3 }); - * // => [1, 2, 3] (property order is not guaranteed across environments) + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to peform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. */ - function values(object) { + function baseWrapperValue(value, actions) { + var result = value; + if (result instanceof LazyWrapper) { + result = result.value(); + } var index = -1, - props = keys(object), - length = props.length, - result = Array(length); + length = actions.length; while (++index < length) { - result[index] = object[props[index]]; + var args = [result], + action = actions[index]; + + push.apply(args, action.args); + result = action.func.apply(action.thisArg, args); } return result; } - /*--------------------------------------------------------------------------*/ - /** - * Checks if a given value is present in a collection using strict equality - * for comparisons, i.e. `===`. If `fromIndex` is negative, it is used as the - * offset from the end of the collection. - * - * @static - * @memberOf _ - * @alias include - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {*} target The value to check for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {boolean} Returns `true` if the `target` element is found, else `false`. - * @example - * - * _.contains([1, 2, 3], 1); - * // => true - * - * _.contains([1, 2, 3], 1, 2); - * // => false + * Performs a binary search of `array` to determine the index at which `value` + * should be inserted into `array` in order to maintain its sort order. * - * _.contains({ 'name': 'fred', 'age': 40 }, 'fred'); - * // => true - * - * _.contains('pebbles', 'eb'); - * // => true + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. */ - function contains(collection, target, fromIndex) { - var index = -1, - indexOf = getIndexOf(), - length = collection ? collection.length : 0, - result = false; - - fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex) || 0; - if (isArray(collection)) { - result = indexOf(collection, target, fromIndex) > -1; - } else if (typeof length == 'number') { - result = (isString(collection) ? collection.indexOf(target, fromIndex) : indexOf(collection, target, fromIndex)) > -1; - } else { - baseEach(collection, function(value) { - if (++index >= fromIndex) { - return !(result = value === target); + function binaryIndex(array, value, retHighest) { + var low = 0, + high = array ? array.length : low; + + if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid]; + + if ((retHighest ? (computed <= value) : (computed < value)) && computed !== null) { + low = mid + 1; + } else { + high = mid; } - }); + } + return high; } - return result; + return binaryIndexBy(array, value, identity, retHighest); } /** - * Checks if the given callback returns truey value for **all** elements of - * a collection. The callback is bound to `thisArg` and invoked with three - * arguments; (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias all - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {boolean} Returns `true` if all elements passed the callback check, - * else `false`. - * @example - * - * _.every([true, 1, null, 'yes']); - * // => false - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; - * - * // using "_.pluck" callback shorthand - * _.every(characters, 'age'); - * // => true + * This function is like `binaryIndex` except that it invokes `iteratee` for + * `value` and each element of `array` to compute their sort ranking. The + * iteratee is invoked with one argument; (value). * - * // using "_.where" callback shorthand - * _.every(characters, { 'age': 36 }); - * // => false + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} iteratee The function invoked per iteration. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. */ - function every(collection, callback, thisArg) { - var result = true; - callback = lodash.createCallback(callback, thisArg, 3); + function binaryIndexBy(array, value, iteratee, retHighest) { + value = iteratee(value); - if (isArray(collection)) { - var index = -1, - length = collection.length; + var low = 0, + high = array ? array.length : 0, + valIsNaN = value !== value, + valIsNull = value === null, + valIsUndef = value === undefined; - while (++index < length) { - if (!(result = !!callback(collection[index], index, collection))) { - break; - } + while (low < high) { + var mid = floor((low + high) / 2), + computed = iteratee(array[mid]), + isDef = computed !== undefined, + isReflexive = computed === computed; + + if (valIsNaN) { + var setLow = isReflexive || retHighest; + } else if (valIsNull) { + setLow = isReflexive && isDef && (retHighest || computed != null); + } else if (valIsUndef) { + setLow = isReflexive && (retHighest || isDef); + } else if (computed == null) { + setLow = false; + } else { + setLow = retHighest ? (computed <= value) : (computed < value); + } + if (setLow) { + low = mid + 1; + } else { + high = mid; } - } else { - baseEach(collection, function(value, index, collection) { - return (result = !!callback(value, index, collection)); - }); } - return result; + return nativeMin(high, MAX_ARRAY_INDEX); } /** - * Iterates over elements of a collection, returning an array of all elements - * the callback returns truey for. The callback is bound to `thisArg` and - * invoked with three arguments; (value, index|key, collection). + * A specialized version of `baseCallback` which only supports `this` binding + * and specifying the number of arguments to provide to `func`. * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias select - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new array of elements that passed the callback check. - * @example - * - * var evens = _.filter([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; }); - * // => [2, 4, 6] - * - * var characters = [ - * { 'name': 'barney', 'age': 36, 'blocked': false }, - * { 'name': 'fred', 'age': 40, 'blocked': true } - * ]; - * - * // using "_.pluck" callback shorthand - * _.filter(characters, 'blocked'); - * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }] - * - * // using "_.where" callback shorthand - * _.filter(characters, { 'age': 36 }); - * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }] + * @private + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {number} [argCount] The number of arguments to provide to `func`. + * @returns {Function} Returns the callback. */ - function filter(collection, callback, thisArg) { - var result = []; - callback = lodash.createCallback(callback, thisArg, 3); - - if (isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - var value = collection[index]; - if (callback(value, index, collection)) { - result.push(value); - } - } - } else { - baseEach(collection, function(value, index, collection) { - if (callback(value, index, collection)) { - result.push(value); - } - }); + function bindCallback(func, thisArg, argCount) { + if (typeof func != 'function') { + return identity; } - return result; + if (thisArg === undefined) { + return func; + } + switch (argCount) { + case 1: return function(value) { + return func.call(thisArg, value); + }; + case 3: return function(value, index, collection) { + return func.call(thisArg, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(thisArg, accumulator, value, index, collection); + }; + case 5: return function(value, other, key, object, source) { + return func.call(thisArg, value, other, key, object, source); + }; + } + return function() { + return func.apply(thisArg, arguments); + }; } /** - * Iterates over elements of a collection, returning the first element that - * the callback returns truey for. The callback is bound to `thisArg` and - * invoked with three arguments; (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias detect, findWhere - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the found element, else `undefined`. - * @example - * - * var characters = [ - * { 'name': 'barney', 'age': 36, 'blocked': false }, - * { 'name': 'fred', 'age': 40, 'blocked': true }, - * { 'name': 'pebbles', 'age': 1, 'blocked': false } - * ]; + * Creates a clone of the given array buffer. * - * _.find(characters, function(chr) { - * return chr.age < 40; - * }); - * // => { 'name': 'barney', 'age': 36, 'blocked': false } - * - * // using "_.where" callback shorthand - * _.find(characters, { 'age': 1 }); - * // => { 'name': 'pebbles', 'age': 1, 'blocked': false } - * - * // using "_.pluck" callback shorthand - * _.find(characters, 'blocked'); - * // => { 'name': 'fred', 'age': 40, 'blocked': true } + * @private + * @param {ArrayBuffer} buffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. */ - function find(collection, callback, thisArg) { - callback = lodash.createCallback(callback, thisArg, 3); - - if (isArray(collection)) { - var index = -1, - length = collection.length; - - while (++index < length) { - var value = collection[index]; - if (callback(value, index, collection)) { - return value; - } + function bufferClone(buffer) { + return bufferSlice.call(buffer, 0); + } + if (!bufferSlice) { + // PhantomJS has `ArrayBuffer` and `Uint8Array` but not `Float64Array`. + bufferClone = !(ArrayBuffer && Uint8Array) ? constant(null) : function(buffer) { + var byteLength = buffer.byteLength, + floatLength = Float64Array ? floor(byteLength / FLOAT64_BYTES_PER_ELEMENT) : 0, + offset = floatLength * FLOAT64_BYTES_PER_ELEMENT, + result = new ArrayBuffer(byteLength); + + if (floatLength) { + var view = new Float64Array(result, 0, floatLength); + view.set(new Float64Array(buffer, 0, floatLength)); + } + if (byteLength != offset) { + view = new Uint8Array(result, offset); + view.set(new Uint8Array(buffer, offset)); } - } else { - var result; - baseEach(collection, function(value, index, collection) { - if (callback(value, index, collection)) { - result = value; - return false; - } - }); return result; - } + }; } /** - * Iterates over elements of a collection, executing the callback for each - * element. The callback is bound to `thisArg` and invoked with three arguments; - * (value, index|key, collection). Callbacks may exit iteration early by - * explicitly returning `false`. - * - * Note: As with other "Collections" methods, objects with a `length` property - * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn` - * may be used for object iteration. - * - * @static - * @memberOf _ - * @alias each - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function} [callback=identity] The function called per iteration. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array|Object|string} Returns `collection`. - * @example - * - * _([1, 2, 3]).forEach(function(num) { console.log(num); }).join(','); - * // => logs each number and returns '1,2,3' + * Creates an array that is the composition of partially applied arguments, + * placeholders, and provided arguments into a single array of arguments. * - * _.forEach({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { console.log(num); }); - * // => logs each number and returns the object (property order is not guaranteed across environments) + * @private + * @param {Array|Object} args The provided arguments. + * @param {Array} partials The arguments to prepend to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @returns {Array} Returns the new array of composed arguments. */ - function forEach(collection, callback, thisArg) { - if (callback && typeof thisArg == 'undefined' && isArray(collection)) { - var index = -1, - length = collection.length; + function composeArgs(args, partials, holders) { + var holdersLength = holders.length, + argsIndex = -1, + argsLength = nativeMax(args.length - holdersLength, 0), + leftIndex = -1, + leftLength = partials.length, + result = Array(argsLength + leftLength); - while (++index < length) { - if (callback(collection[index], index, collection) === false) { - break; - } - } - } else { - baseEach(collection, callback, thisArg); + while (++leftIndex < leftLength) { + result[leftIndex] = partials[leftIndex]; } - return collection; + while (++argsIndex < holdersLength) { + result[holders[argsIndex]] = args[argsIndex]; + } + while (argsLength--) { + result[leftIndex++] = args[argsIndex++]; + } + return result; } /** - * Creates an object composed of keys generated from the results of running - * each element of a collection through the callback. The corresponding value - * of each key is an array of the elements responsible for generating the key. - * The callback is bound to `thisArg` and invoked with three arguments; - * (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false` - * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.groupBy([4.2, 6.1, 6.4], function(num) { return Math.floor(num); }); - * // => { '4': [4.2], '6': [6.1, 6.4] } - * - * _.groupBy([4.2, 6.1, 6.4], function(num) { return this.floor(num); }, Math); - * // => { '4': [4.2], '6': [6.1, 6.4] } - * - * // using "_.pluck" callback shorthand - * _.groupBy(['one', 'two', 'three'], 'length'); - * // => { '3': ['one', 'two'], '5': ['three'] } - */ - var groupBy = createAggregator(function(result, value, key) { - (hasOwnProperty.call(result, key) ? result[key] : result[key] = []).push(value); - }); - - /** - * Creates an array of values by running each element in the collection - * through the callback. The callback is bound to `thisArg` and invoked with - * three arguments; (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. + * This function is like `composeArgs` except that the arguments composition + * is tailored for `_.partialRight`. * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias collect - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new array of the results of each `callback` execution. - * @example - * - * _.map([1, 2, 3], function(num) { return num * 3; }); - * // => [3, 6, 9] - * - * _.map({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { return num * 3; }); - * // => [3, 6, 9] (property order is not guaranteed across environments) - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; - * - * // using "_.pluck" callback shorthand - * _.map(characters, 'name'); - * // => ['barney', 'fred'] + * @private + * @param {Array|Object} args The provided arguments. + * @param {Array} partials The arguments to append to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @returns {Array} Returns the new array of composed arguments. */ - function map(collection, callback, thisArg) { - var index = -1, - length = collection ? collection.length : 0, - result = Array(typeof length == 'number' ? length : 0); + function composeArgsRight(args, partials, holders) { + var holdersIndex = -1, + holdersLength = holders.length, + argsIndex = -1, + argsLength = nativeMax(args.length - holdersLength, 0), + rightIndex = -1, + rightLength = partials.length, + result = Array(argsLength + rightLength); - callback = lodash.createCallback(callback, thisArg, 3); - if (isArray(collection)) { - while (++index < length) { - result[index] = callback(collection[index], index, collection); - } - } else { - baseEach(collection, function(value, key, collection) { - result[++index] = callback(value, key, collection); - }); + while (++argsIndex < argsLength) { + result[argsIndex] = args[argsIndex]; + } + var offset = argsIndex; + while (++rightIndex < rightLength) { + result[offset + rightIndex] = partials[rightIndex]; + } + while (++holdersIndex < holdersLength) { + result[offset + holders[holdersIndex]] = args[argsIndex++]; } return result; } /** - * Retrieves the value of a specified property from all elements in the collection. - * - * @static - * @memberOf _ - * @type Function - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {string} property The property to pluck. - * @returns {Array} Returns a new array of property values. - * @example + * Creates a function that aggregates a collection, creating an accumulator + * object composed from the results of running each element in the collection + * through an iteratee. * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; + * **Note:** This function is used to create `_.countBy`, `_.groupBy`, `_.indexBy`, + * and `_.partition`. * - * _.pluck(characters, 'name'); - * // => ['barney', 'fred'] + * @private + * @param {Function} setter The function to set keys and values of the accumulator object. + * @param {Function} [initializer] The function to initialize the accumulator object. + * @returns {Function} Returns the new aggregator function. */ - var pluck = map; + function createAggregator(setter, initializer) { + return function(collection, iteratee, thisArg) { + var result = initializer ? initializer() : {}; + iteratee = getCallback(iteratee, thisArg, 3); + + if (isArray(collection)) { + var index = -1, + length = collection.length; + + while (++index < length) { + var value = collection[index]; + setter(result, value, iteratee(value, index, collection), collection); + } + } else { + baseEach(collection, function(value, key, collection) { + setter(result, value, iteratee(value, key, collection), collection); + }); + } + return result; + }; + } /** - * The opposite of `_.filter` this method returns the elements of a - * collection that the callback does **not** return truey for. - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. + * Creates a function that assigns properties of source object(s) to a given + * destination object. * - * @static - * @memberOf _ - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new array of elements that failed the callback check. - * @example - * - * var odds = _.reject([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; }); - * // => [1, 3, 5] - * - * var characters = [ - * { 'name': 'barney', 'age': 36, 'blocked': false }, - * { 'name': 'fred', 'age': 40, 'blocked': true } - * ]; - * - * // using "_.pluck" callback shorthand - * _.reject(characters, 'blocked'); - * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }] + * **Note:** This function is used to create `_.assign`, `_.defaults`, and `_.merge`. * - * // using "_.where" callback shorthand - * _.reject(characters, { 'age': 36 }); - * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }] + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. */ - function reject(collection, callback, thisArg) { - callback = lodash.createCallback(callback, thisArg, 3); - return filter(collection, function(value, index, collection) { - return !callback(value, index, collection); + function createAssigner(assigner) { + return restParam(function(object, sources) { + var index = -1, + length = object == null ? 0 : sources.length, + customizer = length > 2 ? sources[length - 2] : undefined, + guard = length > 2 ? sources[2] : undefined, + thisArg = length > 1 ? sources[length - 1] : undefined; + + if (typeof customizer == 'function') { + customizer = bindCallback(customizer, thisArg, 5); + length -= 2; + } else { + customizer = typeof thisArg == 'function' ? thisArg : undefined; + length -= (customizer ? 1 : 0); + } + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, customizer); + } + } + return object; }); } /** - * Checks if the callback returns a truey value for **any** element of a - * collection. The function returns as soon as it finds a passing value and - * does not iterate over the entire collection. The callback is bound to - * `thisArg` and invoked with three arguments; (value, index|key, collection). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias any - * @category Collections - * @param {Array|Object|string} collection The collection to iterate over. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {boolean} Returns `true` if any element passed the callback check, - * else `false`. - * @example - * - * _.some([null, 0, 'yes', false], Boolean); - * // => true - * - * var characters = [ - * { 'name': 'barney', 'age': 36, 'blocked': false }, - * { 'name': 'fred', 'age': 40, 'blocked': true } - * ]; - * - * // using "_.pluck" callback shorthand - * _.some(characters, 'blocked'); - * // => true + * Creates a `baseEach` or `baseEachRight` function. * - * // using "_.where" callback shorthand - * _.some(characters, { 'age': 1 }); - * // => false + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. */ - function some(collection, callback, thisArg) { - var result; - callback = lodash.createCallback(callback, thisArg, 3); - - if (isArray(collection)) { - var index = -1, - length = collection.length; + function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + var length = collection ? getLength(collection) : 0; + if (!isLength(length)) { + return eachFunc(collection, iteratee); + } + var index = fromRight ? length : -1, + iterable = toObject(collection); - while (++index < length) { - if ((result = callback(collection[index], index, collection))) { + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { break; } } - } else { - baseEach(collection, function(value, index, collection) { - return !(result = callback(value, index, collection)); - }); - } - return !!result; + return collection; + }; } - /*--------------------------------------------------------------------------*/ - /** - * Creates an array with all falsey values removed. The values `false`, `null`, - * `0`, `""`, `undefined`, and `NaN` are all falsey. + * Creates a base function for `_.forIn` or `_.forInRight`. * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to compact. - * @returns {Array} Returns a new array of filtered values. - * @example + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var iterable = toObject(object), + props = keysFunc(object), + length = props.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length)) { + var key = props[index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + + /** + * Creates a function that wraps `func` and invokes it with the `this` + * binding of `thisArg`. * - * _.compact([0, 1, false, 2, '', 3]); - * // => [1, 2, 3] + * @private + * @param {Function} func The function to bind. + * @param {*} [thisArg] The `this` binding of `func`. + * @returns {Function} Returns the new bound function. */ - function compact(array) { - var index = -1, - length = array ? array.length : 0, - result = []; + function createBindWrapper(func, thisArg) { + var Ctor = createCtorWrapper(func); - while (++index < length) { - var value = array[index]; - if (value) { - result.push(value); - } + function wrapper() { + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return fn.apply(thisArg, arguments); } - return result; + return wrapper; } /** - * Creates an array excluding all values of the provided arrays using strict - * equality for comparisons, i.e. `===`. + * Creates a `Set` cache object to optimize linear searches of large arrays. * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to process. - * @param {...Array} [values] The arrays of values to exclude. - * @returns {Array} Returns a new array of filtered values. - * @example + * @private + * @param {Array} [values] The values to cache. + * @returns {null|Object} Returns the new cache object if `Set` is supported, else `null`. + */ + var createCache = !(nativeCreate && Set) ? constant(null) : function(values) { + return new SetCache(values); + }; + + /** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. * - * _.difference([1, 2, 3, 4, 5], [5, 2, 10]); - * // => [1, 3, 4] + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. */ - function difference(array) { - return baseDifference(array, baseFlatten(arguments, true, true, 1)); + function createCtorWrapper(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. + // See https://people.mozilla.org/~jorendorff/es6-draft.html#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + switch (args.length) { + case 0: return new Ctor; + case 1: return new Ctor(args[0]); + case 2: return new Ctor(args[0], args[1]); + case 3: return new Ctor(args[0], args[1], args[2]); + case 4: return new Ctor(args[0], args[1], args[2], args[3]); + case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); + } + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; } /** - * Gets the first element or first `n` elements of an array. If a callback - * is provided elements at the beginning of the array are returned as long - * as the callback returns truey. The callback is bound to `thisArg` and - * invoked with three arguments; (value, index, array). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. + * Creates a `_.find` or `_.findLast` function. * - * @static - * @memberOf _ - * @alias head, take - * @category Arrays - * @param {Array} array The array to query. - * @param {Function|Object|number|string} [callback] The function called - * per element or the number of elements to return. If a property name or - * object is provided it will be used to create a "_.pluck" or "_.where" - * style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the first element(s) of `array`. - * @example - * - * _.first([1, 2, 3]); - * // => 1 - * - * _.first([1, 2, 3], 2); - * // => [1, 2] + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new find function. + */ + function createFind(eachFunc, fromRight) { + return function(collection, predicate, thisArg) { + predicate = getCallback(predicate, thisArg, 3); + if (isArray(collection)) { + var index = baseFindIndex(collection, predicate, fromRight); + return index > -1 ? collection[index] : undefined; + } + return baseFind(collection, predicate, eachFunc); + }; + } + + /** + * Creates a function for `_.forEach` or `_.forEachRight`. * - * _.first([1, 2, 3], function(num) { - * return num < 3; - * }); - * // => [1, 2] + * @private + * @param {Function} arrayFunc The function to iterate over an array. + * @param {Function} eachFunc The function to iterate over a collection. + * @returns {Function} Returns the new each function. + */ + function createForEach(arrayFunc, eachFunc) { + return function(collection, iteratee, thisArg) { + return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection)) + ? arrayFunc(collection, iteratee) + : eachFunc(collection, bindCallback(iteratee, thisArg, 3)); + }; + } + + /** + * Creates a function for `_.forOwn` or `_.forOwnRight`. * - * var characters = [ - * { 'name': 'barney', 'blocked': true, 'employer': 'slate' }, - * { 'name': 'fred', 'blocked': false, 'employer': 'slate' }, - * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' } - * ]; + * @private + * @param {Function} objectFunc The function to iterate over an object. + * @returns {Function} Returns the new each function. + */ + function createForOwn(objectFunc) { + return function(object, iteratee, thisArg) { + if (typeof iteratee != 'function' || thisArg !== undefined) { + iteratee = bindCallback(iteratee, thisArg, 3); + } + return objectFunc(object, iteratee); + }; + } + + /** + * Creates a function for `_.reduce` or `_.reduceRight`. * - * // using "_.pluck" callback shorthand - * _.first(characters, 'blocked'); - * // => [{ 'name': 'barney', 'blocked': true, 'employer': 'slate' }] + * @private + * @param {Function} arrayFunc The function to iterate over an array. + * @param {Function} eachFunc The function to iterate over a collection. + * @returns {Function} Returns the new each function. + */ + function createReduce(arrayFunc, eachFunc) { + return function(collection, iteratee, accumulator, thisArg) { + var initFromArray = arguments.length < 3; + return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection)) + ? arrayFunc(collection, iteratee, accumulator, initFromArray) + : baseReduce(collection, getCallback(iteratee, thisArg, 4), accumulator, initFromArray, eachFunc); + }; + } + + /** + * Creates a function that wraps `func` and invokes it with optional `this` + * binding of, partial application, and currying. * - * // using "_.where" callback shorthand - * _.pluck(_.first(characters, { 'employer': 'slate' }), 'name'); - * // => ['barney', 'fred'] + * @private + * @param {Function|string} func The function or method name to reference. + * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [partialsRight] The arguments to append to those provided to the new function. + * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. */ - function first(array, callback, thisArg) { - var n = 0, - length = array ? array.length : 0; + function createHybridWrapper(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { + var isAry = bitmask & ARY_FLAG, + isBind = bitmask & BIND_FLAG, + isBindKey = bitmask & BIND_KEY_FLAG, + isCurry = bitmask & CURRY_FLAG, + isCurryBound = bitmask & CURRY_BOUND_FLAG, + isCurryRight = bitmask & CURRY_RIGHT_FLAG, + Ctor = isBindKey ? null : createCtorWrapper(func); + + function wrapper() { + // Avoid `arguments` object use disqualifying optimizations by + // converting it to an array before providing it to other functions. + var length = arguments.length, + index = length, + args = Array(length); + + while (index--) { + args[index] = arguments[index]; + } + if (partials) { + args = composeArgs(args, partials, holders); + } + if (partialsRight) { + args = composeArgsRight(args, partialsRight, holdersRight); + } + if (isCurry || isCurryRight) { + var placeholder = wrapper.placeholder, + argsHolders = replaceHolders(args, placeholder); + + length -= argsHolders.length; + if (length < arity) { + var newArgPos = argPos ? arrayCopy(argPos) : null, + newArity = nativeMax(arity - length, 0), + newsHolders = isCurry ? argsHolders : null, + newHoldersRight = isCurry ? null : argsHolders, + newPartials = isCurry ? args : null, + newPartialsRight = isCurry ? null : args; + + bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG); + bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG); + + if (!isCurryBound) { + bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG); + } + var newData = [func, bitmask, thisArg, newPartials, newsHolders, newPartialsRight, newHoldersRight, newArgPos, ary, newArity], + result = createHybridWrapper.apply(undefined, newData); + + if (isLaziable(func)) { + setData(result, newData); + } + result.placeholder = placeholder; + return result; + } + } + var thisBinding = isBind ? thisArg : this, + fn = isBindKey ? thisBinding[func] : func; - if (typeof callback != 'number' && callback != null) { - var index = -1; - callback = lodash.createCallback(callback, thisArg, 3); - while (++index < length && callback(array[index], index, array)) { - n++; + if (argPos) { + args = reorder(args, argPos); } - } else { - n = callback; - if (n == null || thisArg) { - return array ? array[0] : undefined; + if (isAry && ary < args.length) { + args.length = ary; + } + if (this && this !== root && this instanceof wrapper) { + fn = Ctor || createCtorWrapper(func); } + return fn.apply(thisBinding, args); } - return slice(array, 0, nativeMin(nativeMax(0, n), length)); + return wrapper; } /** - * Flattens a nested array (the nesting can be to any depth). If `isShallow` - * is truey, the array will only be flattened a single level. If a callback - * is provided each element of the array is passed through the callback before - * flattening. The callback is bound to `thisArg` and invoked with three - * arguments; (value, index, array). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to flatten. - * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a new flattened array. - * @example - * - * _.flatten([1, [2], [3, [[4]]]]); - * // => [1, 2, 3, 4]; + * Creates a function that wraps `func` and invokes it with the optional `this` + * binding of `thisArg` and the `partials` prepended to those provided to + * the wrapper. * - * _.flatten([1, [2], [3, [[4]]]], true); - * // => [1, 2, 3, [[4]]]; - * - * var characters = [ - * { 'name': 'barney', 'age': 30, 'pets': ['hoppy'] }, - * { 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] } - * ]; - * - * // using "_.pluck" callback shorthand - * _.flatten(characters, 'pets'); - * // => ['hoppy', 'baby puss', 'dino'] + * @private + * @param {Function} func The function to partially apply arguments to. + * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to the new function. + * @returns {Function} Returns the new bound function. */ - function flatten(array, isShallow, callback, thisArg) { - // juggle arguments - if (typeof isShallow != 'boolean' && isShallow != null) { - thisArg = callback; - callback = (typeof isShallow != 'function' && thisArg && thisArg[isShallow] === array) ? null : isShallow; - isShallow = false; - } - if (callback != null) { - array = map(array, callback, thisArg); + function createPartialWrapper(func, bitmask, thisArg, partials) { + var isBind = bitmask & BIND_FLAG, + Ctor = createCtorWrapper(func); + + function wrapper() { + // Avoid `arguments` object use disqualifying optimizations by + // converting it to an array before providing it `func`. + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(argsLength + leftLength); + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return fn.apply(isBind ? thisArg : this, args); } - return baseFlatten(array, isShallow); + return wrapper; } /** - * Gets the index at which the first occurrence of `value` is found using - * strict equality for comparisons, i.e. `===`. If the array is already sorted - * providing `true` for `fromIndex` will run a faster binary search. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to search. - * @param {*} value The value to search for. - * @param {boolean|number} [fromIndex=0] The index to search from or `true` - * to perform a binary search on a sorted array. - * @returns {number} Returns the index of the matched value or `-1`. - * @example + * Creates a function that either curries or invokes `func` with optional + * `this` binding and partially applied arguments. * - * _.indexOf([1, 2, 3, 1, 2, 3], 2); - * // => 1 - * - * _.indexOf([1, 2, 3, 1, 2, 3], 2, 3); - * // => 4 - * - * _.indexOf([1, 1, 2, 2, 3, 3], 2, true); - * // => 2 + * @private + * @param {Function|string} func The function or method name to reference. + * @param {number} bitmask The bitmask of flags. + * The bitmask may be composed of the following flags: + * 1 - `_.bind` + * 2 - `_.bindKey` + * 4 - `_.curry` or `_.curryRight` of a bound function + * 8 - `_.curry` + * 16 - `_.curryRight` + * 32 - `_.partial` + * 64 - `_.partialRight` + * 128 - `_.rearg` + * 256 - `_.ary` + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to be partially applied. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. */ - function indexOf(array, value, fromIndex) { - if (typeof fromIndex == 'number') { - var length = array ? array.length : 0; - fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex || 0); - } else if (fromIndex) { - var index = sortedIndex(array, value); - return array[index] === value ? index : -1; + function createWrapper(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { + var isBindKey = bitmask & BIND_KEY_FLAG; + if (!isBindKey && typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = partials ? partials.length : 0; + if (!length) { + bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG); + partials = holders = null; + } + length -= (holders ? holders.length : 0); + if (bitmask & PARTIAL_RIGHT_FLAG) { + var partialsRight = partials, + holdersRight = holders; + + partials = holders = null; + } + var data = isBindKey ? null : getData(func), + newData = [func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity]; + + if (data) { + mergeData(newData, data); + bitmask = newData[1]; + arity = newData[9]; + } + newData[9] = arity == null + ? (isBindKey ? 0 : func.length) + : (nativeMax(arity - length, 0) || 0); + + if (bitmask == BIND_FLAG) { + var result = createBindWrapper(newData[0], newData[2]); + } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !newData[4].length) { + result = createPartialWrapper.apply(undefined, newData); + } else { + result = createHybridWrapper.apply(undefined, newData); } - return baseIndexOf(array, value, fromIndex); + var setter = data ? baseSetData : setData; + return setter(result, newData); } /** - * Creates an array of unique values present in all provided arrays using - * strict equality for comparisons, i.e. `===`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {...Array} [array] The arrays to inspect. - * @returns {Array} Returns an array of composite values. - * @example + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. * - * _.intersection([1, 2, 3], [101, 2, 1, 10], [2, 1]); - * // => [1, 2] + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparing arrays. + * @param {boolean} [isLoose] Specify performing partial comparisons. + * @param {Array} [stackA] Tracks traversed `value` objects. + * @param {Array} [stackB] Tracks traversed `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. */ - function intersection(array) { - var args = arguments, - argsLength = args.length, - argsIndex = -1, - caches = getArray(), - index = -1, - indexOf = getIndexOf(), - length = array ? array.length : 0, - result = [], - seen = getArray(); + function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) { + var index = -1, + arrLength = array.length, + othLength = other.length; - while (++argsIndex < argsLength) { - var value = args[argsIndex]; - caches[argsIndex] = indexOf === baseIndexOf && - (value ? value.length : 0) >= largeArraySize && - createCache(argsIndex ? args[argsIndex] : seen); + if (arrLength != othLength && !(isLoose && othLength > arrLength)) { + return false; } - outer: - while (++index < length) { - var cache = caches[0]; - value = array[index]; + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index], + result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined; - if ((cache ? cacheIndexOf(cache, value) : indexOf(seen, value)) < 0) { - argsIndex = argsLength; - (cache || seen).push(value); - while (--argsIndex) { - cache = caches[argsIndex]; - if ((cache ? cacheIndexOf(cache, value) : indexOf(args[argsIndex], value)) < 0) { - continue outer; - } + if (result !== undefined) { + if (result) { + continue; } - result.push(value); + return false; } - } - while (argsLength--) { - cache = caches[argsLength]; - if (cache) { - releaseObject(cache); + // Recursively compare arrays (susceptible to call stack limits). + if (isLoose) { + if (!arraySome(other, function(othValue) { + return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB); + })) { + return false; + } + } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB))) { + return false; } } - releaseArray(caches); - releaseArray(seen); - return result; + return true; } /** - * Gets the last element or last `n` elements of an array. If a callback is - * provided elements at the end of the array are returned as long as the - * callback returns truey. The callback is bound to `thisArg` and invoked - * with three arguments; (value, index, array). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to query. - * @param {Function|Object|number|string} [callback] The function called - * per element or the number of elements to return. If a property name or - * object is provided it will be used to create a "_.pluck" or "_.where" - * style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {*} Returns the last element(s) of `array`. - * @example + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. * - * _.last([1, 2, 3]); - * // => 3 - * - * _.last([1, 2, 3], 2); - * // => [2, 3] - * - * _.last([1, 2, 3], function(num) { - * return num > 1; - * }); - * // => [2, 3] - * - * var characters = [ - * { 'name': 'barney', 'blocked': false, 'employer': 'slate' }, - * { 'name': 'fred', 'blocked': true, 'employer': 'slate' }, - * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' } - * ]; + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. * - * // using "_.pluck" callback shorthand - * _.pluck(_.last(characters, 'blocked'), 'name'); - * // => ['fred', 'pebbles'] + * @private + * @param {Object} value The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag) { + switch (tag) { + case boolTag: + case dateTag: + // Coerce dates and booleans to numbers, dates to milliseconds and booleans + // to `1` or `0` treating invalid dates coerced to `NaN` as not equal. + return +object == +other; + + case errorTag: + return object.name == other.name && object.message == other.message; + + case numberTag: + // Treat `NaN` vs. `NaN` as equal. + return (object != +object) + ? other != +other + : object == +other; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings primitives and string + // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details. + return object == (other + ''); + } + return false; + } + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. * - * // using "_.where" callback shorthand - * _.last(characters, { 'employer': 'na' }); - * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }] + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparing values. + * @param {boolean} [isLoose] Specify performing partial comparisons. + * @param {Array} [stackA] Tracks traversed `value` objects. + * @param {Array} [stackB] Tracks traversed `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ - function last(array, callback, thisArg) { - var n = 0, - length = array ? array.length : 0; + function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) { + var objProps = keys(object), + objLength = objProps.length, + othProps = keys(other), + othLength = othProps.length; - if (typeof callback != 'number' && callback != null) { - var index = length; - callback = lodash.createCallback(callback, thisArg, 3); - while (index-- && callback(array[index], index, array)) { - n++; + if (objLength != othLength && !isLoose) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) { + return false; } - } else { - n = callback; - if (n == null || thisArg) { - return array ? array[length - 1] : undefined; + } + var skipCtor = isLoose; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key], + result = customizer ? customizer(isLoose ? othValue : objValue, isLoose? objValue : othValue, key) : undefined; + + // Recursively compare objects (susceptible to call stack limits). + if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) { + return false; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (!skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + return false; } } - return slice(array, nativeMax(0, length - n)); + return true; } /** - * Uses a binary search to determine the smallest index at which a value - * should be inserted into a given sorted array in order to maintain the sort - * order of the array. If a callback is provided it will be executed for - * `value` and each element of `array` to compute their sort ranking. The - * callback is bound to `thisArg` and invoked with one argument; (value). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to inspect. - * @param {*} value The value to evaluate. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * _.sortedIndex([20, 30, 50], 40); - * // => 2 - * - * // using "_.pluck" callback shorthand - * _.sortedIndex([{ 'x': 20 }, { 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x'); - * // => 2 - * - * var dict = { - * 'wordToNumber': { 'twenty': 20, 'thirty': 30, 'fourty': 40, 'fifty': 50 } - * }; + * Gets the appropriate "callback" function. If the `_.callback` method is + * customized this function returns the custom method, otherwise it returns + * the `baseCallback` function. If arguments are provided the chosen function + * is invoked with them and its result is returned. * - * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) { - * return dict.wordToNumber[word]; - * }); - * // => 2 + * @private + * @returns {Function} Returns the chosen function or its result. + */ + function getCallback(func, thisArg, argCount) { + var result = lodash.callback || callback; + result = result === callback ? baseCallback : result; + return argCount ? result(func, thisArg, argCount) : result; + } + + /** + * Gets metadata for `func`. * - * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) { - * return this.wordToNumber[word]; - * }, dict); - * // => 2 + * @private + * @param {Function} func The function to query. + * @returns {*} Returns the metadata for `func`. */ - function sortedIndex(array, value, callback, thisArg) { - var low = 0, - high = array ? array.length : low; + var getData = !metaMap ? noop : function(func) { + return metaMap.get(func); + }; - // explicitly reference `identity` for better inlining in Firefox - callback = callback ? lodash.createCallback(callback, thisArg, 1) : identity; - value = callback(value); + /** + * Gets the name of `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {string} Returns the function name. + */ + function getFuncName(func) { + var result = func.name, + array = realNames[result], + length = array ? array.length : 0; - while (low < high) { - var mid = (low + high) >>> 1; - (callback(array[mid]) < value) - ? low = mid + 1 - : high = mid; + while (length--) { + var data = array[length], + otherFunc = data.func; + if (otherFunc == null || otherFunc == func) { + return data.name; + } } - return low; + return result; } /** - * Creates an array of unique values, in order, of the provided arrays using - * strict equality for comparisons, i.e. `===`. - * - * @static - * @memberOf _ - * @category Arrays - * @param {...Array} [array] The arrays to inspect. - * @returns {Array} Returns an array of composite values. - * @example + * Gets the appropriate "indexOf" function. If the `_.indexOf` method is + * customized this function returns the custom method, otherwise it returns + * the `baseIndexOf` function. If arguments are provided the chosen function + * is invoked with them and its result is returned. * - * _.union([1, 2, 3], [101, 2, 1, 10], [2, 1]); - * // => [1, 2, 3, 101, 10] + * @private + * @returns {Function|number} Returns the chosen function or its result. */ - function union(array) { - return baseUniq(baseFlatten(arguments, true, true)); + function getIndexOf(collection, target, fromIndex) { + var result = lodash.indexOf || indexOf; + result = result === indexOf ? baseIndexOf : result; + return collection ? result(collection, target, fromIndex) : result; } /** - * Creates a duplicate-value-free version of an array using strict equality - * for comparisons, i.e. `===`. If the array is sorted, providing - * `true` for `isSorted` will use a faster algorithm. If a callback is provided - * each element of `array` is passed through the callback before uniqueness - * is computed. The callback is bound to `thisArg` and invoked with three - * arguments; (value, index, array). - * - * If a property name is provided for `callback` the created "_.pluck" style - * callback will return the property value of the given element. - * - * If an object is provided for `callback` the created "_.where" style callback - * will return `true` for elements that have the properties of the given object, - * else `false`. - * - * @static - * @memberOf _ - * @alias unique - * @category Arrays - * @param {Array} array The array to process. - * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted. - * @param {Function|Object|string} [callback=identity] The function called - * per iteration. If a property name or object is provided it will be used - * to create a "_.pluck" or "_.where" style callback, respectively. - * @param {*} [thisArg] The `this` binding of `callback`. - * @returns {Array} Returns a duplicate-value-free array. - * @example + * Gets the "length" property value of `object`. * - * _.uniq([1, 2, 1, 3, 1]); - * // => [1, 2, 3] - * - * _.uniq([1, 1, 2, 2, 3], true); - * // => [1, 2, 3] - * - * _.uniq(['A', 'b', 'C', 'a', 'B', 'c'], function(letter) { return letter.toLowerCase(); }); - * // => ['A', 'b', 'C'] + * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) + * that affects Safari on at least iOS 8.1-8.3 ARM64. * - * _.uniq([1, 2.5, 3, 1.5, 2, 3.5], function(num) { return this.floor(num); }, Math); - * // => [1, 2.5, 3] + * @private + * @param {Object} object The object to query. + * @returns {*} Returns the "length" value. + */ + var getLength = baseProperty('length'); + + /** + * Gets the propery names, values, and compare flags of `object`. * - * // using "_.pluck" callback shorthand - * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }, { 'x': 2 }] + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. */ - function uniq(array, isSorted, callback, thisArg) { - // juggle arguments - if (typeof isSorted != 'boolean' && isSorted != null) { - thisArg = callback; - callback = (typeof isSorted != 'function' && thisArg && thisArg[isSorted] === array) ? null : isSorted; - isSorted = false; - } - if (callback != null) { - callback = lodash.createCallback(callback, thisArg, 3); + function getMatchData(object) { + var result = pairs(object), + length = result.length; + + while (length--) { + result[length][2] = isStrictComparable(result[length][1]); } - return baseUniq(array, isSorted, callback); + return result; } /** - * Creates an array excluding all provided values using strict equality for - * comparisons, i.e. `===`. + * Gets the native function at `key` of `object`. * - * @static - * @memberOf _ - * @category Arrays - * @param {Array} array The array to filter. - * @param {...*} [value] The values to exclude. - * @returns {Array} Returns a new array of filtered values. - * @example - * - * _.without([1, 2, 1, 0, 3, 1, 4], 0, 1); - * // => [2, 3, 4] + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. */ - function without(array) { - return baseDifference(array, slice(arguments, 1)); + function getNative(object, key) { + var value = object == null ? undefined : object[key]; + return isNative(value) ? value : undefined; } - /*--------------------------------------------------------------------------*/ - /** - * Creates a function that, when called, invokes `func` with the `this` - * binding of `thisArg` and prepends any additional `bind` arguments to those - * provided to the bound function. + * Gets the view, applying any `transforms` to the `start` and `end` positions. * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to bind. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {...*} [arg] Arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * var func = function(greeting) { - * return greeting + ' ' + this.name; - * }; + * @private + * @param {number} start The start of the view. + * @param {number} end The end of the view. + * @param {Array} [transforms] The transformations to apply to the view. + * @returns {Object} Returns an object containing the `start` and `end` + * positions of the view. + */ + function getView(start, end, transforms) { + var index = -1, + length = transforms ? transforms.length : 0; + + while (++index < length) { + var data = transforms[index], + size = data.size; + + switch (data.type) { + case 'drop': start += size; break; + case 'dropRight': end -= size; break; + case 'take': end = nativeMin(end, start + size); break; + case 'takeRight': start = nativeMax(start, end - size); break; + } + } + return { 'start': start, 'end': end }; + } + + /** + * Initializes an array clone. * - * func = _.bind(func, { 'name': 'fred' }, 'hi'); - * func(); - * // => 'hi fred' + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. */ - function bind(func, thisArg) { - return arguments.length > 2 - ? createWrapper(func, 17, slice(arguments, 2), null, thisArg) - : createWrapper(func, 1, null, null, thisArg); + function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add array properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; } /** - * Produces a callback bound to an optional `thisArg`. If `func` is a property - * name the created callback will return the property value for a given element. - * If `func` is an object the created callback will return `true` for elements - * that contain the equivalent object properties, otherwise it will return `false`. + * Initializes an object clone. * - * @static - * @memberOf _ - * @category Functions - * @param {*} [func=identity] The value to convert to a callback. - * @param {*} [thisArg] The `this` binding of the created callback. - * @param {number} [argCount] The number of arguments the callback accepts. - * @returns {Function} Returns a callback function. - * @example - * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; - * - * // wrap to create custom callback shorthands - * _.createCallback = _.wrap(_.createCallback, function(func, callback, thisArg) { - * var match = /^(.+?)__([gl]t)(.+)$/.exec(callback); - * return !match ? func(callback, thisArg) : function(object) { - * return match[2] == 'gt' ? object[match[1]] > match[3] : object[match[1]] < match[3]; - * }; - * }); - * - * _.filter(characters, 'age__gt38'); - * // => [{ 'name': 'fred', 'age': 40 }] + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. */ - function createCallback(func, thisArg, argCount) { - var type = typeof func; - if (func == null || type == 'function') { - return baseCreateCallback(func, thisArg, argCount); - } - // handle "_.pluck" style callback shorthands - if (type != 'object') { - return function(object) { - return object[func]; - }; - } - var props = keys(func), - key = props[0], - a = func[key]; - - // handle "_.where" style callback shorthands - if (props.length == 1 && a === a && !isObject(a)) { - // fast path the common case of providing an object with a single - // property containing a primitive value - return function(object) { - var b = object[key]; - return a === b && (a !== 0 || (1 / a == 1 / b)); - }; + function initCloneObject(object) { + var Ctor = object.constructor; + if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) { + Ctor = Object; } - return function(object) { - var length = props.length, - result = false; - - while (length--) { - if (!(result = baseIsEqual(object[props[length]], func[props[length]], null, true))) { - break; - } - } - return result; - }; + return new Ctor; } /** - * Creates a function that will delay the execution of `func` until after - * `wait` milliseconds have elapsed since the last time it was invoked. - * Provide an options object to indicate that `func` should be invoked on - * the leading and/or trailing edge of the `wait` timeout. Subsequent calls - * to the debounced function will return the result of the last `func` call. - * - * Note: If `leading` and `trailing` options are `true` `func` will be called - * on the trailing edge of the timeout only if the the debounced function is - * invoked more than once during the `wait` timeout. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to debounce. - * @param {number} wait The number of milliseconds to delay. - * @param {Object} [options] The options object. - * @param {boolean} [options.leading=false] Specify execution on the leading edge of the timeout. - * @param {number} [options.maxWait] The maximum time `func` is allowed to be delayed before it's called. - * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout. - * @returns {Function} Returns the new debounced function. - * @example - * - * // avoid costly calculations while the window size is in flux - * var lazyLayout = _.debounce(calculateLayout, 150); - * jQuery(window).on('resize', lazyLayout); + * Initializes an object clone based on its `toStringTag`. * - * // execute `sendMail` when the click event is fired, debouncing subsequent calls - * jQuery('#postbox').on('click', _.debounce(sendMail, 300, { - * 'leading': true, - * 'trailing': false - * }); + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. * - * // ensure `batchLog` is executed once after 1 second of debounced calls - * var source = new EventSource('/stream'); - * source.addEventListener('message', _.debounce(batchLog, 250, { - * 'maxWait': 1000 - * }, false); + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. */ - function debounce(func, wait, options) { - var args, - maxTimeoutId, - result, - stamp, - thisArg, - timeoutId, - trailingCall, - lastCalled = 0, - maxWait = false, - trailing = true; - - if (!isFunction(func)) { - throw new TypeError; + function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return bufferClone(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + // Safari 5 mobile incorrectly has `Object` as the constructor of typed arrays. + if (Ctor instanceof Ctor) { + Ctor = ctorByTag[tag]; + } + var buffer = object.buffer; + return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length); + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + var result = new Ctor(object.source, reFlags.exec(object)); + result.lastIndex = object.lastIndex; } - wait = nativeMax(0, wait) || 0; - if (options === true) { - var leading = true; - trailing = false; - } else if (isObject(options)) { - leading = options.leading; - maxWait = 'maxWait' in options && (nativeMax(wait, options.maxWait) || 0); - trailing = 'trailing' in options ? options.trailing : trailing; - } - var delayed = function() { - var remaining = wait - (now() - stamp); - if (remaining <= 0) { - if (maxTimeoutId) { - clearTimeout(maxTimeoutId); - } - var isCalled = trailingCall; - maxTimeoutId = timeoutId = trailingCall = undefined; - if (isCalled) { - lastCalled = now(); - result = func.apply(thisArg, args); - if (!timeoutId && !maxTimeoutId) { - args = thisArg = null; - } - } - } else { - timeoutId = setTimeout(delayed, remaining); - } - }; - - var maxDelayed = function() { - if (timeoutId) { - clearTimeout(timeoutId); - } - maxTimeoutId = timeoutId = trailingCall = undefined; - if (trailing || (maxWait !== wait)) { - lastCalled = now(); - result = func.apply(thisArg, args); - if (!timeoutId && !maxTimeoutId) { - args = thisArg = null; - } - } - }; - - return function() { - args = arguments; - stamp = now(); - thisArg = this; - trailingCall = trailing && (timeoutId || !leading); - - if (maxWait === false) { - var leadingCall = leading && !timeoutId; - } else { - if (!maxTimeoutId && !leading) { - lastCalled = stamp; - } - var remaining = maxWait - (stamp - lastCalled), - isCalled = remaining <= 0; - - if (isCalled) { - if (maxTimeoutId) { - maxTimeoutId = clearTimeout(maxTimeoutId); - } - lastCalled = stamp; - result = func.apply(thisArg, args); - } - else if (!maxTimeoutId) { - maxTimeoutId = setTimeout(maxDelayed, remaining); - } - } - if (isCalled && timeoutId) { - timeoutId = clearTimeout(timeoutId); - } - else if (!timeoutId && wait !== maxWait) { - timeoutId = setTimeout(delayed, wait); - } - if (leadingCall) { - isCalled = true; - result = func.apply(thisArg, args); - } - if (isCalled && !timeoutId && !maxTimeoutId) { - args = thisArg = null; - } - return result; - }; + return result; } /** - * Creates a function that, when executed, will only call the `func` function - * at most once per every `wait` milliseconds. Provide an options object to - * indicate that `func` should be invoked on the leading and/or trailing edge - * of the `wait` timeout. Subsequent calls to the throttled function will - * return the result of the last `func` call. - * - * Note: If `leading` and `trailing` options are `true` `func` will be called - * on the trailing edge of the timeout only if the the throttled function is - * invoked more than once during the `wait` timeout. - * - * @static - * @memberOf _ - * @category Functions - * @param {Function} func The function to throttle. - * @param {number} wait The number of milliseconds to throttle executions to. - * @param {Object} [options] The options object. - * @param {boolean} [options.leading=true] Specify execution on the leading edge of the timeout. - * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout. - * @returns {Function} Returns the new throttled function. - * @example - * - * // avoid excessively updating the position while scrolling - * var throttled = _.throttle(updatePosition, 100); - * jQuery(window).on('scroll', throttled); + * Checks if `value` is array-like. * - * // execute `renewToken` when the click event is fired, but not more than once every 5 minutes - * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, { - * 'trailing': false - * })); + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. */ - function throttle(func, wait, options) { - var leading = true, - trailing = true; - - if (!isFunction(func)) { - throw new TypeError; - } - if (options === false) { - leading = false; - } else if (isObject(options)) { - leading = 'leading' in options ? options.leading : leading; - trailing = 'trailing' in options ? options.trailing : trailing; - } - debounceOptions.leading = leading; - debounceOptions.maxWait = wait; - debounceOptions.trailing = trailing; - - return debounce(func, wait, debounceOptions); + function isArrayLike(value) { + return value != null && isLength(getLength(value)); } - /*--------------------------------------------------------------------------*/ - /** - * This method returns the first argument provided to it. - * - * @static - * @memberOf _ - * @category Utilities - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example + * Checks if `value` is a valid array-like index. * - * var object = { 'name': 'fred' }; - * _.identity(object) === object; - * // => true + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. */ - function identity(value) { - return value; + function isIndex(value, length) { + value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1; + length = length == null ? MAX_SAFE_INTEGER : length; + return value > -1 && value % 1 == 0 && value < length; } /** - * Adds function properties of a source object to the `lodash` function and - * chainable wrapper. - * - * @static - * @memberOf _ - * @category Utilities - * @param {Object} object The object of function properties to add to `lodash`. - * @param {Object} object The object of function properties to add to `lodash`. - * @example - * - * _.mixin({ - * 'capitalize': function(string) { - * return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase(); - * } - * }); + * Checks if the provided arguments are from an iteratee call. * - * _.capitalize('fred'); - * // => 'Fred' - * - * _('fred').capitalize(); - * // => 'Fred' + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`. */ - function mixin(object, source) { - var ctor = object, - isFunc = !source || isFunction(ctor); - - if (!source) { - ctor = lodashWrapper; - source = object; - object = lodash; + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; } - forEach(functions(source), function(methodName) { - var func = object[methodName] = source[methodName]; - if (isFunc) { - ctor.prototype[methodName] = function() { - var value = this.__wrapped__, - args = [value]; - - push.apply(args, arguments); - var result = func.apply(object, args); - if (value && typeof value == 'object' && value === result) { - return this; - } - result = new ctor(result); - result.__chain__ = this.__chain__; - return result; - }; - } - }); + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object)) { + var other = object[index]; + return value === value ? (value === other) : (other !== other); + } + return false; } /** - * A no-operation function. - * - * @static - * @memberOf _ - * @category Utilities - * @example + * Checks if `value` is a property name and not a property path. * - * var object = { 'name': 'fred' }; - * _.noop(object) === undefined; - * // => true + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. */ - function noop() { - // no operation performed + function isKey(value, object) { + var type = typeof value; + if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') { + return true; + } + if (isArray(value)) { + return false; + } + var result = !reIsDeepProp.test(value); + return result || (object != null && value in toObject(object)); } - /*--------------------------------------------------------------------------*/ - /** - * Creates a `lodash` object that wraps the given value with explicit - * method chaining enabled. - * - * @static - * @memberOf _ - * @category Chaining - * @param {*} value The value to wrap. - * @returns {Object} Returns the wrapper object. - * @example + * Checks if `func` has a lazy counterpart. * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 }, - * { 'name': 'pebbles', 'age': 1 } - * ]; - * - * var youngest = _.chain(characters) - * .sortBy('age') - * .map(function(chr) { return chr.name + ' is ' + chr.age; }) - * .first() - * .value(); - * // => 'pebbles is 1' + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` has a lazy counterpart, else `false`. */ - function chain(value) { - value = new lodashWrapper(value); - value.__chain__ = true; - return value; + function isLaziable(func) { + var funcName = getFuncName(func); + if (!(funcName in LazyWrapper.prototype)) { + return false; + } + var other = lodash[funcName]; + if (func === other) { + return true; + } + var data = getData(other); + return !!data && func === data[0]; } /** - * Enables explicit method chaining on the wrapper object. - * - * @name chain - * @memberOf _ - * @category Chaining - * @returns {*} Returns the wrapper object. - * @example + * Checks if `value` is a valid array-like length. * - * var characters = [ - * { 'name': 'barney', 'age': 36 }, - * { 'name': 'fred', 'age': 40 } - * ]; + * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength). * - * // without explicit chaining - * _(characters).first(); - * // => { 'name': 'barney', 'age': 36 } + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + */ + function isLength(value) { + return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. * - * // with explicit chaining - * _(characters).chain() - * .first() - * .pick('age') - * .value() - * // => { 'age': 36 } + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. */ - function wrapperChain() { - this.__chain__ = true; - return this; + function isStrictComparable(value) { + return value === value && !isObject(value); } /** - * Produces the `toString` result of the wrapped value. + * Merges the function metadata of `source` into `data`. * - * @name toString - * @memberOf _ - * @category Chaining - * @returns {string} Returns the string result. - * @example + * Merging metadata reduces the number of wrappers required to invoke a function. + * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` + * may be applied regardless of execution order. Methods like `_.ary` and `_.rearg` + * augment function arguments, making the order in which they are executed important, + * preventing the merging of metadata. However, we make an exception for a safe + * common case where curried functions have `_.ary` and or `_.rearg` applied. * - * _([1, 2, 3]).toString(); - * // => '1,2,3' + * @private + * @param {Array} data The destination metadata. + * @param {Array} source The source metadata. + * @returns {Array} Returns `data`. */ - function wrapperToString() { - return String(this.__wrapped__); + function mergeData(data, source) { + var bitmask = data[1], + srcBitmask = source[1], + newBitmask = bitmask | srcBitmask, + isCommon = newBitmask < ARY_FLAG; + + var isCombo = + (srcBitmask == ARY_FLAG && bitmask == CURRY_FLAG) || + (srcBitmask == ARY_FLAG && bitmask == REARG_FLAG && data[7].length <= source[8]) || + (srcBitmask == (ARY_FLAG | REARG_FLAG) && bitmask == CURRY_FLAG); + + // Exit early if metadata can't be merged. + if (!(isCommon || isCombo)) { + return data; + } + // Use source `thisArg` if available. + if (srcBitmask & BIND_FLAG) { + data[2] = source[2]; + // Set when currying a bound function. + newBitmask |= (bitmask & BIND_FLAG) ? 0 : CURRY_BOUND_FLAG; + } + // Compose partial arguments. + var value = source[3]; + if (value) { + var partials = data[3]; + data[3] = partials ? composeArgs(partials, value, source[4]) : arrayCopy(value); + data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : arrayCopy(source[4]); + } + // Compose partial right arguments. + value = source[5]; + if (value) { + partials = data[5]; + data[5] = partials ? composeArgsRight(partials, value, source[6]) : arrayCopy(value); + data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : arrayCopy(source[6]); + } + // Use source `argPos` if available. + value = source[7]; + if (value) { + data[7] = arrayCopy(value); + } + // Use source `ary` if it's smaller. + if (srcBitmask & ARY_FLAG) { + data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); + } + // Use source `arity` if one is not provided. + if (data[9] == null) { + data[9] = source[9]; + } + // Use source `func` and merge bitmasks. + data[0] = source[0]; + data[1] = newBitmask; + + return data; } /** - * Extracts the wrapped value. - * - * @name valueOf - * @memberOf _ - * @alias value - * @category Chaining - * @returns {*} Returns the wrapped value. - * @example + * A specialized version of `_.pick` which picks `object` properties specified + * by `props`. * - * _([1, 2, 3]).valueOf(); - * // => [1, 2, 3] + * @private + * @param {Object} object The source object. + * @param {string[]} props The property names to pick. + * @returns {Object} Returns the new object. */ - function wrapperValueOf() { - return this.__wrapped__; - } - - /*--------------------------------------------------------------------------*/ - - lodash.assign = assign; - lodash.bind = bind; - lodash.chain = chain; - lodash.compact = compact; - lodash.createCallback = createCallback; - lodash.debounce = debounce; - lodash.difference = difference; - lodash.filter = filter; - lodash.flatten = flatten; - lodash.forEach = forEach; - lodash.forIn = forIn; - lodash.forOwn = forOwn; - lodash.functions = functions; - lodash.groupBy = groupBy; - lodash.intersection = intersection; - lodash.keys = keys; - lodash.map = map; - lodash.merge = merge; - lodash.omit = omit; - lodash.pairs = pairs; - lodash.pluck = pluck; - lodash.reject = reject; - lodash.throttle = throttle; - lodash.union = union; - lodash.uniq = uniq; - lodash.values = values; - lodash.without = without; + function pickByArray(object, props) { + object = toObject(object); - // add aliases - lodash.collect = map; - lodash.each = forEach; - lodash.extend = assign; - lodash.methods = functions; - lodash.select = filter; - lodash.unique = uniq; - - // add functions to `lodash.prototype` - mixin(lodash); - - /*--------------------------------------------------------------------------*/ - - // add functions that return unwrapped values when chaining - lodash.clone = clone; - lodash.cloneDeep = cloneDeep; - lodash.contains = contains; - lodash.every = every; - lodash.find = find; - lodash.identity = identity; - lodash.indexOf = indexOf; - lodash.isArguments = isArguments; - lodash.isArray = isArray; - lodash.isEmpty = isEmpty; - lodash.isEqual = isEqual; - lodash.isFunction = isFunction; - lodash.isObject = isObject; - lodash.isPlainObject = isPlainObject; - lodash.isString = isString; - lodash.mixin = mixin; - lodash.noop = noop; - lodash.some = some; - lodash.sortedIndex = sortedIndex; + var index = -1, + length = props.length, + result = {}; - // add aliases - lodash.all = every; - lodash.any = some; - lodash.detect = find; - lodash.findWhere = find; - lodash.include = contains; - - forOwn(lodash, function(func, methodName) { - if (!lodash.prototype[methodName]) { - lodash.prototype[methodName] = function() { - var args = [this.__wrapped__], - chainAll = this.__chain__; - - push.apply(args, arguments); - var result = func.apply(lodash, args); - return chainAll - ? new lodashWrapper(result, chainAll) - : result; - }; + while (++index < length) { + var key = props[index]; + if (key in object) { + result[key] = object[key]; + } } - }); - - /*--------------------------------------------------------------------------*/ - - // add functions capable of returning wrapped and unwrapped values when chaining - lodash.first = first; - lodash.last = last; + return result; + } - // add aliases - lodash.take = first; - lodash.head = first; + /** + * A specialized version of `_.pick` which picks `object` properties `predicate` + * returns truthy for. + * + * @private + * @param {Object} object The source object. + * @param {Function} predicate The function invoked per iteration. + * @returns {Object} Returns the new object. + */ + function pickByCallback(object, predicate) { + var result = {}; + baseForIn(object, function(value, key, object) { + if (predicate(value, key, object)) { + result[key] = value; + } + }); + return result; + } - forOwn(lodash, function(func, methodName) { - var callbackable = methodName !== 'sample'; - if (!lodash.prototype[methodName]) { - lodash.prototype[methodName]= function(n, guard) { - var chainAll = this.__chain__, - result = func(this.__wrapped__, n, guard); + /** + * Reorder `array` according to the specified indexes where the element at + * the first index is assigned as the first element, the element at + * the second index is assigned as the second element, and so on. + * + * @private + * @param {Array} array The array to reorder. + * @param {Array} indexes The arranged array indexes. + * @returns {Array} Returns `array`. + */ + function reorder(array, indexes) { + var arrLength = array.length, + length = nativeMin(indexes.length, arrLength), + oldArray = arrayCopy(array); - return !chainAll && (n == null || (guard && !(callbackable && typeof n == 'function'))) - ? result - : new lodashWrapper(result, chainAll); - }; + while (length--) { + var index = indexes[length]; + array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; } - }); - - /*--------------------------------------------------------------------------*/ + return array; + } /** - * The semantic version number. + * Sets metadata for `func`. * - * @static - * @memberOf _ - * @type string + * **Note:** If this function becomes hot, i.e. is invoked a lot in a short + * period of time, it will trip its breaker and transition to an identity function + * to avoid garbage collection pauses in V8. See [V8 issue 2070](https://code.google.com/p/v8/issues/detail?id=2070) + * for more details. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. */ - lodash.VERSION = '2.3.0'; - - // add "Chaining" functions to the wrapper - lodash.prototype.chain = wrapperChain; - lodash.prototype.toString = wrapperToString; - lodash.prototype.value = wrapperValueOf; - lodash.prototype.valueOf = wrapperValueOf; + var setData = (function() { + var count = 0, + lastCalled = 0; - // add `Array` functions that return unwrapped values - baseEach(['join', 'pop', 'shift'], function(methodName) { - var func = arrayRef[methodName]; - lodash.prototype[methodName] = function() { - var chainAll = this.__chain__, - result = func.apply(this.__wrapped__, arguments); + return function(key, value) { + var stamp = now(), + remaining = HOT_SPAN - (stamp - lastCalled); - return chainAll - ? new lodashWrapper(result, chainAll) - : result; + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return key; + } + } else { + count = 0; + } + return baseSetData(key, value); }; - }); + }()); - // add `Array` functions that return the wrapped value - baseEach(['push', 'reverse', 'sort', 'unshift'], function(methodName) { - var func = arrayRef[methodName]; - lodash.prototype[methodName] = function() { - func.apply(this.__wrapped__, arguments); - return this; - }; - }); + /** + * A fallback implementation of `_.isPlainObject` which checks if `value` + * is an object created by the `Object` constructor or has a `[[Prototype]]` + * of `null`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + */ + function shimIsPlainObject(value) { + var Ctor, + support = lodash.support; + + // Exit early for non `Object` objects. + if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isHostObject(value)) || + (!hasOwnProperty.call(value, 'constructor') && + (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor))) || + (!support.argsTag && isArguments(value))) { + return false; + } + // IE < 9 iterates inherited properties before own properties. If the first + // iterated property is an object's own property then there are no inherited + // enumerable properties. + var result; + if (support.ownLast) { + baseForIn(value, function(subValue, key, object) { + result = hasOwnProperty.call(object, key); + return false; + }); + return result !== false; + } + // In most environments an object's own properties are iterated before + // its inherited properties. If the last iterated property is an object's + // own property then there are no inherited enumerable properties. + baseForIn(value, function(subValue, key) { + result = key; + }); + return result === undefined || hasOwnProperty.call(value, result); + } - // add `Array` functions that return new wrapped values - baseEach(['concat', 'slice', 'splice'], function(methodName) { - var func = arrayRef[methodName]; - lodash.prototype[methodName] = function() { - return new lodashWrapper(func.apply(this.__wrapped__, arguments), this.__chain__); - }; - }); + /** + * A fallback implementation of `Object.keys` which creates an array of the + * own enumerable property names of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function shimKeys(object) { + var props = keysIn(object), + propsLength = props.length, + length = propsLength && object.length; - // avoid array-like object bugs with `Array#shift` and `Array#splice` - // in IE < 9, Firefox < 10, Narwhal, and RingoJS - if (!support.spliceObjects) { - baseEach(['pop', 'shift', 'splice'], function(methodName) { - var func = arrayRef[methodName], - isSplice = methodName == 'splice'; + var allowIndexes = !!length && isLength(length) && + (isArray(object) || isArguments(object) || isString(object)); - lodash.prototype[methodName] = function() { - var chainAll = this.__chain__, - value = this.__wrapped__, - result = func.apply(value, arguments); + var index = -1, + result = []; - if (value.length === 0) { - delete value[0]; - } - return (chainAll || isSplice) - ? new lodashWrapper(result, chainAll) - : result; - }; - }); + while (++index < propsLength) { + var key = props[index]; + if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) { + result.push(key); + } + } + return result; } - /*--------------------------------------------------------------------------*/ + /** + * Converts `value` to an object if it's not one. + * + * @private + * @param {*} value The value to process. + * @returns {Object} Returns the object. + */ + function toObject(value) { + if (lodash.support.unindexedChars && isString(value)) { + var index = -1, + length = value.length, + result = Object(value); - if (freeExports && freeModule) { - // in Node.js or RingoJS - if (moduleExports) { - (freeModule.exports = lodash)._ = lodash; + while (++index < length) { + result[index] = value.charAt(index); + } + return result; } + return isObject(value) ? value : Object(value); + } + /** + * Converts `value` to property path array if it's not one. + * + * @private + * @param {*} value The value to process. + * @returns {Array} Returns the property path array. + */ + function toPath(value) { + if (isArray(value)) { + return value; + } + var result = []; + baseToString(value).replace(rePropName, function(match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; } - else { - // in a browser or Rhino - root._ = lodash; + + /** + * Creates a clone of `wrapper`. + * + * @private + * @param {Object} wrapper The wrapper to clone. + * @returns {Object} Returns the cloned wrapper. + */ + function wrapperClone(wrapper) { + return wrapper instanceof LazyWrapper + ? wrapper.clone() + : new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__, arrayCopy(wrapper.__actions__)); } -}.call(this)); -(function(e){if("function"==typeof bootstrap)bootstrap("osmauth",e);else if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else if("undefined"!=typeof ses){if(!ses.ok())return;ses.makeOsmAuth=e}else"undefined"!=typeof window?window.osmAuth=e():global.osmAuth=e()})(function(){var define,ses,bootstrap,module,exports; -return (function(e,t,n){function i(n,s){if(!t[n]){if(!e[n]){var o=typeof require=="function"&&require;if(!s&&o)return o(n,!0);if(r)return r(n,!0);throw new Error("Cannot find module '"+n+"'")}var u=t[n]={exports:{}};e[n][0].call(u.exports,function(t){var r=e[n][1][t];return i(r?r:t)},u,u.exports)}return t[n].exports}var r=typeof require=="function"&&require;for(var s=0;s [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ + function chunk(array, size, guard) { + if (guard ? isIterateeCall(array, size, guard) : size == null) { + size = 1; + } else { + size = nativeMax(+size || 1, 1); + } + var index = 0, + length = array ? array.length : 0, + resIndex = -1, + result = Array(ceil(length / size)); - var oauth = {}; + while (index < length) { + result[++resIndex] = baseSlice(array, index, (index += size)); + } + return result; + } - // authenticated users will also have a request token secret, but it's - // not used in transactions with the server - oauth.authenticated = function() { - return !!(token('oauth_token') && token('oauth_token_secret')); - }; + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + var index = -1, + length = array ? array.length : 0, + resIndex = -1, + result = []; - oauth.logout = function() { - token('oauth_token', ''); - token('oauth_token_secret', ''); - token('oauth_request_token_secret', ''); - return oauth; - }; - - // TODO: detect lack of click event - oauth.authenticate = function(callback) { - if (oauth.authenticated()) return callback(); - - oauth.logout(); - - // ## Getting a request token - var params = timenonce(getAuth(o)), - url = o.url + '/oauth/request_token'; + while (++index < length) { + var value = array[index]; + if (value) { + result[++resIndex] = value; + } + } + return result; + } - params.oauth_signature = ohauth.signature( - o.oauth_secret, '', - ohauth.baseString('POST', url, params)); + /** + * Creates an array of unique `array` values not included in the other + * provided arrays using [`SameValueZero`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The arrays of values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.difference([1, 2, 3], [4, 2]); + * // => [1, 3] + */ + var difference = restParam(function(array, values) { + return isArrayLike(array) + ? baseDifference(array, baseFlatten(values, false, true)) + : []; + }); - if (!o.singlepage) { - // Create a 600x550 popup window in the center of the screen - var w = 600, h = 550, - settings = [ - ['width', w], ['height', h], - ['left', screen.width / 2 - w / 2], - ['top', screen.height / 2 - h / 2]].map(function(x) { - return x.join('='); - }).join(','), - popup = window.open('about:blank', 'oauth_window', settings); - } + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @alias head + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.first([1, 2, 3]); + * // => 1 + * + * _.first([]); + * // => undefined + */ + function first(array) { + return array ? array[0] : undefined; + } - // Request a request token. When this is complete, the popup - // window is redirected to OSM's authorization page. - ohauth.xhr('POST', url, params, null, {}, reqTokenDone); - o.loading(); + /** + * Flattens a nested array. If `isDeep` is `true` the array is recursively + * flattened, otherwise it is only flattened a single level. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to flatten. + * @param {boolean} [isDeep] Specify a deep flatten. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, 3, [4]]]); + * // => [1, 2, 3, [4]] + * + * // using `isDeep` + * _.flatten([1, [2, 3, [4]]], true); + * // => [1, 2, 3, 4] + */ + function flatten(array, isDeep, guard) { + var length = array ? array.length : 0; + if (guard && isIterateeCall(array, isDeep, guard)) { + isDeep = false; + } + return length ? baseFlatten(array, isDeep) : []; + } - function reqTokenDone(err, xhr) { - o.done(); - if (err) return callback(err); - var resp = ohauth.stringQs(xhr.response); - token('oauth_request_token_secret', resp.oauth_token_secret); - var authorize_url = o.url + '/oauth/authorize?' + ohauth.qsString({ - oauth_token: resp.oauth_token, - oauth_callback: location.href.replace('index.html', '') - .replace(/#.*/, '') + o.landing - }); + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it is used as the offset + * from the end of `array`. If `array` is sorted providing `true` for `fromIndex` + * performs a faster binary search. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {boolean|number} [fromIndex=0] The index to search from or `true` + * to perform a binary search on a sorted array. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // using `fromIndex` + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + * + * // performing a binary search + * _.indexOf([1, 1, 2, 2], 2, true); + * // => 2 + */ + function indexOf(array, value, fromIndex) { + var length = array ? array.length : 0; + if (!length) { + return -1; + } + if (typeof fromIndex == 'number') { + fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex; + } else if (fromIndex) { + var index = binaryIndex(array, value), + other = array[index]; - if (o.singlepage) { - location.href = authorize_url; - } else { - popup.location = authorize_url; - } - } + if (value === value ? (value === other) : (other !== other)) { + return index; + } + return -1; + } + return baseIndexOf(array, value, fromIndex || 0); + } - // Called by a function in a landing page, in the popup window. The - // window closes itself. - window.authComplete = function(token) { - var oauth_token = ohauth.stringQs(token.split('?')[1]); - get_access_token(oauth_token.oauth_token); - delete window.authComplete; - }; + /** + * Creates an array of unique values that are included in all of the provided + * arrays using [`SameValueZero`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of shared values. + * @example + * _.intersection([1, 2], [4, 2], [2, 1]); + * // => [2] + */ + var intersection = restParam(function(arrays) { + var othLength = arrays.length, + othIndex = othLength, + caches = Array(length), + indexOf = getIndexOf(), + isCommon = indexOf == baseIndexOf, + result = []; - // ## Getting an request token - // - // At this point we have an `oauth_token`, brought in from a function - // call on a landing page popup. - function get_access_token(oauth_token) { - var url = o.url + '/oauth/access_token', - params = timenonce(getAuth(o)), - request_token_secret = token('oauth_request_token_secret'); - params.oauth_token = oauth_token; - params.oauth_signature = ohauth.signature( - o.oauth_secret, - request_token_secret, - ohauth.baseString('POST', url, params)); + while (othIndex--) { + var value = arrays[othIndex] = isArrayLike(value = arrays[othIndex]) ? value : []; + caches[othIndex] = (isCommon && value.length >= 120) ? createCache(othIndex && value) : null; + } + var array = arrays[0], + index = -1, + length = array ? array.length : 0, + seen = caches[0]; - // ## Getting an access token - // - // The final token required for authentication. At this point - // we have a `request token secret` - ohauth.xhr('POST', url, params, null, {}, accessTokenDone); - o.loading(); + outer: + while (++index < length) { + value = array[index]; + if ((seen ? cacheIndexOf(seen, value) : indexOf(result, value, 0)) < 0) { + var othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if ((cache ? cacheIndexOf(cache, value) : indexOf(arrays[othIndex], value, 0)) < 0) { + continue outer; + } } - - function accessTokenDone(err, xhr) { - o.done(); - if (err) return callback(err); - var access_token = ohauth.stringQs(xhr.response); - token('oauth_token', access_token.oauth_token); - token('oauth_token_secret', access_token.oauth_token_secret); - callback(null, oauth); + if (seen) { + seen.push(value); } - }; + result.push(value); + } + } + return result; + }); - oauth.bootstrapToken = function(oauth_token, callback) { - // ## Getting an request token - // At this point we have an `oauth_token`, brought in from a function - // call on a landing page popup. - function get_access_token(oauth_token) { - var url = o.url + '/oauth/access_token', - params = timenonce(getAuth(o)), - request_token_secret = token('oauth_request_token_secret'); - params.oauth_token = oauth_token; - params.oauth_signature = ohauth.signature( - o.oauth_secret, - request_token_secret, - ohauth.baseString('POST', url, params)); + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array ? array.length : 0; + return length ? array[length - 1] : undefined; + } - // ## Getting an access token - // The final token required for authentication. At this point - // we have a `request token secret` - ohauth.xhr('POST', url, params, null, {}, accessTokenDone); - o.loading(); - } + /** + * Creates an array of unique values, in order, from all of the provided arrays + * using [`SameValueZero`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([1, 2], [4, 2], [2, 1]); + * // => [1, 2, 4] + */ + var union = restParam(function(arrays) { + return baseUniq(baseFlatten(arrays, false, true)); + }); - function accessTokenDone(err, xhr) { - o.done(); - if (err) return callback(err); - var access_token = ohauth.stringQs(xhr.response); - token('oauth_token', access_token.oauth_token); - token('oauth_token_secret', access_token.oauth_token_secret); - callback(null, oauth); - } + /** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero) + * for equality comparisons, in which only the first occurence of each element + * is kept. Providing `true` for `isSorted` performs a faster search algorithm + * for sorted arrays. If an iteratee function is provided it is invoked for + * each element in the array to generate the criterion by which uniqueness + * is computed. The `iteratee` is bound to `thisArg` and invoked with three + * arguments: (value, index, array). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias unique + * @category Array + * @param {Array} array The array to inspect. + * @param {boolean} [isSorted] Specify the array is sorted. + * @param {Function|Object|string} [iteratee] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new duplicate-value-free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + * + * // using `isSorted` + * _.uniq([1, 1, 2], true); + * // => [1, 2] + * + * // using an iteratee function + * _.uniq([1, 2.5, 1.5, 2], function(n) { + * return this.floor(n); + * }, Math); + * // => [1, 2.5] + * + * // using the `_.property` callback shorthand + * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + function uniq(array, isSorted, iteratee, thisArg) { + var length = array ? array.length : 0; + if (!length) { + return []; + } + if (isSorted != null && typeof isSorted != 'boolean') { + thisArg = iteratee; + iteratee = isIterateeCall(array, isSorted, thisArg) ? null : isSorted; + isSorted = false; + } + var callback = getCallback(); + if (!(iteratee == null && callback === baseCallback)) { + iteratee = callback(iteratee, thisArg, 3); + } + return (isSorted && getIndexOf() == baseIndexOf) + ? sortedUniq(array, iteratee) + : baseUniq(array, iteratee); + } - get_access_token(oauth_token); - }; + /** + * Creates an array excluding all provided values using + * [`SameValueZero`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @category Array + * @param {Array} array The array to filter. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.without([1, 2, 1, 3], 1, 2); + * // => [3] + */ + var without = restParam(function(array, values) { + return isArrayLike(array) + ? baseDifference(array, values) + : []; + }); - // # xhr - // - // A single XMLHttpRequest wrapper that does authenticated calls if the - // user has logged in. - oauth.xhr = function(options, callback) { - if (!oauth.authenticated()) { - if (o.auto) return oauth.authenticate(run); - else return callback('not authenticated', null); - } else return run(); + /*------------------------------------------------------------------------*/ - function run() { - var params = timenonce(getAuth(o)), - url = o.url + options.path, - oauth_token_secret = token('oauth_token_secret'); - - // https://tools.ietf.org/html/rfc5849#section-3.4.1.3.1 - if ((!options.options || !options.options.header || - options.options.header['Content-Type'] === 'application/x-www-form-urlencoded') && - options.content) { - params = xtend(params, ohauth.stringQs(options.content)); - } - - params.oauth_token = token('oauth_token'); - params.oauth_signature = ohauth.signature( - o.oauth_secret, - oauth_token_secret, - ohauth.baseString(options.method, url, params)); - - ohauth.xhr(options.method, - url, params, options.content, options.options, done); - } - - function done(err, xhr) { - if (err) return callback(err); - else if (xhr.responseXML) return callback(err, xhr.responseXML); - else return callback(err, xhr.response); - } - }; + /** + * Creates a `lodash` object that wraps `value` with explicit method + * chaining enabled. + * + * @static + * @memberOf _ + * @category Chain + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _.chain(users) + * .sortBy('age') + * .map(function(chr) { + * return chr.user + ' is ' + chr.age; + * }) + * .first() + * .value(); + * // => 'pebbles is 1' + */ + function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; + } - // pre-authorize this object, if we can just get a token and token_secret - // from the start - oauth.preauth = function(c) { - if (!c) return; - if (c.oauth_token) token('oauth_token', c.oauth_token); - if (c.oauth_token_secret) token('oauth_token_secret', c.oauth_token_secret); - return oauth; - }; + /** + * This method invokes `interceptor` and returns `value`. The interceptor is + * bound to `thisArg` and invoked with one argument; (value). The purpose of + * this method is to "tap into" a method chain in order to perform operations + * on intermediate results within the chain. + * + * @static + * @memberOf _ + * @category Chain + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @param {*} [thisArg] The `this` binding of `interceptor`. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ + function tap(value, interceptor, thisArg) { + interceptor.call(thisArg, value); + return value; + } - oauth.options = function(_) { - if (!arguments.length) return o; + /** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * + * @static + * @memberOf _ + * @category Chain + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @param {*} [thisArg] The `this` binding of `interceptor`. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ + function thru(value, interceptor, thisArg) { + return interceptor.call(thisArg, value); + } - o = _; + /** + * Enables explicit method chaining on the wrapper object. + * + * @name chain + * @memberOf _ + * @category Chain + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // without explicit chaining + * _(users).first(); + * // => { 'user': 'barney', 'age': 36 } + * + * // with explicit chaining + * _(users).chain() + * .first() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ + function wrapperChain() { + return chain(this); + } - o.url = o.url || 'http://www.openstreetmap.org'; - o.landing = o.landing || 'land.html'; + /** + * Executes the chained sequence and returns the wrapped result. + * + * @name commit + * @memberOf _ + * @category Chain + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapper = _(array).push(3); + * + * console.log(array); + * // => [1, 2] + * + * wrapper = wrapper.commit(); + * console.log(array); + * // => [1, 2, 3] + * + * wrapper.last(); + * // => 3 + * + * console.log(array); + * // => [1, 2, 3] + */ + function wrapperCommit() { + return new LodashWrapper(this.value(), this.__chain__); + } - o.singlepage = o.singlepage || false; + /** + * Creates a clone of the chained sequence planting `value` as the wrapped value. + * + * @name plant + * @memberOf _ + * @category Chain + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapper = _(array).map(function(value) { + * return Math.pow(value, 2); + * }); + * + * var other = [3, 4]; + * var otherWrapper = wrapper.plant(other); + * + * otherWrapper.value(); + * // => [9, 16] + * + * wrapper.value(); + * // => [1, 4] + */ + function wrapperPlant(value) { + var result, + parent = this; + + while (parent instanceof baseLodash) { + var clone = wrapperClone(parent); + if (result) { + previous.__wrapped__ = clone; + } else { + result = clone; + } + var previous = clone; + parent = parent.__wrapped__; + } + previous.__wrapped__ = value; + return result; + } - // Optional loading and loading-done functions for nice UI feedback. - // by default, no-ops - o.loading = o.loading || function() {}; - o.done = o.done || function() {}; + /** + * Reverses the wrapped array so the first element becomes the last, the + * second element becomes the second to last, and so on. + * + * **Note:** This method mutates the wrapped array. + * + * @name reverse + * @memberOf _ + * @category Chain + * @returns {Object} Returns the new reversed `lodash` wrapper instance. + * @example + * + * var array = [1, 2, 3]; + * + * _(array).reverse().value() + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function wrapperReverse() { + var value = this.__wrapped__; + if (value instanceof LazyWrapper) { + if (this.__actions__.length) { + value = new LazyWrapper(this); + } + return new LodashWrapper(value.reverse(), this.__chain__); + } + return this.thru(function(value) { + return value.reverse(); + }); + } - return oauth.preauth(o); - }; + /** + * Produces the result of coercing the unwrapped value to a string. + * + * @name toString + * @memberOf _ + * @category Chain + * @returns {string} Returns the coerced string value. + * @example + * + * _([1, 2, 3]).toString(); + * // => '1,2,3' + */ + function wrapperToString() { + return (this.value() + ''); + } - // 'stamp' an authentication object from `getAuth()` - // with a [nonce](http://en.wikipedia.org/wiki/Cryptographic_nonce) - // and timestamp - function timenonce(o) { - o.oauth_timestamp = ohauth.timestamp(); - o.oauth_nonce = ohauth.nonce(); - return o; - } + /** + * Executes the chained sequence to extract the unwrapped value. + * + * @name value + * @memberOf _ + * @alias run, toJSON, valueOf + * @category Chain + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ + function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); + } - // get/set tokens. These are prefixed with the base URL so that `osm-auth` - // can be used with multiple APIs and the keys in `localStorage` - // will not clash - var token; + /*------------------------------------------------------------------------*/ - if (store.enabled) { - token = function (x, y) { - if (arguments.length === 1) return store.get(o.url + x); - else if (arguments.length === 2) return store.set(o.url + x, y); - }; - } else { - var storage = {}; - token = function (x, y) { - if (arguments.length === 1) return storage[o.url + x]; - else if (arguments.length === 2) return storage[o.url + x] = y; - }; + /** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * The predicate is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias all + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // using the `_.matchesProperty` callback shorthand + * _.every(users, 'active', false); + * // => true + * + * // using the `_.property` callback shorthand + * _.every(users, 'active'); + * // => false + */ + function every(collection, predicate, thisArg) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (thisArg && isIterateeCall(collection, predicate, thisArg)) { + predicate = null; } - - // Get an authentication object. If you just add and remove properties - // from a single object, you'll need to use `delete` to make sure that - // it doesn't contain undesired properties for authentication - function getAuth(o) { - return { - oauth_consumer_key: o.oauth_consumer_key, - oauth_signature_method: "HMAC-SHA1" - }; + if (typeof predicate != 'function' || thisArg !== undefined) { + predicate = getCallback(predicate, thisArg, 3); } + return func(collection, predicate); + } - // potentially pre-authorize - oauth.options(o); + /** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is bound to `thisArg` and + * invoked with three arguments: (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias select + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the new filtered array. + * @example + * + * _.filter([4, 5, 6], function(n) { + * return n % 2 == 0; + * }); + * // => [4, 6] + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.filter(users, { 'age': 36, 'active': true }), 'user'); + * // => ['barney'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.filter(users, 'active', false), 'user'); + * // => ['fred'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.filter(users, 'active'), 'user'); + * // => ['barney'] + */ + function filter(collection, predicate, thisArg) { + var func = isArray(collection) ? arrayFilter : baseFilter; + predicate = getCallback(predicate, thisArg, 3); + return func(collection, predicate); + } - return oauth; -}; + /** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is bound to `thisArg` and + * invoked with three arguments: (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias detect + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.result(_.find(users, function(chr) { + * return chr.age < 40; + * }), 'user'); + * // => 'barney' + * + * // using the `_.matches` callback shorthand + * _.result(_.find(users, { 'age': 1, 'active': true }), 'user'); + * // => 'pebbles' + * + * // using the `_.matchesProperty` callback shorthand + * _.result(_.find(users, 'active', false), 'user'); + * // => 'fred' + * + * // using the `_.property` callback shorthand + * _.result(_.find(users, 'active'), 'user'); + * // => 'barney' + */ + var find = createFind(baseEach); -},{"ohauth":2,"store":3,"xtend":4}],3:[function(require,module,exports){ -(function(global){;(function(win){ - var store = {}, - doc = win.document, - localStorageName = 'localStorage', - storage + /** + * Iterates over elements of `collection` invoking `iteratee` for each element. + * The `iteratee` is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). Iteratee functions may exit iteration early + * by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" property + * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn` + * may be used for object iteration. + * + * @static + * @memberOf _ + * @alias each + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array|Object|string} Returns `collection`. + * @example + * + * _([1, 2]).forEach(function(n) { + * console.log(n); + * }).value(); + * // => logs each value from left to right and returns the array + * + * _.forEach({ 'a': 1, 'b': 2 }, function(n, key) { + * console.log(n, key); + * }); + * // => logs each value-key pair and returns the object (iteration order is not guaranteed) + */ + var forEach = createForEach(arrayEach, baseEach); - store.disabled = false - store.set = function(key, value) {} - store.get = function(key) {} - store.remove = function(key) {} - store.clear = function() {} - store.transact = function(key, defaultVal, transactionFn) { - var val = store.get(key) - if (transactionFn == null) { - transactionFn = defaultVal - defaultVal = null - } - if (typeof val == 'undefined') { val = defaultVal || {} } - transactionFn(val) - store.set(key, val) - } - store.getAll = function() {} - store.forEach = function() {} + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through `iteratee`. The corresponding value + * of each key is an array of the elements responsible for generating the key. + * The `iteratee` is bound to `thisArg` and invoked with three arguments: + * (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([4.2, 6.1, 6.4], function(n) { + * return Math.floor(n); + * }); + * // => { '4': [4.2], '6': [6.1, 6.4] } + * + * _.groupBy([4.2, 6.1, 6.4], function(n) { + * return this.floor(n); + * }, Math); + * // => { '4': [4.2], '6': [6.1, 6.4] } + * + * // using the `_.property` callback shorthand + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ + var groupBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + result[key] = [value]; + } + }); - store.serialize = function(value) { - return JSON.stringify(value) - } - store.deserialize = function(value) { - if (typeof value != 'string') { return undefined } - try { return JSON.parse(value) } - catch(e) { return value || undefined } - } + /** + * Checks if `value` is in `collection` using + * [`SameValueZero`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it is used as the offset + * from the end of `collection`. + * + * @static + * @memberOf _ + * @alias contains, include + * @category Collection + * @param {Array|Object|string} collection The collection to search. + * @param {*} target The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`. + * @returns {boolean} Returns `true` if a matching element is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'user': 'fred', 'age': 40 }, 'fred'); + * // => true + * + * _.includes('pebbles', 'eb'); + * // => true + */ + function includes(collection, target, fromIndex, guard) { + var length = collection ? getLength(collection) : 0; + if (!isLength(length)) { + collection = values(collection); + length = collection.length; + } + if (!length) { + return false; + } + if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) { + fromIndex = 0; + } else { + fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0); + } + return (typeof collection == 'string' || !isArray(collection) && isString(collection)) + ? (fromIndex < length && collection.indexOf(target, fromIndex) > -1) + : (getIndexOf(collection, target, fromIndex) > -1); + } - // Functions to encapsulate questionable FireFox 3.6.13 behavior - // when about.config::dom.storage.enabled === false - // See https://github.com/marcuswestin/store.js/issues#issue/13 - function isLocalStorageNameSupported() { - try { return (localStorageName in win && win[localStorageName]) } - catch(err) { return false } - } + /** + * Creates an array of values by running each element in `collection` through + * `iteratee`. The `iteratee` is bound to `thisArg` and invoked with three + * arguments: (value, index|key, collection). + * + * If a property name is provided for `iteratee` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `iteratee` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `callback`, `chunk`, `clone`, `create`, `curry`, `curryRight`, + * `drop`, `dropRight`, `every`, `fill`, `flatten`, `invert`, `max`, `min`, + * `parseInt`, `slice`, `sortBy`, `take`, `takeRight`, `template`, `trim`, + * `trimLeft`, `trimRight`, `trunc`, `random`, `range`, `sample`, `some`, + * `sum`, `uniq`, and `words` + * + * @static + * @memberOf _ + * @alias collect + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [iteratee=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Array} Returns the new mapped array. + * @example + * + * function timesThree(n) { + * return n * 3; + * } + * + * _.map([1, 2], timesThree); + * // => [3, 6] + * + * _.map({ 'a': 1, 'b': 2 }, timesThree); + * // => [3, 6] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // using the `_.property` callback shorthand + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ + function map(collection, iteratee, thisArg) { + var func = isArray(collection) ? arrayMap : baseMap; + iteratee = getCallback(iteratee, thisArg, 3); + return func(collection, iteratee); + } - if (isLocalStorageNameSupported()) { - storage = win[localStorageName] - store.set = function(key, val) { - if (val === undefined) { return store.remove(key) } - storage.setItem(key, store.serialize(val)) - return val - } - store.get = function(key) { return store.deserialize(storage.getItem(key)) } - store.remove = function(key) { storage.removeItem(key) } - store.clear = function() { storage.clear() } - store.getAll = function() { - var ret = {} - store.forEach(function(key, val) { - ret[key] = val - }) - return ret - } - store.forEach = function(callback) { - for (var i=0; idocument.w=window') - storageContainer.close() - storageOwner = storageContainer.w.frames[0].document - storage = storageOwner.createElement('div') - } catch(e) { - // somehow ActiveXObject instantiation failed (perhaps some special - // security settings or otherwse), fall back to per-path storage - storage = doc.createElement('div') - storageOwner = doc.body - } - function withIEStorage(storeFunction) { - return function() { - var args = Array.prototype.slice.call(arguments, 0) - args.unshift(storage) - // See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx - // and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx - storageOwner.appendChild(storage) - storage.addBehavior('#default#userData') - storage.load(localStorageName) - var result = storeFunction.apply(store, args) - storageOwner.removeChild(storage) - return result - } - } + /** + * Gets the property value of `path` from all elements in `collection`. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Array|string} path The path of the property to pluck. + * @returns {Array} Returns the property values. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * _.pluck(users, 'user'); + * // => ['barney', 'fred'] + * + * var userIndex = _.indexBy(users, 'user'); + * _.pluck(userIndex, 'age'); + * // => [36, 40] (iteration order is not guaranteed) + */ + function pluck(collection, path) { + return map(collection, property(path)); + } - // In IE7, keys may not contain special chars. See all of https://github.com/marcuswestin/store.js/issues/40 - var forbiddenCharsRegex = new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]", "g") - function ieKeyFix(key) { - return key.replace(forbiddenCharsRegex, '___') - } - store.set = withIEStorage(function(storage, key, val) { - key = ieKeyFix(key) - if (val === undefined) { return store.remove(key) } - storage.setAttribute(key, store.serialize(val)) - storage.save(localStorageName) - return val - }) - store.get = withIEStorage(function(storage, key) { - key = ieKeyFix(key) - return store.deserialize(storage.getAttribute(key)) - }) - store.remove = withIEStorage(function(storage, key) { - key = ieKeyFix(key) - storage.removeAttribute(key) - storage.save(localStorageName) - }) - store.clear = withIEStorage(function(storage) { - var attributes = storage.XMLDocument.documentElement.attributes - storage.load(localStorageName) - for (var i=0, attr; attr=attributes[i]; i++) { - storage.removeAttribute(attr.name) - } - storage.save(localStorageName) - }) - store.getAll = function(storage) { - var ret = {} - store.forEach(function(key, val) { - ret[key] = val - }) - return ret - } - store.forEach = withIEStorage(function(storage, callback) { - var attributes = storage.XMLDocument.documentElement.attributes - for (var i=0, attr; attr=attributes[i]; ++i) { - callback(attr.name, store.deserialize(storage.getAttribute(attr.name))) - } - }) - } - - try { - var testKey = '__storejs__' - store.set(testKey, testKey) - if (store.get(testKey) != testKey) { store.disabled = true } - store.remove(testKey) - } catch(e) { - store.disabled = true - } - store.enabled = !store.disabled - - if (typeof module != 'undefined' && module.exports) { module.exports = store } - else if (typeof define === 'function' && define.amd) { define(store) } - else { win.store = store } - -})(this.window || global); - -})(window) -},{}],5:[function(require,module,exports){ -module.exports = hasKeys - -function hasKeys(source) { - return source !== null && - (typeof source === "object" || - typeof source === "function") -} - -},{}],4:[function(require,module,exports){ -var Keys = require("object-keys") -var hasKeys = require("./has-keys") - -module.exports = extend - -function extend() { - var target = {} - - for (var i = 0; i < arguments.length; i++) { - var source = arguments[i] - - if (!hasKeys(source)) { - continue - } - - var keys = Keys(source) - - for (var j = 0; j < keys.length; j++) { - var name = keys[j] - target[name] = source[name] - } - } - - return target -} - -},{"./has-keys":5,"object-keys":6}],7:[function(require,module,exports){ -(function(global){/** - * jsHashes - A fast and independent hashing library pure JavaScript implemented (ES3 compliant) for both server and client side - * - * @class Hashes - * @author Tomas Aparicio - * @license New BSD (see LICENSE file) - * @version 1.0.4 - * - * Algorithms specification: - * - * MD5 - * RIPEMD-160 - * SHA1 - * SHA256 - * SHA512 - * HMAC - * - */ -(function(){ - var Hashes; - - // private helper methods - function utf8Encode(str) { - var x, y, output = '', i = -1, l; - - if (str && str.length) { - l = str.length; - while ((i+=1) < l) { - /* Decode utf-16 surrogate pairs */ - x = str.charCodeAt(i); - y = i + 1 < l ? str.charCodeAt(i + 1) : 0; - if (0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF) { - x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF); - i += 1; - } - /* Encode output as utf-8 */ - if (x <= 0x7F) { - output += String.fromCharCode(x); - } else if (x <= 0x7FF) { - output += String.fromCharCode(0xC0 | ((x >>> 6 ) & 0x1F), - 0x80 | ( x & 0x3F)); - } else if (x <= 0xFFFF) { - output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F), - 0x80 | ((x >>> 6 ) & 0x3F), - 0x80 | ( x & 0x3F)); - } else if (x <= 0x1FFFFF) { - output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07), - 0x80 | ((x >>> 12) & 0x3F), - 0x80 | ((x >>> 6 ) & 0x3F), - 0x80 | ( x & 0x3F)); - } - } - } - return output; - } - - function utf8Decode(str) { - var i, ac, c1, c2, c3, arr = [], l; - i = ac = c1 = c2 = c3 = 0; - - if (str && str.length) { - l = str.length; - str += ''; - - while (i < l) { - c1 = str.charCodeAt(i); - ac += 1; - if (c1 < 128) { - arr[ac] = String.fromCharCode(c1); - i+=1; - } else if (c1 > 191 && c1 < 224) { - c2 = str.charCodeAt(i + 1); - arr[ac] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63)); - i += 2; - } else { - c2 = str.charCodeAt(i + 1); - c3 = str.charCodeAt(i + 2); - arr[ac] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); - i += 3; - } - } - } - return arr.join(''); - } - - /** - * Add integers, wrapping at 2^32. This uses 16-bit operations internally - * to work around bugs in some JS interpreters. - */ - function safe_add(x, y) { - var lsw = (x & 0xFFFF) + (y & 0xFFFF), - msw = (x >> 16) + (y >> 16) + (lsw >> 16); - return (msw << 16) | (lsw & 0xFFFF); - } + /** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` through `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not provided the first element of `collection` is used as the initial + * value. The `iteratee` is bound to `thisArg` and invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `includes`, `merge`, `sortByAll`, and `sortByOrder` + * + * @static + * @memberOf _ + * @alias foldl, inject + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {*} Returns the accumulated value. + * @example + * + * _.reduce([1, 2], function(total, n) { + * return total + n; + * }); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2 }, function(result, n, key) { + * result[key] = n * 3; + * return result; + * }, {}); + * // => { 'a': 3, 'b': 6 } (iteration order is not guaranteed) + */ + var reduce = createReduce(arrayReduce, baseEach); /** - * Bitwise rotate a 32-bit number to the left. + * The opposite of `_.filter`; this method returns the elements of `collection` + * that `predicate` does **not** return truthy for. + * + * @static + * @memberOf _ + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Array} Returns the new filtered array. + * @example + * + * _.reject([1, 2, 3, 4], function(n) { + * return n % 2 == 0; + * }); + * // => [1, 3] + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true } + * ]; + * + * // using the `_.matches` callback shorthand + * _.pluck(_.reject(users, { 'age': 40, 'active': true }), 'user'); + * // => ['barney'] + * + * // using the `_.matchesProperty` callback shorthand + * _.pluck(_.reject(users, 'active', false), 'user'); + * // => ['fred'] + * + * // using the `_.property` callback shorthand + * _.pluck(_.reject(users, 'active'), 'user'); + * // => ['barney'] */ - function bit_rol(num, cnt) { - return (num << cnt) | (num >>> (32 - cnt)); + function reject(collection, predicate, thisArg) { + var func = isArray(collection) ? arrayFilter : baseFilter; + predicate = getCallback(predicate, thisArg, 3); + return func(collection, function(value, index, collection) { + return !predicate(value, index, collection); + }); } /** - * Convert a raw string to a hex string + * Checks if `predicate` returns truthy for **any** element of `collection`. + * The function returns as soon as it finds a passing value and does not iterate + * over the entire collection. The predicate is bound to `thisArg` and invoked + * with three arguments: (value, index|key, collection). + * + * If a property name is provided for `predicate` the created `_.property` + * style callback returns the property value of the given element. + * + * If a value is also provided for `thisArg` the created `_.matchesProperty` + * style callback returns `true` for elements that have a matching property + * value, else `false`. + * + * If an object is provided for `predicate` the created `_.matches` style + * callback returns `true` for elements that have the properties of the given + * object, else `false`. + * + * @static + * @memberOf _ + * @alias any + * @category Collection + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [predicate=_.identity] The function invoked + * per iteration. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // using the `_.matches` callback shorthand + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // using the `_.matchesProperty` callback shorthand + * _.some(users, 'active', false); + * // => true + * + * // using the `_.property` callback shorthand + * _.some(users, 'active'); + * // => true */ - function rstr2hex(input, hexcase) { - var hex_tab = hexcase ? '0123456789ABCDEF' : '0123456789abcdef', - output = '', x, i = 0, l = input.length; - for (; i < l; i+=1) { - x = input.charCodeAt(i); - output += hex_tab.charAt((x >>> 4) & 0x0F) + hex_tab.charAt(x & 0x0F); + function some(collection, predicate, thisArg) { + var func = isArray(collection) ? arraySome : baseSome; + if (thisArg && isIterateeCall(collection, predicate, thisArg)) { + predicate = null; } - return output; - } - - /** - * Encode a string as utf-16 - */ - function str2rstr_utf16le(input) { - var i, l = input.length, output = ''; - for (i = 0; i < l; i+=1) { - output += String.fromCharCode( input.charCodeAt(i) & 0xFF, (input.charCodeAt(i) >>> 8) & 0xFF); + if (typeof predicate != 'function' || thisArg !== undefined) { + predicate = getCallback(predicate, thisArg, 3); } - return output; + return func(collection, predicate); } - function str2rstr_utf16be(input) { - var i, l = input.length, output = ''; - for (i = 0; i < l; i+=1) { - output += String.fromCharCode((input.charCodeAt(i) >>> 8) & 0xFF, input.charCodeAt(i) & 0xFF); - } - return output; - } + /*------------------------------------------------------------------------*/ /** - * Convert an array of big-endian words to a string + * Gets the number of milliseconds that have elapsed since the Unix epoch + * (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @category Date + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => logs the number of milliseconds it took for the deferred function to be invoked */ - function binb2rstr(input) { - var i, l = input.length * 32, output = ''; - for (i = 0; i < l; i += 8) { - output += String.fromCharCode((input[i>>5] >>> (24 - i % 32)) & 0xFF); - } - return output; - } + var now = nativeNow || function() { + return new Date().getTime(); + }; - /** - * Convert an array of little-endian words to a string - */ - function binl2rstr(input) { - var i, l = input.length * 32, output = ''; - for (i = 0;i < l; i += 8) { - output += String.fromCharCode((input[i>>5] >>> (i % 32)) & 0xFF); - } - return output; - } + /*------------------------------------------------------------------------*/ /** - * Convert a raw string to an array of little-endian words - * Characters >255 have their high-byte silently ignored. + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and prepends any additional `_.bind` arguments to those provided to the + * bound function. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind` this method does not set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var greet = function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * }; + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // using placeholders + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' */ - function rstr2binl(input) { - var i, l = input.length * 8, output = Array(input.length >> 2), lo = output.length; - for (i = 0; i < lo; i+=1) { - output[i] = 0; - } - for (i = 0; i < l; i += 8) { - output[i>>5] |= (input.charCodeAt(i / 8) & 0xFF) << (i%32); + var bind = restParam(function(func, thisArg, partials) { + var bitmask = BIND_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, bind.placeholder); + bitmask |= PARTIAL_FLAG; } - return output; - } - + return createWrapper(func, bitmask, thisArg, partials, holders); + }); + /** - * Convert a raw string to an array of big-endian words - * Characters >255 have their high-byte silently ignored. - */ - function rstr2binb(input) { - var i, l = input.length * 8, output = Array(input.length >> 2), lo = output.length; - for (i = 0; i < lo; i+=1) { - output[i] = 0; - } - for (i = 0; i < l; i += 8) { - output[i>>5] |= (input.charCodeAt(i / 8) & 0xFF) << (24 - i % 32); - } - return output; - } - - /** - * Convert a raw string to an arbitrary string encoding + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed invocations. Provide an options object to indicate that `func` + * should be invoked on the leading and/or trailing edge of the `wait` timeout. + * Subsequent calls to the debounced function return the result of the last + * `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked + * on the trailing edge of the timeout only if the the debounced function is + * invoked more than once during the `wait` timeout. + * + * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options] The options object. + * @param {boolean} [options.leading=false] Specify invoking on the leading + * edge of the timeout. + * @param {number} [options.maxWait] The maximum time `func` is allowed to be + * delayed before it is invoked. + * @param {boolean} [options.trailing=true] Specify invoking on the trailing + * edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // avoid costly calculations while the window size is in flux + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // invoke `sendMail` when the click event is fired, debouncing subsequent calls + * jQuery('#postbox').on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // ensure `batchLog` is invoked once after 1 second of debounced calls + * var source = new EventSource('/stream'); + * jQuery(source).on('message', _.debounce(batchLog, 250, { + * 'maxWait': 1000 + * })); + * + * // cancel a debounced call + * var todoChanges = _.debounce(batchLog, 1000); + * Object.observe(models.todo, todoChanges); + * + * Object.observe(models, function(changes) { + * if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) { + * todoChanges.cancel(); + * } + * }, ['delete']); + * + * // ...at some point `models.todo` is changed + * models.todo.completed = true; + * + * // ...before 1 second has passed `models.todo` is deleted + * // which cancels the debounced `todoChanges` call + * delete models.todo; */ - function rstr2any(input, encoding) { - var divisor = encoding.length, - remainders = Array(), - i, q, x, ld, quotient, dividend, output, full_length; - - /* Convert to an array of 16-bit big-endian values, forming the dividend */ - dividend = Array(Math.ceil(input.length / 2)); - ld = dividend.length; - for (i = 0; i < ld; i+=1) { - dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1); + function debounce(func, wait, options) { + var args, + maxTimeoutId, + result, + stamp, + thisArg, + timeoutId, + trailingCall, + lastCalled = 0, + maxWait = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); } - - /** - * Repeatedly perform a long division. The binary array forms the dividend, - * the length of the encoding is the divisor. Once computed, the quotient - * forms the dividend for the next step. We stop when the dividend is zerHashes. - * All remainders are stored for later use. - */ - while(dividend.length > 0) { - quotient = Array(); - x = 0; - for (i = 0; i < dividend.length; i+=1) { - x = (x << 16) + dividend[i]; - q = Math.floor(x / divisor); - x -= q * divisor; - if (quotient.length > 0 || q > 0) { - quotient[quotient.length] = q; + wait = wait < 0 ? 0 : (+wait || 0); + if (options === true) { + var leading = true; + trailing = false; + } else if (isObject(options)) { + leading = options.leading; + maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait); + trailing = 'trailing' in options ? options.trailing : trailing; + } + + function cancel() { + if (timeoutId) { + clearTimeout(timeoutId); + } + if (maxTimeoutId) { + clearTimeout(maxTimeoutId); + } + maxTimeoutId = timeoutId = trailingCall = undefined; + } + + function delayed() { + var remaining = wait - (now() - stamp); + if (remaining <= 0 || remaining > wait) { + if (maxTimeoutId) { + clearTimeout(maxTimeoutId); + } + var isCalled = trailingCall; + maxTimeoutId = timeoutId = trailingCall = undefined; + if (isCalled) { + lastCalled = now(); + result = func.apply(thisArg, args); + if (!timeoutId && !maxTimeoutId) { + args = thisArg = null; + } } + } else { + timeoutId = setTimeout(delayed, remaining); } - remainders[remainders.length] = x; - dividend = quotient; } - - /* Convert the remainders to the output string */ - output = ''; - for (i = remainders.length - 1; i >= 0; i--) { - output += encoding.charAt(remainders[i]); + + function maxDelayed() { + if (timeoutId) { + clearTimeout(timeoutId); + } + maxTimeoutId = timeoutId = trailingCall = undefined; + if (trailing || (maxWait !== wait)) { + lastCalled = now(); + result = func.apply(thisArg, args); + if (!timeoutId && !maxTimeoutId) { + args = thisArg = null; + } + } } - - /* Append leading zero equivalents */ - full_length = Math.ceil(input.length * 8 / (Math.log(encoding.length) / Math.log(2))); - for (i = output.length; i < full_length; i+=1) { - output = encoding[0] + output; + + function debounced() { + args = arguments; + stamp = now(); + thisArg = this; + trailingCall = trailing && (timeoutId || !leading); + + if (maxWait === false) { + var leadingCall = leading && !timeoutId; + } else { + if (!maxTimeoutId && !leading) { + lastCalled = stamp; + } + var remaining = maxWait - (stamp - lastCalled), + isCalled = remaining <= 0 || remaining > maxWait; + + if (isCalled) { + if (maxTimeoutId) { + maxTimeoutId = clearTimeout(maxTimeoutId); + } + lastCalled = stamp; + result = func.apply(thisArg, args); + } + else if (!maxTimeoutId) { + maxTimeoutId = setTimeout(maxDelayed, remaining); + } + } + if (isCalled && timeoutId) { + timeoutId = clearTimeout(timeoutId); + } + else if (!timeoutId && wait !== maxWait) { + timeoutId = setTimeout(delayed, wait); + } + if (leadingCall) { + isCalled = true; + result = func.apply(thisArg, args); + } + if (isCalled && !timeoutId && !maxTimeoutId) { + args = thisArg = null; + } + return result; } - return output; + debounced.cancel = cancel; + return debounced; } /** - * Convert a raw string to a base-64 string + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as an array. + * + * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters). + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.restParam(function(what, names) { + * return what + ' ' + _.initial(names).join(', ') + + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' */ - function rstr2b64(input, b64pad) { - var tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', - output = '', - len = input.length, i, j, triplet; - b64pad= b64pad || '='; - for (i = 0; i < len; i += 3) { - triplet = (input.charCodeAt(i) << 16) - | (i + 1 < len ? input.charCodeAt(i+1) << 8 : 0) - | (i + 2 < len ? input.charCodeAt(i+2) : 0); - for (j = 0; j < 4; j+=1) { - if (i * 8 + j * 6 > input.length * 8) { - output += b64pad; - } else { - output += tab.charAt((triplet >>> 6*(3-j)) & 0x3F); - } - } + function restParam(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); } - return output; + start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + rest = Array(length); + + while (++index < length) { + rest[index] = args[start + index]; + } + switch (start) { + case 0: return func.call(this, rest); + case 1: return func.call(this, args[0], rest); + case 2: return func.call(this, args[0], args[1], rest); + } + var otherArgs = Array(start + 1); + index = -1; + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = rest; + return func.apply(this, otherArgs); + }; } - Hashes = { - /** - * @property {String} version - * @readonly - */ - VERSION : '1.0.3', /** - * @member Hashes - * @class Base64 - * @constructor + * Creates a throttled function that only invokes `func` at most once per + * every `wait` milliseconds. The throttled function comes with a `cancel` + * method to cancel delayed invocations. Provide an options object to indicate + * that `func` should be invoked on the leading and/or trailing edge of the + * `wait` timeout. Subsequent calls to the throttled function return the + * result of the last `func` call. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked + * on the trailing edge of the timeout only if the the throttled function is + * invoked more than once during the `wait` timeout. + * + * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation) + * for details over the differences between `_.throttle` and `_.debounce`. + * + * @static + * @memberOf _ + * @category Function + * @param {Function} func The function to throttle. + * @param {number} [wait=0] The number of milliseconds to throttle invocations to. + * @param {Object} [options] The options object. + * @param {boolean} [options.leading=true] Specify invoking on the leading + * edge of the timeout. + * @param {boolean} [options.trailing=true] Specify invoking on the trailing + * edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // avoid excessively updating the position while scrolling + * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); + * + * // invoke `renewToken` when the click event is fired, but not more than once every 5 minutes + * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, { + * 'trailing': false + * })); + * + * // cancel a trailing throttled call + * jQuery(window).on('popstate', throttled.cancel); */ - Base64 : function () { - // private properties - var tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', - pad = '=', // default pad according with the RFC standard - url = false, // URL encoding support @todo - utf8 = true; // by default enable UTF-8 support encoding + function throttle(func, wait, options) { + var leading = true, + trailing = true; - // public method for encoding - this.encode = function (input) { - var i, j, triplet, - output = '', - len = input.length; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (options === false) { + leading = false; + } else if (isObject(options)) { + leading = 'leading' in options ? !!options.leading : leading; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + debounceOptions.leading = leading; + debounceOptions.maxWait = +wait; + debounceOptions.trailing = trailing; + return debounce(func, wait, debounceOptions); + } - pad = pad || '='; - input = (utf8) ? utf8Encode(input) : input; + /*------------------------------------------------------------------------*/ - for (i = 0; i < len; i += 3) { - triplet = (input.charCodeAt(i) << 16) - | (i + 1 < len ? input.charCodeAt(i+1) << 8 : 0) - | (i + 2 < len ? input.charCodeAt(i+2) : 0); - for (j = 0; j < 4; j+=1) { - if (i * 8 + j * 6 > len * 8) { - output += pad; - } else { - output += tab.charAt((triplet >>> 6*(3-j)) & 0x3F); - } - } - } - return output; - }; - - // public method for decoding - this.decode = function (input) { - // var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; - var i, o1, o2, o3, h1, h2, h3, h4, bits, ac, - dec = '', - arr = []; - if (!input) { return input; } - - i = ac = 0; - input = input.replace(new RegExp('\\'+pad,'gi'),''); // use '=' - //input += ''; - - do { // unpack four hexets into three octets using index points in b64 - h1 = tab.indexOf(input.charAt(i+=1)); - h2 = tab.indexOf(input.charAt(i+=1)); - h3 = tab.indexOf(input.charAt(i+=1)); - h4 = tab.indexOf(input.charAt(i+=1)); - - bits = h1 << 18 | h2 << 12 | h3 << 6 | h4; - - o1 = bits >> 16 & 0xff; - o2 = bits >> 8 & 0xff; - o3 = bits & 0xff; - ac += 1; - - if (h3 === 64) { - arr[ac] = String.fromCharCode(o1); - } else if (h4 === 64) { - arr[ac] = String.fromCharCode(o1, o2); - } else { - arr[ac] = String.fromCharCode(o1, o2, o3); - } - } while (i < input.length); - - dec = arr.join(''); - dec = (utf8) ? utf8Decode(dec) : dec; + /** + * Creates a clone of `value`. If `isDeep` is `true` nested objects are cloned, + * otherwise they are assigned by reference. If `customizer` is provided it is + * invoked to produce the cloned values. If `customizer` returns `undefined` + * cloning is handled by the method instead. The `customizer` is bound to + * `thisArg` and invoked with two argument; (value [, index|key, object]). + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm). + * The enumerable properties of `arguments` objects and objects created by + * constructors other than `Object` are cloned to plain `Object` objects. An + * empty object is returned for uncloneable values such as functions, DOM nodes, + * Maps, Sets, and WeakMaps. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @param {Function} [customizer] The function to customize cloning values. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {*} Returns the cloned value. + * @example + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * var shallow = _.clone(users); + * shallow[0] === users[0]; + * // => true + * + * var deep = _.clone(users, true); + * deep[0] === users[0]; + * // => false + * + * // using a customizer callback + * var el = _.clone(document.body, function(value) { + * if (_.isElement(value)) { + * return value.cloneNode(false); + * } + * }); + * + * el === document.body + * // => false + * el.nodeName + * // => BODY + * el.childNodes.length; + * // => 0 + */ + function clone(value, isDeep, customizer, thisArg) { + if (isDeep && typeof isDeep != 'boolean' && isIterateeCall(value, isDeep, customizer)) { + isDeep = false; + } + else if (typeof isDeep == 'function') { + thisArg = customizer; + customizer = isDeep; + isDeep = false; + } + return typeof customizer == 'function' + ? baseClone(value, isDeep, bindCallback(customizer, thisArg, 1)) + : baseClone(value, isDeep); + } - return dec; - }; + /** + * Creates a deep clone of `value`. If `customizer` is provided it is invoked + * to produce the cloned values. If `customizer` returns `undefined` cloning + * is handled by the method instead. The `customizer` is bound to `thisArg` + * and invoked with two argument; (value [, index|key, object]). + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm). + * The enumerable properties of `arguments` objects and objects created by + * constructors other than `Object` are cloned to plain `Object` objects. An + * empty object is returned for uncloneable values such as functions, DOM nodes, + * Maps, Sets, and WeakMaps. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to deep clone. + * @param {Function} [customizer] The function to customize cloning values. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {*} Returns the deep cloned value. + * @example + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * var deep = _.cloneDeep(users); + * deep[0] === users[0]; + * // => false + * + * // using a customizer callback + * var el = _.cloneDeep(document.body, function(value) { + * if (_.isElement(value)) { + * return value.cloneNode(true); + * } + * }); + * + * el === document.body + * // => false + * el.nodeName + * // => BODY + * el.childNodes.length; + * // => 20 + */ + function cloneDeep(value, customizer, thisArg) { + return typeof customizer == 'function' + ? baseClone(value, true, bindCallback(customizer, thisArg, 1)) + : baseClone(value, true); + } - // set custom pad string - this.setPad = function (str) { - pad = str || pad; - return this; - }; - // set custom tab string characters - this.setTab = function (str) { - tab = str || tab; - return this; - }; - this.setUTF8 = function (bool) { - if (typeof bool === 'boolean') { - utf8 = bool; - } - return this; + /** + * Checks if `value` is classified as an `arguments` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + function isArguments(value) { + return isObjectLike(value) && isArrayLike(value) && objToString.call(value) == argsTag; + } + // Fallback for environments without a `toStringTag` for `arguments` objects. + if (!support.argsTag) { + isArguments = function(value) { + return isObjectLike(value) && isArrayLike(value) && + hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); }; - }, + } /** - * CRC-32 calculation - * @member Hashes - * @method CRC32 + * Checks if `value` is classified as an `Array` object. + * * @static - * @param {String} str Input String - * @return {String} + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(function() { return arguments; }()); + * // => false */ - CRC32 : function (str) { - var crc = 0, x = 0, y = 0, table, i, iTop; - str = utf8Encode(str); - - table = [ - '00000000 77073096 EE0E612C 990951BA 076DC419 706AF48F E963A535 9E6495A3 0EDB8832 ', - '79DCB8A4 E0D5E91E 97D2D988 09B64C2B 7EB17CBD E7B82D07 90BF1D91 1DB71064 6AB020F2 F3B97148 ', - '84BE41DE 1ADAD47D 6DDDE4EB F4D4B551 83D385C7 136C9856 646BA8C0 FD62F97A 8A65C9EC 14015C4F ', - '63066CD9 FA0F3D63 8D080DF5 3B6E20C8 4C69105E D56041E4 A2677172 3C03E4D1 4B04D447 D20D85FD ', - 'A50AB56B 35B5A8FA 42B2986C DBBBC9D6 ACBCF940 32D86CE3 45DF5C75 DCD60DCF ABD13D59 26D930AC ', - '51DE003A C8D75180 BFD06116 21B4F4B5 56B3C423 CFBA9599 B8BDA50F 2802B89E 5F058808 C60CD9B2 ', - 'B10BE924 2F6F7C87 58684C11 C1611DAB B6662D3D 76DC4190 01DB7106 98D220BC EFD5102A 71B18589 ', - '06B6B51F 9FBFE4A5 E8B8D433 7807C9A2 0F00F934 9609A88E E10E9818 7F6A0DBB 086D3D2D 91646C97 ', - 'E6635C01 6B6B51F4 1C6C6162 856530D8 F262004E 6C0695ED 1B01A57B 8208F4C1 F50FC457 65B0D9C6 ', - '12B7E950 8BBEB8EA FCB9887C 62DD1DDF 15DA2D49 8CD37CF3 FBD44C65 4DB26158 3AB551CE A3BC0074 ', - 'D4BB30E2 4ADFA541 3DD895D7 A4D1C46D D3D6F4FB 4369E96A 346ED9FC AD678846 DA60B8D0 44042D73 ', - '33031DE5 AA0A4C5F DD0D7CC9 5005713C 270241AA BE0B1010 C90C2086 5768B525 206F85B3 B966D409 ', - 'CE61E49F 5EDEF90E 29D9C998 B0D09822 C7D7A8B4 59B33D17 2EB40D81 B7BD5C3B C0BA6CAD EDB88320 ', - '9ABFB3B6 03B6E20C 74B1D29A EAD54739 9DD277AF 04DB2615 73DC1683 E3630B12 94643B84 0D6D6A3E ', - '7A6A5AA8 E40ECF0B 9309FF9D 0A00AE27 7D079EB1 F00F9344 8708A3D2 1E01F268 6906C2FE F762575D ', - '806567CB 196C3671 6E6B06E7 FED41B76 89D32BE0 10DA7A5A 67DD4ACC F9B9DF6F 8EBEEFF9 17B7BE43 ', - '60B08ED5 D6D6A3E8 A1D1937E 38D8C2C4 4FDFF252 D1BB67F1 A6BC5767 3FB506DD 48B2364B D80D2BDA ', - 'AF0A1B4C 36034AF6 41047A60 DF60EFC3 A867DF55 316E8EEF 4669BE79 CB61B38C BC66831A 256FD2A0 ', - '5268E236 CC0C7795 BB0B4703 220216B9 5505262F C5BA3BBE B2BD0B28 2BB45A92 5CB36A04 C2D7FFA7 ', - 'B5D0CF31 2CD99E8B 5BDEAE1D 9B64C2B0 EC63F226 756AA39C 026D930A 9C0906A9 EB0E363F 72076785 ', - '05005713 95BF4A82 E2B87A14 7BB12BAE 0CB61B38 92D28E9B E5D5BE0D 7CDCEFB7 0BDBDF21 86D3D2D4 ', - 'F1D4E242 68DDB3F8 1FDA836E 81BE16CD F6B9265B 6FB077E1 18B74777 88085AE6 FF0F6A70 66063BCA ', - '11010B5C 8F659EFF F862AE69 616BFFD3 166CCF45 A00AE278 D70DD2EE 4E048354 3903B3C2 A7672661 ', - 'D06016F7 4969474D 3E6E77DB AED16A4A D9D65ADC 40DF0B66 37D83BF0 A9BCAE53 DEBB9EC5 47B2CF7F ', - '30B5FFE9 BDBDF21C CABAC28A 53B39330 24B4A3A6 BAD03605 CDD70693 54DE5729 23D967BF B3667A2E ', - 'C4614AB8 5D681B02 2A6F2B94 B40BBE37 C30C8EA1 5A05DF1B 2D02EF8D' - ].join(''); + var isArray = nativeIsArray || function(value) { + return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag; + }; - crc = crc ^ (-1); - for (i = 0, iTop = str.length; i < iTop; i+=1 ) { - y = ( crc ^ str.charCodeAt( i ) ) & 0xFF; - x = '0x' + table.substr( y * 9, 8 ); - crc = ( crc >>> 8 ) ^ x; + /** + * Checks if `value` is empty. A value is considered empty unless it is an + * `arguments` object, array, string, or jQuery-like collection with a length + * greater than `0` or an object with own enumerable properties. + * + * @static + * @memberOf _ + * @category Lang + * @param {Array|Object|string} value The value to inspect. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ + function isEmpty(value) { + if (value == null) { + return true; } - // always return a positive number (that's what >>> 0 does) - return (crc ^ (-1)) >>> 0; - }, + if (isArrayLike(value) && (isArray(value) || isString(value) || isArguments(value) || + (isObjectLike(value) && isFunction(value.splice)))) { + return !value.length; + } + return !keys(value).length; + } + /** - * @member Hashes - * @class MD5 - * @constructor - * @param {Object} [config] - * - * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message - * Digest Algorithm, as defined in RFC 1321. - * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * See for more infHashes. + * Performs a deep comparison between two values to determine if they are + * equivalent. If `customizer` is provided it is invoked to compare values. + * If `customizer` returns `undefined` comparisons are handled by the method + * instead. The `customizer` is bound to `thisArg` and invoked with three + * arguments: (value, other [, index|key]). + * + * **Note:** This method supports comparing arrays, booleans, `Date` objects, + * numbers, `Object` objects, regexes, and strings. Objects are compared by + * their own, not inherited, enumerable properties. Functions and DOM nodes + * are **not** supported. Provide a customizer function to extend support + * for comparing other values. + * + * @static + * @memberOf _ + * @alias eq + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize value comparisons. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'user': 'fred' }; + * var other = { 'user': 'fred' }; + * + * object == other; + * // => false + * + * _.isEqual(object, other); + * // => true + * + * // using a customizer callback + * var array = ['hello', 'goodbye']; + * var other = ['hi', 'goodbye']; + * + * _.isEqual(array, other, function(value, other) { + * if (_.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/)) { + * return true; + * } + * }); + * // => true */ - MD5 : function (options) { - /** - * Private config properties. You may need to tweak these to be compatible with - * the server-side, but the defaults work in most cases. - * See {@link Hashes.MD5#method-setUpperCase} and {@link Hashes.SHA1#method-setUpperCase} - */ - var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase - b64pad = (options && typeof options.pad === 'string') ? options.pda : '=', // base-64 pad character. Defaults to '=' for strict RFC compliance - utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true; // enable/disable utf8 encoding + function isEqual(value, other, customizer, thisArg) { + customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined; + var result = customizer ? customizer(value, other) : undefined; + return result === undefined ? baseIsEqual(value, other, customizer) : !!result; + } - // privileged (public) methods - this.hex = function (s) { - return rstr2hex(rstr(s, utf8), hexcase); - }; - this.b64 = function (s) { - return rstr2b64(rstr(s), b64pad); - }; - this.any = function(s, e) { - return rstr2any(rstr(s, utf8), e); - }; - this.hex_hmac = function (k, d) { - return rstr2hex(rstr_hmac(k, d), hexcase); - }; - this.b64_hmac = function (k, d) { - return rstr2b64(rstr_hmac(k,d), b64pad); - }; - this.any_hmac = function (k, d, e) { - return rstr2any(rstr_hmac(k, d), e); - }; - /** - * Perform a simple self-test to see if the VM is working - * @return {String} Hexadecimal hash sample - */ - this.vm_test = function () { - return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72'; - }; - /** - * Enable/disable uppercase hexadecimal returned string - * @param {Boolean} - * @return {Object} this - */ - this.setUpperCase = function (a) { - if (typeof a === 'boolean' ) { - hexcase = a; - } - return this; - }; - /** - * Defines a base64 pad string - * @param {String} Pad - * @return {Object} this - */ - this.setPad = function (a) { - b64pad = a || b64pad; - return this; - }; - /** - * Defines a base64 pad string - * @param {Boolean} - * @return {Object} [this] - */ - this.setUTF8 = function (a) { - if (typeof a === 'boolean') { - utf8 = a; - } - return this; - }; + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + var isFunction = !(baseIsFunction(/x/) || (Uint8Array && !baseIsFunction(Uint8Array))) ? baseIsFunction : function(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in older versions of Chrome and Safari which return 'function' for regexes + // and Safari 8 equivalents which return 'object' for typed array constructors. + return objToString.call(value) == funcTag; + }; - // private methods + /** + * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(1); + * // => false + */ + function isObject(value) { + // Avoid a V8 JIT bug in Chrome 19-20. + // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); + } - /** - * Calculate the MD5 of a raw string - */ - function rstr(s) { - s = (utf8) ? utf8Encode(s): s; - return binl2rstr(binl(rstr2binl(s), s.length * 8)); + /** + * Checks if `value` is a native function. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */ + function isNative(value) { + if (value == null) { + return false; } - - /** - * Calculate the HMAC-MD5, of a key and some data (raw strings) - */ - function rstr_hmac(key, data) { - var bkey, ipad, opad, hash, i; - - key = (utf8) ? utf8Encode(key) : key; - data = (utf8) ? utf8Encode(data) : data; - bkey = rstr2binl(key); - if (bkey.length > 16) { - bkey = binl(bkey, key.length * 8); - } - - ipad = Array(16), opad = Array(16); - for (i = 0; i < 16; i+=1) { - ipad[i] = bkey[i] ^ 0x36363636; - opad[i] = bkey[i] ^ 0x5C5C5C5C; - } - hash = binl(ipad.concat(rstr2binl(data)), 512 + data.length * 8); - return binl2rstr(binl(opad.concat(hash), 512 + 128)); + if (objToString.call(value) == funcTag) { + return reIsNative.test(fnToString.call(value)); } + return isObjectLike(value) && (isHostObject(value) ? reIsNative : reIsHostCtor).test(value); + } - /** - * Calculate the MD5 of an array of little-endian words, and a bit length. - */ - function binl(x, len) { - var i, olda, oldb, oldc, oldd, - a = 1732584193, - b = -271733879, - c = -1732584194, - d = 271733878; - - /* append padding */ - x[len >> 5] |= 0x80 << ((len) % 32); - x[(((len + 64) >>> 9) << 4) + 14] = len; - - for (i = 0; i < x.length; i += 16) { - olda = a; - oldb = b; - oldc = c; - oldd = d; + /** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * **Note:** This method assumes objects created by the `Object` constructor + * have no inherited enumerable properties. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ + var isPlainObject = !getPrototypeOf ? shimIsPlainObject : function(value) { + if (!(value && objToString.call(value) == objectTag) || (!lodash.support.argsTag && isArguments(value))) { + return false; + } + var valueOf = getNative(value, 'valueOf'), + objProto = valueOf && (objProto = getPrototypeOf(valueOf)) && getPrototypeOf(objProto); - a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936); - d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586); - c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819); - b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330); - a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897); - d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426); - c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341); - b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983); - a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416); - d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417); - c = md5_ff(c, d, a, b, x[i+10], 17, -42063); - b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162); - a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682); - d = md5_ff(d, a, b, c, x[i+13], 12, -40341101); - c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290); - b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329); + return objProto + ? (value == objProto || getPrototypeOf(value) == objProto) + : shimIsPlainObject(value); + }; - a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510); - d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632); - c = md5_gg(c, d, a, b, x[i+11], 14, 643717713); - b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302); - a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691); - d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083); - c = md5_gg(c, d, a, b, x[i+15], 14, -660478335); - b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848); - a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438); - d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690); - c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961); - b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501); - a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467); - d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784); - c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473); - b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734); + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag); + } - a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558); - d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463); - c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562); - b = md5_hh(b, c, d, a, x[i+14], 23, -35309556); - a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060); - d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353); - c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632); - b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640); - a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174); - d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222); - c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979); - b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189); - a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487); - d = md5_hh(d, a, b, c, x[i+12], 11, -421815835); - c = md5_hh(c, d, a, b, x[i+15], 16, 530742520); - b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651); + /** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ + function isTypedArray(value) { + return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)]; + } - a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844); - d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415); - c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905); - b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055); - a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571); - d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606); - c = md5_ii(c, d, a, b, x[i+10], 15, -1051523); - b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799); - a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359); - d = md5_ii(d, a, b, c, x[i+15], 10, -30611744); - c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380); - b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649); - a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070); - d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379); - c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259); - b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551); + /** + * Converts `value` to a plain object flattening inherited enumerable + * properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ + function toPlainObject(value) { + return baseCopy(value, keysIn(value)); + } - a = safe_add(a, olda); - b = safe_add(b, oldb); - c = safe_add(c, oldc); - d = safe_add(d, oldd); - } - return Array(a, b, c, d); - } + /*------------------------------------------------------------------------*/ - /** - * These functions implement the four basic operations the algorithm uses. - */ - function md5_cmn(q, a, b, x, s, t) { - return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b); - } - function md5_ff(a, b, c, d, x, s, t) { - return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); - } - function md5_gg(a, b, c, d, x, s, t) { - return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); - } - function md5_hh(a, b, c, d, x, s, t) { - return md5_cmn(b ^ c ^ d, a, b, x, s, t); - } - function md5_ii(a, b, c, d, x, s, t) { - return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); - } - }, /** - * @member Hashes - * @class Hashes.SHA1 - * @param {Object} [config] - * @constructor - * - * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined in FIPS 180-1 - * Version 2.2 Copyright Paul Johnston 2000 - 2009. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * See http://pajhome.org.uk/crypt/md5 for details. + * Assigns own enumerable properties of source object(s) to the destination + * object. Subsequent sources overwrite property assignments of previous sources. + * If `customizer` is provided it is invoked to produce the assigned values. + * The `customizer` is bound to `thisArg` and invoked with five arguments: + * (objectValue, sourceValue, key, object, source). + * + * **Note:** This method mutates `object` and is based on + * [`Object.assign`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign). + * + * @static + * @memberOf _ + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {Object} Returns `object`. + * @example + * + * _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' }); + * // => { 'user': 'fred', 'age': 40 } + * + * // using a customizer callback + * var defaults = _.partialRight(_.assign, function(value, other) { + * return _.isUndefined(value) ? other : value; + * }); + * + * defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' }); + * // => { 'user': 'barney', 'age': 36 } */ - SHA1 : function (options) { - /** - * Private config properties. You may need to tweak these to be compatible with - * the server-side, but the defaults work in most cases. - * See {@link Hashes.MD5#method-setUpperCase} and {@link Hashes.SHA1#method-setUpperCase} - */ - var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase - b64pad = (options && typeof options.pad === 'string') ? options.pda : '=', // base-64 pad character. Defaults to '=' for strict RFC compliance - utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true; // enable/disable utf8 encoding - - // public methods - this.hex = function (s) { - return rstr2hex(rstr(s, utf8), hexcase); - }; - this.b64 = function (s) { - return rstr2b64(rstr(s, utf8), b64pad); - }; - this.any = function (s, e) { - return rstr2any(rstr(s, utf8), e); - }; - this.hex_hmac = function (k, d) { - return rstr2hex(rstr_hmac(k, d)); - }; - this.b64_hmac = function (k, d) { - return rstr2b64(rstr_hmac(k, d), b64pad); - }; - this.any_hmac = function (k, d, e) { - return rstr2any(rstr_hmac(k, d), e); - }; - /** - * Perform a simple self-test to see if the VM is working - * @return {String} Hexadecimal hash sample - * @public - */ - this.vm_test = function () { - return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72'; - }; - /** - * @description Enable/disable uppercase hexadecimal returned string - * @param {boolean} - * @return {Object} this - * @public - */ - this.setUpperCase = function (a) { - if (typeof a === 'boolean') { - hexcase = a; - } - return this; - }; - /** - * @description Defines a base64 pad string - * @param {string} Pad - * @return {Object} this - * @public - */ - this.setPad = function (a) { - b64pad = a || b64pad; - return this; - }; - /** - * @description Defines a base64 pad string - * @param {boolean} - * @return {Object} this - * @public - */ - this.setUTF8 = function (a) { - if (typeof a === 'boolean') { - utf8 = a; - } - return this; - }; - - // private methods - - /** - * Calculate the SHA-512 of a raw string - */ - function rstr(s) { - s = (utf8) ? utf8Encode(s) : s; - return binb2rstr(binb(rstr2binb(s), s.length * 8)); - } + var assign = createAssigner(function(object, source, customizer) { + return customizer + ? assignWith(object, source, customizer) + : baseAssign(object, source); + }); - /** - * Calculate the HMAC-SHA1 of a key and some data (raw strings) - */ - function rstr_hmac(key, data) { - var bkey, ipad, opad, i, hash; - key = (utf8) ? utf8Encode(key) : key; - data = (utf8) ? utf8Encode(data) : data; - bkey = rstr2binb(key); + /** + * Iterates over own enumerable properties of an object invoking `iteratee` + * for each property. The `iteratee` is bound to `thisArg` and invoked with + * three arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [thisArg] The `this` binding of `iteratee`. + * @returns {Object} Returns `object`. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => logs 'a' and 'b' (iteration order is not guaranteed) + */ + var forOwn = createForOwn(baseForOwn); - if (bkey.length > 16) { - bkey = binb(bkey, key.length * 8); - } - ipad = Array(16), opad = Array(16); - for (i = 0; i < 16; i+=1) { - ipad[i] = bkey[i] ^ 0x36363636; - opad[i] = bkey[i] ^ 0x5C5C5C5C; - } - hash = binb(ipad.concat(rstr2binb(data)), 512 + data.length * 8); - return binb2rstr(binb(opad.concat(hash), 512 + 160)); + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.keys) + * for more details. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + var keys = !nativeKeys ? shimKeys : function(object) { + var Ctor = object == null ? null : object.constructor; + if ((typeof Ctor == 'function' && Ctor.prototype === object) || + (typeof object == 'function' ? lodash.support.enumPrototypes : isArrayLike(object))) { + return shimKeys(object); } + return isObject(object) ? nativeKeys(object) : []; + }; - /** - * Calculate the SHA-1 of an array of big-endian words, and a bit length - */ - function binb(x, len) { - var i, j, t, olda, oldb, oldc, oldd, olde, - w = Array(80), - a = 1732584193, - b = -271733879, - c = -1732584194, - d = 271733878, - e = -1009589776; + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + function keysIn(object) { + if (object == null) { + return []; + } + if (!isObject(object)) { + object = Object(object); + } + var length = object.length, + support = lodash.support; - /* append padding */ - x[len >> 5] |= 0x80 << (24 - len % 32); - x[((len + 64 >> 9) << 4) + 15] = len; + length = (length && isLength(length) && + (isArray(object) || isArguments(object) || isString(object)) && length) || 0; - for (i = 0; i < x.length; i += 16) { - olda = a, - oldb = b; - oldc = c; - oldd = d; - olde = e; - - for (j = 0; j < 80; j+=1) { - if (j < 16) { - w[j] = x[i + j]; - } else { - w[j] = bit_rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1); - } - t = safe_add(safe_add(bit_rol(a, 5), sha1_ft(j, b, c, d)), - safe_add(safe_add(e, w[j]), sha1_kt(j))); - e = d; - d = c; - c = bit_rol(b, 30); - b = a; - a = t; - } + var Ctor = object.constructor, + index = -1, + proto = (isFunction(Ctor) && Ctor.prototype) || objectProto, + isProto = proto === object, + result = Array(length), + skipIndexes = length > 0, + skipErrorProps = support.enumErrorProps && (object === errorProto || object instanceof Error), + skipProto = support.enumPrototypes && isFunction(object); - a = safe_add(a, olda); - b = safe_add(b, oldb); - c = safe_add(c, oldc); - d = safe_add(d, oldd); - e = safe_add(e, olde); + while (++index < length) { + result[index] = (index + ''); + } + // lodash skips the `constructor` property when it infers it is iterating + // over a `prototype` object because IE < 9 can't set the `[[Enumerable]]` + // attribute of an existing property and the `constructor` property of a + // prototype defaults to non-enumerable. + for (var key in object) { + if (!(skipProto && key == 'prototype') && + !(skipErrorProps && (key == 'message' || key == 'name')) && + !(skipIndexes && isIndex(key, length)) && + !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); } - return Array(a, b, c, d, e); } + if (support.nonEnumShadows && object !== objectProto) { + var tag = object === stringProto ? stringTag : (object === errorProto ? errorTag : objToString.call(object)), + nonEnums = nonEnumProps[tag] || nonEnumProps[objectTag]; - /** - * Perform the appropriate triplet combination function for the current - * iteration - */ - function sha1_ft(t, b, c, d) { - if (t < 20) { return (b & c) | ((~b) & d); } - if (t < 40) { return b ^ c ^ d; } - if (t < 60) { return (b & c) | (b & d) | (c & d); } - return b ^ c ^ d; + if (tag == objectTag) { + proto = objectProto; + } + length = shadowProps.length; + while (length--) { + key = shadowProps[length]; + var nonEnum = nonEnums[key]; + if (!(isProto && nonEnum) && + (nonEnum ? hasOwnProperty.call(object, key) : object[key] !== proto[key])) { + result.push(key); + } + } } + return result; + } - /** - * Determine the appropriate additive constant for the current iteration - */ - function sha1_kt(t) { - return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 : - (t < 60) ? -1894007588 : -899497514; - } - }, /** - * @class Hashes.SHA256 - * @param {config} - * - * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined in FIPS 180-2 - * Version 2.2 Copyright Angel Marin, Paul Johnston 2000 - 2009. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * See http://pajhome.org.uk/crypt/md5 for details. - * Also http://anmar.eu.org/projects/jssha2/ + * Recursively merges own enumerable properties of the source object(s), that + * don't resolve to `undefined` into the destination object. Subsequent sources + * overwrite property assignments of previous sources. If `customizer` is + * provided it is invoked to produce the merged values of the destination and + * source properties. If `customizer` returns `undefined` merging is handled + * by the method instead. The `customizer` is bound to `thisArg` and invoked + * with five arguments: (objectValue, sourceValue, key, object, source). + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @param {*} [thisArg] The `this` binding of `customizer`. + * @returns {Object} Returns `object`. + * @example + * + * var users = { + * 'data': [{ 'user': 'barney' }, { 'user': 'fred' }] + * }; + * + * var ages = { + * 'data': [{ 'age': 36 }, { 'age': 40 }] + * }; + * + * _.merge(users, ages); + * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] } + * + * // using a customizer callback + * var object = { + * 'fruits': ['apple'], + * 'vegetables': ['beet'] + * }; + * + * var other = { + * 'fruits': ['banana'], + * 'vegetables': ['carrot'] + * }; + * + * _.merge(object, other, function(a, b) { + * if (_.isArray(a)) { + * return a.concat(b); + * } + * }); + * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] } */ - SHA256 : function (options) { - /** - * Private properties configuration variables. You may need to tweak these to be compatible with - * the server-side, but the defaults work in most cases. - * @see this.setUpperCase() method - * @see this.setPad() method - */ - var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase */ - b64pad = (options && typeof options.pad === 'string') ? options.pda : '=', /* base-64 pad character. Default '=' for strict RFC compliance */ - utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true, /* enable/disable utf8 encoding */ - sha256_K; + var merge = createAssigner(baseMerge); - /* privileged (public) methods */ - this.hex = function (s) { - return rstr2hex(rstr(s, utf8)); - }; - this.b64 = function (s) { - return rstr2b64(rstr(s, utf8), b64pad); - }; - this.any = function (s, e) { - return rstr2any(rstr(s, utf8), e); - }; - this.hex_hmac = function (k, d) { - return rstr2hex(rstr_hmac(k, d)); - }; - this.b64_hmac = function (k, d) { - return rstr2b64(rstr_hmac(k, d), b64pad); - }; - this.any_hmac = function (k, d, e) { - return rstr2any(rstr_hmac(k, d), e); - }; - /** - * Perform a simple self-test to see if the VM is working - * @return {String} Hexadecimal hash sample - * @public - */ - this.vm_test = function () { - return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72'; - }; - /** - * Enable/disable uppercase hexadecimal returned string - * @param {boolean} - * @return {Object} this - * @public - */ - this.setUpperCase = function (a) { - if (typeof a === 'boolean') { - hexcase = a; - } - return this; - }; - /** - * @description Defines a base64 pad string - * @param {string} Pad - * @return {Object} this - * @public - */ - this.setPad = function (a) { - b64pad = a || b64pad; - return this; - }; - /** - * Defines a base64 pad string - * @param {boolean} - * @return {Object} this - * @public - */ - this.setUTF8 = function (a) { - if (typeof a === 'boolean') { - utf8 = a; - } - return this; - }; - - // private methods - - /** - * Calculate the SHA-512 of a raw string - */ - function rstr(s, utf8) { - s = (utf8) ? utf8Encode(s) : s; - return binb2rstr(binb(rstr2binb(s), s.length * 8)); + /** + * The opposite of `_.pick`; this method creates an object composed of the + * own and inherited enumerable properties of `object` that are not omitted. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {Function|...(string|string[])} [predicate] The function invoked per + * iteration or property names to omit, specified as individual property + * names or arrays of property names. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'user': 'fred', 'age': 40 }; + * + * _.omit(object, 'age'); + * // => { 'user': 'fred' } + * + * _.omit(object, _.isNumber); + * // => { 'user': 'fred' } + */ + var omit = restParam(function(object, props) { + if (object == null) { + return {}; } + if (typeof props[0] != 'function') { + var props = arrayMap(baseFlatten(props), String); + return pickByArray(object, baseDifference(keysIn(object), props)); + } + var predicate = bindCallback(props[0], props[1], 3); + return pickByCallback(object, function(value, key, object) { + return !predicate(value, key, object); + }); + }); - /** - * Calculate the HMAC-sha256 of a key and some data (raw strings) - */ - function rstr_hmac(key, data) { - key = (utf8) ? utf8Encode(key) : key; - data = (utf8) ? utf8Encode(data) : data; - var hash, i = 0, - bkey = rstr2binb(key), - ipad = Array(16), - opad = Array(16); + /** + * Creates a two dimensional array of the key-value pairs for `object`, + * e.g. `[[key1, value1], [key2, value2]]`. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the new array of key-value pairs. + * @example + * + * _.pairs({ 'barney': 36, 'fred': 40 }); + * // => [['barney', 36], ['fred', 40]] (iteration order is not guaranteed) + */ + function pairs(object) { + object = toObject(object); - if (bkey.length > 16) { bkey = binb(bkey, key.length * 8); } - - for (; i < 16; i+=1) { - ipad[i] = bkey[i] ^ 0x36363636; - opad[i] = bkey[i] ^ 0x5C5C5C5C; - } - - hash = binb(ipad.concat(rstr2binb(data)), 512 + data.length * 8); - return binb2rstr(binb(opad.concat(hash), 512 + 256)); + var index = -1, + props = keys(object), + length = props.length, + result = Array(length); + + while (++index < length) { + var key = props[index]; + result[index] = [key, object[key]]; } - - /* - * Main sha256 function, with its support functions - */ - function sha256_S (X, n) {return ( X >>> n ) | (X << (32 - n));} - function sha256_R (X, n) {return ( X >>> n );} - function sha256_Ch(x, y, z) {return ((x & y) ^ ((~x) & z));} - function sha256_Maj(x, y, z) {return ((x & y) ^ (x & z) ^ (y & z));} - function sha256_Sigma0256(x) {return (sha256_S(x, 2) ^ sha256_S(x, 13) ^ sha256_S(x, 22));} - function sha256_Sigma1256(x) {return (sha256_S(x, 6) ^ sha256_S(x, 11) ^ sha256_S(x, 25));} - function sha256_Gamma0256(x) {return (sha256_S(x, 7) ^ sha256_S(x, 18) ^ sha256_R(x, 3));} - function sha256_Gamma1256(x) {return (sha256_S(x, 17) ^ sha256_S(x, 19) ^ sha256_R(x, 10));} - function sha256_Sigma0512(x) {return (sha256_S(x, 28) ^ sha256_S(x, 34) ^ sha256_S(x, 39));} - function sha256_Sigma1512(x) {return (sha256_S(x, 14) ^ sha256_S(x, 18) ^ sha256_S(x, 41));} - function sha256_Gamma0512(x) {return (sha256_S(x, 1) ^ sha256_S(x, 8) ^ sha256_R(x, 7));} - function sha256_Gamma1512(x) {return (sha256_S(x, 19) ^ sha256_S(x, 61) ^ sha256_R(x, 6));} - - sha256_K = [ - 1116352408, 1899447441, -1245643825, -373957723, 961987163, 1508970993, - -1841331548, -1424204075, -670586216, 310598401, 607225278, 1426881987, - 1925078388, -2132889090, -1680079193, -1046744716, -459576895, -272742522, - 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, - -1740746414, -1473132947, -1341970488, -1084653625, -958395405, -710438585, - 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, - 1695183700, 1986661051, -2117940946, -1838011259, -1564481375, -1474664885, - -1035236496, -949202525, -778901479, -694614492, -200395387, 275423344, - 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, - 1537002063, 1747873779, 1955562222, 2024104815, -2067236844, -1933114872, - -1866530822, -1538233109, -1090935817, -965641998 - ]; - - function binb(m, l) { - var HASH = [1779033703, -1150833019, 1013904242, -1521486534, - 1359893119, -1694144372, 528734635, 1541459225]; - var W = new Array(64); - var a, b, c, d, e, f, g, h; - var i, j, T1, T2; - - /* append padding */ - m[l >> 5] |= 0x80 << (24 - l % 32); - m[((l + 64 >> 9) << 4) + 15] = l; - - for (i = 0; i < m.length; i += 16) - { - a = HASH[0]; - b = HASH[1]; - c = HASH[2]; - d = HASH[3]; - e = HASH[4]; - f = HASH[5]; - g = HASH[6]; - h = HASH[7]; - - for (j = 0; j < 64; j+=1) - { - if (j < 16) { - W[j] = m[j + i]; - } else { - W[j] = safe_add(safe_add(safe_add(sha256_Gamma1256(W[j - 2]), W[j - 7]), - sha256_Gamma0256(W[j - 15])), W[j - 16]); - } - - T1 = safe_add(safe_add(safe_add(safe_add(h, sha256_Sigma1256(e)), sha256_Ch(e, f, g)), - sha256_K[j]), W[j]); - T2 = safe_add(sha256_Sigma0256(a), sha256_Maj(a, b, c)); - h = g; - g = f; - f = e; - e = safe_add(d, T1); - d = c; - c = b; - b = a; - a = safe_add(T1, T2); - } - - HASH[0] = safe_add(a, HASH[0]); - HASH[1] = safe_add(b, HASH[1]); - HASH[2] = safe_add(c, HASH[2]); - HASH[3] = safe_add(d, HASH[3]); - HASH[4] = safe_add(e, HASH[4]); - HASH[5] = safe_add(f, HASH[5]); - HASH[6] = safe_add(g, HASH[6]); - HASH[7] = safe_add(h, HASH[7]); - } - return HASH; + return result; + } + + /** + * Creates an object composed of the picked `object` properties. Property + * names may be specified as individual arguments or as arrays of property + * names. If `predicate` is provided it is invoked for each property of `object` + * picking the properties `predicate` returns truthy for. The predicate is + * bound to `thisArg` and invoked with three arguments: (value, key, object). + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {Function|...(string|string[])} [predicate] The function invoked per + * iteration or property names to pick, specified as individual property + * names or arrays of property names. + * @param {*} [thisArg] The `this` binding of `predicate`. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'user': 'fred', 'age': 40 }; + * + * _.pick(object, 'user'); + * // => { 'user': 'fred' } + * + * _.pick(object, _.isString); + * // => { 'user': 'fred' } + */ + var pick = restParam(function(object, props) { + if (object == null) { + return {}; } + return typeof props[0] == 'function' + ? pickByCallback(object, bindCallback(props[0], props[1], 3)) + : pickByArray(object, baseFlatten(props)); + }); - }, + /** + * Creates an array of the own enumerable property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values(object) { + return baseValues(object, keys(object)); + } + + /*------------------------------------------------------------------------*/ /** - * @class Hashes.SHA512 - * @param {config} - * - * A JavaScript implementation of the Secure Hash Algorithm, SHA-512, as defined in FIPS 180-2 - * Version 2.2 Copyright Anonymous Contributor, Paul Johnston 2000 - 2009. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * See http://pajhome.org.uk/crypt/md5 for details. + * Escapes the `RegExp` special characters "\", "/", "^", "$", ".", "|", "?", + * "*", "+", "(", ")", "[", "]", "{" and "}" in `string`. + * + * @static + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escapeRegExp('[lodash](https://lodash.com/)'); + * // => '\[lodash\]\(https:\/\/lodash\.com\/\)' */ - SHA512 : function (options) { - /** - * Private properties configuration variables. You may need to tweak these to be compatible with - * the server-side, but the defaults work in most cases. - * @see this.setUpperCase() method - * @see this.setPad() method - */ - var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false , /* hexadecimal output case format. false - lowercase; true - uppercase */ - b64pad = (options && typeof options.pad === 'string') ? options.pda : '=', /* base-64 pad character. Default '=' for strict RFC compliance */ - utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true, /* enable/disable utf8 encoding */ - sha512_k; + function escapeRegExp(string) { + string = baseToString(string); + return (string && reHasRegExpChars.test(string)) + ? string.replace(reRegExpChars, '\\$&') + : string; + } - /* privileged (public) methods */ - this.hex = function (s) { - return rstr2hex(rstr(s)); - }; - this.b64 = function (s) { - return rstr2b64(rstr(s), b64pad); - }; - this.any = function (s, e) { - return rstr2any(rstr(s), e); + /*------------------------------------------------------------------------*/ + + /** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and arguments of the created function. If `func` is a property name the + * created callback returns the property value for a given element. If `func` + * is an object the created callback returns `true` for elements that contain + * the equivalent object properties, otherwise it returns `false`. + * + * @static + * @memberOf _ + * @alias iteratee + * @category Utility + * @param {*} [func=_.identity] The value to convert to a callback. + * @param {*} [thisArg] The `this` binding of `func`. + * @param- {Object} [guard] Enables use as a callback for functions like `_.map`. + * @returns {Function} Returns the callback. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // wrap to create custom callback shorthands + * _.callback = _.wrap(_.callback, function(callback, func, thisArg) { + * var match = /^(.+?)__([gl]t)(.+)$/.exec(func); + * if (!match) { + * return callback(func, thisArg); + * } + * return function(object) { + * return match[2] == 'gt' + * ? object[match[1]] > match[3] + * : object[match[1]] < match[3]; + * }; + * }); + * + * _.filter(users, 'age__gt36'); + * // => [{ 'user': 'fred', 'age': 40 }] + */ + function callback(func, thisArg, guard) { + if (guard && isIterateeCall(func, thisArg, guard)) { + thisArg = null; + } + return isObjectLike(func) + ? matches(func) + : baseCallback(func, thisArg); + } + + /** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @category Utility + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new function. + * @example + * + * var object = { 'user': 'fred' }; + * var getter = _.constant(object); + * + * getter() === object; + * // => true + */ + function constant(value) { + return function() { + return value; }; - this.hex_hmac = function (k, d) { - return rstr2hex(rstr_hmac(k, d)); + } + + /** + * This method returns the first argument provided to it. + * + * @static + * @memberOf _ + * @category Utility + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'user': 'fred' }; + * + * _.identity(object) === object; + * // => true + */ + function identity(value) { + return value; + } + + /** + * Creates a function that performs a deep comparison between a given object + * and `source`, returning `true` if the given object has equivalent property + * values, else `false`. + * + * **Note:** This method supports comparing arrays, booleans, `Date` objects, + * numbers, `Object` objects, regexes, and strings. Objects are compared by + * their own, not inherited, enumerable properties. For comparing a single + * own or inherited property value see `_.matchesProperty`. + * + * @static + * @memberOf _ + * @category Utility + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new function. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, _.matches({ 'age': 40, 'active': false })); + * // => [{ 'user': 'fred', 'age': 40, 'active': false }] + */ + function matches(source) { + return baseMatches(baseClone(source, true)); + } + + /** + * Adds all own enumerable function properties of a source object to the + * destination object. If `object` is a function then methods are added to + * its prototype as well. + * + * **Note:** Use `_.runInContext` to create a pristine `lodash` function to + * avoid conflicts caused by modifying the original. + * + * @static + * @memberOf _ + * @category Utility + * @param {Function|Object} [object=lodash] The destination object. + * @param {Object} source The object of functions to add. + * @param {Object} [options] The options object. + * @param {boolean} [options.chain=true] Specify whether the functions added + * are chainable. + * @returns {Function|Object} Returns `object`. + * @example + * + * function vowels(string) { + * return _.filter(string, function(v) { + * return /[aeiou]/i.test(v); + * }); + * } + * + * _.mixin({ 'vowels': vowels }); + * _.vowels('fred'); + * // => ['e'] + * + * _('fred').vowels().value(); + * // => ['e'] + * + * _.mixin({ 'vowels': vowels }, { 'chain': false }); + * _('fred').vowels(); + * // => ['e'] + */ + function mixin(object, source, options) { + if (options == null) { + var isObj = isObject(source), + props = isObj ? keys(source) : null, + methodNames = (props && props.length) ? baseFunctions(source, props) : null; + + if (!(methodNames ? methodNames.length : isObj)) { + methodNames = false; + options = source; + source = object; + object = this; + } + } + if (!methodNames) { + methodNames = baseFunctions(source, keys(source)); + } + var chain = true, + index = -1, + isFunc = isFunction(object), + length = methodNames.length; + + if (options === false) { + chain = false; + } else if (isObject(options) && 'chain' in options) { + chain = options.chain; + } + while (++index < length) { + var methodName = methodNames[index], + func = source[methodName]; + + object[methodName] = func; + if (isFunc) { + object.prototype[methodName] = (function(func) { + return function() { + var chainAll = this.__chain__; + if (chain || chainAll) { + var result = object(this.__wrapped__), + actions = result.__actions__ = arrayCopy(this.__actions__); + + actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); + result.__chain__ = chainAll; + return result; + } + var args = [this.value()]; + push.apply(args, arguments); + return func.apply(object, args); + }; + }(func)); + } + } + return object; + } + + /** + * A no-operation function that returns `undefined` regardless of the + * arguments it receives. + * + * @static + * @memberOf _ + * @category Utility + * @example + * + * var object = { 'user': 'fred' }; + * + * _.noop(object) === undefined; + * // => true + */ + function noop() { + // No operation performed. + } + + /** + * Creates a function that returns the property value at `path` on a + * given object. + * + * @static + * @memberOf _ + * @category Utility + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new function. + * @example + * + * var objects = [ + * { 'a': { 'b': { 'c': 2 } } }, + * { 'a': { 'b': { 'c': 1 } } } + * ]; + * + * _.map(objects, _.property('a.b.c')); + * // => [2, 1] + * + * _.pluck(_.sortBy(objects, _.property(['a', 'b', 'c'])), 'a.b.c'); + * // => [1, 2] + */ + function property(path) { + return isKey(path) ? baseProperty(path) : basePropertyDeep(path); + } + + /*------------------------------------------------------------------------*/ + + // Ensure wrappers are instances of `baseLodash`. + lodash.prototype = baseLodash.prototype; + + LodashWrapper.prototype = baseCreate(baseLodash.prototype); + LodashWrapper.prototype.constructor = LodashWrapper; + + LazyWrapper.prototype = baseCreate(baseLodash.prototype); + LazyWrapper.prototype.constructor = LazyWrapper; + + // Add functions to the `Set` cache. + SetCache.prototype.push = cachePush; + + // Add functions that return wrapped values when chaining. + lodash.assign = assign; + lodash.bind = bind; + lodash.callback = callback; + lodash.chain = chain; + lodash.chunk = chunk; + lodash.compact = compact; + lodash.constant = constant; + lodash.debounce = debounce; + lodash.difference = difference; + lodash.filter = filter; + lodash.flatten = flatten; + lodash.forEach = forEach; + lodash.forOwn = forOwn; + lodash.groupBy = groupBy; + lodash.intersection = intersection; + lodash.keys = keys; + lodash.keysIn = keysIn; + lodash.map = map; + lodash.matches = matches; + lodash.merge = merge; + lodash.mixin = mixin; + lodash.omit = omit; + lodash.pairs = pairs; + lodash.pick = pick; + lodash.pluck = pluck; + lodash.property = property; + lodash.reject = reject; + lodash.restParam = restParam; + lodash.tap = tap; + lodash.throttle = throttle; + lodash.thru = thru; + lodash.toPlainObject = toPlainObject; + lodash.union = union; + lodash.uniq = uniq; + lodash.values = values; + lodash.without = without; + + // Add aliases. + lodash.collect = map; + lodash.each = forEach; + lodash.extend = assign; + lodash.iteratee = callback; + lodash.select = filter; + lodash.unique = uniq; + + // Add functions to `lodash.prototype`. + mixin(lodash, lodash); + + /*------------------------------------------------------------------------*/ + + // Add functions that return unwrapped values when chaining. + lodash.clone = clone; + lodash.cloneDeep = cloneDeep; + lodash.escapeRegExp = escapeRegExp; + lodash.every = every; + lodash.find = find; + lodash.first = first; + lodash.identity = identity; + lodash.includes = includes; + lodash.indexOf = indexOf; + lodash.isArguments = isArguments; + lodash.isArray = isArray; + lodash.isEmpty = isEmpty; + lodash.isEqual = isEqual; + lodash.isFunction = isFunction; + lodash.isNative = isNative; + lodash.isObject = isObject; + lodash.isPlainObject = isPlainObject; + lodash.isString = isString; + lodash.isTypedArray = isTypedArray; + lodash.last = last; + lodash.noop = noop; + lodash.now = now; + lodash.reduce = reduce; + lodash.some = some; + + // Add aliases. + lodash.all = every; + lodash.any = some; + lodash.contains = includes; + lodash.eq = isEqual; + lodash.detect = find; + lodash.foldl = reduce; + lodash.head = first; + lodash.include = includes; + lodash.inject = reduce; + + mixin(lodash, (function() { + var source = {}; + baseForOwn(lodash, function(func, methodName) { + if (!lodash.prototype[methodName]) { + source[methodName] = func; + } + }); + return source; + }()), false); + + /*------------------------------------------------------------------------*/ + + lodash.prototype.sample = function(n) { + if (!this.__chain__ && n == null) { + return sample(this.value()); + } + return this.thru(function(value) { + return sample(value, n); + }); + }; + + /*------------------------------------------------------------------------*/ + + /** + * The semantic version number. + * + * @static + * @memberOf _ + * @type string + */ + lodash.VERSION = VERSION; + + // Assign default placeholders. + bind.placeholder = lodash; + + // Add `LazyWrapper` methods that accept an `iteratee` value. + arrayEach(['dropWhile', 'filter', 'map', 'takeWhile'], function(methodName, type) { + var isFilter = type != LAZY_MAP_FLAG, + isDropWhile = type == LAZY_DROP_WHILE_FLAG; + + LazyWrapper.prototype[methodName] = function(iteratee, thisArg) { + var filtered = this.__filtered__, + result = (filtered && isDropWhile) ? new LazyWrapper(this) : this.clone(), + iteratees = result.__iteratees__ || (result.__iteratees__ = []); + + iteratees.push({ + 'done': false, + 'count': 0, + 'index': 0, + 'iteratee': getCallback(iteratee, thisArg, 1), + 'limit': -1, + 'type': type + }); + + result.__filtered__ = filtered || isFilter; + return result; }; - this.b64_hmac = function (k, d) { - return rstr2b64(rstr_hmac(k, d), b64pad); + }); + + // Add `LazyWrapper` methods for `_.drop` and `_.take` variants. + arrayEach(['drop', 'take'], function(methodName, index) { + var whileName = methodName + 'While'; + + LazyWrapper.prototype[methodName] = function(n) { + var filtered = this.__filtered__, + result = (filtered && !index) ? this.dropWhile() : this.clone(); + + n = n == null ? 1 : nativeMax(floor(n) || 0, 0); + if (filtered) { + if (index) { + result.__takeCount__ = nativeMin(result.__takeCount__, n); + } else { + last(result.__iteratees__).limit = n; + } + } else { + var views = result.__views__ || (result.__views__ = []); + views.push({ 'size': n, 'type': methodName + (result.__dir__ < 0 ? 'Right' : '') }); + } + return result; }; - this.any_hmac = function (k, d, e) { - return rstr2any(rstr_hmac(k, d), e); + + LazyWrapper.prototype[methodName + 'Right'] = function(n) { + return this.reverse()[methodName](n).reverse(); }; - /** - * Perform a simple self-test to see if the VM is working - * @return {String} Hexadecimal hash sample - * @public - */ - this.vm_test = function () { - return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72'; + + LazyWrapper.prototype[methodName + 'RightWhile'] = function(predicate, thisArg) { + return this.reverse()[whileName](predicate, thisArg).reverse(); }; - /** - * @description Enable/disable uppercase hexadecimal returned string - * @param {boolean} - * @return {Object} this - * @public - */ - this.setUpperCase = function (a) { - if (typeof a === 'boolean') { - hexcase = a; - } - return this; + }); + + // Add `LazyWrapper` methods for `_.first` and `_.last`. + arrayEach(['first', 'last'], function(methodName, index) { + var takeName = 'take' + (index ? 'Right' : ''); + + LazyWrapper.prototype[methodName] = function() { + return this[takeName](1).value()[0]; }; - /** - * @description Defines a base64 pad string - * @param {string} Pad - * @return {Object} this - * @public - */ - this.setPad = function (a) { - b64pad = a || b64pad; - return this; + }); + + // Add `LazyWrapper` methods for `_.initial` and `_.rest`. + arrayEach(['initial', 'rest'], function(methodName, index) { + var dropName = 'drop' + (index ? '' : 'Right'); + + LazyWrapper.prototype[methodName] = function() { + return this[dropName](1); }; - /** - * @description Defines a base64 pad string - * @param {boolean} - * @return {Object} this - * @public - */ - this.setUTF8 = function (a) { - if (typeof a === 'boolean') { - utf8 = a; - } - return this; + }); + + // Add `LazyWrapper` methods for `_.pluck` and `_.where`. + arrayEach(['pluck', 'where'], function(methodName, index) { + var operationName = index ? 'filter' : 'map', + createCallback = index ? baseMatches : property; + + LazyWrapper.prototype[methodName] = function(value) { + return this[operationName](createCallback(value)); }; + }); - /* private methods */ - - /** - * Calculate the SHA-512 of a raw string - */ - function rstr(s) { - s = (utf8) ? utf8Encode(s) : s; - return binb2rstr(binb(rstr2binb(s), s.length * 8)); + LazyWrapper.prototype.compact = function() { + return this.filter(identity); + }; + + LazyWrapper.prototype.reject = function(predicate, thisArg) { + predicate = getCallback(predicate, thisArg, 1); + return this.filter(function(value) { + return !predicate(value); + }); + }; + + LazyWrapper.prototype.slice = function(start, end) { + start = start == null ? 0 : (+start || 0); + + var result = this; + if (start < 0) { + result = this.takeRight(-start); + } else if (start) { + result = this.drop(start); } - /* - * Calculate the HMAC-SHA-512 of a key and some data (raw strings) - */ - function rstr_hmac(key, data) { - key = (utf8) ? utf8Encode(key) : key; - data = (utf8) ? utf8Encode(data) : data; - - var hash, i = 0, - bkey = rstr2binb(key), - ipad = Array(32), opad = Array(32); + if (end !== undefined) { + end = (+end || 0); + result = end < 0 ? result.dropRight(-end) : result.take(end - start); + } + return result; + }; - if (bkey.length > 32) { bkey = binb(bkey, key.length * 8); } - - for (; i < 32; i+=1) { - ipad[i] = bkey[i] ^ 0x36363636; - opad[i] = bkey[i] ^ 0x5C5C5C5C; - } - - hash = binb(ipad.concat(rstr2binb(data)), 1024 + data.length * 8); - return binb2rstr(binb(opad.concat(hash), 1024 + 512)); + LazyWrapper.prototype.toArray = function() { + return this.drop(0); + }; + + // Add `LazyWrapper` methods to `lodash.prototype`. + baseForOwn(LazyWrapper.prototype, function(func, methodName) { + var lodashFunc = lodash[methodName]; + if (!lodashFunc) { + return; } - - /** - * Calculate the SHA-512 of an array of big-endian dwords, and a bit length - */ - function binb(x, len) { - var j, i, l, - W = new Array(80), - hash = new Array(16), - //Initial hash values - H = [ - new int64(0x6a09e667, -205731576), - new int64(-1150833019, -2067093701), - new int64(0x3c6ef372, -23791573), - new int64(-1521486534, 0x5f1d36f1), - new int64(0x510e527f, -1377402159), - new int64(-1694144372, 0x2b3e6c1f), - new int64(0x1f83d9ab, -79577749), - new int64(0x5be0cd19, 0x137e2179) - ], - T1 = new int64(0, 0), - T2 = new int64(0, 0), - a = new int64(0,0), - b = new int64(0,0), - c = new int64(0,0), - d = new int64(0,0), - e = new int64(0,0), - f = new int64(0,0), - g = new int64(0,0), - h = new int64(0,0), - //Temporary variables not specified by the document - s0 = new int64(0, 0), - s1 = new int64(0, 0), - Ch = new int64(0, 0), - Maj = new int64(0, 0), - r1 = new int64(0, 0), - r2 = new int64(0, 0), - r3 = new int64(0, 0); + var checkIteratee = /^(?:filter|map|reject)|While$/.test(methodName), + retUnwrapped = /^(?:first|last)$/.test(methodName); - if (sha512_k === undefined) { - //SHA512 constants - sha512_k = [ - new int64(0x428a2f98, -685199838), new int64(0x71374491, 0x23ef65cd), - new int64(-1245643825, -330482897), new int64(-373957723, -2121671748), - new int64(0x3956c25b, -213338824), new int64(0x59f111f1, -1241133031), - new int64(-1841331548, -1357295717), new int64(-1424204075, -630357736), - new int64(-670586216, -1560083902), new int64(0x12835b01, 0x45706fbe), - new int64(0x243185be, 0x4ee4b28c), new int64(0x550c7dc3, -704662302), - new int64(0x72be5d74, -226784913), new int64(-2132889090, 0x3b1696b1), - new int64(-1680079193, 0x25c71235), new int64(-1046744716, -815192428), - new int64(-459576895, -1628353838), new int64(-272742522, 0x384f25e3), - new int64(0xfc19dc6, -1953704523), new int64(0x240ca1cc, 0x77ac9c65), - new int64(0x2de92c6f, 0x592b0275), new int64(0x4a7484aa, 0x6ea6e483), - new int64(0x5cb0a9dc, -1119749164), new int64(0x76f988da, -2096016459), - new int64(-1740746414, -295247957), new int64(-1473132947, 0x2db43210), - new int64(-1341970488, -1728372417), new int64(-1084653625, -1091629340), - new int64(-958395405, 0x3da88fc2), new int64(-710438585, -1828018395), - new int64(0x6ca6351, -536640913), new int64(0x14292967, 0xa0e6e70), - new int64(0x27b70a85, 0x46d22ffc), new int64(0x2e1b2138, 0x5c26c926), - new int64(0x4d2c6dfc, 0x5ac42aed), new int64(0x53380d13, -1651133473), - new int64(0x650a7354, -1951439906), new int64(0x766a0abb, 0x3c77b2a8), - new int64(-2117940946, 0x47edaee6), new int64(-1838011259, 0x1482353b), - new int64(-1564481375, 0x4cf10364), new int64(-1474664885, -1136513023), - new int64(-1035236496, -789014639), new int64(-949202525, 0x654be30), - new int64(-778901479, -688958952), new int64(-694614492, 0x5565a910), - new int64(-200395387, 0x5771202a), new int64(0x106aa070, 0x32bbd1b8), - new int64(0x19a4c116, -1194143544), new int64(0x1e376c08, 0x5141ab53), - new int64(0x2748774c, -544281703), new int64(0x34b0bcb5, -509917016), - new int64(0x391c0cb3, -976659869), new int64(0x4ed8aa4a, -482243893), - new int64(0x5b9cca4f, 0x7763e373), new int64(0x682e6ff3, -692930397), - new int64(0x748f82ee, 0x5defb2fc), new int64(0x78a5636f, 0x43172f60), - new int64(-2067236844, -1578062990), new int64(-1933114872, 0x1a6439ec), - new int64(-1866530822, 0x23631e28), new int64(-1538233109, -561857047), - new int64(-1090935817, -1295615723), new int64(-965641998, -479046869), - new int64(-903397682, -366583396), new int64(-779700025, 0x21c0c207), - new int64(-354779690, -840897762), new int64(-176337025, -294727304), - new int64(0x6f067aa, 0x72176fba), new int64(0xa637dc5, -1563912026), - new int64(0x113f9804, -1090974290), new int64(0x1b710b35, 0x131c471b), - new int64(0x28db77f5, 0x23047d84), new int64(0x32caab7b, 0x40c72493), - new int64(0x3c9ebe0a, 0x15c9bebc), new int64(0x431d67c4, -1676669620), - new int64(0x4cc5d4be, -885112138), new int64(0x597f299c, -60457430), - new int64(0x5fcb6fab, 0x3ad6faec), new int64(0x6c44198c, 0x4a475817) - ]; + lodash.prototype[methodName] = function() { + var args = arguments, + chainAll = this.__chain__, + value = this.__wrapped__, + isHybrid = !!this.__actions__.length, + isLazy = value instanceof LazyWrapper, + iteratee = args[0], + useLazy = isLazy || isArray(value); + + if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) { + // avoid lazy use if the iteratee has a "length" value other than `1` + isLazy = useLazy = false; } - - for (i=0; i<80; i+=1) { - W[i] = new int64(0, 0); + var onlyLazy = isLazy && !isHybrid; + if (retUnwrapped && !chainAll) { + return onlyLazy + ? func.call(value) + : lodashFunc.call(lodash, this.value()); } - - // append padding to the source string. The format is described in the FIPS. - x[len >> 5] |= 0x80 << (24 - (len & 0x1f)); - x[((len + 128 >> 10)<< 5) + 31] = len; - l = x.length; - for (i = 0; i=32 - //The function revrrot() is for that - function int64rrot(dst, x, shift) { - dst.l = (x.l >>> shift) | (x.h << (32-shift)); - dst.h = (x.h >>> shift) | (x.l << (32-shift)); - } - - //Reverses the dwords of the source and then rotates right by shift. - //This is equivalent to rotation by 32+shift - function int64revrrot(dst, x, shift) { - dst.l = (x.h >>> shift) | (x.l << (32-shift)); - dst.h = (x.l >>> shift) | (x.h << (32-shift)); - } - - //Bitwise-shifts right a 64-bit number by shift - //Won't handle shift>=32, but it's never needed in SHA512 - function int64shr(dst, x, shift) { - dst.l = (x.l >>> shift) | (x.h << (32-shift)); - dst.h = (x.h >>> shift); - } - - //Adds two 64-bit numbers - //Like the original implementation, does not rely on 32-bit operations - function int64add(dst, x, y) { - var w0 = (x.l & 0xffff) + (y.l & 0xffff); - var w1 = (x.l >>> 16) + (y.l >>> 16) + (w0 >>> 16); - var w2 = (x.h & 0xffff) + (y.h & 0xffff) + (w1 >>> 16); - var w3 = (x.h >>> 16) + (y.h >>> 16) + (w2 >>> 16); - dst.l = (w0 & 0xffff) | (w1 << 16); - dst.h = (w2 & 0xffff) | (w3 << 16); - } - - //Same, except with 4 addends. Works faster than adding them one by one. - function int64add4(dst, a, b, c, d) { - var w0 = (a.l & 0xffff) + (b.l & 0xffff) + (c.l & 0xffff) + (d.l & 0xffff); - var w1 = (a.l >>> 16) + (b.l >>> 16) + (c.l >>> 16) + (d.l >>> 16) + (w0 >>> 16); - var w2 = (a.h & 0xffff) + (b.h & 0xffff) + (c.h & 0xffff) + (d.h & 0xffff) + (w1 >>> 16); - var w3 = (a.h >>> 16) + (b.h >>> 16) + (c.h >>> 16) + (d.h >>> 16) + (w2 >>> 16); - dst.l = (w0 & 0xffff) | (w1 << 16); - dst.h = (w2 & 0xffff) | (w3 << 16); + return result; + }; + + lodash.prototype[methodName] = function() { + var args = arguments; + if (retUnwrapped && !this.__chain__) { + return func.apply(this.value(), args); + } + return this[chainName](function(value) { + return func.apply(value, args); + }); + }; + }); + + // Map minified function names to their real names. + baseForOwn(LazyWrapper.prototype, function(func, methodName) { + var lodashFunc = lodash[methodName]; + if (lodashFunc) { + var key = lodashFunc.name, + names = realNames[key] || (realNames[key] = []); + + names.push({ 'name': methodName, 'func': lodashFunc }); } - - //Same, except with 5 addends - function int64add5(dst, a, b, c, d, e) { - var w0 = (a.l & 0xffff) + (b.l & 0xffff) + (c.l & 0xffff) + (d.l & 0xffff) + (e.l & 0xffff), - w1 = (a.l >>> 16) + (b.l >>> 16) + (c.l >>> 16) + (d.l >>> 16) + (e.l >>> 16) + (w0 >>> 16), - w2 = (a.h & 0xffff) + (b.h & 0xffff) + (c.h & 0xffff) + (d.h & 0xffff) + (e.h & 0xffff) + (w1 >>> 16), - w3 = (a.h >>> 16) + (b.h >>> 16) + (c.h >>> 16) + (d.h >>> 16) + (e.h >>> 16) + (w2 >>> 16); - dst.l = (w0 & 0xffff) | (w1 << 16); - dst.h = (w2 & 0xffff) | (w3 << 16); + }); + + realNames[createHybridWrapper(null, BIND_KEY_FLAG).name] = [{ 'name': 'wrapper', 'func': null }]; + + // Add functions to the lazy wrapper. + LazyWrapper.prototype.clone = lazyClone; + LazyWrapper.prototype.reverse = lazyReverse; + LazyWrapper.prototype.value = lazyValue; + + // Add chaining functions to the `lodash` wrapper. + lodash.prototype.chain = wrapperChain; + lodash.prototype.commit = wrapperCommit; + lodash.prototype.plant = wrapperPlant; + lodash.prototype.reverse = wrapperReverse; + lodash.prototype.toString = wrapperToString; + lodash.prototype.run = lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; + + // Add function aliases to the `lodash` wrapper. + lodash.prototype.collect = lodash.prototype.map; + lodash.prototype.head = lodash.prototype.first; + lodash.prototype.select = lodash.prototype.filter; + lodash.prototype.tail = lodash.prototype.rest; + + /*--------------------------------------------------------------------------*/ + + if (freeExports && freeModule) { + // Export for Node.js or RingoJS. + if (moduleExports) { + (freeModule.exports = lodash)._ = lodash; } - }, - /** - * @class Hashes.RMD160 - * @constructor - * @param {Object} [config] - * - * A JavaScript implementation of the RIPEMD-160 Algorithm - * Version 2.2 Copyright Jeremy Lin, Paul Johnston 2000 - 2009. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * See http://pajhome.org.uk/crypt/md5 for details. - * Also http://www.ocf.berkeley.edu/~jjlin/jsotp/ - */ - RMD160 : function (options) { - /** - * Private properties configuration variables. You may need to tweak these to be compatible with - * the server-side, but the defaults work in most cases. - * @see this.setUpperCase() method - * @see this.setPad() method - */ - var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, /* hexadecimal output case format. false - lowercase; true - uppercase */ - b64pad = (options && typeof options.pad === 'string') ? options.pda : '=', /* base-64 pad character. Default '=' for strict RFC compliance */ - utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true, /* enable/disable utf8 encoding */ - rmd160_r1 = [ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 - ], - rmd160_r2 = [ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 - ], - rmd160_s1 = [ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 - ], - rmd160_s2 = [ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 - ]; + } + else { + // Export for a browser or Rhino. + root._ = lodash; + } +}.call(this)); +(function(e){if("function"==typeof bootstrap)bootstrap("osmauth",e);else if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else if("undefined"!=typeof ses){if(!ses.ok())return;ses.makeOsmAuth=e}else"undefined"!=typeof window?window.osmAuth=e():global.osmAuth=e()})(function(){var define,ses,bootstrap,module,exports; +return (function(e,t,n){function i(n,s){if(!t[n]){if(!e[n]){var o=typeof require=="function"&&require;if(!s&&o)return o(n,!0);if(r)return r(n,!0);throw new Error("Cannot find module '"+n+"'")}var u=t[n]={exports:{}};e[n][0].call(u.exports,function(t){var r=e[n][1][t];return i(r?r:t)},u,u.exports)}return t[n].exports}var r=typeof require=="function"&&require;for(var s=0;s 16) { - bkey = binl(bkey, key.length * 8); - } - - for (i = 0; i < 16; i+=1) { - ipad[i] = bkey[i] ^ 0x36363636; - opad[i] = bkey[i] ^ 0x5C5C5C5C; - } - hash = binl(ipad.concat(rstr2binl(data)), 512 + data.length * 8); - return binl2rstr(binl(opad.concat(hash), 512 + 160)); - } + params.oauth_signature = ohauth.signature( + o.oauth_secret, '', + ohauth.baseString('POST', url, params)); - /** - * Convert an array of little-endian words to a string - */ - function binl2rstr(input) { - var i, output = '', l = input.length * 32; - for (i = 0; i < l; i += 8) { - output += String.fromCharCode((input[i>>5] >>> (i % 32)) & 0xFF); - } - return output; - } + if (!o.singlepage) { + // Create a 600x550 popup window in the center of the screen + var w = 600, h = 550, + settings = [ + ['width', w], ['height', h], + ['left', screen.width / 2 - w / 2], + ['top', screen.height / 2 - h / 2]].map(function(x) { + return x.join('='); + }).join(','), + popup = window.open('about:blank', 'oauth_window', settings); - /** - * Calculate the RIPE-MD160 of an array of little-endian words, and a bit length. - */ - function binl(x, len) { - var T, j, i, l, - h0 = 0x67452301, - h1 = 0xefcdab89, - h2 = 0x98badcfe, - h3 = 0x10325476, - h4 = 0xc3d2e1f0, - A1, B1, C1, D1, E1, - A2, B2, C2, D2, E2; - /* append padding */ - x[len >> 5] |= 0x80 << (len % 32); - x[(((len + 64) >>> 9) << 4) + 14] = len; - l = x.length; - - for (i = 0; i < l; i+=16) { - A1 = A2 = h0; B1 = B2 = h1; C1 = C2 = h2; D1 = D2 = h3; E1 = E2 = h4; - for (j = 0; j <= 79; j+=1) { - T = safe_add(A1, rmd160_f(j, B1, C1, D1)); - T = safe_add(T, x[i + rmd160_r1[j]]); - T = safe_add(T, rmd160_K1(j)); - T = safe_add(bit_rol(T, rmd160_s1[j]), E1); - A1 = E1; E1 = D1; D1 = bit_rol(C1, 10); C1 = B1; B1 = T; - T = safe_add(A2, rmd160_f(79-j, B2, C2, D2)); - T = safe_add(T, x[i + rmd160_r2[j]]); - T = safe_add(T, rmd160_K2(j)); - T = safe_add(bit_rol(T, rmd160_s2[j]), E2); - A2 = E2; E2 = D2; D2 = bit_rol(C2, 10); C2 = B2; B2 = T; + timer = setInterval(function() { + if (popup.closed) { + o.done(); + clearInterval(timer); + callback('not authenticated', null); + } + }, 100); } - T = safe_add(h1, safe_add(C1, D2)); - h1 = safe_add(h2, safe_add(D1, E2)); - h2 = safe_add(h3, safe_add(E1, A2)); - h3 = safe_add(h4, safe_add(A1, B2)); - h4 = safe_add(h0, safe_add(B1, C2)); - h0 = T; - } - return [h0, h1, h2, h3, h4]; - } - - // specific algorithm methods - function rmd160_f(j, x, y, z) { - return ( 0 <= j && j <= 15) ? (x ^ y ^ z) : - (16 <= j && j <= 31) ? (x & y) | (~x & z) : - (32 <= j && j <= 47) ? (x | ~y) ^ z : - (48 <= j && j <= 63) ? (x & z) | (y & ~z) : - (64 <= j && j <= 79) ? x ^ (y | ~z) : - 'rmd160_f: j out of range'; - } + // Request a request token. When this is complete, the popup + // window is redirected to OSM's authorization page. + ohauth.xhr('POST', url, params, null, {}, reqTokenDone); + o.loading(); - function rmd160_K1(j) { - return ( 0 <= j && j <= 15) ? 0x00000000 : - (16 <= j && j <= 31) ? 0x5a827999 : - (32 <= j && j <= 47) ? 0x6ed9eba1 : - (48 <= j && j <= 63) ? 0x8f1bbcdc : - (64 <= j && j <= 79) ? 0xa953fd4e : - 'rmd160_K1: j out of range'; - } + function reqTokenDone(err, xhr) { + o.done(); + if (err) { + if (timer) clearInterval(timer); + return callback(err); + } + var resp = ohauth.stringQs(xhr.response); + token('oauth_request_token_secret', resp.oauth_token_secret); + var authorize_url = o.url + '/oauth/authorize?' + ohauth.qsString({ + oauth_token: resp.oauth_token, + oauth_callback: location.href.replace('index.html', '') + .replace(/#.*/, '') + o.landing + }); - function rmd160_K2(j){ - return ( 0 <= j && j <= 15) ? 0x50a28be6 : - (16 <= j && j <= 31) ? 0x5c4dd124 : - (32 <= j && j <= 47) ? 0x6d703ef3 : - (48 <= j && j <= 63) ? 0x7a6d76e9 : - (64 <= j && j <= 79) ? 0x00000000 : - 'rmd160_K2: j out of range'; - } - } -}; + if (o.singlepage) { + location.href = authorize_url; + } else { + popup.location = authorize_url; + } + } - // exposes Hashes - (function( window, undefined ) { - var freeExports = false; - if (typeof exports === 'object' ) { - freeExports = exports; - if (exports && typeof global === 'object' && global && global === global.global ) { window = global; } - } - - if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) { - // define as an anonymous module, so, through path mapping, it can be aliased - define(function () { return Hashes; }); - } - else if ( freeExports ) { - // in Node.js or RingoJS v0.8.0+ - if ( typeof module === 'object' && module && module.exports === freeExports ) { - module.exports = Hashes; - } - // in Narwhal or RingoJS v0.7.0- - else { - freeExports.Hashes = Hashes; - } - } - else { - // in a browser or Rhino - window.Hashes = Hashes; - } - }( this )); -}()); // IIFE - -})(window) -},{}],2:[function(require,module,exports){ -'use strict'; - -var hashes = require('jshashes'), - xtend = require('xtend'), - sha1 = new hashes.SHA1(); - -var ohauth = {}; + // Called by a function in a landing page, in the popup window. The + // window closes itself. + window.authComplete = function(token) { + if (timer) clearInterval(timer); + var oauth_token = ohauth.stringQs(token.split('?')[1]); + get_access_token(oauth_token.oauth_token); + delete window.authComplete; + }; -ohauth.qsString = function(obj) { - return Object.keys(obj).sort().map(function(key) { - return ohauth.percentEncode(key) + '=' + - ohauth.percentEncode(obj[key]); - }).join('&'); -}; + // ## Getting an request token + // + // At this point we have an `oauth_token`, brought in from a function + // call on a landing page popup. + function get_access_token(oauth_token) { + var url = o.url + '/oauth/access_token', + params = timenonce(getAuth(o)), + request_token_secret = token('oauth_request_token_secret'); + params.oauth_token = oauth_token; + params.oauth_signature = ohauth.signature( + o.oauth_secret, + request_token_secret, + ohauth.baseString('POST', url, params)); -ohauth.stringQs = function(str) { - return str.split('&').reduce(function(obj, pair){ - var parts = pair.split('='); - obj[decodeURIComponent(parts[0])] = (null === parts[1]) ? - '' : decodeURIComponent(parts[1]); - return obj; - }, {}); -}; + // ## Getting an access token + // + // The final token required for authentication. At this point + // we have a `request token secret` + ohauth.xhr('POST', url, params, null, {}, accessTokenDone); + o.loading(); + } -ohauth.rawxhr = function(method, url, data, headers, callback) { - var xhr = new XMLHttpRequest(), - twoHundred = /^20\d$/; - xhr.onreadystatechange = function() { - if (4 == xhr.readyState && 0 !== xhr.status) { - if (twoHundred.test(xhr.status)) callback(null, xhr); - else return callback(xhr, null); + function accessTokenDone(err, xhr) { + o.done(); + if (timer) clearInterval(timer); + if (err) return callback(err); + var access_token = ohauth.stringQs(xhr.response); + token('oauth_token', access_token.oauth_token); + token('oauth_token_secret', access_token.oauth_token_secret); + callback(null, oauth); } }; - xhr.onerror = function(e) { return callback(e, null); }; - xhr.open(method, url, true); - for (var h in headers) xhr.setRequestHeader(h, headers[h]); - xhr.send(data); -}; -ohauth.xhr = function(method, url, auth, data, options, callback) { - var headers = (options && options.header) || { - 'Content-Type': 'application/x-www-form-urlencoded' - }; - headers.Authorization = 'OAuth ' + ohauth.authHeader(auth); - ohauth.rawxhr(method, url, data, headers, callback); -}; + oauth.bootstrapToken = function(oauth_token, callback) { + // ## Getting an request token + // At this point we have an `oauth_token`, brought in from a function + // call on a landing page popup. + function get_access_token(oauth_token) { + var url = o.url + '/oauth/access_token', + params = timenonce(getAuth(o)), + request_token_secret = token('oauth_request_token_secret'); + params.oauth_token = oauth_token; + params.oauth_signature = ohauth.signature( + o.oauth_secret, + request_token_secret, + ohauth.baseString('POST', url, params)); -ohauth.nonce = function() { - for (var o = ''; o.length < 6;) { - o += '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'[Math.floor(Math.random() * 61)]; - } - return o; -}; + // ## Getting an access token + // The final token required for authentication. At this point + // we have a `request token secret` + ohauth.xhr('POST', url, params, null, {}, accessTokenDone); + o.loading(); + } -ohauth.authHeader = function(obj) { - return Object.keys(obj).sort().map(function(key) { - return encodeURIComponent(key) + '="' + encodeURIComponent(obj[key]) + '"'; - }).join(', '); -}; + function accessTokenDone(err, xhr) { + o.done(); + if (err) return callback(err); + var access_token = ohauth.stringQs(xhr.response); + token('oauth_token', access_token.oauth_token); + token('oauth_token_secret', access_token.oauth_token_secret); + callback(null, oauth); + } -ohauth.timestamp = function() { return ~~((+new Date()) / 1000); }; + get_access_token(oauth_token); + }; -ohauth.percentEncode = function(s) { - return encodeURIComponent(s) - .replace(/\!/g, '%21').replace(/\'/g, '%27') - .replace(/\*/g, '%2A').replace(/\(/g, '%28').replace(/\)/g, '%29'); -}; + // # xhr + // + // A single XMLHttpRequest wrapper that does authenticated calls if the + // user has logged in. + oauth.xhr = function(options, callback) { + if (!oauth.authenticated()) { + if (o.auto) return oauth.authenticate(run); + else return callback('not authenticated', null); + } else return run(); -ohauth.baseString = function(method, url, params) { - if (params.oauth_signature) delete params.oauth_signature; - return [ - method, - ohauth.percentEncode(url), - ohauth.percentEncode(ohauth.qsString(params))].join('&'); -}; + function run() { + var params = timenonce(getAuth(o)), + url = o.url + options.path, + oauth_token_secret = token('oauth_token_secret'); -ohauth.signature = function(oauth_secret, token_secret, baseString) { - return sha1.b64_hmac( - ohauth.percentEncode(oauth_secret) + '&' + - ohauth.percentEncode(token_secret), - baseString); -}; + // https://tools.ietf.org/html/rfc5849#section-3.4.1.3.1 + if ((!options.options || !options.options.header || + options.options.header['Content-Type'] === 'application/x-www-form-urlencoded') && + options.content) { + params = xtend(params, ohauth.stringQs(options.content)); + } -/** - * Takes an options object for configuration (consumer_key, - * consumer_secret, version, signature_method, token) and returns a - * function that generates the Authorization header for given data. - * - * The returned function takes these parameters: - * - method: GET/POST/... - * - uri: full URI with protocol, port, path and query string - * - extra_params: any extra parameters (that are passed in the POST data), - * can be an object or a from-urlencoded string. - * - * Returned function returns full OAuth header with "OAuth" string in it. - */ + params.oauth_token = token('oauth_token'); + params.oauth_signature = ohauth.signature( + o.oauth_secret, + oauth_token_secret, + ohauth.baseString(options.method, url, params)); -ohauth.headerGenerator = function(options) { - options = options || {}; - var consumer_key = options.consumer_key || '', - consumer_secret = options.consumer_secret || '', - signature_method = options.signature_method || 'HMAC-SHA1', - version = options.version || '1.0', - token = options.token || ''; + ohauth.xhr(options.method, + url, params, options.content, options.options, done); + } - return function(method, uri, extra_params) { - method = method.toUpperCase(); - if (typeof extra_params === 'string' && extra_params.length > 0) { - extra_params = ohauth.stringQs(extra_params); + function done(err, xhr) { + if (err) return callback(err); + else if (xhr.responseXML) return callback(err, xhr.responseXML); + else return callback(err, xhr.response); } + }; - var uri_parts = uri.split('?', 2), - base_uri = uri_parts[0]; + // pre-authorize this object, if we can just get a token and token_secret + // from the start + oauth.preauth = function(c) { + if (!c) return; + if (c.oauth_token) token('oauth_token', c.oauth_token); + if (c.oauth_token_secret) token('oauth_token_secret', c.oauth_token_secret); + return oauth; + }; - var query_params = uri_parts.length === 2 ? - ohauth.stringQs(uri_parts[1]) : {}; + oauth.options = function(_) { + if (!arguments.length) return o; - var oauth_params = { - oauth_consumer_key: consumer_key, - oauth_signature_method: signature_method, - oauth_version: version, - oauth_timestamp: ohauth.timestamp(), - oauth_nonce: ohauth.nonce() - }; + o = _; - if (token) oauth_params.oauth_token = token; + o.url = o.url || 'http://www.openstreetmap.org'; + o.landing = o.landing || 'land.html'; - var all_params = xtend({}, oauth_params, query_params, extra_params), - base_str = ohauth.baseString(method, base_uri, all_params); + o.singlepage = o.singlepage || false; - oauth_params.oauth_signature = ohauth.signature(consumer_secret, token, base_str); + // Optional loading and loading-done functions for nice UI feedback. + // by default, no-ops + o.loading = o.loading || function() {}; + o.done = o.done || function() {}; - return 'OAuth ' + ohauth.authHeader(oauth_params); + return oauth.preauth(o); }; -}; -module.exports = ohauth; + // 'stamp' an authentication object from `getAuth()` + // with a [nonce](http://en.wikipedia.org/wiki/Cryptographic_nonce) + // and timestamp + function timenonce(o) { + o.oauth_timestamp = ohauth.timestamp(); + o.oauth_nonce = ohauth.nonce(); + return o; + } -},{"jshashes":7,"xtend":4}],6:[function(require,module,exports){ -module.exports = Object.keys || require('./shim'); + // get/set tokens. These are prefixed with the base URL so that `osm-auth` + // can be used with multiple APIs and the keys in `localStorage` + // will not clash + var token; + if (store.enabled) { + token = function (x, y) { + if (arguments.length === 1) return store.get(o.url + x); + else if (arguments.length === 2) return store.set(o.url + x, y); + }; + } else { + var storage = {}; + token = function (x, y) { + if (arguments.length === 1) return storage[o.url + x]; + else if (arguments.length === 2) return storage[o.url + x] = y; + }; + } -},{"./shim":8}],8:[function(require,module,exports){ -(function () { - "use strict"; + // Get an authentication object. If you just add and remove properties + // from a single object, you'll need to use `delete` to make sure that + // it doesn't contain undesired properties for authentication + function getAuth(o) { + return { + oauth_consumer_key: o.oauth_consumer_key, + oauth_signature_method: "HMAC-SHA1" + }; + } - // modified from https://github.com/kriskowal/es5-shim - var has = Object.prototype.hasOwnProperty, - is = require('is'), - forEach = require('foreach'), - hasDontEnumBug = !({'toString': null}).propertyIsEnumerable('toString'), - dontEnums = [ - "toString", - "toLocaleString", - "valueOf", - "hasOwnProperty", - "isPrototypeOf", - "propertyIsEnumerable", - "constructor" - ], - keysShim; + // potentially pre-authorize + oauth.options(o); - keysShim = function keys(object) { - if (!is.object(object) && !is.array(object)) { - throw new TypeError("Object.keys called on a non-object"); - } + return oauth; +}; - var name, theKeys = []; - for (name in object) { - if (has.call(object, name)) { - theKeys.push(name); - } - } +},{"ohauth":2,"store":3,"xtend":4}],3:[function(require,module,exports){ +(function(global){;(function(win){ + var store = {}, + doc = win.document, + localStorageName = 'localStorage', + storage - if (hasDontEnumBug) { - forEach(dontEnums, function (dontEnum) { - if (has.call(object, dontEnum)) { - theKeys.push(dontEnum); - } - }); + store.disabled = false + store.set = function(key, value) {} + store.get = function(key) {} + store.remove = function(key) {} + store.clear = function() {} + store.transact = function(key, defaultVal, transactionFn) { + var val = store.get(key) + if (transactionFn == null) { + transactionFn = defaultVal + defaultVal = null } - return theKeys; - }; + if (typeof val == 'undefined') { val = defaultVal || {} } + transactionFn(val) + store.set(key, val) + } + store.getAll = function() {} + store.forEach = function() {} - module.exports = keysShim; -}()); + store.serialize = function(value) { + return JSON.stringify(value) + } + store.deserialize = function(value) { + if (typeof value != 'string') { return undefined } + try { return JSON.parse(value) } + catch(e) { return value || undefined } + } + // Functions to encapsulate questionable FireFox 3.6.13 behavior + // when about.config::dom.storage.enabled === false + // See https://github.com/marcuswestin/store.js/issues#issue/13 + function isLocalStorageNameSupported() { + try { return (localStorageName in win && win[localStorageName]) } + catch(err) { return false } + } -},{"is":9,"foreach":10}],9:[function(require,module,exports){ + if (isLocalStorageNameSupported()) { + storage = win[localStorageName] + store.set = function(key, val) { + if (val === undefined) { return store.remove(key) } + storage.setItem(key, store.serialize(val)) + return val + } + store.get = function(key) { return store.deserialize(storage.getItem(key)) } + store.remove = function(key) { storage.removeItem(key) } + store.clear = function() { storage.clear() } + store.getAll = function() { + var ret = {} + store.forEach(function(key, val) { + ret[key] = val + }) + return ret + } + store.forEach = function(callback) { + for (var i=0; idocument.w=window') + storageContainer.close() + storageOwner = storageContainer.w.frames[0].document + storage = storageOwner.createElement('div') + } catch(e) { + // somehow ActiveXObject instantiation failed (perhaps some special + // security settings or otherwse), fall back to per-path storage + storage = doc.createElement('div') + storageOwner = doc.body + } + function withIEStorage(storeFunction) { + return function() { + var args = Array.prototype.slice.call(arguments, 0) + args.unshift(storage) + // See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx + // and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx + storageOwner.appendChild(storage) + storage.addBehavior('#default#userData') + storage.load(localStorageName) + var result = storeFunction.apply(store, args) + storageOwner.removeChild(storage) + return result + } + } -/**! - * is - * the definitive JavaScript type testing library - * - * @copyright 2013 Enrico Marino - * @license MIT - */ + // In IE7, keys may not contain special chars. See all of https://github.com/marcuswestin/store.js/issues/40 + var forbiddenCharsRegex = new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]", "g") + function ieKeyFix(key) { + return key.replace(forbiddenCharsRegex, '___') + } + store.set = withIEStorage(function(storage, key, val) { + key = ieKeyFix(key) + if (val === undefined) { return store.remove(key) } + storage.setAttribute(key, store.serialize(val)) + storage.save(localStorageName) + return val + }) + store.get = withIEStorage(function(storage, key) { + key = ieKeyFix(key) + return store.deserialize(storage.getAttribute(key)) + }) + store.remove = withIEStorage(function(storage, key) { + key = ieKeyFix(key) + storage.removeAttribute(key) + storage.save(localStorageName) + }) + store.clear = withIEStorage(function(storage) { + var attributes = storage.XMLDocument.documentElement.attributes + storage.load(localStorageName) + for (var i=0, attr; attr=attributes[i]; i++) { + storage.removeAttribute(attr.name) + } + storage.save(localStorageName) + }) + store.getAll = function(storage) { + var ret = {} + store.forEach(function(key, val) { + ret[key] = val + }) + return ret + } + store.forEach = withIEStorage(function(storage, callback) { + var attributes = storage.XMLDocument.documentElement.attributes + for (var i=0, attr; attr=attributes[i]; ++i) { + callback(attr.name, store.deserialize(storage.getAttribute(attr.name))) + } + }) + } -var objProto = Object.prototype; -var owns = objProto.hasOwnProperty; -var toString = objProto.toString; -var isActualNaN = function (value) { - return value !== value; -}; -var NON_HOST_TYPES = { - "boolean": 1, - "number": 1, - "string": 1, - "undefined": 1 -}; + try { + var testKey = '__storejs__' + store.set(testKey, testKey) + if (store.get(testKey) != testKey) { store.disabled = true } + store.remove(testKey) + } catch(e) { + store.disabled = true + } + store.enabled = !store.disabled -/** - * Expose `is` - */ + if (typeof module != 'undefined' && module.exports) { module.exports = store } + else if (typeof define === 'function' && define.amd) { define(store) } + else { win.store = store } -var is = module.exports = {}; +})(this.window || global); -/** - * Test general. - */ - -/** - * is.type - * Test if `value` is a type of `type`. - * - * @param {Mixed} value value to test - * @param {String} type type - * @return {Boolean} true if `value` is a type of `type`, false otherwise - * @api public - */ +})(window) +},{}],5:[function(require,module,exports){ +module.exports = hasKeys -is.a = -is.type = function (value, type) { - return typeof value === type; -}; +function hasKeys(source) { + return source !== null && + (typeof source === "object" || + typeof source === "function") +} -/** - * is.defined - * Test if `value` is defined. - * - * @param {Mixed} value value to test - * @return {Boolean} true if 'value' is defined, false otherwise - * @api public - */ +},{}],4:[function(require,module,exports){ +var Keys = require("object-keys") +var hasKeys = require("./has-keys") -is.defined = function (value) { - return value !== undefined; -}; +module.exports = extend -/** - * is.empty - * Test if `value` is empty. - * - * @param {Mixed} value value to test - * @return {Boolean} true if `value` is empty, false otherwise - * @api public - */ +function extend() { + var target = {} -is.empty = function (value) { - var type = toString.call(value); - var key; + for (var i = 0; i < arguments.length; i++) { + var source = arguments[i] - if ('[object Array]' === type || '[object Arguments]' === type) { - return value.length === 0; - } + if (!hasKeys(source)) { + continue + } - if ('[object Object]' === type) { - for (key in value) if (owns.call(value, key)) return false; - return true; - } + var keys = Keys(source) - if ('[object String]' === type) { - return '' === value; - } + for (var j = 0; j < keys.length; j++) { + var name = keys[j] + target[name] = source[name] + } + } - return false; -}; + return target +} -/** - * is.equal - * Test if `value` is equal to `other`. +},{"./has-keys":5,"object-keys":6}],7:[function(require,module,exports){ +(function(global){/** + * jsHashes - A fast and independent hashing library pure JavaScript implemented (ES3 compliant) for both server and client side + * + * @class Hashes + * @author Tomas Aparicio + * @license New BSD (see LICENSE file) + * @version 1.0.4 + * + * Algorithms specification: + * + * MD5 + * RIPEMD-160 + * SHA1 + * SHA256 + * SHA512 + * HMAC * - * @param {Mixed} value value to test - * @param {Mixed} other value to compare with - * @return {Boolean} true if `value` is equal to `other`, false otherwise */ +(function(){ + var Hashes; -is.equal = function (value, other) { - var type = toString.call(value) - var key; - - if (type !== toString.call(other)) { - return false; - } + // private helper methods + function utf8Encode(str) { + var x, y, output = '', i = -1, l; - if ('[object Object]' === type) { - for (key in value) { - if (!is.equal(value[key], other[key])) { - return false; + if (str && str.length) { + l = str.length; + while ((i+=1) < l) { + /* Decode utf-16 surrogate pairs */ + x = str.charCodeAt(i); + y = i + 1 < l ? str.charCodeAt(i + 1) : 0; + if (0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF) { + x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF); + i += 1; + } + /* Encode output as utf-8 */ + if (x <= 0x7F) { + output += String.fromCharCode(x); + } else if (x <= 0x7FF) { + output += String.fromCharCode(0xC0 | ((x >>> 6 ) & 0x1F), + 0x80 | ( x & 0x3F)); + } else if (x <= 0xFFFF) { + output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F), + 0x80 | ((x >>> 6 ) & 0x3F), + 0x80 | ( x & 0x3F)); + } else if (x <= 0x1FFFFF) { + output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07), + 0x80 | ((x >>> 12) & 0x3F), + 0x80 | ((x >>> 6 ) & 0x3F), + 0x80 | ( x & 0x3F)); + } } } - return true; + return output; } - if ('[object Array]' === type) { - key = value.length; - if (key !== other.length) { - return false; - } - while (--key) { - if (!is.equal(value[key], other[key])) { - return false; + function utf8Decode(str) { + var i, ac, c1, c2, c3, arr = [], l; + i = ac = c1 = c2 = c3 = 0; + + if (str && str.length) { + l = str.length; + str += ''; + + while (i < l) { + c1 = str.charCodeAt(i); + ac += 1; + if (c1 < 128) { + arr[ac] = String.fromCharCode(c1); + i+=1; + } else if (c1 > 191 && c1 < 224) { + c2 = str.charCodeAt(i + 1); + arr[ac] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63)); + i += 2; + } else { + c2 = str.charCodeAt(i + 1); + c3 = str.charCodeAt(i + 2); + arr[ac] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); + i += 3; + } } } - return true; + return arr.join(''); } - if ('[object Function]' === type) { - return value.prototype === other.prototype; + /** + * Add integers, wrapping at 2^32. This uses 16-bit operations internally + * to work around bugs in some JS interpreters. + */ + function safe_add(x, y) { + var lsw = (x & 0xFFFF) + (y & 0xFFFF), + msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xFFFF); } - if ('[object Date]' === type) { - return value.getTime() === other.getTime(); + /** + * Bitwise rotate a 32-bit number to the left. + */ + function bit_rol(num, cnt) { + return (num << cnt) | (num >>> (32 - cnt)); } - return value === other; -}; - -/** - * is.hosted - * Test if `value` is hosted by `host`. - * - * @param {Mixed} value to test - * @param {Mixed} host host to test with - * @return {Boolean} true if `value` is hosted by `host`, false otherwise - * @api public - */ - -is.hosted = function (value, host) { - var type = typeof host[value]; - return type === 'object' ? !!host[value] : !NON_HOST_TYPES[type]; -}; + /** + * Convert a raw string to a hex string + */ + function rstr2hex(input, hexcase) { + var hex_tab = hexcase ? '0123456789ABCDEF' : '0123456789abcdef', + output = '', x, i = 0, l = input.length; + for (; i < l; i+=1) { + x = input.charCodeAt(i); + output += hex_tab.charAt((x >>> 4) & 0x0F) + hex_tab.charAt(x & 0x0F); + } + return output; + } -/** - * is.instance - * Test if `value` is an instance of `constructor`. - * - * @param {Mixed} value value to test - * @return {Boolean} true if `value` is an instance of `constructor` - * @api public - */ + /** + * Encode a string as utf-16 + */ + function str2rstr_utf16le(input) { + var i, l = input.length, output = ''; + for (i = 0; i < l; i+=1) { + output += String.fromCharCode( input.charCodeAt(i) & 0xFF, (input.charCodeAt(i) >>> 8) & 0xFF); + } + return output; + } -is.instance = is['instanceof'] = function (value, constructor) { - return value instanceof constructor; -}; + function str2rstr_utf16be(input) { + var i, l = input.length, output = ''; + for (i = 0; i < l; i+=1) { + output += String.fromCharCode((input.charCodeAt(i) >>> 8) & 0xFF, input.charCodeAt(i) & 0xFF); + } + return output; + } -/** - * is.null - * Test if `value` is null. - * - * @param {Mixed} value value to test - * @return {Boolean} true if `value` is null, false otherwise - * @api public - */ + /** + * Convert an array of big-endian words to a string + */ + function binb2rstr(input) { + var i, l = input.length * 32, output = ''; + for (i = 0; i < l; i += 8) { + output += String.fromCharCode((input[i>>5] >>> (24 - i % 32)) & 0xFF); + } + return output; + } -is['null'] = function (value) { - return value === null; -}; + /** + * Convert an array of little-endian words to a string + */ + function binl2rstr(input) { + var i, l = input.length * 32, output = ''; + for (i = 0;i < l; i += 8) { + output += String.fromCharCode((input[i>>5] >>> (i % 32)) & 0xFF); + } + return output; + } -/** - * is.undefined - * Test if `value` is undefined. - * - * @param {Mixed} value value to test - * @return {Boolean} true if `value` is undefined, false otherwise - * @api public - */ + /** + * Convert a raw string to an array of little-endian words + * Characters >255 have their high-byte silently ignored. + */ + function rstr2binl(input) { + var i, l = input.length * 8, output = Array(input.length >> 2), lo = output.length; + for (i = 0; i < lo; i+=1) { + output[i] = 0; + } + for (i = 0; i < l; i += 8) { + output[i>>5] |= (input.charCodeAt(i / 8) & 0xFF) << (i%32); + } + return output; + } -is.undefined = function (value) { - return value === undefined; -}; + /** + * Convert a raw string to an array of big-endian words + * Characters >255 have their high-byte silently ignored. + */ + function rstr2binb(input) { + var i, l = input.length * 8, output = Array(input.length >> 2), lo = output.length; + for (i = 0; i < lo; i+=1) { + output[i] = 0; + } + for (i = 0; i < l; i += 8) { + output[i>>5] |= (input.charCodeAt(i / 8) & 0xFF) << (24 - i % 32); + } + return output; + } -/** - * Test arguments. - */ + /** + * Convert a raw string to an arbitrary string encoding + */ + function rstr2any(input, encoding) { + var divisor = encoding.length, + remainders = Array(), + i, q, x, ld, quotient, dividend, output, full_length; -/** - * is.arguments - * Test if `value` is an arguments object. - * - * @param {Mixed} value value to test - * @return {Boolean} true if `value` is an arguments object, false otherwise - * @api public - */ + /* Convert to an array of 16-bit big-endian values, forming the dividend */ + dividend = Array(Math.ceil(input.length / 2)); + ld = dividend.length; + for (i = 0; i < ld; i+=1) { + dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1); + } -is.arguments = function (value) { - var isStandardArguments = '[object Arguments]' === toString.call(value); - var isOldArguments = !is.array(value) && is.arraylike(value) && is.object(value) && is.fn(value.callee); - return isStandardArguments || isOldArguments; -}; + /** + * Repeatedly perform a long division. The binary array forms the dividend, + * the length of the encoding is the divisor. Once computed, the quotient + * forms the dividend for the next step. We stop when the dividend is zerHashes. + * All remainders are stored for later use. + */ + while(dividend.length > 0) { + quotient = Array(); + x = 0; + for (i = 0; i < dividend.length; i+=1) { + x = (x << 16) + dividend[i]; + q = Math.floor(x / divisor); + x -= q * divisor; + if (quotient.length > 0 || q > 0) { + quotient[quotient.length] = q; + } + } + remainders[remainders.length] = x; + dividend = quotient; + } -/** - * Test array. - */ + /* Convert the remainders to the output string */ + output = ''; + for (i = remainders.length - 1; i >= 0; i--) { + output += encoding.charAt(remainders[i]); + } -/** - * is.array - * Test if 'value' is an array. - * - * @param {Mixed} value value to test - * @return {Boolean} true if `value` is an array, false otherwise - * @api public - */ + /* Append leading zero equivalents */ + full_length = Math.ceil(input.length * 8 / (Math.log(encoding.length) / Math.log(2))); + for (i = output.length; i < full_length; i+=1) { + output = encoding[0] + output; + } + return output; + } -is.array = function (value) { - return '[object Array]' === toString.call(value); -}; + /** + * Convert a raw string to a base-64 string + */ + function rstr2b64(input, b64pad) { + var tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', + output = '', + len = input.length, i, j, triplet; + b64pad= b64pad || '='; + for (i = 0; i < len; i += 3) { + triplet = (input.charCodeAt(i) << 16) + | (i + 1 < len ? input.charCodeAt(i+1) << 8 : 0) + | (i + 2 < len ? input.charCodeAt(i+2) : 0); + for (j = 0; j < 4; j+=1) { + if (i * 8 + j * 6 > input.length * 8) { + output += b64pad; + } else { + output += tab.charAt((triplet >>> 6*(3-j)) & 0x3F); + } + } + } + return output; + } -/** - * is.arguments.empty - * Test if `value` is an empty arguments object. - * - * @param {Mixed} value value to test - * @return {Boolean} true if `value` is an empty arguments object, false otherwise - * @api public - */ -is.arguments.empty = function (value) { - return is.arguments(value) && value.length === 0; -}; + Hashes = { + /** + * @property {String} version + * @readonly + */ + VERSION : '1.0.3', + /** + * @member Hashes + * @class Base64 + * @constructor + */ + Base64 : function () { + // private properties + var tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', + pad = '=', // default pad according with the RFC standard + url = false, // URL encoding support @todo + utf8 = true; // by default enable UTF-8 support encoding -/** - * is.array.empty - * Test if `value` is an empty array. - * - * @param {Mixed} value value to test - * @return {Boolean} true if `value` is an empty array, false otherwise - * @api public - */ -is.array.empty = function (value) { - return is.array(value) && value.length === 0; -}; + // public method for encoding + this.encode = function (input) { + var i, j, triplet, + output = '', + len = input.length; -/** - * is.arraylike - * Test if `value` is an arraylike object. - * - * @param {Mixed} value value to test - * @return {Boolean} true if `value` is an arguments object, false otherwise - * @api public - */ + pad = pad || '='; + input = (utf8) ? utf8Encode(input) : input; -is.arraylike = function (value) { - return !!value && !is.boolean(value) - && owns.call(value, 'length') - && isFinite(value.length) - && is.number(value.length) - && value.length >= 0; -}; + for (i = 0; i < len; i += 3) { + triplet = (input.charCodeAt(i) << 16) + | (i + 1 < len ? input.charCodeAt(i+1) << 8 : 0) + | (i + 2 < len ? input.charCodeAt(i+2) : 0); + for (j = 0; j < 4; j+=1) { + if (i * 8 + j * 6 > len * 8) { + output += pad; + } else { + output += tab.charAt((triplet >>> 6*(3-j)) & 0x3F); + } + } + } + return output; + }; -/** - * Test boolean. - */ + // public method for decoding + this.decode = function (input) { + // var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + var i, o1, o2, o3, h1, h2, h3, h4, bits, ac, + dec = '', + arr = []; + if (!input) { return input; } -/** - * is.boolean - * Test if `value` is a boolean. - * - * @param {Mixed} value value to test - * @return {Boolean} true if `value` is a boolean, false otherwise - * @api public - */ + i = ac = 0; + input = input.replace(new RegExp('\\'+pad,'gi'),''); // use '=' + //input += ''; -is.boolean = function (value) { - return '[object Boolean]' === toString.call(value); -}; + do { // unpack four hexets into three octets using index points in b64 + h1 = tab.indexOf(input.charAt(i+=1)); + h2 = tab.indexOf(input.charAt(i+=1)); + h3 = tab.indexOf(input.charAt(i+=1)); + h4 = tab.indexOf(input.charAt(i+=1)); -/** - * is.false - * Test if `value` is false. - * - * @param {Mixed} value value to test - * @return {Boolean} true if `value` is false, false otherwise - * @api public - */ + bits = h1 << 18 | h2 << 12 | h3 << 6 | h4; -is['false'] = function (value) { - return is.boolean(value) && (value === false || value.valueOf() === false); -}; + o1 = bits >> 16 & 0xff; + o2 = bits >> 8 & 0xff; + o3 = bits & 0xff; + ac += 1; -/** - * is.true - * Test if `value` is true. - * - * @param {Mixed} value value to test - * @return {Boolean} true if `value` is true, false otherwise - * @api public - */ + if (h3 === 64) { + arr[ac] = String.fromCharCode(o1); + } else if (h4 === 64) { + arr[ac] = String.fromCharCode(o1, o2); + } else { + arr[ac] = String.fromCharCode(o1, o2, o3); + } + } while (i < input.length); -is['true'] = function (value) { - return is.boolean(value) && (value === true || value.valueOf() === true); -}; + dec = arr.join(''); + dec = (utf8) ? utf8Decode(dec) : dec; -/** - * Test date. - */ + return dec; + }; -/** - * is.date - * Test if `value` is a date. - * - * @param {Mixed} value value to test - * @return {Boolean} true if `value` is a date, false otherwise - * @api public - */ + // set custom pad string + this.setPad = function (str) { + pad = str || pad; + return this; + }; + // set custom tab string characters + this.setTab = function (str) { + tab = str || tab; + return this; + }; + this.setUTF8 = function (bool) { + if (typeof bool === 'boolean') { + utf8 = bool; + } + return this; + }; + }, -is.date = function (value) { - return '[object Date]' === toString.call(value); -}; + /** + * CRC-32 calculation + * @member Hashes + * @method CRC32 + * @static + * @param {String} str Input String + * @return {String} + */ + CRC32 : function (str) { + var crc = 0, x = 0, y = 0, table, i, iTop; + str = utf8Encode(str); -/** - * Test element. - */ + table = [ + '00000000 77073096 EE0E612C 990951BA 076DC419 706AF48F E963A535 9E6495A3 0EDB8832 ', + '79DCB8A4 E0D5E91E 97D2D988 09B64C2B 7EB17CBD E7B82D07 90BF1D91 1DB71064 6AB020F2 F3B97148 ', + '84BE41DE 1ADAD47D 6DDDE4EB F4D4B551 83D385C7 136C9856 646BA8C0 FD62F97A 8A65C9EC 14015C4F ', + '63066CD9 FA0F3D63 8D080DF5 3B6E20C8 4C69105E D56041E4 A2677172 3C03E4D1 4B04D447 D20D85FD ', + 'A50AB56B 35B5A8FA 42B2986C DBBBC9D6 ACBCF940 32D86CE3 45DF5C75 DCD60DCF ABD13D59 26D930AC ', + '51DE003A C8D75180 BFD06116 21B4F4B5 56B3C423 CFBA9599 B8BDA50F 2802B89E 5F058808 C60CD9B2 ', + 'B10BE924 2F6F7C87 58684C11 C1611DAB B6662D3D 76DC4190 01DB7106 98D220BC EFD5102A 71B18589 ', + '06B6B51F 9FBFE4A5 E8B8D433 7807C9A2 0F00F934 9609A88E E10E9818 7F6A0DBB 086D3D2D 91646C97 ', + 'E6635C01 6B6B51F4 1C6C6162 856530D8 F262004E 6C0695ED 1B01A57B 8208F4C1 F50FC457 65B0D9C6 ', + '12B7E950 8BBEB8EA FCB9887C 62DD1DDF 15DA2D49 8CD37CF3 FBD44C65 4DB26158 3AB551CE A3BC0074 ', + 'D4BB30E2 4ADFA541 3DD895D7 A4D1C46D D3D6F4FB 4369E96A 346ED9FC AD678846 DA60B8D0 44042D73 ', + '33031DE5 AA0A4C5F DD0D7CC9 5005713C 270241AA BE0B1010 C90C2086 5768B525 206F85B3 B966D409 ', + 'CE61E49F 5EDEF90E 29D9C998 B0D09822 C7D7A8B4 59B33D17 2EB40D81 B7BD5C3B C0BA6CAD EDB88320 ', + '9ABFB3B6 03B6E20C 74B1D29A EAD54739 9DD277AF 04DB2615 73DC1683 E3630B12 94643B84 0D6D6A3E ', + '7A6A5AA8 E40ECF0B 9309FF9D 0A00AE27 7D079EB1 F00F9344 8708A3D2 1E01F268 6906C2FE F762575D ', + '806567CB 196C3671 6E6B06E7 FED41B76 89D32BE0 10DA7A5A 67DD4ACC F9B9DF6F 8EBEEFF9 17B7BE43 ', + '60B08ED5 D6D6A3E8 A1D1937E 38D8C2C4 4FDFF252 D1BB67F1 A6BC5767 3FB506DD 48B2364B D80D2BDA ', + 'AF0A1B4C 36034AF6 41047A60 DF60EFC3 A867DF55 316E8EEF 4669BE79 CB61B38C BC66831A 256FD2A0 ', + '5268E236 CC0C7795 BB0B4703 220216B9 5505262F C5BA3BBE B2BD0B28 2BB45A92 5CB36A04 C2D7FFA7 ', + 'B5D0CF31 2CD99E8B 5BDEAE1D 9B64C2B0 EC63F226 756AA39C 026D930A 9C0906A9 EB0E363F 72076785 ', + '05005713 95BF4A82 E2B87A14 7BB12BAE 0CB61B38 92D28E9B E5D5BE0D 7CDCEFB7 0BDBDF21 86D3D2D4 ', + 'F1D4E242 68DDB3F8 1FDA836E 81BE16CD F6B9265B 6FB077E1 18B74777 88085AE6 FF0F6A70 66063BCA ', + '11010B5C 8F659EFF F862AE69 616BFFD3 166CCF45 A00AE278 D70DD2EE 4E048354 3903B3C2 A7672661 ', + 'D06016F7 4969474D 3E6E77DB AED16A4A D9D65ADC 40DF0B66 37D83BF0 A9BCAE53 DEBB9EC5 47B2CF7F ', + '30B5FFE9 BDBDF21C CABAC28A 53B39330 24B4A3A6 BAD03605 CDD70693 54DE5729 23D967BF B3667A2E ', + 'C4614AB8 5D681B02 2A6F2B94 B40BBE37 C30C8EA1 5A05DF1B 2D02EF8D' + ].join(''); -/** - * is.element - * Test if `value` is an html element. - * - * @param {Mixed} value value to test - * @return {Boolean} true if `value` is an HTML Element, false otherwise - * @api public - */ + crc = crc ^ (-1); + for (i = 0, iTop = str.length; i < iTop; i+=1 ) { + y = ( crc ^ str.charCodeAt( i ) ) & 0xFF; + x = '0x' + table.substr( y * 9, 8 ); + crc = ( crc >>> 8 ) ^ x; + } + // always return a positive number (that's what >>> 0 does) + return (crc ^ (-1)) >>> 0; + }, + /** + * @member Hashes + * @class MD5 + * @constructor + * @param {Object} [config] + * + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * See for more infHashes. + */ + MD5 : function (options) { + /** + * Private config properties. You may need to tweak these to be compatible with + * the server-side, but the defaults work in most cases. + * See {@link Hashes.MD5#method-setUpperCase} and {@link Hashes.SHA1#method-setUpperCase} + */ + var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase + b64pad = (options && typeof options.pad === 'string') ? options.pda : '=', // base-64 pad character. Defaults to '=' for strict RFC compliance + utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true; // enable/disable utf8 encoding -is.element = function (value) { - return value !== undefined - && typeof HTMLElement !== 'undefined' - && value instanceof HTMLElement - && value.nodeType === 1; -}; + // privileged (public) methods + this.hex = function (s) { + return rstr2hex(rstr(s, utf8), hexcase); + }; + this.b64 = function (s) { + return rstr2b64(rstr(s), b64pad); + }; + this.any = function(s, e) { + return rstr2any(rstr(s, utf8), e); + }; + this.hex_hmac = function (k, d) { + return rstr2hex(rstr_hmac(k, d), hexcase); + }; + this.b64_hmac = function (k, d) { + return rstr2b64(rstr_hmac(k,d), b64pad); + }; + this.any_hmac = function (k, d, e) { + return rstr2any(rstr_hmac(k, d), e); + }; + /** + * Perform a simple self-test to see if the VM is working + * @return {String} Hexadecimal hash sample + */ + this.vm_test = function () { + return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72'; + }; + /** + * Enable/disable uppercase hexadecimal returned string + * @param {Boolean} + * @return {Object} this + */ + this.setUpperCase = function (a) { + if (typeof a === 'boolean' ) { + hexcase = a; + } + return this; + }; + /** + * Defines a base64 pad string + * @param {String} Pad + * @return {Object} this + */ + this.setPad = function (a) { + b64pad = a || b64pad; + return this; + }; + /** + * Defines a base64 pad string + * @param {Boolean} + * @return {Object} [this] + */ + this.setUTF8 = function (a) { + if (typeof a === 'boolean') { + utf8 = a; + } + return this; + }; -/** - * Test error. - */ + // private methods -/** - * is.error - * Test if `value` is an error object. - * - * @param {Mixed} value value to test - * @return {Boolean} true if `value` is an error object, false otherwise - * @api public - */ + /** + * Calculate the MD5 of a raw string + */ + function rstr(s) { + s = (utf8) ? utf8Encode(s): s; + return binl2rstr(binl(rstr2binl(s), s.length * 8)); + } -is.error = function (value) { - return '[object Error]' === toString.call(value); -}; + /** + * Calculate the HMAC-MD5, of a key and some data (raw strings) + */ + function rstr_hmac(key, data) { + var bkey, ipad, opad, hash, i; -/** - * Test function. - */ + key = (utf8) ? utf8Encode(key) : key; + data = (utf8) ? utf8Encode(data) : data; + bkey = rstr2binl(key); + if (bkey.length > 16) { + bkey = binl(bkey, key.length * 8); + } -/** - * is.fn / is.function (deprecated) - * Test if `value` is a function. - * - * @param {Mixed} value value to test - * @return {Boolean} true if `value` is a function, false otherwise - * @api public - */ + ipad = Array(16), opad = Array(16); + for (i = 0; i < 16; i+=1) { + ipad[i] = bkey[i] ^ 0x36363636; + opad[i] = bkey[i] ^ 0x5C5C5C5C; + } + hash = binl(ipad.concat(rstr2binl(data)), 512 + data.length * 8); + return binl2rstr(binl(opad.concat(hash), 512 + 128)); + } -is.fn = is['function'] = function (value) { - var isAlert = typeof window !== 'undefined' && value === window.alert; - return isAlert || '[object Function]' === toString.call(value); -}; - -/** - * Test number. - */ - -/** - * is.number - * Test if `value` is a number. - * - * @param {Mixed} value value to test - * @return {Boolean} true if `value` is a number, false otherwise - * @api public - */ - -is.number = function (value) { - return '[object Number]' === toString.call(value); -}; - -/** - * is.infinite - * Test if `value` is positive or negative infinity. - * - * @param {Mixed} value value to test - * @return {Boolean} true if `value` is positive or negative Infinity, false otherwise - * @api public - */ -is.infinite = function (value) { - return value === Infinity || value === -Infinity; -}; - -/** - * is.decimal - * Test if `value` is a decimal number. - * - * @param {Mixed} value value to test - * @return {Boolean} true if `value` is a decimal number, false otherwise - * @api public - */ - -is.decimal = function (value) { - return is.number(value) && !isActualNaN(value) && value % 1 !== 0; -}; + /** + * Calculate the MD5 of an array of little-endian words, and a bit length. + */ + function binl(x, len) { + var i, olda, oldb, oldc, oldd, + a = 1732584193, + b = -271733879, + c = -1732584194, + d = 271733878; -/** - * is.divisibleBy - * Test if `value` is divisible by `n`. - * - * @param {Number} value value to test - * @param {Number} n dividend - * @return {Boolean} true if `value` is divisible by `n`, false otherwise - * @api public - */ + /* append padding */ + x[len >> 5] |= 0x80 << ((len) % 32); + x[(((len + 64) >>> 9) << 4) + 14] = len; -is.divisibleBy = function (value, n) { - var isDividendInfinite = is.infinite(value); - var isDivisorInfinite = is.infinite(n); - var isNonZeroNumber = is.number(value) && !isActualNaN(value) && is.number(n) && !isActualNaN(n) && n !== 0; - return isDividendInfinite || isDivisorInfinite || (isNonZeroNumber && value % n === 0); -}; + for (i = 0; i < x.length; i += 16) { + olda = a; + oldb = b; + oldc = c; + oldd = d; -/** - * is.int - * Test if `value` is an integer. - * - * @param value to test - * @return {Boolean} true if `value` is an integer, false otherwise - * @api public - */ + a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936); + d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586); + c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819); + b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330); + a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897); + d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426); + c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341); + b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983); + a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416); + d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417); + c = md5_ff(c, d, a, b, x[i+10], 17, -42063); + b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162); + a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682); + d = md5_ff(d, a, b, c, x[i+13], 12, -40341101); + c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290); + b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329); -is.int = function (value) { - return is.number(value) && !isActualNaN(value) && value % 1 === 0; -}; + a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510); + d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632); + c = md5_gg(c, d, a, b, x[i+11], 14, 643717713); + b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302); + a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691); + d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083); + c = md5_gg(c, d, a, b, x[i+15], 14, -660478335); + b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848); + a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438); + d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690); + c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961); + b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501); + a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467); + d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784); + c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473); + b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734); -/** - * is.maximum - * Test if `value` is greater than 'others' values. - * - * @param {Number} value value to test - * @param {Array} others values to compare with - * @return {Boolean} true if `value` is greater than `others` values - * @api public - */ + a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558); + d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463); + c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562); + b = md5_hh(b, c, d, a, x[i+14], 23, -35309556); + a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060); + d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353); + c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632); + b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640); + a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174); + d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222); + c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979); + b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189); + a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487); + d = md5_hh(d, a, b, c, x[i+12], 11, -421815835); + c = md5_hh(c, d, a, b, x[i+15], 16, 530742520); + b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651); -is.maximum = function (value, others) { - if (isActualNaN(value)) { - throw new TypeError('NaN is not a valid value'); - } else if (!is.arraylike(others)) { - throw new TypeError('second argument must be array-like'); - } - var len = others.length; + a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844); + d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415); + c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905); + b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055); + a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571); + d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606); + c = md5_ii(c, d, a, b, x[i+10], 15, -1051523); + b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799); + a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359); + d = md5_ii(d, a, b, c, x[i+15], 10, -30611744); + c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380); + b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649); + a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070); + d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379); + c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259); + b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551); - while (--len >= 0) { - if (value < others[len]) { - return false; + a = safe_add(a, olda); + b = safe_add(b, oldb); + c = safe_add(c, oldc); + d = safe_add(d, oldd); + } + return Array(a, b, c, d); } - } - - return true; -}; - -/** - * is.minimum - * Test if `value` is less than `others` values. - * - * @param {Number} value value to test - * @param {Array} others values to compare with - * @return {Boolean} true if `value` is less than `others` values - * @api public - */ - -is.minimum = function (value, others) { - if (isActualNaN(value)) { - throw new TypeError('NaN is not a valid value'); - } else if (!is.arraylike(others)) { - throw new TypeError('second argument must be array-like'); - } - var len = others.length; - while (--len >= 0) { - if (value > others[len]) { - return false; + /** + * These functions implement the four basic operations the algorithm uses. + */ + function md5_cmn(q, a, b, x, s, t) { + return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b); } - } - - return true; -}; - -/** - * is.nan - * Test if `value` is not a number. - * - * @param {Mixed} value value to test - * @return {Boolean} true if `value` is not a number, false otherwise - * @api public - */ + function md5_ff(a, b, c, d, x, s, t) { + return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); + } + function md5_gg(a, b, c, d, x, s, t) { + return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); + } + function md5_hh(a, b, c, d, x, s, t) { + return md5_cmn(b ^ c ^ d, a, b, x, s, t); + } + function md5_ii(a, b, c, d, x, s, t) { + return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); + } + }, + /** + * @member Hashes + * @class Hashes.SHA1 + * @param {Object} [config] + * @constructor + * + * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined in FIPS 180-1 + * Version 2.2 Copyright Paul Johnston 2000 - 2009. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * See http://pajhome.org.uk/crypt/md5 for details. + */ + SHA1 : function (options) { + /** + * Private config properties. You may need to tweak these to be compatible with + * the server-side, but the defaults work in most cases. + * See {@link Hashes.MD5#method-setUpperCase} and {@link Hashes.SHA1#method-setUpperCase} + */ + var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase + b64pad = (options && typeof options.pad === 'string') ? options.pda : '=', // base-64 pad character. Defaults to '=' for strict RFC compliance + utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true; // enable/disable utf8 encoding -is.nan = function (value) { - return !is.number(value) || value !== value; -}; - -/** - * is.even - * Test if `value` is an even number. - * - * @param {Number} value value to test - * @return {Boolean} true if `value` is an even number, false otherwise - * @api public - */ + // public methods + this.hex = function (s) { + return rstr2hex(rstr(s, utf8), hexcase); + }; + this.b64 = function (s) { + return rstr2b64(rstr(s, utf8), b64pad); + }; + this.any = function (s, e) { + return rstr2any(rstr(s, utf8), e); + }; + this.hex_hmac = function (k, d) { + return rstr2hex(rstr_hmac(k, d)); + }; + this.b64_hmac = function (k, d) { + return rstr2b64(rstr_hmac(k, d), b64pad); + }; + this.any_hmac = function (k, d, e) { + return rstr2any(rstr_hmac(k, d), e); + }; + /** + * Perform a simple self-test to see if the VM is working + * @return {String} Hexadecimal hash sample + * @public + */ + this.vm_test = function () { + return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72'; + }; + /** + * @description Enable/disable uppercase hexadecimal returned string + * @param {boolean} + * @return {Object} this + * @public + */ + this.setUpperCase = function (a) { + if (typeof a === 'boolean') { + hexcase = a; + } + return this; + }; + /** + * @description Defines a base64 pad string + * @param {string} Pad + * @return {Object} this + * @public + */ + this.setPad = function (a) { + b64pad = a || b64pad; + return this; + }; + /** + * @description Defines a base64 pad string + * @param {boolean} + * @return {Object} this + * @public + */ + this.setUTF8 = function (a) { + if (typeof a === 'boolean') { + utf8 = a; + } + return this; + }; -is.even = function (value) { - return is.infinite(value) || (is.number(value) && value === value && value % 2 === 0); -}; + // private methods -/** - * is.odd - * Test if `value` is an odd number. - * - * @param {Number} value value to test - * @return {Boolean} true if `value` is an odd number, false otherwise - * @api public - */ + /** + * Calculate the SHA-512 of a raw string + */ + function rstr(s) { + s = (utf8) ? utf8Encode(s) : s; + return binb2rstr(binb(rstr2binb(s), s.length * 8)); + } -is.odd = function (value) { - return is.infinite(value) || (is.number(value) && value === value && value % 2 !== 0); -}; + /** + * Calculate the HMAC-SHA1 of a key and some data (raw strings) + */ + function rstr_hmac(key, data) { + var bkey, ipad, opad, i, hash; + key = (utf8) ? utf8Encode(key) : key; + data = (utf8) ? utf8Encode(data) : data; + bkey = rstr2binb(key); -/** - * is.ge - * Test if `value` is greater than or equal to `other`. - * - * @param {Number} value value to test - * @param {Number} other value to compare with - * @return {Boolean} - * @api public - */ + if (bkey.length > 16) { + bkey = binb(bkey, key.length * 8); + } + ipad = Array(16), opad = Array(16); + for (i = 0; i < 16; i+=1) { + ipad[i] = bkey[i] ^ 0x36363636; + opad[i] = bkey[i] ^ 0x5C5C5C5C; + } + hash = binb(ipad.concat(rstr2binb(data)), 512 + data.length * 8); + return binb2rstr(binb(opad.concat(hash), 512 + 160)); + } -is.ge = function (value, other) { - if (isActualNaN(value) || isActualNaN(other)) { - throw new TypeError('NaN is not a valid value'); - } - return !is.infinite(value) && !is.infinite(other) && value >= other; -}; + /** + * Calculate the SHA-1 of an array of big-endian words, and a bit length + */ + function binb(x, len) { + var i, j, t, olda, oldb, oldc, oldd, olde, + w = Array(80), + a = 1732584193, + b = -271733879, + c = -1732584194, + d = 271733878, + e = -1009589776; -/** - * is.gt - * Test if `value` is greater than `other`. - * - * @param {Number} value value to test - * @param {Number} other value to compare with - * @return {Boolean} - * @api public - */ + /* append padding */ + x[len >> 5] |= 0x80 << (24 - len % 32); + x[((len + 64 >> 9) << 4) + 15] = len; -is.gt = function (value, other) { - if (isActualNaN(value) || isActualNaN(other)) { - throw new TypeError('NaN is not a valid value'); - } - return !is.infinite(value) && !is.infinite(other) && value > other; -}; + for (i = 0; i < x.length; i += 16) { + olda = a, + oldb = b; + oldc = c; + oldd = d; + olde = e; -/** - * is.le - * Test if `value` is less than or equal to `other`. - * - * @param {Number} value value to test - * @param {Number} other value to compare with - * @return {Boolean} if 'value' is less than or equal to 'other' - * @api public - */ + for (j = 0; j < 80; j+=1) { + if (j < 16) { + w[j] = x[i + j]; + } else { + w[j] = bit_rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1); + } + t = safe_add(safe_add(bit_rol(a, 5), sha1_ft(j, b, c, d)), + safe_add(safe_add(e, w[j]), sha1_kt(j))); + e = d; + d = c; + c = bit_rol(b, 30); + b = a; + a = t; + } -is.le = function (value, other) { - if (isActualNaN(value) || isActualNaN(other)) { - throw new TypeError('NaN is not a valid value'); - } - return !is.infinite(value) && !is.infinite(other) && value <= other; -}; + a = safe_add(a, olda); + b = safe_add(b, oldb); + c = safe_add(c, oldc); + d = safe_add(d, oldd); + e = safe_add(e, olde); + } + return Array(a, b, c, d, e); + } -/** - * is.lt - * Test if `value` is less than `other`. - * - * @param {Number} value value to test - * @param {Number} other value to compare with - * @return {Boolean} if `value` is less than `other` - * @api public - */ + /** + * Perform the appropriate triplet combination function for the current + * iteration + */ + function sha1_ft(t, b, c, d) { + if (t < 20) { return (b & c) | ((~b) & d); } + if (t < 40) { return b ^ c ^ d; } + if (t < 60) { return (b & c) | (b & d) | (c & d); } + return b ^ c ^ d; + } -is.lt = function (value, other) { - if (isActualNaN(value) || isActualNaN(other)) { - throw new TypeError('NaN is not a valid value'); - } - return !is.infinite(value) && !is.infinite(other) && value < other; -}; + /** + * Determine the appropriate additive constant for the current iteration + */ + function sha1_kt(t) { + return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 : + (t < 60) ? -1894007588 : -899497514; + } + }, + /** + * @class Hashes.SHA256 + * @param {config} + * + * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined in FIPS 180-2 + * Version 2.2 Copyright Angel Marin, Paul Johnston 2000 - 2009. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * See http://pajhome.org.uk/crypt/md5 for details. + * Also http://anmar.eu.org/projects/jssha2/ + */ + SHA256 : function (options) { + /** + * Private properties configuration variables. You may need to tweak these to be compatible with + * the server-side, but the defaults work in most cases. + * @see this.setUpperCase() method + * @see this.setPad() method + */ + var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase */ + b64pad = (options && typeof options.pad === 'string') ? options.pda : '=', /* base-64 pad character. Default '=' for strict RFC compliance */ + utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true, /* enable/disable utf8 encoding */ + sha256_K; -/** - * is.within - * Test if `value` is within `start` and `finish`. - * - * @param {Number} value value to test - * @param {Number} start lower bound - * @param {Number} finish upper bound - * @return {Boolean} true if 'value' is is within 'start' and 'finish' - * @api public - */ -is.within = function (value, start, finish) { - if (isActualNaN(value) || isActualNaN(start) || isActualNaN(finish)) { - throw new TypeError('NaN is not a valid value'); - } else if (!is.number(value) || !is.number(start) || !is.number(finish)) { - throw new TypeError('all arguments must be numbers'); - } - var isAnyInfinite = is.infinite(value) || is.infinite(start) || is.infinite(finish); - return isAnyInfinite || (value >= start && value <= finish); -}; - -/** - * Test object. - */ - -/** - * is.object - * Test if `value` is an object. - * - * @param {Mixed} value value to test - * @return {Boolean} true if `value` is an object, false otherwise - * @api public - */ - -is.object = function (value) { - return value && '[object Object]' === toString.call(value); -}; + /* privileged (public) methods */ + this.hex = function (s) { + return rstr2hex(rstr(s, utf8)); + }; + this.b64 = function (s) { + return rstr2b64(rstr(s, utf8), b64pad); + }; + this.any = function (s, e) { + return rstr2any(rstr(s, utf8), e); + }; + this.hex_hmac = function (k, d) { + return rstr2hex(rstr_hmac(k, d)); + }; + this.b64_hmac = function (k, d) { + return rstr2b64(rstr_hmac(k, d), b64pad); + }; + this.any_hmac = function (k, d, e) { + return rstr2any(rstr_hmac(k, d), e); + }; + /** + * Perform a simple self-test to see if the VM is working + * @return {String} Hexadecimal hash sample + * @public + */ + this.vm_test = function () { + return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72'; + }; + /** + * Enable/disable uppercase hexadecimal returned string + * @param {boolean} + * @return {Object} this + * @public + */ + this.setUpperCase = function (a) { + if (typeof a === 'boolean') { + hexcase = a; + } + return this; + }; + /** + * @description Defines a base64 pad string + * @param {string} Pad + * @return {Object} this + * @public + */ + this.setPad = function (a) { + b64pad = a || b64pad; + return this; + }; + /** + * Defines a base64 pad string + * @param {boolean} + * @return {Object} this + * @public + */ + this.setUTF8 = function (a) { + if (typeof a === 'boolean') { + utf8 = a; + } + return this; + }; -/** - * is.hash - * Test if `value` is a hash - a plain object literal. - * - * @param {Mixed} value value to test - * @return {Boolean} true if `value` is a hash, false otherwise - * @api public - */ + // private methods -is.hash = function (value) { - return is.object(value) && value.constructor === Object && !value.nodeType && !value.setInterval; -}; + /** + * Calculate the SHA-512 of a raw string + */ + function rstr(s, utf8) { + s = (utf8) ? utf8Encode(s) : s; + return binb2rstr(binb(rstr2binb(s), s.length * 8)); + } -/** - * Test regexp. - */ + /** + * Calculate the HMAC-sha256 of a key and some data (raw strings) + */ + function rstr_hmac(key, data) { + key = (utf8) ? utf8Encode(key) : key; + data = (utf8) ? utf8Encode(data) : data; + var hash, i = 0, + bkey = rstr2binb(key), + ipad = Array(16), + opad = Array(16); -/** - * is.regexp - * Test if `value` is a regular expression. - * - * @param {Mixed} value value to test - * @return {Boolean} true if `value` is a regexp, false otherwise - * @api public - */ + if (bkey.length > 16) { bkey = binb(bkey, key.length * 8); } -is.regexp = function (value) { - return '[object RegExp]' === toString.call(value); -}; + for (; i < 16; i+=1) { + ipad[i] = bkey[i] ^ 0x36363636; + opad[i] = bkey[i] ^ 0x5C5C5C5C; + } -/** - * Test string. - */ + hash = binb(ipad.concat(rstr2binb(data)), 512 + data.length * 8); + return binb2rstr(binb(opad.concat(hash), 512 + 256)); + } -/** - * is.string - * Test if `value` is a string. - * - * @param {Mixed} value value to test - * @return {Boolean} true if 'value' is a string, false otherwise - * @api public - */ + /* + * Main sha256 function, with its support functions + */ + function sha256_S (X, n) {return ( X >>> n ) | (X << (32 - n));} + function sha256_R (X, n) {return ( X >>> n );} + function sha256_Ch(x, y, z) {return ((x & y) ^ ((~x) & z));} + function sha256_Maj(x, y, z) {return ((x & y) ^ (x & z) ^ (y & z));} + function sha256_Sigma0256(x) {return (sha256_S(x, 2) ^ sha256_S(x, 13) ^ sha256_S(x, 22));} + function sha256_Sigma1256(x) {return (sha256_S(x, 6) ^ sha256_S(x, 11) ^ sha256_S(x, 25));} + function sha256_Gamma0256(x) {return (sha256_S(x, 7) ^ sha256_S(x, 18) ^ sha256_R(x, 3));} + function sha256_Gamma1256(x) {return (sha256_S(x, 17) ^ sha256_S(x, 19) ^ sha256_R(x, 10));} + function sha256_Sigma0512(x) {return (sha256_S(x, 28) ^ sha256_S(x, 34) ^ sha256_S(x, 39));} + function sha256_Sigma1512(x) {return (sha256_S(x, 14) ^ sha256_S(x, 18) ^ sha256_S(x, 41));} + function sha256_Gamma0512(x) {return (sha256_S(x, 1) ^ sha256_S(x, 8) ^ sha256_R(x, 7));} + function sha256_Gamma1512(x) {return (sha256_S(x, 19) ^ sha256_S(x, 61) ^ sha256_R(x, 6));} -is.string = function (value) { - return '[object String]' === toString.call(value); -}; + sha256_K = [ + 1116352408, 1899447441, -1245643825, -373957723, 961987163, 1508970993, + -1841331548, -1424204075, -670586216, 310598401, 607225278, 1426881987, + 1925078388, -2132889090, -1680079193, -1046744716, -459576895, -272742522, + 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, + -1740746414, -1473132947, -1341970488, -1084653625, -958395405, -710438585, + 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, + 1695183700, 1986661051, -2117940946, -1838011259, -1564481375, -1474664885, + -1035236496, -949202525, -778901479, -694614492, -200395387, 275423344, + 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, + 1537002063, 1747873779, 1955562222, 2024104815, -2067236844, -1933114872, + -1866530822, -1538233109, -1090935817, -965641998 + ]; + function binb(m, l) { + var HASH = [1779033703, -1150833019, 1013904242, -1521486534, + 1359893119, -1694144372, 528734635, 1541459225]; + var W = new Array(64); + var a, b, c, d, e, f, g, h; + var i, j, T1, T2; -},{}],10:[function(require,module,exports){ + /* append padding */ + m[l >> 5] |= 0x80 << (24 - l % 32); + m[((l + 64 >> 9) << 4) + 15] = l; -var hasOwn = Object.prototype.hasOwnProperty; -var toString = Object.prototype.toString; + for (i = 0; i < m.length; i += 16) + { + a = HASH[0]; + b = HASH[1]; + c = HASH[2]; + d = HASH[3]; + e = HASH[4]; + f = HASH[5]; + g = HASH[6]; + h = HASH[7]; -module.exports = function forEach (obj, fn, ctx) { - if (toString.call(fn) !== '[object Function]') { - throw new TypeError('iterator must be a function'); - } - var l = obj.length; - if (l === +l) { - for (var i = 0; i < l; i++) { - fn.call(ctx, obj[i], i, obj); - } - } else { - for (var k in obj) { - if (hasOwn.call(obj, k)) { - fn.call(ctx, obj[k], k, obj); - } + for (j = 0; j < 64; j+=1) + { + if (j < 16) { + W[j] = m[j + i]; + } else { + W[j] = safe_add(safe_add(safe_add(sha256_Gamma1256(W[j - 2]), W[j - 7]), + sha256_Gamma0256(W[j - 15])), W[j - 16]); } - } -}; - -},{}]},{},[1])(1) -}); -;/* - (c) 2013, Vladimir Agafonkin - RBush, a JavaScript library for high-performance 2D spatial indexing of points and rectangles. - https://github.com/mourner/rbush -*/ - -(function () { 'use strict'; - -function rbush(maxEntries, format) { - - // jshint newcap: false, validthis: true - if (!(this instanceof rbush)) { return new rbush(maxEntries, format); } - - // max entries in a node is 9 by default; min node fill is 40% for best performance - this._maxEntries = Math.max(4, maxEntries || 9); - this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4)); + T1 = safe_add(safe_add(safe_add(safe_add(h, sha256_Sigma1256(e)), sha256_Ch(e, f, g)), + sha256_K[j]), W[j]); + T2 = safe_add(sha256_Sigma0256(a), sha256_Maj(a, b, c)); + h = g; + g = f; + f = e; + e = safe_add(d, T1); + d = c; + c = b; + b = a; + a = safe_add(T1, T2); + } - if (format) { - this._initFormat(format); + HASH[0] = safe_add(a, HASH[0]); + HASH[1] = safe_add(b, HASH[1]); + HASH[2] = safe_add(c, HASH[2]); + HASH[3] = safe_add(d, HASH[3]); + HASH[4] = safe_add(e, HASH[4]); + HASH[5] = safe_add(f, HASH[5]); + HASH[6] = safe_add(g, HASH[6]); + HASH[7] = safe_add(h, HASH[7]); + } + return HASH; } - this.clear(); -} - -rbush.prototype = { - - all: function () { - return this._all(this.data, []); - }, + }, - search: function (bbox) { + /** + * @class Hashes.SHA512 + * @param {config} + * + * A JavaScript implementation of the Secure Hash Algorithm, SHA-512, as defined in FIPS 180-2 + * Version 2.2 Copyright Anonymous Contributor, Paul Johnston 2000 - 2009. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * See http://pajhome.org.uk/crypt/md5 for details. + */ + SHA512 : function (options) { + /** + * Private properties configuration variables. You may need to tweak these to be compatible with + * the server-side, but the defaults work in most cases. + * @see this.setUpperCase() method + * @see this.setPad() method + */ + var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false , /* hexadecimal output case format. false - lowercase; true - uppercase */ + b64pad = (options && typeof options.pad === 'string') ? options.pda : '=', /* base-64 pad character. Default '=' for strict RFC compliance */ + utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true, /* enable/disable utf8 encoding */ + sha512_k; - var node = this.data, - result = []; + /* privileged (public) methods */ + this.hex = function (s) { + return rstr2hex(rstr(s)); + }; + this.b64 = function (s) { + return rstr2b64(rstr(s), b64pad); + }; + this.any = function (s, e) { + return rstr2any(rstr(s), e); + }; + this.hex_hmac = function (k, d) { + return rstr2hex(rstr_hmac(k, d)); + }; + this.b64_hmac = function (k, d) { + return rstr2b64(rstr_hmac(k, d), b64pad); + }; + this.any_hmac = function (k, d, e) { + return rstr2any(rstr_hmac(k, d), e); + }; + /** + * Perform a simple self-test to see if the VM is working + * @return {String} Hexadecimal hash sample + * @public + */ + this.vm_test = function () { + return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72'; + }; + /** + * @description Enable/disable uppercase hexadecimal returned string + * @param {boolean} + * @return {Object} this + * @public + */ + this.setUpperCase = function (a) { + if (typeof a === 'boolean') { + hexcase = a; + } + return this; + }; + /** + * @description Defines a base64 pad string + * @param {string} Pad + * @return {Object} this + * @public + */ + this.setPad = function (a) { + b64pad = a || b64pad; + return this; + }; + /** + * @description Defines a base64 pad string + * @param {boolean} + * @return {Object} this + * @public + */ + this.setUTF8 = function (a) { + if (typeof a === 'boolean') { + utf8 = a; + } + return this; + }; - if (!this._intersects(bbox, node.bbox)) { return result; } + /* private methods */ - var nodesToSearch = [], - i, len, child, childBBox; + /** + * Calculate the SHA-512 of a raw string + */ + function rstr(s) { + s = (utf8) ? utf8Encode(s) : s; + return binb2rstr(binb(rstr2binb(s), s.length * 8)); + } + /* + * Calculate the HMAC-SHA-512 of a key and some data (raw strings) + */ + function rstr_hmac(key, data) { + key = (utf8) ? utf8Encode(key) : key; + data = (utf8) ? utf8Encode(data) : data; - while (node) { - for (i = 0, len = node.children.length; i < len; i++) { - child = node.children[i]; - childBBox = node.leaf ? this.toBBox(child) : child.bbox; + var hash, i = 0, + bkey = rstr2binb(key), + ipad = Array(32), opad = Array(32); - if (this._intersects(bbox, childBBox)) { + if (bkey.length > 32) { bkey = binb(bkey, key.length * 8); } - if (node.leaf) { - result.push(child); + for (; i < 32; i+=1) { + ipad[i] = bkey[i] ^ 0x36363636; + opad[i] = bkey[i] ^ 0x5C5C5C5C; + } - } else if (this._contains(bbox, childBBox)) { - this._all(child, result); + hash = binb(ipad.concat(rstr2binb(data)), 1024 + data.length * 8); + return binb2rstr(binb(opad.concat(hash), 1024 + 512)); + } - } else { - nodesToSearch.push(child); - } - } - } + /** + * Calculate the SHA-512 of an array of big-endian dwords, and a bit length + */ + function binb(x, len) { + var j, i, l, + W = new Array(80), + hash = new Array(16), + //Initial hash values + H = [ + new int64(0x6a09e667, -205731576), + new int64(-1150833019, -2067093701), + new int64(0x3c6ef372, -23791573), + new int64(-1521486534, 0x5f1d36f1), + new int64(0x510e527f, -1377402159), + new int64(-1694144372, 0x2b3e6c1f), + new int64(0x1f83d9ab, -79577749), + new int64(0x5be0cd19, 0x137e2179) + ], + T1 = new int64(0, 0), + T2 = new int64(0, 0), + a = new int64(0,0), + b = new int64(0,0), + c = new int64(0,0), + d = new int64(0,0), + e = new int64(0,0), + f = new int64(0,0), + g = new int64(0,0), + h = new int64(0,0), + //Temporary variables not specified by the document + s0 = new int64(0, 0), + s1 = new int64(0, 0), + Ch = new int64(0, 0), + Maj = new int64(0, 0), + r1 = new int64(0, 0), + r2 = new int64(0, 0), + r3 = new int64(0, 0); - node = nodesToSearch.pop(); - } + if (sha512_k === undefined) { + //SHA512 constants + sha512_k = [ + new int64(0x428a2f98, -685199838), new int64(0x71374491, 0x23ef65cd), + new int64(-1245643825, -330482897), new int64(-373957723, -2121671748), + new int64(0x3956c25b, -213338824), new int64(0x59f111f1, -1241133031), + new int64(-1841331548, -1357295717), new int64(-1424204075, -630357736), + new int64(-670586216, -1560083902), new int64(0x12835b01, 0x45706fbe), + new int64(0x243185be, 0x4ee4b28c), new int64(0x550c7dc3, -704662302), + new int64(0x72be5d74, -226784913), new int64(-2132889090, 0x3b1696b1), + new int64(-1680079193, 0x25c71235), new int64(-1046744716, -815192428), + new int64(-459576895, -1628353838), new int64(-272742522, 0x384f25e3), + new int64(0xfc19dc6, -1953704523), new int64(0x240ca1cc, 0x77ac9c65), + new int64(0x2de92c6f, 0x592b0275), new int64(0x4a7484aa, 0x6ea6e483), + new int64(0x5cb0a9dc, -1119749164), new int64(0x76f988da, -2096016459), + new int64(-1740746414, -295247957), new int64(-1473132947, 0x2db43210), + new int64(-1341970488, -1728372417), new int64(-1084653625, -1091629340), + new int64(-958395405, 0x3da88fc2), new int64(-710438585, -1828018395), + new int64(0x6ca6351, -536640913), new int64(0x14292967, 0xa0e6e70), + new int64(0x27b70a85, 0x46d22ffc), new int64(0x2e1b2138, 0x5c26c926), + new int64(0x4d2c6dfc, 0x5ac42aed), new int64(0x53380d13, -1651133473), + new int64(0x650a7354, -1951439906), new int64(0x766a0abb, 0x3c77b2a8), + new int64(-2117940946, 0x47edaee6), new int64(-1838011259, 0x1482353b), + new int64(-1564481375, 0x4cf10364), new int64(-1474664885, -1136513023), + new int64(-1035236496, -789014639), new int64(-949202525, 0x654be30), + new int64(-778901479, -688958952), new int64(-694614492, 0x5565a910), + new int64(-200395387, 0x5771202a), new int64(0x106aa070, 0x32bbd1b8), + new int64(0x19a4c116, -1194143544), new int64(0x1e376c08, 0x5141ab53), + new int64(0x2748774c, -544281703), new int64(0x34b0bcb5, -509917016), + new int64(0x391c0cb3, -976659869), new int64(0x4ed8aa4a, -482243893), + new int64(0x5b9cca4f, 0x7763e373), new int64(0x682e6ff3, -692930397), + new int64(0x748f82ee, 0x5defb2fc), new int64(0x78a5636f, 0x43172f60), + new int64(-2067236844, -1578062990), new int64(-1933114872, 0x1a6439ec), + new int64(-1866530822, 0x23631e28), new int64(-1538233109, -561857047), + new int64(-1090935817, -1295615723), new int64(-965641998, -479046869), + new int64(-903397682, -366583396), new int64(-779700025, 0x21c0c207), + new int64(-354779690, -840897762), new int64(-176337025, -294727304), + new int64(0x6f067aa, 0x72176fba), new int64(0xa637dc5, -1563912026), + new int64(0x113f9804, -1090974290), new int64(0x1b710b35, 0x131c471b), + new int64(0x28db77f5, 0x23047d84), new int64(0x32caab7b, 0x40c72493), + new int64(0x3c9ebe0a, 0x15c9bebc), new int64(0x431d67c4, -1676669620), + new int64(0x4cc5d4be, -885112138), new int64(0x597f299c, -60457430), + new int64(0x5fcb6fab, 0x3ad6faec), new int64(0x6c44198c, 0x4a475817) + ]; + } - return result; - }, + for (i=0; i<80; i+=1) { + W[i] = new int64(0, 0); + } - load: function (data) { - if (!(data && data.length)) { return this; } + // append padding to the source string. The format is described in the FIPS. + x[len >> 5] |= 0x80 << (24 - (len & 0x1f)); + x[((len + 128 >> 10)<< 5) + 31] = len; + l = x.length; + for (i = 0; i=32 + //The function revrrot() is for that + function int64rrot(dst, x, shift) { + dst.l = (x.l >>> shift) | (x.h << (32-shift)); + dst.h = (x.h >>> shift) | (x.l << (32-shift)); + } - for (j = 0, sliceLen = slice.length; j < sliceLen; j += N2) { - // pack each entry recursively - childNode = this._build(slice.slice(j, j + N2), level + 1, height - 1); - node.children.push(childNode); - } - } + //Reverses the dwords of the source and then rotates right by shift. + //This is equivalent to rotation by 32+shift + function int64revrrot(dst, x, shift) { + dst.l = (x.h >>> shift) | (x.l << (32-shift)); + dst.h = (x.l >>> shift) | (x.h << (32-shift)); + } - this._calcBBox(node); + //Bitwise-shifts right a 64-bit number by shift + //Won't handle shift>=32, but it's never needed in SHA512 + function int64shr(dst, x, shift) { + dst.l = (x.l >>> shift) | (x.h << (32-shift)); + dst.h = (x.h >>> shift); + } - return node; - }, + //Adds two 64-bit numbers + //Like the original implementation, does not rely on 32-bit operations + function int64add(dst, x, y) { + var w0 = (x.l & 0xffff) + (y.l & 0xffff); + var w1 = (x.l >>> 16) + (y.l >>> 16) + (w0 >>> 16); + var w2 = (x.h & 0xffff) + (y.h & 0xffff) + (w1 >>> 16); + var w3 = (x.h >>> 16) + (y.h >>> 16) + (w2 >>> 16); + dst.l = (w0 & 0xffff) | (w1 << 16); + dst.h = (w2 & 0xffff) | (w3 << 16); + } - _chooseSubtree: function (bbox, node, level, path) { + //Same, except with 4 addends. Works faster than adding them one by one. + function int64add4(dst, a, b, c, d) { + var w0 = (a.l & 0xffff) + (b.l & 0xffff) + (c.l & 0xffff) + (d.l & 0xffff); + var w1 = (a.l >>> 16) + (b.l >>> 16) + (c.l >>> 16) + (d.l >>> 16) + (w0 >>> 16); + var w2 = (a.h & 0xffff) + (b.h & 0xffff) + (c.h & 0xffff) + (d.h & 0xffff) + (w1 >>> 16); + var w3 = (a.h >>> 16) + (b.h >>> 16) + (c.h >>> 16) + (d.h >>> 16) + (w2 >>> 16); + dst.l = (w0 & 0xffff) | (w1 << 16); + dst.h = (w2 & 0xffff) | (w3 << 16); + } - var i, len, child, targetNode, area, enlargement, minArea, minEnlargement; + //Same, except with 5 addends + function int64add5(dst, a, b, c, d, e) { + var w0 = (a.l & 0xffff) + (b.l & 0xffff) + (c.l & 0xffff) + (d.l & 0xffff) + (e.l & 0xffff), + w1 = (a.l >>> 16) + (b.l >>> 16) + (c.l >>> 16) + (d.l >>> 16) + (e.l >>> 16) + (w0 >>> 16), + w2 = (a.h & 0xffff) + (b.h & 0xffff) + (c.h & 0xffff) + (d.h & 0xffff) + (e.h & 0xffff) + (w1 >>> 16), + w3 = (a.h >>> 16) + (b.h >>> 16) + (c.h >>> 16) + (d.h >>> 16) + (e.h >>> 16) + (w2 >>> 16); + dst.l = (w0 & 0xffff) | (w1 << 16); + dst.h = (w2 & 0xffff) | (w3 << 16); + } + }, + /** + * @class Hashes.RMD160 + * @constructor + * @param {Object} [config] + * + * A JavaScript implementation of the RIPEMD-160 Algorithm + * Version 2.2 Copyright Jeremy Lin, Paul Johnston 2000 - 2009. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * See http://pajhome.org.uk/crypt/md5 for details. + * Also http://www.ocf.berkeley.edu/~jjlin/jsotp/ + */ + RMD160 : function (options) { + /** + * Private properties configuration variables. You may need to tweak these to be compatible with + * the server-side, but the defaults work in most cases. + * @see this.setUpperCase() method + * @see this.setPad() method + */ + var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, /* hexadecimal output case format. false - lowercase; true - uppercase */ + b64pad = (options && typeof options.pad === 'string') ? options.pda : '=', /* base-64 pad character. Default '=' for strict RFC compliance */ + utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true, /* enable/disable utf8 encoding */ + rmd160_r1 = [ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, + 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, + 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, + 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 + ], + rmd160_r2 = [ + 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, + 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, + 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, + 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, + 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 + ], + rmd160_s1 = [ + 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, + 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, + 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, + 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, + 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 + ], + rmd160_s2 = [ + 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, + 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, + 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, + 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, + 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 + ]; - while (true) { - path.push(node); + /* privileged (public) methods */ + this.hex = function (s) { + return rstr2hex(rstr(s, utf8)); + }; + this.b64 = function (s) { + return rstr2b64(rstr(s, utf8), b64pad); + }; + this.any = function (s, e) { + return rstr2any(rstr(s, utf8), e); + }; + this.hex_hmac = function (k, d) { + return rstr2hex(rstr_hmac(k, d)); + }; + this.b64_hmac = function (k, d) { + return rstr2b64(rstr_hmac(k, d), b64pad); + }; + this.any_hmac = function (k, d, e) { + return rstr2any(rstr_hmac(k, d), e); + }; + /** + * Perform a simple self-test to see if the VM is working + * @return {String} Hexadecimal hash sample + * @public + */ + this.vm_test = function () { + return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72'; + }; + /** + * @description Enable/disable uppercase hexadecimal returned string + * @param {boolean} + * @return {Object} this + * @public + */ + this.setUpperCase = function (a) { + if (typeof a === 'boolean' ) { hexcase = a; } + return this; + }; + /** + * @description Defines a base64 pad string + * @param {string} Pad + * @return {Object} this + * @public + */ + this.setPad = function (a) { + if (typeof a !== 'undefined' ) { b64pad = a; } + return this; + }; + /** + * @description Defines a base64 pad string + * @param {boolean} + * @return {Object} this + * @public + */ + this.setUTF8 = function (a) { + if (typeof a === 'boolean') { utf8 = a; } + return this; + }; - if (node.leaf || path.length - 1 === level) { break; } + /* private methods */ - minArea = minEnlargement = Infinity; + /** + * Calculate the rmd160 of a raw string + */ + function rstr(s) { + s = (utf8) ? utf8Encode(s) : s; + return binl2rstr(binl(rstr2binl(s), s.length * 8)); + } - for (i = 0, len = node.children.length; i < len; i++) { - child = node.children[i]; - area = this._area(child.bbox); - enlargement = this._enlargedArea(bbox, child.bbox) - area; + /** + * Calculate the HMAC-rmd160 of a key and some data (raw strings) + */ + function rstr_hmac(key, data) { + key = (utf8) ? utf8Encode(key) : key; + data = (utf8) ? utf8Encode(data) : data; + var i, hash, + bkey = rstr2binl(key), + ipad = Array(16), opad = Array(16); - // choose entry with the least area enlargement - if (enlargement < minEnlargement) { - minEnlargement = enlargement; - minArea = area < minArea ? area : minArea; - targetNode = child; + if (bkey.length > 16) { + bkey = binl(bkey, key.length * 8); + } - } else if (enlargement === minEnlargement) { - // otherwise choose one with the smallest area - if (area < minArea) { - minArea = area; - targetNode = child; - } - } - } + for (i = 0; i < 16; i+=1) { + ipad[i] = bkey[i] ^ 0x36363636; + opad[i] = bkey[i] ^ 0x5C5C5C5C; + } + hash = binl(ipad.concat(rstr2binl(data)), 512 + data.length * 8); + return binl2rstr(binl(opad.concat(hash), 512 + 160)); + } - node = targetNode; - } + /** + * Convert an array of little-endian words to a string + */ + function binl2rstr(input) { + var i, output = '', l = input.length * 32; + for (i = 0; i < l; i += 8) { + output += String.fromCharCode((input[i>>5] >>> (i % 32)) & 0xFF); + } + return output; + } - return node; - }, + /** + * Calculate the RIPE-MD160 of an array of little-endian words, and a bit length. + */ + function binl(x, len) { + var T, j, i, l, + h0 = 0x67452301, + h1 = 0xefcdab89, + h2 = 0x98badcfe, + h3 = 0x10325476, + h4 = 0xc3d2e1f0, + A1, B1, C1, D1, E1, + A2, B2, C2, D2, E2; - _insert: function (item, level, isNode, root) { + /* append padding */ + x[len >> 5] |= 0x80 << (len % 32); + x[(((len + 64) >>> 9) << 4) + 14] = len; + l = x.length; - var bbox = isNode ? item.bbox : this.toBBox(item), - insertPath = []; + for (i = 0; i < l; i+=16) { + A1 = A2 = h0; B1 = B2 = h1; C1 = C2 = h2; D1 = D2 = h3; E1 = E2 = h4; + for (j = 0; j <= 79; j+=1) { + T = safe_add(A1, rmd160_f(j, B1, C1, D1)); + T = safe_add(T, x[i + rmd160_r1[j]]); + T = safe_add(T, rmd160_K1(j)); + T = safe_add(bit_rol(T, rmd160_s1[j]), E1); + A1 = E1; E1 = D1; D1 = bit_rol(C1, 10); C1 = B1; B1 = T; + T = safe_add(A2, rmd160_f(79-j, B2, C2, D2)); + T = safe_add(T, x[i + rmd160_r2[j]]); + T = safe_add(T, rmd160_K2(j)); + T = safe_add(bit_rol(T, rmd160_s2[j]), E2); + A2 = E2; E2 = D2; D2 = bit_rol(C2, 10); C2 = B2; B2 = T; + } - // find the best node for accommodating the item, saving all nodes along the path too - var node = this._chooseSubtree(bbox, root || this.data, level, insertPath), - splitOccured; + T = safe_add(h1, safe_add(C1, D2)); + h1 = safe_add(h2, safe_add(D1, E2)); + h2 = safe_add(h3, safe_add(E1, A2)); + h3 = safe_add(h4, safe_add(A1, B2)); + h4 = safe_add(h0, safe_add(B1, C2)); + h0 = T; + } + return [h0, h1, h2, h3, h4]; + } - // put the item into the node - node.children.push(item); - this._extend(node.bbox, bbox); + // specific algorithm methods + function rmd160_f(j, x, y, z) { + return ( 0 <= j && j <= 15) ? (x ^ y ^ z) : + (16 <= j && j <= 31) ? (x & y) | (~x & z) : + (32 <= j && j <= 47) ? (x | ~y) ^ z : + (48 <= j && j <= 63) ? (x & z) | (y & ~z) : + (64 <= j && j <= 79) ? x ^ (y | ~z) : + 'rmd160_f: j out of range'; + } - // split on node overflow; propagate upwards if necessary - do { - splitOccured = false; - if (insertPath[level].children.length > this._maxEntries) { - this._split(insertPath, level); - splitOccured = true; - level--; - } - } while (level >= 0 && splitOccured); + function rmd160_K1(j) { + return ( 0 <= j && j <= 15) ? 0x00000000 : + (16 <= j && j <= 31) ? 0x5a827999 : + (32 <= j && j <= 47) ? 0x6ed9eba1 : + (48 <= j && j <= 63) ? 0x8f1bbcdc : + (64 <= j && j <= 79) ? 0xa953fd4e : + 'rmd160_K1: j out of range'; + } - // adjust bboxes along the insertion path - this._adjustParentBBoxes(bbox, insertPath, level); - }, + function rmd160_K2(j){ + return ( 0 <= j && j <= 15) ? 0x50a28be6 : + (16 <= j && j <= 31) ? 0x5c4dd124 : + (32 <= j && j <= 47) ? 0x6d703ef3 : + (48 <= j && j <= 63) ? 0x7a6d76e9 : + (64 <= j && j <= 79) ? 0x00000000 : + 'rmd160_K2: j out of range'; + } + } +}; - // split overflowed node into two - _split: function (insertPath, level) { + // exposes Hashes + (function( window, undefined ) { + var freeExports = false; + if (typeof exports === 'object' ) { + freeExports = exports; + if (exports && typeof global === 'object' && global && global === global.global ) { window = global; } + } - var node = insertPath[level], - M = node.children.length, - m = this._minEntries; + if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) { + // define as an anonymous module, so, through path mapping, it can be aliased + define(function () { return Hashes; }); + } + else if ( freeExports ) { + // in Node.js or RingoJS v0.8.0+ + if ( typeof module === 'object' && module && module.exports === freeExports ) { + module.exports = Hashes; + } + // in Narwhal or RingoJS v0.7.0- + else { + freeExports.Hashes = Hashes; + } + } + else { + // in a browser or Rhino + window.Hashes = Hashes; + } + }( this )); +}()); // IIFE - this._chooseSplitAxis(node, m, M); +})(window) +},{}],2:[function(require,module,exports){ +'use strict'; - var newNode = { - children: node.children.splice(this._chooseSplitIndex(node, m, M)), - height: node.height - }; +var hashes = require('jshashes'), + xtend = require('xtend'), + sha1 = new hashes.SHA1(); - if (node.leaf) { - newNode.leaf = true; - } +var ohauth = {}; - this._calcBBox(node); - this._calcBBox(newNode); +ohauth.qsString = function(obj) { + return Object.keys(obj).sort().map(function(key) { + return ohauth.percentEncode(key) + '=' + + ohauth.percentEncode(obj[key]); + }).join('&'); +}; - if (level) { - insertPath[level - 1].children.push(newNode); - } else { - this._splitRoot(node, newNode); +ohauth.stringQs = function(str) { + return str.split('&').reduce(function(obj, pair){ + var parts = pair.split('='); + obj[decodeURIComponent(parts[0])] = (null === parts[1]) ? + '' : decodeURIComponent(parts[1]); + return obj; + }, {}); +}; + +ohauth.rawxhr = function(method, url, data, headers, callback) { + var xhr = new XMLHttpRequest(), + twoHundred = /^20\d$/; + xhr.onreadystatechange = function() { + if (4 == xhr.readyState && 0 !== xhr.status) { + if (twoHundred.test(xhr.status)) callback(null, xhr); + else return callback(xhr, null); } - }, + }; + xhr.onerror = function(e) { return callback(e, null); }; + xhr.open(method, url, true); + for (var h in headers) xhr.setRequestHeader(h, headers[h]); + xhr.send(data); +}; - _splitRoot: function (node, newNode) { - // split root node - this.data = {}; - this.data.children = [node, newNode]; - this.data.height = node.height + 1; - this._calcBBox(this.data); - }, - - _chooseSplitIndex: function (node, m, M) { - - var i, bbox1, bbox2, overlap, area, minOverlap, minArea, index; - - minOverlap = minArea = Infinity; - - for (i = m; i <= M - m; i++) { - bbox1 = this._distBBox(node, 0, i); - bbox2 = this._distBBox(node, i, M); +ohauth.xhr = function(method, url, auth, data, options, callback) { + var headers = (options && options.header) || { + 'Content-Type': 'application/x-www-form-urlencoded' + }; + headers.Authorization = 'OAuth ' + ohauth.authHeader(auth); + ohauth.rawxhr(method, url, data, headers, callback); +}; - overlap = this._intersectionArea(bbox1, bbox2); - area = this._area(bbox1) + this._area(bbox2); +ohauth.nonce = function() { + for (var o = ''; o.length < 6;) { + o += '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'[Math.floor(Math.random() * 61)]; + } + return o; +}; - // choose distribution with minimum overlap - if (overlap < minOverlap) { - minOverlap = overlap; - index = i; +ohauth.authHeader = function(obj) { + return Object.keys(obj).sort().map(function(key) { + return encodeURIComponent(key) + '="' + encodeURIComponent(obj[key]) + '"'; + }).join(', '); +}; - minArea = area < minArea ? area : minArea; +ohauth.timestamp = function() { return ~~((+new Date()) / 1000); }; - } else if (overlap === minOverlap) { - // otherwise choose distribution with minimum area - if (area < minArea) { - minArea = area; - index = i; - } - } - } +ohauth.percentEncode = function(s) { + return encodeURIComponent(s) + .replace(/\!/g, '%21').replace(/\'/g, '%27') + .replace(/\*/g, '%2A').replace(/\(/g, '%28').replace(/\)/g, '%29'); +}; - return index; - }, +ohauth.baseString = function(method, url, params) { + if (params.oauth_signature) delete params.oauth_signature; + return [ + method, + ohauth.percentEncode(url), + ohauth.percentEncode(ohauth.qsString(params))].join('&'); +}; - // sorts node children by the best axis for split - _chooseSplitAxis: function (node, m, M) { +ohauth.signature = function(oauth_secret, token_secret, baseString) { + return sha1.b64_hmac( + ohauth.percentEncode(oauth_secret) + '&' + + ohauth.percentEncode(token_secret), + baseString); +}; - var compareMinX = node.leaf ? this.compareMinX : this._compareNodeMinX, - compareMinY = node.leaf ? this.compareMinY : this._compareNodeMinY, - xMargin = this._allDistMargin(node, m, M, compareMinX), - yMargin = this._allDistMargin(node, m, M, compareMinY); +/** + * Takes an options object for configuration (consumer_key, + * consumer_secret, version, signature_method, token) and returns a + * function that generates the Authorization header for given data. + * + * The returned function takes these parameters: + * - method: GET/POST/... + * - uri: full URI with protocol, port, path and query string + * - extra_params: any extra parameters (that are passed in the POST data), + * can be an object or a from-urlencoded string. + * + * Returned function returns full OAuth header with "OAuth" string in it. + */ - // if total distributions margin value is minimal for x, sort by minX, - // otherwise it's already sorted by minY +ohauth.headerGenerator = function(options) { + options = options || {}; + var consumer_key = options.consumer_key || '', + consumer_secret = options.consumer_secret || '', + signature_method = options.signature_method || 'HMAC-SHA1', + version = options.version || '1.0', + token = options.token || ''; - if (xMargin < yMargin) { - node.children.sort(compareMinX); + return function(method, uri, extra_params) { + method = method.toUpperCase(); + if (typeof extra_params === 'string' && extra_params.length > 0) { + extra_params = ohauth.stringQs(extra_params); } - }, - // total margin of all possible split distributions where each node is at least m full - _allDistMargin: function (node, m, M, compare) { - - node.children.sort(compare); + var uri_parts = uri.split('?', 2), + base_uri = uri_parts[0]; - var leftBBox = this._distBBox(node, 0, m), - rightBBox = this._distBBox(node, M - m, M), - margin = this._margin(leftBBox) + this._margin(rightBBox), - i, child; + var query_params = uri_parts.length === 2 ? + ohauth.stringQs(uri_parts[1]) : {}; - for (i = m; i < M - m; i++) { - child = node.children[i]; - this._extend(leftBBox, node.leaf ? this.toBBox(child) : child.bbox); - margin += this._margin(leftBBox); - } + var oauth_params = { + oauth_consumer_key: consumer_key, + oauth_signature_method: signature_method, + oauth_version: version, + oauth_timestamp: ohauth.timestamp(), + oauth_nonce: ohauth.nonce() + }; - for (i = M - m - 1; i >= 0; i--) { - child = node.children[i]; - this._extend(rightBBox, node.leaf ? this.toBBox(child) : child.bbox); - margin += this._margin(rightBBox); - } + if (token) oauth_params.oauth_token = token; - return margin; - }, + var all_params = xtend({}, oauth_params, query_params, extra_params), + base_str = ohauth.baseString(method, base_uri, all_params); - // min bounding rectangle of node children from k to p-1 - _distBBox: function (node, k, p) { - var bbox = this._empty(); + oauth_params.oauth_signature = ohauth.signature(consumer_secret, token, base_str); - for (var i = k, child; i < p; i++) { - child = node.children[i]; - this._extend(bbox, node.leaf ? this.toBBox(child) : child.bbox); - } + return 'OAuth ' + ohauth.authHeader(oauth_params); + }; +}; - return bbox; - }, +module.exports = ohauth; - // calculate node's bbox from bboxes of its children - _calcBBox: function (node) { - node.bbox = this._empty(); +},{"jshashes":7,"xtend":4}],6:[function(require,module,exports){ +module.exports = Object.keys || require('./shim'); - for (var i = 0, len = node.children.length, child; i < len; i++) { - child = node.children[i]; - this._extend(node.bbox, node.leaf ? this.toBBox(child) : child.bbox); - } - }, - _adjustParentBBoxes: function (bbox, path, level) { - // adjust bboxes along the given tree path - for (var i = level; i >= 0; i--) { - this._extend(path[i].bbox, bbox); - } - }, +},{"./shim":8}],8:[function(require,module,exports){ +(function () { + "use strict"; - _condense: function (path) { - // go through the path, removing empty nodes and updating bboxes - for (var i = path.length - 1, parent; i >= 0; i--) { - if (path[i].children.length === 0) { - if (i > 0) { - parent = path[i - 1].children; - parent.splice(parent.indexOf(path[i]), 1); - } else { - this.clear(); - } - } else { - this._calcBBox(path[i]); - } - } - }, + // modified from https://github.com/kriskowal/es5-shim + var has = Object.prototype.hasOwnProperty, + is = require('is'), + forEach = require('foreach'), + hasDontEnumBug = !({'toString': null}).propertyIsEnumerable('toString'), + dontEnums = [ + "toString", + "toLocaleString", + "valueOf", + "hasOwnProperty", + "isPrototypeOf", + "propertyIsEnumerable", + "constructor" + ], + keysShim; - _contains: function(a, b) { - return a[0] <= b[0] && - a[1] <= b[1] && - b[2] <= a[2] && - b[3] <= a[3]; - }, + keysShim = function keys(object) { + if (!is.object(object) && !is.array(object)) { + throw new TypeError("Object.keys called on a non-object"); + } - _intersects: function (a, b) { - return b[0] <= a[2] && - b[1] <= a[3] && - b[2] >= a[0] && - b[3] >= a[1]; - }, + var name, theKeys = []; + for (name in object) { + if (has.call(object, name)) { + theKeys.push(name); + } + } - _extend: function (a, b) { - a[0] = Math.min(a[0], b[0]); - a[1] = Math.min(a[1], b[1]); - a[2] = Math.max(a[2], b[2]); - a[3] = Math.max(a[3], b[3]); - return a; - }, + if (hasDontEnumBug) { + forEach(dontEnums, function (dontEnum) { + if (has.call(object, dontEnum)) { + theKeys.push(dontEnum); + } + }); + } + return theKeys; + }; - _area: function (a) { return (a[2] - a[0]) * (a[3] - a[1]); }, - _margin: function (a) { return (a[2] - a[0]) + (a[3] - a[1]); }, + module.exports = keysShim; +}()); - _enlargedArea: function (a, b) { - return (Math.max(b[2], a[2]) - Math.min(b[0], a[0])) * - (Math.max(b[3], a[3]) - Math.min(b[1], a[1])); - }, - _intersectionArea: function (a, b) { - var minX = Math.max(a[0], b[0]), - minY = Math.max(a[1], b[1]), - maxX = Math.min(a[2], b[2]), - maxY = Math.min(a[3], b[3]); +},{"is":9,"foreach":10}],9:[function(require,module,exports){ - return Math.max(0, maxX - minX) * - Math.max(0, maxY - minY); - }, +/**! + * is + * the definitive JavaScript type testing library + * + * @copyright 2013 Enrico Marino + * @license MIT + */ - _empty: function () { return [Infinity, Infinity, -Infinity, -Infinity]; }, +var objProto = Object.prototype; +var owns = objProto.hasOwnProperty; +var toString = objProto.toString; +var isActualNaN = function (value) { + return value !== value; +}; +var NON_HOST_TYPES = { + "boolean": 1, + "number": 1, + "string": 1, + "undefined": 1 +}; - _compareNodeMinX: function (a, b) { return a.bbox[0] - b.bbox[0]; }, - _compareNodeMinY: function (a, b) { return a.bbox[1] - b.bbox[1]; }, +/** + * Expose `is` + */ - _initFormat: function (format) { - // data format (minX, minY, maxX, maxY accessors) +var is = module.exports = {}; - // uses eval-type function compilation instead of just accepting a toBBox function - // because the algorithms are very sensitive to sorting functions performance, - // so they should be dead simple and without inner calls +/** + * Test general. + */ - // jshint evil: true +/** + * is.type + * Test if `value` is a type of `type`. + * + * @param {Mixed} value value to test + * @param {String} type type + * @return {Boolean} true if `value` is a type of `type`, false otherwise + * @api public + */ - var compareArr = ['return a', ' - b', ';']; +is.a = +is.type = function (value, type) { + return typeof value === type; +}; - this.compareMinX = new Function('a', 'b', compareArr.join(format[0])); - this.compareMinY = new Function('a', 'b', compareArr.join(format[1])); +/** + * is.defined + * Test if `value` is defined. + * + * @param {Mixed} value value to test + * @return {Boolean} true if 'value' is defined, false otherwise + * @api public + */ - this.toBBox = new Function('a', 'return [a' + format.join(', a') + '];'); - } +is.defined = function (value) { + return value !== undefined; }; -if (typeof define === 'function' && define.amd) { - define(function() { - return rbush; - }); -} else if (typeof module !== 'undefined') { - module.exports = rbush; -} else if (typeof self !== 'undefined') { - self.rbush = rbush; -} else { - window.rbush = rbush; -} - -})(); -toGeoJSON = (function() { - 'use strict'; +/** + * is.empty + * Test if `value` is empty. + * + * @param {Mixed} value value to test + * @return {Boolean} true if `value` is empty, false otherwise + * @api public + */ - var removeSpace = (/\s*/g), - trimSpace = (/^\s*|\s*$/g), - splitSpace = (/\s+/); - // generate a short, numeric hash of a string - function okhash(x) { - if (!x || !x.length) return 0; - for (var i = 0, h = 0; i < x.length; i++) { - h = ((h << 5) - h) + x.charCodeAt(i) | 0; - } return h; - } - // all Y children of X - function get(x, y) { return x.getElementsByTagName(y); } - function attr(x, y) { return x.getAttribute(y); } - function attrf(x, y) { return parseFloat(attr(x, y)); } - // one Y child of X, if any, otherwise null - function get1(x, y) { var n = get(x, y); return n.length ? n[0] : null; } - // https://developer.mozilla.org/en-US/docs/Web/API/Node.normalize - function norm(el) { if (el.normalize) { el.normalize(); } return el; } - // cast array x into numbers - function numarray(x) { - for (var j = 0, o = []; j < x.length; j++) o[j] = parseFloat(x[j]); - return o; +is.empty = function (value) { + var type = toString.call(value); + var key; + + if ('[object Array]' === type || '[object Arguments]' === type) { + return value.length === 0; + } + + if ('[object Object]' === type) { + for (key in value) if (owns.call(value, key)) return false; + return true; + } + + if ('[object String]' === type) { + return '' === value; + } + + return false; +}; + +/** + * is.equal + * Test if `value` is equal to `other`. + * + * @param {Mixed} value value to test + * @param {Mixed} other value to compare with + * @return {Boolean} true if `value` is equal to `other`, false otherwise + */ + +is.equal = function (value, other) { + var type = toString.call(value) + var key; + + if (type !== toString.call(other)) { + return false; + } + + if ('[object Object]' === type) { + for (key in value) { + if (!is.equal(value[key], other[key])) { + return false; + } } - function clean(x) { - var o = {}; - for (var i in x) if (x[i]) o[i] = x[i]; - return o; + return true; + } + + if ('[object Array]' === type) { + key = value.length; + if (key !== other.length) { + return false; } - // get the content of a text node, if any - function nodeVal(x) { if (x) {norm(x);} return x && x.firstChild && x.firstChild.nodeValue; } - // get one coordinate from a coordinate array, if any - function coord1(v) { return numarray(v.replace(removeSpace, '').split(',')); } - // get all coordinates from a coordinate array as [[],[]] - function coord(v) { - var coords = v.replace(trimSpace, '').split(splitSpace), - o = []; - for (var i = 0; i < coords.length; i++) { - o.push(coord1(coords[i])); - } - return o; + while (--key) { + if (!is.equal(value[key], other[key])) { + return false; + } } - function coordPair(x) { return [attrf(x, 'lon'), attrf(x, 'lat')]; } + return true; + } - // create a new feature collection parent object - function fc() { - return { - type: 'FeatureCollection', - features: [] - }; - } + if ('[object Function]' === type) { + return value.prototype === other.prototype; + } - var styleSupport = false; - if (typeof XMLSerializer !== 'undefined') { - var serializer = new XMLSerializer(); - styleSupport = true; - } - function xml2str(str) { return serializer.serializeToString(str); } + if ('[object Date]' === type) { + return value.getTime() === other.getTime(); + } - var t = { - kml: function(doc, o) { - o = o || {}; + return value === other; +}; - var gj = fc(), - // styleindex keeps track of hashed styles in order to match features - styleIndex = {}, - // atomic geospatial types supported by KML - MultiGeometry is - // handled separately - geotypes = ['Polygon', 'LineString', 'Point', 'Track'], - // all root placemarks in the file - placemarks = get(doc, 'Placemark'), - styles = get(doc, 'Style'); +/** + * is.hosted + * Test if `value` is hosted by `host`. + * + * @param {Mixed} value to test + * @param {Mixed} host host to test with + * @return {Boolean} true if `value` is hosted by `host`, false otherwise + * @api public + */ - if (styleSupport) for (var k = 0; k < styles.length; k++) { - styleIndex['#' + attr(styles[k], 'id')] = okhash(xml2str(styles[k])).toString(16); - } - for (var j = 0; j < placemarks.length; j++) { - gj.features = gj.features.concat(getPlacemark(placemarks[j])); - } - function gxCoord(v) { return numarray(v.split(' ')); } - function gxCoords(root) { - var elems = get(root, 'coord', 'gx'), coords = []; - for (var i = 0; i < elems.length; i++) coords.push(gxCoord(nodeVal(elems[i]))); - return coords; - } - function getGeometry(root) { - var geomNode, geomNodes, i, j, k, geoms = []; - if (get1(root, 'MultiGeometry')) return getGeometry(get1(root, 'MultiGeometry')); - if (get1(root, 'MultiTrack')) return getGeometry(get1(root, 'MultiTrack')); - for (i = 0; i < geotypes.length; i++) { - geomNodes = get(root, geotypes[i]); - if (geomNodes) { - for (j = 0; j < geomNodes.length; j++) { - geomNode = geomNodes[j]; - if (geotypes[i] == 'Point') { - geoms.push({ - type: 'Point', - coordinates: coord1(nodeVal(get1(geomNode, 'coordinates'))) - }); - } else if (geotypes[i] == 'LineString') { - geoms.push({ - type: 'LineString', - coordinates: coord(nodeVal(get1(geomNode, 'coordinates'))) - }); - } else if (geotypes[i] == 'Polygon') { - var rings = get(geomNode, 'LinearRing'), - coords = []; - for (k = 0; k < rings.length; k++) { - coords.push(coord(nodeVal(get1(rings[k], 'coordinates')))); - } - geoms.push({ - type: 'Polygon', - coordinates: coords - }); - } else if (geotypes[i] == 'Track') { - geoms.push({ - type: 'LineString', - coordinates: gxCoords(geomNode) - }); - } - } - } - } - return geoms; - } - function getPlacemark(root) { - var geoms = getGeometry(root), i, properties = {}, - name = nodeVal(get1(root, 'name')), - styleUrl = nodeVal(get1(root, 'styleUrl')), - description = nodeVal(get1(root, 'description')), - extendedData = get1(root, 'ExtendedData'); +is.hosted = function (value, host) { + var type = typeof host[value]; + return type === 'object' ? !!host[value] : !NON_HOST_TYPES[type]; +}; - if (!geoms.length) return []; - if (name) properties.name = name; - if (styleUrl && styleIndex[styleUrl]) { - properties.styleUrl = styleUrl; - properties.styleHash = styleIndex[styleUrl]; - } - if (description) properties.description = description; - if (extendedData) { - var datas = get(extendedData, 'Data'), - simpleDatas = get(extendedData, 'SimpleData'); +/** + * is.instance + * Test if `value` is an instance of `constructor`. + * + * @param {Mixed} value value to test + * @return {Boolean} true if `value` is an instance of `constructor` + * @api public + */ - for (i = 0; i < datas.length; i++) { - properties[datas[i].getAttribute('name')] = nodeVal(get1(datas[i], 'value')); - } - for (i = 0; i < simpleDatas.length; i++) { - properties[simpleDatas[i].getAttribute('name')] = nodeVal(simpleDatas[i]); - } - } - return [{ - type: 'Feature', - geometry: (geoms.length === 1) ? geoms[0] : { - type: 'GeometryCollection', - geometries: geoms - }, - properties: properties - }]; - } - return gj; - }, - gpx: function(doc, o) { - var i, - tracks = get(doc, 'trk'), - routes = get(doc, 'rte'), - waypoints = get(doc, 'wpt'), - // a feature collection - gj = fc(); - for (i = 0; i < tracks.length; i++) { - gj.features.push(getLinestring(tracks[i], 'trkpt')); - } - for (i = 0; i < routes.length; i++) { - gj.features.push(getLinestring(routes[i], 'rtept')); - } - for (i = 0; i < waypoints.length; i++) { - gj.features.push(getPoint(waypoints[i])); - } - function getLinestring(node, pointname) { - var j, pts = get(node, pointname), line = []; - for (j = 0; j < pts.length; j++) { - line.push(coordPair(pts[j])); - } - return { - type: 'Feature', - properties: getProperties(node), - geometry: { - type: 'LineString', - coordinates: line - } - }; - } - function getPoint(node) { - var prop = getProperties(node); - prop.ele = nodeVal(get1(node, 'ele')); - prop.sym = nodeVal(get1(node, 'sym')); - return { - type: 'Feature', - properties: prop, - geometry: { - type: 'Point', - coordinates: coordPair(node) - } - }; - } - function getProperties(node) { - var meta = ['name', 'desc', 'author', 'copyright', 'link', - 'time', 'keywords'], - prop = {}, - k; - for (k = 0; k < meta.length; k++) { - prop[meta[k]] = nodeVal(get1(node, meta[k])); - } - return clean(prop); - } - return gj; - } - }; - return t; -})(); +is.instance = is['instanceof'] = function (value, constructor) { + return value instanceof constructor; +}; -if (typeof module !== 'undefined') module.exports = toGeoJSON; /** - * marked - a markdown parser - * Copyright (c) 2011-2013, Christopher Jeffrey. (MIT Licensed) - * https://github.com/chjj/marked + * is.null + * Test if `value` is null. + * + * @param {Mixed} value value to test + * @return {Boolean} true if `value` is null, false otherwise + * @api public */ -;(function() { +is['null'] = function (value) { + return value === null; +}; /** - * Block-Level Grammar + * is.undefined + * Test if `value` is undefined. + * + * @param {Mixed} value value to test + * @return {Boolean} true if `value` is undefined, false otherwise + * @api public */ -var block = { - newline: /^\n+/, - code: /^( {4}[^\n]+\n*)+/, - fences: noop, - hr: /^( *[-*_]){3,} *(?:\n+|$)/, - heading: /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/, - nptable: noop, - lheading: /^([^\n]+)\n *(=|-){3,} *\n*/, - blockquote: /^( *>[^\n]+(\n[^\n]+)*\n*)+/, - list: /^( *)(bull) [\s\S]+?(?:hr|\n{2,}(?! )(?!\1bull )\n*|\s*$)/, - html: /^ *(?:comment|closed|closing) *(?:\n{2,}|\s*$)/, - def: /^ *\[([^\]]+)\]: *]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/, - table: noop, - paragraph: /^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/, - text: /^[^\n]+/ +is.undefined = function (value) { + return value === undefined; }; -block.bullet = /(?:[*+-]|\d+\.)/; -block.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/; -block.item = replace(block.item, 'gm') - (/bull/g, block.bullet) - (); - -block.list = replace(block.list) - (/bull/g, block.bullet) - ('hr', /\n+(?=(?: *[-*_]){3,} *(?:\n+|$))/) - (); - -block._tag = '(?!(?:' - + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code' - + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo' - + '|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|@)\\b'; - -block.html = replace(block.html) - ('comment', //) - ('closed', /<(tag)[\s\S]+?<\/\1>/) - ('closing', /])*?>/) - (/tag/g, block._tag) - (); - -block.paragraph = replace(block.paragraph) - ('hr', block.hr) - ('heading', block.heading) - ('lheading', block.lheading) - ('blockquote', block.blockquote) - ('tag', '<' + block._tag) - ('def', block.def) - (); +/** + * Test arguments. + */ /** - * Normal Block Grammar + * is.arguments + * Test if `value` is an arguments object. + * + * @param {Mixed} value value to test + * @return {Boolean} true if `value` is an arguments object, false otherwise + * @api public */ -block.normal = merge({}, block); +is.arguments = function (value) { + var isStandardArguments = '[object Arguments]' === toString.call(value); + var isOldArguments = !is.array(value) && is.arraylike(value) && is.object(value) && is.fn(value.callee); + return isStandardArguments || isOldArguments; +}; /** - * GFM Block Grammar + * Test array. */ -block.gfm = merge({}, block.normal, { - fences: /^ *(`{3,}|~{3,}) *(\S+)? *\n([\s\S]+?)\s*\1 *(?:\n+|$)/, - paragraph: /^/ -}); +/** + * is.array + * Test if 'value' is an array. + * + * @param {Mixed} value value to test + * @return {Boolean} true if `value` is an array, false otherwise + * @api public + */ -block.gfm.paragraph = replace(block.paragraph) - ('(?!', '(?!' + block.gfm.fences.source.replace('\\1', '\\2') + '|') - (); +is.array = function (value) { + return '[object Array]' === toString.call(value); +}; /** - * GFM + Tables Block Grammar + * is.arguments.empty + * Test if `value` is an empty arguments object. + * + * @param {Mixed} value value to test + * @return {Boolean} true if `value` is an empty arguments object, false otherwise + * @api public */ +is.arguments.empty = function (value) { + return is.arguments(value) && value.length === 0; +}; -block.tables = merge({}, block.gfm, { - nptable: /^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/, - table: /^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/ -}); +/** + * is.array.empty + * Test if `value` is an empty array. + * + * @param {Mixed} value value to test + * @return {Boolean} true if `value` is an empty array, false otherwise + * @api public + */ +is.array.empty = function (value) { + return is.array(value) && value.length === 0; +}; /** - * Block Lexer + * is.arraylike + * Test if `value` is an arraylike object. + * + * @param {Mixed} value value to test + * @return {Boolean} true if `value` is an arguments object, false otherwise + * @api public */ -function Lexer(options) { - this.tokens = []; - this.tokens.links = {}; - this.options = options || marked.defaults; - this.rules = block.normal; +is.arraylike = function (value) { + return !!value && !is.boolean(value) + && owns.call(value, 'length') + && isFinite(value.length) + && is.number(value.length) + && value.length >= 0; +}; - if (this.options.gfm) { - if (this.options.tables) { - this.rules = block.tables; - } else { - this.rules = block.gfm; - } - } -} +/** + * Test boolean. + */ /** - * Expose Block Rules + * is.boolean + * Test if `value` is a boolean. + * + * @param {Mixed} value value to test + * @return {Boolean} true if `value` is a boolean, false otherwise + * @api public */ -Lexer.rules = block; +is.boolean = function (value) { + return '[object Boolean]' === toString.call(value); +}; /** - * Static Lex Method + * is.false + * Test if `value` is false. + * + * @param {Mixed} value value to test + * @return {Boolean} true if `value` is false, false otherwise + * @api public */ -Lexer.lex = function(src, options) { - var lexer = new Lexer(options); - return lexer.lex(src); +is['false'] = function (value) { + return is.boolean(value) && (value === false || value.valueOf() === false); }; /** - * Preprocessing + * is.true + * Test if `value` is true. + * + * @param {Mixed} value value to test + * @return {Boolean} true if `value` is true, false otherwise + * @api public */ -Lexer.prototype.lex = function(src) { - src = src - .replace(/\r\n|\r/g, '\n') - .replace(/\t/g, ' ') - .replace(/\u00a0/g, ' ') - .replace(/\u2424/g, '\n'); - - return this.token(src, true); +is['true'] = function (value) { + return is.boolean(value) && (value === true || value.valueOf() === true); }; /** - * Lexing + * Test date. */ -Lexer.prototype.token = function(src, top) { - var src = src.replace(/^ +$/gm, '') - , next - , loose - , cap - , bull - , b - , item - , space - , i - , l; +/** + * is.date + * Test if `value` is a date. + * + * @param {Mixed} value value to test + * @return {Boolean} true if `value` is a date, false otherwise + * @api public + */ - while (src) { - // newline - if (cap = this.rules.newline.exec(src)) { - src = src.substring(cap[0].length); - if (cap[0].length > 1) { - this.tokens.push({ - type: 'space' - }); - } - } +is.date = function (value) { + return '[object Date]' === toString.call(value); +}; - // code - if (cap = this.rules.code.exec(src)) { - src = src.substring(cap[0].length); - cap = cap[0].replace(/^ {4}/gm, ''); - this.tokens.push({ - type: 'code', - text: !this.options.pedantic - ? cap.replace(/\n+$/, '') - : cap - }); - continue; - } +/** + * Test element. + */ - // fences (gfm) - if (cap = this.rules.fences.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'code', - lang: cap[2], - text: cap[3] - }); - continue; - } +/** + * is.element + * Test if `value` is an html element. + * + * @param {Mixed} value value to test + * @return {Boolean} true if `value` is an HTML Element, false otherwise + * @api public + */ - // heading - if (cap = this.rules.heading.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'heading', - depth: cap[1].length, - text: cap[2] - }); - continue; - } +is.element = function (value) { + return value !== undefined + && typeof HTMLElement !== 'undefined' + && value instanceof HTMLElement + && value.nodeType === 1; +}; - // table no leading pipe (gfm) - if (top && (cap = this.rules.nptable.exec(src))) { - src = src.substring(cap[0].length); +/** + * Test error. + */ - item = { - type: 'table', - header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */), - align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), - cells: cap[3].replace(/\n$/, '').split('\n') - }; +/** + * is.error + * Test if `value` is an error object. + * + * @param {Mixed} value value to test + * @return {Boolean} true if `value` is an error object, false otherwise + * @api public + */ - for (i = 0; i < item.align.length; i++) { - if (/^ *-+: *$/.test(item.align[i])) { - item.align[i] = 'right'; - } else if (/^ *:-+: *$/.test(item.align[i])) { - item.align[i] = 'center'; - } else if (/^ *:-+ *$/.test(item.align[i])) { - item.align[i] = 'left'; - } else { - item.align[i] = null; - } - } +is.error = function (value) { + return '[object Error]' === toString.call(value); +}; - for (i = 0; i < item.cells.length; i++) { - item.cells[i] = item.cells[i].split(/ *\| */); - } +/** + * Test function. + */ - this.tokens.push(item); +/** + * is.fn / is.function (deprecated) + * Test if `value` is a function. + * + * @param {Mixed} value value to test + * @return {Boolean} true if `value` is a function, false otherwise + * @api public + */ - continue; - } +is.fn = is['function'] = function (value) { + var isAlert = typeof window !== 'undefined' && value === window.alert; + return isAlert || '[object Function]' === toString.call(value); +}; - // lheading - if (cap = this.rules.lheading.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'heading', - depth: cap[2] === '=' ? 1 : 2, - text: cap[1] - }); - continue; - } +/** + * Test number. + */ - // hr - if (cap = this.rules.hr.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'hr' - }); - continue; - } +/** + * is.number + * Test if `value` is a number. + * + * @param {Mixed} value value to test + * @return {Boolean} true if `value` is a number, false otherwise + * @api public + */ - // blockquote - if (cap = this.rules.blockquote.exec(src)) { - src = src.substring(cap[0].length); +is.number = function (value) { + return '[object Number]' === toString.call(value); +}; - this.tokens.push({ - type: 'blockquote_start' - }); +/** + * is.infinite + * Test if `value` is positive or negative infinity. + * + * @param {Mixed} value value to test + * @return {Boolean} true if `value` is positive or negative Infinity, false otherwise + * @api public + */ +is.infinite = function (value) { + return value === Infinity || value === -Infinity; +}; - cap = cap[0].replace(/^ *> ?/gm, ''); +/** + * is.decimal + * Test if `value` is a decimal number. + * + * @param {Mixed} value value to test + * @return {Boolean} true if `value` is a decimal number, false otherwise + * @api public + */ - // Pass `top` to keep the current - // "toplevel" state. This is exactly - // how markdown.pl works. - this.token(cap, top); +is.decimal = function (value) { + return is.number(value) && !isActualNaN(value) && value % 1 !== 0; +}; - this.tokens.push({ - type: 'blockquote_end' - }); +/** + * is.divisibleBy + * Test if `value` is divisible by `n`. + * + * @param {Number} value value to test + * @param {Number} n dividend + * @return {Boolean} true if `value` is divisible by `n`, false otherwise + * @api public + */ - continue; - } +is.divisibleBy = function (value, n) { + var isDividendInfinite = is.infinite(value); + var isDivisorInfinite = is.infinite(n); + var isNonZeroNumber = is.number(value) && !isActualNaN(value) && is.number(n) && !isActualNaN(n) && n !== 0; + return isDividendInfinite || isDivisorInfinite || (isNonZeroNumber && value % n === 0); +}; - // list - if (cap = this.rules.list.exec(src)) { - src = src.substring(cap[0].length); - bull = cap[2]; +/** + * is.int + * Test if `value` is an integer. + * + * @param value to test + * @return {Boolean} true if `value` is an integer, false otherwise + * @api public + */ - this.tokens.push({ - type: 'list_start', - ordered: bull.length > 1 - }); +is.int = function (value) { + return is.number(value) && !isActualNaN(value) && value % 1 === 0; +}; - // Get each top-level item. - cap = cap[0].match(this.rules.item); +/** + * is.maximum + * Test if `value` is greater than 'others' values. + * + * @param {Number} value value to test + * @param {Array} others values to compare with + * @return {Boolean} true if `value` is greater than `others` values + * @api public + */ - next = false; - l = cap.length; - i = 0; +is.maximum = function (value, others) { + if (isActualNaN(value)) { + throw new TypeError('NaN is not a valid value'); + } else if (!is.arraylike(others)) { + throw new TypeError('second argument must be array-like'); + } + var len = others.length; - for (; i < l; i++) { - item = cap[i]; - - // Remove the list item's bullet - // so it is seen as the next token. - space = item.length; - item = item.replace(/^ *([*+-]|\d+\.) +/, ''); - - // Outdent whatever the - // list item contains. Hacky. - if (~item.indexOf('\n ')) { - space -= item.length; - item = !this.options.pedantic - ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '') - : item.replace(/^ {1,4}/gm, ''); - } - - // Determine whether the next list item belongs here. - // Backpedal if it does not belong in this list. - if (this.options.smartLists && i !== l - 1) { - b = block.bullet.exec(cap[i+1])[0]; - if (bull !== b && !(bull.length > 1 && b.length > 1)) { - src = cap.slice(i + 1).join('\n') + src; - i = l - 1; - } - } - - // Determine whether item is loose or not. - // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/ - // for discount behavior. - loose = next || /\n\n(?!\s*$)/.test(item); - if (i !== l - 1) { - next = item[item.length-1] === '\n'; - if (!loose) loose = next; - } - - this.tokens.push({ - type: loose - ? 'loose_item_start' - : 'list_item_start' - }); - - // Recurse. - this.token(item, false); - - this.tokens.push({ - type: 'list_item_end' - }); - } - - this.tokens.push({ - type: 'list_end' - }); - - continue; - } - - // html - if (cap = this.rules.html.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: this.options.sanitize - ? 'paragraph' - : 'html', - pre: cap[1] === 'pre' || cap[1] === 'script', - text: cap[0] - }); - continue; - } - - // def - if (top && (cap = this.rules.def.exec(src))) { - src = src.substring(cap[0].length); - this.tokens.links[cap[1].toLowerCase()] = { - href: cap[2], - title: cap[3] - }; - continue; + while (--len >= 0) { + if (value < others[len]) { + return false; } + } - // table (gfm) - if (top && (cap = this.rules.table.exec(src))) { - src = src.substring(cap[0].length); - - item = { - type: 'table', - header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */), - align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), - cells: cap[3].replace(/(?: *\| *)?\n$/, '').split('\n') - }; - - for (i = 0; i < item.align.length; i++) { - if (/^ *-+: *$/.test(item.align[i])) { - item.align[i] = 'right'; - } else if (/^ *:-+: *$/.test(item.align[i])) { - item.align[i] = 'center'; - } else if (/^ *:-+ *$/.test(item.align[i])) { - item.align[i] = 'left'; - } else { - item.align[i] = null; - } - } - - for (i = 0; i < item.cells.length; i++) { - item.cells[i] = item.cells[i] - .replace(/^ *\| *| *\| *$/g, '') - .split(/ *\| */); - } - - this.tokens.push(item); - - continue; - } + return true; +}; - // top-level paragraph - if (top && (cap = this.rules.paragraph.exec(src))) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'paragraph', - text: cap[1][cap[1].length-1] === '\n' - ? cap[1].slice(0, -1) - : cap[1] - }); - continue; - } +/** + * is.minimum + * Test if `value` is less than `others` values. + * + * @param {Number} value value to test + * @param {Array} others values to compare with + * @return {Boolean} true if `value` is less than `others` values + * @api public + */ - // text - if (cap = this.rules.text.exec(src)) { - // Top-level should never reach here. - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'text', - text: cap[0] - }); - continue; - } +is.minimum = function (value, others) { + if (isActualNaN(value)) { + throw new TypeError('NaN is not a valid value'); + } else if (!is.arraylike(others)) { + throw new TypeError('second argument must be array-like'); + } + var len = others.length; - if (src) { - throw new - Error('Infinite loop on byte: ' + src.charCodeAt(0)); + while (--len >= 0) { + if (value > others[len]) { + return false; } } - return this.tokens; + return true; }; /** - * Inline-Level Grammar + * is.nan + * Test if `value` is not a number. + * + * @param {Mixed} value value to test + * @return {Boolean} true if `value` is not a number, false otherwise + * @api public */ -var inline = { - escape: /^\\([\\`*{}\[\]()#+\-.!_>])/, - autolink: /^<([^ >]+(@|:\/)[^ >]+)>/, - url: noop, - tag: /^|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/, - link: /^!?\[(inside)\]\(href\)/, - reflink: /^!?\[(inside)\]\s*\[([^\]]*)\]/, - nolink: /^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/, - strong: /^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/, - em: /^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/, - code: /^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/, - br: /^ {2,}\n(?!\s*$)/, - del: noop, - text: /^[\s\S]+?(?=[\\?(?:\s+['"]([\s\S]*?)['"])?\s*/; - -inline.link = replace(inline.link) - ('inside', inline._inside) - ('href', inline._href) - (); - -inline.reflink = replace(inline.reflink) - ('inside', inline._inside) - (); - /** - * Normal Inline Grammar + * is.even + * Test if `value` is an even number. + * + * @param {Number} value value to test + * @return {Boolean} true if `value` is an even number, false otherwise + * @api public */ -inline.normal = merge({}, inline); +is.even = function (value) { + return is.infinite(value) || (is.number(value) && value === value && value % 2 === 0); +}; /** - * Pedantic Inline Grammar + * is.odd + * Test if `value` is an odd number. + * + * @param {Number} value value to test + * @return {Boolean} true if `value` is an odd number, false otherwise + * @api public */ -inline.pedantic = merge({}, inline.normal, { - strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/, - em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/ -}); +is.odd = function (value) { + return is.infinite(value) || (is.number(value) && value === value && value % 2 !== 0); +}; /** - * GFM Inline Grammar + * is.ge + * Test if `value` is greater than or equal to `other`. + * + * @param {Number} value value to test + * @param {Number} other value to compare with + * @return {Boolean} + * @api public */ -inline.gfm = merge({}, inline.normal, { - escape: replace(inline.escape)('])', '~|])')(), - url: /^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/, - del: /^~~(?=\S)([\s\S]*?\S)~~/, - text: replace(inline.text) - (']|', '~]|') - ('|', '|https?://|') - () -}); +is.ge = function (value, other) { + if (isActualNaN(value) || isActualNaN(other)) { + throw new TypeError('NaN is not a valid value'); + } + return !is.infinite(value) && !is.infinite(other) && value >= other; +}; /** - * GFM + Line Breaks Inline Grammar + * is.gt + * Test if `value` is greater than `other`. + * + * @param {Number} value value to test + * @param {Number} other value to compare with + * @return {Boolean} + * @api public */ -inline.breaks = merge({}, inline.gfm, { - br: replace(inline.br)('{2,}', '*')(), - text: replace(inline.gfm.text)('{2,}', '*')() -}); +is.gt = function (value, other) { + if (isActualNaN(value) || isActualNaN(other)) { + throw new TypeError('NaN is not a valid value'); + } + return !is.infinite(value) && !is.infinite(other) && value > other; +}; /** - * Inline Lexer & Compiler + * is.le + * Test if `value` is less than or equal to `other`. + * + * @param {Number} value value to test + * @param {Number} other value to compare with + * @return {Boolean} if 'value' is less than or equal to 'other' + * @api public */ -function InlineLexer(links, options) { - this.options = options || marked.defaults; - this.links = links; - this.rules = inline.normal; - - if (!this.links) { - throw new - Error('Tokens array requires a `links` property.'); +is.le = function (value, other) { + if (isActualNaN(value) || isActualNaN(other)) { + throw new TypeError('NaN is not a valid value'); } + return !is.infinite(value) && !is.infinite(other) && value <= other; +}; - if (this.options.gfm) { - if (this.options.breaks) { - this.rules = inline.breaks; - } else { - this.rules = inline.gfm; - } - } else if (this.options.pedantic) { - this.rules = inline.pedantic; +/** + * is.lt + * Test if `value` is less than `other`. + * + * @param {Number} value value to test + * @param {Number} other value to compare with + * @return {Boolean} if `value` is less than `other` + * @api public + */ + +is.lt = function (value, other) { + if (isActualNaN(value) || isActualNaN(other)) { + throw new TypeError('NaN is not a valid value'); } -} + return !is.infinite(value) && !is.infinite(other) && value < other; +}; /** - * Expose Inline Rules + * is.within + * Test if `value` is within `start` and `finish`. + * + * @param {Number} value value to test + * @param {Number} start lower bound + * @param {Number} finish upper bound + * @return {Boolean} true if 'value' is is within 'start' and 'finish' + * @api public */ +is.within = function (value, start, finish) { + if (isActualNaN(value) || isActualNaN(start) || isActualNaN(finish)) { + throw new TypeError('NaN is not a valid value'); + } else if (!is.number(value) || !is.number(start) || !is.number(finish)) { + throw new TypeError('all arguments must be numbers'); + } + var isAnyInfinite = is.infinite(value) || is.infinite(start) || is.infinite(finish); + return isAnyInfinite || (value >= start && value <= finish); +}; -InlineLexer.rules = inline; +/** + * Test object. + */ /** - * Static Lexing/Compiling Method + * is.object + * Test if `value` is an object. + * + * @param {Mixed} value value to test + * @return {Boolean} true if `value` is an object, false otherwise + * @api public */ -InlineLexer.output = function(src, links, options) { - var inline = new InlineLexer(links, options); - return inline.output(src); +is.object = function (value) { + return value && '[object Object]' === toString.call(value); }; /** - * Lexing/Compiling + * is.hash + * Test if `value` is a hash - a plain object literal. + * + * @param {Mixed} value value to test + * @return {Boolean} true if `value` is a hash, false otherwise + * @api public */ -InlineLexer.prototype.output = function(src) { - var out = '' - , link - , text - , href - , cap; +is.hash = function (value) { + return is.object(value) && value.constructor === Object && !value.nodeType && !value.setInterval; +}; - while (src) { - // escape - if (cap = this.rules.escape.exec(src)) { - src = src.substring(cap[0].length); - out += cap[1]; - continue; - } +/** + * Test regexp. + */ - // autolink - if (cap = this.rules.autolink.exec(src)) { - src = src.substring(cap[0].length); - if (cap[2] === '@') { - text = cap[1][6] === ':' - ? this.mangle(cap[1].substring(7)) - : this.mangle(cap[1]); - href = this.mangle('mailto:') + text; - } else { - text = escape(cap[1]); - href = text; - } - out += '' - + text - + ''; - continue; - } +/** + * is.regexp + * Test if `value` is a regular expression. + * + * @param {Mixed} value value to test + * @return {Boolean} true if `value` is a regexp, false otherwise + * @api public + */ - // url (gfm) - if (cap = this.rules.url.exec(src)) { - src = src.substring(cap[0].length); - text = escape(cap[1]); - href = text; - out += '' - + text - + ''; - continue; - } +is.regexp = function (value) { + return '[object RegExp]' === toString.call(value); +}; - // tag - if (cap = this.rules.tag.exec(src)) { - src = src.substring(cap[0].length); - out += this.options.sanitize - ? escape(cap[0]) - : cap[0]; - continue; - } +/** + * Test string. + */ - // link - if (cap = this.rules.link.exec(src)) { - src = src.substring(cap[0].length); - out += this.outputLink(cap, { - href: cap[2], - title: cap[3] - }); - continue; - } +/** + * is.string + * Test if `value` is a string. + * + * @param {Mixed} value value to test + * @return {Boolean} true if 'value' is a string, false otherwise + * @api public + */ - // reflink, nolink - if ((cap = this.rules.reflink.exec(src)) - || (cap = this.rules.nolink.exec(src))) { - src = src.substring(cap[0].length); - link = (cap[2] || cap[1]).replace(/\s+/g, ' '); - link = this.links[link.toLowerCase()]; - if (!link || !link.href) { - out += cap[0][0]; - src = cap[0].substring(1) + src; - continue; - } - out += this.outputLink(cap, link); - continue; - } +is.string = function (value) { + return '[object String]' === toString.call(value); +}; - // strong - if (cap = this.rules.strong.exec(src)) { - src = src.substring(cap[0].length); - out += '' - + this.output(cap[2] || cap[1]) - + ''; - continue; - } - // em - if (cap = this.rules.em.exec(src)) { - src = src.substring(cap[0].length); - out += '' - + this.output(cap[2] || cap[1]) - + ''; - continue; - } +},{}],10:[function(require,module,exports){ - // code - if (cap = this.rules.code.exec(src)) { - src = src.substring(cap[0].length); - out += '' - + escape(cap[2], true) - + ''; - continue; - } +var hasOwn = Object.prototype.hasOwnProperty; +var toString = Object.prototype.toString; - // br - if (cap = this.rules.br.exec(src)) { - src = src.substring(cap[0].length); - out += '
'; - continue; +module.exports = function forEach (obj, fn, ctx) { + if (toString.call(fn) !== '[object Function]') { + throw new TypeError('iterator must be a function'); } - - // del (gfm) - if (cap = this.rules.del.exec(src)) { - src = src.substring(cap[0].length); - out += '' - + this.output(cap[1]) - + ''; - continue; + var l = obj.length; + if (l === +l) { + for (var i = 0; i < l; i++) { + fn.call(ctx, obj[i], i, obj); + } + } else { + for (var k in obj) { + if (hasOwn.call(obj, k)) { + fn.call(ctx, obj[k], k, obj); + } + } } +}; - // text - if (cap = this.rules.text.exec(src)) { - src = src.substring(cap[0].length); - out += escape(cap[0]); - continue; - } - - if (src) { - throw new - Error('Infinite loop on byte: ' + src.charCodeAt(0)); - } - } - - return out; -}; - -/** - * Compile Link - */ -InlineLexer.prototype.outputLink = function(cap, link) { - if (cap[0][0] !== '!') { - return '' - + this.output(cap[1]) - + ''; - } else { - return ''
-      + escape(cap[1])
-      + ''; - } -}; +},{}]},{},[1])(1) +}); +; +/* + (c) 2015, Vladimir Agafonkin + RBush, a JavaScript library for high-performance 2D spatial indexing of points and rectangles. + https://github.com/mourner/rbush +*/ -/** - * Smartypants Transformations - */ +(function () { +'use strict'; -InlineLexer.prototype.smartypants = function(text) { - if (!this.options.smartypants) return text; - return text - .replace(/--/g, '—') - .replace(/'([^']*)'/g, '‘$1’') - .replace(/"([^"]*)"/g, '“$1”') - .replace(/\.{3}/g, '…'); -}; +function rbush(maxEntries, format) { -/** - * Mangle Links - */ + // jshint newcap: false, validthis: true + if (!(this instanceof rbush)) return new rbush(maxEntries, format); -InlineLexer.prototype.mangle = function(text) { - var out = '' - , l = text.length - , i = 0 - , ch; + // max entries in a node is 9 by default; min node fill is 40% for best performance + this._maxEntries = Math.max(4, maxEntries || 9); + this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4)); - for (; i < l; i++) { - ch = text.charCodeAt(i); - if (Math.random() > 0.5) { - ch = 'x' + ch.toString(16); + if (format) { + this._initFormat(format); } - out += '&#' + ch + ';'; - } - - return out; -}; - -/** - * Parsing & Compiling - */ -function Parser(options) { - this.tokens = []; - this.token = null; - this.options = options || marked.defaults; + this.clear(); } -/** - * Static Parse Method - */ +rbush.prototype = { -Parser.parse = function(src, options) { - var parser = new Parser(options); - return parser.parse(src); -}; + all: function () { + return this._all(this.data, []); + }, -/** - * Parse Loop - */ + search: function (bbox) { -Parser.prototype.parse = function(src) { - this.inline = new InlineLexer(src.links, this.options); - this.tokens = src.reverse(); + var node = this.data, + result = [], + toBBox = this.toBBox; - var out = ''; - while (this.next()) { - out += this.tok(); - } + if (!intersects(bbox, node.bbox)) return result; - return out; -}; + var nodesToSearch = [], + i, len, child, childBBox; -/** - * Next Token - */ + while (node) { + for (i = 0, len = node.children.length; i < len; i++) { -Parser.prototype.next = function() { - return this.token = this.tokens.pop(); -}; + child = node.children[i]; + childBBox = node.leaf ? toBBox(child) : child.bbox; -/** - * Preview Next Token - */ + if (intersects(bbox, childBBox)) { + if (node.leaf) result.push(child); + else if (contains(bbox, childBBox)) this._all(child, result); + else nodesToSearch.push(child); + } + } + node = nodesToSearch.pop(); + } -Parser.prototype.peek = function() { - return this.tokens[this.tokens.length-1] || 0; -}; + return result; + }, -/** - * Parse Text Tokens - */ + collides: function (bbox) { -Parser.prototype.parseText = function() { - var body = this.token.text; + var node = this.data, + toBBox = this.toBBox; - while (this.peek().type === 'text') { - body += '\n' + this.next().text; - } + if (!intersects(bbox, node.bbox)) return false; - return this.inline.output(body); -}; + var nodesToSearch = [], + i, len, child, childBBox; -/** - * Parse Current Token - */ + while (node) { + for (i = 0, len = node.children.length; i < len; i++) { -Parser.prototype.tok = function() { - switch (this.token.type) { - case 'space': { - return ''; - } - case 'hr': { - return '
\n'; - } - case 'heading': { - return '' - + this.inline.output(this.token.text) - + '\n'; - } - case 'code': { - if (this.options.highlight) { - var code = this.options.highlight(this.token.text, this.token.lang); - if (code != null && code !== this.token.text) { - this.token.escaped = true; - this.token.text = code; - } - } + child = node.children[i]; + childBBox = node.leaf ? toBBox(child) : child.bbox; - if (!this.token.escaped) { - this.token.text = escape(this.token.text, true); - } + if (intersects(bbox, childBBox)) { + if (node.leaf || contains(bbox, childBBox)) return true; + nodesToSearch.push(child); + } + } + node = nodesToSearch.pop(); + } - return '
'
-        + this.token.text
-        + '
\n'; - } - case 'table': { - var body = '' - , heading - , i - , row - , cell - , j; + return false; + }, - // header - body += '\n\n'; - for (i = 0; i < this.token.header.length; i++) { - heading = this.inline.output(this.token.header[i]); - body += this.token.align[i] - ? '' + heading + '\n' - : '' + heading + '\n'; - } - body += '\n\n'; + load: function (data) { + if (!(data && data.length)) return this; - // body - body += '\n' - for (i = 0; i < this.token.cells.length; i++) { - row = this.token.cells[i]; - body += '\n'; - for (j = 0; j < row.length; j++) { - cell = this.inline.output(row[j]); - body += this.token.align[j] - ? '' + cell + '\n' - : '' + cell + '\n'; + if (data.length < this._minEntries) { + for (var i = 0, len = data.length; i < len; i++) { + this.insert(data[i]); + } + return this; } - body += '\n'; - } - body += '\n'; - return '\n' - + body - + '
\n'; - } - case 'blockquote_start': { - var body = ''; + // recursively build the tree with the given data from stratch using OMT algorithm + var node = this._build(data.slice(), 0, data.length - 1, 0); - while (this.next().type !== 'blockquote_end') { - body += this.tok(); - } + if (!this.data.children.length) { + // save as is if tree is empty + this.data = node; - return '
\n' - + body - + '
\n'; - } - case 'list_start': { - var type = this.token.ordered ? 'ol' : 'ul' - , body = ''; - - while (this.next().type !== 'list_end') { - body += this.tok(); - } + } else if (this.data.height === node.height) { + // split root if trees have the same height + this._splitRoot(this.data, node); - return '<' - + type - + '>\n' - + body - + '\n'; - } - case 'list_item_start': { - var body = ''; + } else { + if (this.data.height < node.height) { + // swap trees if inserted one is bigger + var tmpNode = this.data; + this.data = node; + node = tmpNode; + } - while (this.next().type !== 'list_item_end') { - body += this.token.type === 'text' - ? this.parseText() - : this.tok(); - } + // insert the small tree into the large tree at appropriate level + this._insert(node, this.data.height - node.height - 1, true); + } - return '
  • ' - + body - + '
  • \n'; - } - case 'loose_item_start': { - var body = ''; + return this; + }, - while (this.next().type !== 'list_item_end') { - body += this.tok(); - } + insert: function (item) { + if (item) this._insert(item, this.data.height - 1); + return this; + }, - return '
  • ' - + body - + '
  • \n'; - } - case 'html': { - return !this.token.pre && !this.options.pedantic - ? this.inline.output(this.token.text) - : this.token.text; - } - case 'paragraph': { - return '

    ' - + this.inline.output(this.token.text) - + '

    \n'; - } - case 'text': { - return '

    ' - + this.parseText() - + '

    \n'; - } - } -}; + clear: function () { + this.data = { + children: [], + height: 1, + bbox: empty(), + leaf: true + }; + return this; + }, -/** - * Helpers - */ + remove: function (item) { + if (!item) return this; -function escape(html, encode) { - return html - .replace(!encode ? /&(?!#?\w+;)/g : /&/g, '&') - .replace(//g, '>') - .replace(/"/g, '"') - .replace(/'/g, '''); -} + var node = this.data, + bbox = this.toBBox(item), + path = [], + indexes = [], + i, parent, index, goingUp; -function replace(regex, opt) { - regex = regex.source; - opt = opt || ''; - return function self(name, val) { - if (!name) return new RegExp(regex, opt); - val = val.source || val; - val = val.replace(/(^|[^\[])\^/g, '$1'); - regex = regex.replace(name, val); - return self; - }; -} + // depth-first iterative tree traversal + while (node || path.length) { -function noop() {} -noop.exec = noop; + if (!node) { // go up + node = path.pop(); + parent = path[path.length - 1]; + i = indexes.pop(); + goingUp = true; + } -function merge(obj) { - var i = 1 - , target - , key; + if (node.leaf) { // check current node + index = node.children.indexOf(item); - for (; i < arguments.length; i++) { - target = arguments[i]; - for (key in target) { - if (Object.prototype.hasOwnProperty.call(target, key)) { - obj[key] = target[key]; - } - } - } + if (index !== -1) { + // item found, remove the item and condense tree upwards + node.children.splice(index, 1); + path.push(node); + this._condense(path); + return this; + } + } - return obj; -} + if (!goingUp && !node.leaf && contains(node.bbox, bbox)) { // go down + path.push(node); + indexes.push(i); + i = 0; + parent = node; + node = node.children[0]; -/** - * Marked - */ + } else if (parent) { // go right + i++; + node = parent.children[i]; + goingUp = false; -function marked(src, opt, callback) { - if (callback || typeof opt === 'function') { - if (!callback) { - callback = opt; - opt = null; - } + } else node = null; // nothing found + } - if (opt) opt = merge({}, marked.defaults, opt); + return this; + }, - var tokens = Lexer.lex(tokens, opt) - , highlight = opt.highlight - , pending = 0 - , l = tokens.length - , i = 0; + toBBox: function (item) { return item; }, - if (!highlight || highlight.length < 3) { - return callback(null, Parser.parse(tokens, opt)); - } + compareMinX: function (a, b) { return a[0] - b[0]; }, + compareMinY: function (a, b) { return a[1] - b[1]; }, - var done = function() { - delete opt.highlight; - var out = Parser.parse(tokens, opt); - opt.highlight = highlight; - return callback(null, out); - }; + toJSON: function () { return this.data; }, - for (; i < l; i++) { - (function(token) { - if (token.type !== 'code') return; - pending++; - return highlight(token.text, token.lang, function(err, code) { - if (code == null || code === token.text) { - return --pending || done(); - } - token.text = code; - token.escaped = true; - --pending || done(); - }); - })(tokens[i]); - } + fromJSON: function (data) { + this.data = data; + return this; + }, - return; - } - try { - if (opt) opt = merge({}, marked.defaults, opt); - return Parser.parse(Lexer.lex(src, opt), opt); - } catch (e) { - e.message += '\nPlease report this to https://github.com/chjj/marked.'; - if ((opt || marked.defaults).silent) { - return '

    An error occured:

    '
    -        + escape(e.message + '', true)
    -        + '
    '; - } - throw e; - } -} + _all: function (node, result) { + var nodesToSearch = []; + while (node) { + if (node.leaf) result.push.apply(result, node.children); + else nodesToSearch.push.apply(nodesToSearch, node.children); -/** - * Options - */ + node = nodesToSearch.pop(); + } + return result; + }, -marked.options = -marked.setOptions = function(opt) { - merge(marked.defaults, opt); - return marked; -}; + _build: function (items, left, right, height) { -marked.defaults = { - gfm: true, - tables: true, - breaks: false, - pedantic: false, - sanitize: false, - smartLists: false, - silent: false, - highlight: null, - langPrefix: 'lang-' -}; + var N = right - left + 1, + M = this._maxEntries, + node; -/** - * Expose - */ + if (N <= M) { + // reached leaf level; return leaf + node = { + children: items.slice(left, right + 1), + height: 1, + bbox: null, + leaf: true + }; + calcBBox(node, this.toBBox); + return node; + } -marked.Parser = Parser; -marked.parser = Parser.parse; + if (!height) { + // target height of the bulk-loaded tree + height = Math.ceil(Math.log(N) / Math.log(M)); -marked.Lexer = Lexer; -marked.lexer = Lexer.lex; - -marked.InlineLexer = InlineLexer; -marked.inlineLexer = InlineLexer.output; - -marked.parse = marked; - -if (typeof exports === 'object') { - module.exports = marked; -} else if (typeof define === 'function' && define.amd) { - define(function() { return marked; }); -} else { - this.marked = marked; -} + // target number of root entries to maximize storage utilization + M = Math.ceil(N / Math.pow(M, height - 1)); + } -}).call(function() { - return this || (typeof window !== 'undefined' ? window : global); -}()); -/* jshint ignore:start */ -(function () { -'use strict'; -window.iD = function () { - window.locale.en = iD.data.en; - window.locale.current('en'); + node = { + children: [], + height: height, + bbox: null, + leaf: false + }; - var context = {}, - storage; + // split the items into M mostly square tiles - // https://github.com/openstreetmap/iD/issues/772 - // http://mathiasbynens.be/notes/localstorage-pattern#comment-9 - try { storage = localStorage; } catch (e) {} - storage = storage || (function() { - var s = {}; - return { - getItem: function(k) { return s[k]; }, - setItem: function(k, v) { s[k] = v; }, - removeItem: function(k) { delete s[k]; } - }; - })(); + var N2 = Math.ceil(N / M), + N1 = N2 * Math.ceil(Math.sqrt(M)), + i, j, right2, right3; - context.storage = function(k, v) { - try { - if (arguments.length === 1) return storage.getItem(k); - else if (v === null) storage.removeItem(k); - else storage.setItem(k, v); - } catch(e) { - // localstorage quota exceeded - /* jshint devel:true */ - if (typeof console !== 'undefined') console.error('localStorage quota exceeded'); - /* jshint devel:false */ - } - }; + multiSelect(items, left, right, N1, this.compareMinX); - var history = iD.History(context), - dispatch = d3.dispatch('enter', 'exit'), - mode, - container, - ui = iD.ui(context), - connection = iD.Connection(), - locale = iD.detect().locale, - localePath; + for (i = left; i <= right; i += N1) { - if (locale && iD.data.locales.indexOf(locale) === -1) { - locale = locale.split('-')[0]; - } + right2 = Math.min(i + N1 - 1, right); - connection.on('load.context', function loadContext(err, result) { - history.merge(result.data, result.extent); - }); + multiSelect(items, i, right2, N2, this.compareMinY); - context.preauth = function(options) { - connection.switch(options); - return context; - }; + for (j = i; j <= right2; j += N2) { - context.locale = function(_, path) { - locale = _; - localePath = path; - return context; - }; + right3 = Math.min(j + N2 - 1, right2); - context.loadLocale = function(cb) { - if (locale && locale !== 'en' && iD.data.locales.indexOf(locale) !== -1) { - localePath = localePath || context.assetPath() + 'locales/' + locale + '.json'; - d3.json(localePath, function(err, result) { - window.locale[locale] = result; - window.locale.current(locale); - cb(); - }); - } else { - cb(); + // pack each entry recursively + node.children.push(this._build(items, j, right3, height - 1)); + } } - }; - /* Straight accessors. Avoid using these if you can. */ - context.ui = function() { return ui; }; - context.connection = function() { return connection; }; - context.history = function() { return history; }; + calcBBox(node, this.toBBox); - /* History */ - context.graph = history.graph; - context.changes = history.changes; - context.intersects = history.intersects; + return node; + }, - var inIntro = false; + _chooseSubtree: function (bbox, node, level, path) { - context.inIntro = function(_) { - if (!arguments.length) return inIntro; - inIntro = _; - return context; - }; + var i, len, child, targetNode, area, enlargement, minArea, minEnlargement; - context.save = function() { - if (inIntro) return; - history.save(); - if (history.hasChanges()) return t('save.unsaved_changes'); - }; + while (true) { + path.push(node); - context.flush = function() { - connection.flush(); - history.reset(); - return context; - }; + if (node.leaf || path.length - 1 === level) break; - // Debounce save, since it's a synchronous localStorage write, - // and history changes can happen frequently (e.g. when dragging). - var debouncedSave = _.debounce(context.save, 350); - function withDebouncedSave(fn) { - return function() { - var result = fn.apply(history, arguments); - debouncedSave(); - return result; - }; - } + minArea = minEnlargement = Infinity; - context.perform = withDebouncedSave(history.perform); - context.replace = withDebouncedSave(history.replace); - context.pop = withDebouncedSave(history.pop); - context.undo = withDebouncedSave(history.undo); - context.redo = withDebouncedSave(history.redo); + for (i = 0, len = node.children.length; i < len; i++) { + child = node.children[i]; + area = bboxArea(child.bbox); + enlargement = enlargedArea(bbox, child.bbox) - area; - /* Graph */ - context.hasEntity = function(id) { - return history.graph().hasEntity(id); - }; + // choose entry with the least area enlargement + if (enlargement < minEnlargement) { + minEnlargement = enlargement; + minArea = area < minArea ? area : minArea; + targetNode = child; - context.entity = function(id) { - return history.graph().entity(id); - }; + } else if (enlargement === minEnlargement) { + // otherwise choose one with the smallest area + if (area < minArea) { + minArea = area; + targetNode = child; + } + } + } - context.childNodes = function(way) { - return history.graph().childNodes(way); - }; + node = targetNode; + } - context.geometry = function(id) { - return context.entity(id).geometry(history.graph()); - }; + return node; + }, - /* Modes */ - context.enter = function(newMode) { - if (mode) { - mode.exit(); - dispatch.exit(mode); - } + _insert: function (item, level, isNode) { - mode = newMode; - mode.enter(); - dispatch.enter(mode); - }; + var toBBox = this.toBBox, + bbox = isNode ? item.bbox : toBBox(item), + insertPath = []; - context.mode = function() { - return mode; - }; + // find the best node for accommodating the item, saving all nodes along the path too + var node = this._chooseSubtree(bbox, this.data, level, insertPath); - context.selectedIDs = function() { - if (mode && mode.selectedIDs) { - return mode.selectedIDs(); - } else { - return []; - } - }; + // put the item into the node + node.children.push(item); + extend(node.bbox, bbox); - context.loadEntity = function(id, zoomTo) { - if (zoomTo !== false) { - connection.loadEntity(id, function(error, entity) { - if (entity) { - map.zoomTo(entity); - } - }); + // split on node overflow; propagate upwards if necessary + while (level >= 0) { + if (insertPath[level].children.length > this._maxEntries) { + this._split(insertPath, level); + level--; + } else break; } - map.on('drawn.loadEntity', function() { - if (!context.hasEntity(id)) return; - map.on('drawn.loadEntity', null); - context.on('enter.loadEntity', null); - context.enter(iD.modes.Select(context, [id])); - }); + // adjust bboxes along the insertion path + this._adjustParentBBoxes(bbox, insertPath, level); + }, - context.on('enter.loadEntity', function() { - if (mode.id !== 'browse') { - map.on('drawn.loadEntity', null); - context.on('enter.loadEntity', null); - } - }); - }; + // split overflowed node into two + _split: function (insertPath, level) { - context.editable = function() { - return map.editable() && mode && mode.id !== 'save'; - }; + var node = insertPath[level], + M = node.children.length, + m = this._minEntries; - /* Behaviors */ - context.install = function(behavior) { - context.surface().call(behavior); - }; + this._chooseSplitAxis(node, m, M); - context.uninstall = function(behavior) { - context.surface().call(behavior.off); - }; + var splitIndex = this._chooseSplitIndex(node, m, M); - /* Projection */ - function rawMercator() { - var project = d3.geo.mercator.raw, - k = 512 / Math.PI, // scale - x = 0, y = 0, // translate - clipExtent = [[0, 0], [0, 0]]; + var newNode = { + children: node.children.splice(splitIndex, node.children.length - splitIndex), + height: node.height, + bbox: null, + leaf: false + }; - function projection(point) { - point = project(point[0] * Math.PI / 180, point[1] * Math.PI / 180); - return [point[0] * k + x, y - point[1] * k]; - } + if (node.leaf) newNode.leaf = true; - projection.invert = function(point) { - point = project.invert((point[0] - x) / k, (y - point[1]) / k); - return point && [point[0] * 180 / Math.PI, point[1] * 180 / Math.PI]; - }; + calcBBox(node, this.toBBox); + calcBBox(newNode, this.toBBox); - projection.scale = function(_) { - if (!arguments.length) return k; - k = +_; - return projection; - }; + if (level) insertPath[level - 1].children.push(newNode); + else this._splitRoot(node, newNode); + }, - projection.translate = function(_) { - if (!arguments.length) return [x, y]; - x = +_[0]; - y = +_[1]; - return projection; + _splitRoot: function (node, newNode) { + // split root node + this.data = { + children: [node, newNode], + height: node.height + 1, + bbox: null, + leaf: false }; + calcBBox(this.data, this.toBBox); + }, - projection.clipExtent = function(_) { - if (!arguments.length) return clipExtent; - clipExtent = _; - return projection; - }; + _chooseSplitIndex: function (node, m, M) { - projection.stream = d3.geo.transform({ - point: function(x, y) { - x = projection([x, y]); - this.stream.point(x[0], x[1]); - } - }).stream; + var i, bbox1, bbox2, overlap, area, minOverlap, minArea, index; - return projection; - } + minOverlap = minArea = Infinity; - context.projection = rawMercator(); + for (i = m; i <= M - m; i++) { + bbox1 = distBBox(node, 0, i, this.toBBox); + bbox2 = distBBox(node, i, M, this.toBBox); - /* Background */ - var background = iD.Background(context); - context.background = function() { return background; }; + overlap = intersectionArea(bbox1, bbox2); + area = bboxArea(bbox1) + bboxArea(bbox2); - /* Map */ - var map = iD.Map(context); - context.map = function() { return map; }; - context.layers = function() { return map.layers; }; - context.surface = function() { return map.surface; }; - context.mouse = map.mouse; - context.extent = map.extent; - context.pan = map.pan; - context.zoomIn = map.zoomIn; - context.zoomOut = map.zoomOut; + // choose distribution with minimum overlap + if (overlap < minOverlap) { + minOverlap = overlap; + index = i; - context.surfaceRect = function() { - // Work around a bug in Firefox. - // http://stackoverflow.com/questions/18153989/ - // https://bugzilla.mozilla.org/show_bug.cgi?id=530985 - return context.surface().node().parentNode.getBoundingClientRect(); - }; + minArea = area < minArea ? area : minArea; - /* Presets */ - var presets = iD.presets() - .load(iD.data.presets); + } else if (overlap === minOverlap) { + // otherwise choose distribution with minimum area + if (area < minArea) { + minArea = area; + index = i; + } + } + } - context.presets = function() { - return presets; - }; + return index; + }, - context.container = function(_) { - if (!arguments.length) return container; - container = _; - container.classed('id-container', true); - return context; - }; + // sorts node children by the best axis for split + _chooseSplitAxis: function (node, m, M) { - var embed = false; - context.embed = function(_) { - if (!arguments.length) return embed; - embed = _; - return context; - }; + var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX, + compareMinY = node.leaf ? this.compareMinY : compareNodeMinY, + xMargin = this._allDistMargin(node, m, M, compareMinX), + yMargin = this._allDistMargin(node, m, M, compareMinY); - var assetPath = ''; - context.assetPath = function(_) { - if (!arguments.length) return assetPath; - assetPath = _; - return context; - }; + // if total distributions margin value is minimal for x, sort by minX, + // otherwise it's already sorted by minY + if (xMargin < yMargin) node.children.sort(compareMinX); + }, - var assetMap = {}; - context.assetMap = function(_) { - if (!arguments.length) return assetMap; - assetMap = _; - return context; - }; + // total margin of all possible split distributions where each node is at least m full + _allDistMargin: function (node, m, M, compare) { - context.imagePath = function(_) { - var asset = 'img/' + _; - return assetMap[asset] || assetPath + asset; - }; + node.children.sort(compare); - return d3.rebind(context, dispatch, 'on'); -}; + var toBBox = this.toBBox, + leftBBox = distBBox(node, 0, m, toBBox), + rightBBox = distBBox(node, M - m, M, toBBox), + margin = bboxMargin(leftBBox) + bboxMargin(rightBBox), + i, child; -iD.version = '1.3.7'; + for (i = m; i < M - m; i++) { + child = node.children[i]; + extend(leftBBox, node.leaf ? toBBox(child) : child.bbox); + margin += bboxMargin(leftBBox); + } -(function() { - var detected = {}; + for (i = M - m - 1; i >= m; i--) { + child = node.children[i]; + extend(rightBBox, node.leaf ? toBBox(child) : child.bbox); + margin += bboxMargin(rightBBox); + } - var ua = navigator.userAgent, - msie = new RegExp('MSIE ([0-9]{1,}[\\.0-9]{0,})'); + return margin; + }, - if (msie.exec(ua) !== null) { - var rv = parseFloat(RegExp.$1); - detected.support = !(rv && rv < 9); - } else { - detected.support = true; - } + _adjustParentBBoxes: function (bbox, path, level) { + // adjust bboxes along the given tree path + for (var i = level; i >= 0; i--) { + extend(path[i].bbox, bbox); + } + }, - // Added due to incomplete svg style support. See #715 - detected.opera = ua.indexOf('Opera') >= 0; + _condense: function (path) { + // go through the path, removing empty nodes and updating bboxes + for (var i = path.length - 1, siblings; i >= 0; i--) { + if (path[i].children.length === 0) { + if (i > 0) { + siblings = path[i - 1].children; + siblings.splice(siblings.indexOf(path[i]), 1); - detected.locale = navigator.language || navigator.userLanguage; + } else this.clear(); - detected.filedrop = (window.FileReader && 'ondrop' in window); + } else calcBBox(path[i], this.toBBox); + } + }, - function nav(x) { - return navigator.userAgent.indexOf(x) !== -1; - } + _initFormat: function (format) { + // data format (minX, minY, maxX, maxY accessors) - if (nav('Win')) detected.os = 'win'; - else if (nav('Mac')) detected.os = 'mac'; - else if (nav('X11')) detected.os = 'linux'; - else if (nav('Linux')) detected.os = 'linux'; - else detected.os = 'win'; + // uses eval-type function compilation instead of just accepting a toBBox function + // because the algorithms are very sensitive to sorting functions performance, + // so they should be dead simple and without inner calls - iD.detect = function() { return detected; }; -})(); -iD.taginfo = function() { - var taginfo = {}, - endpoint = 'https://taginfo.openstreetmap.org/api/4/', - tag_sorts = { - point: 'count_nodes', - vertex: 'count_nodes', - area: 'count_ways', - line: 'count_ways' - }, - tag_filters = { - point: 'nodes', - vertex: 'nodes', - area: 'ways', - line: 'ways' - }; + // jshint evil: true - if (!iD.taginfo.cache) { - iD.taginfo.cache = {}; - } + var compareArr = ['return a', ' - b', ';']; - var cache = iD.taginfo.cache; + this.compareMinX = new Function('a', 'b', compareArr.join(format[0])); + this.compareMinY = new Function('a', 'b', compareArr.join(format[1])); - function sets(parameters, n, o) { - if (parameters.geometry && o[parameters.geometry]) { - parameters[n] = o[parameters.geometry]; - } - return parameters; + this.toBBox = new Function('a', 'return [a' + format.join(', a') + '];'); } +}; - function setFilter(parameters) { - return sets(parameters, 'filter', tag_filters); - } - function setSort(parameters) { - return sets(parameters, 'sortname', tag_sorts); - } +// calculate node's bbox from bboxes of its children +function calcBBox(node, toBBox) { + node.bbox = distBBox(node, 0, node.children.length, toBBox); +} - function clean(parameters) { - return _.omit(parameters, 'geometry', 'debounce'); - } +// min bounding rectangle of node children from k to p-1 +function distBBox(node, k, p, toBBox) { + var bbox = empty(); - function shorten(parameters) { - if (!parameters.query) { - delete parameters.query; - } else { - parameters.query = parameters.query.slice(0, 3); - } - return parameters; + for (var i = k, child; i < p; i++) { + child = node.children[i]; + extend(bbox, node.leaf ? toBBox(child) : child.bbox); } - function popularKeys(parameters) { - var pop_field = 'count_all'; - if (parameters.filter) pop_field = 'count_' + parameters.filter; - return function(d) { return parseFloat(d[pop_field]) > 10000; }; - } + return bbox; +} - function popularValues() { - return function(d) { return parseFloat(d.fraction) > 0.01 || d.in_wiki; }; - } +function empty() { return [Infinity, Infinity, -Infinity, -Infinity]; } - function valKey(d) { return { value: d.key }; } +function extend(a, b) { + a[0] = Math.min(a[0], b[0]); + a[1] = Math.min(a[1], b[1]); + a[2] = Math.max(a[2], b[2]); + a[3] = Math.max(a[3], b[3]); + return a; +} - function valKeyDescription(d) { - return { - value: d.value, - title: d.description - }; +function compareNodeMinX(a, b) { return a.bbox[0] - b.bbox[0]; } +function compareNodeMinY(a, b) { return a.bbox[1] - b.bbox[1]; } + +function bboxArea(a) { return (a[2] - a[0]) * (a[3] - a[1]); } +function bboxMargin(a) { return (a[2] - a[0]) + (a[3] - a[1]); } + +function enlargedArea(a, b) { + return (Math.max(b[2], a[2]) - Math.min(b[0], a[0])) * + (Math.max(b[3], a[3]) - Math.min(b[1], a[1])); +} + +function intersectionArea(a, b) { + var minX = Math.max(a[0], b[0]), + minY = Math.max(a[1], b[1]), + maxX = Math.min(a[2], b[2]), + maxY = Math.min(a[3], b[3]); + + return Math.max(0, maxX - minX) * + Math.max(0, maxY - minY); +} + +function contains(a, b) { + return a[0] <= b[0] && + a[1] <= b[1] && + b[2] <= a[2] && + b[3] <= a[3]; +} + +function intersects(a, b) { + return b[0] <= a[2] && + b[1] <= a[3] && + b[2] >= a[0] && + b[3] >= a[1]; +} + +// sort an array so that items come in groups of n unsorted items, with groups sorted between each other; +// combines selection algorithm with binary divide & conquer approach + +function multiSelect(arr, left, right, n, compare) { + var stack = [left, right], + mid; + + while (stack.length) { + right = stack.pop(); + left = stack.pop(); + + if (right - left <= n) continue; + + mid = left + Math.ceil((right - left) / n / 2) * n; + select(arr, left, right, mid, compare); + + stack.push(left, mid, mid, right); } +} - var debounced = _.debounce(d3.json, 100, true); +// Floyd-Rivest selection algorithm: +// sort an array between left and right (inclusive) so that the smallest k elements come first (unordered) +function select(arr, left, right, k, compare) { + var n, i, z, s, sd, newLeft, newRight, t, j; - function request(url, debounce, callback) { - if (cache[url]) { - callback(null, cache[url]); - } else if (debounce) { - debounced(url, done); - } else { - d3.json(url, done); + while (right > left) { + if (right - left > 600) { + n = right - left + 1; + i = k - left + 1; + z = Math.log(n); + s = 0.5 * Math.exp(2 * z / 3); + sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (i - n / 2 < 0 ? -1 : 1); + newLeft = Math.max(left, Math.floor(k - i * s / n + sd)); + newRight = Math.min(right, Math.floor(k + (n - i) * s / n + sd)); + select(arr, newLeft, newRight, k, compare); } - function done(err, data) { - if (!err) cache[url] = data; - callback(err, data); + t = arr[k]; + i = left; + j = right; + + swap(arr, left, k); + if (compare(arr[right], t) > 0) swap(arr, left, right); + + while (i < j) { + swap(arr, i, j); + i++; + j--; + while (compare(arr[i], t) < 0) i++; + while (compare(arr[j], t) > 0) j--; + } + + if (compare(arr[left], t) === 0) swap(arr, left, j); + else { + j++; + swap(arr, j, right); } + + if (j <= k) left = j + 1; + if (k <= j) right = j - 1; } +} - taginfo.keys = function(parameters, callback) { - var debounce = parameters.debounce; - parameters = clean(shorten(setSort(setFilter(parameters)))); - request(endpoint + 'keys/all?' + - iD.util.qsString(_.extend({ - rp: 10, - sortname: 'count_all', - sortorder: 'desc', - page: 1 - }, parameters)), debounce, function(err, d) { - if (err) return callback(err); - callback(null, d.data.filter(popularKeys(parameters)).map(valKey)); - }); - }; +function swap(arr, i, j) { + var tmp = arr[i]; + arr[i] = arr[j]; + arr[j] = tmp; +} - taginfo.values = function(parameters, callback) { - var debounce = parameters.debounce; - parameters = clean(shorten(setSort(setFilter(parameters)))); - request(endpoint + 'key/values?' + - iD.util.qsString(_.extend({ - rp: 25, - sortname: 'count_all', - sortorder: 'desc', - page: 1 - }, parameters)), debounce, function(err, d) { - if (err) return callback(err); - callback(null, d.data.filter(popularValues()).map(valKeyDescription), parameters); - }); - }; - taginfo.docs = function(parameters, callback) { - var debounce = parameters.debounce; - parameters = clean(setSort(parameters)); +// export as AMD/CommonJS module or global variable +if (typeof define === 'function' && define.amd) define('rbush', function () { return rbush; }); +else if (typeof module !== 'undefined') module.exports = rbush; +else if (typeof self !== 'undefined') self.rbush = rbush; +else window.rbush = rbush; - var path = 'key/wiki_pages?'; - if (parameters.value) path = 'tag/wiki_pages?'; - else if (parameters.rtype) path = 'relation/wiki_pages?'; +})(); +(function(e){if("function"==typeof bootstrap)bootstrap("sexagesimal",e);else if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else if("undefined"!=typeof ses){if(!ses.ok())return;ses.makeSexagesimal=e}else"undefined"!=typeof window?window.sexagesimal=e():global.sexagesimal=e()})(function(){var define,ses,bootstrap,module,exports; +return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= 0 ? 0 : 1], + abs = Math.abs(x), + whole = Math.floor(abs), + fraction = abs - whole, + fractionMinutes = fraction * 60, + minutes = Math.floor(fractionMinutes), + seconds = Math.floor((fractionMinutes - minutes) * 60); + + return whole + '° ' + + (minutes ? minutes + "' " : '') + + (seconds ? seconds + '" ' : '') + dir; +} + +function search(x, dims, r) { + if (!dims) dims = 'NSEW'; + if (typeof x !== 'string') return { val: null, regex: r }; + r = r || /[\s\,]*([\-|\—|\―]?[0-9.]+)°? *(?:([0-9.]+)['’′‘] *)?(?:([0-9.]+)(?:''|"|”|″) *)?([NSEW])?/gi; + var m = r.exec(x); + if (!m) return { val: null, regex: r }; + else if (m[4] && dims.indexOf(m[4]) === -1) return { val: null, regex: r }; + else return { + val: (((m[1]) ? parseFloat(m[1]) : 0) + + ((m[2] ? parseFloat(m[2]) / 60 : 0)) + + ((m[3] ? parseFloat(m[3]) / 3600 : 0))) * + ((m[4] && m[4] === 'S' || m[4] === 'W') ? -1 : 1), + regex: r, + raw: m[0], + dim: m[4] }; +} - return taginfo; -}; -iD.wikipedia = function() { - var wiki = {}, - endpoint = 'https://en.wikipedia.org/w/api.php?'; +function pair(x, dims) { + x = x.trim(); + var one = search(x, dims); + if (one.val === null) return null; + var two = search(x, dims, one.regex); + if (two.val === null) return null; + // null if one/two are not contiguous. + if (one.raw + two.raw !== x) return null; + if (one.dim) return swapdim(one.val, two.val, one.dim); + else return [one.val, two.val]; +} - wiki.search = function(lang, query, callback) { - lang = lang || 'en'; - d3.jsonp(endpoint.replace('en', lang) + - iD.util.qsString({ - action: 'query', - list: 'search', - srlimit: '10', - srinfo: 'suggestion', - format: 'json', - callback: '{callback}', - srsearch: query - }), function(data) { - if (!data.query) return; - callback(query, data.query.search.map(function(d) { - return d.title; - })); - }); - }; +function swapdim(a, b, dim) { + if (dim == 'N' || dim == 'S') return [a, b]; + if (dim == 'W' || dim == 'E') return [b, a]; +} - wiki.suggestions = function(lang, query, callback) { - lang = lang || 'en'; - d3.jsonp(endpoint.replace('en', lang) + - iD.util.qsString({ - action: 'opensearch', - namespace: 0, - suggest: '', - format: 'json', - callback: '{callback}', - search: query - }), function(d) { - callback(d[0], d[1]); - }); - }; +},{}]},{},[1]) +(1) +}); +;toGeoJSON = (function() { + 'use strict'; - wiki.translations = function(lang, title, callback) { - d3.jsonp(endpoint.replace('en', lang) + - iD.util.qsString({ - action: 'query', - prop: 'langlinks', - format: 'json', - callback: '{callback}', - lllimit: 500, - titles: title - }), function(d) { - var list = d.query.pages[Object.keys(d.query.pages)[0]], - translations = {}; - if (list && list.langlinks) { - list.langlinks.forEach(function(d) { - translations[d.lang] = d['*']; - }); - callback(translations); - } - }); - }; - - return wiki; -}; -iD.util = {}; - -iD.util.tagText = function(entity) { - return d3.entries(entity.tags).map(function(e) { - return e.key + '=' + e.value; - }).join(', '); -}; - -iD.util.entitySelector = function(ids) { - return ids.length ? '.' + ids.join(',.') : 'nothing'; -}; - -iD.util.entityOrMemberSelector = function(ids, graph) { - var s = iD.util.entitySelector(ids); - - ids.forEach(function(id) { - var entity = graph.hasEntity(id); - if (entity && entity.type === 'relation') { - entity.members.forEach(function(member) { - s += ',.' + member.id; - }); - } - }); - - return s; -}; - -iD.util.displayName = function(entity) { - var localeName = 'name:' + iD.detect().locale.toLowerCase().split('-')[0]; - return entity.tags[localeName] || entity.tags.name || entity.tags.ref; -}; - -iD.util.stringQs = function(str) { - return str.split('&').reduce(function(obj, pair){ - var parts = pair.split('='); - if (parts.length === 2) { - obj[parts[0]] = (null === parts[1]) ? '' : decodeURIComponent(parts[1]); + var removeSpace = (/\s*/g), + trimSpace = (/^\s*|\s*$/g), + splitSpace = (/\s+/); + // generate a short, numeric hash of a string + function okhash(x) { + if (!x || !x.length) return 0; + for (var i = 0, h = 0; i < x.length; i++) { + h = ((h << 5) - h) + x.charCodeAt(i) | 0; + } return h; + } + // all Y children of X + function get(x, y) { return x.getElementsByTagName(y); } + function attr(x, y) { return x.getAttribute(y); } + function attrf(x, y) { return parseFloat(attr(x, y)); } + // one Y child of X, if any, otherwise null + function get1(x, y) { var n = get(x, y); return n.length ? n[0] : null; } + // https://developer.mozilla.org/en-US/docs/Web/API/Node.normalize + function norm(el) { if (el.normalize) { el.normalize(); } return el; } + // cast array x into numbers + function numarray(x) { + for (var j = 0, o = []; j < x.length; j++) o[j] = parseFloat(x[j]); + return o; + } + function clean(x) { + var o = {}; + for (var i in x) if (x[i]) o[i] = x[i]; + return o; + } + // get the content of a text node, if any + function nodeVal(x) { if (x) {norm(x);} return x && x.firstChild && x.firstChild.nodeValue; } + // get one coordinate from a coordinate array, if any + function coord1(v) { return numarray(v.replace(removeSpace, '').split(',')); } + // get all coordinates from a coordinate array as [[],[]] + function coord(v) { + var coords = v.replace(trimSpace, '').split(splitSpace), + o = []; + for (var i = 0; i < coords.length; i++) { + o.push(coord1(coords[i])); } - return obj; - }, {}); -}; - -iD.util.qsString = function(obj, noencode) { - function softEncode(s) { return s.replace('&', '%26'); } - return Object.keys(obj).sort().map(function(key) { - return encodeURIComponent(key) + '=' + ( - noencode ? softEncode(obj[key]) : encodeURIComponent(obj[key])); - }).join('&'); -}; - -iD.util.prefixDOMProperty = function(property) { - var prefixes = ['webkit', 'ms', 'moz', 'o'], - i = -1, - n = prefixes.length, - s = document.body; - - if (property in s) - return property; - - property = property.substr(0, 1).toUpperCase() + property.substr(1); - - while (++i < n) - if (prefixes[i] + property in s) - return prefixes[i] + property; - - return false; -}; - -iD.util.prefixCSSProperty = function(property) { - var prefixes = ['webkit', 'ms', 'Moz', 'O'], - i = -1, - n = prefixes.length, - s = document.body.style; - - if (property.toLowerCase() in s) - return property.toLowerCase(); + return o; + } + function coordPair(x) { return [attrf(x, 'lon'), attrf(x, 'lat')]; } - while (++i < n) - if (prefixes[i] + property in s) - return '-' + prefixes[i].toLowerCase() + property.replace(/([A-Z])/g, '-$1').toLowerCase(); + // create a new feature collection parent object + function fc() { + return { + type: 'FeatureCollection', + features: [] + }; + } - return false; -}; + var styleSupport = false; + if (typeof XMLSerializer !== 'undefined') { + var serializer = new XMLSerializer(); + styleSupport = true; + } + function xml2str(str) { return serializer.serializeToString(str); } + var t = { + kml: function(doc, o) { + o = o || {}; -iD.util.setTransform = function(el, x, y, scale) { - var prop = iD.util.transformProperty = iD.util.transformProperty || iD.util.prefixCSSProperty('Transform'), - translate = iD.detect().opera ? - 'translate(' + x + 'px,' + y + 'px)' : - 'translate3d(' + x + 'px,' + y + 'px,0)'; - return el.style(prop, translate + (scale ? ' scale(' + scale + ')' : '')); -}; + var gj = fc(), + // styleindex keeps track of hashed styles in order to match features + styleIndex = {}, + // atomic geospatial types supported by KML - MultiGeometry is + // handled separately + geotypes = ['Polygon', 'LineString', 'Point', 'Track'], + // all root placemarks in the file + placemarks = get(doc, 'Placemark'), + styles = get(doc, 'Style'); -iD.util.getStyle = function(selector) { - for (var i = 0; i < document.styleSheets.length; i++) { - var rules = document.styleSheets[i].rules || document.styleSheets[i].cssRules || []; - for (var k = 0; k < rules.length; k++) { - var selectorText = rules[k].selectorText && rules[k].selectorText.split(', '); - if (_.contains(selectorText, selector)) { - return rules[k]; + if (styleSupport) for (var k = 0; k < styles.length; k++) { + styleIndex['#' + attr(styles[k], 'id')] = okhash(xml2str(styles[k])).toString(16); } - } - } -}; - -iD.util.editDistance = function(a, b) { - if (a.length === 0) return b.length; - if (b.length === 0) return a.length; - var matrix = []; - for (var i = 0; i <= b.length; i++) { matrix[i] = [i]; } - for (var j = 0; j <= a.length; j++) { matrix[0][j] = j; } - for (i = 1; i <= b.length; i++) { - for (j = 1; j <= a.length; j++) { - if (b.charAt(i-1) === a.charAt(j-1)) { - matrix[i][j] = matrix[i-1][j-1]; - } else { - matrix[i][j] = Math.min(matrix[i-1][j-1] + 1, // substitution - Math.min(matrix[i][j-1] + 1, // insertion - matrix[i-1][j] + 1)); // deletion + for (var j = 0; j < placemarks.length; j++) { + gj.features = gj.features.concat(getPlacemark(placemarks[j])); } - } - } - return matrix[b.length][a.length]; -}; + function gxCoord(v) { return numarray(v.split(' ')); } + function gxCoords(root) { + var elems = get(root, 'coord', 'gx'), coords = []; + for (var i = 0; i < elems.length; i++) coords.push(gxCoord(nodeVal(elems[i]))); + return coords; + } + function getGeometry(root) { + var geomNode, geomNodes, i, j, k, geoms = []; + if (get1(root, 'MultiGeometry')) return getGeometry(get1(root, 'MultiGeometry')); + if (get1(root, 'MultiTrack')) return getGeometry(get1(root, 'MultiTrack')); + for (i = 0; i < geotypes.length; i++) { + geomNodes = get(root, geotypes[i]); + if (geomNodes) { + for (j = 0; j < geomNodes.length; j++) { + geomNode = geomNodes[j]; + if (geotypes[i] == 'Point') { + geoms.push({ + type: 'Point', + coordinates: coord1(nodeVal(get1(geomNode, 'coordinates'))) + }); + } else if (geotypes[i] == 'LineString') { + geoms.push({ + type: 'LineString', + coordinates: coord(nodeVal(get1(geomNode, 'coordinates'))) + }); + } else if (geotypes[i] == 'Polygon') { + var rings = get(geomNode, 'LinearRing'), + coords = []; + for (k = 0; k < rings.length; k++) { + coords.push(coord(nodeVal(get1(rings[k], 'coordinates')))); + } + geoms.push({ + type: 'Polygon', + coordinates: coords + }); + } else if (geotypes[i] == 'Track') { + geoms.push({ + type: 'LineString', + coordinates: gxCoords(geomNode) + }); + } + } + } + } + return geoms; + } + function getPlacemark(root) { + var geoms = getGeometry(root), i, properties = {}, + name = nodeVal(get1(root, 'name')), + styleUrl = nodeVal(get1(root, 'styleUrl')), + description = nodeVal(get1(root, 'description')), + extendedData = get1(root, 'ExtendedData'); -// a d3.mouse-alike which -// 1. Only works on HTML elements, not SVG -// 2. Does not cause style recalculation -iD.util.fastMouse = function(container) { - var rect = _.clone(container.getBoundingClientRect()), - rectLeft = rect.left, - rectTop = rect.top, - clientLeft = +container.clientLeft, - clientTop = +container.clientTop; - return function(e) { - return [ - e.clientX - rectLeft - clientLeft, - e.clientY - rectTop - clientTop]; + if (!geoms.length) return []; + if (name) properties.name = name; + if (styleUrl && styleIndex[styleUrl]) { + properties.styleUrl = styleUrl; + properties.styleHash = styleIndex[styleUrl]; + } + if (description) properties.description = description; + if (extendedData) { + var datas = get(extendedData, 'Data'), + simpleDatas = get(extendedData, 'SimpleData'); + + for (i = 0; i < datas.length; i++) { + properties[datas[i].getAttribute('name')] = nodeVal(get1(datas[i], 'value')); + } + for (i = 0; i < simpleDatas.length; i++) { + properties[simpleDatas[i].getAttribute('name')] = nodeVal(simpleDatas[i]); + } + } + return [{ + type: 'Feature', + geometry: (geoms.length === 1) ? geoms[0] : { + type: 'GeometryCollection', + geometries: geoms + }, + properties: properties + }]; + } + return gj; + }, + gpx: function(doc, o) { + var i, + tracks = get(doc, 'trk'), + routes = get(doc, 'rte'), + waypoints = get(doc, 'wpt'), + // a feature collection + gj = fc(); + for (i = 0; i < tracks.length; i++) { + gj.features.push(getLinestring(tracks[i], 'trkpt')); + } + for (i = 0; i < routes.length; i++) { + gj.features.push(getLinestring(routes[i], 'rtept')); + } + for (i = 0; i < waypoints.length; i++) { + gj.features.push(getPoint(waypoints[i])); + } + function getLinestring(node, pointname) { + var j, pts = get(node, pointname), line = []; + for (j = 0; j < pts.length; j++) { + line.push(coordPair(pts[j])); + } + return { + type: 'Feature', + properties: getProperties(node), + geometry: { + type: 'LineString', + coordinates: line + } + }; + } + function getPoint(node) { + var prop = getProperties(node); + prop.ele = nodeVal(get1(node, 'ele')); + prop.sym = nodeVal(get1(node, 'sym')); + return { + type: 'Feature', + properties: prop, + geometry: { + type: 'Point', + coordinates: coordPair(node) + } + }; + } + function getProperties(node) { + var meta = ['name', 'desc', 'author', 'copyright', 'link', + 'time', 'keywords'], + prop = {}, + k; + for (k = 0; k < meta.length; k++) { + prop[meta[k]] = nodeVal(get1(node, meta[k])); + } + return clean(prop); + } + return gj; + } }; -}; + return t; +})(); -/* jshint -W103 */ -iD.util.getPrototypeOf = Object.getPrototypeOf || function(obj) { return obj.__proto__; }; +if (typeof module !== 'undefined') module.exports = toGeoJSON; +/** + * marked - a markdown parser + * Copyright (c) 2011-2013, Christopher Jeffrey. (MIT Licensed) + * https://github.com/chjj/marked + */ -iD.util.asyncMap = function(inputs, func, callback) { - var remaining = inputs.length, - results = [], - errors = []; +;(function() { - inputs.forEach(function(d, i) { - func(d, function done(err, data) { - errors[i] = err; - results[i] = data; - remaining --; - if (!remaining) callback(errors, results); - }); - }); -}; +/** + * Block-Level Grammar + */ -// wraps an index to an interval [0..length-1] -iD.util.wrap = function(index, length) { - if (index < 0) - index += Math.ceil(-index/length)*length; - return index % length; +var block = { + newline: /^\n+/, + code: /^( {4}[^\n]+\n*)+/, + fences: noop, + hr: /^( *[-*_]){3,} *(?:\n+|$)/, + heading: /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/, + nptable: noop, + lheading: /^([^\n]+)\n *(=|-){3,} *\n*/, + blockquote: /^( *>[^\n]+(\n[^\n]+)*\n*)+/, + list: /^( *)(bull) [\s\S]+?(?:hr|\n{2,}(?! )(?!\1bull )\n*|\s*$)/, + html: /^ *(?:comment|closed|closing) *(?:\n{2,}|\s*$)/, + def: /^ *\[([^\]]+)\]: *]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/, + table: noop, + paragraph: /^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/, + text: /^[^\n]+/ }; -// A per-domain session mutex backed by a cookie and dead man's -// switch. If the session crashes, the mutex will auto-release -// after 5 seconds. - -iD.util.SessionMutex = function(name) { - var mutex = {}, - intervalID; - function renew() { - var expires = new Date(); - expires.setSeconds(expires.getSeconds() + 5); - document.cookie = name + '=1; expires=' + expires.toUTCString(); - } +block.bullet = /(?:[*+-]|\d+\.)/; +block.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/; +block.item = replace(block.item, 'gm') + (/bull/g, block.bullet) + (); - mutex.lock = function() { - if (intervalID) return true; - var cookie = document.cookie.replace(new RegExp('(?:(?:^|.*;)\\s*' + name + '\\s*\\=\\s*([^;]*).*$)|^.*$'), '$1'); - if (cookie) return false; - renew(); - intervalID = window.setInterval(renew, 4000); - return true; - }; +block.list = replace(block.list) + (/bull/g, block.bullet) + ('hr', /\n+(?=(?: *[-*_]){3,} *(?:\n+|$))/) + (); - mutex.unlock = function() { - if (!intervalID) return; - document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT'; - clearInterval(intervalID); - intervalID = null; - }; +block._tag = '(?!(?:' + + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code' + + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo' + + '|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|@)\\b'; - mutex.locked = function() { - return !!intervalID; - }; +block.html = replace(block.html) + ('comment', //) + ('closed', /<(tag)[\s\S]+?<\/\1>/) + ('closing', /])*?>/) + (/tag/g, block._tag) + (); - return mutex; -}; -iD.util.SuggestNames = function(preset, suggestions) { - preset = preset.id.split('/', 2); - var k = preset[0], - v = preset[1]; +block.paragraph = replace(block.paragraph) + ('hr', block.hr) + ('heading', block.heading) + ('lheading', block.lheading) + ('blockquote', block.blockquote) + ('tag', '<' + block._tag) + ('def', block.def) + (); - return function(value, callback) { - var result = []; - if (value && value.length > 2) { - if (suggestions[k] && suggestions[k][v]) { - for (var sugg in suggestions[k][v]) { - var dist = iD.util.editDistance(value, sugg.substring(0, value.length)); - if (dist < 3) { - result.push({ - title: sugg, - value: sugg, - dist: dist - }); - } - } - } - result.sort(function(a, b) { - return a.dist - b.dist; - }); - } - result = result.slice(0,3); - callback(result); - }; -}; -iD.geo = {}; +/** + * Normal Block Grammar + */ -iD.geo.roundCoords = function(c) { - return [Math.floor(c[0]), Math.floor(c[1])]; -}; +block.normal = merge({}, block); -iD.geo.interp = function(p1, p2, t) { - return [p1[0] + (p2[0] - p1[0]) * t, - p1[1] + (p2[1] - p1[1]) * t]; -}; +/** + * GFM Block Grammar + */ -// http://jsperf.com/id-dist-optimization -iD.geo.euclideanDistance = function(a, b) { - var x = a[0] - b[0], y = a[1] - b[1]; - return Math.sqrt((x * x) + (y * y)); -}; -// Equirectangular approximation of spherical distances on Earth -iD.geo.sphericalDistance = function(a, b) { - var x = Math.cos(a[1]*Math.PI/180) * (a[0] - b[0]), - y = a[1] - b[1]; - return 6.3710E6 * Math.sqrt((x * x) + (y * y)) * Math.PI/180; -}; +block.gfm = merge({}, block.normal, { + fences: /^ *(`{3,}|~{3,}) *(\S+)? *\n([\s\S]+?)\s*\1 *(?:\n+|$)/, + paragraph: /^/ +}); -iD.geo.edgeEqual = function(a, b) { - return (a[0] === b[0] && a[1] === b[1]) || - (a[0] === b[1] && a[1] === b[0]); -}; +block.gfm.paragraph = replace(block.paragraph) + ('(?!', '(?!' + block.gfm.fences.source.replace('\\1', '\\2') + '|') + (); -// Choose the edge with the minimal distance from `point` to its orthogonal -// projection onto that edge, if such a projection exists, or the distance to -// the closest vertex on that edge. Returns an object with the `index` of the -// chosen edge, the chosen `loc` on that edge, and the `distance` to to it. -iD.geo.chooseEdge = function(nodes, point, projection) { - var dist = iD.geo.euclideanDistance, - points = nodes.map(function(n) { return projection(n.loc); }), - min = Infinity, - idx, loc; +/** + * GFM + Tables Block Grammar + */ - function dot(p, q) { - return p[0] * q[0] + p[1] * q[1]; - } +block.tables = merge({}, block.gfm, { + nptable: /^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/, + table: /^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/ +}); - for (var i = 0; i < points.length - 1; i++) { - var o = points[i], - s = [points[i + 1][0] - o[0], - points[i + 1][1] - o[1]], - v = [point[0] - o[0], - point[1] - o[1]], - proj = dot(v, s) / dot(s, s), - p; +/** + * Block Lexer + */ - if (proj < 0) { - p = o; - } else if (proj > 1) { - p = points[i + 1]; - } else { - p = [o[0] + proj * s[0], o[1] + proj * s[1]]; - } +function Lexer(options) { + this.tokens = []; + this.tokens.links = {}; + this.options = options || marked.defaults; + this.rules = block.normal; - var d = dist(p, point); - if (d < min) { - min = d; - idx = i + 1; - loc = projection.invert(p); - } + if (this.options.gfm) { + if (this.options.tables) { + this.rules = block.tables; + } else { + this.rules = block.gfm; } + } +} - return { - index: idx, - distance: min, - loc: loc - }; -}; - -// Return whether point is contained in polygon. -// -// `point` should be a 2-item array of coordinates. -// `polygon` should be an array of 2-item arrays of coordinates. -// -// From https://github.com/substack/point-in-polygon. -// ray-casting algorithm based on -// http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html -// -iD.geo.pointInPolygon = function(point, polygon) { - var x = point[0], - y = point[1], - inside = false; +/** + * Expose Block Rules + */ - for (var i = 0, j = polygon.length - 1; i < polygon.length; j = i++) { - var xi = polygon[i][0], yi = polygon[i][1]; - var xj = polygon[j][0], yj = polygon[j][1]; +Lexer.rules = block; - var intersect = ((yi > y) !== (yj > y)) && - (x < (xj - xi) * (y - yi) / (yj - yi) + xi); - if (intersect) inside = !inside; - } +/** + * Static Lex Method + */ - return inside; +Lexer.lex = function(src, options) { + var lexer = new Lexer(options); + return lexer.lex(src); }; -iD.geo.polygonContainsPolygon = function(outer, inner) { - return _.every(inner, function(point) { - return iD.geo.pointInPolygon(point, outer); - }); -}; +/** + * Preprocessing + */ -iD.geo.polygonIntersectsPolygon = function(outer, inner) { - return _.some(inner, function(point) { - return iD.geo.pointInPolygon(point, outer); - }); +Lexer.prototype.lex = function(src) { + src = src + .replace(/\r\n|\r/g, '\n') + .replace(/\t/g, ' ') + .replace(/\u00a0/g, ' ') + .replace(/\u2424/g, '\n'); + + return this.token(src, true); }; -iD.geo.pathLength = function(path) { - var length = 0, - dx, dy; - for (var i = 0; i < path.length - 1; i++) { - dx = path[i][0] - path[i + 1][0]; - dy = path[i][1] - path[i + 1][1]; - length += Math.sqrt(dx * dx + dy * dy); +/** + * Lexing + */ + +Lexer.prototype.token = function(src, top) { + var src = src.replace(/^ +$/gm, '') + , next + , loose + , cap + , bull + , b + , item + , space + , i + , l; + + while (src) { + // newline + if (cap = this.rules.newline.exec(src)) { + src = src.substring(cap[0].length); + if (cap[0].length > 1) { + this.tokens.push({ + type: 'space' + }); + } } - return length; -}; -iD.geo.Extent = function geoExtent(min, max) { - if (!(this instanceof iD.geo.Extent)) return new iD.geo.Extent(min, max); - if (min instanceof iD.geo.Extent) { - return min; - } else if (min && min.length === 2 && min[0].length === 2 && min[1].length === 2) { - this[0] = min[0]; - this[1] = min[1]; - } else { - this[0] = min || [ Infinity, Infinity]; - this[1] = max || min || [-Infinity, -Infinity]; + + // code + if (cap = this.rules.code.exec(src)) { + src = src.substring(cap[0].length); + cap = cap[0].replace(/^ {4}/gm, ''); + this.tokens.push({ + type: 'code', + text: !this.options.pedantic + ? cap.replace(/\n+$/, '') + : cap + }); + continue; } -}; -iD.geo.Extent.prototype = [[], []]; + // fences (gfm) + if (cap = this.rules.fences.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'code', + lang: cap[2], + text: cap[3] + }); + continue; + } -_.extend(iD.geo.Extent.prototype, { - extend: function(obj) { - if (!(obj instanceof iD.geo.Extent)) obj = new iD.geo.Extent(obj); - return iD.geo.Extent([Math.min(obj[0][0], this[0][0]), - Math.min(obj[0][1], this[0][1])], - [Math.max(obj[1][0], this[1][0]), - Math.max(obj[1][1], this[1][1])]); - }, + // heading + if (cap = this.rules.heading.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'heading', + depth: cap[1].length, + text: cap[2] + }); + continue; + } - center: function() { - return [(this[0][0] + this[1][0]) / 2, - (this[0][1] + this[1][1]) / 2]; - }, + // table no leading pipe (gfm) + if (top && (cap = this.rules.nptable.exec(src))) { + src = src.substring(cap[0].length); - polygon: function() { - return [ - [this[0][0], this[0][1]], - [this[0][0], this[1][1]], - [this[1][0], this[1][1]], - [this[1][0], this[0][1]], - [this[0][0], this[0][1]] - ]; - }, + item = { + type: 'table', + header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */), + align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), + cells: cap[3].replace(/\n$/, '').split('\n') + }; - intersects: function(obj) { - if (!(obj instanceof iD.geo.Extent)) obj = new iD.geo.Extent(obj); - return obj[0][0] <= this[1][0] && - obj[0][1] <= this[1][1] && - obj[1][0] >= this[0][0] && - obj[1][1] >= this[0][1]; - }, + for (i = 0; i < item.align.length; i++) { + if (/^ *-+: *$/.test(item.align[i])) { + item.align[i] = 'right'; + } else if (/^ *:-+: *$/.test(item.align[i])) { + item.align[i] = 'center'; + } else if (/^ *:-+ *$/.test(item.align[i])) { + item.align[i] = 'left'; + } else { + item.align[i] = null; + } + } - intersection: function(obj) { - if (!this.intersects(obj)) return new iD.geo.Extent(); - return new iD.geo.Extent([Math.max(obj[0][0], this[0][0]), - Math.max(obj[0][1], this[0][1])], - [Math.min(obj[1][0], this[1][0]), - Math.min(obj[1][1], this[1][1])]); - }, + for (i = 0; i < item.cells.length; i++) { + item.cells[i] = item.cells[i].split(/ *\| */); + } - padByMeters: function(meters) { - var dLat = meters / 111200, - dLon = meters / 111200 / Math.abs(Math.cos(this.center()[1])); - return iD.geo.Extent( - [this[0][0] - dLon, this[0][1] - dLat], - [this[1][0] + dLon, this[1][1] + dLat]); - }, + this.tokens.push(item); - toParam: function() { - return [this[0][0], this[0][1], this[1][0], this[1][1]].join(','); + continue; } -}); -// For fixing up rendering of multipolygons with tags on the outer member. -// https://github.com/openstreetmap/iD/issues/613 -iD.geo.isSimpleMultipolygonOuterMember = function(entity, graph) { - if (entity.type !== 'way') - return false; - - var parents = graph.parentRelations(entity); - if (parents.length !== 1) - return false; - - var parent = parents[0]; - if (!parent.isMultipolygon() || Object.keys(parent.tags).length > 1) - return false; - var members = parent.members, member; - for (var i = 0; i < members.length; i++) { - member = members[i]; - if (member.id === entity.id && member.role && member.role !== 'outer') - return false; // Not outer member - if (member.id !== entity.id && (!member.role || member.role === 'outer')) - return false; // Not a simple multipolygon + // lheading + if (cap = this.rules.lheading.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'heading', + depth: cap[2] === '=' ? 1 : 2, + text: cap[1] + }); + continue; } - return parent; -}; - -iD.geo.simpleMultipolygonOuterMember = function(entity, graph) { - if (entity.type !== 'way') - return false; - - var parents = graph.parentRelations(entity); - if (parents.length !== 1) - return false; + // hr + if (cap = this.rules.hr.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'hr' + }); + continue; + } - var parent = parents[0]; - if (!parent.isMultipolygon() || Object.keys(parent.tags).length > 1) - return false; + // blockquote + if (cap = this.rules.blockquote.exec(src)) { + src = src.substring(cap[0].length); - var members = parent.members, member, outerMember; - for (var i = 0; i < members.length; i++) { - member = members[i]; - if (!member.role || member.role === 'outer') { - if (outerMember) - return false; // Not a simple multipolygon - outerMember = member; - } - } + this.tokens.push({ + type: 'blockquote_start' + }); - return outerMember && graph.hasEntity(outerMember.id); -}; + cap = cap[0].replace(/^ *> ?/gm, ''); -// Join `array` into sequences of connecting ways. -// -// Segments which share identical start/end nodes will, as much as possible, -// be connected with each other. -// -// The return value is a nested array. Each constituent array contains elements -// of `array` which have been determined to connect. Each consitituent array -// also has a `nodes` property whose value is an ordered array of member nodes, -// with appropriate order reversal and start/end coordinate de-duplication. -// -// Members of `array` must have, at minimum, `type` and `id` properties. -// Thus either an array of `iD.Way`s or a relation member array may be -// used. -// -// If an member has a `tags` property, its tags will be reversed via -// `iD.actions.Reverse` in the output. -// -// Incomplete members (those for which `graph.hasEntity(element.id)` returns -// false) and non-way members are ignored. -// -iD.geo.joinWays = function(array, graph) { - var joined = [], member, current, nodes, first, last, i, how, what; + // Pass `top` to keep the current + // "toplevel" state. This is exactly + // how markdown.pl works. + this.token(cap, top); - array = array.filter(function(member) { - return member.type === 'way' && graph.hasEntity(member.id); - }); + this.tokens.push({ + type: 'blockquote_end' + }); - function resolve(member) { - return graph.childNodes(graph.entity(member.id)); + continue; } - function reverse(member) { - return member.tags ? iD.actions.Reverse(member.id)(graph).entity(member.id) : member; - } + // list + if (cap = this.rules.list.exec(src)) { + src = src.substring(cap[0].length); + bull = cap[2]; - while (array.length) { - member = array.shift(); - current = [member]; - current.nodes = nodes = resolve(member).slice(); - joined.push(current); + this.tokens.push({ + type: 'list_start', + ordered: bull.length > 1 + }); - while (array.length && _.first(nodes) !== _.last(nodes)) { - first = _.first(nodes); - last = _.last(nodes); + // Get each top-level item. + cap = cap[0].match(this.rules.item); - for (i = 0; i < array.length; i++) { - member = array[i]; - what = resolve(member); + next = false; + l = cap.length; + i = 0; - if (last === _.first(what)) { - how = nodes.push; - what = what.slice(1); - break; - } else if (last === _.last(what)) { - how = nodes.push; - what = what.slice(0, -1).reverse(); - member = reverse(member); - break; - } else if (first === _.last(what)) { - how = nodes.unshift; - what = what.slice(0, -1); - break; - } else if (first === _.first(what)) { - how = nodes.unshift; - what = what.slice(1).reverse(); - member = reverse(member); - break; - } else { - what = how = null; - } - } + for (; i < l; i++) { + item = cap[i]; - if (!what) - break; // No more joinable ways. + // Remove the list item's bullet + // so it is seen as the next token. + space = item.length; + item = item.replace(/^ *([*+-]|\d+\.) +/, ''); - how.apply(current, [member]); - how.apply(nodes, what); + // Outdent whatever the + // list item contains. Hacky. + if (~item.indexOf('\n ')) { + space -= item.length; + item = !this.options.pedantic + ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '') + : item.replace(/^ {1,4}/gm, ''); + } - array.splice(i, 1); + // Determine whether the next list item belongs here. + // Backpedal if it does not belong in this list. + if (this.options.smartLists && i !== l - 1) { + b = block.bullet.exec(cap[i+1])[0]; + if (bull !== b && !(bull.length > 1 && b.length > 1)) { + src = cap.slice(i + 1).join('\n') + src; + i = l - 1; + } } - } - return joined; -}; -iD.geo.turns = function(graph, entityID) { - var way = graph.entity(entityID); - if (way.type !== 'way' || !way.tags.highway || way.isArea()) - return []; + // Determine whether item is loose or not. + // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/ + // for discount behavior. + loose = next || /\n\n(?!\s*$)/.test(item); + if (i !== l - 1) { + next = item[item.length-1] === '\n'; + if (!loose) loose = next; + } - function withRestriction(turn) { - graph.parentRelations(turn.from).forEach(function(relation) { - if (relation.tags.type !== 'restriction') - return; + this.tokens.push({ + type: loose + ? 'loose_item_start' + : 'list_item_start' + }); - var f = relation.memberByRole('from'), - t = relation.memberByRole('to'), - v = relation.memberByRole('via'); + // Recurse. + this.token(item, false); - if (f && f.id === turn.from.id && - t && t.id === turn.to.id && - v && v.id === turn.via.id) { - turn.restriction = relation; - } + this.tokens.push({ + type: 'list_item_end' }); + } - return turn; - } + this.tokens.push({ + type: 'list_end' + }); - var turns = []; + continue; + } - [way.first(), way.last()].forEach(function(nodeID) { - var node = graph.entity(nodeID); - graph.parentWays(node).forEach(function(parent) { - if (parent === way || parent.isDegenerate() || !parent.tags.highway) - return; - if (way.first() === node.id && way.tags.oneway === 'yes') - return; - if (way.last() === node.id && way.tags.oneway === '-1') - return; + // html + if (cap = this.rules.html.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: this.options.sanitize + ? 'paragraph' + : 'html', + pre: cap[1] === 'pre' || cap[1] === 'script', + text: cap[0] + }); + continue; + } - var index = parent.nodes.indexOf(node.id); + // def + if (top && (cap = this.rules.def.exec(src))) { + src = src.substring(cap[0].length); + this.tokens.links[cap[1].toLowerCase()] = { + href: cap[2], + title: cap[3] + }; + continue; + } - // backward - if (parent.first() !== node.id && parent.tags.oneway !== 'yes') { - turns.push(withRestriction({ - from: way, - to: parent, - via: node, - toward: graph.entity(parent.nodes[index - 1]) - })); - } + // table (gfm) + if (top && (cap = this.rules.table.exec(src))) { + src = src.substring(cap[0].length); - // forward - if (parent.last() !== node.id && parent.tags.oneway !== '-1') { - turns.push(withRestriction({ - from: way, - to: parent, - via: node, - toward: graph.entity(parent.nodes[index + 1]) - })); - } - }); - }); + item = { + type: 'table', + header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */), + align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), + cells: cap[3].replace(/(?: *\| *)?\n$/, '').split('\n') + }; - return turns; -}; -iD.actions = {}; -iD.actions.AddEntity = function(way) { - return function(graph) { - return graph.replace(way); - }; -}; -iD.actions.AddMember = function(relationId, member, memberIndex) { - return function(graph) { - var relation = graph.entity(relationId); - - if (isNaN(memberIndex) && member.type === 'way') { - var members = relation.indexedMembers(); - members.push(member); + for (i = 0; i < item.align.length; i++) { + if (/^ *-+: *$/.test(item.align[i])) { + item.align[i] = 'right'; + } else if (/^ *:-+: *$/.test(item.align[i])) { + item.align[i] = 'center'; + } else if (/^ *:-+ *$/.test(item.align[i])) { + item.align[i] = 'left'; + } else { + item.align[i] = null; + } + } - var joined = iD.geo.joinWays(members, graph); - for (var i = 0; i < joined.length; i++) { - var segment = joined[i]; - for (var j = 0; j < segment.length && segment.length >= 2; j++) { - if (segment[j] !== member) - continue; + for (i = 0; i < item.cells.length; i++) { + item.cells[i] = item.cells[i] + .replace(/^ *\| *| *\| *$/g, '') + .split(/ *\| */); + } - if (j === 0) { - memberIndex = segment[j + 1].index; - } else if (j === segment.length - 1) { - memberIndex = segment[j - 1].index + 1; - } else { - memberIndex = Math.min(segment[j - 1].index + 1, segment[j + 1].index + 1); - } - } - } - } + this.tokens.push(item); - return graph.replace(relation.addMember(member, memberIndex)); - }; -}; -iD.actions.AddMidpoint = function(midpoint, node) { - return function(graph) { - graph = graph.replace(node.move(midpoint.loc)); + continue; + } - var parents = _.intersection( - graph.parentWays(graph.entity(midpoint.edge[0])), - graph.parentWays(graph.entity(midpoint.edge[1]))); + // top-level paragraph + if (top && (cap = this.rules.paragraph.exec(src))) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'paragraph', + text: cap[1][cap[1].length-1] === '\n' + ? cap[1].slice(0, -1) + : cap[1] + }); + continue; + } - parents.forEach(function(way) { - for (var i = 0; i < way.nodes.length - 1; i++) { - if (iD.geo.edgeEqual([way.nodes[i], way.nodes[i + 1]], midpoint.edge)) { - graph = graph.replace(graph.entity(way.id).addNode(node.id, i + 1)); + // text + if (cap = this.rules.text.exec(src)) { + // Top-level should never reach here. + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'text', + text: cap[0] + }); + continue; + } - // Add only one midpoint on doubled-back segments, - // turning them into self-intersections. - return; - } - } - }); + if (src) { + throw new + Error('Infinite loop on byte: ' + src.charCodeAt(0)); + } + } - return graph; - }; -}; -// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/AddNodeToWayAction.as -iD.actions.AddVertex = function(wayId, nodeId, index) { - return function(graph) { - return graph.replace(graph.entity(wayId).addNode(nodeId, index)); - }; -}; -iD.actions.ChangeMember = function(relationId, member, memberIndex) { - return function(graph) { - return graph.replace(graph.entity(relationId).updateMember(member, memberIndex)); - }; + return this.tokens; }; -iD.actions.ChangePreset = function(entityId, oldPreset, newPreset) { - return function(graph) { - var entity = graph.entity(entityId), - geometry = entity.geometry(graph), - tags = entity.tags; - if (oldPreset) tags = oldPreset.removeTags(tags, geometry); - if (newPreset) tags = newPreset.applyTags(tags, geometry); +/** + * Inline-Level Grammar + */ - return graph.replace(entity.update({tags: tags})); - }; -}; -iD.actions.ChangeTags = function(entityId, tags) { - return function(graph) { - var entity = graph.entity(entityId); - return graph.replace(entity.update({tags: tags})); - }; +var inline = { + escape: /^\\([\\`*{}\[\]()#+\-.!_>])/, + autolink: /^<([^ >]+(@|:\/)[^ >]+)>/, + url: noop, + tag: /^|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/, + link: /^!?\[(inside)\]\(href\)/, + reflink: /^!?\[(inside)\]\s*\[([^\]]*)\]/, + nolink: /^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/, + strong: /^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/, + em: /^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/, + code: /^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/, + br: /^ {2,}\n(?!\s*$)/, + del: noop, + text: /^[\s\S]+?(?=[\\ 0 ? 1 : -1, - ids; - // we need atleast two key nodes for the algorithm to work - if (!keyNodes.length) { - keyNodes = [nodes[0]]; - keyPoints = [points[0]]; - } +inline._inside = /(?:\[[^\]]*\]|[^\]]|\](?=[^\[]*\]))*/; +inline._href = /\s*?(?:\s+['"]([\s\S]*?)['"])?\s*/; - if (keyNodes.length === 1) { - var index = nodes.indexOf(keyNodes[0]), - oppositeIndex = Math.floor((index + nodes.length / 2) % nodes.length); +inline.link = replace(inline.link) + ('inside', inline._inside) + ('href', inline._href) + (); - keyNodes.push(nodes[oppositeIndex]); - keyPoints.push(points[oppositeIndex]); - } +inline.reflink = replace(inline.reflink) + ('inside', inline._inside) + (); - // key points and nodes are those connected to the ways, - // they are projected onto the circle, inbetween nodes are moved - // to constant internals between key nodes, extra inbetween nodes are - // added if necessary. - for (var i = 0; i < keyPoints.length; i++) { - var nextKeyNodeIndex = (i + 1) % keyNodes.length, - startNodeIndex = nodes.indexOf(keyNodes[i]), - endNodeIndex = nodes.indexOf(keyNodes[nextKeyNodeIndex]), - numberNewPoints = -1, - indexRange = endNodeIndex - startNodeIndex, - distance, totalAngle, eachAngle, startAngle, endAngle, - angle, loc, node, j; +/** + * Normal Inline Grammar + */ - if (indexRange < 0) { - indexRange += nodes.length; - } +inline.normal = merge({}, inline); - // position this key node - distance = iD.geo.euclideanDistance(centroid, keyPoints[i]); - keyPoints[i] = [ - centroid[0] + (keyPoints[i][0] - centroid[0]) / distance * radius, - centroid[1] + (keyPoints[i][1] - centroid[1]) / distance * radius]; - graph = graph.replace(keyNodes[i].move(projection.invert(keyPoints[i]))); +/** + * Pedantic Inline Grammar + */ - // figure out the between delta angle we want to match to - startAngle = Math.atan2(keyPoints[i][1] - centroid[1], keyPoints[i][0] - centroid[0]); - endAngle = Math.atan2(keyPoints[nextKeyNodeIndex][1] - centroid[1], keyPoints[nextKeyNodeIndex][0] - centroid[0]); - totalAngle = endAngle - startAngle; +inline.pedantic = merge({}, inline.normal, { + strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/, + em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/ +}); - // detects looping around -pi/pi - if (totalAngle*sign > 0) { - totalAngle = -sign * (2 * Math.PI - Math.abs(totalAngle)); - } +/** + * GFM Inline Grammar + */ - do { - numberNewPoints++; - eachAngle = totalAngle / (indexRange + numberNewPoints); - } while (Math.abs(eachAngle) > maxAngle); +inline.gfm = merge({}, inline.normal, { + escape: replace(inline.escape)('])', '~|])')(), + url: /^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/, + del: /^~~(?=\S)([\s\S]*?\S)~~/, + text: replace(inline.text) + (']|', '~]|') + ('|', '|https?://|') + () +}); - // move existing points - for (j = 1; j < indexRange; j++) { - angle = startAngle + j * eachAngle; - loc = projection.invert([ - centroid[0] + Math.cos(angle)*radius, - centroid[1] + Math.sin(angle)*radius]); +/** + * GFM + Line Breaks Inline Grammar + */ - node = nodes[(j + startNodeIndex) % nodes.length].move(loc); - graph = graph.replace(node); - } +inline.breaks = merge({}, inline.gfm, { + br: replace(inline.br)('{2,}', '*')(), + text: replace(inline.gfm.text)('{2,}', '*')() +}); - // add new inbetween nodes if necessary - for (j = 0; j < numberNewPoints; j++) { - angle = startAngle + (indexRange + j) * eachAngle; - loc = projection.invert([ - centroid[0] + Math.cos(angle) * radius, - centroid[1] + Math.sin(angle) * radius]); +/** + * Inline Lexer & Compiler + */ - node = iD.Node({loc: loc}); - graph = graph.replace(node); +function InlineLexer(links, options) { + this.options = options || marked.defaults; + this.links = links; + this.rules = inline.normal; - nodes.splice(endNodeIndex + j, 0, node); - } - } + if (!this.links) { + throw new + Error('Tokens array requires a `links` property.'); + } - // update the way to have all the new nodes - ids = nodes.map(function(n) { return n.id; }); - ids.push(ids[0]); + if (this.options.gfm) { + if (this.options.breaks) { + this.rules = inline.breaks; + } else { + this.rules = inline.gfm; + } + } else if (this.options.pedantic) { + this.rules = inline.pedantic; + } +} - way = way.update({nodes: ids}); - graph = graph.replace(way); +/** + * Expose Inline Rules + */ - return graph; - }; +InlineLexer.rules = inline; - action.disabled = function(graph) { - if (!graph.entity(wayId).isClosed()) - return 'not_closed'; - }; +/** + * Static Lexing/Compiling Method + */ - return action; +InlineLexer.output = function(src, links, options) { + var inline = new InlineLexer(links, options); + return inline.output(src); }; -// Connect the ways at the given nodes. -// -// The last node will survive. All other nodes will be replaced with -// the surviving node in parent ways, and then removed. -// -// Tags and relation memberships of of non-surviving nodes are merged -// to the survivor. -// -// This is the inverse of `iD.actions.Disconnect`. -// -// Reference: -// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MergeNodesAction.as -// https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/MergeNodesAction.java -// -iD.actions.Connect = function(nodeIds) { - return function(graph) { - var survivor = graph.entity(_.last(nodeIds)); - - for (var i = 0; i < nodeIds.length - 1; i++) { - var node = graph.entity(nodeIds[i]); - - /*jshint -W083 */ - graph.parentWays(node).forEach(function(parent) { - if (!parent.areAdjacent(node.id, survivor.id)) { - graph = graph.replace(parent.replaceNode(node.id, survivor.id)); - } - }); - graph.parentRelations(node).forEach(function(parent) { - graph = graph.replace(parent.replaceMember(node, survivor)); - }); - /*jshint +W083 */ +/** + * Lexing/Compiling + */ - survivor = survivor.mergeTags(node.tags); - graph = iD.actions.DeleteNode(node.id)(graph); - } +InlineLexer.prototype.output = function(src) { + var out = '' + , link + , text + , href + , cap; - graph = graph.replace(survivor); + while (src) { + // escape + if (cap = this.rules.escape.exec(src)) { + src = src.substring(cap[0].length); + out += cap[1]; + continue; + } - return graph; - }; -}; -iD.actions.DeleteMember = function(relationId, memberIndex) { - return function(graph) { - return graph.replace(graph.entity(relationId).removeMember(memberIndex)); - }; -}; -iD.actions.DeleteMultiple = function(ids) { - var actions = { - way: iD.actions.DeleteWay, - node: iD.actions.DeleteNode, - relation: iD.actions.DeleteRelation - }; + // autolink + if (cap = this.rules.autolink.exec(src)) { + src = src.substring(cap[0].length); + if (cap[2] === '@') { + text = cap[1][6] === ':' + ? this.mangle(cap[1].substring(7)) + : this.mangle(cap[1]); + href = this.mangle('mailto:') + text; + } else { + text = escape(cap[1]); + href = text; + } + out += '' + + text + + ''; + continue; + } - var action = function(graph) { - ids.forEach(function(id) { - if (graph.hasEntity(id)) { // It may have been deleted aready. - graph = actions[graph.entity(id).type](id)(graph); - } - }); + // url (gfm) + if (cap = this.rules.url.exec(src)) { + src = src.substring(cap[0].length); + text = escape(cap[1]); + href = text; + out += '' + + text + + ''; + continue; + } - return graph; - }; + // tag + if (cap = this.rules.tag.exec(src)) { + src = src.substring(cap[0].length); + out += this.options.sanitize + ? escape(cap[0]) + : cap[0]; + continue; + } - action.disabled = function(graph) { - for (var i = 0; i < ids.length; i++) { - var id = ids[i], - disabled = actions[graph.entity(id).type](id).disabled(graph); - if (disabled) return disabled; - } - }; + // link + if (cap = this.rules.link.exec(src)) { + src = src.substring(cap[0].length); + out += this.outputLink(cap, { + href: cap[2], + title: cap[3] + }); + continue; + } - return action; -}; -// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteNodeAction.as -iD.actions.DeleteNode = function(nodeId) { - var action = function(graph) { - var node = graph.entity(nodeId); + // reflink, nolink + if ((cap = this.rules.reflink.exec(src)) + || (cap = this.rules.nolink.exec(src))) { + src = src.substring(cap[0].length); + link = (cap[2] || cap[1]).replace(/\s+/g, ' '); + link = this.links[link.toLowerCase()]; + if (!link || !link.href) { + out += cap[0][0]; + src = cap[0].substring(1) + src; + continue; + } + out += this.outputLink(cap, link); + continue; + } - graph.parentWays(node) - .forEach(function(parent) { - parent = parent.removeNode(nodeId); - graph = graph.replace(parent); + // strong + if (cap = this.rules.strong.exec(src)) { + src = src.substring(cap[0].length); + out += '' + + this.output(cap[2] || cap[1]) + + ''; + continue; + } - if (parent.isDegenerate()) { - graph = iD.actions.DeleteWay(parent.id)(graph); - } - }); + // em + if (cap = this.rules.em.exec(src)) { + src = src.substring(cap[0].length); + out += '' + + this.output(cap[2] || cap[1]) + + ''; + continue; + } - graph.parentRelations(node) - .forEach(function(parent) { - parent = parent.removeMembersWithID(nodeId); - graph = graph.replace(parent); + // code + if (cap = this.rules.code.exec(src)) { + src = src.substring(cap[0].length); + out += '' + + escape(cap[2], true) + + ''; + continue; + } - if (parent.isDegenerate()) { - graph = iD.actions.DeleteRelation(parent.id)(graph); - } - }); + // br + if (cap = this.rules.br.exec(src)) { + src = src.substring(cap[0].length); + out += '
    '; + continue; + } - return graph.remove(node); - }; + // del (gfm) + if (cap = this.rules.del.exec(src)) { + src = src.substring(cap[0].length); + out += '' + + this.output(cap[1]) + + ''; + continue; + } - action.disabled = function() { - return false; - }; + // text + if (cap = this.rules.text.exec(src)) { + src = src.substring(cap[0].length); + out += escape(cap[0]); + continue; + } - return action; -}; -// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteRelationAction.as -iD.actions.DeleteRelation = function(relationId) { - function deleteEntity(entity, graph) { - return !graph.parentWays(entity).length && - !graph.parentRelations(entity).length && - !entity.hasInterestingTags(); + if (src) { + throw new + Error('Infinite loop on byte: ' + src.charCodeAt(0)); } + } - var action = function(graph) { - var relation = graph.entity(relationId); + return out; +}; - graph.parentRelations(relation) - .forEach(function(parent) { - parent = parent.removeMembersWithID(relationId); - graph = graph.replace(parent); - - if (parent.isDegenerate()) { - graph = iD.actions.DeleteRelation(parent.id)(graph); - } - }); - - _.uniq(_.pluck(relation.members, 'id')).forEach(function(memberId) { - graph = graph.replace(relation.removeMembersWithID(memberId)); - - var entity = graph.entity(memberId); - if (deleteEntity(entity, graph)) { - graph = iD.actions.DeleteMultiple([memberId])(graph); - } - }); +/** + * Compile Link + */ - return graph.remove(relation); - }; +InlineLexer.prototype.outputLink = function(cap, link) { + if (cap[0][0] !== '!') { + return '' + + this.output(cap[1]) + + ''; + } else { + return ''
+      + escape(cap[1])
+      + ''; + } +}; - action.disabled = function(graph) { - if (!graph.entity(relationId).isComplete(graph)) - return 'incomplete_relation'; - }; +/** + * Smartypants Transformations + */ - return action; +InlineLexer.prototype.smartypants = function(text) { + if (!this.options.smartypants) return text; + return text + .replace(/--/g, '—') + .replace(/'([^']*)'/g, '‘$1’') + .replace(/"([^"]*)"/g, '“$1”') + .replace(/\.{3}/g, '…'); }; -// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteWayAction.as -iD.actions.DeleteWay = function(wayId) { - function deleteNode(node, graph) { - return !graph.parentWays(node).length && - !graph.parentRelations(node).length && - !node.hasInterestingTags(); - } - var action = function(graph) { - var way = graph.entity(wayId); +/** + * Mangle Links + */ - graph.parentRelations(way) - .forEach(function(parent) { - parent = parent.removeMembersWithID(wayId); - graph = graph.replace(parent); +InlineLexer.prototype.mangle = function(text) { + var out = '' + , l = text.length + , i = 0 + , ch; - if (parent.isDegenerate()) { - graph = iD.actions.DeleteRelation(parent.id)(graph); - } - }); + for (; i < l; i++) { + ch = text.charCodeAt(i); + if (Math.random() > 0.5) { + ch = 'x' + ch.toString(16); + } + out += '&#' + ch + ';'; + } - _.uniq(way.nodes).forEach(function(nodeId) { - graph = graph.replace(way.removeNode(nodeId)); + return out; +}; - var node = graph.entity(nodeId); - if (deleteNode(node, graph)) { - graph = graph.remove(node); - } - }); +/** + * Parsing & Compiling + */ - return graph.remove(way); - }; +function Parser(options) { + this.tokens = []; + this.token = null; + this.options = options || marked.defaults; +} - action.disabled = function() { - return false; - }; +/** + * Static Parse Method + */ - return action; +Parser.parse = function(src, options) { + var parser = new Parser(options); + return parser.parse(src); }; -iD.actions.DeprecateTags = function(entityId) { - return function(graph) { - var entity = graph.entity(entityId), - newtags = _.clone(entity.tags), - change = false, - rule; - - // This handles deprecated tags with a single condition - for (var i = 0; i < iD.data.deprecated.length; i++) { - - rule = iD.data.deprecated[i]; - var match = _.pairs(rule.old)[0], - replacements = rule.replace ? _.pairs(rule.replace) : null; - if (entity.tags[match[0]] && match[1] === '*') { +/** + * Parse Loop + */ - var value = entity.tags[match[0]]; - if (replacements && !newtags[replacements[0][0]]) { - newtags[replacements[0][0]] = value; - } - delete newtags[match[0]]; - change = true; +Parser.prototype.parse = function(src) { + this.inline = new InlineLexer(src.links, this.options); + this.tokens = src.reverse(); - } else if (entity.tags[match[0]] === match[1]) { - newtags = _.assign({}, rule.replace || {}, _.omit(newtags, match[0])); - change = true; - } - } + var out = ''; + while (this.next()) { + out += this.tok(); + } - if (change) { - return graph.replace(entity.update({tags: newtags})); - } else { - return graph; - } - }; + return out; }; -iD.actions.DiscardTags = function(difference) { - return function(graph) { - function discardTags(entity) { - if (!_.isEmpty(entity.tags)) { - var tags = {}; - _.each(entity.tags, function(v, k) { - if (v) tags[k] = v; - }); - - graph = graph.replace(entity.update({ - tags: _.omit(tags, iD.data.discarded) - })); - } - } - difference.modified().forEach(discardTags); - difference.created().forEach(discardTags); +/** + * Next Token + */ - return graph; - }; +Parser.prototype.next = function() { + return this.token = this.tokens.pop(); }; -// Disconect the ways at the given node. -// -// Optionally, disconnect only the given ways. -// -// For testing convenience, accepts an ID to assign to the (first) new node. -// Normally, this will be undefined and the way will automatically -// be assigned a new ID. -// -// This is the inverse of `iD.actions.Connect`. -// -// Reference: -// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/UnjoinNodeAction.as -// https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/UnGlueAction.java -// -iD.actions.Disconnect = function(nodeId, newNodeId) { - var wayIds; - - var action = function(graph) { - var node = graph.entity(nodeId), - replacements = action.replacements(graph); - - replacements.forEach(function(replacement) { - var newNode = iD.Node({id: newNodeId, loc: node.loc, tags: node.tags}); - graph = graph.replace(newNode); - graph = graph.replace(graph.entity(replacement.wayID).updateNode(newNode.id, replacement.index)); - }); - return graph; - }; +/** + * Preview Next Token + */ - action.replacements = function(graph) { - var candidates = [], - keeping = false, - parents = graph.parentWays(graph.entity(nodeId)); +Parser.prototype.peek = function() { + return this.tokens[this.tokens.length-1] || 0; +}; - parents.forEach(function(parent) { - if (wayIds && wayIds.indexOf(parent.id) === -1) { - keeping = true; - return; - } +/** + * Parse Text Tokens + */ - parent.nodes.forEach(function(waynode, index) { - if (waynode === nodeId) { - candidates.push({wayID: parent.id, index: index}); - } - }); - }); +Parser.prototype.parseText = function() { + var body = this.token.text; - return keeping ? candidates : candidates.slice(1); - }; + while (this.peek().type === 'text') { + body += '\n' + this.next().text; + } - action.disabled = function(graph) { - var replacements = action.replacements(graph); - if (replacements.length === 0 || (wayIds && wayIds.length !== replacements.length)) - return 'not_connected'; - }; + return this.inline.output(body); +}; - action.limitWays = function(_) { - if (!arguments.length) return wayIds; - wayIds = _; - return action; - }; +/** + * Parse Current Token + */ - return action; -}; -// Join ways at the end node they share. -// -// This is the inverse of `iD.actions.Split`. -// -// Reference: -// https://github.com/systemed/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MergeWaysAction.as -// https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/CombineWayAction.java -// -iD.actions.Join = function(ids) { - - function groupEntitiesByGeometry(graph) { - var entities = ids.map(function(id) { return graph.entity(id); }); - return _.extend({line: []}, _.groupBy(entities, function(entity) { return entity.geometry(graph); })); +Parser.prototype.tok = function() { + switch (this.token.type) { + case 'space': { + return ''; } - - var action = function(graph) { - var ways = ids.map(graph.entity, graph), - survivor = ways[0]; - - // Prefer to keep an existing way. - for (var i = 0; i < ways.length; i++) { - if (!ways[i].isNew()) { - survivor = ways[i]; - break; - } + case 'hr': { + return '
    \n'; + } + case 'heading': { + return '' + + this.inline.output(this.token.text) + + '\n'; + } + case 'code': { + if (this.options.highlight) { + var code = this.options.highlight(this.token.text, this.token.lang); + if (code != null && code !== this.token.text) { + this.token.escaped = true; + this.token.text = code; } + } - var joined = iD.geo.joinWays(ways, graph)[0]; + if (!this.token.escaped) { + this.token.text = escape(this.token.text, true); + } - survivor = survivor.update({nodes: _.pluck(joined.nodes, 'id')}); - graph = graph.replace(survivor); + return '
    '
    +        + this.token.text
    +        + '
    \n'; + } + case 'table': { + var body = '' + , heading + , i + , row + , cell + , j; - joined.forEach(function(way) { - if (way.id === survivor.id) - return; + // header + body += '\n\n'; + for (i = 0; i < this.token.header.length; i++) { + heading = this.inline.output(this.token.header[i]); + body += this.token.align[i] + ? '' + heading + '\n' + : '' + heading + '\n'; + } + body += '\n\n'; - graph.parentRelations(way).forEach(function(parent) { - graph = graph.replace(parent.replaceMember(way, survivor)); - }); + // body + body += '\n' + for (i = 0; i < this.token.cells.length; i++) { + row = this.token.cells[i]; + body += '\n'; + for (j = 0; j < row.length; j++) { + cell = this.inline.output(row[j]); + body += this.token.align[j] + ? '' + cell + '\n' + : '' + cell + '\n'; + } + body += '\n'; + } + body += '\n'; - survivor = survivor.mergeTags(way.tags); + return '\n' + + body + + '
    \n'; + } + case 'blockquote_start': { + var body = ''; - graph = graph.replace(survivor); - graph = iD.actions.DeleteWay(way.id)(graph); - }); + while (this.next().type !== 'blockquote_end') { + body += this.tok(); + } - return graph; - }; + return '
    \n' + + body + + '
    \n'; + } + case 'list_start': { + var type = this.token.ordered ? 'ol' : 'ul' + , body = ''; - action.disabled = function(graph) { - var geometries = groupEntitiesByGeometry(graph); - if (ids.length < 2 || ids.length !== geometries.line.length) - return 'not_eligible'; + while (this.next().type !== 'list_end') { + body += this.tok(); + } - var joined = iD.geo.joinWays(ids.map(graph.entity, graph), graph); - if (joined.length > 1) - return 'not_adjacent'; + return '<' + + type + + '>\n' + + body + + '\n'; + } + case 'list_item_start': { + var body = ''; - var nodeIds = _.pluck(joined[0].nodes, 'id').slice(1, -1), - relation; + while (this.next().type !== 'list_item_end') { + body += this.token.type === 'text' + ? this.parseText() + : this.tok(); + } - joined[0].forEach(function(way) { - var parents = graph.parentRelations(way); - parents.forEach(function(parent) { - if (parent.isRestriction() && parent.members.some(function(m) { return nodeIds.indexOf(m.id) >= 0; })) - relation = parent; - }); - }); + return '
  • ' + + body + + '
  • \n'; + } + case 'loose_item_start': { + var body = ''; - if (relation) - return 'restriction'; - }; + while (this.next().type !== 'list_item_end') { + body += this.tok(); + } - return action; -}; -iD.actions.Merge = function(ids) { - function groupEntitiesByGeometry(graph) { - var entities = ids.map(function(id) { return graph.entity(id); }); - return _.extend({point: [], area: [], line: [], relation: []}, - _.groupBy(entities, function(entity) { return entity.geometry(graph); })); + return '
  • ' + + body + + '
  • \n'; + } + case 'html': { + return !this.token.pre && !this.options.pedantic + ? this.inline.output(this.token.text) + : this.token.text; + } + case 'paragraph': { + return '

    ' + + this.inline.output(this.token.text) + + '

    \n'; } + case 'text': { + return '

    ' + + this.parseText() + + '

    \n'; + } + } +}; - var action = function(graph) { - var geometries = groupEntitiesByGeometry(graph), - target = geometries.area[0] || geometries.line[0], - points = geometries.point; +/** + * Helpers + */ - points.forEach(function(point) { - target = target.mergeTags(point.tags); +function escape(html, encode) { + return html + .replace(!encode ? /&(?!#?\w+;)/g : /&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); +} - graph.parentRelations(point).forEach(function(parent) { - graph = graph.replace(parent.replaceMember(point, target)); - }); +function replace(regex, opt) { + regex = regex.source; + opt = opt || ''; + return function self(name, val) { + if (!name) return new RegExp(regex, opt); + val = val.source || val; + val = val.replace(/(^|[^\[])\^/g, '$1'); + regex = regex.replace(name, val); + return self; + }; +} - graph = graph.remove(point); - }); +function noop() {} +noop.exec = noop; - graph = graph.replace(target); +function merge(obj) { + var i = 1 + , target + , key; - return graph; - }; + for (; i < arguments.length; i++) { + target = arguments[i]; + for (key in target) { + if (Object.prototype.hasOwnProperty.call(target, key)) { + obj[key] = target[key]; + } + } + } - action.disabled = function(graph) { - var geometries = groupEntitiesByGeometry(graph); - if (geometries.point.length === 0 || - (geometries.area.length + geometries.line.length) !== 1 || - geometries.relation.length !== 0) - return 'not_eligible'; - }; + return obj; +} - return action; -}; -iD.actions.MergePolygon = function(ids, newRelationId) { +/** + * Marked + */ - function groupEntities(graph) { - var entities = ids.map(function (id) { return graph.entity(id); }); - return _.extend({ - closedWay: [], - multipolygon: [], - other: [] - }, _.groupBy(entities, function(entity) { - if (entity.type === 'way' && entity.isClosed()) { - return 'closedWay'; - } else if (entity.type === 'relation' && entity.isMultipolygon()) { - return 'multipolygon'; - } else { - return 'other'; - } - })); +function marked(src, opt, callback) { + if (callback || typeof opt === 'function') { + if (!callback) { + callback = opt; + opt = null; } - var action = function(graph) { - var entities = groupEntities(graph); + if (opt) opt = merge({}, marked.defaults, opt); - // An array representing all the polygons that are part of the multipolygon. - // - // Each element is itself an array of objects with an id property, and has a - // locs property which is an array of the locations forming the polygon. - var polygons = entities.multipolygon.reduce(function(polygons, m) { - return polygons.concat(iD.geo.joinWays(m.members, graph)); - }, []).concat(entities.closedWay.map(function(d) { - var member = [{id: d.id}]; - member.nodes = graph.childNodes(d); - return member; - })); + var tokens = Lexer.lex(tokens, opt) + , highlight = opt.highlight + , pending = 0 + , l = tokens.length + , i = 0; - // contained is an array of arrays of boolean values, - // where contained[j][k] is true iff the jth way is - // contained by the kth way. - var contained = polygons.map(function(w, i) { - return polygons.map(function(d, n) { - if (i === n) return null; - return iD.geo.polygonContainsPolygon( - _.pluck(d.nodes, 'loc'), - _.pluck(w.nodes, 'loc')); - }); + if (!highlight || highlight.length < 3) { + return callback(null, Parser.parse(tokens, opt)); + } + + var done = function() { + delete opt.highlight; + var out = Parser.parse(tokens, opt); + opt.highlight = highlight; + return callback(null, out); + }; + + for (; i < l; i++) { + (function(token) { + if (token.type !== 'code') return; + pending++; + return highlight(token.text, token.lang, function(err, code) { + if (code == null || code === token.text) { + return --pending || done(); + } + token.text = code; + token.escaped = true; + --pending || done(); }); + })(tokens[i]); + } - // Sort all polygons as either outer or inner ways - var members = [], - outer = true; + return; + } + try { + if (opt) opt = merge({}, marked.defaults, opt); + return Parser.parse(Lexer.lex(src, opt), opt); + } catch (e) { + e.message += '\nPlease report this to https://github.com/chjj/marked.'; + if ((opt || marked.defaults).silent) { + return '

    An error occured:

    '
    +        + escape(e.message + '', true)
    +        + '
    '; + } + throw e; + } +} - while (polygons.length) { - extractUncontained(polygons); - polygons = polygons.filter(isContained); - contained = contained.filter(isContained).map(filterContained); - } +/** + * Options + */ - function isContained(d, i) { - return _.any(contained[i]); - } +marked.options = +marked.setOptions = function(opt) { + merge(marked.defaults, opt); + return marked; +}; - function filterContained(d) { - return d.filter(isContained); - } +marked.defaults = { + gfm: true, + tables: true, + breaks: false, + pedantic: false, + sanitize: false, + smartLists: false, + silent: false, + highlight: null, + langPrefix: 'lang-' +}; - function extractUncontained(polygons) { - polygons.forEach(function(d, i) { - if (!isContained(d, i)) { - d.forEach(function(member) { - members.push({ - type: 'way', - id: member.id, - role: outer ? 'outer' : 'inner' - }); - }); - } - }); - outer = !outer; - } +/** + * Expose + */ - // Move all tags to one relation - var relation = entities.multipolygon[0] || - iD.Relation({ id: newRelationId, tags: { type: 'multipolygon' }}); +marked.Parser = Parser; +marked.parser = Parser.parse; - entities.multipolygon.slice(1).forEach(function(m) { - relation = relation.mergeTags(m.tags); - graph = graph.remove(m); - }); +marked.Lexer = Lexer; +marked.lexer = Lexer.lex; - entities.closedWay.forEach(function(way) { - function isThisOuter(m) { - return m.id === way.id && m.role !== 'inner'; - } - if (members.some(isThisOuter)) { - relation = relation.mergeTags(way.tags); - graph = graph.replace(way.update({ tags: {} })); - } - }); +marked.InlineLexer = InlineLexer; +marked.inlineLexer = InlineLexer.output; - return graph.replace(relation.update({ - members: members, - tags: _.omit(relation.tags, 'area') - })); - }; +marked.parse = marked; - action.disabled = function(graph) { - var entities = groupEntities(graph); - if (entities.other.length > 0 || - entities.closedWay.length + entities.multipolygon.length < 2) - return 'not_eligible'; - if (!entities.multipolygon.every(function(r) { return r.isComplete(graph); })) - return 'incomplete_relation'; +if (typeof exports === 'object') { + module.exports = marked; +} else if (typeof define === 'function' && define.amd) { + define(function() { return marked; }); +} else { + this.marked = marked; +} + +}).call(function() { + return this || (typeof window !== 'undefined' ? window : global); +}()); +(function () { +'use strict'; +window.iD = function () { + window.locale.en = iD.data.en; + window.locale.current('en'); + + var dispatch = d3.dispatch('enter', 'exit'), + context = {}; + + // https://github.com/openstreetmap/iD/issues/772 + // http://mathiasbynens.be/notes/localstorage-pattern#comment-9 + var storage; + try { storage = localStorage; } catch (e) {} // eslint-disable-line no-empty + storage = storage || (function() { + var s = {}; + return { + getItem: function(k) { return s[k]; }, + setItem: function(k, v) { s[k] = v; }, + removeItem: function(k) { delete s[k]; } + }; + })(); + + context.storage = function(k, v) { + try { + if (arguments.length === 1) return storage.getItem(k); + else if (v === null) storage.removeItem(k); + else storage.setItem(k, v); + } catch(e) { + // localstorage quota exceeded + /* eslint-disable no-console */ + if (typeof console !== 'undefined') console.error('localStorage quota exceeded'); + /* eslint-enable no-console */ + } }; - return action; -}; -// https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/command/MoveCommand.java -// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MoveNodeAction.as -iD.actions.Move = function(ids, delta, projection) { - function addNodes(ids, nodes, graph) { - ids.forEach(function(id) { - var entity = graph.entity(id); - if (entity.type === 'node') { - nodes.push(id); - } else if (entity.type === 'way') { - nodes.push.apply(nodes, entity.nodes); - } else { - addNodes(_.pluck(entity.members, 'id'), nodes, graph); - } - }); - } - var action = function(graph) { - var nodes = []; + /* Straight accessors. Avoid using these if you can. */ + var ui, connection, history; + context.ui = function() { return ui; }; + context.connection = function() { return connection; }; + context.history = function() { return history; }; - addNodes(ids, nodes, graph); - _.uniq(nodes).forEach(function(id) { - var node = graph.entity(id), - start = projection(node.loc), - end = projection.invert([start[0] + delta[0], start[1] + delta[1]]); - graph = graph.replace(node.move(end)); - }); + /* Connection */ + function entitiesLoaded(err, result) { + if (!err) history.merge(result.data, result.extent); + } - return graph; + context.preauth = function(options) { + connection.switch(options); + return context; }; - action.disabled = function(graph) { - function incompleteRelation(id) { - var entity = graph.entity(id); - return entity.type === 'relation' && !entity.isComplete(graph); + context.loadTiles = function(projection, dimensions, callback) { + function done(err, result) { + entitiesLoaded(err, result); + if (callback) callback(err, result); } - - if (_.any(ids, incompleteRelation)) - return 'incomplete_relation'; + connection.loadTiles(projection, dimensions, done); }; - return action; -}; -// https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/command/MoveCommand.java -// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MoveNodeAction.as -iD.actions.MoveNode = function(nodeId, loc) { - return function(graph) { - return graph.replace(graph.entity(nodeId).move(loc)); - }; -}; -iD.actions.Noop = function() { - return function(graph) { - return graph; + context.loadEntity = function(id, callback) { + function done(err, result) { + entitiesLoaded(err, result); + if (callback) callback(err, result); + } + connection.loadEntity(id, done); }; -}; -/* - * Based on https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/potlatch2/tools/Quadrilateralise.as - */ - -iD.actions.Orthogonalize = function(wayId, projection) { - var threshold = 12, // degrees within right or straight to alter - lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180), - upperThreshold = Math.cos(threshold * Math.PI / 180); - - var action = function(graph) { - var way = graph.entity(wayId), - nodes = graph.childNodes(way), - points = _.uniq(nodes).map(function(n) { return projection(n.loc); }), - corner = {i: 0, dotp: 1}, - epsilon = 1e-4, - i, j, score, motions; - if (nodes.length === 4) { - for (i = 0; i < 1000; i++) { - motions = points.map(calcMotion); - points[corner.i] = addPoints(points[corner.i],motions[corner.i]); - score = corner.dotp; - if (score < epsilon) { - break; - } - } + context.zoomToEntity = function(id, zoomTo) { + if (zoomTo !== false) { + this.loadEntity(id, function(err, result) { + if (err) return; + var entity = _.find(result.data, function(e) { return e.id === id; }); + if (entity) { map.zoomTo(entity); } + }); + } - graph = graph.replace(graph.entity(nodes[corner.i].id) - .move(projection.invert(points[corner.i]))); - } else { - var best, - originalPoints = _.clone(points); - score = Infinity; + map.on('drawn.zoomToEntity', function() { + if (!context.hasEntity(id)) return; + map.on('drawn.zoomToEntity', null); + context.on('enter.zoomToEntity', null); + context.enter(iD.modes.Select(context, [id])); + }); - for (i = 0; i < 1000; i++) { - motions = points.map(calcMotion); - for (j = 0; j < motions.length; j++) { - points[j] = addPoints(points[j],motions[j]); - } - var newScore = squareness(points); - if (newScore < score) { - best = _.clone(points); - score = newScore; - } - if (score < epsilon) { - break; - } + context.on('enter.zoomToEntity', function() { + if (mode.id !== 'browse') { + map.on('drawn.zoomToEntity', null); + context.on('enter.zoomToEntity', null); } + }); + }; - points = best; - - for (i = 0; i < points.length; i++) { - // only move the points that actually moved - if (originalPoints[i][0] !== points[i][0] || originalPoints[i][1] !== points[i][1]) { - graph = graph.replace(graph.entity(nodes[i].id) - .move(projection.invert(points[i]))); - } - } + var minEditableZoom = 16; + context.minEditableZoom = function(_) { + if (!arguments.length) return minEditableZoom; + minEditableZoom = _; + connection.tileZoom(_); + return context; + }; - // remove empty nodes on straight sections - for (i = 0; i < points.length; i++) { - var node = nodes[i]; - if (graph.parentWays(node).length > 1 || - graph.parentRelations(node).length || - node.hasInterestingTags()) { + /* History */ + var inIntro = false; + context.inIntro = function(_) { + if (!arguments.length) return inIntro; + inIntro = _; + return context; + }; - continue; - } + context.save = function() { + if (inIntro || (mode && mode.id === 'save')) return; + history.save(); + if (history.hasChanges()) return t('save.unsaved_changes'); + }; - var dotp = normalizedDotProduct(i, points); - if (dotp < -1 + epsilon) { - graph = iD.actions.DeleteNode(nodes[i].id)(graph); - } - } - } + context.flush = function() { + context.debouncedSave.cancel(); + connection.flush(); + features.reset(); + history.reset(); + _.each(iD.services, function(service) { + var reset = service().reset; + if (reset) reset(context); + }); + return context; + }; - return graph; - function calcMotion(b, i, array) { - var a = array[(i - 1 + array.length) % array.length], - c = array[(i + 1) % array.length], - p = subtractPoints(a, b), - q = subtractPoints(c, b), - scale, dotp; + /* Graph */ + context.hasEntity = function(id) { + return history.graph().hasEntity(id); + }; + context.entity = function(id) { + return history.graph().entity(id); + }; + context.childNodes = function(way) { + return history.graph().childNodes(way); + }; + context.geometry = function(id) { + return context.entity(id).geometry(history.graph()); + }; - scale = 2 * Math.min(iD.geo.euclideanDistance(p, [0, 0]), iD.geo.euclideanDistance(q, [0, 0])); - p = normalizePoint(p, 1.0); - q = normalizePoint(q, 1.0); - dotp = filterDotProduct(p[0] * q[0] + p[1] * q[1]); + /* Modes */ + var mode; + context.mode = function() { + return mode; + }; + context.enter = function(newMode) { + if (mode) { + mode.exit(); + dispatch.exit(mode); + } - // nasty hack to deal with almost-straight segments (angle is closer to 180 than to 90/270). - if (array.length > 3) { - if (dotp < -0.707106781186547) { - dotp += 1.0; - } - } else if (dotp && Math.abs(dotp) < corner.dotp) { - corner.i = i; - corner.dotp = Math.abs(dotp); - } + mode = newMode; + mode.enter(); + dispatch.enter(mode); + }; - return normalizePoint(addPoints(p, q), 0.1 * dotp * scale); + context.selectedIDs = function() { + if (mode && mode.selectedIDs) { + return mode.selectedIDs(); + } else { + return []; } }; - function squareness(points) { - return points.reduce(function(sum, val, i, array) { - var dotp = normalizedDotProduct(i, array); - dotp = filterDotProduct(dotp); - return sum + 2.0 * Math.min(Math.abs(dotp - 1.0), Math.min(Math.abs(dotp), Math.abs(dotp + 1))); - }, 0); - } + /* Behaviors */ + context.install = function(behavior) { + context.surface().call(behavior); + }; + context.uninstall = function(behavior) { + context.surface().call(behavior.off); + }; - function normalizedDotProduct(i, points) { - var a = points[(i - 1 + points.length) % points.length], - b = points[i], - c = points[(i + 1) % points.length], - p = subtractPoints(a, b), - q = subtractPoints(c, b); - p = normalizePoint(p, 1.0); - q = normalizePoint(q, 1.0); + /* Copy/Paste */ + var copyIDs = [], copyGraph; + context.copyGraph = function() { return copyGraph; }; + context.copyIDs = function(_) { + if (!arguments.length) return copyIDs; + copyIDs = _; + copyGraph = history.graph(); + return context; + }; - return p[0] * q[0] + p[1] * q[1]; - } - function subtractPoints(a, b) { - return [a[0] - b[0], a[1] - b[1]]; - } + /* Background */ + var background; + context.background = function() { return background; }; - function addPoints(a, b) { - return [a[0] + b[0], a[1] + b[1]]; - } - function normalizePoint(point, scale) { - var vector = [0, 0]; - var length = Math.sqrt(point[0] * point[0] + point[1] * point[1]); - if (length !== 0) { - vector[0] = point[0] / length; - vector[1] = point[1] / length; - } + /* Features */ + var features; + context.features = function() { return features; }; + context.hasHiddenConnections = function(id) { + var graph = history.graph(), + entity = graph.entity(id); + return features.hasHiddenConnections(entity, graph); + }; - vector[0] *= scale; - vector[1] *= scale; - return vector; - } + /* Map */ + var map; + context.map = function() { return map; }; + context.layers = function() { return map.layers; }; + context.surface = function() { return map.surface; }; + context.editable = function() { return map.editable(); }; - function filterDotProduct(dotp) { - if (lowerThreshold > Math.abs(dotp) || Math.abs(dotp) > upperThreshold) { - return dotp; - } + context.surfaceRect = function() { + // Work around a bug in Firefox. + // http://stackoverflow.com/questions/18153989/ + // https://bugzilla.mozilla.org/show_bug.cgi?id=530985 + return context.surface().node().parentNode.getBoundingClientRect(); + }; - return 0; - } - action.disabled = function(graph) { - var way = graph.entity(wayId), - nodes = graph.childNodes(way), - points = _.uniq(nodes).map(function(n) { return projection(n.loc); }); + /* Presets */ + var presets; + context.presets = function(_) { + if (!arguments.length) return presets; + presets.load(_); + iD.areaKeys = presets.areaKeys(); + return context; + }; - if (squareness(points)) { - return false; - } - return 'not_squarish'; + /* Imagery */ + context.imagery = function(_) { + background.load(_); + return context; }; - return action; -}; -/* - Order the nodes of a way in reverse order and reverse any direction dependent tags - other than `oneway`. (We assume that correcting a backwards oneway is the primary - reason for reversing a way.) - - The following transforms are performed: - Keys: - *:right=* ⟺ *:left=* - *:forward=* ⟺ *:backward=* - direction=up ⟺ direction=down - incline=up ⟺ incline=down - *=right ⟺ *=left + /* Container */ + var container, embed; + context.container = function(_) { + if (!arguments.length) return container; + container = _; + container.classed('id-container', true); + return context; + }; + context.embed = function(_) { + if (!arguments.length) return embed; + embed = _; + return context; + }; - Relation members: - role=forward ⟺ role=backward - role=north ⟺ role=south - role=east ⟺ role=west - In addition, numeric-valued `incline` tags are negated. + /* Taginfo */ + var taginfo; + context.taginfo = function(_) { + if (!arguments.length) return taginfo; + taginfo = _; + return context; + }; - The JOSM implementation was used as a guide, but transformations that were of unclear benefit - or adjusted tags that don't seem to be used in practice were omitted. - References: - http://wiki.openstreetmap.org/wiki/Forward_%26_backward,_left_%26_right - http://wiki.openstreetmap.org/wiki/Key:direction#Steps - http://wiki.openstreetmap.org/wiki/Key:incline - http://wiki.openstreetmap.org/wiki/Route#Members - http://josm.openstreetmap.de/browser/josm/trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java - */ -iD.actions.Reverse = function(wayId) { - var replacements = [ - [/:right$/, ':left'], [/:left$/, ':right'], - [/:forward$/, ':backward'], [/:backward$/, ':forward'] - ], - numeric = /^([+\-]?)(?=[\d.])/, - roleReversals = { - forward: 'backward', - backward: 'forward', - north: 'south', - south: 'north', - east: 'west', - west: 'east' - }; + /* Assets */ + var assetPath = ''; + context.assetPath = function(_) { + if (!arguments.length) return assetPath; + assetPath = _; + return context; + }; - function reverseKey(key) { - for (var i = 0; i < replacements.length; ++i) { - var replacement = replacements[i]; - if (replacement[0].test(key)) { - return key.replace(replacement[0], replacement[1]); - } + var assetMap = {}; + context.assetMap = function(_) { + if (!arguments.length) return assetMap; + assetMap = _; + return context; + }; + + context.asset = function(_) { + var filename = assetPath + _; + return assetMap[filename] || filename; + }; + + context.imagePath = function(_) { + return context.asset('img/' + _); + }; + + var locale, localePath; + context.locale = function(loc, path) { + locale = loc; + localePath = path; + + // Also set iD.detect().locale (unless we detected 'en-us' and openstreetmap wants 'en').. + if (!(loc.toLowerCase() === 'en' && iD.detect().locale.toLowerCase() === 'en-us')) { + iD.detect().locale = loc; } - return key; - } - function reverseValue(key, value) { - if (key === 'incline' && numeric.test(value)) { - return value.replace(numeric, function(_, sign) { return sign === '-' ? '' : '-'; }); - } else if (key === 'incline' || key === 'direction') { - return {up: 'down', down: 'up'}[value] || value; + return context; + }; + + context.loadLocale = function(cb) { + if (locale && locale !== 'en' && iD.data.locales.indexOf(locale) !== -1) { + localePath = localePath || context.asset('locales/' + locale + '.json'); + d3.json(localePath, function(err, result) { + window.locale[locale] = result; + window.locale.current(locale); + cb(); + }); } else { - return {left: 'right', right: 'left'}[value] || value; + cb(); } - } + }; - return function(graph) { - var way = graph.entity(wayId), - nodes = way.nodes.slice().reverse(), - tags = {}, key, role; - for (key in way.tags) { - tags[reverseKey(key)] = reverseValue(key, way.tags[key]); - } + /* Init */ - graph.parentRelations(way).forEach(function(relation) { - relation.members.forEach(function(member, index) { - if (member.id === way.id && (role = roleReversals[member.role])) { - relation = relation.updateMember({role: role}, index); - graph = graph.replace(relation); - } - }); - }); + context.projection = iD.geo.RawMercator(); - return graph.replace(way.update({nodes: nodes, tags: tags})); - }; -}; -iD.actions.RotateWay = function(wayId, pivot, angle, projection) { - return function(graph) { - return graph.update(function(graph) { - var way = graph.entity(wayId); + locale = iD.detect().locale; + if (locale && iD.data.locales.indexOf(locale) === -1) { + locale = locale.split('-')[0]; + } - _.unique(way.nodes).forEach(function(id) { + history = iD.History(context); + context.graph = history.graph; + context.changes = history.changes; + context.intersects = history.intersects; - var node = graph.entity(id), - point = projection(node.loc), - radial = [0,0]; + // Debounce save, since it's a synchronous localStorage write, + // and history changes can happen frequently (e.g. when dragging). + context.debouncedSave = _.debounce(context.save, 350); + function withDebouncedSave(fn) { + return function() { + var result = fn.apply(history, arguments); + context.debouncedSave(); + return result; + }; + } - radial[0] = point[0] - pivot[0]; - radial[1] = point[1] - pivot[1]; + context.perform = withDebouncedSave(history.perform); + context.replace = withDebouncedSave(history.replace); + context.pop = withDebouncedSave(history.pop); + context.overwrite = withDebouncedSave(history.overwrite); + context.undo = withDebouncedSave(history.undo); + context.redo = withDebouncedSave(history.redo); - point = [ - radial[0] * Math.cos(angle) - radial[1] * Math.sin(angle) + pivot[0], - radial[0] * Math.sin(angle) + radial[1] * Math.cos(angle) + pivot[1] - ]; + ui = iD.ui(context); - graph = graph.replace(node.move(projection.invert(point))); + connection = iD.Connection(); - }); + background = iD.Background(context); - }); - }; + features = iD.Features(context); + + map = iD.Map(context); + context.mouse = map.mouse; + context.extent = map.extent; + context.pan = map.pan; + context.zoomIn = map.zoomIn; + context.zoomOut = map.zoomOut; + context.zoomInFurther = map.zoomInFurther; + context.zoomOutFurther = map.zoomOutFurther; + context.redrawEnable = map.redrawEnable; + + presets = iD.presets(); + + return d3.rebind(context, dispatch, 'on'); }; -// Split a way at the given node. -// -// Optionally, split only the given ways, if multiple ways share -// the given node. -// -// This is the inverse of `iD.actions.Join`. -// -// For testing convenience, accepts an ID to assign to the new way. -// Normally, this will be undefined and the way will automatically -// be assigned a new ID. -// -// Reference: -// https://github.com/systemed/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/SplitWayAction.as -// -iD.actions.Split = function(nodeId, newWayIds) { - var wayIds; - // if the way is closed, we need to search for a partner node - // to split the way at. - // - // The following looks for a node that is both far away from - // the initial node in terms of way segment length and nearby - // in terms of beeline-distance. This assures that areas get - // split on the most "natural" points (independent of the number - // of nodes). - // For example: bone-shaped areas get split across their waist - // line, circles across the diameter. - function splitArea(nodes, idxA, graph) { - var lengths = new Array(nodes.length), - length, - i, - best = 0, - idxB; - function wrap(index) { - return iD.util.wrap(index, nodes.length); - } +iD.version = '1.9.1'; - function dist(nA, nB) { - return iD.geo.sphericalDistance(graph.entity(nA).loc, graph.entity(nB).loc); - } +(function() { + var detected = {}; - // calculate lengths - length = 0; - for (i = wrap(idxA+1); i !== idxA; i = wrap(i+1)) { - length += dist(nodes[i], nodes[wrap(i-1)]); - lengths[i] = length; - } + var ua = navigator.userAgent, + m = null; - length = 0; - for (i = wrap(idxA-1); i !== idxA; i = wrap(i-1)) { - length += dist(nodes[i], nodes[wrap(i+1)]); - if (length < lengths[i]) - lengths[i] = length; + m = ua.match(/(edge)\/?\s*(\.?\d+(\.\d+)*)/i); // Edge + if (m !== null) { + detected.browser = m[1]; + detected.version = m[2]; + } + if (!detected.browser) { + m = ua.match(/Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/i); // IE11 + if (m !== null) { + detected.browser = 'msie'; + detected.version = m[1]; } - - // determine best opposite node to split - for (i = 0; i < nodes.length; i++) { - var cost = lengths[i] / dist(nodes[idxA], nodes[i]); - if (cost > best) { - idxB = i; - best = cost; - } + } + if (!detected.browser) { + m = ua.match(/(opr)\/?\s*(\.?\d+(\.\d+)*)/i); // Opera 15+ + if (m !== null) { + detected.browser = 'Opera'; + detected.version = m[2]; + } + } + if (!detected.browser) { + m = ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i); + if (m !== null) { + detected.browser = m[1]; + detected.version = m[2]; + m = ua.match(/version\/([\.\d]+)/i); + if (m !== null) detected.version = m[1]; } - - return idxB; + } + if (!detected.browser) { + detected.browser = navigator.appName; + detected.version = navigator.appVersion; } - function split(graph, wayA, newWayId) { - var wayB = iD.Way({id: newWayId, tags: wayA.tags}), - nodesA, - nodesB, - isArea = wayA.isArea(), - isOuter = iD.geo.isSimpleMultipolygonOuterMember(wayA, graph); + // keep major.minor version only.. + detected.version = detected.version.split(/\W/).slice(0,2).join('.'); - if (wayA.isClosed()) { - var nodes = wayA.nodes.slice(0, -1), - idxA = _.indexOf(nodes, nodeId), - idxB = splitArea(nodes, idxA, graph); + if (detected.browser.toLowerCase() === 'msie') { + detected.ie = true; + detected.browser = 'Internet Explorer'; + detected.support = parseFloat(detected.version) >= 11; + } else { + detected.ie = false; + detected.support = true; + } - if (idxB < idxA) { - nodesA = nodes.slice(idxA).concat(nodes.slice(0, idxB + 1)); - nodesB = nodes.slice(idxB, idxA + 1); - } else { - nodesA = nodes.slice(idxA, idxB + 1); - nodesB = nodes.slice(idxB).concat(nodes.slice(0, idxA + 1)); - } - } else { - var idx = _.indexOf(wayA.nodes, nodeId, 1); - nodesA = wayA.nodes.slice(0, idx + 1); - nodesB = wayA.nodes.slice(idx); - } + // Added due to incomplete svg style support. See #715 + detected.opera = (detected.browser.toLowerCase() === 'opera' && parseFloat(detected.version) < 15 ); - wayA = wayA.update({nodes: nodesA}); - wayB = wayB.update({nodes: nodesB}); + detected.locale = (navigator.languages && navigator.languages.length) + ? navigator.languages[0] : (navigator.language || navigator.userLanguage || 'en-US'); - graph = graph.replace(wayA); - graph = graph.replace(wayB); + detected.filedrop = (window.FileReader && 'ondrop' in window); - graph.parentRelations(wayA).forEach(function(relation) { - if (relation.isRestriction()) { - var via = relation.memberByRole('via'); - if (via && wayB.contains(via.id)) { - relation = relation.updateMember({id: wayB.id}, relation.memberById(wayA.id).index); - graph = graph.replace(relation); - } - } else { - if (relation === isOuter) { - graph = graph.replace(relation.mergeTags(wayA.tags)); - graph = graph.replace(wayA.update({tags: {}})); - graph = graph.replace(wayB.update({tags: {}})); - } + function nav(x) { + return navigator.userAgent.indexOf(x) !== -1; + } - var member = { - id: wayB.id, - type: 'way', - role: relation.memberById(wayA.id).role - }; + if (nav('Win')) { + detected.os = 'win'; + detected.platform = 'Windows'; + } + else if (nav('Mac')) { + detected.os = 'mac'; + detected.platform = 'Macintosh'; + } + else if (nav('X11') || nav('Linux')) { + detected.os = 'linux'; + detected.platform = 'Linux'; + } + else { + detected.os = 'win'; + detected.platform = 'Unknown'; + } - graph = iD.actions.AddMember(relation.id, member)(graph); - } - }); + iD.detect = function() { return detected; }; +})(); +iD.services = {}; +iD.services.mapillary = function() { + var mapillary = {}, + dispatch = d3.dispatch('loadedImages', 'loadedSigns'), + apibase = 'https://a.mapillary.com/v2/', + urlImage = 'https://www.mapillary.com/map/im/', + urlThumb = 'https://d1cuyjsrcm0gby.cloudfront.net/', + clientId = 'NzNRM2otQkR2SHJzaXJmNmdQWVQ0dzo1ZWYyMmYwNjdmNDdlNmVi', + maxResults = 1000, + tileZoom = 14; + + + function loadSignStyles(context) { + d3.select('head').selectAll('#traffico') + .data([0]) + .enter() + .append('link') + .attr('id', 'traffico') + .attr('rel', 'stylesheet') + .attr('href', context.asset('traffico/stylesheets/traffico.css')); + } + + function loadSignDefs(context) { + if (!iD.services.mapillary.sign_defs) { + iD.services.mapillary.sign_defs = {}; + _.each(['au', 'br', 'ca', 'de', 'us'], function(region) { + d3.json(context.asset('traffico/string-maps/' + region + '-map.json'), function(err, data) { + if (err) return; + if (region === 'de') region = 'eu'; + iD.services.mapillary.sign_defs[region] = data; + }); + }); + } + } - if (!isOuter && isArea) { - var multipolygon = iD.Relation({ - tags: _.extend({}, wayA.tags, {type: 'multipolygon'}), - members: [ - {id: wayA.id, role: 'outer', type: 'way'}, - {id: wayB.id, role: 'outer', type: 'way'} - ]}); + function abortRequest(i) { + i.abort(); + } - graph = graph.replace(multipolygon); - graph = graph.replace(wayA.update({tags: {}})); - graph = graph.replace(wayB.update({tags: {}})); - } + function getTiles(projection, dimensions) { + var s = projection.scale() * 2 * Math.PI, + z = Math.max(Math.log(s) / Math.log(2) - 8, 0), + ts = 256 * Math.pow(2, z - tileZoom), + origin = [ + s / 2 - projection.translate()[0], + s / 2 - projection.translate()[1]]; - return graph; + return d3.geo.tile() + .scaleExtent([tileZoom, tileZoom]) + .scale(s) + .size(dimensions) + .translate(projection.translate())() + .map(function(tile) { + var x = tile[0] * ts - origin[0], + y = tile[1] * ts - origin[1]; + + return { + id: tile.toString(), + extent: iD.geo.Extent( + projection.invert([x, y + ts]), + projection.invert([x + ts, y])) + }; + }); } - var action = function(graph) { - var candidates = action.ways(graph); - for (var i = 0; i < candidates.length; i++) { - graph = split(graph, candidates[i], newWayIds && newWayIds[i]); - } - return graph; - }; - action.ways = function(graph) { - var node = graph.entity(nodeId), - parents = graph.parentWays(node), - hasLines = _.any(parents, function(parent) { return parent.geometry(graph) === 'line'; }); + function loadTiles(which, url, projection, dimensions) { + var tiles = getTiles(projection, dimensions); - return parents.filter(function(parent) { - if (wayIds && wayIds.indexOf(parent.id) === -1) - return false; + _.filter(which.inflight, function(v, k) { + var wanted = _.find(tiles, function(tile) { return k === (tile.id + ',0'); }); + if (!wanted) delete which.inflight[k]; + return !wanted; + }).map(abortRequest); - if (!wayIds && hasLines && parent.geometry(graph) !== 'line') - return false; + tiles.forEach(function(tile) { + loadTilePage(which, url, tile, 0); + }); + } - if (parent.isClosed()) { - return true; - } + function loadTilePage(which, url, tile, page) { + var cache = iD.services.mapillary.cache[which], + id = tile.id + ',' + String(page), + rect = tile.extent.rectangle(); - for (var i = 1; i < parent.nodes.length - 1; i++) { - if (parent.nodes[i] === nodeId) { - return true; + if (cache.loaded[id] || cache.inflight[id]) return; + + cache.inflight[id] = d3.json(url + + iD.util.qsString({ + geojson: 'true', + limit: maxResults, + page: page, + client_id: clientId, + min_lon: rect[0], + min_lat: rect[1], + max_lon: rect[2], + max_lat: rect[3] + }), function(err, data) { + cache.loaded[id] = true; + delete cache.inflight[id]; + if (err || !data.features || !data.features.length) return; + + var features = [], + feature, loc, d; + + for (var i = 0; i < data.features.length; i++) { + feature = data.features[i]; + loc = feature.geometry.coordinates; + d = { key: feature.properties.key, loc: loc }; + if (which === 'images') d.ca = feature.properties.ca; + if (which === 'signs') d.signs = feature.properties.rects; + + features.push([loc[0], loc[1], loc[0], loc[1], d]); + } + + cache.rtree.load(features); + + if (which === 'images') dispatch.loadedImages(); + if (which === 'signs') dispatch.loadedSigns(); + + if (data.features.length === maxResults) { + loadTilePage(which, url, tile, ++page); } } + ); + } - return false; + mapillary.loadImages = function(projection, dimensions) { + var url = apibase + 'search/im/geojson?'; + loadTiles('images', url, projection, dimensions); + }; + + mapillary.loadSigns = function(context, projection, dimensions) { + var url = apibase + 'search/im/geojson/or?'; + loadSignStyles(context); + loadSignDefs(context); + loadTiles('signs', url, projection, dimensions); + }; + + + // partition viewport into `psize` x `psize` regions + function partitionViewport(psize, projection, dimensions) { + psize = psize || 16; + var cols = d3.range(0, dimensions[0], psize), + rows = d3.range(0, dimensions[1], psize), + partitions = []; + + rows.forEach(function(y) { + cols.forEach(function(x) { + var min = [x, y + psize], + max = [x + psize, y]; + partitions.push( + iD.geo.Extent(projection.invert(min), projection.invert(max))); + }); }); + + return partitions; + } + + // no more than `limit` results per partition. + function searchLimited(psize, limit, projection, dimensions, rtree) { + limit = limit || 3; + + var partitions = partitionViewport(psize, projection, dimensions); + return _.flatten(_.compact(_.map(partitions, function(extent) { + return rtree.search(extent.rectangle()) + .slice(0, limit) + .map(function(d) { return d[4]; }); + }))); + } + + mapillary.images = function(projection, dimensions) { + var psize = 16, limit = 3; + return searchLimited(psize, limit, projection, dimensions, iD.services.mapillary.cache.images.rtree); }; - action.disabled = function(graph) { - var candidates = action.ways(graph); - if (candidates.length === 0 || (wayIds && wayIds.length !== candidates.length)) - return 'not_eligible'; + mapillary.signs = function(projection, dimensions) { + var psize = 32, limit = 3; + return searchLimited(psize, limit, projection, dimensions, iD.services.mapillary.cache.signs.rtree); }; - action.limitWays = function(_) { - if (!arguments.length) return wayIds; - wayIds = _; - return action; + mapillary.signsSupported = function() { + var detected = iD.detect(); + return (!(detected.ie || detected.browser.toLowerCase() === 'safari')); }; - return action; -}; -/* - * Based on https://github.com/openstreetmap/potlatch2/net/systemeD/potlatch2/tools/Straighten.as - */ + mapillary.signHTML = function(d) { + if (!iD.services.mapillary.sign_defs) return; -iD.actions.Straighten = function(wayId, projection) { - function positionAlongWay(n, s, e) { - return ((n[0] - s[0]) * (e[0] - s[0]) + (n[1] - s[1]) * (e[1] - s[1]))/ - (Math.pow(e[0] - s[0], 2) + Math.pow(e[1] - s[1], 2)); - } + var detectionPackage = d.signs[0].package, + type = d.signs[0].type, + country = detectionPackage.split('_')[1]; + return iD.services.mapillary.sign_defs[country][type]; + }; - var action = function(graph) { - var way = graph.entity(wayId), - nodes = graph.childNodes(way), - points = nodes.map(function(n) { return projection(n.loc); }), - startPoint = points[0], - endPoint = points[points.length-1], - toDelete = [], - i; + mapillary.showThumbnail = function(imageKey, position) { + if (!imageKey) return; - for (i = 1; i < points.length-1; i++) { - var node = nodes[i], - point = points[i]; + var positionClass = { + 'ar': (position !== 'left'), + 'al': (position === 'left') + }; - if (graph.parentWays(node).length > 1 || - graph.parentRelations(node).length || - node.hasInterestingTags()) { + var thumbnail = d3.select('#content').selectAll('.mapillary-image') + .data([0]); - var u = positionAlongWay(point, startPoint, endPoint), - p0 = startPoint[0] + u * (endPoint[0] - startPoint[0]), - p1 = startPoint[1] + u * (endPoint[1] - startPoint[1]); + // Enter + var enter = thumbnail.enter().append('div') + .attr('class', 'mapillary-image ar'); - graph = graph.replace(graph.entity(node.id) - .move(projection.invert([p0, p1]))); - } else { - // safe to delete - if (toDelete.indexOf(node) === -1) { - toDelete.push(node); - } - } + enter.append('button') + .on('click', function () { + mapillary.hideThumbnail(); + }) + .append('div') + .call(iD.svg.Icon('#icon-close')); + + enter.append('img'); + + enter.append('a') + .attr('class', 'link ar') + .attr('target', '_blank') + .call(iD.svg.Icon('#icon-out-link', 'inline')) + .append('span') + .text(t('mapillary.view_on_mapillary')); + + // Update + thumbnail.selectAll('img') + .attr('src', urlThumb + imageKey + '/thumb-320.jpg'); + + var link = thumbnail.selectAll('a') + .attr('href', urlImage + imageKey); + + if (position) { + thumbnail.classed(positionClass); + link.classed(positionClass); } - for (i = 0; i < toDelete.length; i++) { - graph = iD.actions.DeleteNode(toDelete[i].id)(graph); + thumbnail + .transition() + .duration(200) + .style('opacity', 1); + }; + + mapillary.hideThumbnail = function() { + if (iD.services.mapillary) { + iD.services.mapillary.thumb = null; } + d3.select('#content').selectAll('.mapillary-image') + .transition() + .duration(200) + .style('opacity', 0) + .remove(); + }; - return graph; + mapillary.selectedThumbnail = function(d) { + if (!iD.services.mapillary) return null; + if (!arguments.length) return iD.services.mapillary.thumb; + iD.services.mapillary.thumb = d; }; - - action.disabled = function(graph) { - // check way isn't too bendy - var way = graph.entity(wayId), - nodes = graph.childNodes(way), - points = nodes.map(function(n) { return projection(n.loc); }), - startPoint = points[0], - endPoint = points[points.length-1], - threshold = 0.2 * Math.sqrt(Math.pow(startPoint[0] - endPoint[0], 2) + Math.pow(startPoint[1] - endPoint[1], 2)), - i; - for (i = 1; i < points.length-1; i++) { - var point = points[i], - u = positionAlongWay(point, startPoint, endPoint), - p0 = startPoint[0] + u * (endPoint[0] - startPoint[0]), - p1 = startPoint[1] + u * (endPoint[1] - startPoint[1]), - dist = Math.sqrt(Math.pow(p0 - point[0], 2) + Math.pow(p1 - point[1], 2)); + mapillary.reset = function() { + var cache = iD.services.mapillary.cache; - // to bendy if point is off by 20% of total start/end distance in projected space - if (dist > threshold) { - return 'too_bendy'; - } + if (cache) { + _.forEach(cache.images.inflight, abortRequest); + _.forEach(cache.signs.inflight, abortRequest); } + + iD.services.mapillary.cache = { + images: { inflight: {}, loaded: {}, rtree: rbush() }, + signs: { inflight: {}, loaded: {}, rtree: rbush() } + }; + + iD.services.mapillary.thumb = null; + + return mapillary; }; - return action; + + if (!iD.services.mapillary.cache) { + mapillary.reset(); + } + + return d3.rebind(mapillary, dispatch, 'on'); }; -iD.behavior = {}; -iD.behavior.AddWay = function(context) { - var event = d3.dispatch('start', 'startFromWay', 'startFromNode'), - draw = iD.behavior.Draw(context); +iD.services.nominatim = function() { + var nominatim = {}, + endpoint = 'https://nominatim.openstreetmap.org/reverse?'; - var addWay = function(surface) { - draw.on('click', event.start) - .on('clickWay', event.startFromWay) - .on('clickNode', event.startFromNode) - .on('cancel', addWay.cancel) - .on('finish', addWay.cancel); - context.map() - .dblclickEnable(false); + nominatim.countryCode = function(location, callback) { + var cache = iD.services.nominatim.cache, + countryCodes = cache.search([location[0], location[1], location[0], location[1]]); - surface.call(draw); - }; + if (countryCodes.length > 0) + return callback(null, countryCodes[0][4]); - addWay.off = function(surface) { - surface.call(draw.off); - }; + d3.json(endpoint + + iD.util.qsString({ + format: 'json', + addressdetails: 1, + lat: location[1], + lon: location[0] + }), function(err, result) { + if (err) + return callback(err); + else if (result && result.error) + return callback(result.error); - addWay.cancel = function() { - window.setTimeout(function() { - context.map().dblclickEnable(true); - }, 1000); + var extent = iD.geo.Extent(location).padByMeters(1000); - context.enter(iD.modes.Browse(context)); - }; + cache.insert(extent.rectangle().concat(result.address.country_code)); - addWay.tail = function(text) { - draw.tail(text); - return addWay; + callback(null, result.address.country_code); + }); }; - return d3.rebind(addWay, event, 'on'); -}; -/* - `iD.behavior.drag` is like `d3.behavior.drag`, with the following differences: + nominatim.reset = function() { + iD.services.nominatim.cache = rbush(); + return nominatim; + }; - * The `origin` function is expected to return an [x, y] tuple rather than an - {x, y} object. - * The events are `start`, `move`, and `end`. - (https://github.com/mbostock/d3/issues/563) - * The `start` event is not dispatched until the first cursor movement occurs. - (https://github.com/mbostock/d3/pull/368) - * The `move` event has a `point` and `delta` [x, y] tuple properties rather - than `x`, `y`, `dx`, and `dy` properties. - * The `end` event is not dispatched if no movement occurs. - * An `off` function is available that unbinds the drag's internal event handlers. - * Delegation is supported via the `delegate` function. - */ -iD.behavior.drag = function() { - function d3_eventCancel() { - d3.event.stopPropagation(); - d3.event.preventDefault(); + if (!iD.services.nominatim.cache) { + nominatim.reset(); } - var event = d3.dispatch('start', 'move', 'end'), - origin = null, - selector = '', - filter = null, - event_, target, surface; - - event.of = function(thiz, argumentz) { - return function(e1) { - var e0 = e1.sourceEvent = d3.event; - e1.target = drag; - d3.event = e1; - try { - event[e1.type].apply(thiz, argumentz); - } finally { - d3.event = e0; - } - }; - }; - - var d3_event_userSelectProperty = iD.util.prefixCSSProperty('UserSelect'), - d3_event_userSelectSuppress = d3_event_userSelectProperty ? - function () { - var selection = d3.selection(), - select = selection.style(d3_event_userSelectProperty); - selection.style(d3_event_userSelectProperty, 'none'); - return function () { - selection.style(d3_event_userSelectProperty, select); - }; - } : - function (type) { - var w = d3.select(window).on('selectstart.' + type, d3_eventCancel); - return function () { - w.on('selectstart.' + type, null); - }; - }; - - function mousedown() { - target = this; - event_ = event.of(target, arguments); - var eventTarget = d3.event.target, - touchId = d3.event.touches ? d3.event.changedTouches[0].identifier : null, - offset, - origin_ = point(), - started = false, - selectEnable = d3_event_userSelectSuppress(touchId !== null ? 'drag-' + touchId : 'drag'); + return nominatim; +}; +iD.services.taginfo = function() { + var taginfo = {}, + endpoint = 'https://taginfo.openstreetmap.org/api/4/', + tag_sorts = { + point: 'count_nodes', + vertex: 'count_nodes', + area: 'count_ways', + line: 'count_ways' + }, + tag_filters = { + point: 'nodes', + vertex: 'nodes', + area: 'ways', + line: 'ways' + }; - var w = d3.select(window) - .on(touchId !== null ? 'touchmove.drag-' + touchId : 'mousemove.drag', dragmove) - .on(touchId !== null ? 'touchend.drag-' + touchId : 'mouseup.drag', dragend, true); - if (origin) { - offset = origin.apply(target, arguments); - offset = [offset[0] - origin_[0], offset[1] - origin_[1]]; - } else { - offset = [0, 0]; + function sets(parameters, n, o) { + if (parameters.geometry && o[parameters.geometry]) { + parameters[n] = o[parameters.geometry]; } + return parameters; + } - if (touchId === null) d3.event.stopPropagation(); + function setFilter(parameters) { + return sets(parameters, 'filter', tag_filters); + } - function point() { - var p = target.parentNode || surface; - return touchId !== null ? d3.touches(p).filter(function(p) { - return p.identifier === touchId; - })[0] : d3.mouse(p); - } + function setSort(parameters) { + return sets(parameters, 'sortname', tag_sorts); + } - function dragmove() { + function clean(parameters) { + return _.omit(parameters, 'geometry', 'debounce'); + } - var p = point(), - dx = p[0] - origin_[0], - dy = p[1] - origin_[1]; + function popularKeys(parameters) { + var pop_field = 'count_all'; + if (parameters.filter) pop_field = 'count_' + parameters.filter; + return function(d) { return parseFloat(d[pop_field]) > 5000 || d.in_wiki; }; + } - if (!started) { - started = true; - event_({ - type: 'start' - }); - } + function popularValues() { + return function(d) { return parseFloat(d.fraction) > 0.01 || d.in_wiki; }; + } - origin_ = p; - d3_eventCancel(); + function valKey(d) { return { value: d.key }; } - event_({ - type: 'move', - point: [p[0] + offset[0], p[1] + offset[1]], - delta: [dx, dy] - }); - } + function valKeyDescription(d) { + return { + value: d.value, + title: d.description + }; + } - function dragend() { - if (started) { - event_({ - type: 'end' - }); + // sort keys with ':' lower than keys without ':' + function sortKeys(a, b) { + return (a.key.indexOf(':') === -1 && b.key.indexOf(':') !== -1) ? -1 + : (a.key.indexOf(':') !== -1 && b.key.indexOf(':') === -1) ? 1 + : 0; + } - d3_eventCancel(); - if (d3.event.target === eventTarget) w.on('click.drag', click, true); - } + var debounced = _.debounce(d3.json, 100, true); - w.on(touchId !== null ? 'touchmove.drag-' + touchId : 'mousemove.drag', null) - .on(touchId !== null ? 'touchend.drag-' + touchId : 'mouseup.drag', null); - selectEnable(); - } + function request(url, debounce, callback) { + var cache = iD.services.taginfo.cache; - function click() { - d3_eventCancel(); - w.on('click.drag', null); + if (cache[url]) { + callback(null, cache[url]); + } else if (debounce) { + debounced(url, done); + } else { + d3.json(url, done); } - } - - function drag(selection) { - var matchesSelector = iD.util.prefixDOMProperty('matchesSelector'), - delegate = mousedown; - if (selector) { - delegate = function() { - var root = this, - target = d3.event.target; - for (; target && target !== root; target = target.parentNode) { - if (target[matchesSelector](selector) && - (!filter || filter(target.__data__))) { - return mousedown.call(target, target.__data__); - } - } - }; + function done(err, data) { + if (!err) cache[url] = data; + callback(err, data); } - - selection.on('mousedown.drag' + selector, delegate) - .on('touchstart.drag' + selector, delegate); } - drag.off = function(selection) { - selection.on('mousedown.drag' + selector, null) - .on('touchstart.drag' + selector, null); + taginfo.keys = function(parameters, callback) { + var debounce = parameters.debounce; + parameters = clean(setSort(parameters)); + request(endpoint + 'keys/all?' + + iD.util.qsString(_.extend({ + rp: 10, + sortname: 'count_all', + sortorder: 'desc', + page: 1 + }, parameters)), debounce, function(err, d) { + if (err) return callback(err); + callback(null, d.data.filter(popularKeys(parameters)).sort(sortKeys).map(valKey)); + }); }; - drag.delegate = function(_) { - if (!arguments.length) return selector; - selector = _; - return drag; + taginfo.values = function(parameters, callback) { + var debounce = parameters.debounce; + parameters = clean(setSort(setFilter(parameters))); + request(endpoint + 'key/values?' + + iD.util.qsString(_.extend({ + rp: 25, + sortname: 'count_all', + sortorder: 'desc', + page: 1 + }, parameters)), debounce, function(err, d) { + if (err) return callback(err); + callback(null, d.data.filter(popularValues()).map(valKeyDescription), parameters); + }); }; - drag.filter = function(_) { - if (!arguments.length) return origin; - filter = _; - return drag; - }; + taginfo.docs = function(parameters, callback) { + var debounce = parameters.debounce; + parameters = clean(setSort(parameters)); - drag.origin = function (_) { - if (!arguments.length) return origin; - origin = _; - return drag; - }; + var path = 'key/wiki_pages?'; + if (parameters.value) path = 'tag/wiki_pages?'; + else if (parameters.rtype) path = 'relation/wiki_pages?'; - drag.cancel = function() { - d3.select(window) - .on('mousemove.drag', null) - .on('mouseup.drag', null); - return drag; + request(endpoint + path + iD.util.qsString(parameters), debounce, function(err, d) { + if (err) return callback(err); + callback(null, d.data); + }); }; - drag.target = function() { - if (!arguments.length) return target; - target = arguments[0]; - event_ = event.of(target, Array.prototype.slice.call(arguments, 1)); - return drag; + taginfo.endpoint = function(_) { + if (!arguments.length) return endpoint; + endpoint = _; + return taginfo; }; - drag.surface = function() { - if (!arguments.length) return surface; - surface = arguments[0]; - return drag; + taginfo.reset = function() { + iD.services.taginfo.cache = {}; + return taginfo; }; - return d3.rebind(drag, event, 'on'); -}; -iD.behavior.Draw = function(context) { - var event = d3.dispatch('move', 'click', 'clickWay', - 'clickNode', 'undo', 'cancel', 'finish'), - keybinding = d3.keybinding('draw'), - hover = iD.behavior.Hover(context) - .altDisables(true) - .on('hover', context.ui().sidebar.hover), - tail = iD.behavior.Tail(), - edit = iD.behavior.Edit(context), - closeTolerance = 4, - tolerance = 12; - function datum() { - if (d3.event.altKey) return {}; - else return d3.event.target.__data__ || {}; + if (!iD.services.taginfo.cache) { + taginfo.reset(); } - function mousedown() { - - function point() { - var p = element.node().parentNode; - return touchId !== null ? d3.touches(p).filter(function(p) { - return p.identifier === touchId; - })[0] : d3.mouse(p); - } - - var element = d3.select(this), - touchId = d3.event.touches ? d3.event.changedTouches[0].identifier : null, - time = +new Date(), - pos = point(); - - element.on('mousemove.draw', null); - - d3.select(window).on('mouseup.draw', function() { - element.on('mousemove.draw', mousemove); - if (iD.geo.euclideanDistance(pos, point()) < closeTolerance || - (iD.geo.euclideanDistance(pos, point()) < tolerance && - (+new Date() - time) < 500)) { + return taginfo; +}; +iD.services.wikipedia = function() { + var wiki = {}, + endpoint = 'https://en.wikipedia.org/w/api.php?'; - // Prevent a quick second click - d3.select(window).on('click.draw-block', function() { - d3.event.stopPropagation(); - }, true); + wiki.search = function(lang, query, callback) { + lang = lang || 'en'; + d3.jsonp(endpoint.replace('en', lang) + + iD.util.qsString({ + action: 'query', + list: 'search', + srlimit: '10', + srinfo: 'suggestion', + format: 'json', + callback: '{callback}', + srsearch: query + }), function(data) { + if (!data.query) return; + callback(query, data.query.search.map(function(d) { + return d.title; + })); + }); + }; - context.map().dblclickEnable(false); + wiki.suggestions = function(lang, query, callback) { + lang = lang || 'en'; + d3.jsonp(endpoint.replace('en', lang) + + iD.util.qsString({ + action: 'opensearch', + namespace: 0, + suggest: '', + format: 'json', + callback: '{callback}', + search: query + }), function(d) { + callback(d[0], d[1]); + }); + }; - window.setTimeout(function() { - context.map().dblclickEnable(true); - d3.select(window).on('click.draw-block', null); - }, 500); + wiki.translations = function(lang, title, callback) { + d3.jsonp(endpoint.replace('en', lang) + + iD.util.qsString({ + action: 'query', + prop: 'langlinks', + format: 'json', + callback: '{callback}', + lllimit: 500, + titles: title + }), function(d) { + var list = d.query.pages[Object.keys(d.query.pages)[0]], + translations = {}; + if (list && list.langlinks) { + list.langlinks.forEach(function(d) { + translations[d.lang] = d['*']; + }); + callback(translations); + } + }); + }; - click(); - } - }); - } + return wiki; +}; +iD.util = {}; - function mousemove() { - event.move(datum()); - } +iD.util.tagText = function(entity) { + return d3.entries(entity.tags).map(function(e) { + return e.key + '=' + e.value; + }).join(', '); +}; - function click() { - var d = datum(); - if (d.type === 'way') { - var choice = iD.geo.chooseEdge(context.childNodes(d), context.mouse(), context.projection), - edge = [d.nodes[choice.index - 1], d.nodes[choice.index]]; - event.clickWay(choice.loc, edge); +iD.util.entitySelector = function(ids) { + return ids.length ? '.' + ids.join(',.') : 'nothing'; +}; - } else if (d.type === 'node') { - event.clickNode(d); +iD.util.entityOrMemberSelector = function(ids, graph) { + var s = iD.util.entitySelector(ids); - } else { - event.click(context.map().mouseCoordinates()); + ids.forEach(function(id) { + var entity = graph.hasEntity(id); + if (entity && entity.type === 'relation') { + entity.members.forEach(function(member) { + s += ',.' + member.id; + }); } - } - - function backspace() { - d3.event.preventDefault(); - event.undo(); - } + }); - function del() { - d3.event.preventDefault(); - event.cancel(); - } + return s; +}; - function ret() { - d3.event.preventDefault(); - event.finish(); - } +iD.util.displayName = function(entity) { + var localeName = 'name:' + iD.detect().locale.toLowerCase().split('-')[0]; + return entity.tags[localeName] || entity.tags.name || entity.tags.ref; +}; - function draw(selection) { - context.install(hover); - context.install(edit); +iD.util.displayType = function(id) { + return { + n: t('inspector.node'), + w: t('inspector.way'), + r: t('inspector.relation') + }[id.charAt(0)]; +}; - if (!iD.behavior.Draw.usedTails[tail.text()]) { - context.install(tail); +iD.util.stringQs = function(str) { + return str.split('&').reduce(function(obj, pair){ + var parts = pair.split('='); + if (parts.length === 2) { + obj[parts[0]] = (null === parts[1]) ? '' : decodeURIComponent(parts[1]); } + return obj; + }, {}); +}; - keybinding - .on('⌫', backspace) - .on('⌦', del) - .on('⎋', ret) - .on('↩', ret); - - selection - .on('mousedown.draw', mousedown) - .on('mousemove.draw', mousemove); - - d3.select(document) - .call(keybinding); - - return draw; +iD.util.qsString = function(obj, noencode) { + function softEncode(s) { + // encode everything except special characters used in certain hash parameters: + // "/" in map states, ":", ",", {" and "}" in background + return encodeURIComponent(s).replace(/(%2F|%3A|%2C|%7B|%7D)/g, decodeURIComponent); } + return Object.keys(obj).sort().map(function(key) { + return encodeURIComponent(key) + '=' + ( + noencode ? softEncode(obj[key]) : encodeURIComponent(obj[key])); + }).join('&'); +}; - draw.off = function(selection) { - context.uninstall(hover); - context.uninstall(edit); - - if (!iD.behavior.Draw.usedTails[tail.text()]) { - context.uninstall(tail); - iD.behavior.Draw.usedTails[tail.text()] = true; - } - - selection - .on('mousedown.draw', null) - .on('mousemove.draw', null); +iD.util.prefixDOMProperty = function(property) { + var prefixes = ['webkit', 'ms', 'moz', 'o'], + i = -1, + n = prefixes.length, + s = document.body; - d3.select(window) - .on('mouseup.draw', null); + if (property in s) + return property; - d3.select(document) - .call(keybinding.off); - }; + property = property.substr(0, 1).toUpperCase() + property.substr(1); - draw.tail = function(_) { - tail.text(_); - return draw; - }; + while (++i < n) + if (prefixes[i] + property in s) + return prefixes[i] + property; - return d3.rebind(draw, event, 'on'); + return false; }; -iD.behavior.Draw.usedTails = {}; -iD.behavior.DrawWay = function(context, wayId, index, mode, baseGraph) { - var way = context.entity(wayId), - isArea = context.geometry(wayId) === 'area', - finished = false, - annotation = t((way.isDegenerate() ? - 'operations.start.annotation.' : - 'operations.continue.annotation.') + context.geometry(wayId)), - draw = iD.behavior.Draw(context); +iD.util.prefixCSSProperty = function(property) { + var prefixes = ['webkit', 'ms', 'Moz', 'O'], + i = -1, + n = prefixes.length, + s = document.body.style; - var startIndex = typeof index === 'undefined' ? way.nodes.length - 1 : 0, - start = iD.Node({loc: context.graph().entity(way.nodes[startIndex]).loc}), - end = iD.Node({loc: context.map().mouseCoordinates()}), - segment = iD.Way({ - nodes: typeof index === 'undefined' ? [start.id, end.id] : [end.id, start.id], - tags: _.clone(way.tags) - }); + if (property.toLowerCase() in s) + return property.toLowerCase(); - var f = context[way.isDegenerate() ? 'replace' : 'perform']; - if (isArea) { - f(iD.actions.AddEntity(end), - iD.actions.AddVertex(wayId, end.id, index)); - } else { - f(iD.actions.AddEntity(start), - iD.actions.AddEntity(end), - iD.actions.AddEntity(segment)); - } + while (++i < n) + if (prefixes[i] + property in s) + return '-' + prefixes[i].toLowerCase() + property.replace(/([A-Z])/g, '-$1').toLowerCase(); - function move(datum) { - var loc; + return false; +}; - if (datum.type === 'node' && datum.id !== end.id) { - loc = datum.loc; - } else if (datum.type === 'way' && datum.id !== segment.id) { - loc = iD.geo.chooseEdge(context.childNodes(datum), context.mouse(), context.projection).loc; - } else { - loc = context.map().mouseCoordinates(); - } - context.replace(iD.actions.MoveNode(end.id, loc)); - } +iD.util.setTransform = function(el, x, y, scale) { + var prop = iD.util.transformProperty = iD.util.transformProperty || iD.util.prefixCSSProperty('Transform'), + translate = iD.detect().opera ? + 'translate(' + x + 'px,' + y + 'px)' : + 'translate3d(' + x + 'px,' + y + 'px,0)'; + return el.style(prop, translate + (scale ? ' scale(' + scale + ')' : '')); +}; - function undone() { - finished = true; - context.enter(iD.modes.Browse(context)); +iD.util.getStyle = function(selector) { + for (var i = 0; i < document.styleSheets.length; i++) { + var rules = document.styleSheets[i].rules || document.styleSheets[i].cssRules || []; + for (var k = 0; k < rules.length; k++) { + var selectorText = rules[k].selectorText && rules[k].selectorText.split(', '); + if (_.contains(selectorText, selector)) { + return rules[k]; + } + } } +}; - function setActiveElements() { - var active = isArea ? [wayId, end.id] : [segment.id, start.id, end.id]; - context.surface().selectAll(iD.util.entitySelector(active)) - .classed('active', true); - } - - var drawWay = function(surface) { - draw.on('move', move) - .on('click', drawWay.add) - .on('clickWay', drawWay.addWay) - .on('clickNode', drawWay.addNode) - .on('undo', context.undo) - .on('cancel', drawWay.cancel) - .on('finish', drawWay.finish); +iD.util.editDistance = function(a, b) { + if (a.length === 0) return b.length; + if (b.length === 0) return a.length; + var matrix = []; + for (var i = 0; i <= b.length; i++) { matrix[i] = [i]; } + for (var j = 0; j <= a.length; j++) { matrix[0][j] = j; } + for (i = 1; i <= b.length; i++) { + for (j = 1; j <= a.length; j++) { + if (b.charAt(i-1) === a.charAt(j-1)) { + matrix[i][j] = matrix[i-1][j-1]; + } else { + matrix[i][j] = Math.min(matrix[i-1][j-1] + 1, // substitution + Math.min(matrix[i][j-1] + 1, // insertion + matrix[i-1][j] + 1)); // deletion + } + } + } + return matrix[b.length][a.length]; +}; - context.map() - .dblclickEnable(false) - .on('drawn.draw', setActiveElements); +// a d3.mouse-alike which +// 1. Only works on HTML elements, not SVG +// 2. Does not cause style recalculation +iD.util.fastMouse = function(container) { + var rect = container.getBoundingClientRect(), + rectLeft = rect.left, + rectTop = rect.top, + clientLeft = +container.clientLeft, + clientTop = +container.clientTop; + return function(e) { + return [ + e.clientX - rectLeft - clientLeft, + e.clientY - rectTop - clientTop]; + }; +}; - setActiveElements(); +/* eslint-disable no-proto */ +iD.util.getPrototypeOf = Object.getPrototypeOf || function(obj) { return obj.__proto__; }; +/* eslint-enable no-proto */ - surface.call(draw); +iD.util.asyncMap = function(inputs, func, callback) { + var remaining = inputs.length, + results = [], + errors = []; - context.history() - .on('undone.draw', undone); - }; + inputs.forEach(function(d, i) { + func(d, function done(err, data) { + errors[i] = err; + results[i] = data; + remaining--; + if (!remaining) callback(errors, results); + }); + }); +}; - drawWay.off = function(surface) { - if (!finished) - context.pop(); +// wraps an index to an interval [0..length-1] +iD.util.wrap = function(index, length) { + if (index < 0) + index += Math.ceil(-index/length)*length; + return index % length; +}; +// A per-domain session mutex backed by a cookie and dead man's +// switch. If the session crashes, the mutex will auto-release +// after 5 seconds. - context.map() - .on('drawn.draw', null); +iD.util.SessionMutex = function(name) { + var mutex = {}, + intervalID; - surface.call(draw.off) - .selectAll('.active') - .classed('active', false); + function renew() { + var expires = new Date(); + expires.setSeconds(expires.getSeconds() + 5); + document.cookie = name + '=1; expires=' + expires.toUTCString(); + } - context.history() - .on('undone.draw', null); + mutex.lock = function() { + if (intervalID) return true; + var cookie = document.cookie.replace(new RegExp('(?:(?:^|.*;)\\s*' + name + '\\s*\\=\\s*([^;]*).*$)|^.*$'), '$1'); + if (cookie) return false; + renew(); + intervalID = window.setInterval(renew, 4000); + return true; }; - function ReplaceTemporaryNode(newNode) { - return function(graph) { - if (isArea) { - return graph - .replace(way.addNode(newNode.id, index)) - .remove(end); + mutex.unlock = function() { + if (!intervalID) return; + document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT'; + clearInterval(intervalID); + intervalID = null; + }; - } else { - return graph - .replace(graph.entity(wayId).addNode(newNode.id, index)) - .remove(end) - .remove(segment) - .remove(start); - } - }; - } + mutex.locked = function() { + return !!intervalID; + }; - // Accept the current position of the temporary node and continue drawing. - drawWay.add = function(loc) { + return mutex; +}; +iD.util.SuggestNames = function(preset, suggestions) { + preset = preset.id.split('/', 2); + var k = preset[0], + v = preset[1]; - // prevent duplicate nodes - var last = context.hasEntity(way.nodes[way.nodes.length - (isArea ? 2 : 1)]); - if (last && last.loc[0] === loc[0] && last.loc[1] === loc[1]) return; + return function(value, callback) { + var result = []; + if (value && value.length > 2) { + if (suggestions[k] && suggestions[k][v]) { + for (var sugg in suggestions[k][v]) { + var dist = iD.util.editDistance(value, sugg.substring(0, value.length)); + if (dist < 3) { + result.push({ + title: sugg, + value: sugg, + dist: dist + }); + } + } + } + result.sort(function(a, b) { + return a.dist - b.dist; + }); + } + result = result.slice(0,3); + callback(result); + }; +}; +iD.geo = {}; - var newNode = iD.Node({loc: loc}); +iD.geo.roundCoords = function(c) { + return [Math.floor(c[0]), Math.floor(c[1])]; +}; - context.replace( - iD.actions.AddEntity(newNode), - ReplaceTemporaryNode(newNode), - annotation); +iD.geo.interp = function(p1, p2, t) { + return [p1[0] + (p2[0] - p1[0]) * t, + p1[1] + (p2[1] - p1[1]) * t]; +}; - finished = true; - context.enter(mode); - }; +// 2D cross product of OA and OB vectors, i.e. z-component of their 3D cross product. +// Returns a positive value, if OAB makes a counter-clockwise turn, +// negative for clockwise turn, and zero if the points are collinear. +iD.geo.cross = function(o, a, b) { + return (a[0] - o[0]) * (b[1] - o[1]) - (a[1] - o[1]) * (b[0] - o[0]); +}; - // Connect the way to an existing way. - drawWay.addWay = function(loc, edge) { - var previousEdge = startIndex ? - [way.nodes[startIndex], way.nodes[startIndex - 1]] : - [way.nodes[0], way.nodes[1]]; +// http://jsperf.com/id-dist-optimization +iD.geo.euclideanDistance = function(a, b) { + var x = a[0] - b[0], y = a[1] - b[1]; + return Math.sqrt((x * x) + (y * y)); +}; - // Avoid creating duplicate segments - if (!isArea && iD.geo.edgeEqual(edge, previousEdge)) - return; +// using WGS84 polar radius (6356752.314245179 m) +// const = 2 * PI * r / 360 +iD.geo.latToMeters = function(dLat) { + return dLat * 110946.257617; +}; - var newNode = iD.Node({ loc: loc }); +// using WGS84 equatorial radius (6378137.0 m) +// const = 2 * PI * r / 360 +iD.geo.lonToMeters = function(dLon, atLat) { + return Math.abs(atLat) >= 90 ? 0 : + dLon * 111319.490793 * Math.abs(Math.cos(atLat * (Math.PI/180))); +}; - context.perform( - iD.actions.AddMidpoint({ loc: loc, edge: edge}, newNode), - ReplaceTemporaryNode(newNode), - annotation); +// using WGS84 polar radius (6356752.314245179 m) +// const = 2 * PI * r / 360 +iD.geo.metersToLat = function(m) { + return m / 110946.257617; +}; - finished = true; - context.enter(mode); - }; +// using WGS84 equatorial radius (6378137.0 m) +// const = 2 * PI * r / 360 +iD.geo.metersToLon = function(m, atLat) { + return Math.abs(atLat) >= 90 ? 0 : + m / 111319.490793 / Math.abs(Math.cos(atLat * (Math.PI/180))); +}; - // Connect the way to an existing node and continue drawing. - drawWay.addNode = function(node) { +// Equirectangular approximation of spherical distances on Earth +iD.geo.sphericalDistance = function(a, b) { + var x = iD.geo.lonToMeters(a[0] - b[0], (a[1] + b[1]) / 2), + y = iD.geo.latToMeters(a[1] - b[1]); + return Math.sqrt((x * x) + (y * y)); +}; - // Avoid creating duplicate segments - if (way.areAdjacent(node.id, way.nodes[way.nodes.length - 1])) return; +iD.geo.edgeEqual = function(a, b) { + return (a[0] === b[0] && a[1] === b[1]) || + (a[0] === b[1] && a[1] === b[0]); +}; - context.perform( - ReplaceTemporaryNode(node), - annotation); +// Return the counterclockwise angle in the range (-pi, pi) +// between the positive X axis and the line intersecting a and b. +iD.geo.angle = function(a, b, projection) { + a = projection(a.loc); + b = projection(b.loc); + return Math.atan2(b[1] - a[1], b[0] - a[0]); +}; - finished = true; - context.enter(mode); - }; +// Choose the edge with the minimal distance from `point` to its orthogonal +// projection onto that edge, if such a projection exists, or the distance to +// the closest vertex on that edge. Returns an object with the `index` of the +// chosen edge, the chosen `loc` on that edge, and the `distance` to to it. +iD.geo.chooseEdge = function(nodes, point, projection) { + var dist = iD.geo.euclideanDistance, + points = nodes.map(function(n) { return projection(n.loc); }), + min = Infinity, + idx, loc; - // Finish the draw operation, removing the temporary node. If the way has enough - // nodes to be valid, it's selected. Otherwise, return to browse mode. - drawWay.finish = function() { - context.pop(); - finished = true; + function dot(p, q) { + return p[0] * q[0] + p[1] * q[1]; + } - window.setTimeout(function() { - context.map().dblclickEnable(true); - }, 1000); + for (var i = 0; i < points.length - 1; i++) { + var o = points[i], + s = [points[i + 1][0] - o[0], + points[i + 1][1] - o[1]], + v = [point[0] - o[0], + point[1] - o[1]], + proj = dot(v, s) / dot(s, s), + p; - if (context.hasEntity(wayId)) { - context.enter( - iD.modes.Select(context, [wayId]) - .suppressMenu(true) - .newFeature(true)); + if (proj < 0) { + p = o; + } else if (proj > 1) { + p = points[i + 1]; } else { - context.enter(iD.modes.Browse(context)); + p = [o[0] + proj * s[0], o[1] + proj * s[1]]; } - }; - // Cancel the draw operation and return to browse, deleting everything drawn. - drawWay.cancel = function() { - context.perform( - d3.functor(baseGraph), - t('operations.cancel_draw.annotation')); - - window.setTimeout(function() { - context.map().dblclickEnable(true); - }, 1000); - - finished = true; - context.enter(iD.modes.Browse(context)); - }; + var d = dist(p, point); + if (d < min) { + min = d; + idx = i + 1; + loc = projection.invert(p); + } + } - drawWay.tail = function(text) { - draw.tail(text); - return drawWay; + return { + index: idx, + distance: min, + loc: loc }; - - return drawWay; }; -iD.behavior.Edit = function(context) { - function edit() { - context.map() - .minzoom(16); + +// Return the intersection point of 2 line segments. +// From https://github.com/pgkelley4/line-segments-intersect +// This uses the vector cross product approach described below: +// http://stackoverflow.com/a/565282/786339 +iD.geo.lineIntersection = function(a, b) { + function subtractPoints(point1, point2) { + return [point1[0] - point2[0], point1[1] - point2[1]]; + } + function crossProduct(point1, point2) { + return point1[0] * point2[1] - point1[1] * point2[0]; } - edit.off = function() { - context.map() - .minzoom(0); - }; + var p = [a[0][0], a[0][1]], + p2 = [a[1][0], a[1][1]], + q = [b[0][0], b[0][1]], + q2 = [b[1][0], b[1][1]], + r = subtractPoints(p2, p), + s = subtractPoints(q2, q), + uNumerator = crossProduct(subtractPoints(q, p), r), + denominator = crossProduct(r, s); - return edit; + if (uNumerator && denominator) { + var u = uNumerator / denominator, + t = crossProduct(subtractPoints(q, p), s) / denominator; + + if ((t >= 0) && (t <= 1) && (u >= 0) && (u <= 1)) { + return iD.geo.interp(p, p2, t); + } + } + + return null; }; -iD.behavior.Hash = function(context) { - var s0 = null, // cached location.hash - lat = 90 - 1e-8; // allowable latitude range - var parser = function(map, s) { - var q = iD.util.stringQs(s); - var args = (q.map || '').split('/').map(Number); - if (args.length < 3 || args.some(isNaN)) { - return true; // replace bogus hash - } else if (s !== formatter(map).slice(1)) { - map.centerZoom([args[1], - Math.min(lat, Math.max(-lat, args[2]))], args[0]); +iD.geo.pathIntersections = function(path1, path2) { + var intersections = []; + for (var i = 0; i < path1.length - 1; i++) { + for (var j = 0; j < path2.length - 1; j++) { + var a = [ path1[i], path1[i+1] ], + b = [ path2[j], path2[j+1] ], + hit = iD.geo.lineIntersection(a, b); + if (hit) intersections.push(hit); } - }; + } + return intersections; +}; - var formatter = function(map) { - var center = map.center(), - zoom = map.zoom(), - precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2)); - var q = iD.util.stringQs(location.hash.substring(1)); - return '#' + iD.util.qsString(_.assign(q, { - map: zoom.toFixed(2) + - '/' + center[0].toFixed(precision) + - '/' + center[1].toFixed(precision) - }), true); - }; +// Return whether point is contained in polygon. +// +// `point` should be a 2-item array of coordinates. +// `polygon` should be an array of 2-item arrays of coordinates. +// +// From https://github.com/substack/point-in-polygon. +// ray-casting algorithm based on +// http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html +// +iD.geo.pointInPolygon = function(point, polygon) { + var x = point[0], + y = point[1], + inside = false; - function update() { - var s1 = formatter(context.map()); - if (s0 !== s1) location.replace(s0 = s1); // don't recenter the map! + for (var i = 0, j = polygon.length - 1; i < polygon.length; j = i++) { + var xi = polygon[i][0], yi = polygon[i][1]; + var xj = polygon[j][0], yj = polygon[j][1]; + + var intersect = ((yi > y) !== (yj > y)) && + (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + if (intersect) inside = !inside; } - var move = _.throttle(update, 500); + return inside; +}; - function hashchange() { - if (location.hash === s0) return; // ignore spurious hashchange events - if (parser(context.map(), (s0 = location.hash).substring(1))) { - update(); // replace bogus hash +iD.geo.polygonContainsPolygon = function(outer, inner) { + return _.every(inner, function(point) { + return iD.geo.pointInPolygon(point, outer); + }); +}; + +iD.geo.polygonIntersectsPolygon = function(outer, inner, checkSegments) { + function testSegments(outer, inner) { + for (var i = 0; i < outer.length - 1; i++) { + for (var j = 0; j < inner.length - 1; j++) { + var a = [ outer[i], outer[i+1] ], + b = [ inner[j], inner[j+1] ]; + if (iD.geo.lineIntersection(a, b)) return true; + } } + return false; } - function hash() { - context.map() - .on('move.hash', move); + function testPoints(outer, inner) { + return _.some(inner, function(point) { + return iD.geo.pointInPolygon(point, outer); + }); + } - d3.select(window) - .on('hashchange.hash', hashchange); + return testPoints(outer, inner) || (!!checkSegments && testSegments(outer, inner)); +}; - if (location.hash) { - var q = iD.util.stringQs(location.hash.substring(1)); - if (q.id) context.loadEntity(q.id, !q.map); - hashchange(); - if (q.map) hash.hadHash = true; - } +iD.geo.pathLength = function(path) { + var length = 0, + dx, dy; + for (var i = 0; i < path.length - 1; i++) { + dx = path[i][0] - path[i + 1][0]; + dy = path[i][1] - path[i + 1][1]; + length += Math.sqrt(dx * dx + dy * dy); + } + return length; +}; +iD.geo.Extent = function geoExtent(min, max) { + if (!(this instanceof iD.geo.Extent)) return new iD.geo.Extent(min, max); + if (min instanceof iD.geo.Extent) { + return min; + } else if (min && min.length === 2 && min[0].length === 2 && min[1].length === 2) { + this[0] = min[0]; + this[1] = min[1]; + } else { + this[0] = min || [ Infinity, Infinity]; + this[1] = max || min || [-Infinity, -Infinity]; } +}; - hash.off = function() { - context.map() - .on('move.hash', null); +iD.geo.Extent.prototype = new Array(2); - d3.select(window) - .on('hashchange.hash', null); +_.extend(iD.geo.Extent.prototype, { + equals: function (obj) { + return this[0][0] === obj[0][0] && + this[0][1] === obj[0][1] && + this[1][0] === obj[1][0] && + this[1][1] === obj[1][1]; + }, - location.hash = ''; - }; + extend: function(obj) { + if (!(obj instanceof iD.geo.Extent)) obj = new iD.geo.Extent(obj); + return iD.geo.Extent([Math.min(obj[0][0], this[0][0]), + Math.min(obj[0][1], this[0][1])], + [Math.max(obj[1][0], this[1][0]), + Math.max(obj[1][1], this[1][1])]); + }, - return hash; -}; -/* - The hover behavior adds the `.hover` class on mouseover to all elements to which - the identical datum is bound, and removes it on mouseout. + _extend: function(extent) { + this[0][0] = Math.min(extent[0][0], this[0][0]); + this[0][1] = Math.min(extent[0][1], this[0][1]); + this[1][0] = Math.max(extent[1][0], this[1][0]); + this[1][1] = Math.max(extent[1][1], this[1][1]); + }, - The :hover pseudo-class is insufficient for iD's purposes because a datum's visual - representation may consist of several elements scattered throughout the DOM hierarchy. - Only one of these elements can have the :hover pseudo-class, but all of them will - have the .hover class. - */ -iD.behavior.Hover = function() { - var dispatch = d3.dispatch('hover'), - selection, - altDisables, - target; + area: function() { + return Math.abs((this[1][0] - this[0][0]) * (this[1][1] - this[0][1])); + }, - function keydown() { - if (altDisables && d3.event.keyCode === d3.keybinding.modifierCodes.alt) { - dispatch.hover(null); - selection.selectAll('.hover') - .classed('hover-suppressed', true) - .classed('hover', false); - } - } + center: function() { + return [(this[0][0] + this[1][0]) / 2, + (this[0][1] + this[1][1]) / 2]; + }, - function keyup() { - if (altDisables && d3.event.keyCode === d3.keybinding.modifierCodes.alt) { - dispatch.hover(target ? target.id : null); - selection.selectAll('.hover-suppressed') - .classed('hover-suppressed', false) - .classed('hover', true); + rectangle: function() { + return [this[0][0], this[0][1], this[1][0], this[1][1]]; + }, + + polygon: function() { + return [ + [this[0][0], this[0][1]], + [this[0][0], this[1][1]], + [this[1][0], this[1][1]], + [this[1][0], this[0][1]], + [this[0][0], this[0][1]] + ]; + }, + + contains: function(obj) { + if (!(obj instanceof iD.geo.Extent)) obj = new iD.geo.Extent(obj); + return obj[0][0] >= this[0][0] && + obj[0][1] >= this[0][1] && + obj[1][0] <= this[1][0] && + obj[1][1] <= this[1][1]; + }, + + intersects: function(obj) { + if (!(obj instanceof iD.geo.Extent)) obj = new iD.geo.Extent(obj); + return obj[0][0] <= this[1][0] && + obj[0][1] <= this[1][1] && + obj[1][0] >= this[0][0] && + obj[1][1] >= this[0][1]; + }, + + intersection: function(obj) { + if (!this.intersects(obj)) return new iD.geo.Extent(); + return new iD.geo.Extent([Math.max(obj[0][0], this[0][0]), + Math.max(obj[0][1], this[0][1])], + [Math.min(obj[1][0], this[1][0]), + Math.min(obj[1][1], this[1][1])]); + }, + + percentContainedIn: function(obj) { + if (!(obj instanceof iD.geo.Extent)) obj = new iD.geo.Extent(obj); + var a1 = this.intersection(obj).area(), + a2 = this.area(); + + if (a1 === Infinity || a2 === Infinity || a1 === 0 || a2 === 0) { + return 0; + } else { + return a1 / a2; } - } + }, - var hover = function(__) { - selection = __; + padByMeters: function(meters) { + var dLat = iD.geo.metersToLat(meters), + dLon = iD.geo.metersToLon(meters, this.center()[1]); + return iD.geo.Extent( + [this[0][0] - dLon, this[0][1] - dLat], + [this[1][0] + dLon, this[1][1] + dLat]); + }, - function enter(d) { - if (d === target) return; + toParam: function() { + return this.rectangle().join(','); + } - target = d; +}); +iD.geo.Turn = function(turn) { + if (!(this instanceof iD.geo.Turn)) + return new iD.geo.Turn(turn); + _.extend(this, turn); +}; - selection.selectAll('.hover') - .classed('hover', false); - selection.selectAll('.hover-suppressed') - .classed('hover-suppressed', false); +iD.geo.Intersection = function(graph, vertexId) { + var vertex = graph.entity(vertexId), + parentWays = graph.parentWays(vertex), + coincident = [], + highways = {}; - if (target instanceof iD.Entity) { - var selector = '.' + target.id; + function addHighway(way, adjacentNodeId) { + if (highways[adjacentNodeId]) { + coincident.push(adjacentNodeId); + } else { + highways[adjacentNodeId] = way; + } + } - if (target.type === 'relation') { - target.members.forEach(function(member) { - selector += ', .' + member.id; - }); - } + // Pre-split ways that would need to be split in + // order to add a restriction. The real split will + // happen when the restriction is added. + parentWays.forEach(function(way) { + if (!way.tags.highway || way.isArea() || way.isDegenerate()) + return; - var suppressed = altDisables && d3.event && d3.event.altKey; + var isFirst = (vertexId === way.first()), + isLast = (vertexId === way.last()), + isAffix = (isFirst || isLast), + isClosingNode = (isFirst && isLast); - selection.selectAll(selector) - .classed(suppressed ? 'hover-suppressed' : 'hover', true); + if (isAffix && !isClosingNode) { + var index = (isFirst ? 1 : way.nodes.length - 2); + addHighway(way, way.nodes[index]); - dispatch.hover(target.id); + } else { + var splitIndex, wayA, wayB, indexA, indexB; + if (isClosingNode) { + splitIndex = Math.ceil(way.nodes.length / 2); // split at midpoint + wayA = iD.Way({id: way.id + '-a', tags: way.tags, nodes: way.nodes.slice(0, splitIndex)}); + wayB = iD.Way({id: way.id + '-b', tags: way.tags, nodes: way.nodes.slice(splitIndex)}); + indexA = 1; + indexB = way.nodes.length - 2; } else { - dispatch.hover(null); + splitIndex = _.indexOf(way.nodes, vertex.id, 1); // split at vertexid + wayA = iD.Way({id: way.id + '-a', tags: way.tags, nodes: way.nodes.slice(0, splitIndex + 1)}); + wayB = iD.Way({id: way.id + '-b', tags: way.tags, nodes: way.nodes.slice(splitIndex)}); + indexA = splitIndex - 1; + indexB = splitIndex + 1; } + graph = graph.replace(wayA).replace(wayB); + addHighway(wayA, way.nodes[indexA]); + addHighway(wayB, way.nodes[indexB]); } + }); - var down; + // remove any ways from this intersection that are coincident + // (i.e. any adjacent node used by more than one intersecting way) + coincident.forEach(function (n) { + delete highways[n]; + }); - function mouseover() { - if (down) return; - var target = d3.event.target; - enter(target ? target.__data__ : null); - } - - function mouseout() { - if (down) return; - var target = d3.event.relatedTarget; - enter(target ? target.__data__ : null); - } - - function mousedown() { - down = true; - d3.select(window) - .on('mouseup.hover', mouseup); - } - - function mouseup() { - down = false; - } - - selection - .on('mouseover.hover', mouseover) - .on('mouseout.hover', mouseout) - .on('mousedown.hover', mousedown) - .on('mouseup.hover', mouseup); - - d3.select(window) - .on('keydown.hover', keydown) - .on('keyup.hover', keyup); - }; - - hover.off = function(selection) { - selection.selectAll('.hover') - .classed('hover', false); - selection.selectAll('.hover-suppressed') - .classed('hover-suppressed', false); - - selection - .on('mouseover.hover', null) - .on('mouseout.hover', null) - .on('mousedown.hover', null) - .on('mouseup.hover', null); - d3.select(window) - .on('keydown.hover', null) - .on('keyup.hover', null) - .on('mouseup.hover', null); + var intersection = { + highways: highways, + ways: _.values(highways), + graph: graph }; - hover.altDisables = function(_) { - if (!arguments.length) return altDisables; - altDisables = _; - return hover; + intersection.adjacentNodeId = function(fromWayId) { + return _.find(_.keys(highways), function(k) { + return highways[k].id === fromWayId; + }); }; - return d3.rebind(hover, dispatch, 'on'); -}; -iD.behavior.Lasso = function(context) { + intersection.turns = function(fromNodeId) { + var start = highways[fromNodeId]; + if (!start) + return []; - var behavior = function(selection) { + if (start.first() === vertex.id && start.tags.oneway === 'yes') + return []; + if (start.last() === vertex.id && start.tags.oneway === '-1') + return []; - var mouse = null, - lasso; + function withRestriction(turn) { + graph.parentRelations(graph.entity(turn.from.way)).forEach(function(relation) { + if (relation.tags.type !== 'restriction') + return; - function mousedown() { - if (d3.event.shiftKey === true) { + var f = relation.memberByRole('from'), + t = relation.memberByRole('to'), + v = relation.memberByRole('via'); + + if (f && f.id === turn.from.way && + v && v.id === turn.via.node && + t && t.id === turn.to.way) { + turn.restriction = relation.id; + } else if (/^only_/.test(relation.tags.restriction) && + f && f.id === turn.from.way && + v && v.id === turn.via.node && + t && t.id !== turn.to.way) { + turn.restriction = relation.id; + turn.indirect_restriction = true; + } + }); - mouse = context.mouse(); - lasso = null; + return iD.geo.Turn(turn); + } - selection - .on('mousemove.lasso', mousemove) - .on('mouseup.lasso', mouseup); + var from = { + node: fromNodeId, + way: start.id.split(/-(a|b)/)[0] + }, + via = { node: vertex.id }, + turns = []; - d3.event.stopPropagation(); - d3.event.preventDefault(); + _.each(highways, function(end, adjacentNodeId) { + if (end === start) + return; + // backward + if (end.first() !== vertex.id && end.tags.oneway !== 'yes') { + turns.push(withRestriction({ + from: from, + via: via, + to: { + node: adjacentNodeId, + way: end.id.split(/-(a|b)/)[0] + } + })); } - } - function mousemove() { - if (!lasso) { - lasso = iD.ui.Lasso(context).a(mouse); - context.surface().call(lasso); + // forward + if (end.last() !== vertex.id && end.tags.oneway !== '-1') { + turns.push(withRestriction({ + from: from, + via: via, + to: { + node: adjacentNodeId, + way: end.id.split(/-(a|b)/)[0] + } + })); } - lasso.b(context.mouse()); - } + }); - function normalize(a, b) { - return [ - [Math.min(a[0], b[0]), Math.min(a[1], b[1])], - [Math.max(a[0], b[0]), Math.max(a[1], b[1])]]; + // U-turn + if (start.tags.oneway !== 'yes' && start.tags.oneway !== '-1') { + turns.push(withRestriction({ + from: from, + via: via, + to: from, + u: true + })); } - function mouseup() { + return turns; + }; - selection - .on('mousemove.lasso', null) - .on('mouseup.lasso', null); + return intersection; +}; - if (!lasso) return; - var extent = iD.geo.Extent( - normalize(context.projection.invert(lasso.a()), - context.projection.invert(lasso.b()))); +iD.geo.inferRestriction = function(graph, from, via, to, projection) { + var fromWay = graph.entity(from.way), + fromNode = graph.entity(from.node), + toWay = graph.entity(to.way), + toNode = graph.entity(to.node), + viaNode = graph.entity(via.node), + fromOneWay = (fromWay.tags.oneway === 'yes' && fromWay.last() === via.node) || + (fromWay.tags.oneway === '-1' && fromWay.first() === via.node), + toOneWay = (toWay.tags.oneway === 'yes' && toWay.first() === via.node) || + (toWay.tags.oneway === '-1' && toWay.last() === via.node), + angle = iD.geo.angle(viaNode, fromNode, projection) - + iD.geo.angle(viaNode, toNode, projection); - lasso.close(); + angle = angle * 180 / Math.PI; - var selected = context.intersects(extent).filter(function (entity) { - return entity.type === 'node'; - }); + while (angle < 0) + angle += 360; - if (selected.length) { - context.enter(iD.modes.Select(context, _.pluck(selected, 'id'))); - } - } + if (fromNode === toNode) + return 'no_u_turn'; + if ((angle < 23 || angle > 336) && fromOneWay && toOneWay) + return 'no_u_turn'; + if (angle < 158) + return 'no_right_turn'; + if (angle > 202) + return 'no_left_turn'; - selection - .on('mousedown.lasso', mousedown); - }; + return 'no_straight_on'; +}; +// For fixing up rendering of multipolygons with tags on the outer member. +// https://github.com/openstreetmap/iD/issues/613 +iD.geo.isSimpleMultipolygonOuterMember = function(entity, graph) { + if (entity.type !== 'way') + return false; - behavior.off = function(selection) { - selection.on('mousedown.lasso', null); - }; + var parents = graph.parentRelations(entity); + if (parents.length !== 1) + return false; - return behavior; -}; -iD.behavior.Select = function(context) { - function keydown() { - if (d3.event && d3.event.shiftKey) { - context.surface() - .classed('behavior-multiselect', true); - } - } + var parent = parents[0]; + if (!parent.isMultipolygon() || Object.keys(parent.tags).length > 1) + return false; - function keyup() { - if (!d3.event || !d3.event.shiftKey) { - context.surface() - .classed('behavior-multiselect', false); - } + var members = parent.members, member; + for (var i = 0; i < members.length; i++) { + member = members[i]; + if (member.id === entity.id && member.role && member.role !== 'outer') + return false; // Not outer member + if (member.id !== entity.id && (!member.role || member.role === 'outer')) + return false; // Not a simple multipolygon } - function click() { - var datum = d3.event.target.__data__; - var lasso = d3.select('#surface .lasso').node(); - if (!(datum instanceof iD.Entity)) { - if (!d3.event.shiftKey && !lasso) - context.enter(iD.modes.Browse(context)); + return parent; +}; - } else if (!d3.event.shiftKey && !lasso) { - // Avoid re-entering Select mode with same entity. - if (context.selectedIDs().length !== 1 || context.selectedIDs()[0] !== datum.id) { - context.enter(iD.modes.Select(context, [datum.id])); - } else { - context.mode().reselect(); - } - } else if (context.selectedIDs().indexOf(datum.id) >= 0) { - var selectedIDs = _.without(context.selectedIDs(), datum.id); - context.enter(selectedIDs.length ? - iD.modes.Select(context, selectedIDs) : - iD.modes.Browse(context)); +iD.geo.simpleMultipolygonOuterMember = function(entity, graph) { + if (entity.type !== 'way') + return false; - } else { - context.enter(iD.modes.Select(context, context.selectedIDs().concat([datum.id]))); + var parents = graph.parentRelations(entity); + if (parents.length !== 1) + return false; + + var parent = parents[0]; + if (!parent.isMultipolygon() || Object.keys(parent.tags).length > 1) + return false; + + var members = parent.members, member, outerMember; + for (var i = 0; i < members.length; i++) { + member = members[i]; + if (!member.role || member.role === 'outer') { + if (outerMember) + return false; // Not a simple multipolygon + outerMember = member; } } - var behavior = function(selection) { - d3.select(window) - .on('keydown.select', keydown) - .on('keyup.select', keyup); + return outerMember && graph.hasEntity(outerMember.id); +}; - selection.on('click.select', click); +// Join `array` into sequences of connecting ways. +// +// Segments which share identical start/end nodes will, as much as possible, +// be connected with each other. +// +// The return value is a nested array. Each constituent array contains elements +// of `array` which have been determined to connect. Each consitituent array +// also has a `nodes` property whose value is an ordered array of member nodes, +// with appropriate order reversal and start/end coordinate de-duplication. +// +// Members of `array` must have, at minimum, `type` and `id` properties. +// Thus either an array of `iD.Way`s or a relation member array may be +// used. +// +// If an member has a `tags` property, its tags will be reversed via +// `iD.actions.Reverse` in the output. +// +// Incomplete members (those for which `graph.hasEntity(element.id)` returns +// false) and non-way members are ignored. +// +iD.geo.joinWays = function(array, graph) { + var joined = [], member, current, nodes, first, last, i, how, what; - keydown(); - }; + array = array.filter(function(member) { + return member.type === 'way' && graph.hasEntity(member.id); + }); - behavior.off = function(selection) { - d3.select(window) - .on('keydown.select', null) - .on('keyup.select', null); + function resolve(member) { + return graph.childNodes(graph.entity(member.id)); + } - selection.on('click.select', null); + function reverse(member) { + return member.tags ? iD.actions.Reverse(member.id, {reverseOneway: true})(graph).entity(member.id) : member; + } - keyup(); - }; + while (array.length) { + member = array.shift(); + current = [member]; + current.nodes = nodes = resolve(member).slice(); + joined.push(current); - return behavior; -}; -iD.behavior.Tail = function() { - var text, - container, - xmargin = 25, - tooltipSize = [0, 0], - selectionSize = [0, 0]; + while (array.length && _.first(nodes) !== _.last(nodes)) { + first = _.first(nodes); + last = _.last(nodes); - function tail(selection) { - if (!text) return; + for (i = 0; i < array.length; i++) { + member = array[i]; + what = resolve(member); - d3.select(window) - .on('resize.tail', function() { selectionSize = selection.dimensions(); }); - - function show() { - container.style('display', 'block'); - tooltipSize = container.dimensions(); - } - - function mousemove() { - if (container.style('display') === 'none') show(); - var xoffset = ((d3.event.clientX + tooltipSize[0] + xmargin) > selectionSize[0]) ? - -tooltipSize[0] - xmargin : xmargin; - container.classed('left', xoffset > 0); - iD.util.setTransform(container, d3.event.clientX + xoffset, d3.event.clientY); - } - - function mouseleave() { - if (d3.event.relatedTarget !== container.node()) { - container.style('display', 'none'); - } - } - - function mouseenter() { - if (d3.event.relatedTarget !== container.node()) { - show(); + if (last === _.first(what)) { + how = nodes.push; + what = what.slice(1); + break; + } else if (last === _.last(what)) { + how = nodes.push; + what = what.slice(0, -1).reverse(); + member = reverse(member); + break; + } else if (first === _.last(what)) { + how = nodes.unshift; + what = what.slice(0, -1); + break; + } else if (first === _.first(what)) { + how = nodes.unshift; + what = what.slice(1).reverse(); + member = reverse(member); + break; + } else { + what = how = null; + } } - } - - container = d3.select(document.body) - .append('div') - .style('display', 'none') - .attr('class', 'tail tooltip-inner'); - - container.append('div') - .text(text); - selection - .on('mousemove.tail', mousemove) - .on('mouseenter.tail', mouseenter) - .on('mouseleave.tail', mouseleave); + if (!what) + break; // No more joinable ways. - container - .on('mousemove.tail', mousemove); + how.apply(current, [member]); + how.apply(nodes, what); - tooltipSize = container.dimensions(); - selectionSize = selection.dimensions(); + array.splice(i, 1); + } } - tail.off = function(selection) { - if (!text) return; - - container - .on('mousemove.tail', null) - .remove(); + return joined; +}; +/* + Bypasses features of D3's default projection stream pipeline that are unnecessary: + * Antimeridian clipping + * Spherical rotation + * Resampling +*/ +iD.geo.RawMercator = function () { + var project = d3.geo.mercator.raw, + k = 512 / Math.PI, // scale + x = 0, y = 0, // translate + clipExtent = [[0, 0], [0, 0]]; - selection - .on('mousemove.tail', null) - .on('mouseenter.tail', null) - .on('mouseleave.tail', null); + function projection(point) { + point = project(point[0] * Math.PI / 180, point[1] * Math.PI / 180); + return [point[0] * k + x, y - point[1] * k]; + } - d3.select(window) - .on('resize.tail', null); + projection.invert = function(point) { + point = project.invert((point[0] - x) / k, (y - point[1]) / k); + return point && [point[0] * 180 / Math.PI, point[1] * 180 / Math.PI]; }; - tail.text = function(_) { - if (!arguments.length) return text; - text = _; - return tail; + projection.scale = function(_) { + if (!arguments.length) return k; + k = +_; + return projection; }; - return tail; -}; -iD.modes = {}; -iD.modes.AddArea = function(context) { - var mode = { - id: 'add-area', - button: 'area', - title: t('modes.add_area.title'), - description: t('modes.add_area.description'), - key: '3' + projection.translate = function(_) { + if (!arguments.length) return [x, y]; + x = +_[0]; + y = +_[1]; + return projection; }; - var behavior = iD.behavior.AddWay(context) - .tail(t('modes.add_area.tail')) - .on('start', start) - .on('startFromWay', startFromWay) - .on('startFromNode', startFromNode), - defaultTags = {area: 'yes'}; + projection.clipExtent = function(_) { + if (!arguments.length) return clipExtent; + clipExtent = _; + return projection; + }; - function start(loc) { - var graph = context.graph(), - node = iD.Node({loc: loc}), - way = iD.Way({tags: defaultTags}); + projection.stream = d3.geo.transform({ + point: function(x, y) { + x = projection([x, y]); + this.stream.point(x[0], x[1]); + } + }).stream; - context.perform( - iD.actions.AddEntity(node), - iD.actions.AddEntity(way), - iD.actions.AddVertex(way.id, node.id), - iD.actions.AddVertex(way.id, node.id)); + return projection; +}; +iD.actions = {}; +iD.actions.AddEntity = function(way) { + return function(graph) { + return graph.replace(way); + }; +}; +iD.actions.AddMember = function(relationId, member, memberIndex) { + return function(graph) { + var relation = graph.entity(relationId); - context.enter(iD.modes.DrawArea(context, way.id, graph)); - } + if (isNaN(memberIndex) && member.type === 'way') { + var members = relation.indexedMembers(); + members.push(member); - function startFromWay(loc, edge) { - var graph = context.graph(), - node = iD.Node({loc: loc}), - way = iD.Way({tags: defaultTags}); + var joined = iD.geo.joinWays(members, graph); + for (var i = 0; i < joined.length; i++) { + var segment = joined[i]; + for (var j = 0; j < segment.length && segment.length >= 2; j++) { + if (segment[j] !== member) + continue; - context.perform( - iD.actions.AddEntity(node), - iD.actions.AddEntity(way), - iD.actions.AddVertex(way.id, node.id), - iD.actions.AddVertex(way.id, node.id), - iD.actions.AddMidpoint({ loc: loc, edge: edge }, node)); + if (j === 0) { + memberIndex = segment[j + 1].index; + } else if (j === segment.length - 1) { + memberIndex = segment[j - 1].index + 1; + } else { + memberIndex = Math.min(segment[j - 1].index + 1, segment[j + 1].index + 1); + } + } + } + } - context.enter(iD.modes.DrawArea(context, way.id, graph)); - } + return graph.replace(relation.addMember(member, memberIndex)); + }; +}; +iD.actions.AddMidpoint = function(midpoint, node) { + return function(graph) { + graph = graph.replace(node.move(midpoint.loc)); - function startFromNode(node) { - var graph = context.graph(), - way = iD.Way({tags: defaultTags}); + var parents = _.intersection( + graph.parentWays(graph.entity(midpoint.edge[0])), + graph.parentWays(graph.entity(midpoint.edge[1]))); - context.perform( - iD.actions.AddEntity(way), - iD.actions.AddVertex(way.id, node.id), - iD.actions.AddVertex(way.id, node.id)); + parents.forEach(function(way) { + for (var i = 0; i < way.nodes.length - 1; i++) { + if (iD.geo.edgeEqual([way.nodes[i], way.nodes[i + 1]], midpoint.edge)) { + graph = graph.replace(graph.entity(way.id).addNode(node.id, i + 1)); - context.enter(iD.modes.DrawArea(context, way.id, graph)); - } + // Add only one midpoint on doubled-back segments, + // turning them into self-intersections. + return; + } + } + }); - mode.enter = function() { - context.install(behavior); + return graph; }; - - mode.exit = function() { - context.uninstall(behavior); +}; +// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/AddNodeToWayAction.as +iD.actions.AddVertex = function(wayId, nodeId, index) { + return function(graph) { + return graph.replace(graph.entity(wayId).addNode(nodeId, index)); }; - - return mode; }; -iD.modes.AddLine = function(context) { - var mode = { - id: 'add-line', - button: 'line', - title: t('modes.add_line.title'), - description: t('modes.add_line.description'), - key: '2' +iD.actions.ChangeMember = function(relationId, member, memberIndex) { + return function(graph) { + return graph.replace(graph.entity(relationId).updateMember(member, memberIndex)); }; +}; +iD.actions.ChangePreset = function(entityId, oldPreset, newPreset) { + return function(graph) { + var entity = graph.entity(entityId), + geometry = entity.geometry(graph), + tags = entity.tags; - var behavior = iD.behavior.AddWay(context) - .tail(t('modes.add_line.tail')) - .on('start', start) - .on('startFromWay', startFromWay) - .on('startFromNode', startFromNode); - - function start(loc) { - var graph = context.graph(), - node = iD.Node({loc: loc}), - way = iD.Way(); + if (oldPreset) tags = oldPreset.removeTags(tags, geometry); + if (newPreset) tags = newPreset.applyTags(tags, geometry); - context.perform( - iD.actions.AddEntity(node), - iD.actions.AddEntity(way), - iD.actions.AddVertex(way.id, node.id)); + return graph.replace(entity.update({tags: tags})); + }; +}; +iD.actions.ChangeTags = function(entityId, tags) { + return function(graph) { + var entity = graph.entity(entityId); + return graph.replace(entity.update({tags: tags})); + }; +}; +iD.actions.Circularize = function(wayId, projection, maxAngle) { + maxAngle = (maxAngle || 20) * Math.PI / 180; - context.enter(iD.modes.DrawLine(context, way.id, graph)); - } + var action = function(graph) { + var way = graph.entity(wayId); - function startFromWay(loc, edge) { - var graph = context.graph(), - node = iD.Node({loc: loc}), - way = iD.Way(); + if (!way.isConvex(graph)) { + graph = action.makeConvex(graph); + } - context.perform( - iD.actions.AddEntity(node), - iD.actions.AddEntity(way), - iD.actions.AddVertex(way.id, node.id), - iD.actions.AddMidpoint({ loc: loc, edge: edge }, node)); + var nodes = _.uniq(graph.childNodes(way)), + keyNodes = nodes.filter(function(n) { return graph.parentWays(n).length !== 1; }), + points = nodes.map(function(n) { return projection(n.loc); }), + keyPoints = keyNodes.map(function(n) { return projection(n.loc); }), + centroid = (points.length === 2) ? iD.geo.interp(points[0], points[1], 0.5) : d3.geom.polygon(points).centroid(), + radius = d3.median(points, function(p) { return iD.geo.euclideanDistance(centroid, p); }), + sign = d3.geom.polygon(points).area() > 0 ? 1 : -1, + ids; - context.enter(iD.modes.DrawLine(context, way.id, graph)); - } + // we need atleast two key nodes for the algorithm to work + if (!keyNodes.length) { + keyNodes = [nodes[0]]; + keyPoints = [points[0]]; + } - function startFromNode(node) { - var way = iD.Way(); + if (keyNodes.length === 1) { + var index = nodes.indexOf(keyNodes[0]), + oppositeIndex = Math.floor((index + nodes.length / 2) % nodes.length); - context.perform( - iD.actions.AddEntity(way), - iD.actions.AddVertex(way.id, node.id)); + keyNodes.push(nodes[oppositeIndex]); + keyPoints.push(points[oppositeIndex]); + } - context.enter(iD.modes.DrawLine(context, way.id, context.graph())); - } + // key points and nodes are those connected to the ways, + // they are projected onto the circle, inbetween nodes are moved + // to constant intervals between key nodes, extra inbetween nodes are + // added if necessary. + for (var i = 0; i < keyPoints.length; i++) { + var nextKeyNodeIndex = (i + 1) % keyNodes.length, + startNode = keyNodes[i], + endNode = keyNodes[nextKeyNodeIndex], + startNodeIndex = nodes.indexOf(startNode), + endNodeIndex = nodes.indexOf(endNode), + numberNewPoints = -1, + indexRange = endNodeIndex - startNodeIndex, + distance, totalAngle, eachAngle, startAngle, endAngle, + angle, loc, node, j, + inBetweenNodes = []; - mode.enter = function() { - context.install(behavior); - }; + if (indexRange < 0) { + indexRange += nodes.length; + } - mode.exit = function() { - context.uninstall(behavior); - }; + // position this key node + distance = iD.geo.euclideanDistance(centroid, keyPoints[i]); + if (distance === 0) { distance = 1e-4; } + keyPoints[i] = [ + centroid[0] + (keyPoints[i][0] - centroid[0]) / distance * radius, + centroid[1] + (keyPoints[i][1] - centroid[1]) / distance * radius]; + graph = graph.replace(keyNodes[i].move(projection.invert(keyPoints[i]))); - return mode; -}; -iD.modes.AddPoint = function(context) { - var mode = { - id: 'add-point', - button: 'point', - title: t('modes.add_point.title'), - description: t('modes.add_point.description'), - key: '1' - }; + // figure out the between delta angle we want to match to + startAngle = Math.atan2(keyPoints[i][1] - centroid[1], keyPoints[i][0] - centroid[0]); + endAngle = Math.atan2(keyPoints[nextKeyNodeIndex][1] - centroid[1], keyPoints[nextKeyNodeIndex][0] - centroid[0]); + totalAngle = endAngle - startAngle; - var behavior = iD.behavior.Draw(context) - .tail(t('modes.add_point.tail')) - .on('click', add) - .on('clickWay', addWay) - .on('clickNode', addNode) - .on('cancel', cancel) - .on('finish', cancel); + // detects looping around -pi/pi + if (totalAngle * sign > 0) { + totalAngle = -sign * (2 * Math.PI - Math.abs(totalAngle)); + } - function add(loc) { - var node = iD.Node({loc: loc}); + do { + numberNewPoints++; + eachAngle = totalAngle / (indexRange + numberNewPoints); + } while (Math.abs(eachAngle) > maxAngle); - context.perform( - iD.actions.AddEntity(node), - t('operations.add.annotation.point')); + // move existing points + for (j = 1; j < indexRange; j++) { + angle = startAngle + j * eachAngle; + loc = projection.invert([ + centroid[0] + Math.cos(angle)*radius, + centroid[1] + Math.sin(angle)*radius]); - context.enter( - iD.modes.Select(context, [node.id]) - .suppressMenu(true) - .newFeature(true)); - } + node = nodes[(j + startNodeIndex) % nodes.length].move(loc); + graph = graph.replace(node); + } - function addWay(loc) { - add(loc); - } + // add new inbetween nodes if necessary + for (j = 0; j < numberNewPoints; j++) { + angle = startAngle + (indexRange + j) * eachAngle; + loc = projection.invert([ + centroid[0] + Math.cos(angle) * radius, + centroid[1] + Math.sin(angle) * radius]); - function addNode(node) { - add(node.loc); - } + node = iD.Node({loc: loc}); + graph = graph.replace(node); - function cancel() { - context.enter(iD.modes.Browse(context)); - } + nodes.splice(endNodeIndex + j, 0, node); + inBetweenNodes.push(node.id); + } + + // Check for other ways that share these keyNodes.. + // If keyNodes are adjacent in both ways, + // we can add inBetween nodes to that shared way too.. + if (indexRange === 1 && inBetweenNodes.length) { + var startIndex1 = way.nodes.lastIndexOf(startNode.id), + endIndex1 = way.nodes.lastIndexOf(endNode.id), + wayDirection1 = (endIndex1 - startIndex1); + if (wayDirection1 < -1) { wayDirection1 = 1; } + + /* eslint-disable no-loop-func */ + _.each(_.without(graph.parentWays(keyNodes[i]), way), function(sharedWay) { + if (sharedWay.areAdjacent(startNode.id, endNode.id)) { + var startIndex2 = sharedWay.nodes.lastIndexOf(startNode.id), + endIndex2 = sharedWay.nodes.lastIndexOf(endNode.id), + wayDirection2 = (endIndex2 - startIndex2), + insertAt = endIndex2; + if (wayDirection2 < -1) { wayDirection2 = 1; } + + if (wayDirection1 !== wayDirection2) { + inBetweenNodes.reverse(); + insertAt = startIndex2; + } + for (j = 0; j < inBetweenNodes.length; j++) { + sharedWay = sharedWay.addNode(inBetweenNodes[j], insertAt + j); + } + graph = graph.replace(sharedWay); + } + }); + /* eslint-enable no-loop-func */ + } - mode.enter = function() { - context.install(behavior); + } + + // update the way to have all the new nodes + ids = nodes.map(function(n) { return n.id; }); + ids.push(ids[0]); + + way = way.update({nodes: ids}); + graph = graph.replace(way); + + return graph; }; - mode.exit = function() { - context.uninstall(behavior); + action.makeConvex = function(graph) { + var way = graph.entity(wayId), + nodes = _.uniq(graph.childNodes(way)), + points = nodes.map(function(n) { return projection(n.loc); }), + sign = d3.geom.polygon(points).area() > 0 ? 1 : -1, + hull = d3.geom.hull(points); + + // D3 convex hulls go counterclockwise.. + if (sign === -1) { + nodes.reverse(); + points.reverse(); + } + + for (var i = 0; i < hull.length - 1; i++) { + var startIndex = points.indexOf(hull[i]), + endIndex = points.indexOf(hull[i+1]), + indexRange = (endIndex - startIndex); + + if (indexRange < 0) { + indexRange += nodes.length; + } + + // move interior nodes to the surface of the convex hull.. + for (var j = 1; j < indexRange; j++) { + var point = iD.geo.interp(hull[i], hull[i+1], j / indexRange), + node = nodes[(j + startIndex) % nodes.length].move(projection.invert(point)); + graph = graph.replace(node); + } + } + return graph; }; - return mode; + action.disabled = function(graph) { + if (!graph.entity(wayId).isClosed()) + return 'not_closed'; + }; + + return action; }; -iD.modes.Browse = function(context) { - var mode = { - button: 'browse', - id: 'browse', - title: t('modes.browse.title'), - description: t('modes.browse.description'), - key: '1' - }, sidebar; +// Connect the ways at the given nodes. +// +// The last node will survive. All other nodes will be replaced with +// the surviving node in parent ways, and then removed. +// +// Tags and relation memberships of of non-surviving nodes are merged +// to the survivor. +// +// This is the inverse of `iD.actions.Disconnect`. +// +// Reference: +// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MergeNodesAction.as +// https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/MergeNodesAction.java +// +iD.actions.Connect = function(nodeIds) { + return function(graph) { + var survivor = graph.entity(_.last(nodeIds)); - var behaviors = [ - iD.behavior.Hover(context) - .on('hover', context.ui().sidebar.hover), - iD.behavior.Select(context), - iD.behavior.Lasso(context), - iD.modes.DragNode(context).behavior]; + for (var i = 0; i < nodeIds.length - 1; i++) { + var node = graph.entity(nodeIds[i]); - mode.enter = function() { - behaviors.forEach(function(behavior) { - context.install(behavior); - }); + /* eslint-disable no-loop-func */ + graph.parentWays(node).forEach(function(parent) { + if (!parent.areAdjacent(node.id, survivor.id)) { + graph = graph.replace(parent.replaceNode(node.id, survivor.id)); + } + }); - // Get focus on the body. - if (document.activeElement && document.activeElement.blur) { - document.activeElement.blur(); - } + graph.parentRelations(node).forEach(function(parent) { + graph = graph.replace(parent.replaceMember(node, survivor)); + }); + /* eslint-enable no-loop-func */ - if (sidebar) { - context.ui().sidebar.show(sidebar); - } else { - context.ui().sidebar.select(null); + survivor = survivor.mergeTags(node.tags); + graph = iD.actions.DeleteNode(node.id)(graph); } + + graph = graph.replace(survivor); + + return graph; }; +}; +iD.actions.CopyEntities = function(ids, fromGraph) { + var copies = {}; - mode.exit = function() { - behaviors.forEach(function(behavior) { - context.uninstall(behavior); + var action = function(graph) { + ids.forEach(function(id) { + fromGraph.entity(id).copy(fromGraph, copies); }); - if (sidebar) { - context.ui().sidebar.hide(sidebar); + for (var id in copies) { + graph = graph.replace(copies[id]); } + + return graph; }; - mode.sidebar = function(_) { - if (!arguments.length) return sidebar; - sidebar = _; - return mode; + action.copies = function() { + return copies; }; - return mode; + return action; }; -iD.modes.DragNode = function(context) { - var mode = { - id: 'drag-node', - button: 'browse' - }; +iD.actions.DeleteMember = function(relationId, memberIndex) { + return function(graph) { + var relation = graph.entity(relationId) + .removeMember(memberIndex); - var nudgeInterval, - activeIDs, - wasMidpoint, - cancelled, - selectedIDs = [], - hover = iD.behavior.Hover(context) - .altDisables(true) - .on('hover', context.ui().sidebar.hover), - edit = iD.behavior.Edit(context); + graph = graph.replace(relation); - function edge(point, size) { - var pad = [30, 100, 30, 100]; - if (point[0] > size[0] - pad[0]) return [-10, 0]; - else if (point[0] < pad[2]) return [10, 0]; - else if (point[1] > size[1] - pad[1]) return [0, -10]; - else if (point[1] < pad[3]) return [0, 10]; - return null; - } + if (relation.isDegenerate()) + graph = iD.actions.DeleteRelation(relation.id)(graph); - function startNudge(nudge) { - if (nudgeInterval) window.clearInterval(nudgeInterval); - nudgeInterval = window.setInterval(function() { - context.pan(nudge); - }, 50); - } - - function stopNudge() { - if (nudgeInterval) window.clearInterval(nudgeInterval); - nudgeInterval = null; - } + return graph; + }; +}; +iD.actions.DeleteMultiple = function(ids) { + var actions = { + way: iD.actions.DeleteWay, + node: iD.actions.DeleteNode, + relation: iD.actions.DeleteRelation + }; - function moveAnnotation(entity) { - return t('operations.move.annotation.' + entity.geometry(context.graph())); - } + var action = function(graph) { + ids.forEach(function(id) { + if (graph.hasEntity(id)) { // It may have been deleted aready. + graph = actions[graph.entity(id).type](id)(graph); + } + }); - function connectAnnotation(entity) { - return t('operations.connect.annotation.' + entity.geometry(context.graph())); - } + return graph; + }; - function origin(entity) { - return context.projection(entity.loc); - } + action.disabled = function(graph) { + for (var i = 0; i < ids.length; i++) { + var id = ids[i], + disabled = actions[graph.entity(id).type](id).disabled(graph); + if (disabled) return disabled; + } + }; - function start(entity) { - cancelled = d3.event.sourceEvent.shiftKey; - if (cancelled) return behavior.cancel(); + return action; +}; +// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteNodeAction.as +iD.actions.DeleteNode = function(nodeId) { + var action = function(graph) { + var node = graph.entity(nodeId); - wasMidpoint = entity.type === 'midpoint'; - if (wasMidpoint) { - var midpoint = entity; - entity = iD.Node(); - context.perform(iD.actions.AddMidpoint(midpoint, entity)); + graph.parentWays(node) + .forEach(function(parent) { + parent = parent.removeNode(nodeId); + graph = graph.replace(parent); - var vertex = context.surface() - .selectAll('.' + entity.id); - behavior.target(vertex.node(), entity); + if (parent.isDegenerate()) { + graph = iD.actions.DeleteWay(parent.id)(graph); + } + }); - } else { - context.perform( - iD.actions.Noop()); - } + graph.parentRelations(node) + .forEach(function(parent) { + parent = parent.removeMembersWithID(nodeId); + graph = graph.replace(parent); - activeIDs = _.pluck(context.graph().parentWays(entity), 'id'); - activeIDs.push(entity.id); + if (parent.isDegenerate()) { + graph = iD.actions.DeleteRelation(parent.id)(graph); + } + }); - context.enter(mode); - } + return graph.remove(node); + }; - function datum() { - if (d3.event.sourceEvent.altKey) { - return {}; - } + action.disabled = function() { + return false; + }; - return d3.event.sourceEvent.target.__data__ || {}; + return action; +}; +// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteRelationAction.as +iD.actions.DeleteRelation = function(relationId) { + function deleteEntity(entity, graph) { + return !graph.parentWays(entity).length && + !graph.parentRelations(entity).length && + !entity.hasInterestingTags(); } - // via https://gist.github.com/shawnbot/4166283 - function childOf(p, c) { - if (p === c) return false; - while (c && c !== p) c = c.parentNode; - return c === p; - } + var action = function(graph) { + var relation = graph.entity(relationId); - function move(entity) { - if (cancelled) return; - d3.event.sourceEvent.stopPropagation(); + graph.parentRelations(relation) + .forEach(function(parent) { + parent = parent.removeMembersWithID(relationId); + graph = graph.replace(parent); - var nudge = childOf(context.container().node(), - d3.event.sourceEvent.toElement) && - edge(d3.event.point, context.map().dimensions()); + if (parent.isDegenerate()) { + graph = iD.actions.DeleteRelation(parent.id)(graph); + } + }); - if (nudge) startNudge(nudge); - else stopNudge(); + _.uniq(_.pluck(relation.members, 'id')).forEach(function(memberId) { + graph = graph.replace(relation.removeMembersWithID(memberId)); - var loc = context.map().mouseCoordinates(); + var entity = graph.entity(memberId); + if (deleteEntity(entity, graph)) { + graph = iD.actions.DeleteMultiple([memberId])(graph); + } + }); - var d = datum(); - if (d.type === 'node' && d.id !== entity.id) { - loc = d.loc; - } else if (d.type === 'way' && !d3.select(d3.event.sourceEvent.target).classed('fill')) { - loc = iD.geo.chooseEdge(context.childNodes(d), context.mouse(), context.projection).loc; - } + return graph.remove(relation); + }; - context.replace( - iD.actions.MoveNode(entity.id, loc), - moveAnnotation(entity)); + action.disabled = function(graph) { + if (!graph.entity(relationId).isComplete(graph)) + return 'incomplete_relation'; + }; + + return action; +}; +// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteWayAction.as +iD.actions.DeleteWay = function(wayId) { + function deleteNode(node, graph) { + return !graph.parentWays(node).length && + !graph.parentRelations(node).length && + !node.hasInterestingTags(); } - function end(entity) { - if (cancelled) return; + var action = function(graph) { + var way = graph.entity(wayId); - var d = datum(); + graph.parentRelations(way) + .forEach(function(parent) { + parent = parent.removeMembersWithID(wayId); + graph = graph.replace(parent); - if (d.type === 'way') { - var choice = iD.geo.chooseEdge(context.childNodes(d), context.mouse(), context.projection); - context.replace( - iD.actions.AddMidpoint({ loc: choice.loc, edge: [d.nodes[choice.index - 1], d.nodes[choice.index]] }, entity), - connectAnnotation(d)); + if (parent.isDegenerate()) { + graph = iD.actions.DeleteRelation(parent.id)(graph); + } + }); - } else if (d.type === 'node' && d.id !== entity.id) { - context.replace( - iD.actions.Connect([d.id, entity.id]), - connectAnnotation(d)); + _.uniq(way.nodes).forEach(function(nodeId) { + graph = graph.replace(way.removeNode(nodeId)); - } else if (wasMidpoint) { - context.replace( - iD.actions.Noop(), - t('operations.add.annotation.vertex')); + var node = graph.entity(nodeId); + if (deleteNode(node, graph)) { + graph = graph.remove(node); + } + }); - } else { - context.replace( - iD.actions.Noop(), - moveAnnotation(entity)); - } + return graph.remove(way); + }; - var reselection = selectedIDs.filter(function(id) { - return context.graph().hasEntity(id); + action.disabled = function(graph) { + var disabled = false; + + graph.parentRelations(graph.entity(wayId)).forEach(function(parent) { + var type = parent.tags.type, + role = parent.memberById(wayId).role || 'outer'; + if (type === 'route' || type === 'boundary' || (type === 'multipolygon' && role === 'outer')) { + disabled = 'part_of_relation'; + } }); - if (reselection.length) { - context.enter( - iD.modes.Select(context, reselection) - .suppressMenu(true)); - } else { - context.enter(iD.modes.Browse(context)); - } - } + return disabled; + }; - function cancel() { - behavior.cancel(); - context.enter(iD.modes.Browse(context)); - } + return action; +}; +iD.actions.DeprecateTags = function(entityId) { + return function(graph) { + var entity = graph.entity(entityId), + newtags = _.clone(entity.tags), + change = false, + rule; - function setActiveElements() { - context.surface().selectAll(iD.util.entitySelector(activeIDs)) - .classed('active', true); - } + // This handles deprecated tags with a single condition + for (var i = 0; i < iD.data.deprecated.length; i++) { - var behavior = iD.behavior.drag() - .delegate('g.node, g.point, g.midpoint') - .surface(context.surface().node()) - .origin(origin) - .on('start', start) - .on('move', move) - .on('end', end); + rule = iD.data.deprecated[i]; + var match = _.pairs(rule.old)[0], + replacements = rule.replace ? _.pairs(rule.replace) : null; - mode.enter = function() { - context.install(hover); - context.install(edit); + if (entity.tags[match[0]] && match[1] === '*') { - context.history() - .on('undone.drag-node', cancel); + var value = entity.tags[match[0]]; + if (replacements && !newtags[replacements[0][0]]) { + newtags[replacements[0][0]] = value; + } + delete newtags[match[0]]; + change = true; - context.map() - .on('drawn.drag-node', setActiveElements); + } else if (entity.tags[match[0]] === match[1]) { + newtags = _.assign({}, rule.replace || {}, _.omit(newtags, match[0])); + change = true; + } + } - setActiveElements(); + if (change) { + return graph.replace(entity.update({tags: newtags})); + } else { + return graph; + } }; +}; +iD.actions.DiscardTags = function(difference) { + return function(graph) { + function discardTags(entity) { + if (!_.isEmpty(entity.tags)) { + var tags = {}; + _.each(entity.tags, function(v, k) { + if (v) tags[k] = v; + }); - mode.exit = function() { - context.uninstall(hover); - context.uninstall(edit); - - context.history() - .on('undone.drag-node', null); - - context.map() - .on('drawn.drag-node', null); - - context.surface() - .selectAll('.active') - .classed('active', false); + graph = graph.replace(entity.update({ + tags: _.omit(tags, iD.data.discarded) + })); + } + } - stopNudge(); - }; + difference.modified().forEach(discardTags); + difference.created().forEach(discardTags); - mode.selectedIDs = function(_) { - if (!arguments.length) return selectedIDs; - selectedIDs = _; - return mode; + return graph; }; - - mode.behavior = behavior; - - return mode; }; -iD.modes.DrawArea = function(context, wayId, baseGraph) { - var mode = { - button: 'area', - id: 'draw-area' - }; - - var behavior; - - mode.enter = function() { - var way = context.entity(wayId), - headId = way.nodes[way.nodes.length - 2], - tailId = way.first(); +// Disconect the ways at the given node. +// +// Optionally, disconnect only the given ways. +// +// For testing convenience, accepts an ID to assign to the (first) new node. +// Normally, this will be undefined and the way will automatically +// be assigned a new ID. +// +// This is the inverse of `iD.actions.Connect`. +// +// Reference: +// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/UnjoinNodeAction.as +// https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/UnGlueAction.java +// +iD.actions.Disconnect = function(nodeId, newNodeId) { + var wayIds; - behavior = iD.behavior.DrawWay(context, wayId, -1, mode, baseGraph) - .tail(t('modes.draw_area.tail')); + var action = function(graph) { + var node = graph.entity(nodeId), + connections = action.connections(graph); - var addNode = behavior.addNode; + connections.forEach(function(connection) { + var way = graph.entity(connection.wayID), + newNode = iD.Node({id: newNodeId, loc: node.loc, tags: node.tags}); - behavior.addNode = function(node) { - if (node.id === headId || node.id === tailId) { - behavior.finish(); + graph = graph.replace(newNode); + if (connection.index === 0 && way.isArea()) { + // replace shared node with shared node.. + graph = graph.replace(way.replaceNode(way.nodes[0], newNode.id)); } else { - addNode(node); + // replace shared node with multiple new nodes.. + graph = graph.replace(way.updateNode(newNode.id, connection.index)); } - }; + }); - context.install(behavior); + return graph; }; - mode.exit = function() { - context.uninstall(behavior); - }; + action.connections = function(graph) { + var candidates = [], + keeping = false, + parentWays = graph.parentWays(graph.entity(nodeId)); - mode.selectedIDs = function() { - return [wayId]; - }; + parentWays.forEach(function(way) { + if (wayIds && wayIds.indexOf(way.id) === -1) { + keeping = true; + return; + } + if (way.isArea() && (way.nodes[0] === nodeId)) { + candidates.push({wayID: way.id, index: 0}); + } else { + way.nodes.forEach(function(waynode, index) { + if (waynode === nodeId) { + candidates.push({wayID: way.id, index: index}); + } + }); + } + }); - return mode; -}; -iD.modes.DrawLine = function(context, wayId, baseGraph, affix) { - var mode = { - button: 'line', - id: 'draw-line' + return keeping ? candidates : candidates.slice(1); }; - var behavior; - - mode.enter = function() { - var way = context.entity(wayId), - index = (affix === 'prefix') ? 0 : undefined, - headId = (affix === 'prefix') ? way.first() : way.last(); - - behavior = iD.behavior.DrawWay(context, wayId, index, mode, baseGraph) - .tail(t('modes.draw_line.tail')); + action.disabled = function(graph) { + var connections = action.connections(graph); + if (connections.length === 0 || (wayIds && wayIds.length !== connections.length)) + return 'not_connected'; - var addNode = behavior.addNode; + var parentWays = graph.parentWays(graph.entity(nodeId)), + seenRelationIds = {}, + sharedRelation; - behavior.addNode = function(node) { - if (node.id === headId) { - behavior.finish(); - } else { - addNode(node); - } - }; + parentWays.forEach(function(way) { + if (wayIds && wayIds.indexOf(way.id) === -1) + return; - context.install(behavior); - }; + var relations = graph.parentRelations(way); + relations.forEach(function(relation) { + if (relation.id in seenRelationIds) { + sharedRelation = relation; + } else { + seenRelationIds[relation.id] = true; + } + }); + }); - mode.exit = function() { - context.uninstall(behavior); + if (sharedRelation) + return 'relation'; }; - mode.selectedIDs = function() { - return [wayId]; + action.limitWays = function(_) { + if (!arguments.length) return wayIds; + wayIds = _; + return action; }; - return mode; + return action; }; -iD.modes.Move = function(context, entityIDs) { - var mode = { - id: 'move', - button: 'browse' - }; - - var keybinding = d3.keybinding('move'), - edit = iD.behavior.Edit(context), - annotation = entityIDs.length === 1 ? - t('operations.move.annotation.' + context.geometry(entityIDs[0])) : - t('operations.move.annotation.multiple'), - origin, - nudgeInterval; - - function edge(point, size) { - var pad = [30, 100, 30, 100]; - if (point[0] > size[0] - pad[0]) return [-10, 0]; - else if (point[0] < pad[2]) return [10, 0]; - else if (point[1] > size[1] - pad[1]) return [0, -10]; - else if (point[1] < pad[3]) return [0, 10]; - return null; - } - - function startNudge(nudge) { - if (nudgeInterval) window.clearInterval(nudgeInterval); - nudgeInterval = window.setInterval(function() { - context.pan(nudge); - context.replace( - iD.actions.Move(entityIDs, [-nudge[0], -nudge[1]], context.projection), - annotation); - var c = context.projection(origin); - origin = context.projection.invert([c[0] - nudge[0], c[1] - nudge[1]]); - }, 50); - } +// Join ways at the end node they share. +// +// This is the inverse of `iD.actions.Split`. +// +// Reference: +// https://github.com/systemed/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MergeWaysAction.as +// https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/CombineWayAction.java +// +iD.actions.Join = function(ids) { - function stopNudge() { - if (nudgeInterval) window.clearInterval(nudgeInterval); - nudgeInterval = null; + function groupEntitiesByGeometry(graph) { + var entities = ids.map(function(id) { return graph.entity(id); }); + return _.extend({line: []}, _.groupBy(entities, function(entity) { return entity.geometry(graph); })); } - function move() { - var p = context.mouse(); + var action = function(graph) { + var ways = ids.map(graph.entity, graph), + survivor = ways[0]; - var delta = origin ? - [p[0] - context.projection(origin)[0], - p[1] - context.projection(origin)[1]] : - [0, 0]; + // Prefer to keep an existing way. + for (var i = 0; i < ways.length; i++) { + if (!ways[i].isNew()) { + survivor = ways[i]; + break; + } + } - var nudge = edge(p, context.map().dimensions()); - if (nudge) startNudge(nudge); - else stopNudge(); + var joined = iD.geo.joinWays(ways, graph)[0]; - origin = context.map().mouseCoordinates(); + survivor = survivor.update({nodes: _.pluck(joined.nodes, 'id')}); + graph = graph.replace(survivor); - context.replace( - iD.actions.Move(entityIDs, delta, context.projection), - annotation); - } + joined.forEach(function(way) { + if (way.id === survivor.id) + return; - function finish() { - d3.event.stopPropagation(); - context.enter(iD.modes.Select(context, entityIDs) - .suppressMenu(true)); - stopNudge(); - } + graph.parentRelations(way).forEach(function(parent) { + graph = graph.replace(parent.replaceMember(way, survivor)); + }); - function cancel() { - context.pop(); - context.enter(iD.modes.Select(context, entityIDs) - .suppressMenu(true)); - stopNudge(); - } + survivor = survivor.mergeTags(way.tags); - function undone() { - context.enter(iD.modes.Browse(context)); - } + graph = graph.replace(survivor); + graph = iD.actions.DeleteWay(way.id)(graph); + }); - mode.enter = function() { - context.install(edit); + return graph; + }; - context.perform( - iD.actions.Noop(), - annotation); + action.disabled = function(graph) { + var geometries = groupEntitiesByGeometry(graph); + if (ids.length < 2 || ids.length !== geometries.line.length) + return 'not_eligible'; - context.surface() - .on('mousemove.move', move) - .on('click.move', finish); + var joined = iD.geo.joinWays(ids.map(graph.entity, graph), graph); + if (joined.length > 1) + return 'not_adjacent'; - context.history() - .on('undone.move', undone); + var nodeIds = _.pluck(joined[0].nodes, 'id').slice(1, -1), + relation, + tags = {}, + conflicting = false; - keybinding - .on('⎋', cancel) - .on('↩', finish); + joined[0].forEach(function(way) { + var parents = graph.parentRelations(way); + parents.forEach(function(parent) { + if (parent.isRestriction() && parent.members.some(function(m) { return nodeIds.indexOf(m.id) >= 0; })) + relation = parent; + }); - d3.select(document) - .call(keybinding); + for (var k in way.tags) { + if (!(k in tags)) { + tags[k] = way.tags[k]; + } else if (tags[k] && iD.interestingTag(k) && tags[k] !== way.tags[k]) { + conflicting = true; + } + } + }); + + if (relation) + return 'restriction'; + + if (conflicting) + return 'conflicting_tags'; }; - mode.exit = function() { - stopNudge(); + return action; +}; +iD.actions.Merge = function(ids) { + function groupEntitiesByGeometry(graph) { + var entities = ids.map(function(id) { return graph.entity(id); }); + return _.extend({point: [], area: [], line: [], relation: []}, + _.groupBy(entities, function(entity) { return entity.geometry(graph); })); + } - context.uninstall(edit); + var action = function(graph) { + var geometries = groupEntitiesByGeometry(graph), + target = geometries.area[0] || geometries.line[0], + points = geometries.point; - context.surface() - .on('mousemove.move', null) - .on('click.move', null); + points.forEach(function(point) { + target = target.mergeTags(point.tags); - context.history() - .on('undone.move', null); + graph.parentRelations(point).forEach(function(parent) { + graph = graph.replace(parent.replaceMember(point, target)); + }); - keybinding.off(); - }; + graph = graph.remove(point); + }); - return mode; -}; -iD.modes.RotateWay = function(context, wayId) { - var mode = { - id: 'rotate-way', - button: 'browse' - }; + graph = graph.replace(target); - var keybinding = d3.keybinding('rotate-way'), - edit = iD.behavior.Edit(context); + return graph; + }; - mode.enter = function() { - context.install(edit); + action.disabled = function(graph) { + var geometries = groupEntitiesByGeometry(graph); + if (geometries.point.length === 0 || + (geometries.area.length + geometries.line.length) !== 1 || + geometries.relation.length !== 0) + return 'not_eligible'; + }; - var annotation = t('operations.rotate.annotation.' + context.geometry(wayId)), - way = context.graph().entity(wayId), - nodes = _.uniq(context.graph().childNodes(way)), - points = nodes.map(function(n) { return context.projection(n.loc); }), - pivot = d3.geom.polygon(points).centroid(), - angle; + return action; +}; +iD.actions.MergePolygon = function(ids, newRelationId) { - context.perform( - iD.actions.Noop(), - annotation); + function groupEntities(graph) { + var entities = ids.map(function (id) { return graph.entity(id); }); + return _.extend({ + closedWay: [], + multipolygon: [], + other: [] + }, _.groupBy(entities, function(entity) { + if (entity.type === 'way' && entity.isClosed()) { + return 'closedWay'; + } else if (entity.type === 'relation' && entity.isMultipolygon()) { + return 'multipolygon'; + } else { + return 'other'; + } + })); + } - function rotate() { + var action = function(graph) { + var entities = groupEntities(graph); - var mousePoint = context.mouse(), - newAngle = Math.atan2(mousePoint[1] - pivot[1], mousePoint[0] - pivot[0]); + // An array representing all the polygons that are part of the multipolygon. + // + // Each element is itself an array of objects with an id property, and has a + // locs property which is an array of the locations forming the polygon. + var polygons = entities.multipolygon.reduce(function(polygons, m) { + return polygons.concat(iD.geo.joinWays(m.members, graph)); + }, []).concat(entities.closedWay.map(function(d) { + var member = [{id: d.id}]; + member.nodes = graph.childNodes(d); + return member; + })); - if (typeof angle === 'undefined') angle = newAngle; + // contained is an array of arrays of boolean values, + // where contained[j][k] is true iff the jth way is + // contained by the kth way. + var contained = polygons.map(function(w, i) { + return polygons.map(function(d, n) { + if (i === n) return null; + return iD.geo.polygonContainsPolygon( + _.pluck(d.nodes, 'loc'), + _.pluck(w.nodes, 'loc')); + }); + }); - context.replace( - iD.actions.RotateWay(wayId, pivot, newAngle - angle, context.projection), - annotation); + // Sort all polygons as either outer or inner ways + var members = [], + outer = true; - angle = newAngle; + while (polygons.length) { + extractUncontained(polygons); + polygons = polygons.filter(isContained); + contained = contained.filter(isContained).map(filterContained); } - function finish() { - d3.event.stopPropagation(); - context.enter(iD.modes.Select(context, [wayId]) - .suppressMenu(true)); + function isContained(d, i) { + return _.any(contained[i]); } - function cancel() { - context.pop(); - context.enter(iD.modes.Select(context, [wayId]) - .suppressMenu(true)); + function filterContained(d) { + return d.filter(isContained); } - function undone() { - context.enter(iD.modes.Browse(context)); + function extractUncontained(polygons) { + polygons.forEach(function(d, i) { + if (!isContained(d, i)) { + d.forEach(function(member) { + members.push({ + type: 'way', + id: member.id, + role: outer ? 'outer' : 'inner' + }); + }); + } + }); + outer = !outer; } - context.surface() - .on('mousemove.rotate-way', rotate) - .on('click.rotate-way', finish); + // Move all tags to one relation + var relation = entities.multipolygon[0] || + iD.Relation({ id: newRelationId, tags: { type: 'multipolygon' }}); - context.history() - .on('undone.rotate-way', undone); + entities.multipolygon.slice(1).forEach(function(m) { + relation = relation.mergeTags(m.tags); + graph = graph.remove(m); + }); - keybinding - .on('⎋', cancel) - .on('↩', finish); + entities.closedWay.forEach(function(way) { + function isThisOuter(m) { + return m.id === way.id && m.role !== 'inner'; + } + if (members.some(isThisOuter)) { + relation = relation.mergeTags(way.tags); + graph = graph.replace(way.update({ tags: {} })); + } + }); - d3.select(document) - .call(keybinding); + return graph.replace(relation.update({ + members: members, + tags: _.omit(relation.tags, 'area') + })); }; - mode.exit = function() { - context.uninstall(edit); + action.disabled = function(graph) { + var entities = groupEntities(graph); + if (entities.other.length > 0 || + entities.closedWay.length + entities.multipolygon.length < 2) + return 'not_eligible'; + if (!entities.multipolygon.every(function(r) { return r.isComplete(graph); })) + return 'incomplete_relation'; + }; - context.surface() - .on('mousemove.rotate-way', null) - .on('click.rotate-way', null); + return action; +}; +iD.actions.MergeRemoteChanges = function(id, localGraph, remoteGraph, formatUser) { + var option = 'safe', // 'safe', 'force_local', 'force_remote' + conflicts = []; - context.history() - .on('undone.rotate-way', null); + function user(d) { + return _.isFunction(formatUser) ? formatUser(d) : d; + } - keybinding.off(); - }; - return mode; -}; -iD.modes.Save = function(context) { - var ui = iD.ui.Commit(context) - .on('cancel', cancel) - .on('save', save); + function mergeLocation(remote, target) { + function pointEqual(a, b) { + var epsilon = 1e-6; + return (Math.abs(a[0] - b[0]) < epsilon) && (Math.abs(a[1] - b[1]) < epsilon); + } - function cancel() { - context.enter(iD.modes.Browse(context)); + if (option === 'force_local' || pointEqual(target.loc, remote.loc)) { + return target; + } + if (option === 'force_remote') { + return target.update({loc: remote.loc}); + } + + conflicts.push(t('merge_remote_changes.conflict.location', { user: user(remote.user) })); + return target; } - function save(e) { - var loading = iD.ui.Loading(context) - .message(t('save.uploading')) - .blocking(true); - context.container() - .call(loading); - - context.connection().putChangeset( - context.history().changes(iD.actions.DiscardTags(context.history().difference())), - e.comment, - context.history().imageryUsed(), - function(err, changeset_id) { - loading.close(); - if (err) { - var confirm = iD.ui.confirm(context.container()); - confirm - .select('.modal-section.header') - .append('h3') - .text(t('save.error')); - confirm - .select('.modal-section.message-text') - .append('p') - .text(err.responseText); - } else { - context.flush(); - success(e, changeset_id); + function mergeNodes(base, remote, target) { + if (option === 'force_local' || _.isEqual(target.nodes, remote.nodes)) { + return target; + } + if (option === 'force_remote') { + return target.update({nodes: remote.nodes}); + } + + var ccount = conflicts.length, + o = base.nodes || [], + a = target.nodes || [], + b = remote.nodes || [], + nodes = [], + hunks = Diff3.diff3_merge(a, o, b, true); + + for (var i = 0; i < hunks.length; i++) { + var hunk = hunks[i]; + if (hunk.ok) { + nodes.push.apply(nodes, hunk.ok); + } else { + // for all conflicts, we can assume c.a !== c.b + // because `diff3_merge` called with `true` option to exclude false conflicts.. + var c = hunk.conflict; + if (_.isEqual(c.o, c.a)) { // only changed remotely + nodes.push.apply(nodes, c.b); + } else if (_.isEqual(c.o, c.b)) { // only changed locally + nodes.push.apply(nodes, c.a); + } else { // changed both locally and remotely + conflicts.push(t('merge_remote_changes.conflict.nodelist', { user: user(remote.user) })); + break; } - }); - } + } + } - function success(e, changeset_id) { - context.enter(iD.modes.Browse(context) - .sidebar(iD.ui.Success(context) - .changeset({ - id: changeset_id, - comment: e.comment - }) - .on('cancel', function(ui) { - context.ui().sidebar.hide(ui); - }))); + return (conflicts.length === ccount) ? target.update({nodes: nodes}) : target; } - var mode = { - id: 'save' - }; - var behaviors = [ - iD.behavior.Hover(context), - iD.behavior.Select(context), - iD.behavior.Lasso(context), - iD.modes.DragNode(context).behavior]; + function mergeChildren(targetWay, children, updates, graph) { + function isUsed(node, targetWay) { + var parentWays = _.pluck(graph.parentWays(node), 'id'); + return node.hasInterestingTags() || + _.without(parentWays, targetWay.id).length > 0 || + graph.parentRelations(node).length > 0; + } - mode.enter = function() { - behaviors.forEach(function(behavior) { - context.install(behavior); - }); + var ccount = conflicts.length; - context.connection().authenticate(function() { - context.ui().sidebar.show(ui); - }); - }; + for (var i = 0; i < children.length; i++) { + var id = children[i], + node = graph.hasEntity(id); - mode.exit = function() { - behaviors.forEach(function(behavior) { - context.uninstall(behavior); - }); + // remove unused childNodes.. + if (targetWay.nodes.indexOf(id) === -1) { + if (node && !isUsed(node, targetWay)) { + updates.removeIds.push(id); + } + continue; + } - context.ui().sidebar.hide(ui); - }; + // restore used childNodes.. + var local = localGraph.hasEntity(id), + remote = remoteGraph.hasEntity(id), + target; - return mode; -}; -iD.modes.Select = function(context, selectedIDs) { - var mode = { - id: 'select', - button: 'browse' - }; + if (option === 'force_remote' && remote && remote.visible) { + updates.replacements.push(remote); - var keybinding = d3.keybinding('select'), - timeout = null, - behaviors = [ - iD.behavior.Hover(context), - iD.behavior.Select(context), - iD.behavior.Lasso(context), - iD.modes.DragNode(context) - .selectedIDs(selectedIDs) - .behavior], - inspector, - radialMenu, - newFeature = false, - suppressMenu = false; + } else if (option === 'force_local' && local) { + target = iD.Entity(local); + if (remote) { + target = target.update({ version: remote.version }); + } + updates.replacements.push(target); - var wrap = context.container() - .select('.inspector-wrap'); + } else if (option === 'safe' && local && remote && local.version !== remote.version) { + target = iD.Entity(local, { version: remote.version }); + if (remote.visible) { + target = mergeLocation(remote, target); + } else { + conflicts.push(t('merge_remote_changes.conflict.deleted', { user: user(remote.user) })); + } - function singular() { - if (selectedIDs.length === 1) { - return context.entity(selectedIDs[0]); + if (conflicts.length !== ccount) break; + updates.replacements.push(target); + } } + + return targetWay; } - function positionMenu() { - var entity = singular(); - if (entity && entity.type === 'node') { - radialMenu.center(context.projection(entity.loc)); - } else { - radialMenu.center(context.mouse()); + function updateChildren(updates, graph) { + for (var i = 0; i < updates.replacements.length; i++) { + graph = graph.replace(updates.replacements[i]); + } + if (updates.removeIds.length) { + graph = iD.actions.DeleteMultiple(updates.removeIds)(graph); } + return graph; } - function showMenu() { - context.surface() - .call(radialMenu.close) - .call(radialMenu); + + function mergeMembers(remote, target) { + if (option === 'force_local' || _.isEqual(target.members, remote.members)) { + return target; + } + if (option === 'force_remote') { + return target.update({members: remote.members}); + } + + conflicts.push(t('merge_remote_changes.conflict.memberlist', { user: user(remote.user) })); + return target; } - mode.selectedIDs = function() { - return selectedIDs; - }; - mode.reselect = function() { - var surfaceNode = context.surface().node(); - if (surfaceNode.focus) { // FF doesn't support it - surfaceNode.focus(); + function mergeTags(base, remote, target) { + function ignoreKey(k) { + return _.contains(iD.data.discarded, k); } - positionMenu(); - showMenu(); - }; + if (option === 'force_local' || _.isEqual(target.tags, remote.tags)) { + return target; + } + if (option === 'force_remote') { + return target.update({tags: remote.tags}); + } - mode.newFeature = function(_) { - if (!arguments.length) return newFeature; - newFeature = _; - return mode; - }; + var ccount = conflicts.length, + o = base.tags || {}, + a = target.tags || {}, + b = remote.tags || {}, + keys = _.reject(_.union(_.keys(o), _.keys(a), _.keys(b)), ignoreKey), + tags = _.clone(a), + changed = false; - mode.suppressMenu = function(_) { - if (!arguments.length) return suppressMenu; - suppressMenu = _; - return mode; - }; + for (var i = 0; i < keys.length; i++) { + var k = keys[i]; - mode.enter = function() { - behaviors.forEach(function(behavior) { - context.install(behavior); - }); + if (o[k] !== b[k] && a[k] !== b[k]) { // changed remotely.. + if (o[k] !== a[k]) { // changed locally.. + conflicts.push(t('merge_remote_changes.conflict.tags', + { tag: k, local: a[k], remote: b[k], user: user(remote.user) })); - var operations = _.without(d3.values(iD.operations), iD.operations.Delete) - .map(function(o) { return o(selectedIDs, context); }) - .filter(function(o) { return o.available(); }); - operations.unshift(iD.operations.Delete(selectedIDs, context)); + } else { // unchanged locally, accept remote change.. + if (b.hasOwnProperty(k)) { + tags[k] = b[k]; + } else { + delete tags[k]; + } + changed = true; + } + } + } - keybinding.on('⎋', function() { - context.enter(iD.modes.Browse(context)); - }, true); + return (changed && conflicts.length === ccount) ? target.update({tags: tags}) : target; + } - operations.forEach(function(operation) { - operation.keys.forEach(function(key) { - keybinding.on(key, function() { - if (!operation.disabled()) { - operation(); - } - }); - }); - }); - var notNew = selectedIDs.filter(function(id) { - return !context.entity(id).isNew(); - }); + // `graph.base()` is the common ancestor of the two graphs. + // `localGraph` contains user's edits up to saving + // `remoteGraph` contains remote edits to modified nodes + // `graph` must be a descendent of `localGraph` and may include + // some conflict resolution actions performed on it. + // + // --- ... --- `localGraph` -- ... -- `graph` + // / + // `graph.base()` --- ... --- `remoteGraph` + // + var action = function(graph) { + var updates = { replacements: [], removeIds: [] }, + base = graph.base().entities[id], + local = localGraph.entity(id), + remote = remoteGraph.entity(id), + target = iD.Entity(local, { version: remote.version }); + + // delete/undelete + if (!remote.visible) { + if (option === 'force_remote') { + return iD.actions.DeleteMultiple([id])(graph); + + } else if (option === 'force_local') { + if (target.type === 'way') { + target = mergeChildren(target, _.uniq(local.nodes), updates, graph); + graph = updateChildren(updates, graph); + } + return graph.replace(target); - if (notNew.length) { - var q = iD.util.stringQs(location.hash.substring(1)); - location.replace('#' + iD.util.qsString(_.assign(q, { - id: notNew.join(',') - }), true)); + } else { + conflicts.push(t('merge_remote_changes.conflict.deleted', { user: user(remote.user) })); + return graph; // do nothing + } } - context.ui().sidebar - .select(singular() ? singular().id : null, newFeature); + // merge + if (target.type === 'node') { + target = mergeLocation(remote, target); - context.history() - .on('undone.select', update) - .on('redone.select', update); + } else if (target.type === 'way') { + // pull in any child nodes that may not be present locally.. + graph.rebase(remoteGraph.childNodes(remote), [graph], false); + target = mergeNodes(base, remote, target); + target = mergeChildren(target, _.union(local.nodes, remote.nodes), updates, graph); - function update() { - context.surface().call(radialMenu.close); + } else if (target.type === 'relation') { + target = mergeMembers(remote, target); + } - if (_.any(selectedIDs, function(id) { return !context.hasEntity(id); })) { - // Exit mode if selected entity gets undone - context.enter(iD.modes.Browse(context)); - } + target = mergeTags(base, remote, target); + + if (!conflicts.length) { + graph = updateChildren(updates, graph).replace(target); } - context.map().on('move.select', function() { - context.surface().call(radialMenu.close); - }); + return graph; + }; - function dblclick() { - var target = d3.select(d3.event.target), - datum = target.datum(); + action.withOption = function(opt) { + option = opt; + return action; + }; - if (datum instanceof iD.Way && !target.classed('fill')) { - var choice = iD.geo.chooseEdge(context.childNodes(datum), context.mouse(), context.projection), - node = iD.Node(); + action.conflicts = function() { + return conflicts; + }; - var prev = datum.nodes[choice.index - 1], - next = datum.nodes[choice.index]; + return action; +}; +// https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/command/MoveCommand.java +// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MoveNodeAction.as +iD.actions.Move = function(moveIds, tryDelta, projection, cache) { + var delta = tryDelta; - context.perform( - iD.actions.AddMidpoint({loc: choice.loc, edge: [prev, next]}, node), - t('operations.add.annotation.vertex')); + function vecAdd(a, b) { return [a[0] + b[0], a[1] + b[1]]; } + function vecSub(a, b) { return [a[0] - b[0], a[1] - b[1]]; } - d3.event.preventDefault(); - d3.event.stopPropagation(); - } - } + function setupCache(graph) { + function canMove(nodeId) { + var parents = _.pluck(graph.parentWays(graph.entity(nodeId)), 'id'); + if (parents.length < 3) return true; - d3.select(document) - .call(keybinding); + // Don't move a vertex where >2 ways meet, unless all parentWays are moving too.. + var parentsMoving = _.all(parents, function(id) { return cache.moving[id]; }); + if (!parentsMoving) delete cache.moving[nodeId]; - function selectElements() { - context.surface() - .selectAll(iD.util.entityOrMemberSelector(selectedIDs, context.graph())) - .classed('selected', true); + return parentsMoving; } - context.map().on('drawn.select', selectElements); - selectElements(); + function cacheEntities(ids) { + _.each(ids, function(id) { + if (cache.moving[id]) return; + cache.moving[id] = true; - radialMenu = iD.ui.RadialMenu(context, operations); - var show = d3.event && !suppressMenu; + var entity = graph.hasEntity(id); + if (!entity) return; - if (show) { - positionMenu(); + if (entity.type === 'node') { + cache.nodes.push(id); + cache.startLoc[id] = entity.loc; + } else if (entity.type === 'way') { + cache.ways.push(id); + cacheEntities(entity.nodes); + } else { + cacheEntities(_.pluck(entity.members, 'id')); + } + }); } - timeout = window.setTimeout(function() { - if (show) { - showMenu(); - } + function cacheIntersections(ids) { + function isEndpoint(way, id) { return !way.isClosed() && !!way.affix(id); } - context.surface() - .on('dblclick.select', dblclick); - }, 200); + _.each(ids, function(id) { + // consider only intersections with 1 moved and 1 unmoved way. + _.each(graph.childNodes(graph.entity(id)), function(node) { + var parents = graph.parentWays(node); + if (parents.length !== 2) return; - if (selectedIDs.length > 1) { - var entities = iD.ui.SelectionList(context, selectedIDs); - context.ui().sidebar.show(entities); + var moved = graph.entity(id), + unmoved = _.find(parents, function(way) { return !cache.moving[way.id]; }); + if (!unmoved) return; + + // exclude ways that are overly connected.. + if (_.intersection(moved.nodes, unmoved.nodes).length > 2) return; + + if (moved.isArea() || unmoved.isArea()) return; + + cache.intersection[node.id] = { + nodeId: node.id, + movedId: moved.id, + unmovedId: unmoved.id, + movedIsEP: isEndpoint(moved, node.id), + unmovedIsEP: isEndpoint(unmoved, node.id) + }; + }); + }); } - }; - mode.exit = function() { - if (timeout) window.clearTimeout(timeout); - if (inspector) wrap.call(inspector.close); + if (!cache) { + cache = {}; + } + if (!cache.ok) { + cache.moving = {}; + cache.intersection = {}; + cache.replacedVertex = {}; + cache.startLoc = {}; + cache.nodes = []; + cache.ways = []; - behaviors.forEach(function(behavior) { - context.uninstall(behavior); - }); + cacheEntities(moveIds); + cacheIntersections(cache.ways); + cache.nodes = _.filter(cache.nodes, canMove); - var q = iD.util.stringQs(location.hash.substring(1)); - location.replace('#' + iD.util.qsString(_.omit(q, 'id'), true)); + cache.ok = true; + } + } - keybinding.off(); - context.history() - .on('undone.select', null) - .on('redone.select', null); + // Place a vertex where the moved vertex used to be, to preserve way shape.. + function replaceMovedVertex(nodeId, wayId, graph, delta) { + var way = graph.entity(wayId), + moved = graph.entity(nodeId), + movedIndex = way.nodes.indexOf(nodeId), + len, prevIndex, nextIndex; + + if (way.isClosed()) { + len = way.nodes.length - 1; + prevIndex = (movedIndex + len - 1) % len; + nextIndex = (movedIndex + len + 1) % len; + } else { + len = way.nodes.length; + prevIndex = movedIndex - 1; + nextIndex = movedIndex + 1; + } - context.surface() - .call(radialMenu.close) - .on('dblclick.select', null) - .selectAll('.selected') - .classed('selected', false); + var prev = graph.hasEntity(way.nodes[prevIndex]), + next = graph.hasEntity(way.nodes[nextIndex]); - context.map().on('drawn.select', null); - context.ui().sidebar.hide(); - }; + // Don't add orig vertex at endpoint.. + if (!prev || !next) return graph; - return mode; -}; -iD.operations = {}; -iD.operations.Circularize = function(selectedIDs, context) { - var entityId = selectedIDs[0], - geometry = context.geometry(entityId), - action = iD.actions.Circularize(entityId, context.projection); + var key = wayId + '_' + nodeId, + orig = cache.replacedVertex[key]; + if (!orig) { + orig = iD.Node(); + cache.replacedVertex[key] = orig; + cache.startLoc[orig.id] = cache.startLoc[nodeId]; + } - var operation = function() { - var annotation = t('operations.circularize.annotation.' + geometry); - context.perform(action, annotation); - }; + var start, end; + if (delta) { + start = projection(cache.startLoc[nodeId]); + end = projection.invert(vecAdd(start, delta)); + } else { + end = cache.startLoc[nodeId]; + } + orig = orig.move(end); - operation.available = function() { - return selectedIDs.length === 1 && - context.entity(entityId).type === 'way'; - }; + var angle = Math.abs(iD.geo.angle(orig, prev, projection) - + iD.geo.angle(orig, next, projection)) * 180 / Math.PI; - operation.disabled = function() { - return action.disabled(context.graph()); - }; + // Don't add orig vertex if it would just make a straight line.. + if (angle > 175 && angle < 185) return graph; - operation.tooltip = function() { - var disable = operation.disabled(); - return disable ? - t('operations.circularize.' + disable) : - t('operations.circularize.description.' + geometry); - }; + // Don't add orig vertex if another point is already nearby (within 10m) + if (iD.geo.sphericalDistance(prev.loc, orig.loc) < 10 || + iD.geo.sphericalDistance(orig.loc, next.loc) < 10) return graph; - operation.id = 'circularize'; - operation.keys = [t('operations.circularize.key')]; - operation.title = t('operations.circularize.title'); + // moving forward or backward along way? + var p1 = [prev.loc, orig.loc, moved.loc, next.loc].map(projection), + p2 = [prev.loc, moved.loc, orig.loc, next.loc].map(projection), + d1 = iD.geo.pathLength(p1), + d2 = iD.geo.pathLength(p2), + insertAt = (d1 < d2) ? movedIndex : nextIndex; - return operation; -}; -iD.operations.Continue = function(selectedIDs, context) { - var graph = context.graph(), - entities = selectedIDs.map(function(id) { return graph.entity(id); }), - geometries = _.extend({line: [], vertex: []}, - _.groupBy(entities, function(entity) { return entity.geometry(graph); })), - vertex = geometries.vertex[0]; + // moving around closed loop? + if (way.isClosed() && insertAt === 0) insertAt = len; - function candidateWays() { - return graph.parentWays(vertex).filter(function(parent) { - return parent.geometry(graph) === 'line' && - parent.affix(vertex.id) && - (geometries.line.length === 0 || geometries.line[0] === parent); - }); + way = way.addNode(orig.id, insertAt); + return graph.replace(orig).replace(way); } - var operation = function() { - var candidate = candidateWays()[0]; - context.enter(iD.modes.DrawLine( - context, - candidate.id, - context.graph(), - candidate.affix(vertex.id))); - }; + // Reorder nodes around intersections that have moved.. + function unZorroIntersection(intersection, graph) { + var vertex = graph.entity(intersection.nodeId), + way1 = graph.entity(intersection.movedId), + way2 = graph.entity(intersection.unmovedId), + isEP1 = intersection.movedIsEP, + isEP2 = intersection.unmovedIsEP; - operation.available = function() { - return geometries.vertex.length === 1 && geometries.line.length <= 1; - }; + // don't move the vertex if it is the endpoint of both ways. + if (isEP1 && isEP2) return graph; - operation.disabled = function() { - var candidates = candidateWays(); - if (candidates.length === 0) - return 'not_eligible'; - if (candidates.length > 1) - return 'multiple'; - }; + var nodes1 = _.without(graph.childNodes(way1), vertex), + nodes2 = _.without(graph.childNodes(way2), vertex); - operation.tooltip = function() { - var disable = operation.disabled(); - return disable ? - t('operations.continue.' + disable) : - t('operations.continue.description'); - }; + if (way1.isClosed() && way1.first() === vertex.id) nodes1.push(nodes1[0]); + if (way2.isClosed() && way2.first() === vertex.id) nodes2.push(nodes2[0]); - operation.id = 'continue'; - operation.keys = [t('operations.continue.key')]; - operation.title = t('operations.continue.title'); + var edge1 = !isEP1 && iD.geo.chooseEdge(nodes1, projection(vertex.loc), projection), + edge2 = !isEP2 && iD.geo.chooseEdge(nodes2, projection(vertex.loc), projection), + loc; - return operation; -}; -iD.operations.Delete = function(selectedIDs, context) { - var action = iD.actions.DeleteMultiple(selectedIDs); + // snap vertex to nearest edge (or some point between them).. + if (!isEP1 && !isEP2) { + var epsilon = 1e-4, maxIter = 10; + for (var i = 0; i < maxIter; i++) { + loc = iD.geo.interp(edge1.loc, edge2.loc, 0.5); + edge1 = iD.geo.chooseEdge(nodes1, projection(loc), projection); + edge2 = iD.geo.chooseEdge(nodes2, projection(loc), projection); + if (Math.abs(edge1.distance - edge2.distance) < epsilon) break; + } + } else if (!isEP1) { + loc = edge1.loc; + } else { + loc = edge2.loc; + } - var operation = function() { - var annotation, - nextSelectedID; + graph = graph.replace(vertex.move(loc)); - if (selectedIDs.length > 1) { - annotation = t('operations.delete.annotation.multiple', {n: selectedIDs.length}); + // if zorro happened, reorder nodes.. + if (!isEP1 && edge1.index !== way1.nodes.indexOf(vertex.id)) { + way1 = way1.removeNode(vertex.id).addNode(vertex.id, edge1.index); + graph = graph.replace(way1); + } + if (!isEP2 && edge2.index !== way2.nodes.indexOf(vertex.id)) { + way2 = way2.removeNode(vertex.id).addNode(vertex.id, edge2.index); + graph = graph.replace(way2); + } - } else { - var id = selectedIDs[0], - entity = context.entity(id), - geometry = context.geometry(id), - parents = context.graph().parentWays(entity), - parent = parents[0]; + return graph; + } - annotation = t('operations.delete.annotation.' + geometry); - // Select the next closest node in the way. - if (geometry === 'vertex' && parents.length === 1 && parent.nodes.length > 2) { - var nodes = parent.nodes, - i = nodes.indexOf(id); + function cleanupIntersections(graph) { + _.each(cache.intersection, function(obj) { + graph = replaceMovedVertex(obj.nodeId, obj.movedId, graph, delta); + graph = replaceMovedVertex(obj.nodeId, obj.unmovedId, graph, null); + graph = unZorroIntersection(obj, graph); + }); - if (i === 0) { - i++; - } else if (i === nodes.length - 1) { - i--; - } else { - var a = iD.geo.sphericalDistance(entity.loc, context.entity(nodes[i - 1]).loc), - b = iD.geo.sphericalDistance(entity.loc, context.entity(nodes[i + 1]).loc); - i = a < b ? i - 1 : i + 1; - } + return graph; + } - nextSelectedID = nodes[i]; - } - } + // check if moving way endpoint can cross an unmoved way, if so limit delta.. + function limitDelta(graph) { + _.each(cache.intersection, function(obj) { + if (!obj.movedIsEP) return; - context.perform( - action, - annotation); + var node = graph.entity(obj.nodeId), + start = projection(node.loc), + end = vecAdd(start, delta), + movedNodes = graph.childNodes(graph.entity(obj.movedId)), + movedPath = _.map(_.pluck(movedNodes, 'loc'), + function(loc) { return vecAdd(projection(loc), delta); }), + unmovedNodes = graph.childNodes(graph.entity(obj.unmovedId)), + unmovedPath = _.map(_.pluck(unmovedNodes, 'loc'), projection), + hits = iD.geo.pathIntersections(movedPath, unmovedPath); + + for (var i = 0; i < hits.length; i++) { + if (_.isEqual(hits[i], end)) continue; + var edge = iD.geo.chooseEdge(unmovedNodes, end, projection); + delta = vecSub(projection(edge.loc), start); + } + }); + } - if (nextSelectedID && context.hasEntity(nextSelectedID)) { - context.enter(iD.modes.Select(context, [nextSelectedID])); - } else { - context.enter(iD.modes.Browse(context)); - } - }; - operation.available = function() { - return true; - }; + var action = function(graph) { + if (delta[0] === 0 && delta[1] === 0) return graph; - operation.disabled = function() { - return action.disabled(context.graph()); - }; + setupCache(graph); - operation.tooltip = function() { - var disable = operation.disabled(); - return disable ? - t('operations.delete.' + disable) : - t('operations.delete.description'); - }; + if (!_.isEmpty(cache.intersection)) { + limitDelta(graph); + } - operation.id = 'delete'; - operation.keys = [iD.ui.cmd('⌘⌫'), iD.ui.cmd('⌘⌦')]; - operation.title = t('operations.delete.title'); + _.each(cache.nodes, function(id) { + var node = graph.entity(id), + start = projection(node.loc), + end = vecAdd(start, delta); + graph = graph.replace(node.move(projection.invert(end))); + }); - return operation; -}; -iD.operations.Disconnect = function(selectedIDs, context) { - var vertices = _.filter(selectedIDs, function vertex(entityId) { - return context.geometry(entityId) === 'vertex'; - }); + if (!_.isEmpty(cache.intersection)) { + graph = cleanupIntersections(graph); + } - var entityId = vertices[0], - action = iD.actions.Disconnect(entityId); + return graph; + }; - if (selectedIDs.length > 1) { - action.limitWays(_.without(selectedIDs, entityId)); - } + action.disabled = function(graph) { + function incompleteRelation(id) { + var entity = graph.entity(id); + return entity.type === 'relation' && !entity.isComplete(graph); + } - var operation = function() { - context.perform(action, t('operations.disconnect.annotation')); + if (_.any(moveIds, incompleteRelation)) + return 'incomplete_relation'; }; - operation.available = function() { - return vertices.length === 1; + action.delta = function() { + return delta; }; - operation.disabled = function() { - return action.disabled(context.graph()); + return action; +}; +// https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/command/MoveCommand.java +// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MoveNodeAction.as +iD.actions.MoveNode = function(nodeId, loc) { + return function(graph) { + return graph.replace(graph.entity(nodeId).move(loc)); }; - - operation.tooltip = function() { - var disable = operation.disabled(); - return disable ? - t('operations.disconnect.' + disable) : - t('operations.disconnect.description'); +}; +iD.actions.Noop = function() { + return function(graph) { + return graph; }; +}; +/* + * Based on https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/potlatch2/tools/Quadrilateralise.as + */ - operation.id = 'disconnect'; - operation.keys = [t('operations.disconnect.key')]; - operation.title = t('operations.disconnect.title'); +iD.actions.Orthogonalize = function(wayId, projection) { + var threshold = 12, // degrees within right or straight to alter + lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180), + upperThreshold = Math.cos(threshold * Math.PI / 180); - return operation; -}; -iD.operations.Merge = function(selectedIDs, context) { - var join = iD.actions.Join(selectedIDs), - merge = iD.actions.Merge(selectedIDs), - mergePolygon = iD.actions.MergePolygon(selectedIDs); + var action = function(graph) { + var way = graph.entity(wayId), + nodes = graph.childNodes(way), + points = _.uniq(nodes).map(function(n) { return projection(n.loc); }), + corner = {i: 0, dotp: 1}, + epsilon = 1e-4, + i, j, score, motions; - var operation = function() { - var annotation = t('operations.merge.annotation', {n: selectedIDs.length}), - action; + if (nodes.length === 4) { + for (i = 0; i < 1000; i++) { + motions = points.map(calcMotion); + points[corner.i] = addPoints(points[corner.i],motions[corner.i]); + score = corner.dotp; + if (score < epsilon) { + break; + } + } - if (!join.disabled(context.graph())) { - action = join; - } else if (!merge.disabled(context.graph())) { - action = merge; + graph = graph.replace(graph.entity(nodes[corner.i].id) + .move(projection.invert(points[corner.i]))); } else { - action = mergePolygon; - } - - context.perform(action, annotation); - context.enter(iD.modes.Select(context, selectedIDs.filter(function(id) { return context.hasEntity(id); })) - .suppressMenu(true)); - }; + var best, + originalPoints = _.clone(points); + score = Infinity; - operation.available = function() { - return selectedIDs.length >= 2; - }; + for (i = 0; i < 1000; i++) { + motions = points.map(calcMotion); + for (j = 0; j < motions.length; j++) { + points[j] = addPoints(points[j],motions[j]); + } + var newScore = squareness(points); + if (newScore < score) { + best = _.clone(points); + score = newScore; + } + if (score < epsilon) { + break; + } + } - operation.disabled = function() { - return join.disabled(context.graph()) && - merge.disabled(context.graph()) && - mergePolygon.disabled(context.graph()); - }; + points = best; - operation.tooltip = function() { - var j = join.disabled(context.graph()), - m = merge.disabled(context.graph()), - p = mergePolygon.disabled(context.graph()); + for (i = 0; i < points.length; i++) { + // only move the points that actually moved + if (originalPoints[i][0] !== points[i][0] || originalPoints[i][1] !== points[i][1]) { + graph = graph.replace(graph.entity(nodes[i].id) + .move(projection.invert(points[i]))); + } + } - if (j === 'restriction' && m && p) - return t('operations.merge.restriction', {relation: context.presets().item('type/restriction').name()}); + // remove empty nodes on straight sections + for (i = 0; i < points.length; i++) { + var node = nodes[i]; - if (p === 'incomplete_relation' && j && m) - return t('operations.merge.incomplete_relation'); + if (graph.parentWays(node).length > 1 || + graph.parentRelations(node).length || + node.hasInterestingTags()) { - if (j && m && p) - return t('operations.merge.' + j); + continue; + } - return t('operations.merge.description'); - }; + var dotp = normalizedDotProduct(i, points); + if (dotp < -1 + epsilon) { + graph = iD.actions.DeleteNode(nodes[i].id)(graph); + } + } + } - operation.id = 'merge'; - operation.keys = [t('operations.merge.key')]; - operation.title = t('operations.merge.title'); + return graph; - return operation; -}; -iD.operations.Move = function(selectedIDs, context) { - var operation = function() { - context.enter(iD.modes.Move(context, selectedIDs)); - }; + function calcMotion(b, i, array) { + var a = array[(i - 1 + array.length) % array.length], + c = array[(i + 1) % array.length], + p = subtractPoints(a, b), + q = subtractPoints(c, b), + scale, dotp; - operation.available = function() { - return selectedIDs.length > 1 || - context.entity(selectedIDs[0]).type !== 'node'; - }; + scale = 2 * Math.min(iD.geo.euclideanDistance(p, [0, 0]), iD.geo.euclideanDistance(q, [0, 0])); + p = normalizePoint(p, 1.0); + q = normalizePoint(q, 1.0); - operation.disabled = function() { - return iD.actions.Move(selectedIDs) - .disabled(context.graph()); - }; + dotp = filterDotProduct(p[0] * q[0] + p[1] * q[1]); - operation.tooltip = function() { - var disable = operation.disabled(); - return disable ? - t('operations.move.' + disable) : - t('operations.move.description'); - }; + // nasty hack to deal with almost-straight segments (angle is closer to 180 than to 90/270). + if (array.length > 3) { + if (dotp < -0.707106781186547) { + dotp += 1.0; + } + } else if (dotp && Math.abs(dotp) < corner.dotp) { + corner.i = i; + corner.dotp = Math.abs(dotp); + } - operation.id = 'move'; - operation.keys = [t('operations.move.key')]; - operation.title = t('operations.move.title'); + return normalizePoint(addPoints(p, q), 0.1 * dotp * scale); + } + }; - return operation; -}; -iD.operations.Orthogonalize = function(selectedIDs, context) { - var entityId = selectedIDs[0], - geometry = context.geometry(entityId), - action = iD.actions.Orthogonalize(entityId, context.projection); + function squareness(points) { + return points.reduce(function(sum, val, i, array) { + var dotp = normalizedDotProduct(i, array); - function operation() { - var annotation = t('operations.orthogonalize.annotation.' + geometry); - context.perform(action, annotation); + dotp = filterDotProduct(dotp); + return sum + 2.0 * Math.min(Math.abs(dotp - 1.0), Math.min(Math.abs(dotp), Math.abs(dotp + 1))); + }, 0); } - operation.available = function() { - var entity = context.entity(entityId); - return selectedIDs.length === 1 && - entity.type === 'way' && - entity.isClosed() && - _.uniq(entity.nodes).length > 2; - }; - - operation.disabled = function() { - return action.disabled(context.graph()); - }; - - operation.tooltip = function() { - var disable = operation.disabled(); - return disable ? - t('operations.orthogonalize.' + disable) : - t('operations.orthogonalize.description.' + geometry); - }; + function normalizedDotProduct(i, points) { + var a = points[(i - 1 + points.length) % points.length], + b = points[i], + c = points[(i + 1) % points.length], + p = subtractPoints(a, b), + q = subtractPoints(c, b); - operation.id = 'orthogonalize'; - operation.keys = [t('operations.orthogonalize.key')]; - operation.title = t('operations.orthogonalize.title'); + p = normalizePoint(p, 1.0); + q = normalizePoint(q, 1.0); - return operation; -}; -iD.operations.Reverse = function(selectedIDs, context) { - var entityId = selectedIDs[0]; + return p[0] * q[0] + p[1] * q[1]; + } - var operation = function() { - context.perform( - iD.actions.Reverse(entityId), - t('operations.reverse.annotation')); - }; + function subtractPoints(a, b) { + return [a[0] - b[0], a[1] - b[1]]; + } - operation.available = function() { - return selectedIDs.length === 1 && - context.geometry(entityId) === 'line'; - }; + function addPoints(a, b) { + return [a[0] + b[0], a[1] + b[1]]; + } - operation.disabled = function() { - return false; - }; + function normalizePoint(point, scale) { + var vector = [0, 0]; + var length = Math.sqrt(point[0] * point[0] + point[1] * point[1]); + if (length !== 0) { + vector[0] = point[0] / length; + vector[1] = point[1] / length; + } - operation.tooltip = function() { - return t('operations.reverse.description'); - }; + vector[0] *= scale; + vector[1] *= scale; - operation.id = 'reverse'; - operation.keys = [t('operations.reverse.key')]; - operation.title = t('operations.reverse.title'); + return vector; + } - return operation; -}; -iD.operations.Rotate = function(selectedIDs, context) { - var entityId = selectedIDs[0]; + function filterDotProduct(dotp) { + if (lowerThreshold > Math.abs(dotp) || Math.abs(dotp) > upperThreshold) { + return dotp; + } - var operation = function() { - context.enter(iD.modes.RotateWay(context, entityId)); - }; + return 0; + } - operation.available = function() { - var graph = context.graph(), - entity = graph.entity(entityId); + action.disabled = function(graph) { + var way = graph.entity(wayId), + nodes = graph.childNodes(way), + points = _.uniq(nodes).map(function(n) { return projection(n.loc); }); - if (selectedIDs.length !== 1 || - entity.type !== 'way') + if (squareness(points)) { return false; - if (context.geometry(entityId) === 'area') - return true; - if (entity.isClosed() && - graph.parentRelations(entity).some(function(r) { return r.isMultipolygon(); })) - return true; - return false; - }; - - operation.disabled = function() { - return false; - }; + } - operation.tooltip = function() { - return t('operations.rotate.description'); + return 'not_squarish'; }; - operation.id = 'rotate'; - operation.keys = [t('operations.rotate.key')]; - operation.title = t('operations.rotate.title'); - - return operation; + return action; }; -iD.operations.Split = function(selectedIDs, context) { - var vertices = _.filter(selectedIDs, function vertex(entityId) { - return context.geometry(entityId) === 'vertex'; - }); - - var entityId = vertices[0], - action = iD.actions.Split(entityId); - - if (selectedIDs.length > 1) { - action.limitWays(_.without(selectedIDs, entityId)); - } - - var operation = function() { - var annotation; +// Create a restriction relation for `turn`, which must have the following structure: +// +// { +// from: { node: , way: }, +// via: { node: }, +// to: { node: , way: }, +// restriction: <'no_right_turn', 'no_left_turn', etc.> +// } +// +// This specifies a restriction of type `restriction` when traveling from +// `from.node` in `from.way` toward `to.node` in `to.way` via `via.node`. +// (The action does not check that these entities form a valid intersection.) +// +// If `restriction` is not provided, it is automatically determined by +// iD.geo.inferRestriction. +// +// If necessary, the `from` and `to` ways are split. In these cases, `from.node` +// and `to.node` are used to determine which portion of the split ways become +// members of the restriction. +// +// For testing convenience, accepts an ID to assign to the new relation. +// Normally, this will be undefined and the relation will automatically +// be assigned a new ID. +// +iD.actions.RestrictTurn = function(turn, projection, restrictionId) { + return function(graph) { + var from = graph.entity(turn.from.way), + via = graph.entity(turn.via.node), + to = graph.entity(turn.to.way); - var ways = action.ways(context.graph()); - if (ways.length === 1) { - annotation = t('operations.split.annotation.' + context.geometry(ways[0].id)); - } else { - annotation = t('operations.split.annotation.multiple', {n: ways.length}); + function isClosingNode(way, nodeId) { + return nodeId === way.first() && nodeId === way.last(); } - var difference = context.perform(action, annotation); - context.enter(iD.modes.Select(context, difference.extantIDs())); - }; - - operation.available = function() { - return vertices.length === 1; - }; + function split(toOrFrom) { + var newID = toOrFrom.newID || iD.Way().id; + graph = iD.actions.Split(via.id, [newID]) + .limitWays([toOrFrom.way])(graph); - operation.disabled = function() { - return action.disabled(context.graph()); - }; + var a = graph.entity(newID), + b = graph.entity(toOrFrom.way); - operation.tooltip = function() { - var disable = operation.disabled(); - if (disable) { - return t('operations.split.' + disable); + if (a.nodes.indexOf(toOrFrom.node) !== -1) { + return [a, b]; + } else { + return [b, a]; + } } - var ways = action.ways(context.graph()); - if (ways.length === 1) { - return t('operations.split.description.' + context.geometry(ways[0].id)); - } else { - return t('operations.split.description.multiple'); + if (!from.affix(via.id) || isClosingNode(from, via.id)) { + if (turn.from.node === turn.to.node) { + // U-turn + from = to = split(turn.from)[0]; + } else if (turn.from.way === turn.to.way) { + // Straight-on or circular + var s = split(turn.from); + from = s[0]; + to = s[1]; + } else { + // Other + from = split(turn.from)[0]; + } } - }; - operation.id = 'split'; - operation.keys = [t('operations.split.key')]; - operation.title = t('operations.split.title'); + if (!to.affix(via.id) || isClosingNode(to, via.id)) { + to = split(turn.to)[0]; + } - return operation; + return graph.replace(iD.Relation({ + id: restrictionId, + tags: { + type: 'restriction', + restriction: turn.restriction || + iD.geo.inferRestriction( + graph, + turn.from, + turn.via, + turn.to, + projection) + }, + members: [ + {id: from.id, type: 'way', role: 'from'}, + {id: via.id, type: 'node', role: 'via'}, + {id: to.id, type: 'way', role: 'to'} + ] + })); + }; }; -iD.operations.Straighten = function(selectedIDs, context) { - var entityId = selectedIDs[0], - action = iD.actions.Straighten(entityId, context.projection); +/* + Order the nodes of a way in reverse order and reverse any direction dependent tags + other than `oneway`. (We assume that correcting a backwards oneway is the primary + reason for reversing a way.) - function operation() { - var annotation = t('operations.straighten.annotation'); - context.perform(action, annotation); - } + The following transforms are performed: - operation.available = function() { - var entity = context.entity(entityId); - return selectedIDs.length === 1 && - entity.type === 'way' && - !entity.isClosed() && - _.uniq(entity.nodes).length > 2; - }; + Keys: + *:right=* ⟺ *:left=* + *:forward=* ⟺ *:backward=* + direction=up ⟺ direction=down + incline=up ⟺ incline=down + *=right ⟺ *=left - operation.disabled = function() { - return action.disabled(context.graph()); - }; + Relation members: + role=forward ⟺ role=backward + role=north ⟺ role=south + role=east ⟺ role=west - operation.tooltip = function() { - var disable = operation.disabled(); - return disable ? - t('operations.straighten.' + disable) : - t('operations.straighten.description'); - }; + In addition, numeric-valued `incline` tags are negated. - operation.id = 'straighten'; - operation.keys = [t('operations.straighten.key')]; - operation.title = t('operations.straighten.title'); + The JOSM implementation was used as a guide, but transformations that were of unclear benefit + or adjusted tags that don't seem to be used in practice were omitted. - return operation; -}; -/* jshint -W109 */ -iD.areaKeys = { - "aeroway": { - "gate": true, - "taxiway": true - }, - "amenity": { - "atm": true, - "bench": true, - "clock": true, - "drinking_water": true, - "post_box": true, - "telephone": true, - "vending_machine": true, - "waste_basket": true - }, - "area": {}, - "barrier": { - "block": true, - "bollard": true, - "cattle_grid": true, - "cycle_barrier": true, - "entrance": true, - "gate": true, - "kissing_gate": true, - "lift_gate": true, - "stile": true, - "toll_booth": true - }, - "building": { - "entrance": true - }, - "craft": {}, - "emergency": { - "fire_hydrant": true, - "phone": true - }, - "golf": { - "hole": true - }, - "historic": { - "boundary_stone": true - }, - "landuse": {}, - "leisure": { - "slipway": true - }, - "man_made": { - "cutline": true, - "embankment": true, - "flagpole": true, - "pipeline": true, - "survey_point": true - }, - "military": {}, - "natural": { - "coastline": true, - "peak": true, - "spring": true, - "tree": true - }, - "office": {}, - "piste:type": {}, - "place": {}, - "power": { - "line": true, - "minor_line": true, - "pole": true, - "tower": true - }, - "public_transport": { - "stop_position": true - }, - "shop": {}, - "tourism": { - "viewpoint": true - }, - "waterway": { - "canal": true, - "ditch": true, - "drain": true, - "river": true, - "stream": true, - "weir": true - } -};iD.Connection = function() { - - var event = d3.dispatch('authenticating', 'authenticated', 'auth', 'loading', 'load', 'loaded'), - url = 'http://www.openstreetmap.org', - connection = {}, - inflight = {}, - loadedTiles = {}, - tileZoom = 16, - oauth = osmAuth({ - url: 'http://www.openstreetmap.org', - oauth_consumer_key: '5A043yRSEugj4DJ5TljuapfnrflWDte8jTOcWLlT', - oauth_secret: 'aB3jKq1TRsCOUrfOIZ6oQMEDmv2ptV76PA54NGLL', - loading: authenticating, - done: authenticated - }), - ndStr = 'nd', - tagStr = 'tag', - memberStr = 'member', - nodeStr = 'node', - wayStr = 'way', - relationStr = 'relation', - off; - - connection.changesetURL = function(changesetId) { - return url + '/changeset/' + changesetId; - }; - - connection.changesetsURL = function(center, zoom) { - var precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2)); - return url + '/history#map=' + - Math.floor(zoom) + '/' + - center[1].toFixed(precision) + '/' + - center[0].toFixed(precision); - }; - - connection.entityURL = function(entity) { - return url + '/' + entity.type + '/' + entity.osmId(); - }; - - connection.userURL = function(username) { - return url + '/user/' + username; - }; + References: + http://wiki.openstreetmap.org/wiki/Forward_%26_backward,_left_%26_right + http://wiki.openstreetmap.org/wiki/Key:direction#Steps + http://wiki.openstreetmap.org/wiki/Key:incline + http://wiki.openstreetmap.org/wiki/Route#Members + http://josm.openstreetmap.de/browser/josm/trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java + */ +iD.actions.Reverse = function(wayId, options) { + var replacements = [ + [/:right$/, ':left'], [/:left$/, ':right'], + [/:forward$/, ':backward'], [/:backward$/, ':forward'] + ], + numeric = /^([+\-]?)(?=[\d.])/, + roleReversals = { + forward: 'backward', + backward: 'forward', + north: 'south', + south: 'north', + east: 'west', + west: 'east' + }; - connection.loadFromURL = function(url, callback) { - function done(dom) { - return callback(null, parse(dom)); + function reverseKey(key) { + for (var i = 0; i < replacements.length; ++i) { + var replacement = replacements[i]; + if (replacement[0].test(key)) { + return key.replace(replacement[0], replacement[1]); + } } - return d3.xml(url).get().on('load', done); - }; - - connection.loadEntity = function(id, callback) { - var type = iD.Entity.id.type(id), - osmID = iD.Entity.id.toOSM(id); - - connection.loadFromURL( - url + '/api/0.6/' + type + '/' + osmID + (type !== 'node' ? '/full' : ''), - function(err, entities) { - event.load(err, {data: entities}); - if (callback) callback(err, entities && _.find(entities, function(e) { return e.id === id; })); - }); - }; - - function authenticating() { - event.authenticating(); - } - - function authenticated() { - event.authenticated(); + return key; } - function getNodes(obj) { - var elems = obj.getElementsByTagName(ndStr), - nodes = new Array(elems.length); - for (var i = 0, l = elems.length; i < l; i++) { - nodes[i] = 'n' + elems[i].attributes.ref.nodeValue; + function reverseValue(key, value) { + if (key === 'incline' && numeric.test(value)) { + return value.replace(numeric, function(_, sign) { return sign === '-' ? '' : '-'; }); + } else if (key === 'incline' || key === 'direction') { + return {up: 'down', down: 'up'}[value] || value; + } else if (options && options.reverseOneway && key === 'oneway') { + return {yes: '-1', '1': '-1', '-1': 'yes'}[value] || value; + } else { + return {left: 'right', right: 'left'}[value] || value; } - return nodes; } - function getTags(obj) { - var elems = obj.getElementsByTagName(tagStr), - tags = {}; - for (var i = 0, l = elems.length; i < l; i++) { - var attrs = elems[i].attributes; - tags[attrs.k.nodeValue] = attrs.v.nodeValue; - } - return tags; - } + return function(graph) { + var way = graph.entity(wayId), + nodes = way.nodes.slice().reverse(), + tags = {}, key, role; - function getMembers(obj) { - var elems = obj.getElementsByTagName(memberStr), - members = new Array(elems.length); - for (var i = 0, l = elems.length; i < l; i++) { - var attrs = elems[i].attributes; - members[i] = { - id: attrs.type.nodeValue[0] + attrs.ref.nodeValue, - type: attrs.type.nodeValue, - role: attrs.role.nodeValue - }; + for (key in way.tags) { + tags[reverseKey(key)] = reverseValue(key, way.tags[key]); } - return members; - } - - var parsers = { - node: function nodeData(obj) { - var attrs = obj.attributes; - return new iD.Node({ - id: iD.Entity.id.fromOSM(nodeStr, attrs.id.nodeValue), - loc: [parseFloat(attrs.lon.nodeValue), parseFloat(attrs.lat.nodeValue)], - version: attrs.version.nodeValue, - user: attrs.user && attrs.user.nodeValue, - tags: getTags(obj) - }); - }, - way: function wayData(obj) { - var attrs = obj.attributes; - return new iD.Way({ - id: iD.Entity.id.fromOSM(wayStr, attrs.id.nodeValue), - version: attrs.version.nodeValue, - user: attrs.user && attrs.user.nodeValue, - tags: getTags(obj), - nodes: getNodes(obj) + graph.parentRelations(way).forEach(function(relation) { + relation.members.forEach(function(member, index) { + if (member.id === way.id && (role = roleReversals[member.role])) { + relation = relation.updateMember({role: role}, index); + graph = graph.replace(relation); + } }); - }, + }); - relation: function relationData(obj) { - var attrs = obj.attributes; - return new iD.Relation({ - id: iD.Entity.id.fromOSM(relationStr, attrs.id.nodeValue), - version: attrs.version.nodeValue, - user: attrs.user && attrs.user.nodeValue, - tags: getTags(obj), - members: getMembers(obj) - }); - } + return graph.replace(way.update({nodes: nodes, tags: tags})); }; +}; +iD.actions.Revert = function(id) { - function parse(dom) { - if (!dom || !dom.childNodes) return new Error('Bad request'); + var action = function(graph) { + var entity = graph.hasEntity(id), + base = graph.base().entities[id]; - var root = dom.childNodes[0], - children = root.childNodes, - entities = []; + if (entity && !base) { // entity will be removed.. + if (entity.type === 'node') { + graph.parentWays(entity) + .forEach(function(parent) { + parent = parent.removeNode(id); + graph = graph.replace(parent); - for (var i = 0, l = children.length; i < l; i++) { - var child = children[i], - parser = parsers[child.nodeName]; - if (parser) { - entities.push(parser(child)); + if (parent.isDegenerate()) { + graph = iD.actions.DeleteWay(parent.id)(graph); + } + }); } - } - return entities; - } + graph.parentRelations(entity) + .forEach(function(parent) { + parent = parent.removeMembersWithID(id); + graph = graph.replace(parent); - connection.authenticated = function() { - return oauth.authenticated(); - }; + if (parent.isDegenerate()) { + graph = iD.actions.DeleteRelation(parent.id)(graph); + } + }); + } - // Generate Changeset XML. Returns a string. - connection.changesetJXON = function(tags) { - return { - osm: { - changeset: { - tag: _.map(tags, function(value, key) { - return { '@k': key, '@v': value }; - }), - '@version': 0.3, - '@generator': 'iD' - } - } - }; + return graph.revert(id); }; - // Generate [osmChange](http://wiki.openstreetmap.org/wiki/OsmChange) - // XML. Returns a string. - connection.osmChangeJXON = function(changeset_id, changes) { - function nest(x, order) { - var groups = {}; - for (var i = 0; i < x.length; i++) { - var tagName = Object.keys(x[i])[0]; - if (!groups[tagName]) groups[tagName] = []; - groups[tagName].push(x[i][tagName]); - } - var ordered = {}; - order.forEach(function(o) { - if (groups[o]) ordered[o] = groups[o]; - }); - return ordered; - } + return action; +}; +iD.actions.RotateWay = function(wayId, pivot, angle, projection) { + return function(graph) { + return graph.update(function(graph) { + var way = graph.entity(wayId); - function rep(entity) { - return entity.asJXON(changeset_id); - } + _.unique(way.nodes).forEach(function(id) { - return { - osmChange: { - '@version': 0.3, - '@generator': 'iD', - 'create': nest(changes.created.map(rep), ['node', 'way', 'relation']), - 'modify': nest(changes.modified.map(rep), ['node', 'way', 'relation']), - 'delete': _.extend(nest(changes.deleted.map(rep), ['relation', 'way', 'node']), {'@if-unused': true}) - } - }; - }; + var node = graph.entity(id), + point = projection(node.loc), + radial = [0,0]; - connection.changesetTags = function(comment, imageryUsed) { - var tags = { - imagery_used: imageryUsed.join(';'), - created_by: 'iD ' + iD.version - }; + radial[0] = point[0] - pivot[0]; + radial[1] = point[1] - pivot[1]; - if (comment) { - tags.comment = comment; - } + point = [ + radial[0] * Math.cos(angle) - radial[1] * Math.sin(angle) + pivot[0], + radial[0] * Math.sin(angle) + radial[1] * Math.cos(angle) + pivot[1] + ]; - return tags; - }; + graph = graph.replace(node.move(projection.invert(point))); - connection.putChangeset = function(changes, comment, imageryUsed, callback) { - oauth.xhr({ - method: 'PUT', - path: '/api/0.6/changeset/create', - options: { header: { 'Content-Type': 'text/xml' } }, - content: JXON.stringify(connection.changesetJXON(connection.changesetTags(comment, imageryUsed))) - }, function(err, changeset_id) { - if (err) return callback(err); - oauth.xhr({ - method: 'POST', - path: '/api/0.6/changeset/' + changeset_id + '/upload', - options: { header: { 'Content-Type': 'text/xml' } }, - content: JXON.stringify(connection.osmChangeJXON(changeset_id, changes)) - }, function(err) { - if (err) return callback(err); - oauth.xhr({ - method: 'PUT', - path: '/api/0.6/changeset/' + changeset_id + '/close' - }, function(err) { - callback(err, changeset_id); - }); - }); }); - }; - - var userDetails; - connection.userDetails = function(callback) { - if (userDetails) { - callback(undefined, userDetails); - return; - } - - function done(err, user_details) { - if (err) return callback(err); + }); + }; +}; +// Split a way at the given node. +// +// Optionally, split only the given ways, if multiple ways share +// the given node. +// +// This is the inverse of `iD.actions.Join`. +// +// For testing convenience, accepts an ID to assign to the new way. +// Normally, this will be undefined and the way will automatically +// be assigned a new ID. +// +// Reference: +// https://github.com/systemed/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/SplitWayAction.as +// +iD.actions.Split = function(nodeId, newWayIds) { + var wayIds; - var u = user_details.getElementsByTagName('user')[0], - img = u.getElementsByTagName('img'), - image_url = ''; + // if the way is closed, we need to search for a partner node + // to split the way at. + // + // The following looks for a node that is both far away from + // the initial node in terms of way segment length and nearby + // in terms of beeline-distance. This assures that areas get + // split on the most "natural" points (independent of the number + // of nodes). + // For example: bone-shaped areas get split across their waist + // line, circles across the diameter. + function splitArea(nodes, idxA, graph) { + var lengths = new Array(nodes.length), + length, + i, + best = 0, + idxB; - if (img && img[0] && img[0].getAttribute('href')) { - image_url = img[0].getAttribute('href'); - } + function wrap(index) { + return iD.util.wrap(index, nodes.length); + } - userDetails = { - display_name: u.attributes.display_name.nodeValue, - image_url: image_url, - id: u.attributes.id.nodeValue - }; + function dist(nA, nB) { + return iD.geo.sphericalDistance(graph.entity(nA).loc, graph.entity(nB).loc); + } - callback(undefined, userDetails); + // calculate lengths + length = 0; + for (i = wrap(idxA+1); i !== idxA; i = wrap(i+1)) { + length += dist(nodes[i], nodes[wrap(i-1)]); + lengths[i] = length; } - oauth.xhr({ method: 'GET', path: '/api/0.6/user/details' }, done); - }; + length = 0; + for (i = wrap(idxA-1); i !== idxA; i = wrap(i-1)) { + length += dist(nodes[i], nodes[wrap(i+1)]); + if (length < lengths[i]) + lengths[i] = length; + } - connection.status = function(callback) { - function done(capabilities) { - var apiStatus = capabilities.getElementsByTagName('status'); - callback(undefined, apiStatus[0].getAttribute('api')); + // determine best opposite node to split + for (i = 0; i < nodes.length; i++) { + var cost = lengths[i] / dist(nodes[idxA], nodes[i]); + if (cost > best) { + idxB = i; + best = cost; + } } - d3.xml(url + '/api/capabilities').get() - .on('load', done) - .on('error', callback); - }; - function abortRequest(i) { i.abort(); } + return idxB; + } - connection.tileZoom = function(_) { - if (!arguments.length) return tileZoom; - tileZoom = _; - return connection; - }; + function split(graph, wayA, newWayId) { + var wayB = iD.Way({id: newWayId, tags: wayA.tags}), + nodesA, + nodesB, + isArea = wayA.isArea(), + isOuter = iD.geo.isSimpleMultipolygonOuterMember(wayA, graph); - connection.loadTiles = function(projection, dimensions) { + if (wayA.isClosed()) { + var nodes = wayA.nodes.slice(0, -1), + idxA = _.indexOf(nodes, nodeId), + idxB = splitArea(nodes, idxA, graph); - if (off) return; + if (idxB < idxA) { + nodesA = nodes.slice(idxA).concat(nodes.slice(0, idxB + 1)); + nodesB = nodes.slice(idxB, idxA + 1); + } else { + nodesA = nodes.slice(idxA, idxB + 1); + nodesB = nodes.slice(idxB).concat(nodes.slice(0, idxA + 1)); + } + } else { + var idx = _.indexOf(wayA.nodes, nodeId, 1); + nodesA = wayA.nodes.slice(0, idx + 1); + nodesB = wayA.nodes.slice(idx); + } - var s = projection.scale() * 2 * Math.PI, - z = Math.max(Math.log(s) / Math.log(2) - 8, 0), - ts = 256 * Math.pow(2, z - tileZoom), - origin = [ - s / 2 - projection.translate()[0], - s / 2 - projection.translate()[1]]; + wayA = wayA.update({nodes: nodesA}); + wayB = wayB.update({nodes: nodesB}); - var tiles = d3.geo.tile() - .scaleExtent([tileZoom, tileZoom]) - .scale(s) - .size(dimensions) - .translate(projection.translate())() - .map(function(tile) { - var x = tile[0] * ts - origin[0], - y = tile[1] * ts - origin[1]; + graph = graph.replace(wayA); + graph = graph.replace(wayB); - return { - id: tile.toString(), - extent: iD.geo.Extent( - projection.invert([x, y + ts]), - projection.invert([x + ts, y])) + graph.parentRelations(wayA).forEach(function(relation) { + if (relation.isRestriction()) { + var via = relation.memberByRole('via'); + if (via && wayB.contains(via.id)) { + relation = relation.updateMember({id: wayB.id}, relation.memberById(wayA.id).index); + graph = graph.replace(relation); + } + } else { + if (relation === isOuter) { + graph = graph.replace(relation.mergeTags(wayA.tags)); + graph = graph.replace(wayA.update({tags: {}})); + graph = graph.replace(wayB.update({tags: {}})); + } + + var member = { + id: wayB.id, + type: 'way', + role: relation.memberById(wayA.id).role }; - }); - function bboxUrl(tile) { - return url + '/api/0.6/map?bbox=' + tile.extent.toParam(); + graph = iD.actions.AddMember(relation.id, member)(graph); + } + }); + + if (!isOuter && isArea) { + var multipolygon = iD.Relation({ + tags: _.extend({}, wayA.tags, {type: 'multipolygon'}), + members: [ + {id: wayA.id, role: 'outer', type: 'way'}, + {id: wayB.id, role: 'outer', type: 'way'} + ]}); + + graph = graph.replace(multipolygon); + graph = graph.replace(wayA.update({tags: {}})); + graph = graph.replace(wayB.update({tags: {}})); } - _.filter(inflight, function(v, i) { - var wanted = _.find(tiles, function(tile) { - return i === tile.id; - }); - if (!wanted) delete inflight[i]; - return !wanted; - }).map(abortRequest); + return graph; + } - tiles.forEach(function(tile) { - var id = tile.id; + var action = function(graph) { + var candidates = action.ways(graph); + for (var i = 0; i < candidates.length; i++) { + graph = split(graph, candidates[i], newWayIds && newWayIds[i]); + } + return graph; + }; - if (loadedTiles[id] || inflight[id]) return; + action.ways = function(graph) { + var node = graph.entity(nodeId), + parents = graph.parentWays(node), + hasLines = _.any(parents, function(parent) { return parent.geometry(graph) === 'line'; }); - if (_.isEmpty(inflight)) { - event.loading(); - } + return parents.filter(function(parent) { + if (wayIds && wayIds.indexOf(parent.id) === -1) + return false; - inflight[id] = connection.loadFromURL(bboxUrl(tile), function(err, parsed) { - loadedTiles[id] = true; - delete inflight[id]; + if (!wayIds && hasLines && parent.geometry(graph) !== 'line') + return false; - event.load(err, _.extend({data: parsed}, tile)); + if (parent.isClosed()) { + return true; + } - if (_.isEmpty(inflight)) { - event.loaded(); + for (var i = 1; i < parent.nodes.length - 1; i++) { + if (parent.nodes[i] === nodeId) { + return true; } - }); + } + + return false; }); }; - connection.switch = function(options) { - url = options.url; - oauth.options(_.extend({ - loading: authenticating, - done: authenticated - }, options)); - event.auth(); - connection.flush(); - return connection; + action.disabled = function(graph) { + var candidates = action.ways(graph); + if (candidates.length === 0 || (wayIds && wayIds.length !== candidates.length)) + return 'not_eligible'; }; - connection.toggle = function(_) { - off = !_; - return connection; + action.limitWays = function(_) { + if (!arguments.length) return wayIds; + wayIds = _; + return action; }; - connection.flush = function() { - _.forEach(inflight, abortRequest); - loadedTiles = {}; - inflight = {}; - return connection; - }; + return action; +}; +/* + * Based on https://github.com/openstreetmap/potlatch2/net/systemeD/potlatch2/tools/Straighten.as + */ - connection.loadedTiles = function(_) { - if (!arguments.length) return loadedTiles; - loadedTiles = _; - return connection; - }; +iD.actions.Straighten = function(wayId, projection) { + function positionAlongWay(n, s, e) { + return ((n[0] - s[0]) * (e[0] - s[0]) + (n[1] - s[1]) * (e[1] - s[1]))/ + (Math.pow(e[0] - s[0], 2) + Math.pow(e[1] - s[1], 2)); + } - connection.logout = function() { - oauth.logout(); - event.auth(); - return connection; - }; + var action = function(graph) { + var way = graph.entity(wayId), + nodes = graph.childNodes(way), + points = nodes.map(function(n) { return projection(n.loc); }), + startPoint = points[0], + endPoint = points[points.length-1], + toDelete = [], + i; - connection.authenticate = function(callback) { - function done(err, res) { - event.auth(); - if (callback) callback(err, res); - } - return oauth.authenticate(done); - }; + for (i = 1; i < points.length-1; i++) { + var node = nodes[i], + point = points[i]; - return d3.rebind(connection, event, 'on'); -}; -/* - iD.Difference represents the difference between two graphs. - It knows how to calculate the set of entities that were - created, modified, or deleted, and also contains the logic - for recursively extending a difference to the complete set - of entities that will require a redraw, taking into account - child and parent relationships. - */ -iD.Difference = function(base, head) { - var changes = {}, length = 0; + if (graph.parentWays(node).length > 1 || + graph.parentRelations(node).length || + node.hasInterestingTags()) { - function changed(h, b) { - return !_.isEqual(_.omit(h, 'v'), _.omit(b, 'v')); - } + var u = positionAlongWay(point, startPoint, endPoint), + p0 = startPoint[0] + u * (endPoint[0] - startPoint[0]), + p1 = startPoint[1] + u * (endPoint[1] - startPoint[1]); - _.each(head.entities, function(h, id) { - var b = base.entities[id]; - if (changed(h, b)) { - changes[id] = {base: b, head: h}; - length++; + graph = graph.replace(graph.entity(node.id) + .move(projection.invert([p0, p1]))); + } else { + // safe to delete + if (toDelete.indexOf(node) === -1) { + toDelete.push(node); + } + } } - }); - _.each(base.entities, function(b, id) { - var h = head.entities[id]; - if (!changes[id] && changed(h, b)) { - changes[id] = {base: b, head: h}; - length++; + for (i = 0; i < toDelete.length; i++) { + graph = iD.actions.DeleteNode(toDelete[i].id)(graph); } - }); - function addParents(parents, result) { - for (var i = 0; i < parents.length; i++) { - var parent = parents[i]; + return graph; + }; + + action.disabled = function(graph) { + // check way isn't too bendy + var way = graph.entity(wayId), + nodes = graph.childNodes(way), + points = nodes.map(function(n) { return projection(n.loc); }), + startPoint = points[0], + endPoint = points[points.length-1], + threshold = 0.2 * Math.sqrt(Math.pow(startPoint[0] - endPoint[0], 2) + Math.pow(startPoint[1] - endPoint[1], 2)), + i; - if (parent.id in result) - continue; + for (i = 1; i < points.length-1; i++) { + var point = points[i], + u = positionAlongWay(point, startPoint, endPoint), + p0 = startPoint[0] + u * (endPoint[0] - startPoint[0]), + p1 = startPoint[1] + u * (endPoint[1] - startPoint[1]), + dist = Math.sqrt(Math.pow(p0 - point[0], 2) + Math.pow(p1 - point[1], 2)); - result[parent.id] = parent; - addParents(head.parentRelations(parent), result); + // to bendy if point is off by 20% of total start/end distance in projected space + if (dist > threshold) { + return 'too_bendy'; + } } - } - - var difference = {}; - - difference.length = function() { - return length; }; - difference.changes = function() { - return changes; + return action; +}; +// Remove the effects of `turn.restriction` on `turn`, which must have the +// following structure: +// +// { +// from: { node: , way: }, +// via: { node: }, +// to: { node: , way: }, +// restriction: +// } +// +// In the simple case, `restriction` is a reference to a `no_*` restriction +// on the turn itself. In this case, it is simply deleted. +// +// The more complex case is where `restriction` references an `only_*` +// restriction on a different turn in the same intersection. In that case, +// that restriction is also deleted, but at the same time restrictions on +// the turns other than the first two are created. +// +iD.actions.UnrestrictTurn = function(turn) { + return function(graph) { + return iD.actions.DeleteRelation(turn.restriction)(graph); }; +}; +iD.behavior = {}; +iD.behavior.AddWay = function(context) { + var event = d3.dispatch('start', 'startFromWay', 'startFromNode'), + draw = iD.behavior.Draw(context); - difference.extantIDs = function() { - var result = []; - _.each(changes, function(change, id) { - if (change.head) result.push(id); - }); - return result; + var addWay = function(surface) { + draw.on('click', event.start) + .on('clickWay', event.startFromWay) + .on('clickNode', event.startFromNode) + .on('cancel', addWay.cancel) + .on('finish', addWay.cancel); + + context.map() + .dblclickEnable(false); + + surface.call(draw); }; - difference.modified = function() { - var result = []; - _.each(changes, function(change) { - if (change.base && change.head) result.push(change.head); - }); - return result; + addWay.off = function(surface) { + surface.call(draw.off); }; - difference.created = function() { - var result = []; - _.each(changes, function(change) { - if (!change.base && change.head) result.push(change.head); - }); - return result; + addWay.cancel = function() { + window.setTimeout(function() { + context.map().dblclickEnable(true); + }, 1000); + + context.enter(iD.modes.Browse(context)); }; - difference.deleted = function() { - var result = []; - _.each(changes, function(change) { - if (change.base && !change.head) result.push(change.base); - }); - return result; + addWay.tail = function(text) { + draw.tail(text); + return addWay; }; - difference.summary = function() { - var relevant = {}; + return d3.rebind(addWay, event, 'on'); +}; +iD.behavior.Breathe = function() { + var duration = 800, + selector = '.selected.shadow, .selected .shadow', + selected = d3.select(null), + classed = '', + params = {}, + done; - function addEntity(entity, graph, changeType) { - relevant[entity.id] = { - entity: entity, - graph: graph, - changeType: changeType - }; - } + function reset(selection) { + selection + .style('stroke-opacity', null) + .style('stroke-width', null) + .style('fill-opacity', null) + .style('r', null); + } - function addParents(entity) { - var parents = head.parentWays(entity); - for (var j = parents.length - 1; j >= 0; j--) { - var parent = parents[j]; - if (!(parent.id in relevant)) addEntity(parent, head, 'modified'); - } - } + function setAnimationParams(transition, fromTo) { + transition + .style('stroke-opacity', function(d) { return params[d.id][fromTo].opacity; }) + .style('stroke-width', function(d) { return params[d.id][fromTo].width; }) + .style('fill-opacity', function(d) { return params[d.id][fromTo].opacity; }) + .style('r', function(d) { return params[d.id][fromTo].width; }); + } - _.each(changes, function(change) { - if (change.head && change.head.geometry(head) !== 'vertex') { - addEntity(change.head, head, change.base ? 'modified' : 'created'); + function calcAnimationParams(selection) { + selection + .call(reset) + .each(function(d) { + var s = d3.select(this), + tag = s.node().tagName, + p = {'from': {}, 'to': {}}, + opacity, width; + + // determine base opacity and width + if (tag === 'circle') { + opacity = parseFloat(s.style('fill-opacity') || 0.5); + width = parseFloat(s.style('r') || 15.5); + } else { + opacity = parseFloat(s.style('stroke-opacity') || 0.7); + width = parseFloat(s.style('stroke-width') || 10); + } - } else if (change.base && change.base.geometry(base) !== 'vertex') { - addEntity(change.base, base, 'deleted'); + // calculate from/to interpolation params.. + p.tag = tag; + p.from.opacity = opacity * 0.6; + p.to.opacity = opacity * 1.25; + p.from.width = width * 0.9; + p.to.width = width * (tag === 'circle' ? 1.5 : 1.25); + params[d.id] = p; + }); + } - } else if (change.base && change.head) { // modified vertex - var moved = !_.isEqual(change.base.loc, change.head.loc), - retagged = !_.isEqual(change.base.tags, change.head.tags); + function run(surface, fromTo) { + var toFrom = (fromTo === 'from' ? 'to': 'from'), + currSelected = surface.selectAll(selector), + currClassed = surface.attr('class'), + n = 0; - if (moved) { - addParents(change.head); - } + if (done || currSelected.empty()) { + selected.call(reset); + return; + } - if (retagged || (moved && change.head.hasInterestingTags())) { - addEntity(change.head, head, 'modified'); + if (!_.isEqual(currSelected, selected) || currClassed !== classed) { + selected.call(reset); + classed = currClassed; + selected = currSelected.call(calcAnimationParams); + } + + selected + .transition() + .call(setAnimationParams, fromTo) + .duration(duration) + .each(function() { ++n; }) + .each('end', function() { + if (!--n) { // call once + surface.call(run, toFrom); } + }); + } - } else if (change.head && change.head.hasInterestingTags()) { // created vertex - addEntity(change.head, head, 'created'); + var breathe = function(surface) { + done = false; + d3.timer(function() { + if (done) return true; - } else if (change.base && change.base.hasInterestingTags()) { // deleted vertex - addEntity(change.base, base, 'deleted'); - } - }); + var currSelected = surface.selectAll(selector); + if (currSelected.empty()) return false; - return d3.values(relevant); + surface.call(run, 'from'); + return true; + }, 200); }; - difference.complete = function(extent) { - var result = {}, id, change; + breathe.off = function() { + done = true; + d3.timer.flush(); + selected + .transition() + .call(reset) + .duration(0); + }; - for (id in changes) { - change = changes[id]; + return breathe; +}; +iD.behavior.Copy = function(context) { + var keybinding = d3.keybinding('copy'); - var h = change.head, - b = change.base, - entity = h || b; + function groupEntities(ids, graph) { + var entities = ids.map(function (id) { return graph.entity(id); }); + return _.extend({relation: [], way: [], node: []}, + _.groupBy(entities, function(entity) { return entity.type; })); + } - if (extent && - (!h || !h.intersects(extent, head)) && - (!b || !b.intersects(extent, base))) - continue; + function getDescendants(id, graph, descendants) { + var entity = graph.entity(id), + i, children; - result[id] = h; + descendants = descendants || {}; - if (entity.type === 'way') { - var nh = h ? h.nodes : [], - nb = b ? b.nodes : [], - diff, i; + if (entity.type === 'relation') { + children = _.pluck(entity.members, 'id'); + } else if (entity.type === 'way') { + children = entity.nodes; + } else { + children = []; + } - diff = _.difference(nh, nb); - for (i = 0; i < diff.length; i++) { - result[diff[i]] = head.hasEntity(diff[i]); - } + for (i = 0; i < children.length; i++) { + if (!descendants[children[i]]) { + descendants[children[i]] = true; + descendants = getDescendants(children[i], graph, descendants); + } + } - diff = _.difference(nb, nh); - for (i = 0; i < diff.length; i++) { - result[diff[i]] = head.hasEntity(diff[i]); - } - } + return descendants; + } - addParents(head.parentWays(entity), result); - addParents(head.parentRelations(entity), result); - } + function doCopy() { + d3.event.preventDefault(); + if (context.inIntro()) return; - return result; - }; + var graph = context.graph(), + selected = groupEntities(context.selectedIDs(), graph), + canCopy = [], + skip = {}, + i, entity; - return difference; -}; -iD.Entity = function(attrs) { - // For prototypal inheritance. - if (this instanceof iD.Entity) return; + for (i = 0; i < selected.relation.length; i++) { + entity = selected.relation[i]; + if (!skip[entity.id] && entity.isComplete(graph)) { + canCopy.push(entity.id); + skip = getDescendants(entity.id, graph, skip); + } + } + for (i = 0; i < selected.way.length; i++) { + entity = selected.way[i]; + if (!skip[entity.id]) { + canCopy.push(entity.id); + skip = getDescendants(entity.id, graph, skip); + } + } + for (i = 0; i < selected.node.length; i++) { + entity = selected.node[i]; + if (!skip[entity.id]) { + canCopy.push(entity.id); + } + } - // Create the appropriate subtype. - if (attrs && attrs.type) { - return iD.Entity[attrs.type].apply(this, arguments); - } else if (attrs && attrs.id) { - return iD.Entity[iD.Entity.id.type(attrs.id)].apply(this, arguments); + context.copyIDs(canCopy); } - // Initialize a generic Entity (used only in tests). - return (new iD.Entity()).initialize(arguments); -}; + function copy() { + keybinding.on(iD.ui.cmd('⌘C'), doCopy); + d3.select(document).call(keybinding); + return copy; + } -iD.Entity.id = function(type) { - return iD.Entity.id.fromOSM(type, iD.Entity.id.next[type]--); + copy.off = function() { + d3.select(document).call(keybinding.off); + }; + + return copy; }; +/* + `iD.behavior.drag` is like `d3.behavior.drag`, with the following differences: -iD.Entity.id.next = {node: -1, way: -1, relation: -1}; + * The `origin` function is expected to return an [x, y] tuple rather than an + {x, y} object. + * The events are `start`, `move`, and `end`. + (https://github.com/mbostock/d3/issues/563) + * The `start` event is not dispatched until the first cursor movement occurs. + (https://github.com/mbostock/d3/pull/368) + * The `move` event has a `point` and `delta` [x, y] tuple properties rather + than `x`, `y`, `dx`, and `dy` properties. + * The `end` event is not dispatched if no movement occurs. + * An `off` function is available that unbinds the drag's internal event handlers. + * Delegation is supported via the `delegate` function. -iD.Entity.id.fromOSM = function(type, id) { - return type[0] + id; -}; + */ +iD.behavior.drag = function() { + function d3_eventCancel() { + d3.event.stopPropagation(); + d3.event.preventDefault(); + } -iD.Entity.id.toOSM = function(id) { - return id.slice(1); -}; + var event = d3.dispatch('start', 'move', 'end'), + origin = null, + selector = '', + filter = null, + event_, target, surface; -iD.Entity.id.type = function(id) { - return {'n': 'node', 'w': 'way', 'r': 'relation'}[id[0]]; -}; + event.of = function(thiz, argumentz) { + return function(e1) { + var e0 = e1.sourceEvent = d3.event; + e1.target = drag; + d3.event = e1; + try { + event[e1.type].apply(thiz, argumentz); + } finally { + d3.event = e0; + } + }; + }; -// A function suitable for use as the second argument to d3.selection#data(). -iD.Entity.key = function(entity) { - return entity.id + 'v' + (entity.v || 0); -}; + var d3_event_userSelectProperty = iD.util.prefixCSSProperty('UserSelect'), + d3_event_userSelectSuppress = d3_event_userSelectProperty ? + function () { + var selection = d3.selection(), + select = selection.style(d3_event_userSelectProperty); + selection.style(d3_event_userSelectProperty, 'none'); + return function () { + selection.style(d3_event_userSelectProperty, select); + }; + } : + function (type) { + var w = d3.select(window).on('selectstart.' + type, d3_eventCancel); + return function () { + w.on('selectstart.' + type, null); + }; + }; -iD.Entity.prototype = { - tags: {}, + function mousedown() { + target = this; + event_ = event.of(target, arguments); + var eventTarget = d3.event.target, + touchId = d3.event.touches ? d3.event.changedTouches[0].identifier : null, + offset, + origin_ = point(), + started = false, + selectEnable = d3_event_userSelectSuppress(touchId !== null ? 'drag-' + touchId : 'drag'); - initialize: function(sources) { - for (var i = 0; i < sources.length; ++i) { - var source = sources[i]; - for (var prop in source) { - if (Object.prototype.hasOwnProperty.call(source, prop)) { - this[prop] = source[prop]; - } - } - } + var w = d3.select(window) + .on(touchId !== null ? 'touchmove.drag-' + touchId : 'mousemove.drag', dragmove) + .on(touchId !== null ? 'touchend.drag-' + touchId : 'mouseup.drag', dragend, true); - if (!this.id && this.type) { - this.id = iD.Entity.id(this.type); + if (origin) { + offset = origin.apply(target, arguments); + offset = [offset[0] - origin_[0], offset[1] - origin_[1]]; + } else { + offset = [0, 0]; } - if (iD.debug) { - Object.freeze(this); - Object.freeze(this.tags); + if (touchId === null) d3.event.stopPropagation(); - if (this.loc) Object.freeze(this.loc); - if (this.nodes) Object.freeze(this.nodes); - if (this.members) Object.freeze(this.members); + function point() { + var p = target.parentNode || surface; + return touchId !== null ? d3.touches(p).filter(function(p) { + return p.identifier === touchId; + })[0] : d3.mouse(p); } - return this; - }, + function dragmove() { - osmId: function() { - return iD.Entity.id.toOSM(this.id); - }, + var p = point(), + dx = p[0] - origin_[0], + dy = p[1] - origin_[1]; + + if (dx === 0 && dy === 0) + return; - isNew: function() { - return this.osmId() < 0; - }, + if (!started) { + started = true; + event_({ + type: 'start' + }); + } - update: function(attrs) { - return iD.Entity(this, attrs, {v: 1 + (this.v || 0)}); - }, + origin_ = p; + d3_eventCancel(); - mergeTags: function(tags) { - var merged = _.clone(this.tags), changed = false; - for (var k in tags) { - var t1 = merged[k], - t2 = tags[k]; - if (!t1) { - changed = true; - merged[k] = t2; - } else if (t1 !== t2) { - changed = true; - merged[k] = _.union(t1.split(/;\s*/), t2.split(/;\s*/)).join(';'); - } + event_({ + type: 'move', + point: [p[0] + offset[0], p[1] + offset[1]], + delta: [dx, dy] + }); } - return changed ? this.update({tags: merged}) : this; - }, - intersects: function(extent, resolver) { - return this.extent(resolver).intersects(extent); - }, + function dragend() { + if (started) { + event_({ + type: 'end' + }); - isUsed: function(resolver) { - return _.without(Object.keys(this.tags), 'area').length > 0 || - resolver.parentRelations(this).length > 0; - }, + d3_eventCancel(); + if (d3.event.target === eventTarget) w.on('click.drag', click, true); + } - hasInterestingTags: function() { - return _.keys(this.tags).some(function(key) { - return key !== 'attribution' && - key !== 'created_by' && - key !== 'source' && - key !== 'odbl' && - key.indexOf('tiger:') !== 0; - }); - }, + w.on(touchId !== null ? 'touchmove.drag-' + touchId : 'mousemove.drag', null) + .on(touchId !== null ? 'touchend.drag-' + touchId : 'mouseup.drag', null); + selectEnable(); + } - deprecatedTags: function() { - var tags = _.pairs(this.tags); - var deprecated = {}; + function click() { + d3_eventCancel(); + w.on('click.drag', null); + } + } - iD.data.deprecated.forEach(function(d) { - var match = _.pairs(d.old)[0]; - tags.forEach(function(t) { - if (t[0] === match[0] && - (t[1] === match[1] || match[1] === '*')) { - deprecated[t[0]] = t[1]; + function drag(selection) { + var matchesSelector = iD.util.prefixDOMProperty('matchesSelector'), + delegate = mousedown; + + if (selector) { + delegate = function() { + var root = this, + target = d3.event.target; + for (; target && target !== root; target = target.parentNode) { + if (target[matchesSelector](selector) && + (!filter || filter(target.__data__))) { + return mousedown.call(target, target.__data__); + } } - }); - }); + }; + } - return deprecated; + selection.on('mousedown.drag' + selector, delegate) + .on('touchstart.drag' + selector, delegate); } -}; -iD.Graph = function(other, mutable) { - if (!(this instanceof iD.Graph)) return new iD.Graph(other, mutable); - if (other instanceof iD.Graph) { - var base = other.base(); - this.entities = _.assign(Object.create(base.entities), other.entities); - this._parentWays = _.assign(Object.create(base.parentWays), other._parentWays); - this._parentRels = _.assign(Object.create(base.parentRels), other._parentRels); + drag.off = function(selection) { + selection.on('mousedown.drag' + selector, null) + .on('touchstart.drag' + selector, null); + }; - } else { - this.entities = Object.create({}); - this._parentWays = Object.create({}); - this._parentRels = Object.create({}); - this.rebase(other || [], [this]); - } + drag.delegate = function(_) { + if (!arguments.length) return selector; + selector = _; + return drag; + }; - this.transients = {}; - this._childNodes = {}; + drag.filter = function(_) { + if (!arguments.length) return origin; + filter = _; + return drag; + }; - if (!mutable) { - this.freeze(); - } -}; + drag.origin = function (_) { + if (!arguments.length) return origin; + origin = _; + return drag; + }; -iD.Graph.prototype = { - hasEntity: function(id) { - return this.entities[id]; - }, + drag.cancel = function() { + d3.select(window) + .on('mousemove.drag', null) + .on('mouseup.drag', null); + return drag; + }; - entity: function(id) { - var entity = this.entities[id]; - if (!entity) { - throw new Error('entity ' + id + ' not found'); - } - return entity; - }, + drag.target = function() { + if (!arguments.length) return target; + target = arguments[0]; + event_ = event.of(target, Array.prototype.slice.call(arguments, 1)); + return drag; + }; - transient: function(entity, key, fn) { - var id = entity.id, - transients = this.transients[id] || - (this.transients[id] = {}); + drag.surface = function() { + if (!arguments.length) return surface; + surface = arguments[0]; + return drag; + }; - if (transients[key] !== undefined) { - return transients[key]; + return d3.rebind(drag, event, 'on'); +}; +iD.behavior.Draw = function(context) { + var event = d3.dispatch('move', 'click', 'clickWay', + 'clickNode', 'undo', 'cancel', 'finish'), + keybinding = d3.keybinding('draw'), + hover = iD.behavior.Hover(context) + .altDisables(true) + .on('hover', context.ui().sidebar.hover), + tail = iD.behavior.Tail(), + edit = iD.behavior.Edit(context), + closeTolerance = 4, + tolerance = 12; + + function datum() { + if (d3.event.altKey) return {}; + else return d3.event.target.__data__ || {}; + } + + function mousedown() { + + function point() { + var p = context.container().node(); + return touchId !== null ? d3.touches(p).filter(function(p) { + return p.identifier === touchId; + })[0] : d3.mouse(p); } - transients[key] = fn.call(entity); + var element = d3.select(this), + touchId = d3.event.touches ? d3.event.changedTouches[0].identifier : null, + t1 = +new Date(), + p1 = point(); - return transients[key]; - }, + element.on('mousemove.draw', null); - parentWays: function(entity) { - return _.map(this._parentWays[entity.id], this.entity, this); - }, + d3.select(window).on('mouseup.draw', function() { + var t2 = +new Date(), + p2 = point(), + dist = iD.geo.euclideanDistance(p1, p2); - isPoi: function(entity) { - var parentWays = this._parentWays[entity.id]; - return !parentWays || parentWays.length === 0; - }, + element.on('mousemove.draw', mousemove); + d3.select(window).on('mouseup.draw', null); - isShared: function(entity) { - var parentWays = this._parentWays[entity.id]; - return parentWays && parentWays.length > 1; - }, + if (dist < closeTolerance || (dist < tolerance && (t2 - t1) < 500)) { + // Prevent a quick second click + d3.select(window).on('click.draw-block', function() { + d3.event.stopPropagation(); + }, true); - parentRelations: function(entity) { - return _.map(this._parentRels[entity.id], this.entity, this); - }, + context.map().dblclickEnable(false); - childNodes: function(entity) { - if (this._childNodes[entity.id]) - return this._childNodes[entity.id]; + window.setTimeout(function() { + context.map().dblclickEnable(true); + d3.select(window).on('click.draw-block', null); + }, 500); - var nodes = []; - for (var i = 0, l = entity.nodes.length; i < l; i++) { - nodes[i] = this.entity(entity.nodes[i]); - } + click(); + } + }); + } - if (iD.debug) Object.freeze(nodes); + function mousemove() { + event.move(datum()); + } - this._childNodes[entity.id] = nodes; - return this._childNodes[entity.id]; - }, + function click() { + var d = datum(); + if (d.type === 'way') { + var choice = iD.geo.chooseEdge(context.childNodes(d), context.mouse(), context.projection), + edge = [d.nodes[choice.index - 1], d.nodes[choice.index]]; + event.clickWay(choice.loc, edge); - base: function() { - return { - 'entities': iD.util.getPrototypeOf(this.entities), - 'parentWays': iD.util.getPrototypeOf(this._parentWays), - 'parentRels': iD.util.getPrototypeOf(this._parentRels) - }; - }, + } else if (d.type === 'node') { + event.clickNode(d); - // Unlike other graph methods, rebase mutates in place. This is because it - // is used only during the history operation that merges newly downloaded - // data into each state. To external consumers, it should appear as if the - // graph always contained the newly downloaded data. - rebase: function(entities, stack) { - var base = this.base(), - i, j, k, id; + } else { + event.click(context.map().mouseCoordinates()); + } + } - for (i = 0; i < entities.length; i++) { - var entity = entities[i]; + function backspace() { + d3.event.preventDefault(); + event.undo(); + } - if (base.entities[entity.id]) - continue; + function del() { + d3.event.preventDefault(); + event.cancel(); + } - // Merging data into the base graph - base.entities[entity.id] = entity; - this._updateCalculated(undefined, entity, - base.parentWays, base.parentRels); + function ret() { + d3.event.preventDefault(); + event.finish(); + } - // Restore provisionally-deleted nodes that are discovered to have an extant parent - if (entity.type === 'way') { - for (j = 0; j < entity.nodes.length; j++) { - id = entity.nodes[j]; - for (k = 1; k < stack.length; k++) { - var ents = stack[k].entities; - if (ents.hasOwnProperty(id) && ents[id] === undefined) { - delete ents[id]; - } - } - } - } - } + function draw(selection) { + context.install(hover); + context.install(edit); - for (i = 0; i < stack.length; i++) { - stack[i]._updateRebased(); + if (!context.inIntro() && !iD.behavior.Draw.usedTails[tail.text()]) { + context.install(tail); } - }, - _updateRebased: function() { - var base = this.base(), - i, k, child, id, keys; + keybinding + .on('⌫', backspace) + .on('⌦', del) + .on('⎋', ret) + .on('↩', ret); - keys = Object.keys(this._parentWays); - for (i = 0; i < keys.length; i++) { - child = keys[i]; - if (base.parentWays[child]) { - for (k = 0; k < base.parentWays[child].length; k++) { - id = base.parentWays[child][k]; - if (!this.entities.hasOwnProperty(id) && !_.contains(this._parentWays[child], id)) { - this._parentWays[child].push(id); - } - } - } - } + selection + .on('mousedown.draw', mousedown) + .on('mousemove.draw', mousemove); - keys = Object.keys(this._parentRels); - for (i = 0; i < keys.length; i++) { - child = keys[i]; - if (base.parentRels[child]) { - for (k = 0; k < base.parentRels[child].length; k++) { - id = base.parentRels[child][k]; - if (!this.entities.hasOwnProperty(id) && !_.contains(this._parentRels[child], id)) { - this._parentRels[child].push(id); - } - } - } - } + d3.select(document) + .call(keybinding); - this.transients = {}; + return draw; + } - // this._childNodes is not updated, under the assumption that - // ways are always downloaded with their child nodes. - }, + draw.off = function(selection) { + context.ui().sidebar.hover.cancel(); + context.uninstall(hover); + context.uninstall(edit); - // Updates calculated properties (parentWays, parentRels) for the specified change - _updateCalculated: function(oldentity, entity, parentWays, parentRels) { + if (!context.inIntro() && !iD.behavior.Draw.usedTails[tail.text()]) { + context.uninstall(tail); + iD.behavior.Draw.usedTails[tail.text()] = true; + } - parentWays = parentWays || this._parentWays; - parentRels = parentRels || this._parentRels; + selection + .on('mousedown.draw', null) + .on('mousemove.draw', null); - var type = entity && entity.type || oldentity && oldentity.type, - removed, added, ways, rels, i; + d3.select(window) + .on('mouseup.draw', null); + d3.select(document) + .call(keybinding.off); + }; - if (type === 'way') { + draw.tail = function(_) { + tail.text(_); + return draw; + }; - // Update parentWays - if (oldentity && entity) { - removed = _.difference(oldentity.nodes, entity.nodes); - added = _.difference(entity.nodes, oldentity.nodes); - } else if (oldentity) { - removed = oldentity.nodes; - added = []; - } else if (entity) { - removed = []; - added = entity.nodes; - } - for (i = 0; i < removed.length; i++) { - parentWays[removed[i]] = _.without(parentWays[removed[i]], oldentity.id); - } - for (i = 0; i < added.length; i++) { - ways = _.without(parentWays[added[i]], entity.id); - ways.push(entity.id); - parentWays[added[i]] = ways; - } - - } else if (type === 'relation') { - - // Update parentRels - if (oldentity && entity) { - removed = _.difference(oldentity.members, entity.members); - added = _.difference(entity.members, oldentity); - } else if (oldentity) { - removed = oldentity.members; - added = []; - } else if (entity) { - removed = []; - added = entity.members; - } - for (i = 0; i < removed.length; i++) { - parentRels[removed[i].id] = _.without(parentRels[removed[i].id], oldentity.id); - } - for (i = 0; i < added.length; i++) { - rels = _.without(parentRels[added[i].id], entity.id); - rels.push(entity.id); - parentRels[added[i].id] = rels; - } - } - }, + return d3.rebind(draw, event, 'on'); +}; - replace: function(entity) { - if (this.entities[entity.id] === entity) - return this; +iD.behavior.Draw.usedTails = {}; +iD.behavior.DrawWay = function(context, wayId, index, mode, baseGraph) { + var way = context.entity(wayId), + isArea = context.geometry(wayId) === 'area', + finished = false, + annotation = t((way.isDegenerate() ? + 'operations.start.annotation.' : + 'operations.continue.annotation.') + context.geometry(wayId)), + draw = iD.behavior.Draw(context); - return this.update(function() { - this._updateCalculated(this.entities[entity.id], entity); - this.entities[entity.id] = entity; + var startIndex = typeof index === 'undefined' ? way.nodes.length - 1 : 0, + start = iD.Node({loc: context.graph().entity(way.nodes[startIndex]).loc}), + end = iD.Node({loc: context.map().mouseCoordinates()}), + segment = iD.Way({ + nodes: typeof index === 'undefined' ? [start.id, end.id] : [end.id, start.id], + tags: _.clone(way.tags) }); - }, - remove: function(entity) { - return this.update(function() { - this._updateCalculated(entity, undefined); - this.entities[entity.id] = undefined; - }); - }, + var f = context[way.isDegenerate() ? 'replace' : 'perform']; + if (isArea) { + f(iD.actions.AddEntity(end), + iD.actions.AddVertex(wayId, end.id, index)); + } else { + f(iD.actions.AddEntity(start), + iD.actions.AddEntity(end), + iD.actions.AddEntity(segment)); + } - update: function() { - var graph = this.frozen ? iD.Graph(this, true) : this; + function move(datum) { + var loc; - for (var i = 0; i < arguments.length; i++) { - arguments[i].call(graph, graph); + if (datum.type === 'node' && datum.id !== end.id) { + loc = datum.loc; + } else if (datum.type === 'way' && datum.id !== segment.id) { + loc = iD.geo.chooseEdge(context.childNodes(datum), context.mouse(), context.projection).loc; + } else { + loc = context.map().mouseCoordinates(); } - return this.frozen ? graph.freeze() : this; - }, + context.replace(iD.actions.MoveNode(end.id, loc)); + } - freeze: function() { - this.frozen = true; + function undone() { + finished = true; + context.enter(iD.modes.Browse(context)); + } - // No longer freezing entities here due to in-place updates needed in rebase. + function setActiveElements() { + var active = isArea ? [wayId, end.id] : [segment.id, start.id, end.id]; + context.surface().selectAll(iD.util.entitySelector(active)) + .classed('active', true); + } - return this; - }, + var drawWay = function(surface) { + draw.on('move', move) + .on('click', drawWay.add) + .on('clickWay', drawWay.addWay) + .on('clickNode', drawWay.addNode) + .on('undo', context.undo) + .on('cancel', drawWay.cancel) + .on('finish', drawWay.finish); - // Obliterates any existing entities - load: function(entities) { - var base = this.base(); - this.entities = Object.create(base.entities); + context.map() + .dblclickEnable(false) + .on('drawn.draw', setActiveElements); - for (var i in entities) { - this.entities[i] = entities[i]; - this._updateCalculated(base.entities[i], this.entities[i]); - } + setActiveElements(); - return this; - } -}; -iD.History = function(context) { - var stack, index, tree, - imageryUsed = ['Bing'], - dispatch = d3.dispatch('change', 'undone', 'redone'), - lock = iD.util.SessionMutex('lock'); + surface.call(draw); - function perform(actions) { - actions = Array.prototype.slice.call(actions); + context.history() + .on('undone.draw', undone); + }; - var annotation; + drawWay.off = function(surface) { + if (!finished) + context.pop(); - if (!_.isFunction(_.last(actions))) { - annotation = actions.pop(); - } + context.map() + .on('drawn.draw', null); - var graph = stack[index].graph; - for (var i = 0; i < actions.length; i++) { - graph = actions[i](graph); - } + surface.call(draw.off) + .selectAll('.active') + .classed('active', false); - return { - graph: graph, - annotation: annotation, - imageryUsed: imageryUsed - }; - } + context.history() + .on('undone.draw', null); + }; - function change(previous) { - var difference = iD.Difference(previous, history.graph()); - dispatch.change(difference); - return difference; - } + function ReplaceTemporaryNode(newNode) { + return function(graph) { + if (isArea) { + return graph + .replace(way.addNode(newNode.id, index)) + .remove(end); - // iD uses namespaced keys so multiple installations do not conflict - function getKey(n) { - return 'iD_' + window.location.origin + '_' + n; + } else { + return graph + .replace(graph.entity(wayId).addNode(newNode.id, index)) + .remove(end) + .remove(segment) + .remove(start); + } + }; } - var history = { - graph: function() { - return stack[index].graph; - }, + // Accept the current position of the temporary node and continue drawing. + drawWay.add = function(loc) { - merge: function(entities, extent) { - stack[0].graph.rebase(entities, _.pluck(stack, 'graph')); - tree.rebase(entities); + // prevent duplicate nodes + var last = context.hasEntity(way.nodes[way.nodes.length - (isArea ? 2 : 1)]); + if (last && last.loc[0] === loc[0] && last.loc[1] === loc[1]) return; - dispatch.change(undefined, extent); - }, + var newNode = iD.Node({loc: loc}); - perform: function() { - var previous = stack[index].graph; + context.replace( + iD.actions.AddEntity(newNode), + ReplaceTemporaryNode(newNode), + annotation); - stack = stack.slice(0, index + 1); - stack.push(perform(arguments)); - index++; + finished = true; + context.enter(mode); + }; - return change(previous); - }, + // Connect the way to an existing way. + drawWay.addWay = function(loc, edge) { + var previousEdge = startIndex ? + [way.nodes[startIndex], way.nodes[startIndex - 1]] : + [way.nodes[0], way.nodes[1]]; - replace: function() { - var previous = stack[index].graph; + // Avoid creating duplicate segments + if (!isArea && iD.geo.edgeEqual(edge, previousEdge)) + return; - // assert(index == stack.length - 1) - stack[index] = perform(arguments); + var newNode = iD.Node({ loc: loc }); - return change(previous); - }, + context.perform( + iD.actions.AddMidpoint({ loc: loc, edge: edge}, newNode), + ReplaceTemporaryNode(newNode), + annotation); - pop: function() { - var previous = stack[index].graph; + finished = true; + context.enter(mode); + }; - if (index > 0) { - index--; - stack.pop(); - return change(previous); - } - }, + // Connect the way to an existing node and continue drawing. + drawWay.addNode = function(node) { - undo: function() { - var previous = stack[index].graph; + // Avoid creating duplicate segments + if (way.areAdjacent(node.id, way.nodes[way.nodes.length - 1])) return; - // Pop to the next annotated state. - while (index > 0) { - index--; - if (stack[index].annotation) break; - } + context.perform( + ReplaceTemporaryNode(node), + annotation); - dispatch.undone(); - return change(previous); - }, + finished = true; + context.enter(mode); + }; - redo: function() { - var previous = stack[index].graph; + // Finish the draw operation, removing the temporary node. If the way has enough + // nodes to be valid, it's selected. Otherwise, return to browse mode. + drawWay.finish = function() { + context.pop(); + finished = true; - while (index < stack.length - 1) { - index++; - if (stack[index].annotation) break; - } + window.setTimeout(function() { + context.map().dblclickEnable(true); + }, 1000); - dispatch.redone(); - return change(previous); - }, + if (context.hasEntity(wayId)) { + context.enter( + iD.modes.Select(context, [wayId]) + .suppressMenu(true) + .newFeature(true)); + } else { + context.enter(iD.modes.Browse(context)); + } + }; - undoAnnotation: function() { - var i = index; - while (i >= 0) { - if (stack[i].annotation) return stack[i].annotation; - i--; - } - }, + // Cancel the draw operation and return to browse, deleting everything drawn. + drawWay.cancel = function() { + context.perform( + d3.functor(baseGraph), + t('operations.cancel_draw.annotation')); - redoAnnotation: function() { - var i = index + 1; - while (i <= stack.length - 1) { - if (stack[i].annotation) return stack[i].annotation; - i++; - } - }, + window.setTimeout(function() { + context.map().dblclickEnable(true); + }, 1000); - intersects: function(extent) { - return tree.intersects(extent, stack[index].graph); - }, + finished = true; + context.enter(iD.modes.Browse(context)); + }; - difference: function() { - var base = stack[0].graph, - head = stack[index].graph; - return iD.Difference(base, head); - }, + drawWay.tail = function(text) { + draw.tail(text); + return drawWay; + }; - changes: function(action) { - var base = stack[0].graph, - head = stack[index].graph; + return drawWay; +}; +iD.behavior.Edit = function(context) { + function edit() { + context.map() + .minzoom(context.minEditableZoom()); + } - if (action) { - head = action(head); - } + edit.off = function() { + context.map() + .minzoom(0); + }; - var difference = iD.Difference(base, head); + return edit; +}; +iD.behavior.Hash = function(context) { + var s0 = null, // cached location.hash + lat = 90 - 1e-8; // allowable latitude range - return { - modified: difference.modified(), - created: difference.created(), - deleted: difference.deleted() - }; - }, + var parser = function(map, s) { + var q = iD.util.stringQs(s); + var args = (q.map || '').split('/').map(Number); + if (args.length < 3 || args.some(isNaN)) { + return true; // replace bogus hash + } else if (s !== formatter(map).slice(1)) { + map.centerZoom([args[1], + Math.min(lat, Math.max(-lat, args[2]))], args[0]); + } + }; - hasChanges: function() { - return this.difference().length() > 0; - }, + var formatter = function(map) { + var mode = context.mode(), + center = map.center(), + zoom = map.zoom(), + precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2)), + q = _.omit(iD.util.stringQs(location.hash.substring(1)), 'comment'), + newParams = {}; - imageryUsed: function(sources) { - if (sources) { - imageryUsed = sources; - return history; - } else { - return _(stack.slice(1, index + 1)) - .pluck('imageryUsed') - .flatten() - .unique() - .without(undefined, 'Custom') - .value(); + if (mode && mode.id === 'browse') { + delete q.id; + } else { + var selected = context.selectedIDs().filter(function(id) { + return !context.entity(id).isNew(); + }); + if (selected.length) { + newParams.id = selected.join(','); } - }, - - reset: function() { - stack = [{graph: iD.Graph()}]; - index = 0; - tree = iD.Tree(stack[0].graph); - dispatch.change(); - return history; - }, + } - toJSON: function() { - if (stack.length <= 1) return; + newParams.map = zoom.toFixed(2) + + '/' + center[0].toFixed(precision) + + '/' + center[1].toFixed(precision); - var allEntities = {}, - baseEntities = {}, - base = stack[0]; + return '#' + iD.util.qsString(_.assign(q, newParams), true); + }; - var s = stack.map(function(i) { - var modified = [], deleted = []; + function update() { + if (context.inIntro()) return; + var s1 = formatter(context.map()); + if (s0 !== s1) location.replace(s0 = s1); // don't recenter the map! + } - _.forEach(i.graph.entities, function(entity, id) { - if (entity) { - var key = iD.Entity.key(entity); - allEntities[key] = entity; - modified.push(key); - } else { - deleted.push(id); - } + var throttledUpdate = _.throttle(update, 500); - // make sure that the originals of changed or deleted entities get merged - // into the base of the stack after restoring the data from JSON. - if (id in base.graph.entities) { - baseEntities[id] = base.graph.entities[id]; - } - }); + function hashchange() { + if (location.hash === s0) return; // ignore spurious hashchange events + if (parser(context.map(), (s0 = location.hash).substring(1))) { + update(); // replace bogus hash + } + } - var x = {}; + function hash() { + context.map() + .on('move.hash', throttledUpdate); - if (modified.length) x.modified = modified; - if (deleted.length) x.deleted = deleted; - if (i.imageryUsed) x.imageryUsed = i.imageryUsed; - if (i.annotation) x.annotation = i.annotation; + context + .on('enter.hash', throttledUpdate); - return x; - }); + d3.select(window) + .on('hashchange.hash', hashchange); - return JSON.stringify({ - version: 3, - entities: _.values(allEntities), - baseEntities: _.values(baseEntities), - stack: s, - nextIDs: iD.Entity.id.next, - index: index - }); - }, + if (location.hash) { + var q = iD.util.stringQs(location.hash.substring(1)); + if (q.id) context.zoomToEntity(q.id.split(',')[0], !q.map); + if (q.comment) context.storage('comment', q.comment); + hashchange(); + if (q.map) hash.hadHash = true; + } + } - fromJSON: function(json) { - var h = JSON.parse(json); + hash.off = function() { + throttledUpdate.cancel(); - iD.Entity.id.next = h.nextIDs; - index = h.index; + context.map() + .on('move.hash', null); - if (h.version === 2 || h.version === 3) { - var allEntities = {}; + context + .on('enter.hash', null); - h.entities.forEach(function(entity) { - allEntities[iD.Entity.key(entity)] = iD.Entity(entity); - }); + d3.select(window) + .on('hashchange.hash', null); - if (h.version === 3) { - // this merges originals for changed entities into the base of - // the stack even if the current stack doesn't have them (for - // example when iD has been restarted in a different region) - var baseEntities = h.baseEntities.map(iD.Entity); - stack[0].graph.rebase(baseEntities, _.pluck(stack, 'graph')); - tree.rebase(baseEntities); - } + location.hash = ''; + }; - stack = h.stack.map(function(d) { - var entities = {}, entity; + return hash; +}; +/* + The hover behavior adds the `.hover` class on mouseover to all elements to which + the identical datum is bound, and removes it on mouseout. - if (d.modified) { - d.modified.forEach(function(key) { - entity = allEntities[key]; - entities[entity.id] = entity; - }); - } + The :hover pseudo-class is insufficient for iD's purposes because a datum's visual + representation may consist of several elements scattered throughout the DOM hierarchy. + Only one of these elements can have the :hover pseudo-class, but all of them will + have the .hover class. + */ +iD.behavior.Hover = function() { + var dispatch = d3.dispatch('hover'), + selection, + altDisables, + target; - if (d.deleted) { - d.deleted.forEach(function(id) { - entities[id] = undefined; - }); - } + function keydown() { + if (altDisables && d3.event.keyCode === d3.keybinding.modifierCodes.alt) { + dispatch.hover(null); + selection.selectAll('.hover') + .classed('hover-suppressed', true) + .classed('hover', false); + } + } - return { - graph: iD.Graph(stack[0].graph).load(entities), - annotation: d.annotation, - imageryUsed: d.imageryUsed - }; - }); - } else { // original version - stack = h.stack.map(function(d) { - var entities = {}; + function keyup() { + if (altDisables && d3.event.keyCode === d3.keybinding.modifierCodes.alt) { + dispatch.hover(target ? target.id : null); + selection.selectAll('.hover-suppressed') + .classed('hover-suppressed', false) + .classed('hover', true); + } + } - for (var i in d.entities) { - var entity = d.entities[i]; - entities[i] = entity === 'undefined' ? undefined : iD.Entity(entity); - } + var hover = function(__) { + selection = __; - d.graph = iD.Graph(stack[0].graph).load(entities); - return d; - }); - } + function enter(d) { + if (d === target) return; - dispatch.change(); + target = d; - return history; - }, + selection.selectAll('.hover') + .classed('hover', false); + selection.selectAll('.hover-suppressed') + .classed('hover-suppressed', false); - save: function() { - if (lock.locked()) context.storage(getKey('saved_history'), history.toJSON() || null); - return history; - }, + if (target instanceof iD.Entity) { + var selector = '.' + target.id; - clearSaved: function() { - if (lock.locked()) context.storage(getKey('saved_history'), null); - return history; - }, + if (target.type === 'relation') { + target.members.forEach(function(member) { + selector += ', .' + member.id; + }); + } - lock: function() { - return lock.lock(); - }, + var suppressed = altDisables && d3.event && d3.event.altKey; - unlock: function() { - lock.unlock(); - }, + selection.selectAll(selector) + .classed(suppressed ? 'hover-suppressed' : 'hover', true); - // is iD not open in another window and it detects that - // there's a history stored in localStorage that's recoverable? - restorableChanges: function() { - return lock.locked() && !!context.storage(getKey('saved_history')); - }, + dispatch.hover(target.id); + } else { + dispatch.hover(null); + } + } - // load history from a version stored in localStorage - restore: function() { - if (!lock.locked()) return; + var down; - var json = context.storage(getKey('saved_history')); - if (json) history.fromJSON(json); - }, + function mouseover() { + if (down) return; + var target = d3.event.target; + enter(target ? target.__data__ : null); + } - _getKey: getKey + function mouseout() { + if (down) return; + var target = d3.event.relatedTarget; + enter(target ? target.__data__ : null); + } + + function mousedown() { + down = true; + d3.select(window) + .on('mouseup.hover', mouseup); + } + + function mouseup() { + down = false; + } + + selection + .on('mouseover.hover', mouseover) + .on('mouseout.hover', mouseout) + .on('mousedown.hover', mousedown) + .on('mouseup.hover', mouseup); + d3.select(window) + .on('keydown.hover', keydown) + .on('keyup.hover', keyup); }; - history.reset(); + hover.off = function(selection) { + selection.selectAll('.hover') + .classed('hover', false); + selection.selectAll('.hover-suppressed') + .classed('hover-suppressed', false); - return d3.rebind(history, dispatch, 'on'); -}; -iD.Node = iD.Entity.node = function iD_Node() { - if (!(this instanceof iD_Node)) { - return (new iD_Node()).initialize(arguments); - } else if (arguments.length) { - this.initialize(arguments); - } -}; + selection + .on('mouseover.hover', null) + .on('mouseout.hover', null) + .on('mousedown.hover', null) + .on('mouseup.hover', null); -iD.Node.prototype = Object.create(iD.Entity.prototype); + d3.select(window) + .on('keydown.hover', null) + .on('keyup.hover', null) + .on('mouseup.hover', null); + }; -_.extend(iD.Node.prototype, { - type: 'node', + hover.altDisables = function(_) { + if (!arguments.length) return altDisables; + altDisables = _; + return hover; + }; - extent: function() { - return new iD.geo.Extent(this.loc); - }, + return d3.rebind(hover, dispatch, 'on'); +}; +iD.behavior.Lasso = function(context) { - geometry: function(graph) { - return graph.transient(this, 'geometry', function() { - return graph.isPoi(this) ? 'point' : 'vertex'; - }); - }, + var behavior = function(selection) { + var mouse = null, + lasso; - move: function(loc) { - return this.update({loc: loc}); - }, + function mousedown() { + if (d3.event.shiftKey === true) { - isIntersection: function(resolver) { - return resolver.transient(this, 'isIntersection', function() { - return resolver.parentWays(this).filter(function(parent) { - return (parent.tags.highway || - parent.tags.waterway || - parent.tags.railway || - parent.tags.aeroway) && - parent.geometry(resolver) === 'line'; - }).length > 1; - }); - }, + mouse = context.mouse(); + lasso = null; - asJXON: function(changeset_id) { - var r = { - node: { - '@id': this.osmId(), - '@lon': this.loc[0], - '@lat': this.loc[1], - '@version': (this.version || 0), - tag: _.map(this.tags, function(v, k) { - return { keyAttributes: { k: k, v: v } }; - }) + selection + .on('mousemove.lasso', mousemove) + .on('mouseup.lasso', mouseup); + + d3.event.stopPropagation(); } - }; - if (changeset_id) r.node['@changeset'] = changeset_id; - return r; - }, + } - asGeoJSON: function() { - return { - type: 'Point', - coordinates: this.loc - }; - } -}); -iD.Relation = iD.Entity.relation = function iD_Relation() { - if (!(this instanceof iD_Relation)) { - return (new iD_Relation()).initialize(arguments); - } else if (arguments.length) { - this.initialize(arguments); - } -}; + function mousemove() { + if (!lasso) { + lasso = iD.ui.Lasso(context).a(mouse); + context.surface().call(lasso); + } -iD.Relation.prototype = Object.create(iD.Entity.prototype); + lasso.b(context.mouse()); + } -iD.Relation.creationOrder = function(a, b) { - var aId = parseInt(iD.Entity.id.toOSM(a.id), 10); - var bId = parseInt(iD.Entity.id.toOSM(b.id), 10); + function normalize(a, b) { + return [ + [Math.min(a[0], b[0]), Math.min(a[1], b[1])], + [Math.max(a[0], b[0]), Math.max(a[1], b[1])]]; + } - if (aId < 0 || bId < 0) return aId - bId; - return bId - aId; -}; + function mouseup() { + selection + .on('mousemove.lasso', null) + .on('mouseup.lasso', null); -_.extend(iD.Relation.prototype, { - type: 'relation', - members: [], + if (!lasso) return; - extent: function(resolver, memo) { - return resolver.transient(this, 'extent', function() { - if (memo && memo[this.id]) return iD.geo.Extent(); - memo = memo || {}; - memo[this.id] = true; - return this.members.reduce(function(extent, member) { - member = resolver.hasEntity(member.id); - if (member) { - return extent.extend(member.extent(resolver, memo)); - } else { - return extent; - } - }, iD.geo.Extent()); - }); - }, + var graph = context.graph(), + extent = iD.geo.Extent( + normalize(context.projection.invert(lasso.a()), + context.projection.invert(lasso.b()))); - geometry: function(graph) { - return graph.transient(this, 'geometry', function() { - return this.isMultipolygon() ? 'area' : 'relation'; - }); - }, + lasso.close(); - isDegenerate: function() { - return this.members.length === 0; - }, + var selected = context.intersects(extent).filter(function(entity) { + return entity.type === 'node' && + !context.features().isHidden(entity, graph, entity.geometry(graph)); + }); - // Return an array of members, each extended with an 'index' property whose value - // is the member index. - indexedMembers: function() { - var result = new Array(this.members.length); - for (var i = 0; i < this.members.length; i++) { - result[i] = _.extend({}, this.members[i], {index: i}); - } - return result; - }, - - // Return the first member with the given role. A copy of the member object - // is returned, extended with an 'index' property whose value is the member index. - memberByRole: function(role) { - for (var i = 0; i < this.members.length; i++) { - if (this.members[i].role === role) { - return _.extend({}, this.members[i], {index: i}); - } - } - }, - - // Return the first member with the given id. A copy of the member object - // is returned, extended with an 'index' property whose value is the member index. - memberById: function(id) { - for (var i = 0; i < this.members.length; i++) { - if (this.members[i].id === id) { - return _.extend({}, this.members[i], {index: i}); - } - } - }, - - // Return the first member with the given id and role. A copy of the member object - // is returned, extended with an 'index' property whose value is the member index. - memberByIdAndRole: function(id, role) { - for (var i = 0; i < this.members.length; i++) { - if (this.members[i].id === id && this.members[i].role === role) { - return _.extend({}, this.members[i], {index: i}); + if (selected.length) { + context.enter(iD.modes.Select(context, _.pluck(selected, 'id'))); } } - }, - - addMember: function(member, index) { - var members = this.members.slice(); - members.splice(index === undefined ? members.length : index, 0, member); - return this.update({members: members}); - }, - updateMember: function(member, index) { - var members = this.members.slice(); - members.splice(index, 1, _.extend({}, members[index], member)); - return this.update({members: members}); - }, - - removeMember: function(index) { - var members = this.members.slice(); - members.splice(index, 1); - return this.update({members: members}); - }, + selection + .on('mousedown.lasso', mousedown); + }; - removeMembersWithID: function(id) { - var members = _.reject(this.members, function(m) { return m.id === id; }); - return this.update({members: members}); - }, + behavior.off = function(selection) { + selection.on('mousedown.lasso', null); + }; - // Wherever a member appears with id `needle.id`, replace it with a member - // with id `replacement.id`, type `replacement.type`, and the original role, - // unless a member already exists with that id and role. Return an updated - // relation. - replaceMember: function(needle, replacement) { - if (!this.memberById(needle.id)) - return this; + return behavior; +}; +iD.behavior.Paste = function(context) { + var keybinding = d3.keybinding('paste'); + + function omitTag(v, k) { + return ( + k === 'phone' || + k === 'fax' || + k === 'email' || + k === 'website' || + k === 'url' || + k === 'note' || + k === 'description' || + k.indexOf('name') !== -1 || + k.indexOf('wiki') === 0 || + k.indexOf('addr:') === 0 || + k.indexOf('contact:') === 0 + ); + } - var members = []; + function doPaste() { + d3.event.preventDefault(); + if (context.inIntro()) return; - for (var i = 0; i < this.members.length; i++) { - var member = this.members[i]; - if (member.id !== needle.id) { - members.push(member); - } else if (!this.memberByIdAndRole(replacement.id, member.role)) { - members.push({id: replacement.id, type: replacement.type, role: member.role}); - } - } + var baseGraph = context.graph(), + mouse = context.mouse(), + projection = context.projection, + viewport = iD.geo.Extent(projection.clipExtent()).polygon(); - return this.update({members: members}); - }, + if (!iD.geo.pointInPolygon(mouse, viewport)) return; - asJXON: function(changeset_id) { - var r = { - relation: { - '@id': this.osmId(), - '@version': this.version || 0, - member: _.map(this.members, function(member) { - return { keyAttributes: { type: member.type, role: member.role, ref: iD.Entity.id.toOSM(member.id) } }; - }), - tag: _.map(this.tags, function(v, k) { - return { keyAttributes: { k: k, v: v } }; - }) - } - }; - if (changeset_id) r.relation['@changeset'] = changeset_id; - return r; - }, + var extent = iD.geo.Extent(), + oldIDs = context.copyIDs(), + oldGraph = context.copyGraph(), + newIDs = []; - asGeoJSON: function(resolver) { - return resolver.transient(this, 'GeoJSON', function () { - if (this.isMultipolygon()) { - return { - type: 'MultiPolygon', - coordinates: this.multipolygon(resolver) - }; - } else { - return { - type: 'FeatureCollection', - properties: this.tags, - features: this.members.map(function (member) { - return _.extend({role: member.role}, resolver.entity(member.id).asGeoJSON(resolver)); - }) - }; - } - }); - }, + if (!oldIDs.length) return; - area: function(resolver) { - return resolver.transient(this, 'area', function() { - return d3.geo.area(this.asGeoJSON(resolver)); - }); - }, + var action = iD.actions.CopyEntities(oldIDs, oldGraph); + context.perform(action); - isMultipolygon: function() { - return this.tags.type === 'multipolygon'; - }, + var copies = action.copies(); + for (var id in copies) { + var oldEntity = oldGraph.entity(id), + newEntity = copies[id]; - isComplete: function(resolver) { - for (var i = 0; i < this.members.length; i++) { - if (!resolver.hasEntity(this.members[i].id)) { - return false; - } + extent._extend(oldEntity.extent(oldGraph)); + newIDs.push(newEntity.id); + context.perform(iD.actions.ChangeTags(newEntity.id, _.omit(newEntity.tags, omitTag))); } - return true; - }, - - isRestriction: function() { - return !!(this.tags.type && this.tags.type.match(/^restriction:?/)); - }, - - // Returns an array [A0, ... An], each Ai being an array of node arrays [Nds0, ... Ndsm], - // where Nds0 is an outer ring and subsequent Ndsi's (if any i > 0) being inner rings. - // - // This corresponds to the structure needed for rendering a multipolygon path using a - // `evenodd` fill rule, as well as the structure of a GeoJSON MultiPolygon geometry. - // - // In the case of invalid geometries, this function will still return a result which - // includes the nodes of all way members, but some Nds may be unclosed and some inner - // rings not matched with the intended outer ring. - // - multipolygon: function(resolver) { - var outers = this.members.filter(function(m) { return 'outer' === (m.role || 'outer'); }), - inners = this.members.filter(function(m) { return 'inner' === m.role; }); - - outers = iD.geo.joinWays(outers, resolver); - inners = iD.geo.joinWays(inners, resolver); - outers = outers.map(function(outer) { return _.pluck(outer.nodes, 'loc'); }); - inners = inners.map(function(inner) { return _.pluck(inner.nodes, 'loc'); }); + // Put pasted objects where mouse pointer is.. + var center = projection(extent.center()), + delta = [ mouse[0] - center[0], mouse[1] - center[1] ]; - var result = outers.map(function(o) { - // Heuristic for detecting counterclockwise winding order. Assumes - // that OpenStreetMap polygons are not hemisphere-spanning. - return [d3.geo.area({type: 'Polygon', coordinates: [o]}) > 2 * Math.PI ? o.reverse() : o]; - }); + context.perform(iD.actions.Move(newIDs, delta, projection)); + context.enter(iD.modes.Move(context, newIDs, baseGraph)); + } - function findOuter(inner) { - var o, outer; + function paste() { + keybinding.on(iD.ui.cmd('⌘V'), doPaste); + d3.select(document).call(keybinding); + return paste; + } - for (o = 0; o < outers.length; o++) { - outer = outers[o]; - if (iD.geo.polygonContainsPolygon(outer, inner)) - return o; - } + paste.off = function() { + d3.select(document).call(keybinding.off); + }; - for (o = 0; o < outers.length; o++) { - outer = outers[o]; - if (iD.geo.polygonIntersectsPolygon(outer, inner)) - return o; - } + return paste; +}; +iD.behavior.Select = function(context) { + function keydown() { + if (d3.event && d3.event.shiftKey) { + context.surface() + .classed('behavior-multiselect', true); } + } - for (var i = 0; i < inners.length; i++) { - var inner = inners[i]; - - if (d3.geo.area({type: 'Polygon', coordinates: [inner]}) < 2 * Math.PI) { - inner = inner.reverse(); - } - - var o = findOuter(inners[i]); - if (o !== undefined) - result[o].push(inners[i]); - else - result.push([inners[i]]); // Invalid geometry + function keyup() { + if (!d3.event || !d3.event.shiftKey) { + context.surface() + .classed('behavior-multiselect', false); } - - return result; } -}); -iD.Tree = function(head) { - var rtree = rbush(), - rectangles = {}; - function extentRectangle(extent) { - return [ - extent[0][0], - extent[0][1], - extent[1][0], - extent[1][1] - ]; - } + function click() { + var datum = d3.event.target.__data__, + lasso = d3.select('#surface .lasso').node(), + mode = context.mode(); - function entityRectangle(entity) { - var rect = extentRectangle(entity.extent(head)); - rect.id = entity.id; - rectangles[entity.id] = rect; - return rect; - } + if (!(datum instanceof iD.Entity)) { + if (!d3.event.shiftKey && !lasso && mode.id !== 'browse') + context.enter(iD.modes.Browse(context)); - function updateParents(entity, insertions, memo) { - if (memo && memo[entity.id]) return; - memo = memo || {}; - memo[entity.id] = true; - - head.parentWays(entity).forEach(function(parent) { - if (rectangles[parent.id]) { - rtree.remove(rectangles[parent.id]); - insertions.push(parent); + } else if (!d3.event.shiftKey && !lasso) { + // Avoid re-entering Select mode with same entity. + if (context.selectedIDs().length !== 1 || context.selectedIDs()[0] !== datum.id) { + context.enter(iD.modes.Select(context, [datum.id])); + } else { + mode.suppressMenu(false).reselect(); } - }); + } else if (context.selectedIDs().indexOf(datum.id) >= 0) { + var selectedIDs = _.without(context.selectedIDs(), datum.id); + context.enter(selectedIDs.length ? + iD.modes.Select(context, selectedIDs) : + iD.modes.Browse(context)); - head.parentRelations(entity).forEach(function(parent) { - if (rectangles[parent.id]) { - rtree.remove(rectangles[parent.id]); - insertions.push(parent); - } - updateParents(parent, insertions, memo); - }); + } else { + context.enter(iD.modes.Select(context, context.selectedIDs().concat([datum.id]))); + } } - var tree = {}; + var behavior = function(selection) { + d3.select(window) + .on('keydown.select', keydown) + .on('keyup.select', keyup); - tree.rebase = function(entities) { - var insertions = []; + selection.on('click.select', click); - entities.forEach(function(entity) { - if (head.entities.hasOwnProperty(entity.id) || rectangles[entity.id]) - return; + keydown(); + }; - insertions.push(entity); - updateParents(entity, insertions); - }); + behavior.off = function(selection) { + d3.select(window) + .on('keydown.select', null) + .on('keyup.select', null); - insertions = _.unique(insertions).map(entityRectangle); - rtree.load(insertions); + selection.on('click.select', null); - return tree; + keyup(); }; - tree.intersects = function(extent, graph) { - if (graph !== head) { - var diff = iD.Difference(head, graph), - insertions = []; - - head = graph; + return behavior; +}; +iD.behavior.Tail = function() { + var text, + container, + xmargin = 25, + tooltipSize = [0, 0], + selectionSize = [0, 0]; - diff.deleted().forEach(function(entity) { - rtree.remove(rectangles[entity.id]); - delete rectangles[entity.id]; - }); + function tail(selection) { + if (!text) return; - diff.modified().forEach(function(entity) { - rtree.remove(rectangles[entity.id]); - insertions.push(entity); - updateParents(entity, insertions); - }); + d3.select(window) + .on('resize.tail', function() { selectionSize = selection.dimensions(); }); - diff.created().forEach(function(entity) { - insertions.push(entity); - }); + function show() { + container.style('display', 'block'); + tooltipSize = container.dimensions(); + } - insertions = _.unique(insertions).map(entityRectangle); - rtree.load(insertions); + function mousemove() { + if (container.style('display') === 'none') show(); + var xoffset = ((d3.event.clientX + tooltipSize[0] + xmargin) > selectionSize[0]) ? + -tooltipSize[0] - xmargin : xmargin; + container.classed('left', xoffset > 0); + iD.util.setTransform(container, d3.event.clientX + xoffset, d3.event.clientY); } - return rtree.search(extentRectangle(extent)).map(function(rect) { - return head.entity(rect.id); - }); - }; + function mouseleave() { + if (d3.event.relatedTarget !== container.node()) { + container.style('display', 'none'); + } + } - return tree; -}; -iD.Way = iD.Entity.way = function iD_Way() { - if (!(this instanceof iD_Way)) { - return (new iD_Way()).initialize(arguments); - } else if (arguments.length) { - this.initialize(arguments); - } -}; + function mouseenter() { + if (d3.event.relatedTarget !== container.node()) { + show(); + } + } -iD.Way.prototype = Object.create(iD.Entity.prototype); + container = d3.select(document.body) + .append('div') + .style('display', 'none') + .attr('class', 'tail tooltip-inner'); -_.extend(iD.Way.prototype, { - type: 'way', - nodes: [], + container.append('div') + .text(text); - extent: function(resolver) { - return resolver.transient(this, 'extent', function() { - return this.nodes.reduce(function(extent, id) { - var node = resolver.hasEntity(id); - if (node) { - return extent.extend(node.extent()); - } else { - return extent; - } - }, iD.geo.Extent()); - }); - }, + selection + .on('mousemove.tail', mousemove) + .on('mouseenter.tail', mouseenter) + .on('mouseleave.tail', mouseleave); - first: function() { - return this.nodes[0]; - }, + container + .on('mousemove.tail', mousemove); - last: function() { - return this.nodes[this.nodes.length - 1]; - }, + tooltipSize = container.dimensions(); + selectionSize = selection.dimensions(); + } - contains: function(node) { - return this.nodes.indexOf(node) >= 0; - }, + tail.off = function(selection) { + if (!text) return; - affix: function(node) { - if (this.nodes[0] === node) return 'prefix'; - if (this.nodes[this.nodes.length - 1] === node) return 'suffix'; - }, + container + .on('mousemove.tail', null) + .remove(); - isOneWay: function() { - return this.tags.oneway === 'yes' || - this.tags.oneway === '1' || - this.tags.oneway === '-1' || - this.tags.waterway === 'river' || - this.tags.waterway === 'stream' || - this.tags.junction === 'roundabout'; - }, + selection + .on('mousemove.tail', null) + .on('mouseenter.tail', null) + .on('mouseleave.tail', null); - isClosed: function() { - return this.nodes.length > 0 && this.first() === this.last(); - }, + d3.select(window) + .on('resize.tail', null); + }; - isArea: function() { - if (this.tags.area === 'yes') - return true; - if (!this.isClosed() || this.tags.area === 'no') - return false; - for (var key in this.tags) - if (key in iD.areaKeys && !(this.tags[key] in iD.areaKeys[key])) - return true; - return false; - }, + tail.text = function(_) { + if (!arguments.length) return text; + text = _; + return tail; + }; - isDegenerate: function() { - return _.uniq(this.nodes).length < (this.isArea() ? 3 : 2); - }, + return tail; +}; +iD.modes = {}; +iD.modes.AddArea = function(context) { + var mode = { + id: 'add-area', + button: 'area', + title: t('modes.add_area.title'), + description: t('modes.add_area.description'), + key: '3' + }; - areAdjacent: function(n1, n2) { - for (var i = 0; i < this.nodes.length; i++) { - if (this.nodes[i] === n1) { - if (this.nodes[i - 1] === n2) return true; - if (this.nodes[i + 1] === n2) return true; - } - } - return false; - }, + var behavior = iD.behavior.AddWay(context) + .tail(t('modes.add_area.tail')) + .on('start', start) + .on('startFromWay', startFromWay) + .on('startFromNode', startFromNode), + defaultTags = {area: 'yes'}; - geometry: function(graph) { - return graph.transient(this, 'geometry', function() { - return this.isArea() ? 'area' : 'line'; - }); - }, + function start(loc) { + var graph = context.graph(), + node = iD.Node({loc: loc}), + way = iD.Way({tags: defaultTags}); - addNode: function(id, index) { - var nodes = this.nodes.slice(); - nodes.splice(index === undefined ? nodes.length : index, 0, id); - return this.update({nodes: nodes}); - }, + context.perform( + iD.actions.AddEntity(node), + iD.actions.AddEntity(way), + iD.actions.AddVertex(way.id, node.id), + iD.actions.AddVertex(way.id, node.id)); - updateNode: function(id, index) { - var nodes = this.nodes.slice(); - nodes.splice(index, 1, id); - return this.update({nodes: nodes}); - }, + context.enter(iD.modes.DrawArea(context, way.id, graph)); + } - replaceNode: function(needle, replacement) { - if (this.nodes.indexOf(needle) < 0) - return this; + function startFromWay(loc, edge) { + var graph = context.graph(), + node = iD.Node({loc: loc}), + way = iD.Way({tags: defaultTags}); - var nodes = this.nodes.slice(); - for (var i = 0; i < nodes.length; i++) { - if (nodes[i] === needle) { - nodes[i] = replacement; - } - } - return this.update({nodes: nodes}); - }, + context.perform( + iD.actions.AddEntity(node), + iD.actions.AddEntity(way), + iD.actions.AddVertex(way.id, node.id), + iD.actions.AddVertex(way.id, node.id), + iD.actions.AddMidpoint({ loc: loc, edge: edge }, node)); - removeNode: function(id) { - var nodes = []; + context.enter(iD.modes.DrawArea(context, way.id, graph)); + } - for (var i = 0; i < this.nodes.length; i++) { - var node = this.nodes[i]; - if (node !== id && nodes[nodes.length - 1] !== node) { - nodes.push(node); - } - } + function startFromNode(node) { + var graph = context.graph(), + way = iD.Way({tags: defaultTags}); - // Preserve circularity - if (this.nodes.length > 1 && this.first() === id && this.last() === id && nodes[nodes.length - 1] !== nodes[0]) { - nodes.push(nodes[0]); - } + context.perform( + iD.actions.AddEntity(way), + iD.actions.AddVertex(way.id, node.id), + iD.actions.AddVertex(way.id, node.id)); - return this.update({nodes: nodes}); - }, + context.enter(iD.modes.DrawArea(context, way.id, graph)); + } - asJXON: function(changeset_id) { - var r = { - way: { - '@id': this.osmId(), - '@version': this.version || 0, - nd: _.map(this.nodes, function(id) { - return { keyAttributes: { ref: iD.Entity.id.toOSM(id) } }; - }), - tag: _.map(this.tags, function(v, k) { - return { keyAttributes: { k: k, v: v } }; - }) - } - }; - if (changeset_id) r.way['@changeset'] = changeset_id; - return r; - }, + mode.enter = function() { + context.install(behavior); + }; - asGeoJSON: function(resolver) { - return resolver.transient(this, 'GeoJSON', function() { - var coordinates = _.pluck(resolver.childNodes(this), 'loc'); - if (this.isArea() && this.isClosed()) { - return { - type: 'Polygon', - coordinates: [coordinates] - }; - } else { - return { - type: 'LineString', - coordinates: coordinates - }; - } - }); - }, - - area: function(resolver) { - return resolver.transient(this, 'area', function() { - var nodes = resolver.childNodes(this); + mode.exit = function() { + context.uninstall(behavior); + }; - if (!this.isClosed() && nodes.length) { - nodes = nodes.concat([nodes[0]]); - } + return mode; +}; +iD.modes.AddLine = function(context) { + var mode = { + id: 'add-line', + button: 'line', + title: t('modes.add_line.title'), + description: t('modes.add_line.description'), + key: '2' + }; - var json = { - type: 'Polygon', - coordinates: [_.pluck(nodes, 'loc')] - }; + var behavior = iD.behavior.AddWay(context) + .tail(t('modes.add_line.tail')) + .on('start', start) + .on('startFromWay', startFromWay) + .on('startFromNode', startFromNode); - var area = d3.geo.area(json); + function start(loc) { + var baseGraph = context.graph(), + node = iD.Node({loc: loc}), + way = iD.Way(); - // Heuristic for detecting counterclockwise winding order. Assumes - // that OpenStreetMap polygons are not hemisphere-spanning. - if (d3.geo.area(json) > 2 * Math.PI) { - json.coordinates[0] = json.coordinates[0].reverse(); - area = d3.geo.area(json); - } + context.perform( + iD.actions.AddEntity(node), + iD.actions.AddEntity(way), + iD.actions.AddVertex(way.id, node.id)); - return isNaN(area) ? 0 : area; - }); + context.enter(iD.modes.DrawLine(context, way.id, baseGraph)); } -}); -iD.Background = function(context) { - var dispatch = d3.dispatch('change'), - baseLayer = iD.TileLayer() - .projection(context.projection), - gpxLayer = iD.GpxLayer(context, dispatch) - .projection(context.projection), - overlayLayers = []; - var backgroundSources = iD.data.imagery.map(function(source) { - if (source.type === 'bing') { - return iD.BackgroundSource.Bing(source, dispatch); - } else { - return iD.BackgroundSource(source); - } - }); + function startFromWay(loc, edge) { + var baseGraph = context.graph(), + node = iD.Node({loc: loc}), + way = iD.Way(); - backgroundSources.unshift(iD.BackgroundSource.None()); + context.perform( + iD.actions.AddEntity(node), + iD.actions.AddEntity(way), + iD.actions.AddVertex(way.id, node.id), + iD.actions.AddMidpoint({ loc: loc, edge: edge }, node)); - function findSource(id) { - return _.find(backgroundSources, function(d) { - return d.id && d.id === id; - }); + context.enter(iD.modes.DrawLine(context, way.id, baseGraph)); } - function updateImagery() { - var b = background.baseLayerSource(), - o = overlayLayers.map(function (d) { return d.source().id; }).join(','), - q = iD.util.stringQs(location.hash.substring(1)); + function startFromNode(node) { + var baseGraph = context.graph(), + way = iD.Way(); - var id = b.id; - if (id === 'custom') { - id = 'custom:' + b.template; - } + context.perform( + iD.actions.AddEntity(way), + iD.actions.AddVertex(way.id, node.id)); - if (id) { - q.background = id; - } else { - delete q.background; - } + context.enter(iD.modes.DrawLine(context, way.id, baseGraph)); + } - if (o) { - q.overlays = o; - } else { - delete q.overlays; - } + mode.enter = function() { + context.install(behavior); + }; - location.replace('#' + iD.util.qsString(q, true)); + mode.exit = function() { + context.uninstall(behavior); + }; - var imageryUsed = [b.imageryUsed()]; + return mode; +}; +iD.modes.AddPoint = function(context) { + var mode = { + id: 'add-point', + button: 'point', + title: t('modes.add_point.title'), + description: t('modes.add_point.description'), + key: '1' + }; - overlayLayers.forEach(function (d) { - var source = d.source(); - if (!source.isLocatorOverlay()) { - imageryUsed.push(source.imageryUsed()); - } - }); + var behavior = iD.behavior.Draw(context) + .tail(t('modes.add_point.tail')) + .on('click', add) + .on('clickWay', addWay) + .on('clickNode', addNode) + .on('cancel', cancel) + .on('finish', cancel); - if (background.showsGpxLayer()) { - imageryUsed.push('Local GPX'); - } + function add(loc) { + var node = iD.Node({loc: loc}); - context.history().imageryUsed(imageryUsed); - } + context.perform( + iD.actions.AddEntity(node), + t('operations.add.annotation.point')); - function background(selection) { - var base = selection.selectAll('.background-layer') - .data([0]); + context.enter( + iD.modes.Select(context, [node.id]) + .suppressMenu(true) + .newFeature(true)); + } - base.enter().insert('div', '.layer-data') - .attr('class', 'layer-layer background-layer'); + function addWay(loc) { + add(loc); + } - base.call(baseLayer); + function addNode(node) { + add(node.loc); + } - var gpx = selection.selectAll('.gpx-layer') - .data([0]); + function cancel() { + context.enter(iD.modes.Browse(context)); + } - gpx.enter().insert('div', '.layer-data') - .attr('class', 'layer-layer gpx-layer'); + mode.enter = function() { + context.install(behavior); + }; - gpx.call(gpxLayer); + mode.exit = function() { + context.uninstall(behavior); + }; - var overlays = selection.selectAll('.overlay-layer') - .data(overlayLayers, function(d) { return d.source().name(); }); + return mode; +}; +iD.modes.Browse = function(context) { + var mode = { + button: 'browse', + id: 'browse', + title: t('modes.browse.title'), + description: t('modes.browse.description') + }, sidebar; - overlays.enter().insert('div', '.layer-data') - .attr('class', 'layer-layer overlay-layer'); + var behaviors = [ + iD.behavior.Paste(context), + iD.behavior.Hover(context) + .on('hover', context.ui().sidebar.hover), + iD.behavior.Select(context), + iD.behavior.Lasso(context), + iD.modes.DragNode(context).behavior]; - overlays.each(function(layer) { - d3.select(this).call(layer); + mode.enter = function() { + behaviors.forEach(function(behavior) { + context.install(behavior); }); - overlays.exit() - .remove(); - } + // Get focus on the body. + if (document.activeElement && document.activeElement.blur) { + document.activeElement.blur(); + } - background.sources = function(extent) { - return backgroundSources.filter(function(source) { - return source.intersects(extent); - }); + if (sidebar) { + context.ui().sidebar.show(sidebar); + } else { + context.ui().sidebar.select(null); + } }; - background.dimensions = function(_) { - baseLayer.dimensions(_); - gpxLayer.dimensions(_); - - overlayLayers.forEach(function(layer) { - layer.dimensions(_); + mode.exit = function() { + context.ui().sidebar.hover.cancel(); + behaviors.forEach(function(behavior) { + context.uninstall(behavior); }); - }; - - background.baseLayerSource = function(d) { - if (!arguments.length) return baseLayer.source(); - - baseLayer.source(d); - dispatch.change(); - updateImagery(); - return background; + if (sidebar) { + context.ui().sidebar.hide(); + } }; - background.bing = function() { - background.baseLayerSource(findSource('Bing')); + mode.sidebar = function(_) { + if (!arguments.length) return sidebar; + sidebar = _; + return mode; }; - background.hasGpxLayer = function() { - return !_.isEmpty(gpxLayer.geojson()); + return mode; +}; +iD.modes.DragNode = function(context) { + var mode = { + id: 'drag-node', + button: 'browse' }; - background.showsGpxLayer = function() { - return background.hasGpxLayer() && gpxLayer.enable(); - }; + var nudgeInterval, + activeIDs, + wasMidpoint, + cancelled, + selectedIDs = [], + hover = iD.behavior.Hover(context) + .altDisables(true) + .on('hover', context.ui().sidebar.hover), + edit = iD.behavior.Edit(context); - function toDom(x) { - return (new DOMParser()).parseFromString(x, 'text/xml'); + function edge(point, size) { + var pad = [30, 100, 30, 100]; + if (point[0] > size[0] - pad[0]) return [-10, 0]; + else if (point[0] < pad[2]) return [10, 0]; + else if (point[1] > size[1] - pad[1]) return [0, -10]; + else if (point[1] < pad[3]) return [0, 10]; + return null; } - background.gpxLayerFiles = function(fileList) { - var f = fileList[0], - reader = new FileReader(); + function startNudge(nudge) { + if (nudgeInterval) window.clearInterval(nudgeInterval); + nudgeInterval = window.setInterval(function() { + context.pan(nudge); + }, 50); + } - reader.onload = function(e) { - gpxLayer.geojson(toGeoJSON.gpx(toDom(e.target.result))); - dispatch.change(); - }; + function stopNudge() { + if (nudgeInterval) window.clearInterval(nudgeInterval); + nudgeInterval = null; + } - reader.readAsText(f); - }; - - background.zoomToGpxLayer = function() { - if (background.hasGpxLayer()) { - context.map() - .extent(d3.geo.bounds(gpxLayer.geojson())); - } - }; - - background.toggleGpxLayer = function() { - gpxLayer.enable(!gpxLayer.enable()); - dispatch.change(); - }; - - background.showsLayer = function(d) { - return d === baseLayer.source() || - (d.id === 'custom' && baseLayer.source().id === 'custom') || - overlayLayers.some(function(l) { return l.source() === d; }); - }; + function moveAnnotation(entity) { + return t('operations.move.annotation.' + entity.geometry(context.graph())); + } - background.overlayLayerSources = function() { - return overlayLayers.map(function (l) { return l.source(); }); - }; + function connectAnnotation(entity) { + return t('operations.connect.annotation.' + entity.geometry(context.graph())); + } - background.toggleOverlayLayer = function(d) { - var layer; + function origin(entity) { + return context.projection(entity.loc); + } - for (var i = 0; i < overlayLayers.length; i++) { - layer = overlayLayers[i]; - if (layer.source() === d) { - overlayLayers.splice(i, 1); - dispatch.change(); - updateImagery(); - return; - } - } + function start(entity) { + cancelled = d3.event.sourceEvent.shiftKey || + context.features().hasHiddenConnections(entity, context.graph()); - layer = iD.TileLayer() - .source(d) - .projection(context.projection) - .dimensions(baseLayer.dimensions()); + if (cancelled) return behavior.cancel(); - overlayLayers.push(layer); - dispatch.change(); - updateImagery(); - }; + wasMidpoint = entity.type === 'midpoint'; + if (wasMidpoint) { + var midpoint = entity; + entity = iD.Node(); + context.perform(iD.actions.AddMidpoint(midpoint, entity)); - background.nudge = function(d, zoom) { - baseLayer.source().nudge(d, zoom); - dispatch.change(); - return background; - }; + var vertex = context.surface() + .selectAll('.' + entity.id); + behavior.target(vertex.node(), entity); - background.offset = function(d) { - if (!arguments.length) return baseLayer.source().offset(); - baseLayer.source().offset(d); - dispatch.change(); - return background; - }; + } else { + context.perform( + iD.actions.Noop()); + } - var q = iD.util.stringQs(location.hash.substring(1)), - chosen = q.background || q.layer; + activeIDs = _.pluck(context.graph().parentWays(entity), 'id'); + activeIDs.push(entity.id); - if (chosen && chosen.indexOf('custom:') === 0) { - background.baseLayerSource(iD.BackgroundSource.Custom(chosen.replace(/^custom:/, ''))); - } else { - background.baseLayerSource(findSource(chosen) || findSource('Bing')); + context.enter(mode); } - var locator = _.find(backgroundSources, function(d) { - return d.overlay && d.default; - }); + function datum() { + if (d3.event.sourceEvent.altKey) { + return {}; + } - if (locator) { - background.toggleOverlayLayer(locator); + return d3.event.sourceEvent.target.__data__ || {}; } - var overlays = (q.overlays || '').split(','); - overlays.forEach(function(overlay) { - overlay = findSource(overlay); - if (overlay) background.toggleOverlayLayer(overlay); - }); - - var gpx = q.gpx; - if (gpx) { - d3.text(gpx, function(err, gpxTxt) { - gpxLayer.geojson(toGeoJSON.gpx(toDom(gpxTxt))); - dispatch.change(); - }); + // via https://gist.github.com/shawnbot/4166283 + function childOf(p, c) { + if (p === c) return false; + while (c && c !== p) c = c.parentNode; + return c === p; } - return d3.rebind(background, dispatch, 'on'); -}; -iD.BackgroundSource = function(data) { - var source = _.clone(data), - offset = [0, 0], - name = source.name; - - source.scaleExtent = data.scaleExtent || [0, 20]; - - source.offset = function(_) { - if (!arguments.length) return offset; - offset = _; - return source; - }; + function move(entity) { + if (cancelled) return; + d3.event.sourceEvent.stopPropagation(); - source.nudge = function(_, zoomlevel) { - offset[0] += _[0] / Math.pow(2, zoomlevel); - offset[1] += _[1] / Math.pow(2, zoomlevel); - return source; - }; + var nudge = childOf(context.container().node(), + d3.event.sourceEvent.toElement) && + edge(d3.event.point, context.map().dimensions()); - source.name = function() { - return name; - }; + if (nudge) startNudge(nudge); + else stopNudge(); - source.imageryUsed = function() { - return source.id || name; - }; + var loc = context.map().mouseCoordinates(); - source.url = function(coord) { - return data.template - .replace('{x}', coord[0]) - .replace('{y}', coord[1]) - // TMS-flipped y coordinate - .replace(/\{[t-]y\}/, Math.pow(2, coord[2]) - coord[1] - 1) - .replace(/\{z(oom)?\}/, coord[2]) - .replace(/\{switch:([^}]+)\}/, function(s, r) { - var subdomains = r.split(','); - return subdomains[(coord[0] + coord[1]) % subdomains.length]; - }); - }; + var d = datum(); + if (d.type === 'node' && d.id !== entity.id) { + loc = d.loc; + } else if (d.type === 'way' && !d3.select(d3.event.sourceEvent.target).classed('fill')) { + loc = iD.geo.chooseEdge(context.childNodes(d), context.mouse(), context.projection).loc; + } - source.intersects = function(extent) { - extent = extent.polygon(); - return !data.polygon || data.polygon.some(function(polygon) { - return iD.geo.polygonIntersectsPolygon(polygon, extent); - }); - }; + context.replace( + iD.actions.MoveNode(entity.id, loc), + moveAnnotation(entity)); + } - source.validZoom = function(z) { - return source.scaleExtent[0] <= z && - (!source.isLocatorOverlay() || source.scaleExtent[1] > z); - }; + function end(entity) { + if (cancelled) return; - source.isLocatorOverlay = function() { - return name === 'Locator Overlay'; - }; + var d = datum(); - source.copyrightNotices = function() {}; + if (d.type === 'way') { + var choice = iD.geo.chooseEdge(context.childNodes(d), context.mouse(), context.projection); + context.replace( + iD.actions.AddMidpoint({ loc: choice.loc, edge: [d.nodes[choice.index - 1], d.nodes[choice.index]] }, entity), + connectAnnotation(d)); - return source; -}; + } else if (d.type === 'node' && d.id !== entity.id) { + context.replace( + iD.actions.Connect([d.id, entity.id]), + connectAnnotation(d)); -iD.BackgroundSource.Bing = function(data, dispatch) { - // http://msdn.microsoft.com/en-us/library/ff701716.aspx - // http://msdn.microsoft.com/en-us/library/ff701701.aspx + } else if (wasMidpoint) { + context.replace( + iD.actions.Noop(), + t('operations.add.annotation.vertex')); - var bing = iD.BackgroundSource(data), - key = 'Arzdiw4nlOJzRwOz__qailc8NiR31Tt51dN2D7cm57NrnceZnCpgOkmJhNpGoppU', // Same as P2 and JOSM - url = 'https://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial?include=ImageryProviders&key=' + - key + '&jsonp={callback}', - providers = []; + } else { + context.replace( + iD.actions.Noop(), + moveAnnotation(entity)); + } - d3.jsonp(url, function(json) { - providers = json.resourceSets[0].resources[0].imageryProviders.map(function(provider) { - return { - attribution: provider.attribution, - areas: provider.coverageAreas.map(function(area) { - return { - zoom: [area.zoomMin, area.zoomMax], - extent: iD.geo.Extent([area.bbox[1], area.bbox[0]], [area.bbox[3], area.bbox[2]]) - }; - }) - }; + var reselection = selectedIDs.filter(function(id) { + return context.graph().hasEntity(id); }); - dispatch.change(); - }); - - var template = 'https://ecn.t{t}.tiles.virtualearth.net/tiles/a{u}.jpeg?g=587&mkt=en-gb&n=z', - subdomains = [0, 1, 2, 3]; - bing.url = function(coord) { - var u = ''; - - for (var zoom = coord[2]; zoom > 0; zoom--) { - var b = 0; - var mask = 1 << (zoom - 1); - if ((coord[0] & mask) !== 0) b++; - if ((coord[1] & mask) !== 0) b += 2; - u += b.toString(); + if (reselection.length) { + context.enter( + iD.modes.Select(context, reselection) + .suppressMenu(true)); + } else { + context.enter(iD.modes.Browse(context)); } + } - return template - .replace('{t}', subdomains[(coord[0] + coord[1]) % 4]) - .replace('{u}', u); - }; + function cancel() { + behavior.cancel(); + context.enter(iD.modes.Browse(context)); + } - bing.copyrightNotices = function(zoom, extent) { - zoom = Math.min(zoom, 21); - return providers.filter(function(provider) { - return _.any(provider.areas, function(area) { - return extent.intersects(area.extent) && - area.zoom[0] <= zoom && - area.zoom[1] >= zoom; - }); - }).map(function(provider) { - return provider.attribution; - }).join(', '); - }; + function setActiveElements() { + context.surface().selectAll(iD.util.entitySelector(activeIDs)) + .classed('active', true); + } - bing.logo = 'bing_maps.png'; - bing.terms_url = 'http://opengeodata.org/microsoft-imagery-details'; + var behavior = iD.behavior.drag() + .delegate('g.node, g.point, g.midpoint') + .surface(context.surface().node()) + .origin(origin) + .on('start', start) + .on('move', move) + .on('end', end); - return bing; -}; + mode.enter = function() { + context.install(hover); + context.install(edit); -iD.BackgroundSource.None = function() { - var source = iD.BackgroundSource({id: 'none', template: ''}); + context.history() + .on('undone.drag-node', cancel); - source.name = function() { - return t('background.none'); - }; + context.map() + .on('drawn.drag-node', setActiveElements); - source.imageryUsed = function() { - return 'None'; + setActiveElements(); }; - return source; -}; - -iD.BackgroundSource.Custom = function(template) { - var source = iD.BackgroundSource({id: 'custom', template: template}); + mode.exit = function() { + context.ui().sidebar.hover.cancel(); + context.uninstall(hover); + context.uninstall(edit); - source.name = function() { - return t('background.custom'); - }; + context.history() + .on('undone.drag-node', null); - source.imageryUsed = function() { - return 'Custom (' + template + ')'; - }; + context.map() + .on('drawn.drag-node', null); - return source; -}; -iD.GpxLayer = function(context) { - var projection, - gj = {}, - enable = true, - svg; + context.surface() + .selectAll('.active') + .classed('active', false); - function render(selection) { - svg = selection.selectAll('svg') - .data([render]); + stopNudge(); + }; - svg.enter() - .append('svg'); + mode.selectedIDs = function(_) { + if (!arguments.length) return selectedIDs; + selectedIDs = _; + return mode; + }; - svg.style('display', enable ? 'block' : 'none'); + mode.behavior = behavior; - var paths = svg - .selectAll('path') - .data([gj]); + return mode; +}; +iD.modes.DrawArea = function(context, wayId, baseGraph) { + var mode = { + button: 'area', + id: 'draw-area' + }; - paths - .enter() - .append('path') - .attr('class', 'gpx'); + var behavior; - var path = d3.geo.path() - .projection(projection); + mode.enter = function() { + var way = context.entity(wayId), + headId = way.nodes[way.nodes.length - 2], + tailId = way.first(); - paths - .attr('d', path); + behavior = iD.behavior.DrawWay(context, wayId, -1, mode, baseGraph) + .tail(t('modes.draw_area.tail')); - if (typeof gj.features !== 'undefined') { - svg - .selectAll('text') - .remove(); + var addNode = behavior.addNode; - svg - .selectAll('path') - .data(gj.features) - .enter() - .append('text') - .attr('class', 'gpx') - .text(function(d) { - return d.properties.name; - }) - .attr('x', function(d) { - var centroid = path.centroid(d); - return centroid[0] + 5; - }) - .attr('y', function(d) { - var centroid = path.centroid(d); - return centroid[1]; - }); - } - } + behavior.addNode = function(node) { + if (node.id === headId || node.id === tailId) { + behavior.finish(); + } else { + addNode(node); + } + }; - render.projection = function(_) { - if (!arguments.length) return projection; - projection = _; - return render; + context.install(behavior); }; - render.enable = function(_) { - if (!arguments.length) return enable; - enable = _; - return render; + mode.exit = function() { + context.uninstall(behavior); }; - render.geojson = function(_) { - if (!arguments.length) return gj; - gj = _; - return render; + mode.selectedIDs = function() { + return [wayId]; }; - render.dimensions = function(_) { - if (!arguments.length) return svg.dimensions(); - svg.dimensions(_); - return render; + return mode; +}; +iD.modes.DrawLine = function(context, wayId, baseGraph, affix) { + var mode = { + button: 'line', + id: 'draw-line' }; - render.id = 'layer-gpx'; + var behavior; - function over() { - d3.event.stopPropagation(); - d3.event.preventDefault(); - d3.event.dataTransfer.dropEffect = 'copy'; - } + mode.enter = function() { + var way = context.entity(wayId), + index = (affix === 'prefix') ? 0 : undefined, + headId = (affix === 'prefix') ? way.first() : way.last(); - d3.select('body') - .attr('dropzone', 'copy') - .on('drop.localgpx', function() { - d3.event.stopPropagation(); - d3.event.preventDefault(); - if (!iD.detect().filedrop) return; - context.background().gpxLayerFiles(d3.event.dataTransfer.files); - }) - .on('dragenter.localgpx', over) - .on('dragexit.localgpx', over) - .on('dragover.localgpx', over); + behavior = iD.behavior.DrawWay(context, wayId, index, mode, baseGraph) + .tail(t('modes.draw_line.tail')); - return render; -}; -iD.Map = function(context) { - var dimensions = [1, 1], - dispatch = d3.dispatch('move', 'drawn'), - projection = context.projection, - roundedProjection = iD.svg.RoundProjection(projection), - zoom = d3.behavior.zoom() - .translate(projection.translate()) - .scale(projection.scale() * 2 * Math.PI) - .scaleExtent([1024, 256 * Math.pow(2, 24)]) - .on('zoom', zoomPan), - dblclickEnabled = true, - transformStart, - transformed = false, - minzoom = 0, - points = iD.svg.Points(roundedProjection, context), - vertices = iD.svg.Vertices(roundedProjection, context), - lines = iD.svg.Lines(projection), - areas = iD.svg.Areas(projection), - midpoints = iD.svg.Midpoints(roundedProjection, context), - labels = iD.svg.Labels(projection, context), - supersurface, surface, - mouse, - mousemove; + var addNode = behavior.addNode; - function map(selection) { - context.history() - .on('change.map', redraw); - context.background() - .on('change.map', redraw); + behavior.addNode = function(node) { + if (node.id === headId) { + behavior.finish(); + } else { + addNode(node); + } + }; - selection.call(zoom); + context.install(behavior); + }; - supersurface = selection.append('div') - .attr('id', 'supersurface'); + mode.exit = function() { + context.uninstall(behavior); + }; - supersurface.call(context.background()); + mode.selectedIDs = function() { + return [wayId]; + }; - // Need a wrapper div because Opera can't cope with an absolutely positioned - // SVG element: http://bl.ocks.org/jfirebaugh/6fbfbd922552bf776c16 - var dataLayer = supersurface.append('div') - .attr('class', 'layer-layer layer-data'); + return mode; +}; +iD.modes.Move = function(context, entityIDs, baseGraph) { + var mode = { + id: 'move', + button: 'browse' + }; - map.surface = surface = dataLayer.append('svg') - .on('mousedown.zoom', function() { - if (d3.event.button === 2) { - d3.event.stopPropagation(); - } - }, true) - .on('mouseup.zoom', function() { - if (resetTransform()) redraw(); - }) - .attr('id', 'surface') - .call(iD.svg.Surface(context)); + var keybinding = d3.keybinding('move'), + edit = iD.behavior.Edit(context), + annotation = entityIDs.length === 1 ? + t('operations.move.annotation.' + context.geometry(entityIDs[0])) : + t('operations.move.annotation.multiple'), + cache, + origin, + nudgeInterval; - surface.on('mousemove.map', function() { - mousemove = d3.event; - }); + function vecSub(a, b) { return [a[0] - b[0], a[1] - b[1]]; } - surface.on('mouseover.vertices', function() { - if (map.editable() && !transformed) { - var hover = d3.event.target.__data__; - surface.call(vertices.drawHover, context.graph(), hover, map.extent(), map.zoom()); - dispatch.drawn({full: false}); - } - }); + function edge(point, size) { + var pad = [30, 100, 30, 100]; + if (point[0] > size[0] - pad[0]) return [-10, 0]; + else if (point[0] < pad[2]) return [10, 0]; + else if (point[1] > size[1] - pad[1]) return [0, -10]; + else if (point[1] < pad[3]) return [0, 10]; + return null; + } - surface.on('mouseout.vertices', function() { - if (map.editable() && !transformed) { - var hover = d3.event.relatedTarget && d3.event.relatedTarget.__data__; - surface.call(vertices.drawHover, context.graph(), hover, map.extent(), map.zoom()); - dispatch.drawn({full: false}); - } - }); + function startNudge(nudge) { + if (nudgeInterval) window.clearInterval(nudgeInterval); + nudgeInterval = window.setInterval(function() { + context.pan(nudge); - context.on('enter.map', function() { - if (map.editable() && !transformed) { - var all = context.intersects(map.extent()), - filter = d3.functor(true), - extent = map.extent(), - graph = context.graph(); - surface.call(vertices, graph, all, filter, extent, map.zoom()); - surface.call(midpoints, graph, all, filter, extent); - dispatch.drawn({full: false}); - } - }); + var currMouse = context.mouse(), + origMouse = context.projection(origin), + delta = vecSub(vecSub(currMouse, origMouse), nudge), + action = iD.actions.Move(entityIDs, delta, context.projection, cache); - map.dimensions(selection.dimensions()); + context.overwrite(action, annotation); - labels.supersurface(supersurface); + }, 50); } - function pxCenter() { return [dimensions[0] / 2, dimensions[1] / 2]; } - - function drawVector(difference, extent) { - var filter, all, - graph = context.graph(); + function stopNudge() { + if (nudgeInterval) window.clearInterval(nudgeInterval); + nudgeInterval = null; + } - if (difference) { - var complete = difference.complete(map.extent()); - all = _.compact(_.values(complete)); - filter = function(d) { - if (d.type === 'midpoint') { - - var a = d.edge[0], - b = d.edge[1]; - - // redraw a midpoint if it needs to be - // - moved (either edge node moved) - // - deleted (edge nodes not consecutive in any parent way) - if (a in complete || b in complete) return true; - - var parentsWays = graph.parentWays({ id: a }); - for (var i = 0; i < parentsWays.length; i++) { - var nodes = parentsWays[i].nodes; - for (var n = 0; n < nodes.length; n++) { - if (nodes[n] === a && (nodes[n - 1] === b || nodes[n + 1] === b)) return false; - } - } - return true; + function move() { + var currMouse = context.mouse(), + origMouse = context.projection(origin), + delta = vecSub(currMouse, origMouse), + action = iD.actions.Move(entityIDs, delta, context.projection, cache); - } else { - return d.id in complete; - } - }; + context.overwrite(action, annotation); - } else if (extent) { - all = context.intersects(map.extent().intersection(extent)); - var set = d3.set(_.pluck(all, 'id')); - filter = function(d) { return set.has(d.id); }; + var nudge = edge(currMouse, context.map().dimensions()); + if (nudge) startNudge(nudge); + else stopNudge(); + } - } else { - all = context.intersects(map.extent()); - filter = d3.functor(true); - } + function finish() { + d3.event.stopPropagation(); + context.enter(iD.modes.Select(context, entityIDs).suppressMenu(true)); + stopNudge(); + } - surface - .call(vertices, graph, all, filter, map.extent(), map.zoom()) - .call(lines, graph, all, filter) - .call(areas, graph, all, filter) - .call(midpoints, graph, all, filter, map.extent()) - .call(labels, graph, all, filter, dimensions, !difference && !extent); - - if (points.points(context.intersects(map.extent()), 100).length >= 100) { - surface.select('.layer-hit').selectAll('g.point').remove(); + function cancel() { + if (baseGraph) { + while (context.graph() !== baseGraph) context.pop(); + context.enter(iD.modes.Browse(context)); } else { - surface.call(points, points.points(all), filter); + context.pop(); + context.enter(iD.modes.Select(context, entityIDs).suppressMenu(true)); } - - dispatch.drawn({full: true}); + stopNudge(); } - function editOff() { - surface.selectAll('.layer *').remove(); - dispatch.drawn({full: true}); + function undone() { + context.enter(iD.modes.Browse(context)); } - function zoomPan() { - if (d3.event && d3.event.sourceEvent.type === 'dblclick') { - if (!dblclickEnabled) { - zoom.scale(projection.scale() * 2 * Math.PI) - .translate(projection.translate()); - return d3.event.sourceEvent.preventDefault(); - } - } + mode.enter = function() { + origin = context.map().mouseCoordinates(); + cache = {}; - if (Math.log(d3.event.scale / Math.LN2 - 8) < minzoom + 1) { - iD.ui.flash(context.container()) - .select('.content') - .text(t('cannot_zoom')); - return setZoom(16, true); - } + context.install(edit); - projection - .translate(d3.event.translate) - .scale(d3.event.scale / (2 * Math.PI)); + context.perform( + iD.actions.Noop(), + annotation); - var scale = d3.event.scale / transformStart[0], - tX = Math.round((d3.event.translate[0] / scale - transformStart[1][0]) * scale), - tY = Math.round((d3.event.translate[1] / scale - transformStart[1][1]) * scale); + context.surface() + .on('mousemove.move', move) + .on('click.move', finish); - transformed = true; - iD.util.setTransform(supersurface, tX, tY, scale); - queueRedraw(); + context.history() + .on('undone.move', undone); - dispatch.move(map); - } + keybinding + .on('⎋', cancel) + .on('↩', finish); - function resetTransform() { - if (!transformed) return false; - iD.util.setTransform(supersurface, 0, 0); - transformed = false; - return true; - } + d3.select(document) + .call(keybinding); + }; - function redraw(difference, extent) { + mode.exit = function() { + stopNudge(); + + context.uninstall(edit); - if (!surface) return; + context.surface() + .on('mousemove.move', null) + .on('click.move', null); - clearTimeout(timeoutId); + context.history() + .on('undone.move', null); - // If we are in the middle of a zoom/pan, we can't do differenced redraws. - // It would result in artifacts where differenced entities are redrawn with - // one transform and unchanged entities with another. - if (resetTransform()) { - difference = extent = undefined; + keybinding.off(); + }; + + return mode; +}; +iD.modes.RotateWay = function(context, wayId) { + var mode = { + id: 'rotate-way', + button: 'browse' + }; + + var keybinding = d3.keybinding('rotate-way'), + edit = iD.behavior.Edit(context); + + mode.enter = function() { + context.install(edit); + + var annotation = t('operations.rotate.annotation.' + context.geometry(wayId)), + way = context.graph().entity(wayId), + nodes = _.uniq(context.graph().childNodes(way)), + points = nodes.map(function(n) { return context.projection(n.loc); }), + pivot = d3.geom.polygon(points).centroid(), + angle; + + context.perform( + iD.actions.Noop(), + annotation); + + function rotate() { + + var mousePoint = context.mouse(), + newAngle = Math.atan2(mousePoint[1] - pivot[1], mousePoint[0] - pivot[0]); + + if (typeof angle === 'undefined') angle = newAngle; + + context.replace( + iD.actions.RotateWay(wayId, pivot, newAngle - angle, context.projection), + annotation); + + angle = newAngle; } - var zoom = String(~~map.zoom()); - if (surface.attr('data-zoom') !== zoom) { - surface.attr('data-zoom', zoom) - .classed('low-zoom', zoom <= 16); + function finish() { + d3.event.stopPropagation(); + context.enter(iD.modes.Select(context, [wayId]) + .suppressMenu(true)); } - if (!difference) { - supersurface.call(context.background()); + function cancel() { + context.pop(); + context.enter(iD.modes.Select(context, [wayId]) + .suppressMenu(true)); } - if (map.editable()) { - context.connection().loadTiles(projection, dimensions); - drawVector(difference, extent); - } else { - editOff(); + function undone() { + context.enter(iD.modes.Browse(context)); } - transformStart = [ - projection.scale() * 2 * Math.PI, - projection.translate().slice()]; + context.surface() + .on('mousemove.rotate-way', rotate) + .on('click.rotate-way', finish); - return map; - } + context.history() + .on('undone.rotate-way', undone); - var timeoutId; - function queueRedraw() { - clearTimeout(timeoutId); - timeoutId = setTimeout(function() { redraw(); }, 300); - } + keybinding + .on('⎋', cancel) + .on('↩', finish); - function pointLocation(p) { - var translate = projection.translate(), - scale = projection.scale() * 2 * Math.PI; - return [(p[0] - translate[0]) / scale, (p[1] - translate[1]) / scale]; - } + d3.select(document) + .call(keybinding); + }; - function locationPoint(l) { - var translate = projection.translate(), - scale = projection.scale() * 2 * Math.PI; - return [l[0] * scale + translate[0], l[1] * scale + translate[1]]; - } + mode.exit = function() { + context.uninstall(edit); - map.mouse = function() { - var e = mousemove || d3.event, s; - while ((s = e.sourceEvent)) e = s; - return mouse(e); - }; + context.surface() + .on('mousemove.rotate-way', null) + .on('click.rotate-way', null); - map.mouseCoordinates = function() { - return projection.invert(map.mouse()); - }; + context.history() + .on('undone.rotate-way', null); - map.dblclickEnable = function(_) { - if (!arguments.length) return dblclickEnabled; - dblclickEnabled = _; - return map; + keybinding.off(); }; - function setZoom(_, force) { - if (_ === map.zoom() && !force) - return false; - var scale = 256 * Math.pow(2, _), - center = pxCenter(), - l = pointLocation(center); - scale = Math.max(1024, Math.min(256 * Math.pow(2, 24), scale)); - projection.scale(scale / (2 * Math.PI)); - zoom.scale(scale); - var t = projection.translate(); - l = locationPoint(l); - t[0] += center[0] - l[0]; - t[1] += center[1] - l[1]; - projection.translate(t); - zoom.translate(projection.translate()); - return true; - } + return mode; +}; +iD.modes.Save = function(context) { + var ui = iD.ui.Commit(context) + .on('cancel', cancel) + .on('save', save); - function setCenter(_) { - var c = map.center(); - if (_[0] === c[0] && _[1] === c[1]) - return false; - var t = projection.translate(), - pxC = pxCenter(), - ll = projection(_); - projection.translate([ - t[0] - ll[0] + pxC[0], - t[1] - ll[1] + pxC[1]]); - zoom.translate(projection.translate()); - return true; + function cancel() { + context.enter(iD.modes.Browse(context)); } - map.pan = function(d) { - var t = projection.translate(); - t[0] += d[0]; - t[1] += d[1]; - projection.translate(t); - zoom.translate(projection.translate()); - dispatch.move(map); - return redraw(); - }; + function save(e, tryAgain) { + function withChildNodes(ids, graph) { + return _.uniq(_.reduce(ids, function(result, id) { + var e = graph.entity(id); + if (e.type === 'way') { + try { + var cn = graph.childNodes(e); + result.push.apply(result, _.pluck(_.filter(cn, 'version'), 'id')); + } catch(err) { + /* eslint-disable no-console */ + if (typeof console !== 'undefined') console.error(err); + /* eslint-enable no-console */ + } + } + return result; + }, _.clone(ids))); + } + + var loading = iD.ui.Loading(context).message(t('save.uploading')).blocking(true), + history = context.history(), + origChanges = history.changes(iD.actions.DiscardTags(history.difference())), + localGraph = context.graph(), + remoteGraph = iD.Graph(history.base(), true), + modified = _.filter(history.difference().summary(), {changeType: 'modified'}), + toCheck = _.pluck(_.pluck(modified, 'entity'), 'id'), + toLoad = withChildNodes(toCheck, localGraph), + conflicts = [], + errors = []; + + if (!tryAgain) history.perform(iD.actions.Noop()); // checkpoint + context.container().call(loading); + + if (toCheck.length) { + context.connection().loadMultiple(toLoad, loaded); + } else { + finalize(); + } - map.dimensions = function(_) { - if (!arguments.length) return dimensions; - var center = map.center(); - dimensions = _; - surface.dimensions(dimensions); - context.background().dimensions(dimensions); - projection.clipExtent([[0, 0], dimensions]); - mouse = iD.util.fastMouse(supersurface.node()); - setCenter(center); - return redraw(); - }; - map.zoomIn = function() { return map.zoom(Math.ceil(map.zoom() + 1)); }; - map.zoomOut = function() { return map.zoom(Math.floor(map.zoom() - 1)); }; + // Reload modified entities into an alternate graph and check for conflicts.. + function loaded(err, result) { + if (errors.length) return; - map.center = function(loc) { - if (!arguments.length) { - return projection.invert(pxCenter()); - } + if (err) { + errors.push({ + msg: err.responseText, + details: [ t('save.status_code', { code: err.status }) ] + }); + showErrors(); - if (setCenter(loc)) { - dispatch.move(map); - } + } else { + var loadMore = []; + _.each(result.data, function(entity) { + remoteGraph.replace(entity); + toLoad = _.without(toLoad, entity.id); + + // Because loadMultiple doesn't download /full like loadEntity, + // need to also load children that aren't already being checked.. + if (!entity.visible) return; + if (entity.type === 'way') { + loadMore.push.apply(loadMore, + _.difference(entity.nodes, toCheck, toLoad, loadMore)); + } else if (entity.type === 'relation' && entity.isMultipolygon()) { + loadMore.push.apply(loadMore, + _.difference(_.pluck(entity.members, 'id'), toCheck, toLoad, loadMore)); + } + }); - return redraw(); - }; + if (loadMore.length) { + toLoad.push.apply(toLoad, loadMore); + context.connection().loadMultiple(loadMore, loaded); + } - map.zoom = function(z) { - if (!arguments.length) { - return Math.max(Math.log(projection.scale() * 2 * Math.PI) / Math.LN2 - 8, 0); + if (!toLoad.length) { + checkConflicts(); + } + } } - if (setZoom(z)) { - dispatch.move(map); - } - return redraw(); - }; + function checkConflicts() { + function choice(id, text, action) { + return { id: id, text: text, action: function() { history.replace(action); } }; + } + function formatUser(d) { + return '' + d + ''; + } + function entityName(entity) { + return iD.util.displayName(entity) || (iD.util.displayType(entity.id) + ' ' + entity.id); + } - map.zoomTo = function(entity, zoomLimits) { - var extent = entity.extent(context.graph()), - zoom = map.extentZoom(extent); - zoomLimits = zoomLimits || [16, 20]; - map.centerZoom(extent.center(), Math.min(Math.max(zoom, zoomLimits[0]), zoomLimits[1])); - }; + function compareVersions(local, remote) { + if (local.version !== remote.version) return false; - map.centerZoom = function(loc, z) { - var centered = setCenter(loc), - zoomed = setZoom(z); + if (local.type === 'way') { + var children = _.union(local.nodes, remote.nodes); - if (centered || zoomed) { - dispatch.move(map); - } + for (var i = 0; i < children.length; i++) { + var a = localGraph.hasEntity(children[i]), + b = remoteGraph.hasEntity(children[i]); - return redraw(); - }; + if (a && b && a.version !== b.version) return false; + } + } - map.centerEase = function(loc) { - var from = map.center().slice(), - t = 0, - stop; + return true; + } - surface.one('mousedown.ease', function() { - stop = true; - }); + _.each(toCheck, function(id) { + var local = localGraph.entity(id), + remote = remoteGraph.entity(id); - d3.timer(function() { - if (stop) return true; - map.center(iD.geo.interp(from, loc, (t += 1) / 10)); - return t === 10; - }, 20); - return map; - }; + if (compareVersions(local, remote)) return; - map.extent = function(_) { - if (!arguments.length) { - return new iD.geo.Extent(projection.invert([0, dimensions[1]]), - projection.invert([dimensions[0], 0])); - } else { - var extent = iD.geo.Extent(_); - map.centerZoom(extent.center(), map.extentZoom(extent)); - } - }; - - map.extentZoom = function(_) { - var extent = iD.geo.Extent(_), - tl = projection([extent[0][0], extent[1][1]]), - br = projection([extent[1][0], extent[0][1]]); - - // Calculate maximum zoom that fits extent - var hFactor = (br[0] - tl[0]) / dimensions[0], - vFactor = (br[1] - tl[1]) / dimensions[1], - hZoomDiff = Math.log(Math.abs(hFactor)) / Math.LN2, - vZoomDiff = Math.log(Math.abs(vFactor)) / Math.LN2, - newZoom = map.zoom() - Math.max(hZoomDiff, vZoomDiff); + var action = iD.actions.MergeRemoteChanges, + merge = action(id, localGraph, remoteGraph, formatUser); - return newZoom; - }; + history.replace(merge); - map.editable = function() { - return map.zoom() >= 16; - }; + var mergeConflicts = merge.conflicts(); + if (!mergeConflicts.length) return; // merged safely - map.minzoom = function(_) { - if (!arguments.length) return minzoom; - minzoom = _; - return map; - }; + var forceLocal = action(id, localGraph, remoteGraph).withOption('force_local'), + forceRemote = action(id, localGraph, remoteGraph).withOption('force_remote'), + keepMine = t('save.conflict.' + (remote.visible ? 'keep_local' : 'restore')), + keepTheirs = t('save.conflict.' + (remote.visible ? 'keep_remote' : 'delete')); - return d3.rebind(map, dispatch, 'on'); -}; -iD.TileLayer = function() { - var tileSize = 256, - tile = d3.geo.tile(), - projection, - cache = {}, - tileOrigin, - z, - transformProp = iD.util.prefixCSSProperty('Transform'), - source = d3.functor(''); + conflicts.push({ + id: id, + name: entityName(local), + details: mergeConflicts, + chosen: 1, + choices: [ + choice(id, keepMine, forceLocal), + choice(id, keepTheirs, forceRemote) + ] + }); + }); - function tileSizeAtZoom(d, z) { - return Math.ceil(tileSize * Math.pow(2, z - d[2])) / tileSize; - } + finalize(); + } - function atZoom(t, distance) { - var power = Math.pow(2, distance); - return [ - Math.floor(t[0] * power), - Math.floor(t[1] * power), - t[2] + distance]; - } - function lookUp(d) { - for (var up = -1; up > -d[2]; up--) { - var tile = atZoom(d, up); - if (cache[source.url(tile)] !== false) { - return tile; + function finalize() { + if (conflicts.length) { + conflicts.sort(function(a,b) { return b.id.localeCompare(a.id); }); + showConflicts(); + } else if (errors.length) { + showErrors(); + } else { + var changes = history.changes(iD.actions.DiscardTags(history.difference())); + if (changes.modified.length || changes.created.length || changes.deleted.length) { + context.connection().putChangeset( + changes, + e.comment, + history.imageryUsed(), + function(err, changeset_id) { + if (err) { + errors.push({ + msg: err.responseText, + details: [ t('save.status_code', { code: err.status }) ] + }); + showErrors(); + } else { + history.clearSaved(); + success(e, changeset_id); + // Add delay to allow for postgres replication #1646 #2678 + window.setTimeout(function() { + loading.close(); + context.flush(); + }, 2500); + } + }); + } else { // changes were insignificant or reverted by user + loading.close(); + context.flush(); + cancel(); + } } } - } - function uniqueBy(a, n) { - var o = [], seen = {}; - for (var i = 0; i < a.length; i++) { - if (seen[a[i][n]] === undefined) { - o.push(a[i]); - seen[a[i][n]] = true; - } - } - return o; - } - function addSource(d) { - d.push(source.url(d)); - return d; - } + function showConflicts() { + var selection = context.container() + .select('#sidebar') + .append('div') + .attr('class','sidebar-component'); - // Update tiles based on current state of `projection`. - function background(selection) { - tile.scale(projection.scale() * 2 * Math.PI) - .translate(projection.translate()); + loading.close(); - tileOrigin = [ - projection.scale() * Math.PI - projection.translate()[0], - projection.scale() * Math.PI - projection.translate()[1]]; + selection.call(iD.ui.Conflicts(context) + .list(conflicts) + .on('download', function() { + var data = JXON.stringify(context.connection().osmChangeJXON('CHANGEME', origChanges)), + win = window.open('data:text/xml,' + encodeURIComponent(data), '_blank'); + win.focus(); + }) + .on('cancel', function() { + history.pop(); + selection.remove(); + }) + .on('save', function() { + for (var i = 0; i < conflicts.length; i++) { + if (conflicts[i].chosen === 1) { // user chose "keep theirs" + var entity = context.hasEntity(conflicts[i].id); + if (entity && entity.type === 'way') { + var children = _.uniq(entity.nodes); + for (var j = 0; j < children.length; j++) { + history.replace(iD.actions.Revert(children[j])); + } + } + history.replace(iD.actions.Revert(conflicts[i].id)); + } + } - z = Math.max(Math.log(projection.scale() * 2 * Math.PI) / Math.log(2) - 8, 0); + selection.remove(); + save(e, true); + }) + ); + } - render(selection); - } - // Derive the tiles onscreen, remove those offscreen and position them. - // Important that this part not depend on `projection` because it's - // rentered when tiles load/error (see #644). - function render(selection) { - var requests = []; + function showErrors() { + var selection = iD.ui.confirm(context.container()); - if (source.validZoom(z)) { - tile().forEach(function(d) { - addSource(d); - if (d[3] === '') return; - requests.push(d); - if (cache[d[3]] === false && lookUp(d)) { - requests.push(addSource(lookUp(d))); - } - }); + history.pop(); + loading.close(); - requests = uniqueBy(requests, 3).filter(function(r) { - // don't re-request tiles which have failed in the past - return cache[r[3]] !== false; - }); + selection + .select('.modal-section.header') + .append('h3') + .text(t('save.error')); + + addErrors(selection, errors); + selection.okButton(); } - var pixelOffset = [ - Math.round(source.offset()[0] * Math.pow(2, z)), - Math.round(source.offset()[1] * Math.pow(2, z)) - ]; - function load(d) { - cache[d[3]] = true; - d3.select(this) - .on('error', null) - .on('load', null) - .classed('tile-loaded', true); - render(selection); - } + function addErrors(selection, data) { + var message = selection + .select('.modal-section.message-text'); - function error(d) { - cache[d[3]] = false; - d3.select(this) - .on('error', null) - .on('load', null) - .remove(); - render(selection); - } + var items = message + .selectAll('.error-container') + .data(data); - function imageTransform(d) { - var _ts = tileSize * Math.pow(2, z - d[2]); - var scale = tileSizeAtZoom(d, z); - return 'translate(' + - (Math.round((d[0] * _ts) - tileOrigin[0]) + pixelOffset[0]) + 'px,' + - (Math.round((d[1] * _ts) - tileOrigin[1]) + pixelOffset[1]) + 'px)' + - 'scale(' + scale + ',' + scale + ')'; - } + var enter = items.enter() + .append('div') + .attr('class', 'error-container'); - var image = selection - .selectAll('img') - .data(requests, function(d) { return d[3]; }); + enter + .append('a') + .attr('class', 'error-description') + .attr('href', '#') + .classed('hide-toggle', true) + .text(function(d) { return d.msg || t('save.unknown_error_details'); }) + .on('click', function() { + var error = d3.select(this), + detail = d3.select(this.nextElementSibling), + exp = error.classed('expanded'); - image.exit() - .style(transformProp, imageTransform) - .classed('tile-removing', true) - .each(function() { - var tile = d3.select(this); - window.setTimeout(function() { - if (tile.classed('tile-removing')) { - tile.remove(); - } - }, 300); - }); + detail.style('display', exp ? 'none' : 'block'); + error.classed('expanded', !exp); - image.enter().append('img') - .attr('class', 'tile') - .attr('src', function(d) { return d[3]; }) - .on('error', error) - .on('load', load); + d3.event.preventDefault(); + }); + + var details = enter + .append('div') + .attr('class', 'error-detail-container') + .style('display', 'none'); + + details + .append('ul') + .attr('class', 'error-detail-list') + .selectAll('li') + .data(function(d) { return d.details || []; }) + .enter() + .append('li') + .attr('class', 'error-detail-item') + .text(function(d) { return d; }); + + items.exit() + .remove(); + } - image - .style(transformProp, imageTransform) - .classed('tile-removing', false); } - background.projection = function(_) { - if (!arguments.length) return projection; - projection = _; - return background; + + function success(e, changeset_id) { + context.enter(iD.modes.Browse(context) + .sidebar(iD.ui.Success(context) + .changeset({ + id: changeset_id, + comment: e.comment + }) + .on('cancel', function() { + context.ui().sidebar.hide(); + }))); + } + + var mode = { + id: 'save' }; - background.dimensions = function(_) { - if (!arguments.length) return tile.size(); - tile.size(_); - return background; + mode.enter = function() { + context.connection().authenticate(function(err) { + if (err) { + cancel(); + } else { + context.ui().sidebar.show(ui); + } + }); }; - background.source = function(_) { - if (!arguments.length) return source; - source = _; - cache = {}; - tile.scaleExtent(source.scaleExtent); - return background; + mode.exit = function() { + context.ui().sidebar.hide(); }; - return background; + return mode; }; -iD.svg = { - RoundProjection: function(projection) { - return function(d) { - return iD.geo.roundCoords(projection(d)); - }; - }, - - PointTransform: function(projection) { - return function(entity) { - // http://jsperf.com/short-array-join - var pt = projection(entity.loc); - return 'translate(' + pt[0] + ',' + pt[1] + ')'; - }; - }, +iD.modes.Select = function(context, selectedIDs) { + var mode = { + id: 'select', + button: 'browse' + }; - Round: function () { - return d3.geo.transform({ - point: function(x, y) { return this.stream.point(Math.floor(x), Math.floor(y)); } - }); - }, + var keybinding = d3.keybinding('select'), + timeout = null, + behaviors = [ + iD.behavior.Copy(context), + iD.behavior.Paste(context), + iD.behavior.Breathe(context), + iD.behavior.Hover(context), + iD.behavior.Select(context), + iD.behavior.Lasso(context), + iD.modes.DragNode(context) + .selectedIDs(selectedIDs) + .behavior], + inspector, + radialMenu, + newFeature = false, + suppressMenu = false; - Path: function(projection, graph, polygon) { - var cache = {}, - round = iD.svg.Round().stream, - clip = d3.geo.clipExtent().extent(projection.clipExtent()).stream, - project = projection.stream, - path = d3.geo.path() - .projection({stream: function(output) { return polygon ? project(round(output)) : project(clip(round(output))); }}); + var wrap = context.container() + .select('.inspector-wrap'); - return function(entity) { - if (entity.id in cache) { - return cache[entity.id]; - } else { - return cache[entity.id] = path(entity.asGeoJSON(graph)); // jshint ignore:line - } - }; - }, - OneWaySegments: function(projection, graph, dt) { - return function(entity) { - var a, - b, - i = 0, - offset = dt, - segments = [], - coordinates = graph.childNodes(entity).map(function(n) { - return n.loc; - }); - - if (entity.tags.oneway === '-1') coordinates.reverse(); + function singular() { + if (selectedIDs.length === 1) { + return context.hasEntity(selectedIDs[0]); + } + } - d3.geo.stream({ - type: 'LineString', - coordinates: coordinates - }, projection.stream({ - lineStart: function() {}, - lineEnd: function() { - a = null; - }, - point: function(x, y) { - b = [x, y]; + function closeMenu() { + if (radialMenu) { + context.surface().call(radialMenu.close); + } + } - if (a) { - var span = iD.geo.euclideanDistance(a, b) - offset; + function positionMenu() { + if (suppressMenu || !radialMenu) { return; } - if (span >= 0) { - var angle = Math.atan2(b[1] - a[1], b[0] - a[0]), - dx = dt * Math.cos(angle), - dy = dt * Math.sin(angle), - p = [a[0] + offset * Math.cos(angle), - a[1] + offset * Math.sin(angle)]; + var entity = singular(); + if (entity && context.geometry(entity.id) === 'relation') { + suppressMenu = true; + } else if (entity && entity.type === 'node') { + radialMenu.center(context.projection(entity.loc)); + } else { + var point = context.mouse(), + viewport = iD.geo.Extent(context.projection.clipExtent()).polygon(); + if (iD.geo.pointInPolygon(point, viewport)) { + radialMenu.center(point); + } else { + suppressMenu = true; + } + } + } - var segment = 'M' + a[0] + ',' + a[1] + - 'L' + p[0] + ',' + p[1]; + function showMenu() { + closeMenu(); + if (!suppressMenu && radialMenu) { + context.surface().call(radialMenu); + } + } - for (span -= dt; span >= 0; span -= dt) { - p[0] += dx; - p[1] += dy; - segment += 'L' + p[0] + ',' + p[1]; - } + function toggleMenu() { + if (d3.select('.radial-menu').empty()) { + showMenu(); + } else { + closeMenu(); + } + } - segment += 'L' + b[0] + ',' + b[1]; - segments.push({id: entity.id, index: i, d: segment}); - } + mode.selectedIDs = function() { + return selectedIDs; + }; - offset = -span; - i++; - } + mode.reselect = function() { + var surfaceNode = context.surface().node(); + if (surfaceNode.focus) { // FF doesn't support it + surfaceNode.focus(); + } - a = b; - } - })); + positionMenu(); + showMenu(); + }; - return segments; - }; - }, + mode.newFeature = function(_) { + if (!arguments.length) return newFeature; + newFeature = _; + return mode; + }; - MultipolygonMemberTags: function(graph) { - return function(entity) { - var tags = entity.tags; - graph.parentRelations(entity).forEach(function(relation) { - if (relation.isMultipolygon()) { - tags = _.extend({}, relation.tags, tags); - } - }); - return tags; - }; - } -}; -iD.svg.Areas = function(projection) { - // Patterns only work in Firefox when set directly on element. - // (This is not a bug: https://bugzilla.mozilla.org/show_bug.cgi?id=750632) - var patterns = { - wetland: 'wetland', - beach: 'beach', - scrub: 'scrub', - construction: 'construction', - cemetery: 'cemetery', - grave_yard: 'cemetery', - meadow: 'meadow', - farm: 'farmland', - farmland: 'farmland', - orchard: 'orchard' + mode.suppressMenu = function(_) { + if (!arguments.length) return suppressMenu; + suppressMenu = _; + return mode; }; - var patternKeys = ['landuse', 'natural', 'amenity']; + mode.enter = function() { + function update() { + closeMenu(); + if (_.any(selectedIDs, function(id) { return !context.hasEntity(id); })) { + // Exit mode if selected entity gets undone + context.enter(iD.modes.Browse(context)); + } + } - function setPattern(d) { - for (var i = 0; i < patternKeys.length; i++) { - if (patterns.hasOwnProperty(d.tags[patternKeys[i]])) { - this.style.fill = 'url("#pattern-' + patterns[d.tags[patternKeys[i]]] + '")'; - return; + function dblclick() { + var target = d3.select(d3.event.target), + datum = target.datum(); + + if (datum instanceof iD.Way && !target.classed('fill')) { + var choice = iD.geo.chooseEdge(context.childNodes(datum), context.mouse(), context.projection), + node = iD.Node(); + + var prev = datum.nodes[choice.index - 1], + next = datum.nodes[choice.index]; + + context.perform( + iD.actions.AddMidpoint({loc: choice.loc, edge: [prev, next]}, node), + t('operations.add.annotation.vertex')); + + d3.event.preventDefault(); + d3.event.stopPropagation(); } } - this.style.fill = ''; - } - return function drawAreas(surface, graph, entities, filter) { - var path = iD.svg.Path(projection, graph, true), - areas = {}, - multipolygon; + function selectElements(drawn) { + var entity = singular(); + if (entity && context.geometry(entity.id) === 'relation') { + suppressMenu = true; + return; + } - for (var i = 0; i < entities.length; i++) { - var entity = entities[i]; - if (entity.geometry(graph) !== 'area') continue; + var selection = context.surface() + .selectAll(iD.util.entityOrMemberSelector(selectedIDs, context.graph())); - multipolygon = iD.geo.isSimpleMultipolygonOuterMember(entity, graph); - if (multipolygon) { - areas[multipolygon.id] = { - entity: multipolygon.mergeTags(entity.tags), - area: Math.abs(entity.area(graph)) - }; - } else if (!areas[entity.id]) { - areas[entity.id] = { - entity: entity, - area: Math.abs(entity.area(graph)) - }; + if (selection.empty()) { + if (drawn) { // Exit mode if selected DOM elements have disappeared.. + context.enter(iD.modes.Browse(context)); + } + } else { + selection + .classed('selected', true); } } - areas = d3.values(areas).filter(function hasPath(a) { return path(a.entity); }); - areas.sort(function areaSort(a, b) { return b.area - a.area; }); - areas = _.pluck(areas, 'entity'); + function esc() { + if (!context.inIntro()) { + context.enter(iD.modes.Browse(context)); + } + } - var strokes = areas.filter(function(area) { - return area.type === 'way'; + + behaviors.forEach(function(behavior) { + context.install(behavior); }); - var data = { - shadow: strokes, - stroke: strokes, - fill: areas - }; + var operations = _.without(d3.values(iD.operations), iD.operations.Delete) + .map(function(o) { return o(selectedIDs, context); }) + .filter(function(o) { return o.available(); }); - var paths = surface.selectAll('.layer-shadow, .layer-stroke, .layer-fill') - .selectAll('path.area') - .filter(filter) - .data(function(layer) { return data[layer]; }, iD.Entity.key); + operations.unshift(iD.operations.Delete(selectedIDs, context)); - // Remove exiting areas first, so they aren't included in the `fills` - // array used for sorting below (https://github.com/openstreetmap/iD/issues/1903). - paths.exit() - .remove(); + keybinding + .on('⎋', esc, true) + .on('space', toggleMenu); + + operations.forEach(function(operation) { + operation.keys.forEach(function(key) { + keybinding.on(key, function() { + if (!(context.inIntro() || operation.disabled())) { + operation(); + } + }); + }); + }); - var fills = surface.selectAll('.layer-fill path.area')[0]; + d3.select(document) + .call(keybinding); - var bisect = d3.bisector(function(node) { - return -node.__data__.area(graph); - }).left; + radialMenu = iD.ui.RadialMenu(context, operations); - function sortedByArea(entity) { - if (this.__data__ === 'fill') { - return fills[bisect(fills, -entity.area(graph))]; - } - } + context.ui().sidebar + .select(singular() ? singular().id : null, newFeature); - paths.enter() - .insert('path', sortedByArea) - .each(function(entity) { - var layer = this.parentNode.__data__; + context.history() + .on('undone.select', update) + .on('redone.select', update); - this.setAttribute('class', entity.type + ' area ' + layer + ' ' + entity.id); + context.map() + .on('move.select', closeMenu) + .on('drawn.select', selectElements); - if (layer === 'fill') { - setPattern.apply(this, arguments); - } - }) - .call(iD.svg.TagClasses()); + selectElements(); - paths - .attr('d', path); + var show = d3.event && !suppressMenu; + + if (show) { + positionMenu(); + } + + timeout = window.setTimeout(function() { + if (show) { + showMenu(); + } + + context.surface() + .on('dblclick.select', dblclick); + }, 200); + + if (selectedIDs.length > 1) { + var entities = iD.ui.SelectionList(context, selectedIDs); + context.ui().sidebar.show(entities); + } }; -}; -iD.svg.Labels = function(projection, context) { - var path = d3.geo.path().projection(projection); - // Replace with dict and iterate over entities tags instead? - var label_stack = [ - ['line', 'aeroway'], - ['line', 'highway'], - ['line', 'railway'], - ['line', 'waterway'], - ['area', 'aeroway'], - ['area', 'amenity'], - ['area', 'building'], - ['area', 'historic'], - ['area', 'leisure'], - ['area', 'man_made'], - ['area', 'natural'], - ['area', 'shop'], - ['area', 'tourism'], - ['point', 'aeroway'], - ['point', 'amenity'], - ['point', 'building'], - ['point', 'historic'], - ['point', 'leisure'], - ['point', 'man_made'], - ['point', 'natural'], - ['point', 'shop'], - ['point', 'tourism'], - ['line', 'name'], - ['area', 'name'], - ['point', 'name'] - ]; - - var default_size = 12; + mode.exit = function() { + if (timeout) window.clearTimeout(timeout); - var font_sizes = label_stack.map(function(d) { - var style = iD.util.getStyle('text.' + d[0] + '.tag-' + d[1]), - m = style && style.cssText.match('font-size: ([0-9]{1,2})px;'); - if (m) return parseInt(m[1], 10); + if (inspector) wrap.call(inspector.close); - style = iD.util.getStyle('text.' + d[0]); - m = style && style.cssText.match('font-size: ([0-9]{1,2})px;'); - if (m) return parseInt(m[1], 10); + behaviors.forEach(function(behavior) { + context.uninstall(behavior); + }); - return default_size; - }); + keybinding.off(); + closeMenu(); + radialMenu = undefined; - var iconSize = 18; + context.history() + .on('undone.select', null) + .on('redone.select', null); - var pointOffsets = [ - [15, -11, 'start'], // right - [10, -11, 'start'], // unused right now - [-15, -11, 'end'] - ]; + context.surface() + .on('dblclick.select', null) + .selectAll('.selected') + .classed('selected', false); - var lineOffsets = [50, 45, 55, 40, 60, 35, 65, 30, 70, 25, - 75, 20, 80, 15, 95, 10, 90, 5, 95]; + context.map().on('drawn.select', null); + context.ui().sidebar.hide(); + }; + return mode; +}; +iD.operations = {}; +iD.operations.Circularize = function(selectedIDs, context) { + var entityId = selectedIDs[0], + entity = context.entity(entityId), + extent = entity.extent(context.graph()), + geometry = context.geometry(entityId), + action = iD.actions.Circularize(entityId, context.projection); - var noIcons = ['building', 'landuse', 'natural']; - function blacklisted(preset) { - return _.any(noIcons, function(s) { - return preset.id.indexOf(s) >= 0; - }); - } + var operation = function() { + var annotation = t('operations.circularize.annotation.' + geometry); + context.perform(action, annotation); + }; - function get(array, prop) { - return function(d, i) { return array[i][prop]; }; - } + operation.available = function() { + return selectedIDs.length === 1 && + entity.type === 'way' && + _.uniq(entity.nodes).length > 1; + }; - var textWidthCache = {}; + operation.disabled = function() { + var reason; + if (extent.percentContainedIn(context.extent()) < 0.8) { + reason = 'too_large'; + } else if (context.hasHiddenConnections(entityId)) { + reason = 'connected_to_hidden'; + } + return action.disabled(context.graph()) || reason; + }; - function textWidth(text, size, elem) { - var c = textWidthCache[size]; - if (!c) c = textWidthCache[size] = {}; + operation.tooltip = function() { + var disable = operation.disabled(); + return disable ? + t('operations.circularize.' + disable) : + t('operations.circularize.description.' + geometry); + }; - if (c[text]) { - return c[text]; + operation.id = 'circularize'; + operation.keys = [t('operations.circularize.key')]; + operation.title = t('operations.circularize.title'); - } else if (elem) { - c[text] = elem.getComputedTextLength(); - return c[text]; + return operation; +}; +iD.operations.Continue = function(selectedIDs, context) { + var graph = context.graph(), + entities = selectedIDs.map(function(id) { return graph.entity(id); }), + geometries = _.extend({line: [], vertex: []}, + _.groupBy(entities, function(entity) { return entity.geometry(graph); })), + vertex = geometries.vertex[0]; - } else { - var str = encodeURIComponent(text).match(/%[CDEFcdef]/g); - if (str === null) { - return size / 3 * 2 * text.length; - } else { - return size / 3 * (2 * text.length + str.length); - } - } + function candidateWays() { + return graph.parentWays(vertex).filter(function(parent) { + return parent.geometry(graph) === 'line' && + parent.affix(vertex.id) && + (geometries.line.length === 0 || geometries.line[0] === parent); + }); } - function drawLineLabels(group, entities, filter, classes, labels) { - var texts = group.selectAll('text.' + classes) - .filter(filter) - .data(entities, iD.Entity.key); - - texts.enter() - .append('text') - .attr('class', function(d, i) { return classes + ' ' + labels[i].classes + ' ' + d.id; }) - .append('textPath') - .attr('class', 'textpath'); - + var operation = function() { + var candidate = candidateWays()[0]; + context.enter(iD.modes.DrawLine( + context, + candidate.id, + context.graph(), + candidate.affix(vertex.id))); + }; - texts.selectAll('.textpath') - .filter(filter) - .data(entities, iD.Entity.key) - .attr({ - 'startOffset': '50%', - 'xlink:href': function(d) { return '#labelpath-' + d.id; } - }) - .text(iD.util.displayName); + operation.available = function() { + return geometries.vertex.length === 1 && geometries.line.length <= 1 && + !context.features().hasHiddenConnections(vertex, context.graph()); + }; - texts.exit().remove(); - } + operation.disabled = function() { + var candidates = candidateWays(); + if (candidates.length === 0) + return 'not_eligible'; + if (candidates.length > 1) + return 'multiple'; + }; - function drawLinePaths(group, entities, filter, classes, labels) { - var halos = group.selectAll('path') - .filter(filter) - .data(entities, iD.Entity.key); + operation.tooltip = function() { + var disable = operation.disabled(); + return disable ? + t('operations.continue.' + disable) : + t('operations.continue.description'); + }; - halos.enter() - .append('path') - .style('stroke-width', get(labels, 'font-size')) - .attr('id', function(d) { return 'labelpath-' + d.id; }) - .attr('class', classes); + operation.id = 'continue'; + operation.keys = [t('operations.continue.key')]; + operation.title = t('operations.continue.title'); - halos.attr('d', get(labels, 'lineString')); + return operation; +}; +iD.operations.Delete = function(selectedIDs, context) { + var action = iD.actions.DeleteMultiple(selectedIDs); - halos.exit().remove(); - } + var operation = function() { + var annotation, + nextSelectedID; - function drawPointLabels(group, entities, filter, classes, labels) { + if (selectedIDs.length > 1) { + annotation = t('operations.delete.annotation.multiple', {n: selectedIDs.length}); - var texts = group.selectAll('text.' + classes) - .filter(filter) - .data(entities, iD.Entity.key); + } else { + var id = selectedIDs[0], + entity = context.entity(id), + geometry = context.geometry(id), + parents = context.graph().parentWays(entity), + parent = parents[0]; - texts.enter() - .append('text') - .attr('class', function(d, i) { return classes + ' ' + labels[i].classes + ' ' + d.id; }); + annotation = t('operations.delete.annotation.' + geometry); - texts.attr('x', get(labels, 'x')) - .attr('y', get(labels, 'y')) - .style('text-anchor', get(labels, 'textAnchor')) - .text(iD.util.displayName) - .each(function(d, i) { textWidth(iD.util.displayName(d), labels[i].height, this); }); + // Select the next closest node in the way. + if (geometry === 'vertex' && parents.length === 1 && parent.nodes.length > 2) { + var nodes = parent.nodes, + i = nodes.indexOf(id); - texts.exit().remove(); - return texts; - } + if (i === 0) { + i++; + } else if (i === nodes.length - 1) { + i--; + } else { + var a = iD.geo.sphericalDistance(entity.loc, context.entity(nodes[i - 1]).loc), + b = iD.geo.sphericalDistance(entity.loc, context.entity(nodes[i + 1]).loc); + i = a < b ? i - 1 : i + 1; + } - function drawAreaLabels(group, entities, filter, classes, labels) { - entities = entities.filter(hasText); - labels = labels.filter(hasText); - return drawPointLabels(group, entities, filter, classes, labels); + nextSelectedID = nodes[i]; + } + } - function hasText(d, i) { - return labels[i].hasOwnProperty('x') && labels[i].hasOwnProperty('y'); + if (nextSelectedID && context.hasEntity(nextSelectedID)) { + context.enter(iD.modes.Select(context, [nextSelectedID])); + } else { + context.enter(iD.modes.Browse(context)); } - } - function drawAreaIcons(group, entities, filter, classes, labels) { + context.perform( + action, + annotation); + }; - var icons = group.selectAll('use') - .filter(filter) - .data(entities, iD.Entity.key); + operation.available = function() { + return true; + }; - icons.enter() - .append('use') - .attr('clip-path', 'url(#clip-square-18)') - .attr('class', 'icon'); + operation.disabled = function() { + var reason; + if (_.any(selectedIDs, context.hasHiddenConnections)) { + reason = 'connected_to_hidden'; + } + return action.disabled(context.graph()) || reason; + }; - icons.attr('transform', get(labels, 'transform')) - .attr('xlink:href', function(d) { - return '#maki-' + context.presets().match(d, context.graph()).icon + '-18'; - }); + operation.tooltip = function() { + var disable = operation.disabled(); + return disable ? + t('operations.delete.' + disable) : + t('operations.delete.description'); + }; + operation.id = 'delete'; + operation.keys = [iD.ui.cmd('⌘⌫'), iD.ui.cmd('⌘⌦')]; + operation.title = t('operations.delete.title'); - icons.exit().remove(); - } + return operation; +}; +iD.operations.Disconnect = function(selectedIDs, context) { + var vertices = _.filter(selectedIDs, function vertex(entityId) { + return context.geometry(entityId) === 'vertex'; + }); - function reverse(p) { - var angle = Math.atan2(p[1][1] - p[0][1], p[1][0] - p[0][0]); - return !(p[0][0] < p[p.length - 1][0] && angle < Math.PI/2 && angle > - Math.PI/2); - } + var entityId = vertices[0], + action = iD.actions.Disconnect(entityId); - function lineString(nodes) { - return 'M' + nodes.join('L'); + if (selectedIDs.length > 1) { + action.limitWays(_.without(selectedIDs, entityId)); } - function subpath(nodes, from, to) { - function segmentLength(i) { - var dx = nodes[i][0] - nodes[i + 1][0]; - var dy = nodes[i][1] - nodes[i + 1][1]; - return Math.sqrt(dx * dx + dy * dy); - } + var operation = function() { + context.perform(action, t('operations.disconnect.annotation')); + }; - var sofar = 0, - start, end, i0, i1; - for (var i = 0; i < nodes.length - 1; i++) { - var current = segmentLength(i); - var portion; - if (!start && sofar + current >= from) { - portion = (from - sofar) / current; - start = [ - nodes[i][0] + portion * (nodes[i + 1][0] - nodes[i][0]), - nodes[i][1] + portion * (nodes[i + 1][1] - nodes[i][1]) - ]; - i0 = i + 1; - } - if (!end && sofar + current >= to) { - portion = (to - sofar) / current; - end = [ - nodes[i][0] + portion * (nodes[i + 1][0] - nodes[i][0]), - nodes[i][1] + portion * (nodes[i + 1][1] - nodes[i][1]) - ]; - i1 = i + 1; - } - sofar += current; + operation.available = function() { + return vertices.length === 1; + }; + operation.disabled = function() { + var reason; + if (_.any(selectedIDs, context.hasHiddenConnections)) { + reason = 'connected_to_hidden'; } - var ret = nodes.slice(i0, i1); - ret.unshift(start); - ret.push(end); - return ret; + return action.disabled(context.graph()) || reason; + }; - } + operation.tooltip = function() { + var disable = operation.disabled(); + return disable ? + t('operations.disconnect.' + disable) : + t('operations.disconnect.description'); + }; - function hideOnMouseover() { - var layers = d3.select(this) - .selectAll('.layer-label, .layer-halo'); + operation.id = 'disconnect'; + operation.keys = [t('operations.disconnect.key')]; + operation.title = t('operations.disconnect.title'); - layers.selectAll('.proximate') - .classed('proximate', false); + return operation; +}; +iD.operations.Merge = function(selectedIDs, context) { + var join = iD.actions.Join(selectedIDs), + merge = iD.actions.Merge(selectedIDs), + mergePolygon = iD.actions.MergePolygon(selectedIDs); - var mouse = context.mouse(), - pad = 50, - rect = [mouse[0] - pad, mouse[1] - pad, mouse[0] + pad, mouse[1] + pad], - ids = _.pluck(rtree.search(rect), 'id'); + var operation = function() { + var annotation = t('operations.merge.annotation', {n: selectedIDs.length}), + action; - if (!ids.length) return; - layers.selectAll('.' + ids.join(', .')) - .classed('proximate', true); - } + if (!join.disabled(context.graph())) { + action = join; + } else if (!merge.disabled(context.graph())) { + action = merge; + } else { + action = mergePolygon; + } - var rtree = rbush(), - rectangles = {}; + context.perform(action, annotation); + context.enter(iD.modes.Select(context, selectedIDs.filter(function(id) { return context.hasEntity(id); })) + .suppressMenu(true)); + }; - function labels(surface, graph, entities, filter, dimensions, fullRedraw) { + operation.available = function() { + return selectedIDs.length >= 2; + }; - var hidePoints = !surface.select('.node.point').node(); + operation.disabled = function() { + return join.disabled(context.graph()) && + merge.disabled(context.graph()) && + mergePolygon.disabled(context.graph()); + }; - var labelable = [], i, k, entity; - for (i = 0; i < label_stack.length; i++) labelable.push([]); + operation.tooltip = function() { + var j = join.disabled(context.graph()), + m = merge.disabled(context.graph()), + p = mergePolygon.disabled(context.graph()); - if (fullRedraw) { - rtree.clear(); - rectangles = {}; - } else { - for (i = 0; i < entities.length; i++) { - rtree.remove(rectangles[entities[i].id]); - } - } + if (j === 'restriction' && m && p) + return t('operations.merge.restriction', {relation: context.presets().item('type/restriction').name()}); - // Split entities into groups specified by label_stack - for (i = 0; i < entities.length; i++) { - entity = entities[i]; - var geometry = entity.geometry(graph); + if (p === 'incomplete_relation' && j && m) + return t('operations.merge.incomplete_relation'); - if (geometry === 'vertex') - continue; - if (hidePoints && geometry === 'point') - continue; + if (j && m && p) + return t('operations.merge.' + j); - var preset = geometry === 'area' && context.presets().match(entity, graph), - icon = preset && !blacklisted(preset) && preset.icon; + return t('operations.merge.description'); + }; - if (!icon && !iD.util.displayName(entity)) - continue; + operation.id = 'merge'; + operation.keys = [t('operations.merge.key')]; + operation.title = t('operations.merge.title'); - for (k = 0; k < label_stack.length; k ++) { - if (geometry === label_stack[k][0] && entity.tags[label_stack[k][1]]) { - labelable[k].push(entity); - break; - } - } - } + return operation; +}; +iD.operations.Move = function(selectedIDs, context) { + var extent = selectedIDs.reduce(function(extent, id) { + return extent.extend(context.entity(id).extent(context.graph())); + }, iD.geo.Extent()); - var positions = { - point: [], - line: [], - area: [] - }; + var operation = function() { + context.enter(iD.modes.Move(context, selectedIDs)); + }; - var labelled = { - point: [], - line: [], - area: [] - }; + operation.available = function() { + return selectedIDs.length > 1 || + context.entity(selectedIDs[0]).type !== 'node'; + }; - // Try and find a valid label for labellable entities - for (k = 0; k < labelable.length; k++) { - var font_size = font_sizes[k]; - for (i = 0; i < labelable[k].length; i ++) { - entity = labelable[k][i]; - var name = iD.util.displayName(entity), - width = name && textWidth(name, font_size), - p; - if (entity.geometry(graph) === 'point') { - p = getPointLabel(entity, width, font_size); - } else if (entity.geometry(graph) === 'line') { - p = getLineLabel(entity, width, font_size); - } else if (entity.geometry(graph) === 'area') { - p = getAreaLabel(entity, width, font_size); - } - if (p) { - p.classes = entity.geometry(graph) + ' tag-' + label_stack[k][1]; - positions[entity.geometry(graph)].push(p); - labelled[entity.geometry(graph)].push(entity); - } - } + operation.disabled = function() { + var reason; + if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) { + reason = 'too_large'; + } else if (_.any(selectedIDs, context.hasHiddenConnections)) { + reason = 'connected_to_hidden'; } + return iD.actions.Move(selectedIDs).disabled(context.graph()) || reason; + }; - function getPointLabel(entity, width, height) { - var coord = projection(entity.loc), - m = 5, // margin - offset = pointOffsets[0], - p = { - height: height, - width: width, - x: coord[0] + offset[0], - y: coord[1] + offset[1], - textAnchor: offset[2] - }; - var rect = [p.x - m, p.y - m, p.x + width + m, p.y + height + m]; - if (tryInsert(rect, entity.id)) return p; - } + operation.tooltip = function() { + var disable = operation.disabled(); + return disable ? + t('operations.move.' + disable) : + t('operations.move.description'); + }; + operation.id = 'move'; + operation.keys = [t('operations.move.key')]; + operation.title = t('operations.move.title'); - function getLineLabel(entity, width, height) { - var nodes = _.pluck(graph.childNodes(entity), 'loc').map(projection), - length = iD.geo.pathLength(nodes); - if (length < width + 20) return; + return operation; +}; +iD.operations.Orthogonalize = function(selectedIDs, context) { + var entityId = selectedIDs[0], + entity = context.entity(entityId), + extent = entity.extent(context.graph()), + geometry = context.geometry(entityId), + action = iD.actions.Orthogonalize(entityId, context.projection); - for (var i = 0; i < lineOffsets.length; i ++) { - var offset = lineOffsets[i], - middle = offset / 100 * length, - start = middle - width/2; - if (start < 0 || start + width > length) continue; - var sub = subpath(nodes, start, start + width), - rev = reverse(sub), - rect = [ - Math.min(sub[0][0], sub[sub.length - 1][0]) - 10, - Math.min(sub[0][1], sub[sub.length - 1][1]) - 10, - Math.max(sub[0][0], sub[sub.length - 1][0]) + 20, - Math.max(sub[0][1], sub[sub.length - 1][1]) + 30 - ]; - if (rev) sub = sub.reverse(); - if (tryInsert(rect, entity.id)) return { - 'font-size': height + 2, - lineString: lineString(sub), - startOffset: offset + '%' - }; - } - } - - function getAreaLabel(entity, width, height) { - var centroid = path.centroid(entity.asGeoJSON(graph, true)), - extent = entity.extent(graph), - entitywidth = projection(extent[1])[0] - projection(extent[0])[0], - rect; + var operation = function() { + var annotation = t('operations.orthogonalize.annotation.' + geometry); + context.perform(action, annotation); + }; - if (!centroid || entitywidth < 20) return; + operation.available = function() { + return selectedIDs.length === 1 && + entity.type === 'way' && + entity.isClosed() && + _.uniq(entity.nodes).length > 2; + }; - var iconX = centroid[0] - (iconSize/2), - iconY = centroid[1] - (iconSize/2), - textOffset = iconSize + 5; + operation.disabled = function() { + var reason; + if (extent.percentContainedIn(context.extent()) < 0.8) { + reason = 'too_large'; + } else if (context.hasHiddenConnections(entityId)) { + reason = 'connected_to_hidden'; + } + return action.disabled(context.graph()) || reason; + }; - var p = { - transform: 'translate(' + iconX + ',' + iconY + ')' - }; + operation.tooltip = function() { + var disable = operation.disabled(); + return disable ? + t('operations.orthogonalize.' + disable) : + t('operations.orthogonalize.description.' + geometry); + }; - if (width && entitywidth >= width + 20) { - p.x = centroid[0]; - p.y = centroid[1] + textOffset; - p.textAnchor = 'middle'; - p.height = height; - rect = [p.x - width/2, p.y, p.x + width/2, p.y + height + textOffset]; - } else { - rect = [iconX, iconY, iconX + iconSize, iconY + iconSize]; - } + operation.id = 'orthogonalize'; + operation.keys = [t('operations.orthogonalize.key')]; + operation.title = t('operations.orthogonalize.title'); - if (tryInsert(rect, entity.id)) return p; + return operation; +}; +iD.operations.Reverse = function(selectedIDs, context) { + var entityId = selectedIDs[0]; - } + var operation = function() { + context.perform( + iD.actions.Reverse(entityId), + t('operations.reverse.annotation')); + }; - function tryInsert(rect, id) { - // Check that label is visible - if (rect[0] < 0 || rect[1] < 0 || rect[2] > dimensions[0] || - rect[3] > dimensions[1]) return false; - var v = rtree.search(rect).length === 0; - if (v) { - rect.id = id; - rtree.insert(rect); - rectangles[id] = rect; - } - return v; - } + operation.available = function() { + return selectedIDs.length === 1 && + context.geometry(entityId) === 'line'; + }; - var label = surface.select('.layer-label'), - halo = surface.select('.layer-halo'); + operation.disabled = function() { + return false; + }; - // points - drawPointLabels(label, labelled.point, filter, 'pointlabel', positions.point); - drawPointLabels(halo, labelled.point, filter, 'pointlabel-halo', positions.point); + operation.tooltip = function() { + return t('operations.reverse.description'); + }; - // lines - drawLinePaths(halo, labelled.line, filter, '', positions.line); - drawLineLabels(label, labelled.line, filter, 'linelabel', positions.line); - drawLineLabels(halo, labelled.line, filter, 'linelabel-halo', positions.line); + operation.id = 'reverse'; + operation.keys = [t('operations.reverse.key')]; + operation.title = t('operations.reverse.title'); - // areas - drawAreaLabels(label, labelled.area, filter, 'arealabel', positions.area); - drawAreaLabels(halo, labelled.area, filter, 'arealabel-halo', positions.area); - drawAreaIcons(label, labelled.area, filter, 'arealabel-icon', positions.area); - } + return operation; +}; +iD.operations.Rotate = function(selectedIDs, context) { + var entityId = selectedIDs[0], + entity = context.entity(entityId), + extent = entity.extent(context.graph()), + geometry = context.geometry(entityId); - labels.supersurface = function(supersurface) { - supersurface - .on('mousemove.hidelabels', hideOnMouseover) - .on('mousedown.hidelabels', function () { - supersurface.on('mousemove.hidelabels', null); - }) - .on('mouseup.hidelabels', function () { - supersurface.on('mousemove.hidelabels', hideOnMouseover); - }); + var operation = function() { + context.enter(iD.modes.RotateWay(context, entityId)); }; - return labels; -}; -iD.svg.Lines = function(projection) { - - var highway_stack = { - motorway: 0, - motorway_link: 1, - trunk: 2, - trunk_link: 3, - primary: 4, - primary_link: 5, - secondary: 6, - tertiary: 7, - unclassified: 8, - residential: 9, - service: 10, - footway: 11 + operation.available = function() { + if (selectedIDs.length !== 1 || entity.type !== 'way') + return false; + if (geometry === 'area') + return true; + if (entity.isClosed() && + context.graph().parentRelations(entity).some(function(r) { return r.isMultipolygon(); })) + return true; + return false; }; - function waystack(a, b) { - if (!a || !b || !a.tags || !b.tags) return 0; - if (a.tags.layer !== undefined && b.tags.layer !== undefined) { - return a.tags.layer - b.tags.layer; - } - if (a.tags.bridge) return 1; - if (b.tags.bridge) return -1; - if (a.tags.tunnel) return -1; - if (b.tags.tunnel) return 1; - var as = 0, bs = 0; - if (a.tags.highway && b.tags.highway) { - as -= highway_stack[a.tags.highway]; - bs -= highway_stack[b.tags.highway]; + operation.disabled = function() { + if (extent.percentContainedIn(context.extent()) < 0.8) { + return 'too_large'; + } else if (context.hasHiddenConnections(entityId)) { + return 'connected_to_hidden'; + } else { + return false; } - return as - bs; - } - - return function drawLines(surface, graph, entities, filter) { - var lines = [], - path = iD.svg.Path(projection, graph); + }; - for (var i = 0; i < entities.length; i++) { - var entity = entities[i], - outer = iD.geo.simpleMultipolygonOuterMember(entity, graph); - if (outer) { - lines.push(entity.mergeTags(outer.tags)); - } else if (entity.geometry(graph) === 'line') { - lines.push(entity); - } - } + operation.tooltip = function() { + var disable = operation.disabled(); + return disable ? + t('operations.rotate.' + disable) : + t('operations.rotate.description'); + }; - lines = lines.filter(path); - lines.sort(waystack); + operation.id = 'rotate'; + operation.keys = [t('operations.rotate.key')]; + operation.title = t('operations.rotate.title'); - function drawPaths(klass) { - var paths = surface.select('.layer-' + klass) - .selectAll('path.line') - .filter(filter) - .data(lines, iD.Entity.key); + return operation; +}; +iD.operations.Split = function(selectedIDs, context) { + var vertices = _.filter(selectedIDs, function vertex(entityId) { + return context.geometry(entityId) === 'vertex'; + }); - var enter = paths.enter() - .append('path') - .attr('class', function(d) { return 'way line ' + klass + ' ' + d.id; }); + var entityId = vertices[0], + action = iD.actions.Split(entityId); - // Optimization: call simple TagClasses only on enter selection. This - // works because iD.Entity.key is defined to include the entity v attribute. - if (klass !== 'stroke') { - enter.call(iD.svg.TagClasses()); - } else { - paths.call(iD.svg.TagClasses() - .tags(iD.svg.MultipolygonMemberTags(graph))); - } + if (selectedIDs.length > 1) { + action.limitWays(_.without(selectedIDs, entityId)); + } - paths - .order() - .attr('d', path); + var operation = function() { + var annotation; - paths.exit() - .remove(); + var ways = action.ways(context.graph()); + if (ways.length === 1) { + annotation = t('operations.split.annotation.' + context.geometry(ways[0].id)); + } else { + annotation = t('operations.split.annotation.multiple', {n: ways.length}); } - drawPaths('shadow'); - drawPaths('casing'); - drawPaths('stroke'); - - var segments = _(lines) - .filter(function(d) { return d.isOneWay(); }) - .map(iD.svg.OneWaySegments(projection, graph, 35)) - .flatten() - .valueOf(); + var difference = context.perform(action, annotation); + context.enter(iD.modes.Select(context, difference.extantIDs())); + }; - var oneways = surface.select('.layer-oneway') - .selectAll('path.oneway') - .filter(filter) - .data(segments, function(d) { return [d.id, d.index]; }); + operation.available = function() { + return vertices.length === 1; + }; - oneways.enter() - .append('path') - .attr('class', 'oneway') - .attr('marker-mid', 'url(#oneway-marker)'); + operation.disabled = function() { + var reason; + if (_.any(selectedIDs, context.hasHiddenConnections)) { + reason = 'connected_to_hidden'; + } + return action.disabled(context.graph()) || reason; + }; - oneways - .order() - .attr('d', function(d) { return d.d; }); + operation.tooltip = function() { + var disable = operation.disabled(); + if (disable) { + return t('operations.split.' + disable); + } - oneways.exit() - .remove(); + var ways = action.ways(context.graph()); + if (ways.length === 1) { + return t('operations.split.description.' + context.geometry(ways[0].id)); + } else { + return t('operations.split.description.multiple'); + } }; -}; -iD.svg.Midpoints = function(projection, context) { - return function drawMidpoints(surface, graph, entities, filter, extent) { - var midpoints = {}; - - for (var i = 0; i < entities.length; i++) { - var entity = entities[i]; - if (entity.type !== 'way') continue; - if (context.selectedIDs().indexOf(entity.id) < 0) continue; + operation.id = 'split'; + operation.keys = [t('operations.split.key')]; + operation.title = t('operations.split.title'); - var nodes = graph.childNodes(entity); + return operation; +}; +iD.operations.Straighten = function(selectedIDs, context) { + var entityId = selectedIDs[0], + action = iD.actions.Straighten(entityId, context.projection); - // skip the last node because it is always repeated - for (var j = 0; j < nodes.length - 1; j++) { + function operation() { + var annotation = t('operations.straighten.annotation'); + context.perform(action, annotation); + } - var a = nodes[j], - b = nodes[j + 1], - id = [a.id, b.id].sort().join('-'); + operation.available = function() { + var entity = context.entity(entityId); + return selectedIDs.length === 1 && + entity.type === 'way' && + !entity.isClosed() && + _.uniq(entity.nodes).length > 2; + }; - // Redraw midpoints in two cases: - // 1. One of the two endpoint nodes changed (e.g. was moved). - // 2. A node was deleted. The midpoint between the two new - // endpoints needs to be redrawn. In this case only the - // way will be in the diff. - if (!midpoints[id] && (filter(a) || filter(b) || filter(entity))) { - var loc = iD.geo.interp(a.loc, b.loc, 0.5); - if (extent.intersects(loc) && iD.geo.euclideanDistance(projection(a.loc), projection(b.loc)) > 40) { - midpoints[id] = { - type: 'midpoint', - id: id, - loc: loc, - edge: [a.id, b.id] - }; - } - } - } + operation.disabled = function() { + var reason; + if (context.hasHiddenConnections(entityId)) { + reason = 'connected_to_hidden'; } + return action.disabled(context.graph()) || reason; + }; - var groups = surface.select('.layer-hit').selectAll('g.midpoint') - .filter(filter) - .data(_.values(midpoints), function(d) { return d.id; }); + operation.tooltip = function() { + var disable = operation.disabled(); + return disable ? + t('operations.straighten.' + disable) : + t('operations.straighten.description'); + }; - var group = groups.enter() - .insert('g', ':first-child') - .attr('class', 'midpoint'); + operation.id = 'straighten'; + operation.keys = [t('operations.straighten.key')]; + operation.title = t('operations.straighten.title'); - group.append('circle') - .attr('r', 7) - .attr('class', 'shadow'); + return operation; +}; +iD.Connection = function(useHttps) { + if (typeof useHttps !== 'boolean') { + useHttps = window.location.protocol === 'https:'; + } - group.append('circle') - .attr('r', 3) - .attr('class', 'fill'); + var event = d3.dispatch('authenticating', 'authenticated', 'auth', 'loading', 'loaded'), + protocol = useHttps ? 'https:' : 'http:', + url = protocol + '//www.openstreetmap.org', + connection = {}, + inflight = {}, + loadedTiles = {}, + tileZoom = 16, + oauth = osmAuth({ + url: protocol + '//www.openstreetmap.org', + oauth_consumer_key: '5A043yRSEugj4DJ5TljuapfnrflWDte8jTOcWLlT', + oauth_secret: 'aB3jKq1TRsCOUrfOIZ6oQMEDmv2ptV76PA54NGLL', + loading: authenticating, + done: authenticated + }), + ndStr = 'nd', + tagStr = 'tag', + memberStr = 'member', + nodeStr = 'node', + wayStr = 'way', + relationStr = 'relation', + userDetails, + off; - groups.attr('transform', iD.svg.PointTransform(projection)); - // Propagate data bindings. - groups.select('circle.shadow'); - groups.select('circle.fill'); + connection.changesetURL = function(changesetId) { + return url + '/changeset/' + changesetId; + }; - groups.exit() - .remove(); + connection.changesetsURL = function(center, zoom) { + var precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2)); + return url + '/history#map=' + + Math.floor(zoom) + '/' + + center[1].toFixed(precision) + '/' + + center[0].toFixed(precision); }; -}; -iD.svg.Points = function(projection, context) { - function markerPath(selection, klass) { - selection - .attr('class', klass) - .attr('transform', 'translate(-8, -23)') - .attr('d', 'M 17,8 C 17,13 11,21 8.5,23.5 C 6,21 0,13 0,8 C 0,4 4,-0.5 8.5,-0.5 C 13,-0.5 17,4 17,8 z'); - } - function sortY(a, b) { - return b.loc[1] - a.loc[1]; - } + connection.entityURL = function(entity) { + return url + '/' + entity.type + '/' + entity.osmId(); + }; - function drawPoints(surface, points, filter) { - points.sort(sortY); + connection.userURL = function(username) { + return url + '/user/' + username; + }; - var groups = surface.select('.layer-hit').selectAll('g.point') - .filter(filter) - .data(points, iD.Entity.key); + connection.loadFromURL = function(url, callback) { + function done(err, dom) { + return callback(err, parse(dom)); + } + return d3.xml(url).get(done); + }; - var group = groups.enter() - .append('g') - .attr('class', function(d) { return 'node point ' + d.id; }) - .order(); + connection.loadEntity = function(id, callback) { + var type = iD.Entity.id.type(id), + osmID = iD.Entity.id.toOSM(id); - group.append('path') - .call(markerPath, 'shadow'); + connection.loadFromURL( + url + '/api/0.6/' + type + '/' + osmID + (type !== 'node' ? '/full' : ''), + function(err, entities) { + if (callback) callback(err, {data: entities}); + }); + }; - group.append('path') - .call(markerPath, 'stroke'); + connection.loadEntityVersion = function(id, version, callback) { + var type = iD.Entity.id.type(id), + osmID = iD.Entity.id.toOSM(id); - group.append('use') - .attr('class', 'icon') - .attr('transform', 'translate(-6, -20)') - .attr('clip-path', 'url(#clip-square-12)'); + connection.loadFromURL( + url + '/api/0.6/' + type + '/' + osmID + '/' + version, + function(err, entities) { + if (callback) callback(err, {data: entities}); + }); + }; - groups.attr('transform', iD.svg.PointTransform(projection)) - .call(iD.svg.TagClasses()); + connection.loadMultiple = function(ids, callback) { + _.each(_.groupBy(_.uniq(ids), iD.Entity.id.type), function(v, k) { + var type = k + 's', + osmIDs = _.map(v, iD.Entity.id.toOSM); - // Selecting the following implicitly - // sets the data (point entity) on the element - groups.select('.shadow'); - groups.select('.stroke'); - groups.select('.icon') - .attr('xlink:href', function(entity) { - var preset = context.presets().match(entity, context.graph()); - return preset.icon ? '#maki-' + preset.icon + '-12' : ''; + _.each(_.chunk(osmIDs, 150), function(arr) { + connection.loadFromURL( + url + '/api/0.6/' + type + '?' + type + '=' + arr.join(), + function(err, entities) { + if (callback) callback(err, {data: entities}); + }); }); + }); + }; - groups.exit() - .remove(); + function authenticating() { + event.authenticating(); } - drawPoints.points = function(entities, limit) { - var graph = context.graph(), - points = []; + function authenticated() { + event.authenticated(); + } - for (var i = 0; i < entities.length; i++) { - var entity = entities[i]; - if (entity.geometry(graph) === 'point') { - points.push(entity); - if (limit && points.length >= limit) break; - } - } + function getLoc(attrs) { + var lon = attrs.lon && attrs.lon.value, + lat = attrs.lat && attrs.lat.value; + return [parseFloat(lon), parseFloat(lat)]; + } - return points; - }; + function getNodes(obj) { + var elems = obj.getElementsByTagName(ndStr), + nodes = new Array(elems.length); + for (var i = 0, l = elems.length; i < l; i++) { + nodes[i] = 'n' + elems[i].attributes.ref.value; + } + return nodes; + } - return drawPoints; -}; -iD.svg.Restrictions = function(context) { - var projection = context.projection; + function getTags(obj) { + var elems = obj.getElementsByTagName(tagStr), + tags = {}; + for (var i = 0, l = elems.length; i < l; i++) { + var attrs = elems[i].attributes; + tags[attrs.k.value] = attrs.v.value; + } + return tags; + } - function drawRestrictions(surface) { - var turns = drawRestrictions.turns(context.graph(), context.selectedIDs()); + function getMembers(obj) { + var elems = obj.getElementsByTagName(memberStr), + members = new Array(elems.length); + for (var i = 0, l = elems.length; i < l; i++) { + var attrs = elems[i].attributes; + members[i] = { + id: attrs.type.value[0] + attrs.ref.value, + type: attrs.type.value, + role: attrs.role.value + }; + } + return members; + } - var groups = surface.select('.layer-hit').selectAll('g.restriction') - .data(turns, iD.Entity.key); + function getVisible(attrs) { + return (!attrs.visible || attrs.visible.value !== 'false'); + } - var enter = groups.enter().append('g') - .attr('class', 'restriction'); + var parsers = { + node: function nodeData(obj) { + var attrs = obj.attributes; + return new iD.Node({ + id: iD.Entity.id.fromOSM(nodeStr, attrs.id.value), + loc: getLoc(attrs), + version: attrs.version.value, + user: attrs.user && attrs.user.value, + tags: getTags(obj), + visible: getVisible(attrs) + }); + }, - enter.append('circle') - .attr('class', 'restriction') - .attr('r', 4); + way: function wayData(obj) { + var attrs = obj.attributes; + return new iD.Way({ + id: iD.Entity.id.fromOSM(wayStr, attrs.id.value), + version: attrs.version.value, + user: attrs.user && attrs.user.value, + tags: getTags(obj), + nodes: getNodes(obj), + visible: getVisible(attrs) + }); + }, - groups - .attr('transform', function(restriction) { - var via = context.entity(restriction.memberByRole('via').id); - return iD.svg.PointTransform(projection)(via); + relation: function relationData(obj) { + var attrs = obj.attributes; + return new iD.Relation({ + id: iD.Entity.id.fromOSM(relationStr, attrs.id.value), + version: attrs.version.value, + user: attrs.user && attrs.user.value, + tags: getTags(obj), + members: getMembers(obj), + visible: getVisible(attrs) }); + } + }; - groups.exit() - .remove(); + function parse(dom) { + if (!dom || !dom.childNodes) return; - return this; - } + var root = dom.childNodes[0], + children = root.childNodes, + entities = []; - drawRestrictions.turns = function (graph, selectedIDs) { - if (selectedIDs.length !== 1) - return []; + for (var i = 0, l = children.length; i < l; i++) { + var child = children[i], + parser = parsers[child.nodeName]; + if (parser) { + entities.push(parser(child)); + } + } - var from = graph.entity(selectedIDs[0]); - if (from.type !== 'way') - return []; + return entities; + } - return graph.parentRelations(from).filter(function(relation) { - var f = relation.memberById(from.id), - t = relation.memberByRole('to'), - v = relation.memberByRole('via'); - - return relation.tags.type === 'restriction' && f.role === 'from' && - t && t.type === 'way' && graph.hasEntity(t.id) && - v && v.type === 'node' && graph.hasEntity(v.id) && - !graph.entity(t.id).isDegenerate() && - !graph.entity(f.id).isDegenerate() && - graph.entity(t.id).affix(v.id) && - graph.entity(f.id).affix(v.id); - }); + connection.authenticated = function() { + return oauth.authenticated(); }; - drawRestrictions.datum = function(graph, from, restriction, projection) { - var to = graph.entity(restriction.memberByRole('to').id), - a = graph.entity(restriction.memberByRole('via').id), - b; + // Generate Changeset XML. Returns a string. + connection.changesetJXON = function(tags) { + return { + osm: { + changeset: { + tag: _.map(tags, function(value, key) { + return { '@k': key, '@v': value }; + }), + '@version': 0.6, + '@generator': 'iD' + } + } + }; + }; - if (to.first() === a.id) { - b = graph.entity(to.nodes[1]); - } else { - b = graph.entity(to.nodes[to.nodes.length - 2]); + // Generate [osmChange](http://wiki.openstreetmap.org/wiki/OsmChange) + // XML. Returns a string. + connection.osmChangeJXON = function(changeset_id, changes) { + function nest(x, order) { + var groups = {}; + for (var i = 0; i < x.length; i++) { + var tagName = Object.keys(x[i])[0]; + if (!groups[tagName]) groups[tagName] = []; + groups[tagName].push(x[i][tagName]); + } + var ordered = {}; + order.forEach(function(o) { + if (groups[o]) ordered[o] = groups[o]; + }); + return ordered; } - a = projection(a.loc); - b = projection(b.loc); + function rep(entity) { + return entity.asJXON(changeset_id); + } return { - from: from, - to: to, - restriction: restriction, - angle: Math.atan2(b[1] - a[1], b[0] - a[0]) + osmChange: { + '@version': 0.6, + '@generator': 'iD', + 'create': nest(changes.created.map(rep), ['node', 'way', 'relation']), + 'modify': nest(changes.modified.map(rep), ['node', 'way', 'relation']), + 'delete': _.extend(nest(changes.deleted.map(rep), ['relation', 'way', 'node']), {'@if-unused': true}) + } }; }; - return drawRestrictions; -}; -iD.svg.Surface = function(context) { - function autosize(image) { - var img = document.createElement('img'); - img.src = image.attr('xlink:href'); - img.onload = function() { - image.attr({ - width: img.width, - height: img.height - }); - }; - } - - function SpriteDefinition(id, href, data) { - return function(defs) { - defs.append('image') - .attr('id', id) - .attr('xlink:href', href) - .call(autosize); - - defs.selectAll() - .data(data) - .enter().append('use') - .attr('id', function(d) { return d.key; }) - .attr('transform', function(d) { return 'translate(-' + d.value[0] + ',-' + d.value[1] + ')'; }) - .attr('xlink:href', '#' + id); - }; - } + connection.changesetTags = function(comment, imageryUsed) { + var detected = iD.detect(), + tags = { + created_by: 'iD ' + iD.version, + imagery_used: imageryUsed.join(';').substr(0, 255), + host: (window.location.origin + window.location.pathname).substr(0, 255), + locale: detected.locale + }; - return function drawSurface(selection) { - var defs = selection.append('defs'); + if (comment) { + tags.comment = comment.substr(0, 255); + } - defs.append('marker') - .attr({ - id: 'oneway-marker', - viewBox: '0 0 10 10', - refY: 2.5, - refX: 5, - markerWidth: 2, - markerHeight: 2, - orient: 'auto' - }) - .append('path') - .attr('d', 'M 5 3 L 0 3 L 0 2 L 5 2 L 5 0 L 10 2.5 L 5 5 z'); + return tags; + }; - var patterns = defs.selectAll('pattern') - .data([ - // pattern name, pattern image name - ['wetland', 'wetland'], - ['construction', 'construction'], - ['cemetery', 'cemetery'], - ['orchard', 'orchard'], - ['farmland', 'farmland'], - ['beach', 'dots'], - ['scrub', 'dots'], - ['meadow', 'dots']]) - .enter() - .append('pattern') - .attr({ - id: function(d) { return 'pattern-' + d[0]; }, - width: 32, - height: 32, - patternUnits: 'userSpaceOnUse' + connection.putChangeset = function(changes, comment, imageryUsed, callback) { + oauth.xhr({ + method: 'PUT', + path: '/api/0.6/changeset/create', + options: { header: { 'Content-Type': 'text/xml' } }, + content: JXON.stringify(connection.changesetJXON(connection.changesetTags(comment, imageryUsed))) + }, function(err, changeset_id) { + if (err) return callback(err); + oauth.xhr({ + method: 'POST', + path: '/api/0.6/changeset/' + changeset_id + '/upload', + options: { header: { 'Content-Type': 'text/xml' } }, + content: JXON.stringify(connection.osmChangeJXON(changeset_id, changes)) + }, function(err) { + if (err) return callback(err); + // POST was successful, safe to call the callback. + // Still attempt to close changeset, but ignore response because #2667 + // Add delay to allow for postgres replication #1646 #2678 + window.setTimeout(function() { callback(null, changeset_id); }, 2500); + oauth.xhr({ + method: 'PUT', + path: '/api/0.6/changeset/' + changeset_id + '/close', + options: { header: { 'Content-Type': 'text/xml' } } + }, d3.functor(true)); }); - - patterns.append('rect') - .attr({ - x: 0, - y: 0, - width: 32, - height: 32, - 'class': function(d) { return 'pattern-color-' + d[0]; } }); + }; - patterns.append('image') - .attr({ - x: 0, - y: 0, - width: 32, - height: 32 - }) - .attr('xlink:href', function(d) { return context.imagePath('pattern/' + d[1] + '.png'); }); - - defs.selectAll() - .data([12, 18, 20]) - .enter().append('clipPath') - .attr('id', function(d) { return 'clip-square-' + d; }) - .append('rect') - .attr('x', 0) - .attr('y', 0) - .attr('width', function(d) { return d; }) - .attr('height', function(d) { return d; }); - - var maki = []; - _.forEach(iD.data.featureIcons, function(dimensions, name) { - if (dimensions['12'] && dimensions['18'] && dimensions['24']) { - maki.push({key: 'maki-' + name + '-12', value: dimensions['12']}); - maki.push({key: 'maki-' + name + '-18', value: dimensions['18']}); - maki.push({key: 'maki-' + name + '-24', value: dimensions['24']}); - } - }); - - defs.call(SpriteDefinition( - 'sprite', - context.imagePath('sprite.svg'), - d3.entries(iD.data.operations))); - - defs.call(SpriteDefinition( - 'maki-sprite', - context.imagePath('maki-sprite.png'), - maki)); + connection.userDetails = function(callback) { + if (userDetails) { + callback(undefined, userDetails); + return; + } - var layers = selection.selectAll('.layer') - .data(['fill', 'shadow', 'casing', 'stroke', 'oneway', 'hit', 'halo', 'label']); + function done(err, user_details) { + if (err) return callback(err); - layers.enter().append('g') - .attr('class', function(d) { return 'layer layer-' + d; }); - }; -}; -iD.svg.TagClasses = function() { - var primary = [ - 'highway', 'railway', 'waterway', 'aeroway', 'motorway', - 'boundary', 'power', 'amenity', 'natural', 'landuse', - 'building', 'leisure', 'place' - ], - secondary = [ - 'oneway', 'bridge', 'tunnel', 'construction' - ], - tagClassRe = /^tag-/, - tags = function(entity) { return entity.tags; }; + var u = user_details.getElementsByTagName('user')[0], + img = u.getElementsByTagName('img'), + image_url = ''; - var tagClasses = function(selection) { - selection.each(function tagClassesEach(entity) { - var classes, value = this.className; + if (img && img[0] && img[0].getAttribute('href')) { + image_url = img[0].getAttribute('href'); + } - if (value.baseVal !== undefined) value = value.baseVal; + userDetails = { + display_name: u.attributes.display_name.value, + image_url: image_url, + id: u.attributes.id.value + }; - classes = value.trim().split(/\s+/).filter(function(name) { - return name.length && !tagClassRe.test(name); - }).join(' '); + callback(undefined, userDetails); + } - var t = tags(entity), i, k, v; + oauth.xhr({ method: 'GET', path: '/api/0.6/user/details' }, done); + }; - for (i = 0; i < primary.length; i++) { - k = primary[i]; - v = t[k]; - if (!v || v === 'no') continue; - classes += ' tag-' + k + ' tag-' + k + '-' + v; - break; - } + connection.userChangesets = function(callback) { + connection.userDetails(function(err, user) { + if (err) return callback(err); - for (i = 0; i < secondary.length; i++) { - k = secondary[i]; - v = t[k]; - if (!v || v === 'no') continue; - classes += ' tag-' + k + ' tag-' + k + '-' + v; + function done(changesets) { + callback(undefined, Array.prototype.map.call(changesets.getElementsByTagName('changeset'), + function (changeset) { + return { tags: getTags(changeset) }; + })); } - classes = classes.trim(); - - if (classes !== value) { - d3.select(this).attr('class', classes); - } + d3.xml(url + '/api/0.6/changesets?user=' + user.id).get() + .on('load', done) + .on('error', callback); }); }; - tagClasses.tags = function(_) { - if (!arguments.length) return tags; - tags = _; - return tagClasses; + connection.status = function(callback) { + function done(capabilities) { + var apiStatus = capabilities.getElementsByTagName('status'); + callback(undefined, apiStatus[0].getAttribute('api')); + } + d3.xml(url + '/api/capabilities').get() + .on('load', done) + .on('error', callback); }; - return tagClasses; -}; -iD.svg.Vertices = function(projection, context) { - var radiuses = { - // z16-, z17, z18+, tagged - shadow: [6, 7.5, 7.5, 11.5], - stroke: [2.5, 3.5, 3.5, 7], - fill: [1, 1.5, 1.5, 1.5] - }; + function abortRequest(i) { i.abort(); } - var hover; + connection.tileZoom = function(_) { + if (!arguments.length) return tileZoom; + tileZoom = _; + return connection; + }; - function siblingAndChildVertices(ids, graph, extent) { - var vertices = {}; + connection.loadTiles = function(projection, dimensions, callback) { - function addChildVertices(entity) { - var i; - if (entity.type === 'way') { - for (i = 0; i < entity.nodes.length; i++) { - addChildVertices(graph.entity(entity.nodes[i])); - } - } else if (entity.type === 'relation') { - for (i = 0; i < entity.members.length; i++) { - var member = context.hasEntity(entity.members[i].id); - if (member) { - addChildVertices(member); - } - } - } else if (entity.intersects(extent, graph)) { - vertices[entity.id] = entity; - } - } + if (off) return; - ids.forEach(function(id) { - var entity = context.hasEntity(id); - if (entity && entity.type === 'node') { - vertices[entity.id] = entity; - context.graph().parentWays(entity).forEach(function(entity) { - addChildVertices(entity); - }); - } else if (entity) { - addChildVertices(entity); - } - }); + var s = projection.scale() * 2 * Math.PI, + z = Math.max(Math.log(s) / Math.log(2) - 8, 0), + ts = 256 * Math.pow(2, z - tileZoom), + origin = [ + s / 2 - projection.translate()[0], + s / 2 - projection.translate()[1]]; - return vertices; - } + var tiles = d3.geo.tile() + .scaleExtent([tileZoom, tileZoom]) + .scale(s) + .size(dimensions) + .translate(projection.translate())() + .map(function(tile) { + var x = tile[0] * ts - origin[0], + y = tile[1] * ts - origin[1]; - function draw(groups, vertices, klass, graph, zoom) { - groups = groups.data(vertices, function(entity) { - return iD.Entity.key(entity) + ',' + zoom; - }); + return { + id: tile.toString(), + extent: iD.geo.Extent( + projection.invert([x, y + ts]), + projection.invert([x + ts, y])) + }; + }); - if (zoom < 17) { - zoom = 0; - } else if (zoom < 18) { - zoom = 1; - } else { - zoom = 2; + function bboxUrl(tile) { + return url + '/api/0.6/map?bbox=' + tile.extent.toParam(); } - var icons = {}; - function icon(entity) { - if (entity.id in icons) return icons[entity.id]; - icons[entity.id] = zoom !== 0 && - entity.hasInterestingTags() && - context.presets().match(entity, graph).icon; - return icons[entity.id]; - } + _.filter(inflight, function(v, i) { + var wanted = _.find(tiles, function(tile) { + return i === tile.id; + }); + if (!wanted) delete inflight[i]; + return !wanted; + }).map(abortRequest); - function circle(klass) { - var rads = radiuses[klass]; - return function(entity) { - var i = icon(entity), - c = i ? 0.5 : 0, - r = rads[i ? 3 : zoom]; - this.setAttribute('class', 'node vertex ' + klass + ' ' + entity.id); - this.setAttribute('cx', c); - this.setAttribute('cy', -c); - this.setAttribute('r', r); - }; - } + tiles.forEach(function(tile) { + var id = tile.id; - var enter = groups.enter().append('g') - .attr('class', function(d) { return 'node vertex ' + klass + ' ' + d.id; }); + if (loadedTiles[id] || inflight[id]) return; - enter.append('circle') - .each(circle('shadow')); + if (_.isEmpty(inflight)) { + event.loading(); + } - enter.append('circle') - .each(circle('stroke')); + inflight[id] = connection.loadFromURL(bboxUrl(tile), function(err, parsed) { + loadedTiles[id] = true; + delete inflight[id]; - // Vertices with icons get a `use`. - enter.filter(function(d) { return icon(d); }) - .append('use') - .attr('transform', 'translate(-6, -6)') - .attr('clip-path', 'url(#clip-square-12)') - .attr('xlink:href', function(d) { return '#maki-' + icon(d) + '-12'; }); + if (callback) callback(err, _.extend({data: parsed}, tile)); - // Vertices with tags get a `circle`. - enter.filter(function(d) { return !icon(d) && d.hasInterestingTags(); }) - .append('circle') - .each(circle('fill')); + if (_.isEmpty(inflight)) { + event.loaded(); + } + }); + }); + }; - groups - .attr('transform', iD.svg.PointTransform(projection)) - .classed('shared', function(entity) { return graph.isShared(entity); }); + connection.switch = function(options) { + url = options.url; + oauth.options(_.extend({ + loading: authenticating, + done: authenticated + }, options)); + event.auth(); + connection.flush(); + return connection; + }; - groups.exit() - .remove(); - } + connection.toggle = function(_) { + off = !_; + return connection; + }; - function drawVertices(surface, graph, entities, filter, extent, zoom) { - var selected = siblingAndChildVertices(context.selectedIDs(), graph, extent), - vertices = []; + connection.flush = function() { + userDetails = undefined; + _.forEach(inflight, abortRequest); + loadedTiles = {}; + inflight = {}; + return connection; + }; - for (var i = 0; i < entities.length; i++) { - var entity = entities[i]; + connection.loadedTiles = function(_) { + if (!arguments.length) return loadedTiles; + loadedTiles = _; + return connection; + }; - if (entity.geometry(graph) !== 'vertex') - continue; + connection.logout = function() { + userDetails = undefined; + oauth.logout(); + event.auth(); + return connection; + }; - if (entity.id in selected || - entity.hasInterestingTags() || - entity.isIntersection(graph)) { - vertices.push(entity); - } + connection.authenticate = function(callback) { + userDetails = undefined; + function done(err, res) { + event.auth(); + if (callback) callback(err, res); } + return oauth.authenticate(done); + }; - surface.select('.layer-hit').selectAll('g.vertex.vertex-persistent') - .filter(filter) - .call(draw, vertices, 'vertex-persistent', graph, zoom); + return d3.rebind(connection, event, 'on'); +}; +/* + iD.Difference represents the difference between two graphs. + It knows how to calculate the set of entities that were + created, modified, or deleted, and also contains the logic + for recursively extending a difference to the complete set + of entities that will require a redraw, taking into account + child and parent relationships. + */ +iD.Difference = function(base, head) { + var changes = {}, length = 0; - drawHover(surface, graph, extent, zoom); + function changed(h, b) { + return h !== b && !_.isEqual(_.omit(h, 'v'), _.omit(b, 'v')); } - function drawHover(surface, graph, extent, zoom) { - var hovered = hover ? siblingAndChildVertices([hover.id], graph, extent) : {}; + _.each(head.entities, function(h, id) { + var b = base.entities[id]; + if (changed(h, b)) { + changes[id] = {base: b, head: h}; + length++; + } + }); - surface.select('.layer-hit').selectAll('g.vertex.vertex-hover') - .call(draw, d3.values(hovered), 'vertex-hover', graph, zoom); - } + _.each(base.entities, function(b, id) { + var h = head.entities[id]; + if (!changes[id] && changed(h, b)) { + changes[id] = {base: b, head: h}; + length++; + } + }); + + function addParents(parents, result) { + for (var i = 0; i < parents.length; i++) { + var parent = parents[i]; - drawVertices.drawHover = function(surface, graph, _, extent, zoom) { - if (hover !== _) { - hover = _; - drawHover(surface, graph, extent, zoom); + if (parent.id in result) + continue; + + result[parent.id] = parent; + addParents(head.parentRelations(parent), result); } + } + + var difference = {}; + + difference.length = function() { + return length; }; - return drawVertices; -}; -iD.ui = function(context) { - function render(container) { - var map = context.map(); + difference.changes = function() { + return changes; + }; - if (iD.detect().opera) container.classed('opera', true); + difference.extantIDs = function() { + var result = []; + _.each(changes, function(change, id) { + if (change.head) result.push(id); + }); + return result; + }; - var hash = iD.behavior.Hash(context); + difference.modified = function() { + var result = []; + _.each(changes, function(change) { + if (change.base && change.head) result.push(change.head); + }); + return result; + }; - hash(); + difference.created = function() { + var result = []; + _.each(changes, function(change) { + if (!change.base && change.head) result.push(change.head); + }); + return result; + }; - if (!hash.hadHash) { - map.centerZoom([-77.02271, 38.90085], 20); - } + difference.deleted = function() { + var result = []; + _.each(changes, function(change) { + if (change.base && !change.head) result.push(change.base); + }); + return result; + }; - container.append('div') - .attr('id', 'sidebar') - .attr('class', 'col4') - .call(ui.sidebar); + difference.summary = function() { + var relevant = {}; - var content = container.append('div') - .attr('id', 'content'); + function addEntity(entity, graph, changeType) { + relevant[entity.id] = { + entity: entity, + graph: graph, + changeType: changeType + }; + } - var bar = content.append('div') - .attr('id', 'bar') - .attr('class', 'fillD'); + function addParents(entity) { + var parents = head.parentWays(entity); + for (var j = parents.length - 1; j >= 0; j--) { + var parent = parents[j]; + if (!(parent.id in relevant)) addEntity(parent, head, 'modified'); + } + } - var m = content.append('div') - .attr('id', 'map') - .call(map); + _.each(changes, function(change) { + if (change.head && change.head.geometry(head) !== 'vertex') { + addEntity(change.head, head, change.base ? 'modified' : 'created'); - bar.append('div') - .attr('class', 'spacer col4'); + } else if (change.base && change.base.geometry(base) !== 'vertex') { + addEntity(change.base, base, 'deleted'); - var limiter = bar.append('div') - .attr('class', 'limiter'); + } else if (change.base && change.head) { // modified vertex + var moved = !_.isEqual(change.base.loc, change.head.loc), + retagged = !_.isEqual(change.base.tags, change.head.tags); - limiter.append('div') - .attr('class', 'button-wrap joined col3') - .call(iD.ui.Modes(context), limiter); + if (moved) { + addParents(change.head); + } - limiter.append('div') - .attr('class', 'button-wrap joined col1') - .call(iD.ui.UndoRedo(context)); + if (retagged || (moved && change.head.hasInterestingTags())) { + addEntity(change.head, head, 'modified'); + } - limiter.append('div') - .attr('class', 'button-wrap col1') - .call(iD.ui.Save(context)); + } else if (change.head && change.head.hasInterestingTags()) { // created vertex + addEntity(change.head, head, 'created'); - bar.append('div') - .attr('class', 'spinner') - .call(iD.ui.Spinner(context)); + } else if (change.base && change.base.hasInterestingTags()) { // deleted vertex + addEntity(change.base, base, 'deleted'); + } + }); - content - .call(iD.ui.Attribution(context)); + return d3.values(relevant); + }; - content.append('div') - .style('display', 'none') - .attr('class', 'help-wrap map-overlay fillL col5 content'); + difference.complete = function(extent) { + var result = {}, id, change; - var controls = bar.append('div') - .attr('class', 'map-controls'); + for (id in changes) { + change = changes[id]; - controls.append('div') - .attr('class', 'map-control zoombuttons') - .call(iD.ui.Zoom(context)); + var h = change.head, + b = change.base, + entity = h || b; - controls.append('div') - .attr('class', 'map-control geolocate-control') - .call(iD.ui.Geolocate(map)); + if (extent && + (!h || !h.intersects(extent, head)) && + (!b || !b.intersects(extent, base))) + continue; - controls.append('div') - .attr('class', 'map-control background-control') - .call(iD.ui.Background(context)); + result[id] = h; - controls.append('div') - .attr('class', 'map-control help-control') - .call(iD.ui.Help(context)); + if (entity.type === 'way') { + var nh = h ? h.nodes : [], + nb = b ? b.nodes : [], + diff, i; - var about = content.append('div') - .attr('class','col12 about-block fillD'); + diff = _.difference(nh, nb); + for (i = 0; i < diff.length; i++) { + result[diff[i]] = head.hasEntity(diff[i]); + } - about.append('div') - .attr('class', 'api-status') - .call(iD.ui.Status(context)); + diff = _.difference(nb, nh); + for (i = 0; i < diff.length; i++) { + result[diff[i]] = head.hasEntity(diff[i]); + } + } - if (!context.embed()) { - about.append('div') - .attr('class', 'account') - .call(iD.ui.Account(context)); + addParents(head.parentWays(entity), result); + addParents(head.parentRelations(entity), result); } - var linkList = about.append('ul') - .attr('id', 'about') - .attr('class', 'link-list'); + return result; + }; - linkList.append('li') - .append('a') - .attr('target', '_blank') - .attr('tabindex', -1) - .attr('href', 'http://github.com/openstreetmap/iD') - .text(iD.version); + return difference; +}; +iD.Entity = function(attrs) { + // For prototypal inheritance. + if (this instanceof iD.Entity) return; - var bugReport = linkList.append('li') - .append('a') - .attr('target', '_blank') - .attr('tabindex', -1) - .attr('href', 'https://github.com/openstreetmap/iD/issues'); + // Create the appropriate subtype. + if (attrs && attrs.type) { + return iD.Entity[attrs.type].apply(this, arguments); + } else if (attrs && attrs.id) { + return iD.Entity[iD.Entity.id.type(attrs.id)].apply(this, arguments); + } - bugReport.append('span') - .attr('class','icon bug light'); + // Initialize a generic Entity (used only in tests). + return (new iD.Entity()).initialize(arguments); +}; - bugReport.call(bootstrap.tooltip() - .title(t('report_a_bug')) - .placement('top') - ); +iD.Entity.id = function(type) { + return iD.Entity.id.fromOSM(type, iD.Entity.id.next[type]--); +}; - linkList.append('li') - .attr('class', 'user-list') - .attr('tabindex', -1) - .call(iD.ui.Contributors(context)); +iD.Entity.id.next = {node: -1, way: -1, relation: -1}; - window.onbeforeunload = function() { - return context.save(); - }; +iD.Entity.id.fromOSM = function(type, id) { + return type[0] + id; +}; - window.onunload = function() { - context.history().unlock(); - }; +iD.Entity.id.toOSM = function(id) { + return id.slice(1); +}; - d3.select(window).on('resize.editor', function() { - map.dimensions(m.dimensions()); - }); +iD.Entity.id.type = function(id) { + return {'n': 'node', 'w': 'way', 'r': 'relation'}[id[0]]; +}; - function pan(d) { - return function() { - context.pan(d); - }; - } +// A function suitable for use as the second argument to d3.selection#data(). +iD.Entity.key = function(entity) { + return entity.id + 'v' + (entity.v || 0); +}; - // pan amount - var pa = 5; +iD.Entity.prototype = { + tags: {}, - var keybinding = d3.keybinding('main') - .on('⌫', function() { d3.event.preventDefault(); }) - .on('←', pan([pa, 0])) - .on('↑', pan([0, pa])) - .on('→', pan([-pa, 0])) - .on('↓', pan([0, -pa])); + initialize: function(sources) { + for (var i = 0; i < sources.length; ++i) { + var source = sources[i]; + for (var prop in source) { + if (Object.prototype.hasOwnProperty.call(source, prop)) { + if (source[prop] === undefined) { + delete this[prop]; + } else { + this[prop] = source[prop]; + } + } + } + } - d3.select(document) - .call(keybinding); + if (!this.id && this.type) { + this.id = iD.Entity.id(this.type); + } + if (!this.hasOwnProperty('visible')) { + this.visible = true; + } - context.enter(iD.modes.Browse(context)); + if (iD.debug) { + Object.freeze(this); + Object.freeze(this.tags); - context.container() - .call(iD.ui.Splash(context)) - .call(iD.ui.Restore(context)); + if (this.loc) Object.freeze(this.loc); + if (this.nodes) Object.freeze(this.nodes); + if (this.members) Object.freeze(this.members); + } - var authenticating = iD.ui.Loading(context) - .message(t('loading_auth')); + return this; + }, - context.connection() - .on('authenticating.ui', function() { - context.container() - .call(authenticating); - }) - .on('authenticated.ui', function() { - authenticating.close(); - }); - } + copy: function(resolver, copies) { + if (copies[this.id]) + return copies[this.id]; - function ui(container) { - context.container(container); - context.loadLocale(function() { - render(container); - }); - } + var copy = iD.Entity(this, {id: undefined, user: undefined, version: undefined}); + copies[this.id] = copy; - ui.sidebar = iD.ui.Sidebar(context); + return copy; + }, - return ui; -}; + osmId: function() { + return iD.Entity.id.toOSM(this.id); + }, -iD.ui.tooltipHtml = function(text, key) { - return '' + text + '' + '
    ' + ' ' + (t('tooltip_keyhint')) + ' ' + ' ' + key + '
    '; -}; -iD.ui.Account = function(context) { - var connection = context.connection(); + isNew: function() { + return this.osmId() < 0; + }, - function update(selection) { - if (!connection.authenticated()) { - selection.html('') - .style('display', 'none'); - return; - } + update: function(attrs) { + return iD.Entity(this, attrs, {v: 1 + (this.v || 0)}); + }, - selection.style('display', 'block'); + mergeTags: function(tags) { + var merged = _.clone(this.tags), changed = false; + for (var k in tags) { + var t1 = merged[k], + t2 = tags[k]; + if (!t1) { + changed = true; + merged[k] = t2; + } else if (t1 !== t2) { + changed = true; + merged[k] = _.union(t1.split(/;\s*/), t2.split(/;\s*/)).join(';'); + } + } + return changed ? this.update({tags: merged}) : this; + }, - connection.userDetails(function(err, details) { - selection.html(''); + intersects: function(extent, resolver) { + return this.extent(resolver).intersects(extent); + }, - if (err) return; + isUsed: function(resolver) { + return _.without(Object.keys(this.tags), 'area').length > 0 || + resolver.parentRelations(this).length > 0; + }, - // Link - var userLink = selection.append('a') - .attr('href', connection.userURL(details.display_name)) - .attr('target', '_blank'); + hasInterestingTags: function() { + return _.keys(this.tags).some(iD.interestingTag); + }, - // Add thumbnail or dont - if (details.image_url) { - userLink.append('img') - .attr('class', 'icon icon-pre-text user-icon') - .attr('src', details.image_url); - } else { - userLink.append('span') - .attr('class', 'icon avatar light icon-pre-text'); - } + isHighwayIntersection: function() { + return false; + }, - // Add user name - userLink.append('span') - .attr('class', 'label') - .text(details.display_name); + deprecatedTags: function() { + var tags = _.pairs(this.tags); + var deprecated = {}; - selection.append('a') - .attr('class', 'logout') - .attr('href', '#') - .text(t('logout')) - .on('click.logout', function() { - d3.event.preventDefault(); - connection.logout(); - }); + iD.data.deprecated.forEach(function(d) { + var match = _.pairs(d.old)[0]; + tags.forEach(function(t) { + if (t[0] === match[0] && + (t[1] === match[1] || match[1] === '*')) { + deprecated[t[0]] = t[1]; + } + }); }); - } - return function(selection) { - connection.on('auth', function() { update(selection); }); - update(selection); - }; + return deprecated; + } }; -iD.ui.Attribution = function(context) { - var selection; +iD.Graph = function(other, mutable) { + if (!(this instanceof iD.Graph)) return new iD.Graph(other, mutable); - function attribution(data, klass) { - var div = selection.selectAll('.' + klass) - .data([0]); + if (other instanceof iD.Graph) { + var base = other.base(); + this.entities = _.assign(Object.create(base.entities), other.entities); + this._parentWays = _.assign(Object.create(base.parentWays), other._parentWays); + this._parentRels = _.assign(Object.create(base.parentRels), other._parentRels); - div.enter() - .append('div') - .attr('class', klass); + } else { + this.entities = Object.create({}); + this._parentWays = Object.create({}); + this._parentRels = Object.create({}); + this.rebase(other || [], [this]); + } - var background = div.selectAll('.attribution') - .data(data, function(d) { return d.name(); }); + this.transients = {}; + this._childNodes = {}; + this.frozen = !mutable; +}; - background.enter() - .append('span') - .attr('class', 'attribution') - .each(function(d) { - if (d.terms_html) { - d3.select(this) - .html(d.terms_html); - return; - } +iD.Graph.prototype = { + hasEntity: function(id) { + return this.entities[id]; + }, - var source = d.terms_text || d.id || d.name(); + entity: function(id) { + var entity = this.entities[id]; + if (!entity) { + throw new Error('entity ' + id + ' not found'); + } + return entity; + }, - if (d.logo) { - source = ''; - } + transient: function(entity, key, fn) { + var id = entity.id, + transients = this.transients[id] || + (this.transients[id] = {}); - if (d.terms_url) { - d3.select(this) - .append('a') - .attr('href', d.terms_url) - .attr('target', '_blank') - .html(source); - } else { - d3.select(this) - .text(source); - } - }); + if (transients[key] !== undefined) { + return transients[key]; + } - background.exit() - .remove(); + transients[key] = fn.call(entity); - var copyright = background.selectAll('.copyright-notice') - .data(function(d) { - var notice = d.copyrightNotices(context.map().zoom(), context.map().extent()); - return notice ? [notice] : []; - }); + return transients[key]; + }, - copyright.enter() - .append('span') - .attr('class', 'copyright-notice'); + parentWays: function(entity) { + var parents = this._parentWays[entity.id], + result = []; - copyright.text(String); + if (parents) { + for (var i = 0; i < parents.length; i++) { + result.push(this.entity(parents[i])); + } + } + return result; + }, - copyright.exit() - .remove(); - } + isPoi: function(entity) { + var parentWays = this._parentWays[entity.id]; + return !parentWays || parentWays.length === 0; + }, - function update() { - attribution([context.background().baseLayerSource()], 'base-layer-attribution'); - attribution(context.background().overlayLayerSources().filter(function (s) { - return s.validZoom(context.map().zoom()); - }), 'overlay-layer-attribution'); - } + isShared: function(entity) { + var parentWays = this._parentWays[entity.id]; + return parentWays && parentWays.length > 1; + }, - return function(select) { - selection = select; + parentRelations: function(entity) { + var parents = this._parentRels[entity.id], + result = []; - context.background() - .on('change.attribution', update); + if (parents) { + for (var i = 0; i < parents.length; i++) { + result.push(this.entity(parents[i])); + } + } + return result; + }, - context.map() - .on('move.attribution', _.throttle(update, 400, {leading: false})); + childNodes: function(entity) { + if (this._childNodes[entity.id]) return this._childNodes[entity.id]; + if (!entity.nodes) return []; - update(); - }; -}; -iD.ui.Background = function(context) { - var key = 'b', - opacities = [1, 0.75, 0.5, 0.25], - directions = [ - ['left', [1, 0]], - ['top', [0, -1]], - ['right', [-1, 0]], - ['bottom', [0, 1]]], - opacityDefault = (context.storage('background-opacity') !== null) ? - (+context.storage('background-opacity')) : 0.5; + var nodes = []; + for (var i = 0; i < entity.nodes.length; i++) { + nodes[i] = this.entity(entity.nodes[i]); + } - // Can be 0 from <1.3.0 use or due to issue #1923. - if (opacityDefault === 0) opacityDefault = 0.5; + if (iD.debug) Object.freeze(nodes); - function background(selection) { + this._childNodes[entity.id] = nodes; + return this._childNodes[entity.id]; + }, - function setOpacity(d) { - var bg = context.container().selectAll('.background-layer') - .transition() - .style('opacity', d) - .attr('data-opacity', d); + base: function() { + return { + 'entities': iD.util.getPrototypeOf(this.entities), + 'parentWays': iD.util.getPrototypeOf(this._parentWays), + 'parentRels': iD.util.getPrototypeOf(this._parentRels) + }; + }, - if (!iD.detect().opera) { - iD.util.setTransform(bg, 0, 0); - } + // Unlike other graph methods, rebase mutates in place. This is because it + // is used only during the history operation that merges newly downloaded + // data into each state. To external consumers, it should appear as if the + // graph always contained the newly downloaded data. + rebase: function(entities, stack, force) { + var base = this.base(), + i, j, k, id; - opacityList.selectAll('li') - .classed('active', function(_) { return _ === d; }); + for (i = 0; i < entities.length; i++) { + var entity = entities[i]; - context.storage('background-opacity', d); - } + if (!entity.visible || (!force && base.entities[entity.id])) + continue; - function selectLayer() { - function active(d) { - return context.background().showsLayer(d); - } + // Merging data into the base graph + base.entities[entity.id] = entity; + this._updateCalculated(undefined, entity, base.parentWays, base.parentRels); - content.selectAll('.layer, .custom_layer') - .classed('active', active) - .selectAll('input') - .property('checked', active); + // Restore provisionally-deleted nodes that are discovered to have an extant parent + if (entity.type === 'way') { + for (j = 0; j < entity.nodes.length; j++) { + id = entity.nodes[j]; + for (k = 1; k < stack.length; k++) { + var ents = stack[k].entities; + if (ents.hasOwnProperty(id) && ents[id] === undefined) { + delete ents[id]; + } + } + } + } } - function clickSetSource(d) { - d3.event.preventDefault(); - context.background().baseLayerSource(d); - selectLayer(); + for (i = 0; i < stack.length; i++) { + stack[i]._updateRebased(); } + }, - function clickCustom() { - d3.event.preventDefault(); - var template = window.prompt(t('background.custom_prompt')); - if (!template || template.indexOf('google.com') !== -1 || - template.indexOf('googleapis.com') !== -1 || - template.indexOf('google.ru') !== -1) { - selectLayer(); - return; + _updateRebased: function() { + var base = this.base(), + i, k, child, id, keys; + + keys = Object.keys(this._parentWays); + for (i = 0; i < keys.length; i++) { + child = keys[i]; + if (base.parentWays[child]) { + for (k = 0; k < base.parentWays[child].length; k++) { + id = base.parentWays[child][k]; + if (!this.entities.hasOwnProperty(id) && !_.contains(this._parentWays[child], id)) { + this._parentWays[child].push(id); + } + } } - context.background().baseLayerSource(iD.BackgroundSource.Custom(template)); - selectLayer(); } - function clickSetOverlay(d) { - d3.event.preventDefault(); - context.background().toggleOverlayLayer(d); - selectLayer(); + keys = Object.keys(this._parentRels); + for (i = 0; i < keys.length; i++) { + child = keys[i]; + if (base.parentRels[child]) { + for (k = 0; k < base.parentRels[child].length; k++) { + id = base.parentRels[child][k]; + if (!this.entities.hasOwnProperty(id) && !_.contains(this._parentRels[child], id)) { + this._parentRels[child].push(id); + } + } + } } - function clickGpx() { - context.background().toggleGpxLayer(); - update(); - } + this.transients = {}; - function drawList(layerList, type, change, filter) { - var sources = context.background() - .sources(context.map().extent()) - .filter(filter); + // this._childNodes is not updated, under the assumption that + // ways are always downloaded with their child nodes. + }, - var layerLinks = layerList.selectAll('li.layer') - .data(sources, function(d) { return d.name(); }); + // Updates calculated properties (parentWays, parentRels) for the specified change + _updateCalculated: function(oldentity, entity, parentWays, parentRels) { - var enter = layerLinks.enter() - .insert('li', '.custom_layer') - .attr('class', 'layer'); + parentWays = parentWays || this._parentWays; + parentRels = parentRels || this._parentRels; - // only set tooltips for layers with tooltips - enter.filter(function(d) { return d.description; }) - .call(bootstrap.tooltip() - .title(function(d) { return d.description; }) - .placement('top')); + var type = entity && entity.type || oldentity && oldentity.type, + removed, added, ways, rels, i; - var label = enter.append('label'); - label.append('input') - .attr('type', type) - .attr('name', 'layers') - .on('change', change); + if (type === 'way') { - label.append('span') - .text(function(d) { return d.name(); }); + // Update parentWays + if (oldentity && entity) { + removed = _.difference(oldentity.nodes, entity.nodes); + added = _.difference(entity.nodes, oldentity.nodes); + } else if (oldentity) { + removed = oldentity.nodes; + added = []; + } else if (entity) { + removed = []; + added = entity.nodes; + } + for (i = 0; i < removed.length; i++) { + parentWays[removed[i]] = _.without(parentWays[removed[i]], oldentity.id); + } + for (i = 0; i < added.length; i++) { + ways = _.without(parentWays[added[i]], entity.id); + ways.push(entity.id); + parentWays[added[i]] = ways; + } - layerLinks.exit() - .remove(); + } else if (type === 'relation') { - layerList.style('display', layerList.selectAll('li.layer').data().length > 0 ? 'block' : 'none'); + // Update parentRels + if (oldentity && entity) { + removed = _.difference(oldentity.members, entity.members); + added = _.difference(entity.members, oldentity); + } else if (oldentity) { + removed = oldentity.members; + added = []; + } else if (entity) { + removed = []; + added = entity.members; + } + for (i = 0; i < removed.length; i++) { + parentRels[removed[i].id] = _.without(parentRels[removed[i].id], oldentity.id); + } + for (i = 0; i < added.length; i++) { + rels = _.without(parentRels[added[i].id], entity.id); + rels.push(entity.id); + parentRels[added[i].id] = rels; + } } + }, - function update() { - backgroundList.call(drawList, 'radio', clickSetSource, function(d) { return !d.overlay; }); - overlayList.call(drawList, 'checkbox', clickSetOverlay, function(d) { return d.overlay; }); + replace: function(entity) { + if (this.entities[entity.id] === entity) + return this; - var hasGpx = context.background().hasGpxLayer(), - showsGpx = context.background().showsGpxLayer(); + return this.update(function() { + this._updateCalculated(this.entities[entity.id], entity); + this.entities[entity.id] = entity; + }); + }, - gpxLayerItem - .classed('active', showsGpx) - .selectAll('input') - .property('disabled', !hasGpx) - .property('checked', showsGpx); + remove: function(entity) { + return this.update(function() { + this._updateCalculated(entity, undefined); + this.entities[entity.id] = undefined; + }); + }, - selectLayer(); - } + revert: function(id) { + var baseEntity = this.base().entities[id], + headEntity = this.entities[id]; - function clickNudge(d) { + if (headEntity === baseEntity) + return this; - var timeout = window.setTimeout(function() { - interval = window.setInterval(nudge, 100); - }, 500), - interval; + return this.update(function() { + this._updateCalculated(headEntity, baseEntity); + delete this.entities[id]; + }); + }, - d3.select(this).on('mouseup', function() { - window.clearInterval(interval); - window.clearTimeout(timeout); - nudge(); - }); + update: function() { + var graph = this.frozen ? iD.Graph(this, true) : this; - function nudge() { - var offset = context.background() - .nudge(d[1], context.map().zoom()) - .offset(); - resetButton.classed('disabled', offset[0] === 0 && offset[1] === 0); - } + for (var i = 0; i < arguments.length; i++) { + arguments[i].call(graph, graph); } - var content = selection.append('div') - .attr('class', 'fillL map-overlay col3 content hide'), - tooltip = bootstrap.tooltip() - .placement('left') - .html(true) - .title(iD.ui.tooltipHtml(t('background.description'), key)); + if (this.frozen) graph.frozen = true; - function hide() { setVisible(false); } - - function toggle() { - if (d3.event) d3.event.preventDefault(); - tooltip.hide(button); - setVisible(!button.classed('active')); - } + return graph; + }, - function setVisible(show) { - if (show !== shown) { - button.classed('active', show); - shown = show; + // Obliterates any existing entities + load: function(entities) { + var base = this.base(); + this.entities = Object.create(base.entities); - if (show) { - selection.on('mousedown.background-inside', function() { - return d3.event.stopPropagation(); - }); - content.style('display', 'block') - .style('right', '-300px') - .transition() - .duration(200) - .style('right', '0px'); - } else { - content.style('display', 'block') - .style('right', '0px') - .transition() - .duration(200) - .style('right', '-300px') - .each('end', function() { - d3.select(this).style('display', 'none'); - }); - selection.on('mousedown.background-inside', null); - } - } + for (var i in entities) { + this.entities[i] = entities[i]; + this._updateCalculated(base.entities[i], this.entities[i]); } - var button = selection.append('button') - .attr('tabindex', -1) - .on('click', toggle) - .call(tooltip), - opa = content - .append('div') - .attr('class', 'opacity-options-wrapper'), - shown = false; + return this; + } +}; +iD.History = function(context) { + var stack, index, tree, + imageryUsed = ['Bing'], + dispatch = d3.dispatch('change', 'undone', 'redone'), + lock = iD.util.SessionMutex('lock'); - button.append('span') - .attr('class', 'icon layers light'); + function perform(actions) { + actions = Array.prototype.slice.call(actions); - opa.append('h4') - .text(t('background.title')); + var annotation; - var opacityList = opa.append('ul') - .attr('class', 'opacity-options'); + if (!_.isFunction(_.last(actions))) { + annotation = actions.pop(); + } - opacityList.selectAll('div.opacity') - .data(opacities) - .enter() - .append('li') - .attr('data-original-title', function(d) { - return t('background.percent_brightness', { opacity: (d * 100) }); - }) - .on('click.set-opacity', setOpacity) - .html('
    ') - .call(bootstrap.tooltip() - .placement('left')) - .append('div') - .attr('class', 'opacity') - .style('opacity', String); + var graph = stack[index].graph; + for (var i = 0; i < actions.length; i++) { + graph = actions[i](graph); + } - var backgroundList = content.append('ul') - .attr('class', 'layer-list'); + return { + graph: graph, + annotation: annotation, + imageryUsed: imageryUsed + }; + } - var custom = backgroundList.append('li') - .attr('class', 'custom_layer') - .datum(iD.BackgroundSource.Custom()); + function change(previous) { + var difference = iD.Difference(previous, history.graph()); + dispatch.change(difference); + return difference; + } - var label = custom.append('label'); + // iD uses namespaced keys so multiple installations do not conflict + function getKey(n) { + return 'iD_' + window.location.origin + '_' + n; + } - label.append('input') - .attr('type', 'radio') - .attr('name', 'layers') - .on('change', clickCustom); + var history = { + graph: function() { + return stack[index].graph; + }, - label.append('span') - .text(t('background.custom')); + base: function() { + return stack[0].graph; + }, - var overlayList = content.append('ul') - .attr('class', 'layer-list'); + merge: function(entities, extent) { + stack[0].graph.rebase(entities, _.pluck(stack, 'graph'), false); + tree.rebase(entities, false); - var gpxLayerItem = content.append('ul') - .style('display', iD.detect().filedrop ? 'block' : 'none') - .attr('class', 'layer-list') - .append('li') - .classed('layer-toggle-gpx', true); + dispatch.change(undefined, extent); + }, - gpxLayerItem.append('button') - .attr('class', 'layer-extent') - .call(bootstrap.tooltip() - .title(t('gpx.zoom')) - .placement('left')) - .on('click', function() { - d3.event.preventDefault(); - d3.event.stopPropagation(); - context.background().zoomToGpxLayer(); - }) - .append('span') - .attr('class', 'icon geolocate'); + perform: function() { + var previous = stack[index].graph; - gpxLayerItem.append('button') - .attr('class', 'layer-browse') - .call(bootstrap.tooltip() - .title(t('gpx.browse')) - .placement('left')) - .on('click', function() { - d3.select(document.createElement('input')) - .attr('type', 'file') - .on('change', function() { - context.background().gpxLayerFiles(d3.event.target.files); - }) - .node().click(); - }) - .append('span') - .attr('class', 'icon geocode'); + stack = stack.slice(0, index + 1); + stack.push(perform(arguments)); + index++; - label = gpxLayerItem.append('label') - .call(bootstrap.tooltip() - .title(t('gpx.drag_drop')) - .placement('top')); + return change(previous); + }, - label.append('input') - .attr('type', 'checkbox') - .property('disabled', true) - .on('change', clickGpx); + replace: function() { + var previous = stack[index].graph; - label.append('span') - .text(t('gpx.local_layer')); + // assert(index == stack.length - 1) + stack[index] = perform(arguments); - var adjustments = content.append('div') - .attr('class', 'adjustments'); + return change(previous); + }, - adjustments.append('a') - .text(t('background.fix_misalignment')) - .attr('href', '#') - .classed('hide-toggle', true) - .classed('expanded', false) - .on('click', function() { - var exp = d3.select(this).classed('expanded'); - nudgeContainer.style('display', exp ? 'none' : 'block'); - d3.select(this).classed('expanded', !exp); - d3.event.preventDefault(); - }); + pop: function() { + var previous = stack[index].graph; - var nudgeContainer = adjustments.append('div') - .attr('class', 'nudge-container cf') - .style('display', 'none'); + if (index > 0) { + index--; + stack.pop(); + return change(previous); + } + }, - nudgeContainer.selectAll('button') - .data(directions).enter() - .append('button') - .attr('class', function(d) { return d[0] + ' nudge'; }) - .on('mousedown', clickNudge); + // Same as calling pop and then perform + overwrite: function() { + var previous = stack[index].graph; - var resetButton = nudgeContainer.append('button') - .attr('class', 'reset disabled') - .on('click', function () { - context.background().offset([0, 0]); - resetButton.classed('disabled', true); - }); + if (index > 0) { + index--; + stack.pop(); + } + stack = stack.slice(0, index + 1); + stack.push(perform(arguments)); + index++; - resetButton.append('div') - .attr('class', 'icon undo'); + return change(previous); + }, - context.map() - .on('move.background-update', _.debounce(update, 1000)); - update(); - setOpacity(opacityDefault); + undo: function() { + var previous = stack[index].graph; - var keybinding = d3.keybinding('background'); - keybinding.on(key, toggle); + // Pop to the next annotated state. + while (index > 0) { + index--; + if (stack[index].annotation) break; + } - d3.select(document) - .call(keybinding); + dispatch.undone(); + return change(previous); + }, - context.surface().on('mousedown.background-outside', hide); - context.container().on('mousedown.background-outside', hide); - } + redo: function() { + var previous = stack[index].graph; - return background; -}; -// Translate a MacOS key command into the appropriate Windows/Linux equivalent. -// For example, ⌘Z -> Ctrl+Z -iD.ui.cmd = function(code) { - if (iD.detect().os === 'mac') - return code; + while (index < stack.length - 1) { + index++; + if (stack[index].annotation) break; + } - var replacements = { - '⌘': 'Ctrl', - '⇧': 'Shift', - '⌥': 'Alt', - '⌫': 'Backspace', - '⌦': 'Delete' - }, keys = []; + dispatch.redone(); + return change(previous); + }, - if (iD.detect().os === 'win') { - if (code === '⌘⇧Z') return 'Ctrl+Y'; - } + undoAnnotation: function() { + var i = index; + while (i >= 0) { + if (stack[i].annotation) return stack[i].annotation; + i--; + } + }, - for (var i = 0; i < code.length; i++) { - if (code[i] in replacements) { - keys.push(replacements[code[i]]); - } else { - keys.push(code[i]); - } - } + redoAnnotation: function() { + var i = index + 1; + while (i <= stack.length - 1) { + if (stack[i].annotation) return stack[i].annotation; + i++; + } + }, - return keys.join('+'); -}; -iD.ui.Commit = function(context) { - var event = d3.dispatch('cancel', 'save'); + intersects: function(extent) { + return tree.intersects(extent, stack[index].graph); + }, - function commit(selection) { - var changes = context.history().changes(), - summary = context.history().difference().summary(); + difference: function() { + var base = stack[0].graph, + head = stack[index].graph; + return iD.Difference(base, head); + }, - function zoomToEntity(change) { - var entity = change.entity; - if (change.changeType !== 'deleted' && - context.graph().entity(entity.id).geometry(context.graph()) !== 'vertex') { - context.map().zoomTo(entity); - context.surface().selectAll( - iD.util.entityOrMemberSelector([entity.id], context.graph())) - .classed('hover', true); + changes: function(action) { + var base = stack[0].graph, + head = stack[index].graph; + + if (action) { + head = action(head); } - } - var header = selection.append('div') - .attr('class', 'header fillL'); + var difference = iD.Difference(base, head); - header.append('button') - .attr('class', 'fr') - .on('click', event.cancel) - .append('span') - .attr('class', 'icon close'); + return { + modified: difference.modified(), + created: difference.created(), + deleted: difference.deleted() + }; + }, - header.append('h3') - .text(t('commit.title')); + validate: function(changes) { + return _(iD.validations) + .map(function(fn) { return fn()(changes, stack[index].graph); }) + .flatten() + .value(); + }, - var body = selection.append('div') - .attr('class', 'body'); + hasChanges: function() { + return this.difference().length() > 0; + }, - // Comment Section - var commentSection = body.append('div') - .attr('class', 'modal-section form-field commit-form'); + imageryUsed: function(sources) { + if (sources) { + imageryUsed = sources; + return history; + } else { + return _(stack.slice(1, index + 1)) + .pluck('imageryUsed') + .flatten() + .unique() + .without(undefined, 'Custom') + .value(); + } + }, - commentSection.append('label') - .attr('class', 'form-label') - .text(t('commit.message_label')); + reset: function() { + stack = [{graph: iD.Graph()}]; + index = 0; + tree = iD.Tree(stack[0].graph); + dispatch.change(); + return history; + }, - var commentField = commentSection.append('textarea') - .attr('placeholder', t('commit.description_placeholder')) - .property('value', context.storage('comment') || '') - .on('blur.save', function () { - context.storage('comment', this.value); - }); + toJSON: function() { + if (!this.hasChanges()) return; - commentField.node().select(); + var allEntities = {}, + baseEntities = {}, + base = stack[0]; - // Warnings - var warnings = body.selectAll('div.warning-section') - .data([iD.validate(changes, context.graph())]) - .enter() - .append('div') - .attr('class', 'modal-section warning-section fillL2') - .style('display', function(d) { return _.isEmpty(d) ? 'none' : null; }) - .style('background', '#ffb'); + var s = stack.map(function(i) { + var modified = [], deleted = []; - warnings.append('h3') - .text(t('commit.warnings')); + _.forEach(i.graph.entities, function(entity, id) { + if (entity) { + var key = iD.Entity.key(entity); + allEntities[key] = entity; + modified.push(key); + } else { + deleted.push(id); + } - var warningLi = warnings.append('ul') - .attr('class', 'changeset-list') - .selectAll('li') - .data(function(d) { return d; }) - .enter() - .append('li') - .style() - .on('mouseover', mouseover) - .on('mouseout', mouseout) - .on('click', warningClick); + // make sure that the originals of changed or deleted entities get merged + // into the base of the stack after restoring the data from JSON. + if (id in base.graph.entities) { + baseEntities[id] = base.graph.entities[id]; + } + // get originals of parent entities too + _.forEach(base.graph._parentWays[id], function(parentId) { + if (parentId in base.graph.entities) { + baseEntities[parentId] = base.graph.entities[parentId]; + } + }); + }); - warningLi.append('span') - .attr('class', 'alert icon icon-pre-text'); + var x = {}; - warningLi.append('strong').text(function(d) { - return d.message; - }); + if (modified.length) x.modified = modified; + if (deleted.length) x.deleted = deleted; + if (i.imageryUsed) x.imageryUsed = i.imageryUsed; + if (i.annotation) x.annotation = i.annotation; - warningLi.filter(function(d) { return d.tooltip; }) - .call(bootstrap.tooltip() - .title(function(d) { return d.tooltip; }) - .placement('top') - ); + return x; + }); - // Save Section - var saveSection = body.append('div') - .attr('class','modal-section fillL cf'); + return JSON.stringify({ + version: 3, + entities: _.values(allEntities), + baseEntities: _.values(baseEntities), + stack: s, + nextIDs: iD.Entity.id.next, + index: index + }); + }, - var prose = saveSection.append('p') - .attr('class', 'commit-info') - .html(t('commit.upload_explanation')); + fromJSON: function(json, loadChildNodes) { + var h = JSON.parse(json), + loadComplete = true; - context.connection().userDetails(function(err, user) { - if (err) return; + iD.Entity.id.next = h.nextIDs; + index = h.index; - var userLink = d3.select(document.createElement('div')); + if (h.version === 2 || h.version === 3) { + var allEntities = {}; - if (user.image_url) { - userLink.append('img') - .attr('src', user.image_url) - .attr('class', 'icon icon-pre-text user-icon'); - } + h.entities.forEach(function(entity) { + allEntities[iD.Entity.key(entity)] = iD.Entity(entity); + }); - userLink.append('a') - .attr('class','user-info') - .text(user.display_name) - .attr('href', context.connection().userURL(user.display_name)) - .attr('tabindex', -1) - .attr('target', '_blank'); + if (h.version === 3) { + // This merges originals for changed entities into the base of + // the stack even if the current stack doesn't have them (for + // example when iD has been restarted in a different region) + var baseEntities = h.baseEntities.map(function(d) { return iD.Entity(d); }); + stack[0].graph.rebase(baseEntities, _.pluck(stack, 'graph'), true); + tree.rebase(baseEntities, true); + + // When we restore a modified way, we also need to fetch any missing + // childnodes that would normally have been downloaded with it.. #2142 + if (loadChildNodes) { + var missing = _(baseEntities) + .filter('type', 'way') + .pluck('nodes') + .flatten() + .uniq() + .reject(function(n) { return stack[0].graph.hasEntity(n); }) + .value(); + + if (!_.isEmpty(missing)) { + loadComplete = false; + context.redrawEnable(false); + + var loading = iD.ui.Loading(context).blocking(true); + context.container().call(loading); + + var childNodesLoaded = function(err, result) { + if (!err) { + var visible = _.groupBy(result.data, 'visible'); + if (!_.isEmpty(visible.true)) { + missing = _.difference(missing, _.pluck(visible.true, 'id')); + stack[0].graph.rebase(visible.true, _.pluck(stack, 'graph'), true); + tree.rebase(visible.true, true); + } + + // fetch older versions of nodes that were deleted.. + _.each(visible.false, function(entity) { + context.connection() + .loadEntityVersion(entity.id, +entity.version - 1, childNodesLoaded); + }); + } - prose.html(t('commit.upload_explanation_with_user', {user: userLink.html()})); - }); + if (err || _.isEmpty(missing)) { + loading.close(); + context.redrawEnable(true); + dispatch.change(); + } + }; - // Confirm Button - var saveButton = saveSection.append('button') - .attr('class', 'action col4 button') - .on('click.save', function() { - event.save({ - comment: commentField.node().value - }); - }); + context.connection().loadMultiple(missing, childNodesLoaded); + } + } + } - saveButton.append('span') - .attr('class', 'label') - .text(t('commit.save')); + stack = h.stack.map(function(d) { + var entities = {}, entity; - var changeSection = body.selectAll('div.commit-section') - .data([0]) - .enter() - .append('div') - .attr('class', 'commit-section modal-section fillL2'); + if (d.modified) { + d.modified.forEach(function(key) { + entity = allEntities[key]; + entities[entity.id] = entity; + }); + } - changeSection.append('h3') - .text(summary.length + ' Changes'); + if (d.deleted) { + d.deleted.forEach(function(id) { + entities[id] = undefined; + }); + } - var li = changeSection.append('ul') - .attr('class', 'changeset-list') - .selectAll('li') - .data(summary) - .enter() - .append('li') - .on('mouseover', mouseover) - .on('mouseout', mouseout) - .on('click', zoomToEntity); + return { + graph: iD.Graph(stack[0].graph).load(entities), + annotation: d.annotation, + imageryUsed: d.imageryUsed + }; + }); - li.append('span') - .attr('class', function(d) { - return d.entity.geometry(d.graph) + ' ' + d.changeType + ' icon icon-pre-text'; - }); + } else { // original version + stack = h.stack.map(function(d) { + var entities = {}; - li.append('span') - .attr('class', 'change-type') - .text(function(d) { - return d.changeType + ' '; - }); + for (var i in d.entities) { + var entity = d.entities[i]; + entities[i] = entity === 'undefined' ? undefined : iD.Entity(entity); + } - li.append('strong') - .attr('class', 'entity-type') - .text(function(d) { - return context.presets().match(d.entity, d.graph).name(); - }); + d.graph = iD.Graph(stack[0].graph).load(entities); + return d; + }); + } - li.append('span') - .attr('class', 'entity-name') - .text(function(d) { - var name = iD.util.displayName(d.entity) || '', - string = ''; - if (name !== '') string += ':'; - return string += ' ' + name; - }); + if (loadComplete) { + dispatch.change(); + } - li.style('opacity', 0) - .transition() - .style('opacity', 1); + return history; + }, - li.style('opacity', 0) - .transition() - .style('opacity', 1); - - function mouseover(d) { - if (d.entity) { - context.surface().selectAll( - iD.util.entityOrMemberSelector([d.entity.id], context.graph()) - ).classed('hover', true); - } - } + save: function() { + if (lock.locked()) context.storage(getKey('saved_history'), history.toJSON() || null); + return history; + }, - function mouseout() { - context.surface().selectAll('.hover') - .classed('hover', false); - } + clearSaved: function() { + context.debouncedSave.cancel(); + if (lock.locked()) context.storage(getKey('saved_history'), null); + return history; + }, - function warningClick(d) { - if (d.entity) { - context.map().zoomTo(d.entity); - context.enter( - iD.modes.Select(context, [d.entity.id]) - .suppressMenu(true)); - } - } - } + lock: function() { + return lock.lock(); + }, - return d3.rebind(commit, event, 'on'); -}; -iD.ui.confirm = function(selection) { - var modal = iD.ui.modal(selection); + unlock: function() { + lock.unlock(); + }, - modal.select('.modal') - .classed('modal-alert', true); + // is iD not open in another window and it detects that + // there's a history stored in localStorage that's recoverable? + restorableChanges: function() { + return lock.locked() && !!context.storage(getKey('saved_history')); + }, - var section = modal.select('.content'); + // load history from a version stored in localStorage + restore: function() { + if (!lock.locked()) return; - section.append('div') - .attr('class', 'modal-section header'); + var json = context.storage(getKey('saved_history')); + if (json) history.fromJSON(json, true); + }, - section.append('div') - .attr('class', 'modal-section message-text'); + _getKey: getKey - var buttonwrap = section.append('div') - .attr('class', 'modal-section buttons cf'); + }; - buttonwrap.append('button') - .attr('class', 'col2 action') - .on('click.confirm', function() { - modal.remove(); - }) - .text(t('confirm.okay')); + history.reset(); - return modal; + return d3.rebind(history, dispatch, 'on'); +}; +iD.Node = iD.Entity.node = function iD_Node() { + if (!(this instanceof iD_Node)) { + return (new iD_Node()).initialize(arguments); + } else if (arguments.length) { + this.initialize(arguments); + } }; -iD.ui.Contributors = function(context) { - function update(selection) { - var users = {}, - limit = 4, - entities = context.intersects(context.map().extent()); - entities.forEach(function(entity) { - if (entity && entity.user) users[entity.user] = true; - }); +iD.Node.prototype = Object.create(iD.Entity.prototype); - var u = Object.keys(users), - subset = u.slice(0, u.length > limit ? limit - 1 : limit); +_.extend(iD.Node.prototype, { + type: 'node', - selection.html('') - .append('span') - .attr('class', 'icon nearby light icon-pre-text'); + extent: function() { + return new iD.geo.Extent(this.loc); + }, - var userList = d3.select(document.createElement('span')); + geometry: function(graph) { + return graph.transient(this, 'geometry', function() { + return graph.isPoi(this) ? 'point' : 'vertex'; + }); + }, - userList.selectAll() - .data(subset) - .enter() - .append('a') - .attr('class', 'user-link') - .attr('href', function(d) { return context.connection().userURL(d); }) - .attr('target', '_blank') - .attr('tabindex', -1) - .text(String); + move: function(loc) { + return this.update({loc: loc}); + }, - if (u.length > limit) { - var count = d3.select(document.createElement('span')); + isIntersection: function(resolver) { + return resolver.transient(this, 'isIntersection', function() { + return resolver.parentWays(this).filter(function(parent) { + return (parent.tags.highway || + parent.tags.waterway || + parent.tags.railway || + parent.tags.aeroway) && + parent.geometry(resolver) === 'line'; + }).length > 1; + }); + }, - count.append('a') - .attr('target', '_blank') - .attr('tabindex', -1) - .attr('href', function() { - return context.connection().changesetsURL(context.map().center(), context.map().zoom()); - }) - .text(u.length - limit + 1); + isHighwayIntersection: function(resolver) { + return resolver.transient(this, 'isHighwayIntersection', function() { + return resolver.parentWays(this).filter(function(parent) { + return parent.tags.highway && parent.geometry(resolver) === 'line'; + }).length > 1; + }); + }, - selection.append('span') - .html(t('contributors.truncated_list', {users: userList.html(), count: count.html()})); - } else { - selection.append('span') - .html(t('contributors.list', {users: userList.html()})); - } + asJXON: function(changeset_id) { + var r = { + node: { + '@id': this.osmId(), + '@lon': this.loc[0], + '@lat': this.loc[1], + '@version': (this.version || 0), + tag: _.map(this.tags, function(v, k) { + return { keyAttributes: { k: k, v: v } }; + }) + } + }; + if (changeset_id) r.node['@changeset'] = changeset_id; + return r; + }, - if (!u.length) { - selection.transition().style('opacity', 0); - } else if (selection.style('opacity') === '0') { - selection.transition().style('opacity', 1); - } + asGeoJSON: function() { + return { + type: 'Point', + coordinates: this.loc + }; + } +}); +iD.Relation = iD.Entity.relation = function iD_Relation() { + if (!(this instanceof iD_Relation)) { + return (new iD_Relation()).initialize(arguments); + } else if (arguments.length) { + this.initialize(arguments); } +}; - return function(selection) { - update(selection); +iD.Relation.prototype = Object.create(iD.Entity.prototype); - context.connection().on('load.contributors', function() { - update(selection); - }); +iD.Relation.creationOrder = function(a, b) { + var aId = parseInt(iD.Entity.id.toOSM(a.id), 10); + var bId = parseInt(iD.Entity.id.toOSM(b.id), 10); - context.map().on('move.contributors', _.debounce(function() { - update(selection); - }, 500)); - }; + if (aId < 0 || bId < 0) return aId - bId; + return bId - aId; }; -iD.ui.Disclosure = function() { - var dispatch = d3.dispatch('toggled'), - title, - expanded = false, - content = function () {}; - var disclosure = function(selection) { - var $link = selection.selectAll('.hide-toggle') - .data([0]); +_.extend(iD.Relation.prototype, { + type: 'relation', + members: [], - $link.enter().append('a') - .attr('href', '#') - .attr('class', 'hide-toggle'); + copy: function(resolver, copies) { + if (copies[this.id]) + return copies[this.id]; - $link.text(title) - .on('click', toggle) - .classed('expanded', expanded); + var copy = iD.Entity.prototype.copy.call(this, resolver, copies); - var $body = selection.selectAll('div') - .data([0]); + var members = this.members.map(function(member) { + return _.extend({}, member, {id: resolver.entity(member.id).copy(resolver, copies).id}); + }); - $body.enter().append('div'); + copy = copy.update({members: members}); + copies[this.id] = copy; - $body.classed('hide', !expanded) - .call(content); + return copy; + }, - function toggle() { - expanded = !expanded; - $link.classed('expanded', expanded); - $body.call(iD.ui.Toggle(expanded)); - dispatch.toggled(expanded); - } - }; + extent: function(resolver, memo) { + return resolver.transient(this, 'extent', function() { + if (memo && memo[this.id]) return iD.geo.Extent(); + memo = memo || {}; + memo[this.id] = true; - disclosure.title = function(_) { - if (!arguments.length) return title; - title = _; - return disclosure; - }; + var extent = iD.geo.Extent(); + for (var i = 0; i < this.members.length; i++) { + var member = resolver.hasEntity(this.members[i].id); + if (member) { + extent._extend(member.extent(resolver, memo)); + } + } + return extent; + }); + }, - disclosure.expanded = function(_) { - if (!arguments.length) return expanded; - expanded = _; - return disclosure; - }; + geometry: function(graph) { + return graph.transient(this, 'geometry', function() { + return this.isMultipolygon() ? 'area' : 'relation'; + }); + }, - disclosure.content = function(_) { - if (!arguments.length) return content; - content = _; - return disclosure; - }; + isDegenerate: function() { + return this.members.length === 0; + }, - return d3.rebind(disclosure, dispatch, 'on'); -}; -iD.ui.EntityEditor = function(context) { - var event = d3.dispatch('choose'), - state = 'select', - id, - preset, - reference; + // Return an array of members, each extended with an 'index' property whose value + // is the member index. + indexedMembers: function() { + var result = new Array(this.members.length); + for (var i = 0; i < this.members.length; i++) { + result[i] = _.extend({}, this.members[i], {index: i}); + } + return result; + }, - var rawTagEditor = iD.ui.RawTagEditor(context) - .on('change', changeTags); - - function entityEditor(selection) { - var entity = context.entity(id), - tags = _.clone(entity.tags); - - var $header = selection.selectAll('.header') - .data([0]); - - // Enter + // Return the first member with the given role. A copy of the member object + // is returned, extended with an 'index' property whose value is the member index. + memberByRole: function(role) { + for (var i = 0; i < this.members.length; i++) { + if (this.members[i].role === role) { + return _.extend({}, this.members[i], {index: i}); + } + } + }, - var $enter = $header.enter().append('div') - .attr('class', 'header fillL cf'); + // Return the first member with the given id. A copy of the member object + // is returned, extended with an 'index' property whose value is the member index. + memberById: function(id) { + for (var i = 0; i < this.members.length; i++) { + if (this.members[i].id === id) { + return _.extend({}, this.members[i], {index: i}); + } + } + }, - $enter.append('button') - .attr('class', 'fr preset-close') - .append('span') - .attr('class', 'icon close'); + // Return the first member with the given id and role. A copy of the member object + // is returned, extended with an 'index' property whose value is the member index. + memberByIdAndRole: function(id, role) { + for (var i = 0; i < this.members.length; i++) { + if (this.members[i].id === id && this.members[i].role === role) { + return _.extend({}, this.members[i], {index: i}); + } + } + }, - $enter.append('h3'); + addMember: function(member, index) { + var members = this.members.slice(); + members.splice(index === undefined ? members.length : index, 0, member); + return this.update({members: members}); + }, - // Update + updateMember: function(member, index) { + var members = this.members.slice(); + members.splice(index, 1, _.extend({}, members[index], member)); + return this.update({members: members}); + }, - $header.select('h3') - .text(t('inspector.edit')); + removeMember: function(index) { + var members = this.members.slice(); + members.splice(index, 1); + return this.update({members: members}); + }, - $header.select('.preset-close') - .on('click', function() { - context.enter(iD.modes.Browse(context)); - }); + removeMembersWithID: function(id) { + var members = _.reject(this.members, function(m) { return m.id === id; }); + return this.update({members: members}); + }, - var $body = selection.selectAll('.inspector-body') - .data([0]); + // Wherever a member appears with id `needle.id`, replace it with a member + // with id `replacement.id`, type `replacement.type`, and the original role, + // unless a member already exists with that id and role. Return an updated + // relation. + replaceMember: function(needle, replacement) { + if (!this.memberById(needle.id)) + return this; - // Enter + var members = []; - $enter = $body.enter().append('div') - .attr('class', 'inspector-body'); + for (var i = 0; i < this.members.length; i++) { + var member = this.members[i]; + if (member.id !== needle.id) { + members.push(member); + } else if (!this.memberByIdAndRole(replacement.id, member.role)) { + members.push({id: replacement.id, type: replacement.type, role: member.role}); + } + } - $enter.append('div') - .attr('class', 'preset-list-item inspector-inner') - .append('div') - .attr('class', 'preset-list-button-wrap') - .append('button') - .attr('class', 'preset-list-button preset-reset') - .call(bootstrap.tooltip() - .title(t('inspector.back_tooltip')) - .placement('bottom')) - .append('div') - .attr('class', 'label'); + return this.update({members: members}); + }, - $body.select('.preset-list-button-wrap') - .call(reference.button); + asJXON: function(changeset_id) { + var r = { + relation: { + '@id': this.osmId(), + '@version': this.version || 0, + member: _.map(this.members, function(member) { + return { keyAttributes: { type: member.type, role: member.role, ref: iD.Entity.id.toOSM(member.id) } }; + }), + tag: _.map(this.tags, function(v, k) { + return { keyAttributes: { k: k, v: v } }; + }) + } + }; + if (changeset_id) r.relation['@changeset'] = changeset_id; + return r; + }, - $body.select('.preset-list-item') - .call(reference.body); + asGeoJSON: function(resolver) { + return resolver.transient(this, 'GeoJSON', function () { + if (this.isMultipolygon()) { + return { + type: 'MultiPolygon', + coordinates: this.multipolygon(resolver) + }; + } else { + return { + type: 'FeatureCollection', + properties: this.tags, + features: this.members.map(function (member) { + return _.extend({role: member.role}, resolver.entity(member.id).asGeoJSON(resolver)); + }) + }; + } + }); + }, - $enter.append('div') - .attr('class', 'inspector-border inspector-preset'); + area: function(resolver) { + return resolver.transient(this, 'area', function() { + return d3.geo.area(this.asGeoJSON(resolver)); + }); + }, - $enter.append('div') - .attr('class', 'inspector-border raw-tag-editor inspector-inner'); + isMultipolygon: function() { + return this.tags.type === 'multipolygon'; + }, - $enter.append('div') - .attr('class', 'inspector-border raw-member-editor inspector-inner'); + isComplete: function(resolver) { + for (var i = 0; i < this.members.length; i++) { + if (!resolver.hasEntity(this.members[i].id)) { + return false; + } + } + return true; + }, - $enter.append('div') - .attr('class', 'raw-membership-editor inspector-inner'); + isRestriction: function() { + return !!(this.tags.type && this.tags.type.match(/^restriction:?/)); + }, - selection.selectAll('.preset-reset') - .on('click', function() { - event.choose(preset); - }); + // Returns an array [A0, ... An], each Ai being an array of node arrays [Nds0, ... Ndsm], + // where Nds0 is an outer ring and subsequent Ndsi's (if any i > 0) being inner rings. + // + // This corresponds to the structure needed for rendering a multipolygon path using a + // `evenodd` fill rule, as well as the structure of a GeoJSON MultiPolygon geometry. + // + // In the case of invalid geometries, this function will still return a result which + // includes the nodes of all way members, but some Nds may be unclosed and some inner + // rings not matched with the intended outer ring. + // + multipolygon: function(resolver) { + var outers = this.members.filter(function(m) { return 'outer' === (m.role || 'outer'); }), + inners = this.members.filter(function(m) { return 'inner' === m.role; }); - // Update + outers = iD.geo.joinWays(outers, resolver); + inners = iD.geo.joinWays(inners, resolver); - $body.select('.preset-list-item button') - .call(iD.ui.PresetIcon() - .geometry(context.geometry(id)) - .preset(preset)); + outers = outers.map(function(outer) { return _.pluck(outer.nodes, 'loc'); }); + inners = inners.map(function(inner) { return _.pluck(inner.nodes, 'loc'); }); - $body.select('.preset-list-item .label') - .text(preset.name()); + var result = outers.map(function(o) { + // Heuristic for detecting counterclockwise winding order. Assumes + // that OpenStreetMap polygons are not hemisphere-spanning. + return [d3.geo.area({type: 'Polygon', coordinates: [o]}) > 2 * Math.PI ? o.reverse() : o]; + }); - $body.select('.inspector-preset') - .call(iD.ui.preset(context) - .preset(preset) - .entityID(id) - .tags(tags) - .state(state) - .on('change', changeTags)); + function findOuter(inner) { + var o, outer; - $body.select('.raw-tag-editor') - .call(rawTagEditor - .preset(preset) - .entityID(id) - .tags(tags) - .state(state)); + for (o = 0; o < outers.length; o++) { + outer = outers[o]; + if (iD.geo.polygonContainsPolygon(outer, inner)) + return o; + } - if (entity.type === 'relation') { - $body.select('.raw-member-editor') - .style('display', 'block') - .call(iD.ui.RawMemberEditor(context) - .entityID(id)); - } else { - $body.select('.raw-member-editor') - .style('display', 'none'); + for (o = 0; o < outers.length; o++) { + outer = outers[o]; + if (iD.geo.polygonIntersectsPolygon(outer, inner)) + return o; + } } - $body.select('.raw-membership-editor') - .call(iD.ui.RawMembershipEditor(context) - .entityID(id)); + for (var i = 0; i < inners.length; i++) { + var inner = inners[i]; - function historyChanged() { - if (state === 'hide') return; - var entity = context.hasEntity(id); - if (!entity) return; - entityEditor.preset(context.presets().match(entity, context.graph())); - entityEditor(selection); + if (d3.geo.area({type: 'Polygon', coordinates: [inner]}) < 2 * Math.PI) { + inner = inner.reverse(); + } + + var o = findOuter(inners[i]); + if (o !== undefined) + result[o].push(inners[i]); + else + result.push([inners[i]]); // Invalid geometry } - context.history() - .on('change.entity-editor', historyChanged); + return result; } - - function clean(o) { - var out = {}, k, v; - for (k in o) { - if (k && (v = o[k]) !== undefined) { - out[k] = v.trim(); - } - } - return out; +}); +iD.oneWayTags = { + 'aerialway': { + 'chair_lift': true, + 'mixed_lift': true, + 't-bar': true, + 'j-bar': true, + 'platter': true, + 'rope_tow': true, + 'magic_carpet': true, + 'yes': true + }, + 'highway': { + 'motorway': true, + 'motorway_link': true + }, + 'junction': { + 'roundabout': true + }, + 'man_made': { + 'piste:halfpipe': true + }, + 'piste:type': { + 'downhill': true, + 'sled': true, + 'yes': true + }, + 'waterway': { + 'river': true, + 'stream': true } +}; - function changeTags(changed) { - var entity = context.entity(id), - tags = clean(_.extend({}, entity.tags, changed)); +iD.pavedTags = { + 'surface': { + 'paved': true, + 'asphalt': true, + 'concrete': true + }, + 'tracktype': { + 'grade1': true + } +}; - if (!_.isEqual(entity.tags, tags)) { - context.perform( - iD.actions.ChangeTags(id, tags), - t('operations.change_tags.annotation')); - } +iD.interestingTag = function (key) { + return key !== 'attribution' && + key !== 'created_by' && + key !== 'source' && + key !== 'odbl' && + key.indexOf('tiger:') !== 0; + +}; +iD.Tree = function(head) { + var rtree = rbush(), + rectangles = {}; + + function entityRectangle(entity) { + var rect = entity.extent(head).rectangle(); + rect.id = entity.id; + rectangles[entity.id] = rect; + return rect; } - entityEditor.state = function(_) { - if (!arguments.length) return state; - state = _; - return entityEditor; - }; + function updateParents(entity, insertions, memo) { + head.parentWays(entity).forEach(function(way) { + if (rectangles[way.id]) { + rtree.remove(rectangles[way.id]); + insertions[way.id] = way; + } + updateParents(way, insertions, memo); + }); - entityEditor.entityID = function(_) { - if (!arguments.length) return id; - id = _; - entityEditor.preset(context.presets().match(context.entity(id), context.graph())); - return entityEditor; - }; + head.parentRelations(entity).forEach(function(relation) { + if (memo[entity.id]) return; + memo[entity.id] = true; + if (rectangles[relation.id]) { + rtree.remove(rectangles[relation.id]); + insertions[relation.id] = relation; + } + updateParents(relation, insertions, memo); + }); + } - entityEditor.preset = function(_) { - if (!arguments.length) return preset; - if (_ !== preset) { - preset = _; - reference = iD.ui.TagReference(preset.reference(context.geometry(id))) - .showing(false); - } - return entityEditor; - }; + var tree = {}; - return d3.rebind(entityEditor, event, 'on'); -}; -iD.ui.FeatureList = function(context) { - var geocodeResults; + tree.rebase = function(entities, force) { + var insertions = {}; - function featureList(selection) { - var header = selection.append('div') - .attr('class', 'header fillL cf'); + for (var i = 0; i < entities.length; i++) { + var entity = entities[i]; - header.append('h3') - .text(t('inspector.feature_list')); + if (!entity.visible) + continue; - function keypress() { - var q = search.property('value'), - items = list.selectAll('.feature-list-item'); - if (d3.event.keyCode === 13 && q.length && items.size()) { - click(items.datum()); + if (head.entities.hasOwnProperty(entity.id) || rectangles[entity.id]) { + if (!force) { + continue; + } else if (rectangles[entity.id]) { + rtree.remove(rectangles[entity.id]); + } } - } - function inputevent() { - geocodeResults = undefined; - drawList(); + insertions[entity.id] = entity; + updateParents(entity, insertions, {}); } - var searchWrap = selection.append('div') - .attr('class', 'search-header'); - - var search = searchWrap.append('input') - .attr('placeholder', t('inspector.search')) - .attr('type', 'search') - .on('keypress', keypress) - .on('input', inputevent); + rtree.load(_.map(insertions, entityRectangle)); - searchWrap.append('span') - .attr('class', 'icon search'); + return tree; + }; - var listWrap = selection.append('div') - .attr('class', 'inspector-body'); + tree.intersects = function(extent, graph) { + if (graph !== head) { + var diff = iD.Difference(head, graph), + insertions = {}; - var list = listWrap.append('div') - .attr('class', 'feature-list cf'); + head = graph; - context.map() - .on('drawn.feature-list', mapDrawn); + diff.deleted().forEach(function(entity) { + rtree.remove(rectangles[entity.id]); + delete rectangles[entity.id]; + }); - function mapDrawn(e) { - if (e.full) { - drawList(); - } - } + diff.modified().forEach(function(entity) { + rtree.remove(rectangles[entity.id]); + insertions[entity.id] = entity; + updateParents(entity, insertions, {}); + }); - function features() { - var entities = {}, - result = [], - graph = context.graph(), - q = search.property('value').toLowerCase(); + diff.created().forEach(function(entity) { + insertions[entity.id] = entity; + }); - if (!q) return result; + rtree.load(_.map(insertions, entityRectangle)); + } - var idMatch = q.match(/^([nwr])([0-9]+)$/); + return rtree.search(extent.rectangle()).map(function(rect) { + return head.entity(rect.id); + }); + }; - if (idMatch) { - result.push({ - id: idMatch[0], - geometry: idMatch[1] === 'n' ? 'point' : idMatch[1] === 'w' ? 'line' : 'relation', - type: idMatch[1] === 'n' ? t('inspector.node') : idMatch[1] === 'w' ? t('inspector.way') : t('inspector.relation'), - name: idMatch[2] - }); - } + return tree; +}; +iD.Way = iD.Entity.way = function iD_Way() { + if (!(this instanceof iD_Way)) { + return (new iD_Way()).initialize(arguments); + } else if (arguments.length) { + this.initialize(arguments); + } +}; - var locationMatch = q.match(/^(-?\d+\.?\d*)\s+(-?\d+\.?\d*)$/); +iD.Way.prototype = Object.create(iD.Entity.prototype); - if (locationMatch) { - result.push({ - id: -1, - geometry: 'point', - type: t('inspector.location'), - name: locationMatch[0], - location: [parseFloat(locationMatch[1]), parseFloat(locationMatch[2])] - }); - } +_.extend(iD.Way.prototype, { + type: 'way', + nodes: [], - function addEntity(entity) { - if (entity.id in entities || result.length > 200) - return; + copy: function(resolver, copies) { + if (copies[this.id]) + return copies[this.id]; - entities[entity.id] = true; + var copy = iD.Entity.prototype.copy.call(this, resolver, copies); - var name = iD.util.displayName(entity) || ''; - if (name.toLowerCase().indexOf(q) >= 0) { - result.push({ - id: entity.id, - entity: entity, - geometry: context.geometry(entity.id), - type: context.presets().match(entity, graph).name(), - name: name - }); - } + var nodes = this.nodes.map(function(id) { + return resolver.entity(id).copy(resolver, copies).id; + }); - graph.parentRelations(entity).forEach(function(parent) { - addEntity(parent); - }); - } + copy = copy.update({nodes: nodes}); + copies[this.id] = copy; - var visible = context.surface().selectAll('.point, .line, .area')[0]; - for (var i = 0; i < visible.length && result.length <= 200; i++) { - addEntity(visible[i].__data__); - } + return copy; + }, - (geocodeResults || []).forEach(function(d) { - // https://github.com/openstreetmap/iD/issues/1890 - if (d.osm_type && d.osm_id) { - result.push({ - id: iD.Entity.id.fromOSM(d.osm_type, d.osm_id), - geometry: d.osm_type === 'relation' ? 'relation' : d.osm_type === 'way' ? 'line' : 'point', - type: d.type !== 'yes' ? (d.type.charAt(0).toUpperCase() + d.type.slice(1)).replace('_', ' ') - : (d.class.charAt(0).toUpperCase() + d.class.slice(1)).replace('_', ' '), - name: d.display_name, - extent: new iD.geo.Extent( - [parseFloat(d.boundingbox[3]), parseFloat(d.boundingbox[0])], - [parseFloat(d.boundingbox[2]), parseFloat(d.boundingbox[1])]) - }); + extent: function(resolver) { + return resolver.transient(this, 'extent', function() { + var extent = iD.geo.Extent(); + for (var i = 0; i < this.nodes.length; i++) { + var node = resolver.hasEntity(this.nodes[i]); + if (node) { + extent._extend(node.extent()); } - }); + } + return extent; + }); + }, - return result; - } + first: function() { + return this.nodes[0]; + }, - function drawList() { - var value = search.property('value'), - results = features(); + last: function() { + return this.nodes[this.nodes.length - 1]; + }, - list.classed('filtered', value.length); + contains: function(node) { + return this.nodes.indexOf(node) >= 0; + }, - var noResultsWorldwide = geocodeResults && geocodeResults.length === 0; + affix: function(node) { + if (this.nodes[0] === node) return 'prefix'; + if (this.nodes[this.nodes.length - 1] === node) return 'suffix'; + }, - var resultsIndicator = list.selectAll('.no-results-item') - .data([0]) - .enter().append('button') - .property('disabled', true) - .attr('class', 'no-results-item'); + layer: function() { + // explicit layer tag, clamp between -10, 10.. + if (this.tags.layer !== undefined) { + return Math.max(-10, Math.min(+(this.tags.layer), 10)); + } + + // implied layer tag.. + if (this.tags.location === 'overground') return 1; + if (this.tags.location === 'underground') return -1; + if (this.tags.location === 'underwater') return -10; + + if (this.tags.power === 'line') return 10; + if (this.tags.power === 'minor_line') return 10; + if (this.tags.aerialway) return 10; + if (this.tags.bridge) return 1; + if (this.tags.cutting) return -1; + if (this.tags.tunnel) return -1; + if (this.tags.waterway) return -1; + if (this.tags.man_made === 'pipeline') return -10; + if (this.tags.boundary) return -10; + return 0; + }, - resultsIndicator.append('span') - .attr('class', 'icon alert'); + isOneWay: function() { + // explicit oneway tag.. + if (['yes', '1', '-1'].indexOf(this.tags.oneway) !== -1) { return true; } + if (['no', '0'].indexOf(this.tags.oneway) !== -1) { return false; } - resultsIndicator.append('span') - .attr('class', 'entity-name'); + // implied oneway tag.. + for (var key in this.tags) { + if (key in iD.oneWayTags && (this.tags[key] in iD.oneWayTags[key])) + return true; + } + return false; + }, - list.selectAll('.no-results-item .entity-name') - .text(noResultsWorldwide ? t('geocoder.no_results_worldwide') : t('geocoder.no_results_visible')); + isClosed: function() { + return this.nodes.length > 0 && this.first() === this.last(); + }, - list.selectAll('.geocode-item') - .data([0]) - .enter().append('button') - .attr('class', 'geocode-item') - .on('click', geocode) - .append('div') - .attr('class', 'label') - .append('span') - .attr('class', 'entity-name') - .text(t('geocoder.search')); + isConvex: function(resolver) { + if (!this.isClosed() || this.isDegenerate()) return null; - list.selectAll('.no-results-item') - .style('display', (value.length && !results.length) ? 'block' : 'none'); + var nodes = _.uniq(resolver.childNodes(this)), + coords = _.pluck(nodes, 'loc'), + curr = 0, prev = 0; - list.selectAll('.geocode-item') - .style('display', (value && geocodeResults === undefined) ? 'block' : 'none'); + for (var i = 0; i < coords.length; i++) { + var o = coords[(i+1) % coords.length], + a = coords[i], + b = coords[(i+2) % coords.length], + res = iD.geo.cross(o, a, b); - list.selectAll('.feature-list-item') - .data([-1]) - .remove(); + curr = (res > 0) ? 1 : (res < 0) ? -1 : 0; + if (curr === 0) { + continue; + } else if (prev && curr !== prev) { + return false; + } + prev = curr; + } + return true; + }, - var items = list.selectAll('.feature-list-item') - .data(results, function(d) { return d.id; }); - - var enter = items.enter().insert('button', '.geocode-item') - .attr('class', 'feature-list-item') - .on('mouseover', mouseover) - .on('mouseout', mouseout) - .on('click', click); + isArea: function() { + if (this.tags.area === 'yes') + return true; + if (!this.isClosed() || this.tags.area === 'no') + return false; + for (var key in this.tags) + if (key in iD.areaKeys && !(this.tags[key] in iD.areaKeys[key])) + return true; + return false; + }, - var label = enter.append('div') - .attr('class', 'label'); + isDegenerate: function() { + return _.uniq(this.nodes).length < (this.isArea() ? 3 : 2); + }, - label.append('span') - .attr('class', function(d) { return d.geometry + ' icon icon-pre-text'; }); + areAdjacent: function(n1, n2) { + for (var i = 0; i < this.nodes.length; i++) { + if (this.nodes[i] === n1) { + if (this.nodes[i - 1] === n2) return true; + if (this.nodes[i + 1] === n2) return true; + } + } + return false; + }, - label.append('span') - .attr('class', 'entity-type') - .text(function(d) { return d.type; }); + geometry: function(graph) { + return graph.transient(this, 'geometry', function() { + return this.isArea() ? 'area' : 'line'; + }); + }, - label.append('span') - .attr('class', 'entity-name') - .text(function(d) { return d.name; }); + addNode: function(id, index) { + var nodes = this.nodes.slice(); + nodes.splice(index === undefined ? nodes.length : index, 0, id); + return this.update({nodes: nodes}); + }, - enter.style('opacity', 0) - .transition() - .style('opacity', 1); + updateNode: function(id, index) { + var nodes = this.nodes.slice(); + nodes.splice(index, 1, id); + return this.update({nodes: nodes}); + }, - items.order(); + replaceNode: function(needle, replacement) { + if (this.nodes.indexOf(needle) < 0) + return this; - items.exit() - .remove(); + var nodes = this.nodes.slice(); + for (var i = 0; i < nodes.length; i++) { + if (nodes[i] === needle) { + nodes[i] = replacement; + } } + return this.update({nodes: nodes}); + }, - function mouseover(d) { - if (d.id === -1) return; + removeNode: function(id) { + var nodes = []; - context.surface().selectAll(iD.util.entityOrMemberSelector([d.id], context.graph())) - .classed('hover', true); + for (var i = 0; i < this.nodes.length; i++) { + var node = this.nodes[i]; + if (node !== id && nodes[nodes.length - 1] !== node) { + nodes.push(node); + } } - function mouseout() { - context.surface().selectAll('.hover') - .classed('hover', false); + // Preserve circularity + if (this.nodes.length > 1 && this.first() === id && this.last() === id && nodes[nodes.length - 1] !== nodes[0]) { + nodes.push(nodes[0]); } - function click(d) { - d3.event.preventDefault(); - if (d.location) { - context.map().centerZoom([d.location[1], d.location[0]], 20); + return this.update({nodes: nodes}); + }, + + asJXON: function(changeset_id) { + var r = { + way: { + '@id': this.osmId(), + '@version': this.version || 0, + nd: _.map(this.nodes, function(id) { + return { keyAttributes: { ref: iD.Entity.id.toOSM(id) } }; + }), + tag: _.map(this.tags, function(v, k) { + return { keyAttributes: { k: k, v: v } }; + }) } - else if (d.entity) { - context.enter(iD.modes.Select(context, [d.entity.id])); + }; + if (changeset_id) r.way['@changeset'] = changeset_id; + return r; + }, + + asGeoJSON: function(resolver) { + return resolver.transient(this, 'GeoJSON', function() { + var coordinates = _.pluck(resolver.childNodes(this), 'loc'); + if (this.isArea() && this.isClosed()) { + return { + type: 'Polygon', + coordinates: [coordinates] + }; } else { - context.loadEntity(d.id); + return { + type: 'LineString', + coordinates: coordinates + }; } - } - - function geocode() { - var searchVal = encodeURIComponent(search.property('value')); - d3.json('http://nominatim.openstreetmap.org/search/' + searchVal + '?limit=10&format=json', function(err, resp) { - geocodeResults = resp || []; - drawList(); - }); - } - } + }); + }, - return featureList; -}; -iD.ui.flash = function(selection) { - var modal = iD.ui.modal(selection); + area: function(resolver) { + return resolver.transient(this, 'area', function() { + var nodes = resolver.childNodes(this); - modal.select('.modal').classed('modal-flash', true); + var json = { + type: 'Polygon', + coordinates: [_.pluck(nodes, 'loc')] + }; - modal.select('.content') - .classed('modal-section', true) - .append('div') - .attr('class', 'description'); + if (!this.isClosed() && nodes.length) { + json.coordinates[0].push(nodes[0].loc); + } - modal.on('click.flash', function() { modal.remove(); }); + var area = d3.geo.area(json); - setTimeout(function() { - modal.remove(); - return true; - }, 1500); + // Heuristic for detecting counterclockwise winding order. Assumes + // that OpenStreetMap polygons are not hemisphere-spanning. + if (area > 2 * Math.PI) { + json.coordinates[0] = json.coordinates[0].reverse(); + area = d3.geo.area(json); + } - return modal; -}; -iD.ui.Geolocate = function(map) { - function click() { - navigator.geolocation.getCurrentPosition( - success, error); + return isNaN(area) ? 0 : area; + }); } +}); +iD.Background = function(context) { + var dispatch = d3.dispatch('change'), + baseLayer = iD.TileLayer().projection(context.projection), + overlayLayers = []; - function success(position) { - var extent = iD.geo.Extent([position.coords.longitude, position.coords.latitude]) - .padByMeters(position.coords.accuracy); + var backgroundSources; - map.centerZoom(extent.center(), Math.min(20, map.extentZoom(extent))); + function findSource(id) { + return _.find(backgroundSources, function(d) { + return d.id && d.id === id; + }); } - function error() { } + function updateImagery() { + var b = background.baseLayerSource(), + o = overlayLayers.map(function (d) { return d.source().id; }).join(','), + q = iD.util.stringQs(location.hash.substring(1)); - return function(selection) { - if (!navigator.geolocation) return; + var id = b.id; + if (id === 'custom') { + id = 'custom:' + b.template; + } - var button = selection.append('button') - .attr('tabindex', -1) - .attr('title', t('geolocate.title')) - .on('click', click) - .call(bootstrap.tooltip() - .placement('left')); + if (id) { + q.background = id; + } else { + delete q.background; + } - button.append('span') - .attr('class', 'icon geolocate light'); - }; -}; -iD.ui.Help = function(context) { - var key = 'h'; + if (o) { + q.overlays = o; + } else { + delete q.overlays; + } - var docKeys = [ - 'help.help', - 'help.editing_saving', - 'help.roads', - 'help.gps', - 'help.imagery', - 'help.addresses', - 'help.inspector', - 'help.buildings', - 'help.relations']; + location.replace('#' + iD.util.qsString(q, true)); - var docs = docKeys.map(function(key) { - var text = t(key); - return { - title: text.split('\n')[0].replace('#', '').trim(), - html: marked(text.split('\n').slice(1).join('\n')) - }; - }); + var imageryUsed = [b.imageryUsed()]; - function help(selection) { - var shown = false; + overlayLayers.forEach(function (d) { + var source = d.source(); + if (!source.isLocatorOverlay()) { + imageryUsed.push(source.imageryUsed()); + } + }); - function hide() { - setVisible(false); + var gpx = context.layers().layer('gpx'); + if (gpx && gpx.enabled() && gpx.hasGpx()) { + imageryUsed.push('Local GPX'); } - function toggle() { - if (d3.event) d3.event.preventDefault(); - tooltip.hide(button); - setVisible(!button.classed('active')); - } + context.history().imageryUsed(imageryUsed); + } - function setVisible(show) { - if (show !== shown) { - button.classed('active', show); - shown = show; - if (show) { - pane.style('display', 'block') - .style('right', '-500px') - .transition() - .duration(200) - .style('right', '0px'); - } else { - pane.style('right', '0px') - .transition() - .duration(200) - .style('right', '-500px') - .each('end', function() { - d3.select(this).style('display', 'none'); - }); - } - } - } - - function clickHelp(d, i) { - pane.property('scrollTop', 0); - doctitle.text(d.title); - body.html(d.html); - body.selectAll('a') - .attr('target', '_blank'); - menuItems.classed('selected', function(m) { - return m.title === d.title; - }); - - nav.html(''); - - if (i > 0) { - var prevLink = nav.append('a') - .attr('class', 'previous') - .on('click', function() { - clickHelp(docs[i - 1], i - 1); - }); - prevLink.append('span').attr('class', 'icon back blue'); - prevLink.append('span').text(docs[i - 1].title); - } - if (i < docs.length - 1) { - var nextLink = nav.append('a') - .attr('class', 'next') - .on('click', function() { - clickHelp(docs[i + 1], i + 1); - }); - nextLink.append('span').text(docs[i + 1].title); - nextLink.append('span').attr('class', 'icon forward blue'); - } - } + function background(selection) { + var base = selection.selectAll('.layer-background') + .data([0]); - function clickWalkthrough() { - d3.select(document.body).call(iD.ui.intro(context)); - setVisible(false); - } + base.enter() + .insert('div', '.layer-data') + .attr('class', 'layer layer-background'); - var tooltip = bootstrap.tooltip() - .placement('left') - .html(true) - .title(iD.ui.tooltipHtml(t('help.title'), key)); + base.call(baseLayer); - var button = selection.append('button') - .attr('tabindex', -1) - .on('click', toggle) - .call(tooltip); + var overlays = selection.selectAll('.layer-overlay') + .data(overlayLayers, function(d) { return d.source().name(); }); - button.append('span') - .attr('class', 'icon help light'); + overlays.enter() + .insert('div', '.layer-data') + .attr('class', 'layer layer-overlay'); - var pane = context.container() - .select('.help-wrap'); + overlays.each(function(layer) { + d3.select(this).call(layer); + }); - var toc = pane.append('ul') - .attr('class', 'toc'); + overlays.exit() + .remove(); + } - var menuItems = toc.selectAll('li') - .data(docs) - .enter() - .append('li') - .append('a') - .text(function(d) { return d.title; }) - .on('click', clickHelp); + background.sources = function(extent) { + return backgroundSources.filter(function(source) { + return source.intersects(extent); + }); + }; - toc.append('li') - .attr('class','walkthrough') - .append('a') - .text(t('splash.walkthrough')) - .on('click', clickWalkthrough); + background.dimensions = function(_) { + baseLayer.dimensions(_); - var content = pane.append('div') - .attr('class', 'left-content'); + overlayLayers.forEach(function(layer) { + layer.dimensions(_); + }); + }; - var doctitle = content.append('h2') - .text(t('help.title')); + background.baseLayerSource = function(d) { + if (!arguments.length) return baseLayer.source(); - var body = content.append('div') - .attr('class', 'body'); + baseLayer.source(d); + dispatch.change(); + updateImagery(); - var nav = content.append('div') - .attr('class', 'nav'); + return background; + }; - clickHelp(docs[0], 0); + background.bing = function() { + background.baseLayerSource(findSource('Bing')); + }; - var keybinding = d3.keybinding('help') - .on(key, toggle); + background.showsLayer = function(d) { + return d === baseLayer.source() || + (d.id === 'custom' && baseLayer.source().id === 'custom') || + overlayLayers.some(function(l) { return l.source() === d; }); + }; - d3.select(document) - .call(keybinding); + background.overlayLayerSources = function() { + return overlayLayers.map(function (l) { return l.source(); }); + }; - context.surface().on('mousedown.help-outside', hide); - context.container().on('mousedown.b.help-outside', hide); + background.toggleOverlayLayer = function(d) { + var layer; - pane.on('mousedown.help-inside', function() { - return d3.event.stopPropagation(); - }); + for (var i = 0; i < overlayLayers.length; i++) { + layer = overlayLayers[i]; + if (layer.source() === d) { + overlayLayers.splice(i, 1); + dispatch.change(); + updateImagery(); + return; + } + } - } + layer = iD.TileLayer() + .source(d) + .projection(context.projection) + .dimensions(baseLayer.dimensions()); - return help; -}; -iD.ui.Inspector = function(context) { - var presetList = iD.ui.PresetList(context), - entityEditor = iD.ui.EntityEditor(context), - state = 'select', - entityID, - newFeature = false; + overlayLayers.push(layer); + dispatch.change(); + updateImagery(); + }; - function inspector(selection) { - presetList - .entityID(entityID) - .autofocus(newFeature) - .on('choose', setPreset); + background.nudge = function(d, zoom) { + baseLayer.source().nudge(d, zoom); + dispatch.change(); + return background; + }; - entityEditor - .state(state) - .entityID(entityID) - .on('choose', showList); + background.offset = function(d) { + if (!arguments.length) return baseLayer.source().offset(); + baseLayer.source().offset(d); + dispatch.change(); + return background; + }; - var $wrap = selection.selectAll('.panewrap') - .data([0]); + background.load = function(imagery) { + function parseMap(qmap) { + if (!qmap) return false; + var args = qmap.split('/').map(Number); + if (args.length < 3 || args.some(isNaN)) return false; + return iD.geo.Extent([args[1], args[2]]); + } - var $enter = $wrap.enter().append('div') - .attr('class', 'panewrap'); + var q = iD.util.stringQs(location.hash.substring(1)), + chosen = q.background || q.layer, + extent = parseMap(q.map), + best; - $enter.append('div') - .attr('class', 'preset-list-pane pane'); + backgroundSources = imagery.map(function(source) { + if (source.type === 'bing') { + return iD.BackgroundSource.Bing(source, dispatch); + } else { + return iD.BackgroundSource(source); + } + }); - $enter.append('div') - .attr('class', 'entity-editor-pane pane'); + backgroundSources.unshift(iD.BackgroundSource.None()); - var $presetPane = $wrap.select('.preset-list-pane'); - var $editorPane = $wrap.select('.entity-editor-pane'); + if (!chosen && extent) { + best = _.find(this.sources(extent), function(s) { return s.best(); }); + } - var showEditor = state === 'hover' || context.entity(entityID).isUsed(context.graph()); - if (showEditor) { - $wrap.style('right', '0%'); - $editorPane.call(entityEditor); + if (chosen && chosen.indexOf('custom:') === 0) { + background.baseLayerSource(iD.BackgroundSource.Custom(chosen.replace(/^custom:/, ''))); } else { - $wrap.style('right', '-100%'); - $presetPane.call(presetList); + background.baseLayerSource(findSource(chosen) || best || findSource('Bing') || backgroundSources[1] || backgroundSources[0]); } - var $footer = selection.selectAll('.footer') - .data([0]); - - $footer.enter().append('div') - .attr('class', 'footer'); + var locator = _.find(backgroundSources, function(d) { + return d.overlay && d.default; + }); - selection.select('.footer') - .call(iD.ui.ViewOnOSM(context) - .entityID(entityID)); + if (locator) { + background.toggleOverlayLayer(locator); + } - function showList(preset) { - $wrap.transition() - .styleTween('right', function() { return d3.interpolate('0%', '-100%'); }); + var overlays = (q.overlays || '').split(','); + overlays.forEach(function(overlay) { + overlay = findSource(overlay); + if (overlay) background.toggleOverlayLayer(overlay); + }); - $presetPane.call(presetList - .preset(preset) - .autofocus(true)); + if (q.gpx) { + var gpx = context.layers().layer('gpx'); + if (gpx) { gpx.url(q.gpx); } } + }; - function setPreset(preset) { - $wrap.transition() - .styleTween('right', function() { return d3.interpolate('-100%', '0%'); }); + return d3.rebind(background, dispatch, 'on'); +}; +iD.BackgroundSource = function(data) { + var source = _.clone(data), + offset = [0, 0], + name = source.name, + best = !!source.best; - $editorPane.call(entityEditor - .preset(preset)); - } - } + source.scaleExtent = data.scaleExtent || [0, 20]; + source.overzoom = data.overzoom !== false; - inspector.state = function(_) { - if (!arguments.length) return state; - state = _; - entityEditor.state(state); - return inspector; + source.offset = function(_) { + if (!arguments.length) return offset; + offset = _; + return source; }; - inspector.entityID = function(_) { - if (!arguments.length) return entityID; - entityID = _; - return inspector; + source.nudge = function(_, zoomlevel) { + offset[0] += _[0] / Math.pow(2, zoomlevel); + offset[1] += _[1] / Math.pow(2, zoomlevel); + return source; }; - inspector.newFeature = function(_) { - if (!arguments.length) return newFeature; - newFeature = _; - return inspector; + source.name = function() { + return name; }; - return inspector; -}; -iD.ui.intro = function(context) { - - var step; - - function intro(selection) { + source.best = function() { + return best; + }; - context.enter(iD.modes.Browse(context)); + source.imageryUsed = function() { + return source.id || name; + }; - // Save current map state - var history = context.history().toJSON(), - hash = window.location.hash, - background = context.background().baseLayerSource(), - opacity = d3.select('.background-layer').style('opacity'), - loadedTiles = context.connection().loadedTiles(), - baseEntities = context.history().graph().base().entities, - introGraph; - - // Load semi-real data used in intro - context.connection().toggle(false).flush(); - context.history().reset(); - - introGraph = JSON.parse(iD.introGraph); - for (var key in introGraph) { - introGraph[key] = iD.Entity(introGraph[key]); - } - context.history().merge(d3.values(iD.Graph().load(introGraph).entities)); - context.background().bing(); + source.url = function(coord) { + return data.template + .replace('{x}', coord[0]) + .replace('{y}', coord[1]) + // TMS-flipped y coordinate + .replace(/\{[t-]y\}/, Math.pow(2, coord[2]) - coord[1] - 1) + .replace(/\{z(oom)?\}/, coord[2]) + .replace(/\{switch:([^}]+)\}/, function(s, r) { + var subdomains = r.split(','); + return subdomains[(coord[0] + coord[1]) % subdomains.length]; + }) + .replace('{u}', function() { + var u = ''; + for (var zoom = coord[2]; zoom > 0; zoom--) { + var b = 0; + var mask = 1 << (zoom - 1); + if ((coord[0] & mask) !== 0) b++; + if ((coord[1] & mask) !== 0) b += 2; + u += b.toString(); + } + return u; + }); + }; - // Block saving - var savebutton = d3.select('#bar button.save'), - save = savebutton.on('click'); - savebutton.on('click', null); - context.inIntro(true); + source.intersects = function(extent) { + extent = extent.polygon(); + return !data.polygon || data.polygon.some(function(polygon) { + return iD.geo.polygonIntersectsPolygon(polygon, extent, true); + }); + }; - d3.select('.background-layer').style('opacity', 1); + source.validZoom = function(z) { + return source.scaleExtent[0] <= z && + (source.overzoom || source.scaleExtent[1] > z); + }; - var curtain = d3.curtain(); - selection.call(curtain); + source.isLocatorOverlay = function() { + return name === 'Locator Overlay'; + }; - function reveal(box, text, options) { - options = options || {}; - if (text) curtain.reveal(box, text, options.tooltipClass, options.duration); - else curtain.reveal(box, '', '', options.duration); - } + source.copyrightNotices = function() {}; - var steps = ['navigation', 'point', 'area', 'line', 'startEditing'].map(function(step, i) { - var s = iD.ui.intro[step](context, reveal) - .on('done', function() { - entered.filter(function(d) { - return d.title === s.title; - }).classed('finished', true); - enter(steps[i + 1]); - }); - return s; - }); + return source; +}; - steps[steps.length - 1].on('startEditing', function() { - curtain.remove(); - navwrap.remove(); - d3.select('.background-layer').style('opacity', opacity); - context.connection().toggle(true).flush().loadedTiles(loadedTiles); - context.history().reset().merge(d3.values(baseEntities)); - context.background().baseLayerSource(background); - if (history) context.history().fromJSON(history); - window.location.replace(hash); - context.inIntro(false); - d3.select('#bar button.save').on('click', save); - }); +iD.BackgroundSource.Bing = function(data, dispatch) { + // http://msdn.microsoft.com/en-us/library/ff701716.aspx + // http://msdn.microsoft.com/en-us/library/ff701701.aspx - var navwrap = selection.append('div').attr('class', 'intro-nav-wrap fillD'); + data.template = 'https://ecn.t{switch:0,1,2,3}.tiles.virtualearth.net/tiles/a{u}.jpeg?g=587&mkt=en-gb&n=z'; - var buttonwrap = navwrap.append('div') - .attr('class', 'joined') - .selectAll('button.step'); + var bing = iD.BackgroundSource(data), + key = 'Arzdiw4nlOJzRwOz__qailc8NiR31Tt51dN2D7cm57NrnceZnCpgOkmJhNpGoppU', // Same as P2 and JOSM + url = 'https://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial?include=ImageryProviders&key=' + + key + '&jsonp={callback}', + providers = []; - var entered = buttonwrap.data(steps) - .enter().append('button') - .attr('class', 'step') - .on('click', enter); + d3.jsonp(url, function(json) { + providers = json.resourceSets[0].resources[0].imageryProviders.map(function(provider) { + return { + attribution: provider.attribution, + areas: provider.coverageAreas.map(function(area) { + return { + zoom: [area.zoomMin, area.zoomMax], + extent: iD.geo.Extent([area.bbox[1], area.bbox[0]], [area.bbox[3], area.bbox[2]]) + }; + }) + }; + }); + dispatch.change(); + }); - entered.append('div').attr('class','icon icon-pre-text apply'); - entered.append('label').text(function(d) { return t(d.title); }); - enter(steps[0]); + bing.copyrightNotices = function(zoom, extent) { + zoom = Math.min(zoom, 21); + return providers.filter(function(provider) { + return _.any(provider.areas, function(area) { + return extent.intersects(area.extent) && + area.zoom[0] <= zoom && + area.zoom[1] >= zoom; + }); + }).map(function(provider) { + return provider.attribution; + }).join(', '); + }; - function enter (newStep) { + bing.logo = 'bing_maps.png'; + bing.terms_url = 'https://blog.openstreetmap.org/2010/11/30/microsoft-imagery-details'; - if (step) { - step.exit(); - } + return bing; +}; - context.enter(iD.modes.Browse(context)); +iD.BackgroundSource.None = function() { + var source = iD.BackgroundSource({id: 'none', template: ''}); - step = newStep; - step.enter(); + source.name = function() { + return t('background.none'); + }; - entered.classed('active', function(d) { - return d.title === step.title; - }); - } + source.imageryUsed = function() { + return 'None'; + }; - } - return intro; + return source; }; -iD.ui.intro.pointBox = function(point, context) { - var rect = context.surfaceRect(); - point = context.projection(point); - return { - left: point[0] + rect.left - 30, - top: point[1] + rect.top - 50, - width: 60, - height: 70 +iD.BackgroundSource.Custom = function(template) { + var source = iD.BackgroundSource({id: 'custom', template: template}); + + source.name = function() { + return t('background.custom'); }; -}; -iD.ui.intro.pad = function(box, padding, context) { - if (box instanceof Array) { - var rect = context.surfaceRect(); - box = context.projection(box); - box = { - left: box[0] + rect.left, - top: box[1] + rect.top - }; - } - return { - left: box.left - padding, - top: box.top - padding, - width: (box.width || 0) + 2 * padding, - height: (box.width || 0) + 2 * padding + source.imageryUsed = function() { + return 'Custom (' + template + ')'; }; + + return source; }; -iD.ui.Lasso = function(context) { +iD.Features = function(context) { + var major_roads = { + 'motorway': true, + 'motorway_link': true, + 'trunk': true, + 'trunk_link': true, + 'primary': true, + 'primary_link': true, + 'secondary': true, + 'secondary_link': true, + 'tertiary': true, + 'tertiary_link': true, + 'residential': true + }; + + var minor_roads = { + 'service': true, + 'living_street': true, + 'road': true, + 'unclassified': true, + 'track': true + }; + + var paths = { + 'path': true, + 'footway': true, + 'cycleway': true, + 'bridleway': true, + 'steps': true, + 'pedestrian': true, + 'corridor': true + }; + + var past_futures = { + 'proposed': true, + 'construction': true, + 'abandoned': true, + 'dismantled': true, + 'disused': true, + 'razed': true, + 'demolished': true, + 'obliterated': true + }; + + var dispatch = d3.dispatch('change', 'redraw'), + _cullFactor = 1, + _cache = {}, + _features = {}, + _stats = {}, + _keys = [], + _hidden = []; - var box, group, - a = [0, 0], - b = [0, 0]; + function update() { + _hidden = features.hidden(); + dispatch.change(); + dispatch.redraw(); + } + + function defineFeature(k, filter, max) { + _keys.push(k); + _features[k] = { + filter: filter, + enabled: true, // whether the user wants it enabled.. + count: 0, + currentMax: (max || Infinity), + defaultMax: (max || Infinity), + enable: function() { this.enabled = true; this.currentMax = this.defaultMax; }, + disable: function() { this.enabled = false; this.currentMax = 0; }, + hidden: function() { return !context.editable() || this.count > this.currentMax * _cullFactor; }, + autoHidden: function() { return this.hidden() && this.currentMax > 0; } + }; + } - function lasso(selection) { - context.container().classed('lasso', true); + defineFeature('points', function isPoint(entity, resolver, geometry) { + return geometry === 'point'; + }, 200); - group = selection.append('g') - .attr('class', 'lasso hide'); + defineFeature('major_roads', function isMajorRoad(entity) { + return major_roads[entity.tags.highway]; + }); - box = group.append('rect') - .attr('class', 'lasso-box'); + defineFeature('minor_roads', function isMinorRoad(entity) { + return minor_roads[entity.tags.highway]; + }); - group.call(iD.ui.Toggle(true)); + defineFeature('paths', function isPath(entity) { + return paths[entity.tags.highway]; + }); - } + defineFeature('buildings', function isBuilding(entity) { + return ( + !!entity.tags['building:part'] || + (!!entity.tags.building && entity.tags.building !== 'no') || + entity.tags.amenity === 'shelter' || + entity.tags.parking === 'multi-storey' || + entity.tags.parking === 'sheds' || + entity.tags.parking === 'carports' || + entity.tags.parking === 'garage_boxes' + ); + }, 250); - // top-left - function topLeft(d) { - return 'translate(' + Math.min(d[0][0], d[1][0]) + ',' + Math.min(d[0][1], d[1][1]) + ')'; - } + defineFeature('landuse', function isLanduse(entity, resolver, geometry) { + return geometry === 'area' && + !_features.buildings.filter(entity) && + !_features.water.filter(entity); + }); - function width(d) { return Math.abs(d[0][0] - d[1][0]); } - function height(d) { return Math.abs(d[0][1] - d[1][1]); } + defineFeature('boundaries', function isBoundary(entity) { + return !!entity.tags.boundary; + }); - function draw() { - if (box) { - box.data([[a, b]]) - .attr('transform', topLeft) - .attr('width', width) - .attr('height', height); - } - } + defineFeature('water', function isWater(entity) { + return ( + !!entity.tags.waterway || + entity.tags.natural === 'water' || + entity.tags.natural === 'coastline' || + entity.tags.natural === 'bay' || + entity.tags.landuse === 'pond' || + entity.tags.landuse === 'basin' || + entity.tags.landuse === 'reservoir' || + entity.tags.landuse === 'salt_pond' + ); + }); - lasso.a = function(_) { - if (!arguments.length) return a; - a = _; - draw(); - return lasso; - }; + defineFeature('rail', function isRail(entity) { + return ( + !!entity.tags.railway || + entity.tags.landuse === 'railway' + ) && !( + major_roads[entity.tags.highway] || + minor_roads[entity.tags.highway] || + paths[entity.tags.highway] + ); + }); - lasso.b = function(_) { - if (!arguments.length) return b; - b = _; - draw(); - return lasso; - }; + defineFeature('power', function isPower(entity) { + return !!entity.tags.power; + }); - lasso.close = function() { - if (group) { - group.call(iD.ui.Toggle(false, function() { - d3.select(this).remove(); - })); - } - context.container().classed('lasso', false); - }; + // contains a past/future tag, but not in active use as a road/path/cycleway/etc.. + defineFeature('past_future', function isPastFuture(entity) { + if ( + major_roads[entity.tags.highway] || + minor_roads[entity.tags.highway] || + paths[entity.tags.highway] + ) { return false; } - return lasso; -}; -iD.ui.Loading = function(context) { - var message = '', - blocking = false, - modal; + var strings = Object.keys(entity.tags); - var loading = function(selection) { - modal = iD.ui.modal(selection, blocking); + for (var i = 0; i < strings.length; i++) { + var s = strings[i]; + if (past_futures[s] || past_futures[entity.tags[s]]) { return true; } + } + return false; + }); - var loadertext = modal.select('.content') - .classed('loading-modal', true) - .append('div') - .attr('class', 'modal-section fillL'); + // Lines or areas that don't match another feature filter. + // IMPORTANT: The 'others' feature must be the last one defined, + // so that code in getMatches can skip this test if `hasMatch = true` + defineFeature('others', function isOther(entity, resolver, geometry) { + return (geometry === 'line' || geometry === 'area'); + }); - loadertext.append('img') - .attr('class', 'loader') - .attr('src', context.imagePath('loader-white.gif')); - loadertext.append('h3') - .text(message); + function features() {} - modal.select('button.close') - .attr('class', 'hide'); + features.features = function() { + return _features; + }; - return loading; + features.keys = function() { + return _keys; }; - loading.message = function(_) { - if (!arguments.length) return message; - message = _; - return loading; + features.enabled = function(k) { + if (!arguments.length) { + return _.filter(_keys, function(k) { return _features[k].enabled; }); + } + return _features[k] && _features[k].enabled; }; - loading.blocking = function(_) { - if (!arguments.length) return blocking; - blocking = _; - return loading; + features.disabled = function(k) { + if (!arguments.length) { + return _.reject(_keys, function(k) { return _features[k].enabled; }); + } + return _features[k] && !_features[k].enabled; }; - loading.close = function() { - modal.remove(); + features.hidden = function(k) { + if (!arguments.length) { + return _.filter(_keys, function(k) { return _features[k].hidden(); }); + } + return _features[k] && _features[k].hidden(); }; - return loading; -}; -iD.ui.modal = function(selection, blocking) { + features.autoHidden = function(k) { + if (!arguments.length) { + return _.filter(_keys, function(k) { return _features[k].autoHidden(); }); + } + return _features[k] && _features[k].autoHidden(); + }; - var previous = selection.select('div.modal'); - var animate = previous.empty(); + features.enable = function(k) { + if (_features[k] && !_features[k].enabled) { + _features[k].enable(); + update(); + } + }; - previous.transition() - .duration(200) - .style('opacity', 0) - .remove(); + features.disable = function(k) { + if (_features[k] && _features[k].enabled) { + _features[k].disable(); + update(); + } + }; - var shaded = selection - .append('div') - .attr('class', 'shaded') - .style('opacity', 0); + features.toggle = function(k) { + if (_features[k]) { + (function(f) { return f.enabled ? f.disable() : f.enable(); }(_features[k])); + update(); + } + }; - shaded.close = function() { - shaded - .transition() - .duration(200) - .style('opacity',0) - .remove(); - modal - .transition() - .duration(200) - .style('top','0px'); - keybinding.off(); + features.resetStats = function() { + _.each(_features, function(f) { f.count = 0; }); + dispatch.change(); }; - var keybinding = d3.keybinding('modal') - .on('⌫', shaded.close) - .on('⎋', shaded.close); + features.gatherStats = function(d, resolver, dimensions) { + var needsRedraw = false, + type = _.groupBy(d, function(ent) { return ent.type; }), + entities = [].concat(type.relation || [], type.way || [], type.node || []), + currHidden, geometry, matches; - d3.select(document).call(keybinding); + _.each(_features, function(f) { f.count = 0; }); - var modal = shaded.append('div') - .attr('class', 'modal fillL col6'); + // adjust the threshold for point/building culling based on viewport size.. + // a _cullFactor of 1 corresponds to a 1000x1000px viewport.. + _cullFactor = dimensions[0] * dimensions[1] / 1000000; - shaded.on('click.remove-modal', function() { - if (d3.event.target === this && !blocking) shaded.close(); - }); + for (var i = 0; i < entities.length; i++) { + geometry = entities[i].geometry(resolver); + if (!(geometry === 'vertex' || geometry === 'relation')) { + matches = Object.keys(features.getMatches(entities[i], resolver, geometry)); + for (var j = 0; j < matches.length; j++) { + _features[matches[j]].count++; + } + } + } - modal.append('button') - .attr('class', 'close') - .on('click', function() { - if (!blocking) shaded.close(); - }) - .append('div') - .attr('class','icon close'); + currHidden = features.hidden(); + if (currHidden !== _hidden) { + _hidden = currHidden; + needsRedraw = true; + dispatch.change(); + } - modal.append('div') - .attr('class', 'content'); + return needsRedraw; + }; - if (animate) { - shaded.transition().style('opacity', 1); - modal - .style('top','0px') - .transition() - .duration(200) - .style('top','40px'); - } else { - shaded.style('opacity', 1); - } + features.stats = function() { + _.each(_keys, function(k) { _stats[k] = _features[k].count; }); + return _stats; + }; + features.clear = function(d) { + for (var i = 0; i < d.length; i++) { + features.clearEntity(d[i]); + } + }; - return shaded; -}; -iD.ui.Modes = function(context) { - var modes = [ - iD.modes.AddPoint(context), - iD.modes.AddLine(context), - iD.modes.AddArea(context)]; + features.clearEntity = function(entity) { + delete _cache[iD.Entity.key(entity)]; + }; - return function(selection) { - var buttons = selection.selectAll('button.add-button') - .data(modes); + features.reset = function() { + _cache = {}; + }; - buttons.enter().append('button') - .attr('tabindex', -1) - .attr('class', function(mode) { return mode.id + ' add-button col4'; }) - .on('click.mode-buttons', function(mode) { - if (mode.id === context.mode().id) { - context.enter(iD.modes.Browse(context)); - } else { - context.enter(mode); - } - }) - .call(bootstrap.tooltip() - .placement('bottom') - .html(true) - .title(function(mode) { - return iD.ui.tooltipHtml(mode.description, mode.key); - })); + features.getMatches = function(entity, resolver, geometry) { + if (geometry === 'vertex' || geometry === 'relation') return {}; - context.map() - .on('move.modes', _.debounce(update, 500)); + var ent = iD.Entity.key(entity); + if (!_cache[ent]) { + _cache[ent] = {}; + } - context - .on('enter.modes', update); + if (!_cache[ent].matches) { + var matches = {}, + hasMatch = false; - update(); + for (var i = 0; i < _keys.length; i++) { + if (_keys[i] === 'others') { + if (hasMatch) continue; - buttons.append('span') - .attr('class', function(mode) { return mode.id + ' icon icon-pre-text'; }); + // Multipolygon members: + // If an entity... + // 1. is a way that hasn't matched other "interesting" feature rules, + // 2. and it belongs to a single parent multipolygon relation + // ...then match whatever feature rules the parent multipolygon has matched. + // see #2548, #2887 + // + // IMPORTANT: + // For this to work, getMatches must be called on relations before ways. + // + if (entity.type === 'way') { + var parents = features.getParents(entity, resolver, geometry); + if (parents.length === 1 && parents[0].isMultipolygon()) { + var pkey = iD.Entity.key(parents[0]); + if (_cache[pkey] && _cache[pkey].matches) { + matches = _.clone(_cache[pkey].matches); + continue; + } + } + } + } - buttons.append('span') - .attr('class', 'label') - .text(function(mode) { return mode.title; }); + if (_features[_keys[i]].filter(entity, resolver, geometry)) { + matches[_keys[i]] = hasMatch = true; + } + } + _cache[ent].matches = matches; + } - context.on('enter.editor', function(entered) { - buttons.classed('active', function(mode) { return entered.button === mode.button; }); - context.container() - .classed('mode-' + entered.id, true); - }); + return _cache[ent].matches; + }; - context.on('exit.editor', function(exited) { - context.container() - .classed('mode-' + exited.id, false); - }); + features.getParents = function(entity, resolver, geometry) { + if (geometry === 'point') return []; - var keybinding = d3.keybinding('mode-buttons'); + var ent = iD.Entity.key(entity); + if (!_cache[ent]) { + _cache[ent] = {}; + } - modes.forEach(function(m) { - keybinding.on(m.key, function() { if (context.editable()) context.enter(m); }); - }); + if (!_cache[ent].parents) { + var parents = []; + if (geometry === 'vertex') { + parents = resolver.parentWays(entity); + } else { // 'line', 'area', 'relation' + parents = resolver.parentRelations(entity); + } + _cache[ent].parents = parents; + } + return _cache[ent].parents; + }; - d3.select(document) - .call(keybinding); + features.isHiddenFeature = function(entity, resolver, geometry) { + if (!_hidden.length) return false; + if (!entity.version) return false; - function update() { - buttons.property('disabled', !context.editable()); + var matches = features.getMatches(entity, resolver, geometry); + + for (var i = 0; i < _hidden.length; i++) { + if (matches[_hidden[i]]) return true; } + return false; }; -}; -iD.ui.Notice = function(context) { - return function(selection) { - var div = selection.append('div') - .attr('class', 'notice'); - var button = div.append('button') - .attr('class', 'zoom-to notice') - .on('click', function() { context.map().zoom(16); }); + features.isHiddenChild = function(entity, resolver, geometry) { + if (!_hidden.length) return false; + if (!entity.version || geometry === 'point') return false; - button.append('span') - .attr('class', 'icon zoom-in-invert'); + var parents = features.getParents(entity, resolver, geometry); + if (!parents.length) return false; - button.append('span') - .attr('class', 'label') - .text(t('zoom_in_edit')); + for (var i = 0; i < parents.length; i++) { + if (!features.isHidden(parents[i], resolver, parents[i].geometry(resolver))) { + return false; + } + } + return true; + }; - function disableTooHigh() { - div.style('display', context.map().editable() ? 'none' : 'block'); + features.hasHiddenConnections = function(entity, resolver) { + if (!_hidden.length) return false; + var childNodes, connections; + + if (entity.type === 'midpoint') { + childNodes = [resolver.entity(entity.edge[0]), resolver.entity(entity.edge[1])]; + connections = []; + } else { + childNodes = entity.nodes ? resolver.childNodes(entity) : []; + connections = features.getParents(entity, resolver, entity.geometry(resolver)); } - context.map() - .on('move.notice', _.debounce(disableTooHigh, 500)); + // gather ways connected to child nodes.. + connections = _.reduce(childNodes, function(result, e) { + return resolver.isShared(e) ? _.union(result, resolver.parentWays(e)) : result; + }, connections); - disableTooHigh(); + return connections.length ? _.any(connections, function(e) { + return features.isHidden(e, resolver, e.geometry(resolver)); + }) : false; }; -}; -iD.ui.preset = function(context) { - var event = d3.dispatch('change'), - state, - fields, - preset, - tags, - id; - - function UIField(field, entity, show) { - field = _.clone(field); - field.input = iD.ui.preset[field.type](field, context) - .on('change', event.change); + features.isHidden = function(entity, resolver, geometry) { + if (!_hidden.length) return false; + if (!entity.version) return false; - if (field.input.entity) field.input.entity(entity); + var fn = (geometry === 'vertex' ? features.isHiddenChild : features.isHiddenFeature); + return fn(entity, resolver, geometry); + }; - field.keys = field.keys || [field.key]; + features.filter = function(d, resolver) { + if (!_hidden.length) return d; - field.show = show; + var result = []; + for (var i = 0; i < d.length; i++) { + var entity = d[i]; + if (!features.isHidden(entity, resolver, entity.geometry(resolver))) { + result.push(entity); + } + } + return result; + }; - field.shown = function() { - return field.id === 'name' || field.show || _.any(field.keys, function(key) { return !!tags[key]; }); - }; + return d3.rebind(features, dispatch, 'on'); +}; +iD.Map = function(context) { + var dimensions = [1, 1], + dispatch = d3.dispatch('move', 'drawn'), + projection = context.projection, + zoom = d3.behavior.zoom() + .translate(projection.translate()) + .scale(projection.scale() * 2 * Math.PI) + .scaleExtent([1024, 256 * Math.pow(2, 24)]) + .on('zoom', zoomPan), + dblclickEnabled = true, + redrawEnabled = true, + transformStart, + transformed = false, + minzoom = 0, + drawLayers = iD.svg.Layers(projection, context), + drawPoints = iD.svg.Points(projection, context), + drawVertices = iD.svg.Vertices(projection, context), + drawLines = iD.svg.Lines(projection), + drawAreas = iD.svg.Areas(projection), + drawMidpoints = iD.svg.Midpoints(projection, context), + drawLabels = iD.svg.Labels(projection, context), + supersurface, + wrapper, + surface, + mouse, + mousemove; - field.modified = function() { - var original = context.graph().base().entities[entity.id]; - return _.any(field.keys, function(key) { - return original ? tags[key] !== original.tags[key] : tags[key]; - }); - }; + function map(selection) { + context.history() + .on('change.map', redraw); + context.background() + .on('change.map', redraw); + context.features() + .on('redraw.map', redraw); - field.revert = function() { - var original = context.graph().base().entities[entity.id], - t = {}; - field.keys.forEach(function(key) { - t[key] = original ? original.tags[key] : undefined; - }); - return t; - }; + selection + .on('dblclick.map', dblClick) + .call(zoom); - field.present = function() { - return _.any(field.keys, function(key) { - return tags[key]; - }); - }; + supersurface = selection.append('div') + .attr('id', 'supersurface') + .call(iD.util.setTransform, 0, 0); - field.remove = function() { - var t = {}; - field.keys.forEach(function(key) { - t[key] = undefined; - }); - return t; - }; + // Need a wrapper div because Opera can't cope with an absolutely positioned + // SVG element: http://bl.ocks.org/jfirebaugh/6fbfbd922552bf776c16 + wrapper = supersurface + .append('div') + .attr('class', 'layer layer-data'); - return field; - } + map.surface = surface = wrapper + .call(drawLayers) + .selectAll('.surface') + .attr('id', 'surface'); - function fieldKey(field) { - return field.id; - } - - function presets(selection) { - if (!fields) { - var entity = context.entity(id), - geometry = context.geometry(id); - - fields = [UIField(context.presets().field('name'), entity)]; - - preset.fields.forEach(function(field) { - if (field.matchGeometry(geometry)) { - fields.push(UIField(field, entity, true)); + surface + .on('mousedown.zoom', function() { + if (d3.event.button === 2) { + d3.event.stopPropagation(); } - }); - - context.presets().universal().forEach(function(field) { - if (preset.fields.indexOf(field) < 0) { - fields.push(UIField(field, entity)); + }, true) + .on('mouseup.zoom', function() { + if (resetTransform()) redraw(); + }) + .on('mousemove.map', function() { + mousemove = d3.event; + }) + .on('mouseover.vertices', function() { + if (map.editable() && !transformed) { + var hover = d3.event.target.__data__; + surface.call(drawVertices.drawHover, context.graph(), hover, map.extent(), map.zoom()); + dispatch.drawn({full: false}); + } + }) + .on('mouseout.vertices', function() { + if (map.editable() && !transformed) { + var hover = d3.event.relatedTarget && d3.event.relatedTarget.__data__; + surface.call(drawVertices.drawHover, context.graph(), hover, map.extent(), map.zoom()); + dispatch.drawn({full: false}); } }); - } - var shown = fields.filter(function(field) { return field.shown(); }), - notShown = fields.filter(function(field) { return !field.shown(); }); - var $form = selection.selectAll('.preset-form') - .data([0]); + supersurface + .call(context.background()); - $form.enter().append('div') - .attr('class', 'preset-form inspector-inner fillL3'); - var $fields = $form.selectAll('.form-field') - .data(shown, fieldKey); + context.on('enter.map', function() { + if (map.editable() && !transformed) { + var all = context.intersects(map.extent()), + filter = d3.functor(true), + graph = context.graph(); - // Enter + all = context.features().filter(all, graph); + surface + .call(drawVertices, graph, all, filter, map.extent(), map.zoom()) + .call(drawMidpoints, graph, all, filter, map.trimmedExtent()); + dispatch.drawn({full: false}); + } + }); - var $enter = $fields.enter() - .insert('div', '.more-buttons') - .attr('class', function(field) { - return 'form-field form-field-' + field.id; - }); + map.dimensions(selection.dimensions()); - var $label = $enter.append('label') - .attr('class', 'form-label') - .attr('for', function(field) { return 'preset-input-' + field.id; }) - .text(function(field) { return field.label(); }); + drawLabels.supersurface(supersurface); + } - var wrap = $label.append('div') - .attr('class', 'form-label-button-wrap'); + function pxCenter() { return [dimensions[0] / 2, dimensions[1] / 2]; } - wrap.append('button') - .attr('class', 'remove-icon') - .append('span').attr('class', 'icon delete'); + function drawVector(difference, extent) { + var graph = context.graph(), + features = context.features(), + all = context.intersects(map.extent()), + data, filter; - wrap.append('button') - .attr('class', 'modified-icon') - .attr('tabindex', -1) - .append('div') - .attr('class', 'icon undo'); + if (difference) { + var complete = difference.complete(map.extent()); + data = _.compact(_.values(complete)); + filter = function(d) { return d.id in complete; }; + features.clear(data); - // Update + } else { + // force a full redraw if gatherStats detects that a feature + // should be auto-hidden (e.g. points or buildings).. + if (features.gatherStats(all, graph, dimensions)) { + extent = undefined; + } - $fields.select('.form-label-button-wrap .remove-icon') - .on('click', remove); + if (extent) { + data = context.intersects(map.extent().intersection(extent)); + var set = d3.set(_.pluck(data, 'id')); + filter = function(d) { return set.has(d.id); }; - $fields.select('.modified-icon') - .on('click', revert); + } else { + data = all; + filter = d3.functor(true); + } + } - $fields - .order() - .classed('modified', function(field) { - return field.modified(); - }) - .classed('present', function(field) { - return field.present(); - }) - .each(function(field) { - var reference = iD.ui.TagReference({key: field.key}); + data = features.filter(data, graph); - if (state === 'hover') { - reference.showing(false); - } + surface + .call(drawVertices, graph, data, filter, map.extent(), map.zoom()) + .call(drawLines, graph, data, filter) + .call(drawAreas, graph, data, filter) + .call(drawMidpoints, graph, data, filter, map.trimmedExtent()) + .call(drawLabels, graph, data, filter, dimensions, !difference && !extent) + .call(drawPoints, graph, data, filter); - d3.select(this) - .call(field.input) - .call(reference.body) - .select('.form-label-button-wrap') - .call(reference.button); + dispatch.drawn({full: true}); + } - field.input.tags(tags); - }); + function editOff() { + context.features().resetStats(); + surface.selectAll('.layer-osm *').remove(); + dispatch.drawn({full: true}); + } - $fields.exit() - .remove(); + function dblClick() { + if (!dblclickEnabled) { + d3.event.preventDefault(); + d3.event.stopImmediatePropagation(); + } + } - var $more = selection.selectAll('.more-buttons') - .data([0]); + function zoomPan() { + if (Math.log(d3.event.scale) / Math.LN2 - 8 < minzoom) { + surface.interrupt(); + iD.ui.flash(context.container()) + .select('.content') + .text(t('cannot_zoom')); + setZoom(context.minEditableZoom(), true); + queueRedraw(); + dispatch.move(map); + return; + } - $more.enter().append('div') - .attr('class', 'more-buttons inspector-inner'); + projection + .translate(d3.event.translate) + .scale(d3.event.scale / (2 * Math.PI)); - var $buttons = $more.selectAll('.preset-add-field') - .data(notShown, fieldKey); + var scale = d3.event.scale / transformStart[0], + tX = (d3.event.translate[0] / scale - transformStart[1][0]) * scale, + tY = (d3.event.translate[1] / scale - transformStart[1][1]) * scale; - $buttons.enter() - .append('button') - .attr('class', 'preset-add-field') - .call(bootstrap.tooltip() - .placement('top') - .title(function(d) { return d.label(); })) - .append('span') - .attr('class', function(d) { return 'icon ' + d.icon; }); + transformed = true; + iD.util.setTransform(supersurface, tX, tY, scale); + queueRedraw(); - $buttons.on('click', show); + dispatch.move(map); + } - $buttons.exit() - .remove(); + function resetTransform() { + if (!transformed) return false; - function show(field) { - field.show = true; - presets(selection); - field.input.focus(); + surface.selectAll('.radial-menu').interrupt().remove(); + iD.util.setTransform(supersurface, 0, 0); + transformed = false; + return true; + } + + function redraw(difference, extent) { + if (!surface || !redrawEnabled) return; + + clearTimeout(timeoutId); + + // If we are in the middle of a zoom/pan, we can't do differenced redraws. + // It would result in artifacts where differenced entities are redrawn with + // one transform and unchanged entities with another. + if (resetTransform()) { + difference = extent = undefined; } - function revert(field) { - d3.event.stopPropagation(); - d3.event.preventDefault(); - event.change(field.revert()); + var zoom = String(~~map.zoom()); + if (surface.attr('data-zoom') !== zoom) { + surface.attr('data-zoom', zoom) + .classed('low-zoom', zoom <= 16); } - function remove(field) { - d3.event.stopPropagation(); - d3.event.preventDefault(); - event.change(field.remove()); + if (!difference) { + supersurface.call(context.background()); } - } - presets.preset = function(_) { - if (!arguments.length) return preset; - preset = _; - fields = null; - return presets; - }; + // OSM + if (map.editable()) { + context.loadTiles(projection, dimensions); + drawVector(difference, extent); + } else { + editOff(); + } - presets.state = function(_) { - if (!arguments.length) return state; - state = _; - return presets; - }; + wrapper + .call(drawLayers); - presets.tags = function(_) { - if (!arguments.length) return tags; - tags = _; - // Don't reset fields here. - return presets; - }; + transformStart = [ + projection.scale() * 2 * Math.PI, + projection.translate().slice()]; - presets.entityID = function(_) { - if (!arguments.length) return id; - id = _; - fields = null; - return presets; - }; + return map; + } - return d3.rebind(presets, event, 'on'); -}; -iD.ui.PresetIcon = function() { - var preset, geometry; + var timeoutId; + function queueRedraw() { + clearTimeout(timeoutId); + timeoutId = setTimeout(function() { redraw(); }, 300); + } - function presetIcon(selection) { - selection.each(setup); + function pointLocation(p) { + var translate = projection.translate(), + scale = projection.scale() * 2 * Math.PI; + return [(p[0] - translate[0]) / scale, (p[1] - translate[1]) / scale]; } - function setup() { - var selection = d3.select(this), - p = preset.apply(this, arguments), - geom = geometry.apply(this, arguments); + function locationPoint(l) { + var translate = projection.translate(), + scale = projection.scale() * 2 * Math.PI; + return [l[0] * scale + translate[0], l[1] * scale + translate[1]]; + } - var $fill = selection.selectAll('.preset-icon-fill') - .data([0]); + map.mouse = function() { + var e = mousemove || d3.event, s; + while ((s = e.sourceEvent)) e = s; + return mouse(e); + }; - $fill.enter().append('div'); + map.mouseCoordinates = function() { + return projection.invert(map.mouse()); + }; - $fill.attr('class', function() { - var s = 'preset-icon-fill icon-' + geom; - for (var i in p.tags) { - s += ' tag-' + i + ' tag-' + i + '-' + p.tags[i]; - } - return s; - }); + map.dblclickEnable = function(_) { + if (!arguments.length) return dblclickEnabled; + dblclickEnabled = _; + return map; + }; - var $icon = selection.selectAll('.preset-icon') - .data([0]); + map.redrawEnable = function(_) { + if (!arguments.length) return redrawEnabled; + redrawEnabled = _; + return map; + }; - $icon.enter().append('div'); + function interpolateZoom(_) { + var k = projection.scale(), + t = projection.translate(); - $icon.attr('class', function() { - var icon = p.icon || (geom === 'line' ? 'other-line' : 'marker-stroked'), - klass = 'feature-' + icon + ' preset-icon'; + surface.node().__chart__ = { + x: t[0], + y: t[1], + k: k * 2 * Math.PI + }; - var featureicon = iD.data.featureIcons[icon]; - if (featureicon && featureicon[geom]) { - klass += ' preset-icon-' + geom; - } else if (icon === 'multipolygon') { - // Special case (geometry === 'area') - klass += ' preset-icon-relation'; - } + setZoom(_); + projection.scale(k).translate(t); // undo setZoom projection changes - return klass; - }); + zoom.event(surface.transition()); } - presetIcon.preset = function(_) { - if (!arguments.length) return preset; - preset = d3.functor(_); - return presetIcon; - }; - - presetIcon.geometry = function(_) { - if (!arguments.length) return geometry; - geometry = d3.functor(_); - return presetIcon; + function setZoom(_, force) { + if (_ === map.zoom() && !force) + return false; + var scale = 256 * Math.pow(2, _), + center = pxCenter(), + l = pointLocation(center); + scale = Math.max(1024, Math.min(256 * Math.pow(2, 24), scale)); + projection.scale(scale / (2 * Math.PI)); + zoom.scale(scale); + var t = projection.translate(); + l = locationPoint(l); + t[0] += center[0] - l[0]; + t[1] += center[1] - l[1]; + projection.translate(t); + zoom.translate(projection.translate()); + return true; + } + + function setCenter(_) { + var c = map.center(); + if (_[0] === c[0] && _[1] === c[1]) + return false; + var t = projection.translate(), + pxC = pxCenter(), + ll = projection(_); + projection.translate([ + t[0] - ll[0] + pxC[0], + t[1] - ll[1] + pxC[1]]); + zoom.translate(projection.translate()); + return true; + } + + map.pan = function(d) { + var t = projection.translate(); + t[0] += d[0]; + t[1] += d[1]; + projection.translate(t); + zoom.translate(projection.translate()); + dispatch.move(map); + return redraw(); }; - return presetIcon; -}; -iD.ui.PresetList = function(context) { - var event = d3.dispatch('choose'), - id, - currentPreset, - autofocus = false; + map.dimensions = function(_) { + if (!arguments.length) return dimensions; + var center = map.center(); + dimensions = _; + drawLayers.dimensions(dimensions); + context.background().dimensions(dimensions); + projection.clipExtent([[0, 0], dimensions]); + mouse = iD.util.fastMouse(supersurface.node()); + setCenter(center); + return redraw(); + }; - function presetList(selection) { - var geometry = context.geometry(id), - presets = context.presets().matchGeometry(geometry); + function zoomIn(integer) { + interpolateZoom(~~map.zoom() + integer); + } - selection.html(''); + function zoomOut(integer) { + interpolateZoom(~~map.zoom() - integer); + } - var messagewrap = selection.append('div') - .attr('class', 'header fillL cf'); + map.zoomIn = function() { zoomIn(1); }; + map.zoomInFurther = function() { zoomIn(4); }; - var message = messagewrap.append('h3') - .text(t('inspector.choose')); + map.zoomOut = function() { zoomOut(1); }; + map.zoomOutFurther = function() { zoomOut(4); }; - if (context.entity(id).isUsed(context.graph())) { - messagewrap.append('button') - .attr('class', 'preset-choose') - .on('click', function() { event.choose(currentPreset); }) - .append('span') - .attr('class', 'icon forward'); - } else { - messagewrap.append('button') - .attr('class', 'close') - .on('click', function() { - context.enter(iD.modes.Browse(context)); - }) - .append('span') - .attr('class', 'icon close'); + map.center = function(loc) { + if (!arguments.length) { + return projection.invert(pxCenter()); } - function keydown() { - // hack to let delete shortcut work when search is autofocused - if (search.property('value').length === 0 && - (d3.event.keyCode === d3.keybinding.keyCodes['⌫'] || - d3.event.keyCode === d3.keybinding.keyCodes['⌦'])) { - d3.event.preventDefault(); - d3.event.stopPropagation(); - iD.operations.Delete([id], context)(); - } else if (search.property('value').length === 0 && - (d3.event.ctrlKey || d3.event.metaKey) && - d3.event.keyCode === d3.keybinding.keyCodes.z) { - d3.event.preventDefault(); - d3.event.stopPropagation(); - context.undo(); - } else if (!d3.event.ctrlKey && !d3.event.metaKey) { - d3.select(this).on('keydown', null); - } + if (setCenter(loc)) { + dispatch.move(map); } - function keypress() { - // enter - var value = search.property('value'); - if (d3.event.keyCode === 13 && value.length) { - list.selectAll('.preset-list-item:first-child').datum().choose(); - } + return redraw(); + }; + + map.zoom = function(z) { + if (!arguments.length) { + return Math.max(Math.log(projection.scale() * 2 * Math.PI) / Math.LN2 - 8, 0); } - function inputevent() { - var value = search.property('value'); - list.classed('filtered', value.length); - if (value.length) { - var results = presets.search(value, geometry); - message.text(t('inspector.results', { - n: results.collection.length, - search: value - })); - list.call(drawList, results); - } else { - list.call(drawList, context.presets().defaults(geometry, 36)); - message.text(t('inspector.choose')); - } + if (z < minzoom) { + surface.interrupt(); + iD.ui.flash(context.container()) + .select('.content') + .text(t('cannot_zoom')); + z = context.minEditableZoom(); } - var searchWrap = selection.append('div') - .attr('class', 'search-header'); + if (setZoom(z)) { + dispatch.move(map); + } - var search = searchWrap.append('input') - .attr('class', 'preset-search-input') - .attr('placeholder', t('inspector.search')) - .attr('type', 'search') - .on('keydown', keydown) - .on('keypress', keypress) - .on('input', inputevent); + return redraw(); + }; - searchWrap.append('span') - .attr('class', 'icon search'); + map.zoomTo = function(entity, zoomLimits) { + var extent = entity.extent(context.graph()); + if (!isFinite(extent.area())) return; - if (autofocus) { - search.node().focus(); + var zoom = map.trimmedExtentZoom(extent); + zoomLimits = zoomLimits || [context.minEditableZoom(), 20]; + map.centerZoom(extent.center(), Math.min(Math.max(zoom, zoomLimits[0]), zoomLimits[1])); + }; + + map.centerZoom = function(loc, z) { + var centered = setCenter(loc), + zoomed = setZoom(z); + + if (centered || zoomed) { + dispatch.move(map); } - var listWrap = selection.append('div') - .attr('class', 'inspector-body'); + return redraw(); + }; - var list = listWrap.append('div') - .attr('class', 'preset-list fillL cf') - .call(drawList, context.presets().defaults(geometry, 36)); - } + map.centerEase = function(loc) { + var from = map.center().slice(), + t = 0, + stop; - function drawList(list, presets) { - var collection = presets.collection.map(function(preset) { - return preset.members ? CategoryItem(preset) : PresetItem(preset); + surface.one('mousedown.ease', function() { + stop = true; }); - var items = list.selectAll('.preset-list-item') - .data(collection, function(d) { return d.preset.id; }); + d3.timer(function() { + if (stop) return true; + map.center(iD.geo.interp(from, loc, (t += 1) / 10)); + return t === 10; + }, 20); + return map; + }; - items.enter().append('div') - .attr('class', function(item) { return 'preset-list-item preset-' + item.preset.id.replace('/', '-'); }) - .classed('current', function(item) { return item.preset === currentPreset; }) - .each(function(item) { - d3.select(this).call(item); - }) - .style('opacity', 0) - .transition() - .style('opacity', 1); + map.extent = function(_) { + if (!arguments.length) { + return new iD.geo.Extent(projection.invert([0, dimensions[1]]), + projection.invert([dimensions[0], 0])); + } else { + var extent = iD.geo.Extent(_); + map.centerZoom(extent.center(), map.extentZoom(extent)); + } + }; - items.order(); + map.trimmedExtent = function(_) { + if (!arguments.length) { + var headerY = 60, footerY = 30, pad = 10; + return new iD.geo.Extent(projection.invert([pad, dimensions[1] - footerY - pad]), + projection.invert([dimensions[0] - pad, headerY + pad])); + } else { + var extent = iD.geo.Extent(_); + map.centerZoom(extent.center(), map.trimmedExtentZoom(extent)); + } + }; - items.exit() - .remove(); - } + function calcZoom(extent, dim) { + var tl = projection([extent[0][0], extent[1][1]]), + br = projection([extent[1][0], extent[0][1]]); - function CategoryItem(preset) { - var box, sublist, shown = false; + // Calculate maximum zoom that fits extent + var hFactor = (br[0] - tl[0]) / dim[0], + vFactor = (br[1] - tl[1]) / dim[1], + hZoomDiff = Math.log(Math.abs(hFactor)) / Math.LN2, + vZoomDiff = Math.log(Math.abs(vFactor)) / Math.LN2, + newZoom = map.zoom() - Math.max(hZoomDiff, vZoomDiff); - function item(selection) { - var wrap = selection.append('div') - .attr('class', 'preset-list-button-wrap category col12'); + return newZoom; + } - wrap.append('button') - .attr('class', 'preset-list-button') - .call(iD.ui.PresetIcon() - .geometry(context.geometry(id)) - .preset(preset)) - .on('click', item.choose) - .append('div') - .attr('class', 'label') - .text(preset.name()); + map.extentZoom = function(_) { + return calcZoom(iD.geo.Extent(_), dimensions); + }; - box = selection.append('div') - .attr('class', 'subgrid col12') - .style('max-height', '0px') - .style('opacity', 0); + map.trimmedExtentZoom = function(_) { + var trimY = 120, trimX = 40, + trimmed = [dimensions[0] - trimX, dimensions[1] - trimY]; + return calcZoom(iD.geo.Extent(_), trimmed); + }; - box.append('div') - .attr('class', 'arrow'); + map.editable = function() { + return map.zoom() >= context.minEditableZoom(); + }; - sublist = box.append('div') - .attr('class', 'preset-list fillL3 cf fl'); - } + map.minzoom = function(_) { + if (!arguments.length) return minzoom; + minzoom = _; + return map; + }; - item.choose = function() { - if (shown) { - shown = false; - box.transition() - .duration(200) - .style('opacity', '0') - .style('max-height', '0px') - .style('padding-bottom', '0px'); - } else { - shown = true; - sublist.call(drawList, preset.members); - box.transition() - .duration(200) - .style('opacity', '1') - .style('max-height', 200 + preset.members.collection.length * 80 + 'px') - .style('padding-bottom', '20px'); - } - }; + map.layers = drawLayers; - item.preset = preset; + return d3.rebind(map, dispatch, 'on'); +}; +iD.TileLayer = function() { + var tileSize = 256, + tile = d3.geo.tile(), + projection, + cache = {}, + tileOrigin, + z, + transformProp = iD.util.prefixCSSProperty('Transform'), + source = d3.functor(''); - return item; + function tileSizeAtZoom(d, z) { + return (tileSize * Math.pow(2, z - d[2])) / tileSize; } - function PresetItem(preset) { - function item(selection) { - var wrap = selection.append('div') - .attr('class', 'preset-list-button-wrap col12'); - - wrap.append('button') - .attr('class', 'preset-list-button') - .call(iD.ui.PresetIcon() - .geometry(context.geometry(id)) - .preset(preset)) - .on('click', item.choose) - .append('div') - .attr('class', 'label') - .text(preset.name()); + function atZoom(t, distance) { + var power = Math.pow(2, distance); + return [ + Math.floor(t[0] * power), + Math.floor(t[1] * power), + t[2] + distance]; + } - wrap.call(item.reference.button); - selection.call(item.reference.body); + function lookUp(d) { + for (var up = -1; up > -d[2]; up--) { + var tile = atZoom(d, up); + if (cache[source.url(tile)] !== false) { + return tile; + } } + } - item.choose = function() { - context.presets().choose(preset); + function uniqueBy(a, n) { + var o = [], seen = {}; + for (var i = 0; i < a.length; i++) { + if (seen[a[i][n]] === undefined) { + o.push(a[i]); + seen[a[i][n]] = true; + } + } + return o; + } - context.perform( - iD.actions.ChangePreset(id, currentPreset, preset), - t('operations.change_tags.annotation')); + function addSource(d) { + d.push(source.url(d)); + return d; + } - event.choose(preset); - }; + // Update tiles based on current state of `projection`. + function background(selection) { + tile.scale(projection.scale() * 2 * Math.PI) + .translate(projection.translate()); - item.help = function() { - d3.event.stopPropagation(); - item.reference.toggle(); - }; + tileOrigin = [ + projection.scale() * Math.PI - projection.translate()[0], + projection.scale() * Math.PI - projection.translate()[1]]; - item.preset = preset; - item.reference = iD.ui.TagReference(preset.reference(context.geometry(id))); + z = Math.max(Math.log(projection.scale() * 2 * Math.PI) / Math.log(2) - 8, 0); - return item; + render(selection); } - presetList.autofocus = function(_) { - if (!arguments.length) return autofocus; - autofocus = _; - return presetList; - }; - - presetList.entityID = function(_) { - if (!arguments.length) return id; - id = _; - presetList.preset(context.presets().match(context.entity(id), context.graph())); - return presetList; - }; - - presetList.preset = function(_) { - if (!arguments.length) return currentPreset; - currentPreset = _; - return presetList; - }; + // Derive the tiles onscreen, remove those offscreen and position them. + // Important that this part not depend on `projection` because it's + // rentered when tiles load/error (see #644). + function render(selection) { + var requests = []; - return d3.rebind(presetList, event, 'on'); -}; -iD.ui.RadialMenu = function(context, operations) { - var menu, - center = [0, 0], - tooltip; + if (source.validZoom(z)) { + tile().forEach(function(d) { + addSource(d); + if (d[3] === '') return; + if (typeof d[3] !== 'string') return; // Workaround for chrome crash https://github.com/openstreetmap/iD/issues/2295 + requests.push(d); + if (cache[d[3]] === false && lookUp(d)) { + requests.push(addSource(lookUp(d))); + } + }); - var radialMenu = function(selection) { - if (!operations.length) - return; + requests = uniqueBy(requests, 3).filter(function(r) { + // don't re-request tiles which have failed in the past + return cache[r[3]] !== false; + }); + } - selection.node().parentNode.focus(); + var pixelOffset = [ + source.offset()[0] * Math.pow(2, z), + source.offset()[1] * Math.pow(2, z) + ]; - function click(operation) { - d3.event.stopPropagation(); - if (operation.disabled()) - return; - operation(); - radialMenu.close(); + function load(d) { + cache[d[3]] = true; + d3.select(this) + .on('error', null) + .on('load', null) + .classed('tile-loaded', true); + render(selection); } - menu = selection.append('g') - .attr('class', 'radial-menu') - .attr('transform', 'translate(' + center + ')') - .attr('opacity', 0); - - menu.transition() - .attr('opacity', 1); + function error(d) { + cache[d[3]] = false; + d3.select(this) + .on('error', null) + .on('load', null) + .remove(); + render(selection); + } - var r = 50, - a = Math.PI / 4, - a0 = -Math.PI / 4, - a1 = a0 + (operations.length - 1) * a; + function imageTransform(d) { + var _ts = tileSize * Math.pow(2, z - d[2]); + var scale = tileSizeAtZoom(d, z); + return 'translate(' + + ((d[0] * _ts) - tileOrigin[0] + pixelOffset[0]) + 'px,' + + ((d[1] * _ts) - tileOrigin[1] + pixelOffset[1]) + 'px)' + + 'scale(' + scale + ',' + scale + ')'; + } - menu.append('path') - .attr('class', 'radial-menu-background') - .attr('d', 'M' + r * Math.sin(a0) + ',' + - r * Math.cos(a0) + - ' A' + r + ',' + r + ' 0 ' + (operations.length > 5 ? '1' : '0') + ',0 ' + - (r * Math.sin(a1) + 1e-3) + ',' + - (r * Math.cos(a1) + 1e-3)) // Force positive-length path (#1305) - .attr('stroke-width', 50) - .attr('stroke-linecap', 'round'); + var image = selection + .selectAll('img') + .data(requests, function(d) { return d[3]; }); - var button = menu.selectAll() - .data(operations) - .enter().append('g') - .attr('transform', function(d, i) { - return 'translate(' + r * Math.sin(a0 + i * a) + ',' + - r * Math.cos(a0 + i * a) + ')'; + image.exit() + .style(transformProp, imageTransform) + .classed('tile-removing', true) + .each(function() { + var tile = d3.select(this); + window.setTimeout(function() { + if (tile.classed('tile-removing')) { + tile.remove(); + } + }, 300); }); - button.append('circle') - .attr('class', function(d) { return 'radial-menu-item radial-menu-item-' + d.id; }) - .attr('r', 15) - .classed('disabled', function(d) { return d.disabled(); }) - .on('click', click) - .on('mousedown', mousedown) - .on('mouseover', mouseover) - .on('mouseout', mouseout); + image.enter().append('img') + .attr('class', 'tile') + .attr('src', function(d) { return d[3]; }) + .on('error', error) + .on('load', load); - button.append('use') - .attr('transform', 'translate(-10, -10)') - .attr('clip-path', 'url(#clip-square-20)') - .attr('xlink:href', function(d) { return '#icon-operation-' + (d.disabled() ? 'disabled-' : '') + d.id; }); + image + .style(transformProp, imageTransform) + .classed('tile-removing', false); + } - tooltip = d3.select(document.body) - .append('div') - .attr('class', 'tooltip-inner radial-menu-tooltip'); + background.projection = function(_) { + if (!arguments.length) return projection; + projection = _; + return background; + }; - function mousedown() { - d3.event.stopPropagation(); // https://github.com/openstreetmap/iD/issues/1869 - } + background.dimensions = function(_) { + if (!arguments.length) return tile.size(); + tile.size(_); + return background; + }; - function mouseover(d, i) { - var rect = context.surfaceRect(), - angle = a0 + i * a, - top = rect.top + (r + 25) * Math.cos(angle) + center[1] + 'px', - left = rect.left + (r + 25) * Math.sin(angle) + center[0] + 'px', - bottom = rect.height - (r + 25) * Math.cos(angle) - center[1] + 'px', - right = rect.width - (r + 25) * Math.sin(angle) - center[0] + 'px'; + background.source = function(_) { + if (!arguments.length) return source; + source = _; + cache = {}; + tile.scaleExtent(source.scaleExtent); + return background; + }; - tooltip - .style('top', null) - .style('left', null) - .style('bottom', null) - .style('right', null) - .style('display', 'block') - .html(iD.ui.tooltipHtml(d.tooltip(), d.keys[0])); + return background; +}; +iD.svg = { + PointTransform: function(projection) { + return function(entity) { + // http://jsperf.com/short-array-join + var pt = projection(entity.loc); + return 'translate(' + pt[0] + ',' + pt[1] + ')'; + }; + }, - if (i === 0) { - tooltip - .style('right', right) - .style('top', top); - } else if (i >= 4) { - tooltip - .style('left', left) - .style('bottom', bottom); + Path: function(projection, graph, polygon) { + var cache = {}, + clip = d3.geo.clipExtent().extent(projection.clipExtent()).stream, + project = projection.stream, + path = d3.geo.path() + .projection({stream: function(output) { return polygon ? project(output) : project(clip(output)); }}); + + return function(entity) { + if (entity.id in cache) { + return cache[entity.id]; } else { - tooltip - .style('left', left) - .style('top', top); + return cache[entity.id] = path(entity.asGeoJSON(graph)); } - } + }; + }, - function mouseout() { - tooltip.style('display', 'none'); - } - }; + OneWaySegments: function(projection, graph, dt) { + return function(entity) { + var a, + b, + i = 0, + offset = dt, + segments = [], + clip = d3.geo.clipExtent().extent(projection.clipExtent()).stream, + coordinates = graph.childNodes(entity).map(function(n) { + return n.loc; + }); - radialMenu.close = function() { - if (menu) { - menu - .style('pointer-events', 'none') - .transition() - .attr('opacity', 0) - .remove(); - } + if (entity.tags.oneway === '-1') coordinates.reverse(); - if (tooltip) { - tooltip.remove(); - } - }; + d3.geo.stream({ + type: 'LineString', + coordinates: coordinates + }, projection.stream(clip({ + lineStart: function() {}, + lineEnd: function() { + a = null; + }, + point: function(x, y) { + b = [x, y]; - radialMenu.center = function(_) { - if (!arguments.length) return center; - center = _; - return radialMenu; - }; + if (a) { + var span = iD.geo.euclideanDistance(a, b) - offset; - return radialMenu; -}; -iD.ui.RawMemberEditor = function(context) { - var id; + if (span >= 0) { + var angle = Math.atan2(b[1] - a[1], b[0] - a[0]), + dx = dt * Math.cos(angle), + dy = dt * Math.sin(angle), + p = [a[0] + offset * Math.cos(angle), + a[1] + offset * Math.sin(angle)]; - function selectMember(d) { - d3.event.preventDefault(); - context.enter(iD.modes.Select(context, [d.id])); - } + var segment = 'M' + a[0] + ',' + a[1] + + 'L' + p[0] + ',' + p[1]; - function changeRole(d) { - var role = d3.select(this).property('value'); - context.perform( - iD.actions.ChangeMember(d.relation.id, _.extend({}, d.id, {role: role}), d.index), - t('operations.change_role.annotation')); - } + for (span -= dt; span >= 0; span -= dt) { + p[0] += dx; + p[1] += dy; + segment += 'L' + p[0] + ',' + p[1]; + } - function deleteMember(d) { - context.perform( - iD.actions.DeleteMember(d.relation.id, d.index), - t('operations.delete_member.annotation')); - } + segment += 'L' + b[0] + ',' + b[1]; + segments.push({id: entity.id, index: i, d: segment}); + } - function rawMemberEditor(selection) { - var entity = context.entity(id), - memberships = []; + offset = -span; + i++; + } - entity.members.forEach(function(member, index) { - memberships.push({ - index: index, - id: member.id, - role: member.role, - relation: entity, - member: context.hasEntity(member.id) + a = b; + } + }))); + + return segments; + }; + }, + + RelationMemberTags: function(graph) { + return function(entity) { + var tags = entity.tags; + graph.parentRelations(entity).forEach(function(relation) { + var type = relation.tags.type; + if (type === 'multipolygon' || type === 'boundary') { + tags = _.extend({}, relation.tags, tags); + } }); - }); + return tags; + }; + } +}; +iD.svg.Areas = function(projection) { + // Patterns only work in Firefox when set directly on element. + // (This is not a bug: https://bugzilla.mozilla.org/show_bug.cgi?id=750632) + var patterns = { + wetland: 'wetland', + beach: 'beach', + scrub: 'scrub', + construction: 'construction', + military: 'construction', + cemetery: 'cemetery', + grave_yard: 'cemetery', + meadow: 'meadow', + farm: 'farmland', + farmland: 'farmland', + orchard: 'orchard' + }; - selection.call(iD.ui.Disclosure() - .title(t('inspector.all_members') + ' (' + memberships.length + ')') - .expanded(true) - .on('toggled', toggled) - .content(content)); + var patternKeys = ['landuse', 'natural', 'amenity']; - function toggled(expanded) { - if (expanded) { - selection.node().parentNode.scrollTop += 200; + function setPattern(d) { + for (var i = 0; i < patternKeys.length; i++) { + if (patterns.hasOwnProperty(d.tags[patternKeys[i]])) { + this.style.fill = this.style.stroke = 'url("#pattern-' + patterns[d.tags[patternKeys[i]]] + '")'; + return; } } + this.style.fill = this.style.stroke = ''; + } - function content($wrap) { - var $list = $wrap.selectAll('.member-list') - .data([0]); + return function drawAreas(surface, graph, entities, filter) { + var path = iD.svg.Path(projection, graph, true), + areas = {}, + multipolygon; - $list.enter().append('ul') - .attr('class', 'member-list'); + for (var i = 0; i < entities.length; i++) { + var entity = entities[i]; + if (entity.geometry(graph) !== 'area') continue; - var $items = $list.selectAll('li') - .data(memberships, function(d) { - return iD.Entity.key(d.relation) + ',' + d.index + ',' + - (d.member ? iD.Entity.key(d.member) : 'incomplete'); - }); + multipolygon = iD.geo.isSimpleMultipolygonOuterMember(entity, graph); + if (multipolygon) { + areas[multipolygon.id] = { + entity: multipolygon.mergeTags(entity.tags), + area: Math.abs(entity.area(graph)) + }; + } else if (!areas[entity.id]) { + areas[entity.id] = { + entity: entity, + area: Math.abs(entity.area(graph)) + }; + } + } - var $enter = $items.enter().append('li') - .attr('class', 'member-row form-field') - .classed('member-incomplete', function(d) { return !d.member; }); + areas = d3.values(areas).filter(function hasPath(a) { return path(a.entity); }); + areas.sort(function areaSort(a, b) { return b.area - a.area; }); + areas = _.pluck(areas, 'entity'); - $enter.each(function(d) { - if (d.member) { - var $label = d3.select(this).append('label') - .attr('class', 'form-label') - .append('a') - .attr('href', '#') - .on('click', selectMember); + var strokes = areas.filter(function(area) { + return area.type === 'way'; + }); - $label.append('span') - .attr('class', 'member-entity-type') - .text(function(d) { return context.presets().match(d.member, context.graph()).name(); }); + var data = { + clip: areas, + shadow: strokes, + stroke: strokes, + fill: areas + }; - $label.append('span') - .attr('class', 'member-entity-name') - .text(function(d) { return iD.util.displayName(d.member); }); + var clipPaths = surface.selectAll('defs').selectAll('.clipPath') + .filter(filter) + .data(data.clip, iD.Entity.key); - } else { - d3.select(this).append('label') - .attr('class', 'form-label') - .text(t('inspector.incomplete')); - } - }); + clipPaths.enter() + .append('clipPath') + .attr('class', 'clipPath') + .attr('id', function(entity) { return entity.id + '-clippath'; }) + .append('path'); - $enter.append('input') - .attr('class', 'member-role') - .property('type', 'text') - .attr('maxlength', 255) - .attr('placeholder', t('inspector.role')) - .property('value', function(d) { return d.role; }) - .on('change', changeRole); + clipPaths.selectAll('path') + .attr('d', path); - $enter.append('button') - .attr('tabindex', -1) - .attr('class', 'remove button-input-action member-delete minor') - .on('click', deleteMember) - .append('span') - .attr('class', 'icon delete'); + clipPaths.exit() + .remove(); - $items.exit() - .remove(); - } - } + var areagroup = surface + .selectAll('.layer-areas') + .selectAll('g.areagroup') + .data(['fill', 'shadow', 'stroke']); - rawMemberEditor.entityID = function(_) { - if (!arguments.length) return id; - id = _; - return rawMemberEditor; - }; + areagroup.enter() + .append('g') + .attr('class', function(d) { return 'layer areagroup area-' + d; }); - return rawMemberEditor; -}; -iD.ui.RawMembershipEditor = function(context) { - var id, showBlank; + var paths = areagroup + .selectAll('path') + .filter(filter) + .data(function(layer) { return data[layer]; }, iD.Entity.key); - function selectRelation(d) { - d3.event.preventDefault(); - context.enter(iD.modes.Select(context, [d.relation.id])); - } + // Remove exiting areas first, so they aren't included in the `fills` + // array used for sorting below (https://github.com/openstreetmap/iD/issues/1903). + paths.exit() + .remove(); - function changeRole(d) { - var role = d3.select(this).property('value'); - context.perform( - iD.actions.ChangeMember(d.relation.id, _.extend({}, d.member, {role: role}), d.index), - t('operations.change_role.annotation')); - } + var fills = surface.selectAll('.area-fill path.area')[0]; - function addMembership(d, role) { - showBlank = false; + var bisect = d3.bisector(function(node) { + return -node.__data__.area(graph); + }).left; - if (d.relation) { - context.perform( - iD.actions.AddMember(d.relation.id, {id: id, type: context.entity(id).type, role: role}), - t('operations.add_member.annotation')); + function sortedByArea(entity) { + if (this.__data__ === 'fill') { + return fills[bisect(fills, -entity.area(graph))]; + } + } - } else { - var relation = iD.Relation(); + paths.enter() + .insert('path', sortedByArea) + .each(function(entity) { + var layer = this.parentNode.__data__; - context.perform( - iD.actions.AddEntity(relation), - iD.actions.AddMember(relation.id, {id: id, type: context.entity(id).type, role: role}), - t('operations.add.annotation.relation')); + this.setAttribute('class', entity.type + ' area ' + layer + ' ' + entity.id); - context.enter(iD.modes.Select(context, [relation.id])); - } - } + if (layer === 'fill') { + this.setAttribute('clip-path', 'url(#' + entity.id + '-clippath)'); + setPattern.apply(this, arguments); + } + }) + .call(iD.svg.TagClasses()); - function deleteMembership(d) { - context.perform( - iD.actions.DeleteMember(d.relation.id, d.index), - t('operations.delete_member.annotation')); + paths + .attr('d', path); + }; +}; +/* + A standalone SVG element that contains only a `defs` sub-element. To be + used once globally, since defs IDs must be unique within a document. +*/ +iD.svg.Defs = function(context) { + + function SVGSpriteDefinition(id, href) { + return function(defs) { + d3.xml(href, 'image/svg+xml', function(err, svg) { + if (err) return; + defs.node().appendChild( + d3.select(svg.documentElement).attr('id', id).node() + ); + }); + }; } - function relations(q) { - var newRelation = { - relation: null, - value: t('inspector.new_relation') - }, - result = [], - graph = context.graph(); + return function drawDefs(selection) { + var defs = selection.append('defs'); - context.intersects(context.extent()).forEach(function(entity) { - if (entity.type !== 'relation' || entity.id === id) - return; + // marker + defs.append('marker') + .attr({ + id: 'oneway-marker', + viewBox: '0 0 10 10', + refY: 2.5, + refX: 5, + markerWidth: 2, + markerHeight: 2, + markerUnits: 'strokeWidth', + orient: 'auto' + }) + .append('path') + .attr('class', 'oneway') + .attr('d', 'M 5 3 L 0 3 L 0 2 L 5 2 L 5 0 L 10 2.5 L 5 5 z') + .attr('stroke', 'none') + .attr('fill', '#000') + .attr('opacity', '0.5'); - var presetName = context.presets().match(entity, graph).name(), - entityName = iD.util.displayName(entity) || ''; + // patterns + var patterns = defs.selectAll('pattern') + .data([ + // pattern name, pattern image name + ['wetland', 'wetland'], + ['construction', 'construction'], + ['cemetery', 'cemetery'], + ['orchard', 'orchard'], + ['farmland', 'farmland'], + ['beach', 'dots'], + ['scrub', 'dots'], + ['meadow', 'dots'] + ]) + .enter() + .append('pattern') + .attr({ + id: function (d) { + return 'pattern-' + d[0]; + }, + width: 32, + height: 32, + patternUnits: 'userSpaceOnUse' + }); - var value = presetName + ' ' + entityName; - if (q && value.toLowerCase().indexOf(q.toLowerCase()) === -1) - return; + patterns.append('rect') + .attr({ + x: 0, + y: 0, + width: 32, + height: 32, + 'class': function (d) { + return 'pattern-color-' + d[0]; + } + }); - result.push({ - relation: entity, - value: value + patterns.append('image') + .attr({ + x: 0, + y: 0, + width: 32, + height: 32 + }) + .attr('xlink:href', function (d) { + return context.imagePath('pattern/' + d[1] + '.png'); }); - }); - result.sort(function(a, b) { - return iD.Relation.creationOrder(a.relation, b.relation); - }); - result.unshift(newRelation); + // clip paths + defs.selectAll() + .data([12, 18, 20, 32, 45]) + .enter().append('clipPath') + .attr('id', function (d) { + return 'clip-square-' + d; + }) + .append('rect') + .attr('x', 0) + .attr('y', 0) + .attr('width', function (d) { + return d; + }) + .attr('height', function (d) { + return d; + }); - return result; - } + defs.call(SVGSpriteDefinition( + 'iD-sprite', + context.imagePath('iD-sprite.svg'))); - function rawMembershipEditor(selection) { - var entity = context.entity(id), - memberships = []; + defs.call(SVGSpriteDefinition( + 'maki-sprite', + context.imagePath('maki-sprite.svg'))); + }; +}; +iD.svg.Gpx = function(projection, context) { + var showLabels = true, + layer; - context.graph().parentRelations(entity).forEach(function(relation) { - relation.members.forEach(function(member, index) { - if (member.id === entity.id) { - memberships.push({relation: relation, member: member, index: index}); - } - }); - }); + function init() { + if (iD.svg.Gpx.initialized) return; // run once - selection.call(iD.ui.Disclosure() - .title(t('inspector.all_relations') + ' (' + memberships.length + ')') - .expanded(true) - .on('toggled', toggled) - .content(content)); + iD.svg.Gpx.geojson = {}; + iD.svg.Gpx.enabled = true; - function toggled(expanded) { - if (expanded) { - selection.node().parentNode.scrollTop += 200; - } + function over() { + d3.event.stopPropagation(); + d3.event.preventDefault(); + d3.event.dataTransfer.dropEffect = 'copy'; } - function content($wrap) { - var $list = $wrap.selectAll('.member-list') - .data([0]); - - $list.enter().append('ul') - .attr('class', 'member-list'); + d3.select('body') + .attr('dropzone', 'copy') + .on('drop.localgpx', function() { + d3.event.stopPropagation(); + d3.event.preventDefault(); + if (!iD.detect().filedrop) return; + drawGpx.files(d3.event.dataTransfer.files); + }) + .on('dragenter.localgpx', over) + .on('dragexit.localgpx', over) + .on('dragover.localgpx', over); - var $items = $list.selectAll('li.member-row-normal') - .data(memberships, function(d) { return iD.Entity.key(d.relation) + ',' + d.index; }); + iD.svg.Gpx.initialized = true; + } - var $enter = $items.enter().append('li') - .attr('class', 'member-row member-row-normal form-field'); - var $label = $enter.append('label') - .attr('class', 'form-label') - .append('a') - .attr('href', '#') - .on('click', selectRelation); + function drawGpx(surface) { + var geojson = iD.svg.Gpx.geojson, + enabled = iD.svg.Gpx.enabled; - $label.append('span') - .attr('class', 'member-entity-type') - .text(function(d) { return context.presets().match(d.relation, context.graph()).name(); }); + layer = surface.selectAll('.layer-gpx') + .data(enabled ? [0] : []); - $label.append('span') - .attr('class', 'member-entity-name') - .text(function(d) { return iD.util.displayName(d.relation); }); + layer.enter() + .append('g') + .attr('class', 'layer-gpx'); - $enter.append('input') - .attr('class', 'member-role') - .property('type', 'text') - .attr('maxlength', 255) - .attr('placeholder', t('inspector.role')) - .property('value', function(d) { return d.member.role; }) - .on('change', changeRole); + layer.exit() + .remove(); - $enter.append('button') - .attr('tabindex', -1) - .attr('class', 'remove button-input-action member-delete minor') - .on('click', deleteMembership) - .append('span') - .attr('class', 'icon delete'); - $items.exit() - .remove(); + var paths = layer + .selectAll('path') + .data([geojson]); - if (showBlank) { - var $new = $list.selectAll('.member-row-new') - .data([0]); + paths.enter() + .append('path') + .attr('class', 'gpx'); - $enter = $new.enter().append('li') - .attr('class', 'member-row member-row-new form-field'); + paths.exit() + .remove(); - $enter.append('input') - .attr('type', 'text') - .attr('class', 'member-entity-input') - .call(d3.combobox() - .minItems(1) - .fetcher(function(value, callback) { - callback(relations(value)); - }) - .on('accept', function(d) { - addMembership(d, $new.select('.member-role').property('value')); - })); + var path = d3.geo.path() + .projection(projection); - $enter.append('input') - .attr('class', 'member-role') - .property('type', 'text') - .attr('maxlength', 255) - .attr('placeholder', t('inspector.role')) - .on('change', changeRole); + paths + .attr('d', path); - $enter.append('button') - .attr('tabindex', -1) - .attr('class', 'remove button-input-action member-delete minor') - .on('click', deleteMembership) - .append('span') - .attr('class', 'icon delete'); - } else { - $list.selectAll('.member-row-new') - .remove(); - } + var labels = layer.selectAll('text') + .data(showLabels && geojson.features ? geojson.features : []); - var $add = $wrap.selectAll('.add-relation') - .data([0]); + labels.enter() + .append('text') + .attr('class', 'gpx') + .text(function(d) { + return d.properties.desc || d.properties.name; + }); - $add.enter().append('button') - .attr('class', 'add-relation') - .append('span') - .attr('class', 'icon plus light'); + labels.exit() + .remove(); + + labels + .attr('x', function(d) { + var centroid = path.centroid(d); + return centroid[0] + 7; + }) + .attr('y', function(d) { + var centroid = path.centroid(d); + return centroid[1]; + }); - $wrap.selectAll('.add-relation') - .on('click', function() { - showBlank = true; - content($wrap); - $list.selectAll('.member-entity-input').node().focus(); - }); - } } - rawMembershipEditor.entityID = function(_) { - if (!arguments.length) return id; - id = _; - return rawMembershipEditor; - }; + function toDom(x) { + return (new DOMParser()).parseFromString(x, 'text/xml'); + } - return rawMembershipEditor; -}; -iD.ui.RawTagEditor = function(context) { - var event = d3.dispatch('change'), - taginfo = iD.taginfo(), - showBlank = false, - state, - preset, - tags, - id; + function redraw() { + context.pan([0,0]); + } - function rawTagEditor(selection) { - var count = Object.keys(tags).filter(function(d) { return d; }).length; + drawGpx.showLabels = function(_) { + if (!arguments.length) return showLabels; + showLabels = _; + return this; + }; - selection.call(iD.ui.Disclosure() - .title(t('inspector.all_tags') + ' (' + count + ')') - .expanded(iD.ui.RawTagEditor.expanded || preset.isFallback()) - .on('toggled', toggled) - .content(content)); + drawGpx.enabled = function(_) { + if (!arguments.length) return iD.svg.Gpx.enabled; + iD.svg.Gpx.enabled = _; + return this; + }; - function toggled(expanded) { - iD.ui.RawTagEditor.expanded = expanded; - if (expanded) { - selection.node().parentNode.scrollTop += 200; - } - } - } + drawGpx.hasGpx = function() { + var geojson = iD.svg.Gpx.geojson; + return (!(_.isEmpty(geojson) || _.isEmpty(geojson.features))); + }; - function content($wrap) { - var entries = d3.entries(tags); + drawGpx.geojson = function(gj) { + if (!arguments.length) return iD.svg.Gpx.geojson; + if (_.isEmpty(gj) || _.isEmpty(gj.features)) return this; + iD.svg.Gpx.geojson = gj; + return this; + }; - if (!entries.length || showBlank) { - showBlank = false; - entries.push({key: '', value: ''}); - } + drawGpx.url = function(url) { + d3.text(url, function(err, data) { + if (!err) { + drawGpx.geojson(toGeoJSON.gpx(toDom(data))); + redraw(); + } + }); + return this; + }; - var $list = $wrap.selectAll('.tag-list') - .data([0]); + drawGpx.files = function(fileList) { + var f = fileList[0], + reader = new FileReader(); - $list.enter().append('ul') - .attr('class', 'tag-list'); + reader.onload = function(e) { + drawGpx.geojson(toGeoJSON.gpx(toDom(e.target.result))).fitZoom(); + redraw(); + }; - var $newTag = $wrap.selectAll('.add-tag') - .data([0]); + reader.readAsText(f); + return this; + }; - var $enter = $newTag.enter().append('button') - .attr('class', 'add-tag'); + drawGpx.fitZoom = function() { + if (!this.hasGpx()) return this; + var geojson = iD.svg.Gpx.geojson; - $enter.append('span') - .attr('class', 'icon plus light'); + var map = context.map(), + viewport = map.trimmedExtent().polygon(), + coords = _.reduce(geojson.features, function(coords, feature) { + var c = feature.geometry.coordinates; + return _.union(coords, feature.geometry.type === 'Point' ? [c] : c); + }, []); - $newTag.on('click', addTag); + if (!iD.geo.polygonIntersectsPolygon(viewport, coords, true)) { + var extent = iD.geo.Extent(d3.geo.bounds(geojson)); + map.centerZoom(extent.center(), map.trimmedExtentZoom(extent)); + } - var $items = $list.selectAll('li') - .data(entries, function(d) { return d.key; }); + return this; + }; - // Enter + init(); + return drawGpx; +}; +iD.svg.Icon = function(name, svgklass, useklass) { + return function drawIcon(selection) { + selection.selectAll('svg') + .data([0]) + .enter() + .append('svg') + .attr('class', 'icon ' + (svgklass || '')) + .append('use') + .attr('xlink:href', name) + .attr('class', useklass); + }; +}; +iD.svg.Labels = function(projection, context) { + var path = d3.geo.path().projection(projection); - $enter = $items.enter().append('li') - .attr('class', 'tag-row cf'); + // Replace with dict and iterate over entities tags instead? + var label_stack = [ + ['line', 'aeroway'], + ['line', 'highway'], + ['line', 'railway'], + ['line', 'waterway'], + ['area', 'aeroway'], + ['area', 'amenity'], + ['area', 'building'], + ['area', 'historic'], + ['area', 'leisure'], + ['area', 'man_made'], + ['area', 'natural'], + ['area', 'shop'], + ['area', 'tourism'], + ['point', 'aeroway'], + ['point', 'amenity'], + ['point', 'building'], + ['point', 'historic'], + ['point', 'leisure'], + ['point', 'man_made'], + ['point', 'natural'], + ['point', 'shop'], + ['point', 'tourism'], + ['line', 'name'], + ['area', 'name'], + ['point', 'name'] + ]; - $enter.append('div') - .attr('class', 'key-wrap') - .append('input') - .property('type', 'text') - .attr('class', 'key') - .attr('maxlength', 255); + var default_size = 12; - $enter.append('div') - .attr('class', 'input-wrap-position') - .append('input') - .property('type', 'text') - .attr('class', 'value') - .attr('maxlength', 255); + var font_sizes = label_stack.map(function(d) { + var style = iD.util.getStyle('text.' + d[0] + '.tag-' + d[1]), + m = style && style.cssText.match('font-size: ([0-9]{1,2})px;'); + if (m) return parseInt(m[1], 10); - $enter.append('button') - .attr('tabindex', -1) - .attr('class', 'remove minor') - .append('span') - .attr('class', 'icon delete'); + style = iD.util.getStyle('text.' + d[0]); + m = style && style.cssText.match('font-size: ([0-9]{1,2})px;'); + if (m) return parseInt(m[1], 10); - $enter.each(bindTypeahead); + return default_size; + }); - // Update + var iconSize = 18; - $items.order(); + var pointOffsets = [ + [15, -11, 'start'], // right + [10, -11, 'start'], // unused right now + [-15, -11, 'end'] + ]; - $items.each(function(tag) { - var reference = iD.ui.TagReference({key: tag.key}); + var lineOffsets = [50, 45, 55, 40, 60, 35, 65, 30, 70, 25, + 75, 20, 80, 15, 95, 10, 90, 5, 95]; - if (state === 'hover') { - reference.showing(false); - } - d3.select(this) - .call(reference.button) - .call(reference.body); + var noIcons = ['building', 'landuse', 'natural']; + function blacklisted(preset) { + return _.any(noIcons, function(s) { + return preset.id.indexOf(s) >= 0; }); + } - $items.select('input.key') - .value(function(d) { return d.key; }) - .on('blur', keyChange) - .on('change', keyChange); + function get(array, prop) { + return function(d, i) { return array[i][prop]; }; + } - $items.select('input.value') - .value(function(d) { return d.value; }) - .on('blur', valueChange) - .on('change', valueChange) - .on('keydown.push-more', pushMore); + var textWidthCache = {}; - $items.select('button.remove') - .on('click', removeTag); + function textWidth(text, size, elem) { + var c = textWidthCache[size]; + if (!c) c = textWidthCache[size] = {}; - $items.exit() - .remove(); + if (c[text]) { + return c[text]; - function pushMore() { - if (d3.event.keyCode === 9 && !d3.event.shiftKey && - $list.selectAll('li:last-child input.value').node() === this) { - addTag(); + } else if (elem) { + c[text] = elem.getComputedTextLength(); + return c[text]; + + } else { + var str = encodeURIComponent(text).match(/%[CDEFcdef]/g); + if (str === null) { + return size / 3 * 2 * text.length; + } else { + return size / 3 * (2 * text.length + str.length); } } + } - function bindTypeahead() { - var row = d3.select(this), - key = row.selectAll('input.key'), - value = row.selectAll('input.value'); - - function sort(value, data) { - var sameletter = [], - other = []; - for (var i = 0; i < data.length; i++) { - if (data[i].value.substring(0, value.length) === value) { - sameletter.push(data[i]); - } else { - other.push(data[i]); - } - } - return sameletter.concat(other); - } + function drawLineLabels(group, entities, filter, classes, labels) { + var texts = group.selectAll('text.' + classes) + .filter(filter) + .data(entities, iD.Entity.key); - key.call(d3.combobox() - .fetcher(function(value, callback) { - taginfo.keys({ - debounce: true, - geometry: context.geometry(id), - query: value - }, function(err, data) { - if (!err) callback(sort(value, data)); - }); - })); + texts.enter() + .append('text') + .attr('class', function(d, i) { return classes + ' ' + labels[i].classes + ' ' + d.id; }) + .append('textPath') + .attr('class', 'textpath'); - value.call(d3.combobox() - .fetcher(function(value, callback) { - taginfo.values({ - debounce: true, - key: key.value(), - geometry: context.geometry(id), - query: value - }, function(err, data) { - if (!err) callback(sort(value, data)); - }); - })); - } - function keyChange(d) { - var tag = {}; - tag[d.key] = undefined; - tag[this.value] = d.value; - d.key = this.value; // Maintain DOM identity through the subsequent update. - event.change(tag); - } - - function valueChange(d) { - var tag = {}; - tag[d.key] = this.value; - event.change(tag); - } - - function removeTag(d) { - var tag = {}; - tag[d.key] = undefined; - event.change(tag); - } + texts.selectAll('.textpath') + .filter(filter) + .data(entities, iD.Entity.key) + .attr({ + 'startOffset': '50%', + 'xlink:href': function(d) { return '#labelpath-' + d.id; } + }) + .text(iD.util.displayName); - function addTag() { - // Wrapped in a setTimeout in case it's being called from a blur - // handler. Without the setTimeout, the call to `content` would - // wipe out the pending value change. - setTimeout(function() { - showBlank = true; - content($wrap); - $list.selectAll('li:last-child input.key').node().focus(); - }, 0); - } + texts.exit().remove(); } - rawTagEditor.state = function(_) { - if (!arguments.length) return state; - state = _; - return rawTagEditor; - }; - - rawTagEditor.preset = function(_) { - if (!arguments.length) return preset; - preset = _; - return rawTagEditor; - }; + function drawLinePaths(group, entities, filter, classes, labels) { + var halos = group.selectAll('path') + .filter(filter) + .data(entities, iD.Entity.key); - rawTagEditor.tags = function(_) { - if (!arguments.length) return tags; - tags = _; - return rawTagEditor; - }; + halos.enter() + .append('path') + .style('stroke-width', get(labels, 'font-size')) + .attr('id', function(d) { return 'labelpath-' + d.id; }) + .attr('class', classes); - rawTagEditor.entityID = function(_) { - if (!arguments.length) return id; - id = _; - return rawTagEditor; - }; + halos.attr('d', get(labels, 'lineString')); - return d3.rebind(rawTagEditor, event, 'on'); -}; -iD.ui.Restore = function(context) { - return function(selection) { - if (!context.history().lock() || !context.history().restorableChanges()) - return; + halos.exit().remove(); + } - var modal = iD.ui.modal(selection); + function drawPointLabels(group, entities, filter, classes, labels) { + var texts = group.selectAll('text.' + classes) + .filter(filter) + .data(entities, iD.Entity.key); - modal.select('.modal') - .attr('class', 'modal fillL col6'); + texts.enter() + .append('text') + .attr('class', function(d, i) { return classes + ' ' + labels[i].classes + ' ' + d.id; }); - var introModal = modal.select('.content'); + texts.attr('x', get(labels, 'x')) + .attr('y', get(labels, 'y')) + .style('text-anchor', get(labels, 'textAnchor')) + .text(iD.util.displayName) + .each(function(d, i) { textWidth(iD.util.displayName(d), labels[i].height, this); }); - introModal.attr('class','cf'); + texts.exit().remove(); + return texts; + } - introModal.append('div') - .attr('class', 'modal-section') - .append('h3') - .text(t('restore.heading')); + function drawAreaLabels(group, entities, filter, classes, labels) { + entities = entities.filter(hasText); + labels = labels.filter(hasText); + return drawPointLabels(group, entities, filter, classes, labels); - introModal.append('div') - .attr('class','modal-section') - .append('p') - .text(t('restore.description')); + function hasText(d, i) { + return labels[i].hasOwnProperty('x') && labels[i].hasOwnProperty('y'); + } + } - var buttonWrap = introModal.append('div') - .attr('class', 'modal-actions cf'); + function drawAreaIcons(group, entities, filter, classes, labels) { + var icons = group.selectAll('use') + .filter(filter) + .data(entities, iD.Entity.key); - var restore = buttonWrap.append('button') - .attr('class', 'restore col6') - .text(t('restore.restore')) - .on('click', function() { - context.history().restore(); - modal.remove(); - }); + icons.enter() + .append('use') + .attr('class', 'icon areaicon') + .attr('width', '18px') + .attr('height', '18px'); - buttonWrap.append('button') - .attr('class', 'reset col6') - .text(t('restore.reset')) - .on('click', function() { - context.history().clearSaved(); - modal.remove(); + icons.attr('transform', get(labels, 'transform')) + .attr('xlink:href', function(d) { + var icon = context.presets().match(d, context.graph()).icon; + return '#' + icon + (icon === 'hairdresser' ? '-24': '-18'); // workaround: maki hairdresser-18 broken? }); - restore.node().focus(); - }; -}; -iD.ui.Save = function(context) { - var history = context.history(), - key = iD.ui.cmd('⌘S'); - function saving() { - return context.mode().id === 'save'; + icons.exit().remove(); } - function save() { - d3.event.preventDefault(); - if (!saving() && history.hasChanges()) { - context.enter(iD.modes.Save(context)); - } + function reverse(p) { + var angle = Math.atan2(p[1][1] - p[0][1], p[1][0] - p[0][0]); + return !(p[0][0] < p[p.length - 1][0] && angle < Math.PI/2 && angle > -Math.PI/2); } - return function(selection) { - var tooltip = bootstrap.tooltip() - .placement('bottom') - .html(true) - .title(iD.ui.tooltipHtml(t('save.no_changes'), key)); + function lineString(nodes) { + return 'M' + nodes.join('L'); + } - var button = selection.append('button') - .attr('class', 'save col12 disabled') - .attr('tabindex', -1) - .on('click', save) - .call(tooltip); + function subpath(nodes, from, to) { + function segmentLength(i) { + var dx = nodes[i][0] - nodes[i + 1][0]; + var dy = nodes[i][1] - nodes[i + 1][1]; + return Math.sqrt(dx * dx + dy * dy); + } - button.append('span') - .attr('class', 'label') - .text(t('save.title')); + var sofar = 0, + start, end, i0, i1; + for (var i = 0; i < nodes.length - 1; i++) { + var current = segmentLength(i); + var portion; + if (!start && sofar + current >= from) { + portion = (from - sofar) / current; + start = [ + nodes[i][0] + portion * (nodes[i + 1][0] - nodes[i][0]), + nodes[i][1] + portion * (nodes[i + 1][1] - nodes[i][1]) + ]; + i0 = i + 1; + } + if (!end && sofar + current >= to) { + portion = (to - sofar) / current; + end = [ + nodes[i][0] + portion * (nodes[i + 1][0] - nodes[i][0]), + nodes[i][1] + portion * (nodes[i + 1][1] - nodes[i][1]) + ]; + i1 = i + 1; + } + sofar += current; - button.append('span') - .attr('class', 'count') - .text('0'); + } + var ret = nodes.slice(i0, i1); + ret.unshift(start); + ret.push(end); + return ret; - var keybinding = d3.keybinding('undo-redo') - .on(key, save); + } - d3.select(document) - .call(keybinding); + function hideOnMouseover() { + var layers = d3.select(this) + .selectAll('.layer-label, .layer-halo'); - var numChanges = 0; + layers.selectAll('.proximate') + .classed('proximate', false); - context.history().on('change.save', function() { - var _ = history.difference().summary().length; - if (_ === numChanges) - return; - numChanges = _; + var mouse = context.mouse(), + pad = 50, + rect = [mouse[0] - pad, mouse[1] - pad, mouse[0] + pad, mouse[1] + pad], + ids = _.pluck(rtree.search(rect), 'id'); - tooltip.title(iD.ui.tooltipHtml(t(numChanges > 0 ? - 'save.help' : 'save.no_changes'), key)); + if (!ids.length) return; + layers.selectAll('.' + ids.join(', .')) + .classed('proximate', true); + } - button - .classed('disabled', numChanges === 0) - .classed('has-count', numChanges > 0); + var rtree = rbush(), + rectangles = {}; - button.select('span.count') - .text(numChanges); - }); + function drawLabels(surface, graph, entities, filter, dimensions, fullRedraw) { + var hidePoints = !surface.selectAll('.node.point').node(); - context.on('enter.save', function() { - button.property('disabled', saving()); - if (saving()) button.call(tooltip.hide); - }); - }; -}; -iD.ui.SelectionList = function(context, selectedIDs) { + var labelable = [], i, k, entity; + for (i = 0; i < label_stack.length; i++) labelable.push([]); - function selectionList(selection) { - selection.classed('selection-list-pane', true); + if (fullRedraw) { + rtree.clear(); + rectangles = {}; + } else { + for (i = 0; i < entities.length; i++) { + rtree.remove(rectangles[entities[i].id]); + } + } - var header = selection.append('div') - .attr('class', 'header fillL cf'); + // Split entities into groups specified by label_stack + for (i = 0; i < entities.length; i++) { + entity = entities[i]; + var geometry = entity.geometry(graph); - header.append('h3') - .text(t('inspector.multiselect')); + if (geometry === 'vertex') + continue; + if (hidePoints && geometry === 'point') + continue; - var listWrap = selection.append('div') - .attr('class', 'inspector-body'); + var preset = geometry === 'area' && context.presets().match(entity, graph), + icon = preset && !blacklisted(preset) && preset.icon; - var list = listWrap.append('div') - .attr('class', 'feature-list cf'); + if (!icon && !iD.util.displayName(entity)) + continue; - context.history().on('change.selection-list', drawList); - drawList(); + for (k = 0; k < label_stack.length; k++) { + if (geometry === label_stack[k][0] && entity.tags[label_stack[k][1]]) { + labelable[k].push(entity); + break; + } + } + } - function drawList() { - var entities = selectedIDs - .map(function(id) { return context.hasEntity(id); }) - .filter(function(entity) { return entity; }); + var positions = { + point: [], + line: [], + area: [] + }; - var items = list.selectAll('.feature-list-item') - .data(entities, iD.Entity.key); + var labelled = { + point: [], + line: [], + area: [] + }; - var enter = items.enter().append('button') - .attr('class', 'feature-list-item') - .on('click', function(entity) { - context.enter(iD.modes.Select(context, [entity.id])); - }); + // Try and find a valid label for labellable entities + for (k = 0; k < labelable.length; k++) { + var font_size = font_sizes[k]; + for (i = 0; i < labelable[k].length; i++) { + entity = labelable[k][i]; + var name = iD.util.displayName(entity), + width = name && textWidth(name, font_size), + p; + if (entity.geometry(graph) === 'point') { + p = getPointLabel(entity, width, font_size); + } else if (entity.geometry(graph) === 'line') { + p = getLineLabel(entity, width, font_size); + } else if (entity.geometry(graph) === 'area') { + p = getAreaLabel(entity, width, font_size); + } + if (p) { + p.classes = entity.geometry(graph) + ' tag-' + label_stack[k][1]; + positions[entity.geometry(graph)].push(p); + labelled[entity.geometry(graph)].push(entity); + } + } + } - // Enter + function getPointLabel(entity, width, height) { + var coord = projection(entity.loc), + m = 5, // margin + offset = pointOffsets[0], + p = { + height: height, + width: width, + x: coord[0] + offset[0], + y: coord[1] + offset[1], + textAnchor: offset[2] + }; + var rect = [p.x - m, p.y - m, p.x + width + m, p.y + height + m]; + if (tryInsert(rect, entity.id)) return p; + } - var label = enter.append('div') - .attr('class', 'label'); - label.append('span') - .attr('class', 'icon icon-pre-text'); + function getLineLabel(entity, width, height) { + var nodes = _.pluck(graph.childNodes(entity), 'loc').map(projection), + length = iD.geo.pathLength(nodes); + if (length < width + 20) return; - label.append('span') - .attr('class', 'entity-type'); + for (var i = 0; i < lineOffsets.length; i++) { + var offset = lineOffsets[i], + middle = offset / 100 * length, + start = middle - width/2; + if (start < 0 || start + width > length) continue; + var sub = subpath(nodes, start, start + width), + rev = reverse(sub), + rect = [ + Math.min(sub[0][0], sub[sub.length - 1][0]) - 10, + Math.min(sub[0][1], sub[sub.length - 1][1]) - 10, + Math.max(sub[0][0], sub[sub.length - 1][0]) + 20, + Math.max(sub[0][1], sub[sub.length - 1][1]) + 30 + ]; + if (rev) sub = sub.reverse(); + if (tryInsert(rect, entity.id)) return { + 'font-size': height + 2, + lineString: lineString(sub), + startOffset: offset + '%' + }; + } + } - label.append('span') - .attr('class', 'entity-name'); + function getAreaLabel(entity, width, height) { + var centroid = path.centroid(entity.asGeoJSON(graph, true)), + extent = entity.extent(graph), + entitywidth = projection(extent[1])[0] - projection(extent[0])[0], + rect; - // Update + if (isNaN(centroid[0]) || entitywidth < 20) return; - items.selectAll('.icon') - .attr('class', function(entity) { return context.geometry(entity.id) + ' icon icon-pre-text'; }); + var iconX = centroid[0] - (iconSize/2), + iconY = centroid[1] - (iconSize/2), + textOffset = iconSize + 5; - items.selectAll('.entity-type') - .text(function(entity) { return context.presets().match(entity, context.graph()).name(); }); + var p = { + transform: 'translate(' + iconX + ',' + iconY + ')' + }; - items.selectAll('.entity-name') - .text(function(entity) { return iD.util.displayName(entity); }); + if (width && entitywidth >= width + 20) { + p.x = centroid[0]; + p.y = centroid[1] + textOffset; + p.textAnchor = 'middle'; + p.height = height; + rect = [p.x - width/2, p.y, p.x + width/2, p.y + height + textOffset]; + } else { + rect = [iconX, iconY, iconX + iconSize, iconY + iconSize]; + } - // Exit + if (tryInsert(rect, entity.id)) return p; - items.exit() - .remove(); } - } - return selectionList; + function tryInsert(rect, id) { + // Check that label is visible + if (rect[0] < 0 || rect[1] < 0 || rect[2] > dimensions[0] || + rect[3] > dimensions[1]) return false; + var v = rtree.search(rect).length === 0; + if (v) { + rect.id = id; + rtree.insert(rect); + rectangles[id] = rect; + } + return v; + } -}; -iD.ui.Sidebar = function(context) { - var inspector = iD.ui.Inspector(context), - current; + var label = surface.selectAll('.layer-label'), + halo = surface.selectAll('.layer-halo'); - function sidebar(selection) { - var featureListWrap = selection.append('div') - .attr('class', 'feature-list-pane') - .call(iD.ui.FeatureList(context)); + // points + drawPointLabels(label, labelled.point, filter, 'pointlabel', positions.point); + drawPointLabels(halo, labelled.point, filter, 'pointlabel-halo', positions.point); - selection.call(iD.ui.Notice(context)); + // lines + drawLinePaths(halo, labelled.line, filter, '', positions.line); + drawLineLabels(label, labelled.line, filter, 'linelabel', positions.line); + drawLineLabels(halo, labelled.line, filter, 'linelabel-halo', positions.line); - var inspectorWrap = selection.append('div') - .attr('class', 'inspector-hidden inspector-wrap fr'); + // areas + drawAreaLabels(label, labelled.area, filter, 'arealabel', positions.area); + drawAreaLabels(halo, labelled.area, filter, 'arealabel-halo', positions.area); + drawAreaIcons(label, labelled.area, filter, 'arealabel-icon', positions.area); + } - sidebar.hover = function(id) { - if (!current && id) { - featureListWrap.classed('inspector-hidden', true); - inspectorWrap.classed('inspector-hidden', false) - .classed('inspector-hover', true); + drawLabels.supersurface = function(supersurface) { + supersurface + .on('mousemove.hidelabels', hideOnMouseover) + .on('mousedown.hidelabels', function () { + supersurface.on('mousemove.hidelabels', null); + }) + .on('mouseup.hidelabels', function () { + supersurface.on('mousemove.hidelabels', hideOnMouseover); + }); + }; - if (inspector.entityID() !== id || inspector.state() !== 'hover') { - inspector - .state('hover') - .entityID(id); + return drawLabels; +}; +iD.svg.Layers = function(projection, context) { + var svg = d3.select(null), + layers = [ + { id: 'osm', layer: iD.svg.Osm(projection, context) }, + { id: 'gpx', layer: iD.svg.Gpx(projection, context) }, + { id: 'mapillary-images', layer: iD.svg.MapillaryImages(projection, context) }, + { id: 'mapillary-signs', layer: iD.svg.MapillarySigns(projection, context) } + ]; - inspectorWrap.call(inspector); - } - } else if (!current) { - featureListWrap.classed('inspector-hidden', false); - inspectorWrap.classed('inspector-hidden', true); - inspector.state('hide'); - } - }; - sidebar.hover = _.throttle(sidebar.hover, 200); + function drawLayers(selection) { + svg = selection.selectAll('.surface') + .data([0]); - sidebar.select = function(id, newFeature) { - if (!current && id) { - featureListWrap.classed('inspector-hidden', true); - inspectorWrap.classed('inspector-hidden', false) - .classed('inspector-hover', false); + svg.enter() + .append('svg') + .attr('class', 'surface') + .append('defs'); - if (inspector.entityID() !== id || inspector.state() !== 'select') { - inspector - .state('select') - .entityID(id) - .newFeature(newFeature); + var groups = svg.selectAll('.data-layer') + .data(layers); - inspectorWrap.call(inspector); - } - } else if (!current) { - featureListWrap.classed('inspector-hidden', false); - inspectorWrap.classed('inspector-hidden', true); - inspector.state('hide'); - } - }; + groups.enter() + .append('g') + .attr('class', function(d) { return 'data-layer data-layer-' + d.id; }); - sidebar.show = function(component) { - featureListWrap.classed('inspector-hidden', true); - inspectorWrap.classed('inspector-hidden', true); - if (current) current.remove(); - current = selection.append('div') - .attr('class', 'sidebar-component') - .call(component); - }; + groups + .each(function(d) { d3.select(this).call(d.layer); }); - sidebar.hide = function() { - featureListWrap.classed('inspector-hidden', false); - if (current) current.remove(); - current = null; - }; + groups.exit() + .remove(); } - sidebar.hover = function() {}; - sidebar.select = function() {}; - sidebar.show = function() {}; - sidebar.hide = function() {}; - - return sidebar; -}; -iD.ui.SourceSwitch = function(context) { - var keys; + drawLayers.all = function() { + return layers; + }; - function click() { - d3.event.preventDefault(); + drawLayers.layer = function(id) { + var obj = _.find(layers, 'id', id); + return obj && obj.layer; + }; - if (context.history().hasChanges() && - !window.confirm(t('source_switch.lose_changes'))) return; + drawLayers.only = function(what) { + var arr = [].concat(what); + drawLayers.remove(_.difference(_.pluck(layers, 'id'), arr)); + return this; + }; - var live = d3.select(this) - .classed('live'); + drawLayers.remove = function(what) { + var arr = [].concat(what); + arr.forEach(function(id) { + layers = _.reject(layers, 'id', id); + }); + return this; + }; - context.connection() - .switch(live ? keys[1] : keys[0]); + drawLayers.add = function(what) { + var arr = [].concat(what); + arr.forEach(function(obj) { + if ('id' in obj && 'layer' in obj) { + layers.push(obj); + } + }); + return this; + }; - context.flush(); + drawLayers.dimensions = function(_) { + if (!arguments.length) return svg.dimensions(); + svg.dimensions(_); + layers.forEach(function(obj) { + if (obj.layer.dimensions) { + obj.layer.dimensions(_); + } + }); + return this; + }; - d3.select(this) - .text(live ? t('source_switch.dev') : t('source_switch.live')) - .classed('live', !live); - } - var sourceSwitch = function(selection) { - selection.append('a') - .attr('href', '#') - .text(t('source_switch.live')) - .classed('live', true) - .attr('tabindex', -1) - .on('click', click); - }; + return drawLayers; +}; +iD.svg.Lines = function(projection) { - sourceSwitch.keys = function(_) { - if (!arguments.length) return keys; - keys = _; - return sourceSwitch; + var highway_stack = { + motorway: 0, + motorway_link: 1, + trunk: 2, + trunk_link: 3, + primary: 4, + primary_link: 5, + secondary: 6, + tertiary: 7, + unclassified: 8, + residential: 9, + service: 10, + footway: 11 }; - return sourceSwitch; -}; -iD.ui.Spinner = function(context) { - var connection = context.connection(); + function waystack(a, b) { + var as = 0, bs = 0; - return function(selection) { - var img = selection.append('img') - .attr('src', context.imagePath('loader-black.gif')) - .style('opacity', 0); + if (a.tags.highway) { as -= highway_stack[a.tags.highway]; } + if (b.tags.highway) { bs -= highway_stack[b.tags.highway]; } + return as - bs; + } - connection.on('loading.spinner', function() { - img.transition() - .style('opacity', 1); - }); + return function drawLines(surface, graph, entities, filter) { + var ways = [], pathdata = {}, onewaydata = {}, + getPath = iD.svg.Path(projection, graph); - connection.on('loaded.spinner', function() { - img.transition() - .style('opacity', 0); - }); - }; -}; -iD.ui.Splash = function(context) { - return function(selection) { - if (context.storage('sawSplash')) - return; + for (var i = 0; i < entities.length; i++) { + var entity = entities[i], + outer = iD.geo.simpleMultipolygonOuterMember(entity, graph); + if (outer) { + ways.push(entity.mergeTags(outer.tags)); + } else if (entity.geometry(graph) === 'line') { + ways.push(entity); + } + } - context.storage('sawSplash', true); + ways = ways.filter(getPath); - var modal = iD.ui.modal(selection); + pathdata = _.groupBy(ways, function(way) { return way.layer(); }); - modal.select('.modal') - .attr('class', 'modal-splash modal col6'); + _.forOwn(pathdata, function(v, k) { + onewaydata[k] = _(v) + .filter(function(d) { return d.isOneWay(); }) + .map(iD.svg.OneWaySegments(projection, graph, 35)) + .flatten() + .valueOf(); + }); - var introModal = modal.select('.content') - .append('div') - .attr('class', 'fillL'); + var layergroup = surface + .selectAll('.layer-lines') + .selectAll('g.layergroup') + .data(d3.range(-10, 11)); - introModal.append('div') - .attr('class','modal-section cf') - .append('h3').text(t('splash.welcome')); + layergroup.enter() + .append('g') + .attr('class', function(d) { return 'layer layergroup layer' + String(d); }); - introModal.append('div') - .attr('class','modal-section') - .append('p') - .html(t('splash.text', { - version: iD.version, - website: 'ideditor.com', - github: 'github.com' - })); - var buttons = introModal.append('div').attr('class', 'modal-actions cf'); + var linegroup = layergroup + .selectAll('g.linegroup') + .data(['shadow', 'casing', 'stroke']); - buttons.append('button') - .attr('class', 'col6 walkthrough') - .text(t('splash.walkthrough')) - .on('click', function() { - d3.select(document.body).call(iD.ui.intro(context)); - modal.close(); - }); + linegroup.enter() + .append('g') + .attr('class', function(d) { return 'layer linegroup line-' + d; }); - buttons.append('button') - .attr('class', 'col6 start') - .text(t('splash.start')) - .on('click', modal.close); - modal.select('button.close').attr('class','hide'); + var lines = linegroup + .selectAll('path') + .filter(filter) + .data( + function() { return pathdata[this.parentNode.parentNode.__data__] || []; }, + iD.Entity.key + ); - }; -}; -iD.ui.Status = function(context) { - var connection = context.connection(), - errCount = 0; + // Optimization: call simple TagClasses only on enter selection. This + // works because iD.Entity.key is defined to include the entity v attribute. + lines.enter() + .append('path') + .attr('class', function(d) { return 'way line ' + this.parentNode.__data__ + ' ' + d.id; }) + .call(iD.svg.TagClasses()); - return function(selection) { + lines + .sort(waystack) + .attr('d', getPath) + .call(iD.svg.TagClasses().tags(iD.svg.RelationMemberTags(graph))); - function update() { + lines.exit() + .remove(); - connection.status(function(err, apiStatus) { - selection.html(''); + var onewaygroup = layergroup + .selectAll('g.onewaygroup') + .data(['oneway']); - if (err && errCount++ < 2) return; + onewaygroup.enter() + .append('g') + .attr('class', 'layer onewaygroup'); - if (err) { - selection.text(t('status.error')); - } else if (apiStatus === 'readonly') { - selection.text(t('status.readonly')); + var oneways = onewaygroup + .selectAll('path') + .filter(filter) + .data( + function() { return onewaydata[this.parentNode.parentNode.__data__] || []; }, + function(d) { return [d.id, d.index]; } + ); - } else if (apiStatus === 'offline') { - selection.text(t('status.offline')); - } + oneways.enter() + .append('path') + .attr('class', 'oneway') + .attr('marker-mid', 'url(#oneway-marker)'); - selection.attr('class', 'api-status ' + (err ? 'error' : apiStatus)); - if (!err) errCount = 0; + oneways + .attr('d', function(d) { return d.d; }); - }); + if (iD.detect().ie) { + oneways.each(function() { this.parentNode.insertBefore(this, this); }); } - connection.on('auth', function() { update(selection); }); - window.setInterval(update, 90000); - update(selection); + oneways.exit() + .remove(); + }; }; -iD.ui.Success = function(context) { - var event = d3.dispatch('cancel'), - changeset; +iD.svg.MapillaryImages = function(projection, context) { + var debouncedRedraw = _.debounce(function () { context.pan([0,0]); }, 1000), + minZoom = 12, + layer = d3.select(null), + _mapillary; - function success(selection) { - var message = (changeset.comment || t('success.edited_osm')).substring(0, 130) + - ' ' + context.connection().changesetURL(changeset.id); - - var header = selection.append('div') - .attr('class', 'header fillL'); - header.append('button') - .attr('class', 'fr') - .append('span') - .attr('class', 'icon close') - .on('click', function() { event.cancel(success); }); + function init() { + if (iD.svg.MapillaryImages.initialized) return; // run once + iD.svg.MapillaryImages.enabled = false; + iD.svg.MapillaryImages.initialized = true; + } - header.append('h3') - .text(t('success.just_edited')); + function getMapillary() { + if (iD.services.mapillary && !_mapillary) { + _mapillary = iD.services.mapillary().on('loadedImages', debouncedRedraw); + } else if (!iD.services.mapillary && _mapillary) { + _mapillary = null; + } + return _mapillary; + } - var body = selection.append('div') - .attr('class', 'body save-success fillL'); + function showThumbnail(image) { + var mapillary = getMapillary(); + if (!mapillary) return; - body.append('p') - .html(t('success.help_html')); + var thumb = mapillary.selectedThumbnail(), + posX = projection(image.loc)[0], + width = layer.dimensions()[0], + position = (posX < width / 2) ? 'right' : 'left'; - var changesetURL = context.connection().changesetURL(changeset.id); + if (thumb) { + d3.selectAll('.layer-mapillary-images .viewfield-group, .layer-mapillary-signs .icon-sign') + .classed('selected', function(d) { return d.key === thumb.key; }); + } - body.append('a') - .attr('class', 'button col12 osm') - .attr('target', '_blank') - .attr('href', changesetURL) - .text(t('success.view_on_osm')); + mapillary.showThumbnail(image.key, position); + } - var sharing = { - facebook: 'https://facebook.com/sharer/sharer.php?u=' + encodeURIComponent(changesetURL), - twitter: 'https://twitter.com/intent/tweet?source=webclient&text=' + encodeURIComponent(message), - google: 'https://plus.google.com/share?url=' + encodeURIComponent(changesetURL) - }; + function hideThumbnail() { + d3.selectAll('.layer-mapillary-images .viewfield-group, .layer-mapillary-signs .icon-sign') + .classed('selected', false); - body.selectAll('.button.social') - .data(d3.entries(sharing)) - .enter().append('a') - .attr('class', function(d) { return 'button social col4 ' + d.key; }) - .attr('target', '_blank') - .attr('href', function(d) { return d.value; }) - .call(bootstrap.tooltip() - .title(function(d) { return t('success.' + d.key); }) - .placement('bottom')); + var mapillary = getMapillary(); + if (mapillary) { + mapillary.hideThumbnail(); + } } - success.changeset = function(_) { - if (!arguments.length) return changeset; - changeset = _; - return success; - }; - - return d3.rebind(success, event, 'on'); -}; -iD.ui.TagReference = function(tag) { - var tagReference = {}, - taginfo = iD.taginfo(), - button, - body, - loaded, - showing; + function showLayer() { + editOn(); + layer + .style('opacity', 0) + .transition() + .duration(500) + .style('opacity', 1) + .each('end', debouncedRedraw); + } - function findLocal(docs) { - var locale = iD.detect().locale.toLowerCase(), - localized; + function hideLayer() { + debouncedRedraw.cancel(); + hideThumbnail(); + layer + .transition() + .duration(500) + .style('opacity', 0) + .each('end', editOff); + } - localized = _.find(docs, function(d) { - return d.lang.toLowerCase() === locale; - }); - if (localized) return localized; + function editOn() { + layer.style('display', 'block'); + } - // try the non-regional version of a language, like - // 'en' if the language is 'en-US' - if (locale.indexOf('-') !== -1) { - var first = locale.split('-')[0]; - localized = _.find(docs, function(d) { - return d.lang.toLowerCase() === first; - }); - if (localized) return localized; - } + function editOff() { + layer.selectAll('.viewfield-group').remove(); + layer.style('display', 'none'); + } - // finally fall back to english - return _.find(docs, function(d) { - return d.lang.toLowerCase() === 'en'; - }); + function transform(d) { + var t = iD.svg.PointTransform(projection)(d); + if (d.ca) t += ' rotate(' + Math.floor(d.ca) + ',0,0)'; + return t; } - function load() { - button.classed('tag-reference-loading', true); + function update() { + var mapillary = getMapillary(), + data = (mapillary ? mapillary.images(projection, layer.dimensions()) : []); - taginfo.docs(tag, function(err, docs) { - if (!err && docs) { - docs = findLocal(docs); - } + var markers = layer.selectAll('.viewfield-group') + .data(data, function(d) { return d.key; }); - body.html(''); + // Enter + var enter = markers.enter() + .append('g') + .attr('class', 'viewfield-group'); - if (!docs || !docs.description) { - body.append('p').text(t('inspector.no_documentation_key')); - show(); - return; - } + enter.append('path') + .attr('class', 'viewfield') + .attr('transform', 'scale(1.5,1.5),translate(-8, -13)') + .attr('d', 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z'); - if (docs.image && docs.image.thumb_url_prefix) { - body - .append('img') - .attr('class', 'wiki-image') - .attr('src', docs.image.thumb_url_prefix + '100' + docs.image.thumb_url_suffix) - .on('load', function() { show(); }) - .on('error', function() { d3.select(this).remove(); show(); }); - } else { - show(); - } + enter.append('circle') + .attr('dx', '0') + .attr('dy', '0') + .attr('r', '6'); - body - .append('p') - .text(docs.description); - - var wikiLink = body - .append('a') - .attr('target', '_blank') - .attr('href', 'http://wiki.openstreetmap.org/wiki/' + docs.title); - - wikiLink.append('span') - .attr('class','icon icon-pre-text out-link'); - - wikiLink.append('span') - .text(t('inspector.reference')); - }); - } - - function show() { - loaded = true; - - button.classed('tag-reference-loading', false); - - body.transition() - .duration(200) - .style('max-height', '200px') - .style('opacity', '1'); + // Exit + markers.exit() + .remove(); - showing = true; + // Update + markers + .attr('transform', transform); } - function hide(selection) { - selection = selection || body.transition().duration(200); - - selection - .style('max-height', '0px') - .style('opacity', '0'); - - showing = false; - } + function drawImages(selection) { + var enabled = iD.svg.MapillaryImages.enabled, + mapillary = getMapillary(); - tagReference.button = function(selection) { - button = selection.selectAll('.tag-reference-button') - .data([0]); + layer = selection.selectAll('.layer-mapillary-images') + .data(mapillary ? [0] : []); - var enter = button.enter().append('button') - .attr('tabindex', -1) - .attr('class', 'tag-reference-button'); + layer.enter() + .append('g') + .attr('class', 'layer-mapillary-images') + .style('display', enabled ? 'block' : 'none') + .on('click', function() { // deselect/select + var mapillary = getMapillary(); + if (!mapillary) return; + var d = d3.event.target.__data__, + thumb = mapillary.selectedThumbnail(); + if (thumb && thumb.key === d.key) { + hideThumbnail(); + } else { + mapillary.selectedThumbnail(d); + context.map().centerEase(d.loc); + showThumbnail(d); + } + }) + .on('mouseover', function() { + var mapillary = getMapillary(); + if (!mapillary) return; + showThumbnail(d3.event.target.__data__); + }) + .on('mouseout', function() { + var mapillary = getMapillary(); + if (!mapillary) return; + var thumb = mapillary.selectedThumbnail(); + if (thumb) { + showThumbnail(thumb); + } else { + hideThumbnail(); + } + }); - enter.append('span') - .attr('class', 'icon inspect'); + layer.exit() + .remove(); - button.on('click', function () { - d3.event.stopPropagation(); - d3.event.preventDefault(); - if (showing) { - hide(); - } else if (loaded) { - show(); + if (enabled) { + if (mapillary && ~~context.map().zoom() >= minZoom) { + editOn(); + update(); + mapillary.loadImages(projection, layer.dimensions()); } else { - load(); + editOff(); } - }); - }; - - tagReference.body = function(selection) { - body = selection.selectAll('.tag-reference-body') - .data([0]); - - body.enter().append('div') - .attr('class', 'tag-reference-body cf') - .style('max-height', '0') - .style('opacity', '0'); + } + } - if (showing === false) { - hide(body); + drawImages.enabled = function(_) { + if (!arguments.length) return iD.svg.MapillaryImages.enabled; + iD.svg.MapillaryImages.enabled = _; + if (iD.svg.MapillaryImages.enabled) { + showLayer(); + } else { + hideLayer(); } + return this; }; - tagReference.showing = function(_) { - if (!arguments.length) return showing; - showing = _; - return tagReference; + drawImages.supported = function() { + return !!getMapillary(); }; - return tagReference; -};// toggles the visibility of ui elements, using a combination of the -// hide class, which sets display=none, and a d3 transition for opacity. -// this will cause blinking when called repeatedly, so check that the -// value actually changes between calls. -iD.ui.Toggle = function(show, callback) { - return function(selection) { - selection - .style('opacity', show ? 0 : 1) - .classed('hide', false) - .transition() - .style('opacity', show ? 1 : 0) - .each('end', function() { - d3.select(this).classed('hide', !show); - if (callback) callback.apply(this); - }); + drawImages.dimensions = function(_) { + if (!arguments.length) return layer.dimensions(); + layer.dimensions(_); + return this; }; + + init(); + return drawImages; }; -iD.ui.UndoRedo = function(context) { - var commands = [{ - id: 'undo', - cmd: iD.ui.cmd('⌘Z'), - action: function() { if (!saving()) context.undo(); }, - annotation: function() { return context.history().undoAnnotation(); } - }, { - id: 'redo', - cmd: iD.ui.cmd('⌘⇧Z'), - action: function() { if (!saving()) context.redo(); }, - annotation: function() { return context.history().redoAnnotation(); } - }]; +iD.svg.MapillarySigns = function(projection, context) { + var debouncedRedraw = _.debounce(function () { context.pan([0,0]); }, 1000), + minZoom = 12, + layer = d3.select(null), + _mapillary; - function saving() { - return context.mode().id === 'save'; - } - return function(selection) { - var tooltip = bootstrap.tooltip() - .placement('bottom') - .html(true) - .title(function (d) { - return iD.ui.tooltipHtml(d.annotation() ? - t(d.id + '.tooltip', {action: d.annotation()}) : - t(d.id + '.nothing'), d.cmd); - }); + function init() { + if (iD.svg.MapillarySigns.initialized) return; // run once + iD.svg.MapillarySigns.enabled = false; + iD.svg.MapillarySigns.initialized = true; + } - var buttons = selection.selectAll('button') - .data(commands) - .enter().append('button') - .attr('class', 'col6 disabled') - .on('click', function(d) { return d.action(); }) - .call(tooltip); + function getMapillary() { + if (iD.services.mapillary && !_mapillary) { + _mapillary = iD.services.mapillary().on('loadedSigns', debouncedRedraw); + } else if (!iD.services.mapillary && _mapillary) { + _mapillary = null; + } + return _mapillary; + } - buttons.append('span') - .attr('class', function(d) { return 'icon ' + d.id; }); + function showThumbnail(image) { + var mapillary = getMapillary(); + if (!mapillary) return; - var keybinding = d3.keybinding('undo') - .on(commands[0].cmd, function() { d3.event.preventDefault(); commands[0].action(); }) - .on(commands[1].cmd, function() { d3.event.preventDefault(); commands[1].action(); }); + var thumb = mapillary.selectedThumbnail(), + posX = projection(image.loc)[0], + width = layer.dimensions()[0], + position = (posX < width / 2) ? 'right' : 'left'; - d3.select(document) - .call(keybinding); + if (thumb) { + d3.selectAll('.layer-mapillary-images .viewfield-group, .layer-mapillary-signs .icon-sign') + .classed('selected', function(d) { return d.key === thumb.key; }); + } - context.history() - .on('change.undo_redo', update); + mapillary.showThumbnail(image.key, position); + } - context - .on('enter.undo_redo', update); + function hideThumbnail() { + d3.selectAll('.layer-mapillary-images .viewfield-group, .layer-mapillary-signs .icon-sign') + .classed('selected', false); - function update() { - buttons - .property('disabled', saving()) - .classed('disabled', function(d) { return !d.annotation(); }) - .each(function() { - var selection = d3.select(this); - if (selection.property('tooltipVisible')) { - selection.call(tooltip.show); - } - }); + var mapillary = getMapillary(); + if (mapillary) { + mapillary.hideThumbnail(); } - }; -}; -iD.ui.ViewOnOSM = function(context) { - var id; + } - function viewOnOSM(selection) { - var entity = context.entity(id); + function showLayer() { + editOn(); + debouncedRedraw(); + } - selection.style('display', entity.isNew() ? 'none' : null); + function hideLayer() { + debouncedRedraw.cancel(); + hideThumbnail(); + editOff(); + } - var $link = selection.selectAll('.view-on-osm') - .data([0]); + function editOn() { + layer.style('display', 'block'); + } - var $enter = $link.enter().append('a') - .attr('class', 'view-on-osm') - .attr('target', '_blank'); + function editOff() { + layer.selectAll('.icon-sign').remove(); + layer.style('display', 'none'); + } - $enter.append('span') - .attr('class', 'icon icon-pre-text out-link'); + function update() { + var mapillary = getMapillary(), + data = (mapillary ? mapillary.signs(projection, layer.dimensions()) : []); - $enter.append('span') - .text(t('inspector.view_on_osm')); + var signs = layer.selectAll('.icon-sign') + .data(data, function(d) { return d.key; }); + + // Enter + var enter = signs.enter() + .append('foreignObject') + .attr('class', 'icon-sign') + .attr('width', '32px') // for Firefox + .attr('height', '32px'); // for Firefox + + enter + .append('xhtml:body') + .html(mapillary.signHTML); + + enter + .on('click', function(d) { // deselect/select + var mapillary = getMapillary(); + if (!mapillary) return; + var thumb = mapillary.selectedThumbnail(); + if (thumb && thumb.key === d.key) { + hideThumbnail(); + } else { + mapillary.selectedThumbnail(d); + context.map().centerEase(d.loc); + showThumbnail(d); + } + }) + .on('mouseover', showThumbnail) + .on('mouseout', function() { + var mapillary = getMapillary(); + if (!mapillary) return; + var thumb = mapillary.selectedThumbnail(); + if (thumb) { + showThumbnail(thumb); + } else { + hideThumbnail(); + } + }); + + // Exit + signs.exit() + .remove(); - $link.attr('href', context.connection().entityURL(entity)); + // Update + signs + .attr('transform', iD.svg.PointTransform(projection)); } - viewOnOSM.entityID = function(_) { - if (!arguments.length) return id; - id = _; - return viewOnOSM; - }; + function drawSigns(selection) { + var enabled = iD.svg.MapillarySigns.enabled, + mapillary = getMapillary(); - return viewOnOSM; -}; -iD.ui.Zoom = function(context) { - var zooms = [{ - id: 'zoom-in', - title: t('zoom.in'), - action: context.zoomIn, - key: '+' - }, { - id: 'zoom-out', - title: t('zoom.out'), - action: context.zoomOut, - key: '-' - }]; + layer = selection.selectAll('.layer-mapillary-signs') + .data(mapillary ? [0] : []); - return function(selection) { - var button = selection.selectAll('button') - .data(zooms) - .enter().append('button') - .attr('tabindex', -1) - .attr('class', function(d) { return d.id; }) - .on('click.editor', function(d) { d.action(); }) - .call(bootstrap.tooltip() - .placement('left') - .html(true) - .title(function(d) { - return iD.ui.tooltipHtml(d.title, d.key); - })); + layer.enter() + .append('g') + .attr('class', 'layer-mapillary-signs') + .style('display', enabled ? 'block' : 'none') + .attr('transform', 'translate(-16, -16)'); // center signs on loc - button.append('span') - .attr('class', function(d) { return d.id + ' icon'; }); + layer.exit() + .remove(); - var keybinding = d3.keybinding('zoom') - .on('+', function() { context.zoomIn(); }) - .on('-', function() { context.zoomOut(); }) - .on('⇧=', function() { context.zoomIn(); }) - .on('dash', function() { context.zoomOut(); }); + if (enabled) { + if (mapillary && ~~context.map().zoom() >= minZoom) { + editOn(); + update(); + mapillary.loadSigns(context, projection, layer.dimensions()); + } else { + editOff(); + } + } + } - d3.select(document) - .call(keybinding); + drawSigns.enabled = function(_) { + if (!arguments.length) return iD.svg.MapillarySigns.enabled; + iD.svg.MapillarySigns.enabled = _; + if (iD.svg.MapillarySigns.enabled) { + showLayer(); + } else { + hideLayer(); + } + return this; }; -}; -iD.ui.preset.access = function(field) { - var event = d3.dispatch('change'), - items; - function access(selection) { - var wrap = selection.selectAll('.preset-input-wrap') - .data([0]); + drawSigns.supported = function() { + var mapillary = getMapillary(); + return (mapillary && mapillary.signsSupported()); + }; - wrap.enter().append('div') - .attr('class', 'cf preset-input-wrap') - .append('ul'); + drawSigns.dimensions = function(_) { + if (!arguments.length) return layer.dimensions(); + layer.dimensions(_); + return this; + }; - items = wrap.select('ul').selectAll('li') - .data(field.keys); + init(); + return drawSigns; +}; +iD.svg.Midpoints = function(projection, context) { + return function drawMidpoints(surface, graph, entities, filter, extent) { + var poly = extent.polygon(), + midpoints = {}; - // Enter + for (var i = 0; i < entities.length; i++) { + var entity = entities[i]; - var enter = items.enter().append('li') - .attr('class', function(d) { return 'cf preset-access-' + d; }); + if (entity.type !== 'way') + continue; + if (!filter(entity)) + continue; + if (context.selectedIDs().indexOf(entity.id) < 0) + continue; - enter.append('span') - .attr('class', 'col6 label preset-label-access') - .attr('for', function(d) { return 'preset-input-access-' + d; }) - .text(function(d) { return field.t('types.' + d); }); + var nodes = graph.childNodes(entity); + for (var j = 0; j < nodes.length - 1; j++) { - enter.append('div') - .attr('class', 'col6 preset-input-access-wrap') - .append('input') - .attr('type', 'text') - .attr('class', 'preset-input-access') - .attr('id', function(d) { return 'preset-input-access-' + d; }) - .each(function(d) { - d3.select(this) - .call(d3.combobox() - .data(access.options(d))); - }); + var a = nodes[j], + b = nodes[j + 1], + id = [a.id, b.id].sort().join('-'); - // Update + if (midpoints[id]) { + midpoints[id].parents.push(entity); + } else { + if (iD.geo.euclideanDistance(projection(a.loc), projection(b.loc)) > 40) { + var point = iD.geo.interp(a.loc, b.loc, 0.5), + loc = null; + + if (extent.intersects(point)) { + loc = point; + } else { + for (var k = 0; k < 4; k++) { + point = iD.geo.lineIntersection([a.loc, b.loc], [poly[k], poly[k+1]]); + if (point && + iD.geo.euclideanDistance(projection(a.loc), projection(point)) > 20 && + iD.geo.euclideanDistance(projection(b.loc), projection(point)) > 20) + { + loc = point; + break; + } + } + } - wrap.selectAll('.preset-input-access') - .on('change', change) - .on('blur', change); - } + if (loc) { + midpoints[id] = { + type: 'midpoint', + id: id, + loc: loc, + edge: [a.id, b.id], + parents: [entity] + }; + } + } + } + } + } - function change(d) { - var tag = {}; - tag[d] = d3.select(this).value() || undefined; - event.change(tag); - } + function midpointFilter(d) { + if (midpoints[d.id]) + return true; - access.options = function(type) { - var options = ['no', 'permissive', 'private', 'designated', 'destination']; + for (var i = 0; i < d.parents.length; i++) + if (filter(d.parents[i])) + return true; - if (type !== 'access') { - options.unshift('yes'); + return false; } - return options.map(function(option) { - return { - title: field.t('options.' + option + '.description'), - value: option - }; - }); - }; + var groups = surface.selectAll('.layer-hit').selectAll('g.midpoint') + .filter(midpointFilter) + .data(_.values(midpoints), function(d) { return d.id; }); - var placeholders = { - footway: { - foot: 'yes', - motor_vehicle: 'no' - }, - steps: { - foot: 'yes', - motor_vehicle: 'no' - }, - pedestrian: { - foot: 'yes', - motor_vehicle: 'no' - }, - cycleway: { - bicycle: 'yes', - motor_vehicle: 'no' - }, - bridleway: { - horse: 'yes' - }, - path: { - motor_vehicle: 'no' - }, - motorway: { - motor_vehicle: 'yes' - }, - trunk: { - motor_vehicle: 'yes' - }, - primary: { - motor_vehicle: 'yes' - }, - secondary: { - motor_vehicle: 'yes' - }, - tertiary: { - motor_vehicle: 'yes' - }, - residential: { - motor_vehicle: 'yes' - }, - unclassified: { - motor_vehicle: 'yes' - }, - service: { - motor_vehicle: 'yes' - }, - motorway_link: { - motor_vehicle: 'yes' - }, - trunk_link: { - motor_vehicle: 'yes' - }, - primary_link: { - motor_vehicle: 'yes' - }, - secondary_link: { - motor_vehicle: 'yes' - }, - tertiary_link: { - motor_vehicle: 'yes' - } - }; + var enter = groups.enter() + .insert('g', ':first-child') + .attr('class', 'midpoint'); - access.tags = function(tags) { - items.selectAll('.preset-input-access') - .value(function(d) { return tags[d] || ''; }) - .attr('placeholder', function() { - return tags.access ? tags.access : field.placeholder(); - }); + enter.append('polygon') + .attr('points', '-6,8 10,0 -6,-8') + .attr('class', 'shadow'); + + enter.append('polygon') + .attr('points', '-3,4 5,0 -3,-4') + .attr('class', 'fill'); - items.selectAll('#preset-input-access-access') - .attr('placeholder', 'yes'); + groups + .attr('transform', function(d) { + var translate = iD.svg.PointTransform(projection), + a = context.entity(d.edge[0]), + b = context.entity(d.edge[1]), + angle = Math.round(iD.geo.angle(a, b, projection) * (180 / Math.PI)); + return translate(d) + ' rotate(' + angle + ')'; + }) + .call(iD.svg.TagClasses().tags( + function(d) { return d.parents[0].tags; } + )); - _.forEach(placeholders[tags.highway], function(value, key) { - items.selectAll('#preset-input-access-' + key) - .attr('placeholder', value); - }); - }; + // Propagate data bindings. + groups.select('polygon.shadow'); + groups.select('polygon.fill'); - access.focus = function() { - items.selectAll('.preset-input-access') - .node().focus(); + groups.exit() + .remove(); }; +}; +iD.svg.Osm = function() { + return function drawOsm(selection) { + var layers = selection.selectAll('.layer-osm') + .data(['areas', 'lines', 'hit', 'halo', 'label']); - return d3.rebind(access, event, 'on'); + layers.enter().append('g') + .attr('class', function(d) { return 'layer-osm layer-' + d; }); + }; }; -iD.ui.preset.address = function(field, context) { - var event = d3.dispatch('change'), - housenumber, - street, - city, - postcode, - entity; +iD.svg.Points = function(projection, context) { + function markerPath(selection, klass) { + selection + .attr('class', klass) + .attr('transform', 'translate(-8, -23)') + .attr('d', 'M 17,8 C 17,13 11,21 8.5,23.5 C 6,21 0,13 0,8 C 0,4 4,-0.5 8.5,-0.5 C 13,-0.5 17,4 17,8 z'); + } - function getStreets() { - var extent = entity.extent(context.graph()), - l = extent.center(), - box = iD.geo.Extent(l).padByMeters(200); + function sortY(a, b) { + return b.loc[1] - a.loc[1]; + } - return context.intersects(box) - .filter(isAddressable) - .map(function(d) { - var loc = context.projection([ - (extent[0][0] + extent[1][0]) / 2, - (extent[0][1] + extent[1][1]) / 2]), - choice = iD.geo.chooseEdge(context.childNodes(d), loc, context.projection); - return { - title: d.tags.name, - value: d.tags.name, - dist: choice.distance - }; - }).sort(function(a, b) { - return a.dist - b.dist; + return function drawPoints(surface, graph, entities, filter) { + var wireframe = surface.classed('fill-wireframe'), + points = wireframe ? [] : _.filter(entities, function(e) { + return e.geometry(graph) === 'point'; }); - function isAddressable(d) { - return d.tags.highway && d.tags.name && d.type === 'way'; - } - } - - function getCities() { - var extent = entity.extent(context.graph()), - l = extent.center(), - box = iD.geo.Extent(l).padByMeters(200); + points.sort(sortY); - return context.intersects(box) - .filter(isAddressable) - .map(function(d) { - return { - title: d.tags['addr:city'] || d.tags.name, - value: d.tags['addr:city'] || d.tags.name, - dist: iD.geo.sphericalDistance(d.extent(context.graph()).center(), l) - }; - }).sort(function(a, b) { - return a.dist - b.dist; - }); + var groups = surface.selectAll('.layer-hit').selectAll('g.point') + .filter(filter) + .data(points, iD.Entity.key); - function isAddressable(d) { - if (d.tags.name && - (d.tags.admin_level === '8' || d.tags.border_type === 'city')) - return true; + var group = groups.enter() + .append('g') + .attr('class', function(d) { return 'node point ' + d.id; }) + .order(); - if (d.tags.place && d.tags.name && ( - d.tags.place === 'city' || - d.tags.place === 'town' || - d.tags.place === 'village')) - return true; + group.append('path') + .call(markerPath, 'shadow'); - if (d.tags['addr:city']) return true; + group.append('path') + .call(markerPath, 'stroke'); - return false; - } - } + group.append('use') + .attr('transform', 'translate(-6, -20)') + .attr('class', 'icon') + .attr('width', '12px') + .attr('height', '12px'); - function getPostCodes() { - var extent = entity.extent(context.graph()), - l = extent.center(), - box = iD.geo.Extent(l).padByMeters(200); + groups.attr('transform', iD.svg.PointTransform(projection)) + .call(iD.svg.TagClasses()); - return context.intersects(box) - .filter(isAddressable) - .map(function(d) { - return { - title: d.tags['addr:postcode'], - value: d.tags['addr:postcode'], - dist: iD.geo.sphericalDistance(d.extent(context.graph()).center(), l) - }; - }).sort(function(a, b) { - return a.dist - b.dist; + // Selecting the following implicitly + // sets the data (point entity) on the element + groups.select('.shadow'); + groups.select('.stroke'); + groups.select('.icon') + .attr('xlink:href', function(entity) { + var preset = context.presets().match(entity, graph); + return preset.icon ? '#' + preset.icon + '-12' : ''; }); - function isAddressable(d) { - return d.tags['addr:postcode']; - } - } + groups.exit() + .remove(); + }; +}; +iD.svg.TagClasses = function() { + var primaries = [ + 'building', 'highway', 'railway', 'waterway', 'aeroway', + 'motorway', 'boundary', 'power', 'amenity', 'natural', 'landuse', + 'leisure', 'place' + ], + statuses = [ + 'proposed', 'construction', 'disused', 'abandoned', 'dismantled', + 'razed', 'demolished', 'obliterated' + ], + secondaries = [ + 'oneway', 'bridge', 'tunnel', 'embankment', 'cutting', 'barrier', + 'surface', 'tracktype', 'crossing' + ], + tagClassRe = /^tag-/, + tags = function(entity) { return entity.tags; }; - function address(selection) { - var wrap = selection.selectAll('.preset-input-wrap') - .data([0]); - // Enter + var tagClasses = function(selection) { + selection.each(function tagClassesEach(entity) { + var value = this.className, + classes, primary, status; - var enter = wrap.enter().append('div') - .attr('class', 'preset-input-wrap'); + if (value.baseVal !== undefined) value = value.baseVal; - enter.append('input') - .property('type', 'text') - .attr('placeholder', field.t('placeholders.number')) - .attr('class', 'addr-number'); + classes = value.trim().split(/\s+/).filter(function(name) { + return name.length && !tagClassRe.test(name); + }).join(' '); - enter.append('input') - .property('type', 'text') - .attr('placeholder', field.t('placeholders.street')) - .attr('class', 'addr-street'); - - enter.append('input') - .property('type', 'text') - .attr('placeholder', field.t('placeholders.city')) - .attr('class', 'addr-city'); + var t = tags(entity), i, k, v; - enter.append('input') - .property('type', 'text') - .attr('placeholder', field.t('placeholders.postcode')) - .attr('class', 'addr-postcode'); + // pick at most one primary classification tag.. + for (i = 0; i < primaries.length; i++) { + k = primaries[i]; + v = t[k]; + if (!v || v === 'no') continue; - // Update + primary = k; + if (statuses.indexOf(v) !== -1) { // e.g. `railway=abandoned` + status = v; + classes += ' tag-' + k; + } else { + classes += ' tag-' + k + ' tag-' + k + '-' + v; + } - housenumber = wrap.select('.addr-number'); - street = wrap.select('.addr-street'); - city = wrap.select('.addr-city'); - postcode = wrap.select('.addr-postcode'); + break; + } - wrap.selectAll('input') - .on('blur', change) - .on('change', change); + // add at most one status tag, only if relates to primary tag.. + if (!status) { + for (i = 0; i < statuses.length; i++) { + k = statuses[i]; + v = t[k]; + if (!v || v === 'no') continue; - street - .call(d3.combobox() - .fetcher(function(value, callback) { - callback(getStreets()); - })); + if (v === 'yes') { // e.g. `railway=rail + abandoned=yes` + status = k; + } + else if (primary && primary === v) { // e.g. `railway=rail + abandoned=railway` + status = k; + } else if (!primary && primaries.indexOf(v) !== -1) { // e.g. `abandoned=railway` + status = k; + primary = v; + classes += ' tag-' + v; + } // else ignore e.g. `highway=path + abandoned=railway` + + if (status) break; + } + } - city - .call(d3.combobox() - .fetcher(function(value, callback) { - callback(getCities()); - })); + if (status) { + classes += ' tag-status tag-status-' + status; + } - postcode - .call(d3.combobox() - .fetcher(function(value, callback) { - callback(getPostCodes()); - })); - } + // add any secondary (structure) tags + for (i = 0; i < secondaries.length; i++) { + k = secondaries[i]; + v = t[k]; + if (!v || v === 'no') continue; + classes += ' tag-' + k + ' tag-' + k + '-' + v; + } - function change() { - event.change({ - 'addr:housenumber': housenumber.value() || undefined, - 'addr:street': street.value() || undefined, - 'addr:city': city.value() || undefined, - 'addr:postcode': postcode.value() || undefined - }); - } + // For highways, look for surface tagging.. + if (primary === 'highway') { + var paved = (t.highway !== 'track'); + for (k in t) { + v = t[k]; + if (k in iD.pavedTags) { + paved = !!iD.pavedTags[k][v]; + break; + } + } + if (!paved) { + classes += ' tag-unpaved'; + } + } - address.entity = function(_) { - if (!arguments.length) return entity; - entity = _; - return address; - }; + classes = classes.trim(); - address.tags = function(tags) { - housenumber.value(tags['addr:housenumber'] || ''); - street.value(tags['addr:street'] || ''); - city.value(tags['addr:city'] || ''); - postcode.value(tags['addr:postcode'] || ''); + if (classes !== value) { + d3.select(this).attr('class', classes); + } + }); }; - address.focus = function() { - housenumber.node().focus(); + tagClasses.tags = function(_) { + if (!arguments.length) return tags; + tags = _; + return tagClasses; }; - return d3.rebind(address, event, 'on'); + return tagClasses; }; -iD.ui.preset.check = function(field) { - var event = d3.dispatch('change'), - values = [undefined, 'yes', 'no'], - value, - box, - text, - label; - - var check = function(selection) { - selection.classed('checkselect', 'true'); - - label = selection.selectAll('.preset-input-wrap') - .data([0]); +iD.svg.Turns = function(projection) { + return function drawTurns(surface, graph, turns) { + function key(turn) { + return [turn.from.node + turn.via.node + turn.to.node].join('-'); + } - var enter = label.enter().append('label') - .attr('class', 'preset-input-wrap'); + function icon(turn) { + var u = turn.u ? '-u' : ''; + if (!turn.restriction) + return '#turn-yes' + u; + var restriction = graph.entity(turn.restriction).tags.restriction; + return '#turn-' + + (!turn.indirect_restriction && /^only_/.test(restriction) ? 'only' : 'no') + u; + } - enter.append('input') - .property('indeterminate', true) - .attr('type', 'checkbox') - .attr('id', 'preset-input-' + field.id); + var groups = surface.selectAll('.layer-hit').selectAll('g.turn') + .data(turns, key); - enter.append('span') - .text(t('inspector.unknown')) - .attr('class', 'value'); + // Enter + var enter = groups.enter().append('g') + .attr('class', 'turn'); - box = label.select('input') - .on('click', function() { - var t = {}; - t[field.key] = values[(values.indexOf(value) + 1) % 3]; - event.change(t); - d3.event.stopPropagation(); - }); + var nEnter = enter.filter(function (turn) { return !turn.u; }); - text = label.select('span.value'); - }; + nEnter.append('rect') + .attr('transform', 'translate(-22, -12)') + .attr('width', '44') + .attr('height', '24'); - check.tags = function(tags) { - value = tags[field.key]; - box.property('indeterminate', !value); - box.property('checked', value === 'yes'); - text.text(value ? t('inspector.check.' + value, {default: value}) : t('inspector.unknown')); - label.classed('set', !!value); - }; + nEnter.append('use') + .attr('transform', 'translate(-22, -12)') + .attr('width', '44') + .attr('height', '24'); - check.focus = function() { - box.node().focus(); - }; - return d3.rebind(check, event, 'on'); -}; -iD.ui.preset.combo = -iD.ui.preset.typeCombo = function(field) { - var event = d3.dispatch('change'), - input; + var uEnter = enter.filter(function (turn) { return turn.u; }); - function combo(selection) { - var combobox = d3.combobox(); + uEnter.append('circle') + .attr('r', '16'); - input = selection.selectAll('input') - .data([0]); + uEnter.append('use') + .attr('transform', 'translate(-16, -16)') + .attr('width', '32') + .attr('height', '32'); - input.enter().append('input') - .attr('type', 'text') - .attr('id', 'preset-input-' + field.id); - input - .on('change', change) - .on('blur', change) - .each(function() { - if (field.options) { - options(field.options); - } else { - iD.taginfo().values({ - key: field.key - }, function(err, data) { - if (!err) options(_.pluck(data, 'value')); - }); - } - }) - .call(combobox); + // Update + groups + .attr('transform', function (turn) { + var v = graph.entity(turn.via.node), + t = graph.entity(turn.to.node), + a = iD.geo.angle(v, t, projection), + p = projection(v.loc), + r = turn.u ? 0 : 60; + + return 'translate(' + (r * Math.cos(a) + p[0]) + ',' + (r * Math.sin(a) + p[1]) + ') ' + + 'rotate(' + a * 180 / Math.PI + ')'; + }); - function options(opts) { - combobox.data(opts.map(function(d) { - var o = {}; - o.title = o.value = d.replace('_', ' '); - return o; - })); + groups.select('use') + .attr('xlink:href', icon); - input.attr('placeholder', function() { - if (opts.length < 3) return ''; - return opts.slice(0, 3).join(', ') + '...'; - }); - } - } + groups.select('rect'); + groups.select('circle'); - function change() { - var value = input.value().replace(' ', '_'); - if (field.type === 'typeCombo' && !value) value = 'yes'; - var t = {}; - t[field.key] = value || undefined; - event.change(t); - } + // Exit + groups.exit() + .remove(); - combo.tags = function(tags) { - var value = tags[field.key] || ''; - if (field.type === 'typeCombo' && value === 'yes') value = ''; - input.value(value); + return this; }; - - combo.focus = function() { - input.node().focus(); +}; +iD.svg.Vertices = function(projection, context) { + var radiuses = { + // z16-, z17, z18+, tagged + shadow: [6, 7.5, 7.5, 11.5], + stroke: [2.5, 3.5, 3.5, 7], + fill: [1, 1.5, 1.5, 1.5] }; - return d3.rebind(combo, event, 'on'); -}; -iD.ui.preset.defaultcheck = function(field) { - var event = d3.dispatch('change'), - input; + var hover; - function check(selection) { - input = selection.selectAll('input') - .data([0]); + function siblingAndChildVertices(ids, graph, extent) { + var vertices = {}; - input.enter().append('input') - .attr('type', 'checkbox') - .attr('id', 'preset-input-' + field.id); + function addChildVertices(entity) { + if (!context.features().isHiddenFeature(entity, graph, entity.geometry(graph))) { + var i; + if (entity.type === 'way') { + for (i = 0; i < entity.nodes.length; i++) { + addChildVertices(graph.entity(entity.nodes[i])); + } + } else if (entity.type === 'relation') { + for (i = 0; i < entity.members.length; i++) { + var member = context.hasEntity(entity.members[i].id); + if (member) { + addChildVertices(member); + } + } + } else if (entity.intersects(extent, graph)) { + vertices[entity.id] = entity; + } + } + } - input - .on('change', function() { - var t = {}; - t[field.key] = input.property('checked') ? field.value || 'yes' : undefined; - event.change(t); - }); + ids.forEach(function(id) { + var entity = context.hasEntity(id); + if (entity && entity.type === 'node') { + vertices[entity.id] = entity; + context.graph().parentWays(entity).forEach(function(entity) { + addChildVertices(entity); + }); + } else if (entity) { + addChildVertices(entity); + } + }); + + return vertices; } - check.tags = function(tags) { - input.property('checked', !!tags[field.key] && tags[field.key] !== 'no'); - }; + function draw(selection, vertices, klass, graph, zoom) { + var icons = {}, + z = (zoom < 17 ? 0 : zoom < 18 ? 1 : 2); - check.focus = function() { - input.node().focus(); - }; + var groups = selection + .data(vertices, iD.Entity.key); - return d3.rebind(check, event, 'on'); -}; -iD.ui.preset.text = -iD.ui.preset.number = -iD.ui.preset.tel = -iD.ui.preset.email = -iD.ui.preset.url = function(field) { + function icon(entity) { + if (entity.id in icons) return icons[entity.id]; + icons[entity.id] = + entity.hasInterestingTags() && + context.presets().match(entity, graph).icon; + return icons[entity.id]; + } - var event = d3.dispatch('change'), - input; + function setClass(klass) { + return function(entity) { + this.setAttribute('class', 'node vertex ' + klass + ' ' + entity.id); + }; + } - function i(selection) { - input = selection.selectAll('input') - .data([0]); + function setAttributes(selection) { + ['shadow','stroke','fill'].forEach(function(klass) { + var rads = radiuses[klass]; + selection.selectAll('.' + klass) + .each(function(entity) { + var i = z && icon(entity), + c = i ? 0.5 : 0, + r = rads[i ? 3 : z]; + this.setAttribute('cx', c); + this.setAttribute('cy', -c); + this.setAttribute('r', r); + if (i && klass === 'fill') { + this.setAttribute('visibility', 'hidden'); + } else { + this.removeAttribute('visibility'); + } + }); + }); - input.enter().append('input') - .attr('type', field.type) - .attr('id', 'preset-input-' + field.id) - .attr('placeholder', field.placeholder() || t('inspector.unknown')); + selection.selectAll('use') + .each(function() { + if (z) { + this.removeAttribute('visibility'); + } else { + this.setAttribute('visibility', 'hidden'); + } + }); + } - input - .on('blur', change) - .on('change', change); + var enter = groups.enter() + .append('g') + .attr('class', function(d) { return 'node vertex ' + klass + ' ' + d.id; }); - if (field.type === 'number') { - input.attr('type', 'text'); + enter.append('circle') + .each(setClass('shadow')); - var spinControl = selection.selectAll('.spin-control') - .data([0]); + enter.append('circle') + .each(setClass('stroke')); - var enter = spinControl.enter().append('div') - .attr('class', 'spin-control'); + // Vertices with icons get a `use`. + enter.filter(function(d) { return icon(d); }) + .append('use') + .attr('transform', 'translate(-6, -6)') + .attr('xlink:href', function(d) { return '#' + icon(d) + '-12'; }) + .attr('width', '12px') + .attr('height', '12px') + .each(setClass('icon')); - enter.append('button') - .datum(1) - .attr('class', 'increment'); + // Vertices with tags get a fill. + enter.filter(function(d) { return d.hasInterestingTags(); }) + .append('circle') + .each(setClass('fill')); - enter.append('button') - .datum(-1) - .attr('class', 'decrement'); + groups + .attr('transform', iD.svg.PointTransform(projection)) + .classed('shared', function(entity) { return graph.isShared(entity); }) + .call(setAttributes); - spinControl.selectAll('button') - .on('click', function(d) { - d3.event.preventDefault(); - var num = parseInt(input.node().value || 0, 10); - if (!isNaN(num)) input.node().value = num + d; - change(); - }); - } + groups.exit() + .remove(); } - function change() { - var t = {}; - t[field.key] = input.value() || undefined; - event.change(t); - } + function drawVertices(surface, graph, entities, filter, extent, zoom) { + var selected = siblingAndChildVertices(context.selectedIDs(), graph, extent), + wireframe = surface.classed('fill-wireframe'), + vertices = []; - i.tags = function(tags) { - input.value(tags[field.key] || ''); - }; + for (var i = 0; i < entities.length; i++) { + var entity = entities[i], + geometry = entity.geometry(graph); - i.focus = function() { - input.node().focus(); - }; + if (wireframe && geometry === 'point') { + vertices.push(entity); + continue; + } - return d3.rebind(i, event, 'on'); -}; -iD.ui.preset.localized = function(field, context) { + if (geometry !== 'vertex') + continue; - var event = d3.dispatch('change'), - wikipedia = iD.wikipedia(), - input, localizedInputs, wikiTitles, - entity; + if (entity.id in selected || + entity.hasInterestingTags() || + entity.isIntersection(graph)) { + vertices.push(entity); + } + } - function i(selection) { - input = selection.selectAll('.localized-main') - .data([0]); + surface.selectAll('.layer-hit').selectAll('g.vertex.vertex-persistent') + .filter(filter) + .call(draw, vertices, 'vertex-persistent', graph, zoom); - input.enter().append('input') - .attr('type', 'text') - .attr('id', 'preset-input-' + field.id) - .attr('class', 'localized-main') - .attr('placeholder', field.placeholder()); + drawHover(surface, graph, extent, zoom); + } - input - .on('blur', change) - .on('change', change); + function drawHover(surface, graph, extent, zoom) { + var hovered = hover ? siblingAndChildVertices([hover.id], graph, extent) : {}; - if (field.id === 'name') { - var preset = context.presets().match(entity, context.graph()); - input.call(d3.combobox().fetcher( - iD.util.SuggestNames(preset, iD.data.suggestions) - )); - } + surface.selectAll('.layer-hit').selectAll('g.vertex.vertex-hover') + .call(draw, d3.values(hovered), 'vertex-hover', graph, zoom); + } - var translateButton = selection.selectAll('.localized-add') - .data([0]); + drawVertices.drawHover = function(surface, graph, target, extent, zoom) { + if (target === hover) return; + hover = target; + drawHover(surface, graph, extent, zoom); + }; - translateButton.enter().append('button') - .attr('class', 'button-input-action localized-add minor') - .call(bootstrap.tooltip() - .title(t('translate.translate')) - .placement('left')) - .append('span') - .attr('class', 'icon plus'); + return drawVertices; +}; +iD.ui = function(context) { + function render(container) { + var map = context.map(); - translateButton - .on('click', addBlank); + if (iD.detect().opera) container.classed('opera', true); - localizedInputs = selection.selectAll('.localized-wrap') - .data([0]); + var hash = iD.behavior.Hash(context); - localizedInputs.enter().append('div') - .attr('class', 'localized-wrap'); - } + hash(); - function addBlank() { - d3.event.preventDefault(); - var data = localizedInputs.selectAll('div.entry').data(); - data.push({ lang: '', value: '' }); - localizedInputs.call(render, data); - } + if (!hash.hadHash) { + map.centerZoom([0, 0], 2); + } - function change() { - var t = {}; - t[field.key] = d3.select(this).value() || undefined; - event.change(t); - } + container.append('svg') + .attr('id', 'defs') + .call(iD.svg.Defs(context)); - function key(lang) { return field.key + ':' + lang; } + container.append('div') + .attr('id', 'sidebar') + .attr('class', 'col4') + .call(ui.sidebar); - function changeLang(d) { - var lang = d3.select(this).value(), - t = {}, - language = _.find(iD.data.wikipedia, function(d) { - return d[0].toLowerCase() === lang.toLowerCase() || - d[1].toLowerCase() === lang.toLowerCase(); - }); + var content = container.append('div') + .attr('id', 'content'); - if (language) lang = language[2]; + var bar = content.append('div') + .attr('id', 'bar') + .attr('class', 'fillD'); - if (d.lang && d.lang !== lang) { - t[key(d.lang)] = undefined; - } + content.append('div') + .attr('id', 'map') + .call(map); - var value = d3.select(this.parentNode) - .selectAll('.localized-value') - .value(); + content + .call(iD.ui.MapInMap(context)); - if (lang && value) { - t[key(lang)] = value; - } else if (lang && wikiTitles && wikiTitles[d.lang]) { - t[key(lang)] = wikiTitles[d.lang]; - } + content.append('div') + .call(iD.ui.Info(context)); - d.lang = lang; - event.change(t); - } + bar.append('div') + .attr('class', 'spacer col4'); - function changeValue(d) { - if (!d.lang) return; - var t = {}; - t[key(d.lang)] = d3.select(this).value() || undefined; - event.change(t); - } + var limiter = bar.append('div') + .attr('class', 'limiter'); - function fetcher(value, cb) { - var v = value.toLowerCase(); + limiter.append('div') + .attr('class', 'button-wrap joined col3') + .call(iD.ui.Modes(context), limiter); - cb(iD.data.wikipedia.filter(function(d) { - return d[0].toLowerCase().indexOf(v) >= 0 || - d[1].toLowerCase().indexOf(v) >= 0 || - d[2].toLowerCase().indexOf(v) >= 0; - }).map(function(d) { - return { value: d[1] }; - })); - } + limiter.append('div') + .attr('class', 'button-wrap joined col1') + .call(iD.ui.UndoRedo(context)); - function render(selection, data) { - var wraps = selection.selectAll('div.entry'). - data(data, function(d) { return d.lang; }); + limiter.append('div') + .attr('class', 'button-wrap col1') + .call(iD.ui.Save(context)); - var innerWrap = wraps.enter() - .insert('div', ':first-child'); + bar.append('div') + .attr('class', 'full-screen') + .call(iD.ui.FullScreen(context)); - innerWrap.attr('class', 'entry') - .each(function() { - var wrap = d3.select(this); - var langcombo = d3.combobox().fetcher(fetcher); + bar.append('div') + .attr('class', 'spinner') + .call(iD.ui.Spinner(context)); - var label = wrap.append('label') - .attr('class','form-label') - .text(t('translate.localized_translation_label')) - .attr('for','localized-lang'); + var controls = bar.append('div') + .attr('class', 'map-controls'); - label.append('button') - .attr('class', 'minor remove') - .on('click', function(d){ - d3.event.preventDefault(); - var t = {}; - t[key(d.lang)] = undefined; - event.change(t); - d3.select(this.parentNode.parentNode) - .style('top','0') - .style('max-height','240px') - .transition() - .style('opacity', '0') - .style('max-height','0px') - .remove(); - }) - .append('span').attr('class', 'icon delete'); + controls.append('div') + .attr('class', 'map-control zoombuttons') + .call(iD.ui.Zoom(context)); - wrap.append('input') - .attr('class', 'localized-lang') - .attr('type', 'text') - .attr('placeholder',t('translate.localized_translation_language')) - .on('blur', changeLang) - .on('change', changeLang) - .call(langcombo); + controls.append('div') + .attr('class', 'map-control geolocate-control') + .call(iD.ui.Geolocate(map)); - wrap.append('input') - .on('blur', changeValue) - .on('change', changeValue) - .attr('type', 'text') - .attr('placeholder', t('translate.localized_translation_name')) - .attr('class', 'localized-value'); - }); + controls.append('div') + .attr('class', 'map-control background-control') + .call(iD.ui.Background(context)); - innerWrap - .style('margin-top', '0px') - .style('max-height', '0px') - .style('opacity', '0') - .transition() - .duration(200) - .style('margin-top', '10px') - .style('max-height', '240px') - .style('opacity', '1') - .each('end', function() { - d3.select(this) - .style('max-height', '') - .style('overflow', 'visible'); - }); + controls.append('div') + .attr('class', 'map-control map-data-control') + .call(iD.ui.MapData(context)); - wraps.exit() - .transition() - .duration(200) - .style('max-height','0px') - .style('opacity', '0') - .style('top','-10px') - .remove(); + controls.append('div') + .attr('class', 'map-control help-control') + .call(iD.ui.Help(context)); - var entry = selection.selectAll('.entry'); + var about = content.append('div') + .attr('id', 'about'); - entry.select('.localized-lang') - .value(function(d) { - var lang = _.find(iD.data.wikipedia, function(lang) { return lang[2] === d.lang; }); - return lang ? lang[1] : d.lang; - }); + about.append('div') + .attr('id', 'attrib') + .call(iD.ui.Attribution(context)); - entry.select('.localized-value') - .value(function(d) { return d.value; }); - } + var footer = about.append('div') + .attr('id', 'footer') + .attr('class', 'fillD'); - i.tags = function(tags) { + footer.append('div') + .attr('class', 'api-status') + .call(iD.ui.Status(context)); - // Fetch translations from wikipedia - if (tags.wikipedia && !wikiTitles) { - wikiTitles = {}; - var wm = tags.wikipedia.match(/([^:]+):(.+)/); - if (wm && wm[0] && wm[1]) { - wikipedia.translations(wm[1], wm[2], function(d) { - wikiTitles = d; - }); - } - } + footer.append('div') + .attr('id', 'scale-block') + .call(iD.ui.Scale(context)); - input.value(tags[field.key] || ''); + var aboutList = footer.append('div') + .attr('id', 'info-block') + .append('ul') + .attr('id', 'about-list'); - var postfixed = []; - for (var i in tags) { - var m = i.match(new RegExp(field.key + ':([a-zA-Z_-]+)$')); - if (m && m[1]) { - postfixed.push({ lang: m[1], value: tags[i]}); - } + if (!context.embed()) { + aboutList.call(iD.ui.Account(context)); } - localizedInputs.call(render, postfixed.reverse()); - }; + aboutList.append('li') + .append('a') + .attr('target', '_blank') + .attr('tabindex', -1) + .attr('href', 'https://github.com/openstreetmap/iD') + .text(iD.version); - i.focus = function() { - input.node().focus(); - }; + var issueLinks = aboutList.append('li'); - i.entity = function(_) { - entity = _; - }; + issueLinks.append('a') + .attr('target', '_blank') + .attr('tabindex', -1) + .attr('href', 'https://github.com/openstreetmap/iD/issues') + .call(iD.svg.Icon('#icon-bug', 'light')) + .call(bootstrap.tooltip() + .title(t('report_a_bug')) + .placement('top') + ); - return d3.rebind(i, event, 'on'); -}; -iD.ui.preset.maxspeed = function(field, context) { + issueLinks.append('a') + .attr('target', '_blank') + .attr('tabindex', -1) + .attr('href', 'https://github.com/openstreetmap/iD/blob/master/CONTRIBUTING.md#translating') + .call(iD.svg.Icon('#icon-translate', 'light')) + .call(bootstrap.tooltip() + .title(t('help_translate')) + .placement('top') + ); - var event = d3.dispatch('change'), - entity, - imperial, - unitInput, - combobox, - input; + aboutList.append('li') + .attr('class', 'feature-warning') + .attr('tabindex', -1) + .call(iD.ui.FeatureInfo(context)); - var metricValues = [20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120], - imperialValues = [20, 25, 30, 40, 45, 50, 55, 65, 70]; + aboutList.append('li') + .attr('class', 'user-list') + .attr('tabindex', -1) + .call(iD.ui.Contributors(context)); - function maxspeed(selection) { - combobox = d3.combobox(); - var unitCombobox = d3.combobox().data(['km/h', 'mph'].map(comboValues)); + window.onbeforeunload = function() { + return context.save(); + }; - input = selection.selectAll('#preset-input-' + field.id) - .data([0]); + window.onunload = function() { + context.history().unlock(); + }; - input.enter().append('input') - .attr('type', 'text') - .attr('id', 'preset-input-' + field.id) - .attr('placeholder', field.placeholder()); + var mapDimensions = map.dimensions(); - input - .on('change', change) - .on('blur', change) - .call(combobox); + d3.select(window).on('resize.editor', function() { + mapDimensions = content.dimensions(null); + map.dimensions(mapDimensions); + }); - var childNodes = context.graph().childNodes(context.entity(entity.id)), - loc = childNodes[~~(childNodes.length/2)].loc; + function pan(d) { + return function() { + d3.event.preventDefault(); + if (!context.inIntro()) context.pan(d); + }; + } - imperial = _.any(iD.data.imperial.features, function(f) { - return _.any(f.geometry.coordinates, function(d) { - return iD.geo.pointInPolygon(loc, d[0]); - }); - }); + // pan amount + var pa = 10; - unitInput = selection.selectAll('input.maxspeed-unit') - .data([0]); + var keybinding = d3.keybinding('main') + .on('⌫', function() { d3.event.preventDefault(); }) + .on('←', pan([pa, 0])) + .on('↑', pan([0, pa])) + .on('→', pan([-pa, 0])) + .on('↓', pan([0, -pa])) + .on('⇧←', pan([mapDimensions[0], 0])) + .on('⇧↑', pan([0, mapDimensions[1]])) + .on('⇧→', pan([-mapDimensions[0], 0])) + .on('⇧↓', pan([0, -mapDimensions[1]])) + .on(iD.ui.cmd('⌘←'), pan([mapDimensions[0], 0])) + .on(iD.ui.cmd('⌘↑'), pan([0, mapDimensions[1]])) + .on(iD.ui.cmd('⌘→'), pan([-mapDimensions[0], 0])) + .on(iD.ui.cmd('⌘↓'), pan([0, -mapDimensions[1]])); - unitInput.enter().append('input') - .attr('type', 'text') - .attr('class', 'maxspeed-unit'); + d3.select(document) + .call(keybinding); - unitInput - .on('blur', changeUnits) - .on('change', changeUnits) - .call(unitCombobox); + context.enter(iD.modes.Browse(context)); - function changeUnits() { - imperial = unitInput.value() === 'mph'; - unitInput.value(imperial ? 'mph' : 'km/h'); - setSuggestions(); - change(); - } + context.container() + .call(iD.ui.Splash(context)) + .call(iD.ui.Restore(context)); - } + var authenticating = iD.ui.Loading(context) + .message(t('loading_auth')); - function setSuggestions() { - combobox.data((imperial ? imperialValues : metricValues).map(comboValues)); - unitInput.value(imperial ? 'mph' : 'km/h'); + context.connection() + .on('authenticating.ui', function() { + context.container() + .call(authenticating); + }) + .on('authenticated.ui', function() { + authenticating.close(); + }); } - function comboValues(d) { - return { - value: d.toString(), - title: d.toString() - }; + function ui(container) { + context.container(container); + context.loadLocale(function() { + render(container); + }); } - function change() { - var tag = {}, - value = input.value(); + ui.sidebar = iD.ui.Sidebar(context); - if (!value) { - tag[field.key] = undefined; - } else if (isNaN(value) || !imperial) { - tag[field.key] = value; - } else { - tag[field.key] = value + ' mph'; - } + return ui; +}; - event.change(tag); +iD.ui.tooltipHtml = function(text, key) { + var s = '' + text + ''; + if (key) { + s += '
    ' + + ' ' + (t('tooltip_keyhint')) + ' ' + + ' ' + key + '
    '; } + return s; +}; +iD.ui.Account = function(context) { + var connection = context.connection(); - maxspeed.tags = function(tags) { - var value = tags[field.key]; - - if (value && value.indexOf('mph') >= 0) { - value = parseInt(value, 10); - imperial = true; - } else if (value) { - imperial = false; + function update(selection) { + if (!connection.authenticated()) { + selection.selectAll('#userLink, #logoutLink') + .classed('hide', true); + return; } - setSuggestions(); + connection.userDetails(function(err, details) { + var userLink = selection.select('#userLink'), + logoutLink = selection.select('#logoutLink'); - input.value(value || ''); - }; + userLink.html(''); + logoutLink.html(''); - maxspeed.focus = function() { - input.node().focus(); - }; + if (err) return; - maxspeed.entity = function(_) { - entity = _; - }; + selection.selectAll('#userLink, #logoutLink') + .classed('hide', false); - return d3.rebind(maxspeed, event, 'on'); -}; -iD.ui.preset.radio = function(field) { + // Link + userLink.append('a') + .attr('href', connection.userURL(details.display_name)) + .attr('target', '_blank'); - var event = d3.dispatch('change'), - labels, radios, placeholder; + // Add thumbnail or dont + if (details.image_url) { + userLink.append('img') + .attr('class', 'icon pre-text user-icon') + .attr('src', details.image_url); + } else { + userLink + .call(iD.svg.Icon('#icon-avatar', 'pre-text light')); + } - function radio(selection) { - selection.classed('preset-radio', true); + // Add user name + userLink.append('span') + .attr('class', 'label') + .text(details.display_name); - var wrap = selection.selectAll('.preset-input-wrap') + logoutLink.append('a') + .attr('class', 'logout') + .attr('href', '#') + .text(t('logout')) + .on('click.logout', function() { + d3.event.preventDefault(); + connection.logout(); + }); + }); + } + + return function(selection) { + selection.append('li') + .attr('id', 'logoutLink') + .classed('hide', true); + + selection.append('li') + .attr('id', 'userLink') + .classed('hide', true); + + connection.on('auth.account', function() { update(selection); }); + update(selection); + }; +}; +iD.ui.Attribution = function(context) { + var selection; + + function attribution(data, klass) { + var div = selection.selectAll('.' + klass) .data([0]); - var buttonWrap = wrap.enter().append('div') - .attr('class', 'preset-input-wrap toggle-list'); + div.enter() + .append('div') + .attr('class', klass); - buttonWrap.append('span') - .attr('class', 'placeholder'); + var background = div.selectAll('.attribution') + .data(data, function(d) { return d.name(); }); - placeholder = selection.selectAll('.placeholder'); + background.enter() + .append('span') + .attr('class', 'attribution') + .each(function(d) { + if (d.terms_html) { + d3.select(this) + .html(d.terms_html); + return; + } - labels = wrap.selectAll('label') - .data(field.options || field.keys); + var source = d.terms_text || d.id || d.name(); - var enter = labels.enter().append('label'); + if (d.logo) { + source = ''; + } - enter.append('input') - .attr('type', 'radio') - .attr('name', field.id) - .attr('value', function(d) { return field.t('options.' + d, { 'default': d }); }) - .attr('checked', false); + if (d.terms_url) { + d3.select(this) + .append('a') + .attr('href', d.terms_url) + .attr('target', '_blank') + .html(source); + } else { + d3.select(this) + .text(source); + } + }); - enter.append('span') - .text(function(d) { return field.t('options.' + d, { 'default': d }); }); + background.exit() + .remove(); - radios = labels.selectAll('input') - .on('change', change); + var copyright = background.selectAll('.copyright-notice') + .data(function(d) { + var notice = d.copyrightNotices(context.map().zoom(), context.map().extent()); + return notice ? [notice] : []; + }); + + copyright.enter() + .append('span') + .attr('class', 'copyright-notice'); + + copyright.text(String); + + copyright.exit() + .remove(); } - function change() { - var t = {}; - if (field.key) t[field.key] = undefined; - radios.each(function(d) { - var active = d3.select(this).property('checked'); - if (field.key) { - if (active) t[field.key] = d; - } else { - t[d] = active ? 'yes' : undefined; - } - }); - event.change(t); + function update() { + attribution([context.background().baseLayerSource()], 'base-layer-attribution'); + attribution(context.background().overlayLayerSources().filter(function (s) { + return s.validZoom(context.map().zoom()); + }), 'overlay-layer-attribution'); } - radio.tags = function(tags) { - function checked(d) { - if (field.key) { - return tags[field.key] === d; - } else { - return !!(tags[d] && tags[d] !== 'no'); - } - } + return function(select) { + selection = select; - labels.classed('active', checked); - radios.property('checked', checked); - var selection = radios.filter(function() { return this.checked; }); - if (selection.empty()) { - placeholder.text(t('inspector.none')); - } else { - placeholder.text(selection.attr('value')); - } - }; + context.background() + .on('change.attribution', update); - radio.focus = function() { - radios.node().focus(); - }; + context.map() + .on('move.attribution', _.throttle(update, 400, {leading: false})); - return d3.rebind(radio, event, 'on'); + update(); + }; }; -iD.ui.preset.textarea = function(field) { - - var event = d3.dispatch('change'), - input; +iD.ui.Background = function(context) { + var key = 'B', + opacities = [1, 0.75, 0.5, 0.25], + directions = [ + ['left', [1, 0]], + ['top', [0, -1]], + ['right', [-1, 0]], + ['bottom', [0, 1]]], + opacityDefault = (context.storage('background-opacity') !== null) ? + (+context.storage('background-opacity')) : 1.0, + customTemplate = context.storage('background-custom-template') || ''; - function i(selection) { - input = selection.selectAll('textarea') - .data([0]); + // Can be 0 from <1.3.0 use or due to issue #1923. + if (opacityDefault === 0) opacityDefault = 1.0; - input.enter().append('textarea') - .attr('id', 'preset-input-' + field.id) - .attr('placeholder', field.placeholder() || t('inspector.unknown')) - .attr('maxlength', 255); + function background(selection) { - input - .on('blur', change) - .on('change', change); - } + function sortSources(a, b) { + return a.best() ? -1 + : b.best() ? 1 + : a.id === 'none' ? 1 + : b.id === 'none' ? -1 + : d3.ascending(a, b); + } - function change() { - var t = {}; - t[field.key] = input.value() || undefined; - event.change(t); - } + function setOpacity(d) { + var bg = context.container().selectAll('.layer-background') + .transition() + .style('opacity', d) + .attr('data-opacity', d); - i.tags = function(tags) { - input.value(tags[field.key] || ''); - }; + if (!iD.detect().opera) { + iD.util.setTransform(bg, 0, 0); + } - i.focus = function() { - input.node().focus(); - }; + opacityList.selectAll('li') + .classed('active', function(_) { return _ === d; }); - return d3.rebind(i, event, 'on'); -}; -iD.ui.preset.wikipedia = function(field, context) { + context.storage('background-opacity', d); + } - var event = d3.dispatch('change'), - wikipedia = iD.wikipedia(), - link, entity, lang, title; + function selectLayer() { + function active(d) { + return context.background().showsLayer(d); + } - function i(selection) { + content.selectAll('.layer, .custom_layer') + .classed('active', active) + .selectAll('input') + .property('checked', active); + } - var langcombo = d3.combobox() - .fetcher(function(value, cb) { - var v = value.toLowerCase(); + function clickSetSource(d) { + d3.event.preventDefault(); + context.background().baseLayerSource(d); + selectLayer(); + } - cb(iD.data.wikipedia.filter(function(d) { - return d[0].toLowerCase().indexOf(v) >= 0 || - d[1].toLowerCase().indexOf(v) >= 0 || - d[2].toLowerCase().indexOf(v) >= 0; - }).map(function(d) { - return { value: d[1] }; - })); - }); + function editCustom() { + d3.event.preventDefault(); + var template = window.prompt(t('background.custom_prompt'), customTemplate); + if (!template || + template.indexOf('google.com') !== -1 || + template.indexOf('googleapis.com') !== -1 || + template.indexOf('google.ru') !== -1) { + selectLayer(); + return; + } + setCustom(template); + } - var titlecombo = d3.combobox() - .fetcher(function(value, cb) { + function setCustom(template) { + context.background().baseLayerSource(iD.BackgroundSource.Custom(template)); + selectLayer(); + context.storage('background-custom-template', template); + } - if (!value) value = context.entity(entity.id).tags.name || ''; - var searchfn = value.length > 7 ? wikipedia.search : wikipedia.suggestions; + function clickSetOverlay(d) { + d3.event.preventDefault(); + context.background().toggleOverlayLayer(d); + selectLayer(); + } - searchfn(language()[2], value, function(query, data) { - cb(data.map(function(d) { - return { value: d }; - })); - }); - }); + function drawList(layerList, type, change, filter) { + var sources = context.background() + .sources(context.map().extent()) + .filter(filter); - lang = selection.selectAll('input.wiki-lang') - .data([0]); + var layerLinks = layerList.selectAll('li.layer') + .data(sources, function(d) { return d.name(); }) + .sort(sortSources); - lang.enter().append('input') - .attr('type', 'text') - .attr('class', 'wiki-lang') - .value('English'); + var enter = layerLinks.enter() + .insert('li', '.custom_layer') + .attr('class', 'layer') + .classed('best', function(d) { return d.best(); }); - lang - .on('blur', changeLang) - .on('change', changeLang) - .call(langcombo); + // only set tooltips for layers with tooltips + enter.filter(function(d) { return d.description; }) + .call(bootstrap.tooltip() + .title(function(d) { return d.description; }) + .placement('top')); - title = selection.selectAll('input.wiki-title') - .data([0]); + enter.filter(function(d) { return d.best(); }) + .append('div') + .attr('class', 'best') + .call(bootstrap.tooltip() + .title(t('background.best_imagery')) + .placement('left')) + .append('span') + .html('★'); - title.enter().append('input') - .attr('type', 'text') - .attr('class', 'wiki-title') - .attr('id', 'preset-input-' + field.id); + var label = enter.append('label'); - title - .on('blur', change) - .on('change', change) - .call(titlecombo); + label.append('input') + .attr('type', type) + .attr('name', 'layers') + .on('change', change); - link = selection.selectAll('a.wiki-link') - .data([0]); + label.append('span') + .text(function(d) { return d.name(); }); - link.enter().append('a') - .attr('class', 'wiki-link button-input-action minor') - .attr('target', '_blank') - .append('span') - .attr('class', 'icon out-link'); - } + layerLinks.exit() + .remove(); - function language() { - var value = lang.value().toLowerCase(); - return _.find(iD.data.wikipedia, function(d) { - return d[0].toLowerCase() === value || - d[1].toLowerCase() === value || - d[2].toLowerCase() === value; - }) || iD.data.wikipedia[0]; - } + layerList.style('display', layerList.selectAll('li.layer').data().length > 0 ? 'block' : 'none'); + } - function changeLang() { - lang.value(language()[1]); - change(); - } + function update() { + backgroundList.call(drawList, 'radio', clickSetSource, function(d) { return !d.overlay; }); + overlayList.call(drawList, 'checkbox', clickSetOverlay, function(d) { return d.overlay; }); - function change() { - var value = title.value(), - m = value.match(/https?:\/\/([a-z]+)\.wikipedia\.org\/wiki\/(.+)/), - l = m && _.find(iD.data.wikipedia, function(d) { return m[1] === d[2]; }); + selectLayer(); - if (l) { - // Normalize title http://www.mediawiki.org/wiki/API:Query#Title_normalization - value = m[2].replace(/_/g, ' '); - value = value.slice(0, 1).toUpperCase() + value.slice(1); - lang.value(l[1]); - title.value(value); + var source = context.background().baseLayerSource(); + if (source.id === 'custom') { + customTemplate = source.template; + } } - var t = {}; - t[field.key] = value ? language()[2] + ':' + value : undefined; - event.change(t); - } - - i.tags = function(tags) { - var value = tags[field.key] || '', - m = value.match(/([^:]+):(.+)/), - l = m && _.find(iD.data.wikipedia, function(d) { return m[1] === d[2]; }); + function clickNudge(d) { + var timeout = window.setTimeout(function() { + interval = window.setInterval(nudge, 100); + }, 500), + interval; - // value in correct format - if (l) { - lang.value(l[1]); - title.value(m[2]); - link.attr('href', 'http://' + m[1] + '.wikipedia.org/wiki/' + m[2]); + d3.select(this).on('mouseup', function() { + window.clearInterval(interval); + window.clearTimeout(timeout); + nudge(); + }); - // unrecognized value format - } else { - title.value(value); - link.attr('href', 'http://en.wikipedia.org/wiki/Special:Search?search=' + value); + function nudge() { + var offset = context.background() + .nudge(d[1], context.map().zoom()) + .offset(); + resetButton.classed('disabled', offset[0] === 0 && offset[1] === 0); + } } - }; - i.entity = function(_) { - entity = _; - }; + function hide() { setVisible(false); } - i.focus = function() { - title.node().focus(); - }; + function toggle() { + if (d3.event) d3.event.preventDefault(); + tooltip.hide(button); + setVisible(!button.classed('active')); + } - return d3.rebind(i, event, 'on'); -}; -iD.ui.intro.area = function(context, reveal) { + function setVisible(show) { + if (show !== shown) { + button.classed('active', show); + shown = show; - var event = d3.dispatch('done'), - timeout; + if (show) { + selection.on('mousedown.background-inside', function() { + return d3.event.stopPropagation(); + }); + content.style('display', 'block') + .style('right', '-300px') + .transition() + .duration(200) + .style('right', '0px'); + } else { + content.style('display', 'block') + .style('right', '0px') + .transition() + .duration(200) + .style('right', '-300px') + .each('end', function() { + d3.select(this).style('display', 'none'); + }); + selection.on('mousedown.background-inside', null); + } + } + } - var step = { - title: 'intro.areas.title' - }; - step.enter = function() { + var content = selection.append('div') + .attr('class', 'fillL map-overlay col3 content hide'), + tooltip = bootstrap.tooltip() + .placement('left') + .html(true) + .title(iD.ui.tooltipHtml(t('background.description'), key)), + button = selection.append('button') + .attr('tabindex', -1) + .on('click', toggle) + .call(iD.svg.Icon('#icon-layers', 'light')) + .call(tooltip), + shown = false; - var playground = [-85.63552, 41.94159], - corner = [-85.63565411045074, 41.9417715536927]; - context.map().centerZoom(playground, 19); - reveal('button.add-area', t('intro.areas.add'), {tooltipClass: 'intro-areas-add'}); + var opa = content.append('div') + .attr('class', 'opacity-options-wrapper'); - context.on('enter.intro', addArea); + opa.append('h4') + .text(t('background.title')); - function addArea(mode) { - if (mode.id !== 'add-area') return; - context.on('enter.intro', drawArea); + var opacityList = opa.append('ul') + .attr('class', 'opacity-options'); - var padding = 120 * Math.pow(2, context.map().zoom() - 19); - var pointBox = iD.ui.intro.pad(corner, padding, context); - reveal(pointBox, t('intro.areas.corner')); + opacityList.selectAll('div.opacity') + .data(opacities) + .enter() + .append('li') + .attr('data-original-title', function(d) { + return t('background.percent_brightness', { opacity: (d * 100) }); + }) + .on('click.set-opacity', setOpacity) + .html('
    ') + .call(bootstrap.tooltip() + .placement('left')) + .append('div') + .attr('class', 'opacity') + .style('opacity', function(d) { return 1.25 - d; }); - context.map().on('move.intro', function() { - padding = 120 * Math.pow(2, context.map().zoom() - 19); - pointBox = iD.ui.intro.pad(corner, padding, context); - reveal(pointBox, t('intro.areas.corner'), {duration: 0}); - }); - } + var backgroundList = content.append('ul') + .attr('class', 'layer-list'); - function drawArea(mode) { - if (mode.id !== 'draw-area') return; - context.on('enter.intro', enterSelect); + var custom = backgroundList.append('li') + .attr('class', 'custom_layer') + .datum(iD.BackgroundSource.Custom()); - var padding = 150 * Math.pow(2, context.map().zoom() - 19); - var pointBox = iD.ui.intro.pad(playground, padding, context); - reveal(pointBox, t('intro.areas.place')); + custom.append('button') + .attr('class', 'layer-browse') + .call(bootstrap.tooltip() + .title(t('background.custom_button')) + .placement('left')) + .on('click', editCustom) + .call(iD.svg.Icon('#icon-search')); - context.map().on('move.intro', function() { - padding = 150 * Math.pow(2, context.map().zoom() - 19); - pointBox = iD.ui.intro.pad(playground, padding, context); - reveal(pointBox, t('intro.areas.place'), {duration: 0}); + var label = custom.append('label'); + + label.append('input') + .attr('type', 'radio') + .attr('name', 'layers') + .on('change', function () { + if (customTemplate) { + setCustom(customTemplate); + } else { + editCustom(); + } }); - } - function enterSelect(mode) { - if (mode.id !== 'select') return; - context.map().on('move.intro', null); - context.on('enter.intro', null); + label.append('span') + .text(t('background.custom')); - timeout = setTimeout(function() { - reveal('.preset-search-input', t('intro.areas.search', {name: context.presets().item('leisure/playground').name()})); - d3.select('.preset-search-input').on('keyup.intro', keySearch); - }, 500); - } + content.append('div') + .attr('class', 'imagery-faq') + .append('a') + .attr('target', '_blank') + .attr('tabindex', -1) + .call(iD.svg.Icon('#icon-out-link', 'inline')) + .attr('href', 'https://github.com/openstreetmap/iD/blob/master/FAQ.md#how-can-i-report-an-issue-with-background-imagery') + .append('span') + .text(t('background.imagery_source_faq')); - function keySearch() { - var first = d3.select('.preset-list-item:first-child'); - if (first.classed('preset-leisure-playground')) { - reveal(first.select('.preset-list-button').node(), t('intro.areas.choose')); - d3.selection.prototype.one.call(context.history(), 'change.intro', selectedPreset); - d3.select('.preset-search-input').on('keyup.intro', null); - } - } + var overlayList = content.append('ul') + .attr('class', 'layer-list'); - function selectedPreset() { - reveal('.pane', t('intro.areas.describe')); - context.on('exit.intro', event.done); - } - }; + var controls = content.append('div') + .attr('class', 'controls-list'); - step.exit = function() { - window.clearTimeout(timeout); - context.on('enter.intro', null); - context.on('exit.intro', null); - context.history().on('change.intro', null); - context.map().on('move.intro', null); - d3.select('.preset-search-input').on('keyup.intro', null); - }; + var minimapLabel = controls + .append('label') + .call(bootstrap.tooltip() + .html(true) + .title(iD.ui.tooltipHtml(t('background.minimap.tooltip'), '/')) + .placement('top') + ); - return d3.rebind(step, event, 'on'); -}; -iD.ui.intro.line = function(context, reveal) { + minimapLabel.classed('minimap-toggle', true) + .append('input') + .attr('type', 'checkbox') + .on('change', function() { + iD.ui.MapInMap.toggle(); + d3.event.preventDefault(); + }); - var event = d3.dispatch('done'), - timeouts = []; + minimapLabel.append('span') + .text(t('background.minimap.description')); - var step = { - title: 'intro.lines.title' - }; + var adjustments = content.append('div') + .attr('class', 'adjustments'); - function timeout(f, t) { - timeouts.push(window.setTimeout(f, t)); - } + adjustments.append('a') + .text(t('background.fix_misalignment')) + .attr('href', '#') + .classed('hide-toggle', true) + .classed('expanded', false) + .on('click', function() { + var exp = d3.select(this).classed('expanded'); + nudgeContainer.style('display', exp ? 'none' : 'block'); + d3.select(this).classed('expanded', !exp); + d3.event.preventDefault(); + }); - step.enter = function() { + var nudgeContainer = adjustments.append('div') + .attr('class', 'nudge-container cf') + .style('display', 'none'); - var centroid = [-85.62830, 41.95699]; - var midpoint = [-85.62975395449628, 41.95787501510204]; - var start = [-85.6297754121684, 41.95805253325314]; - var intersection = [-85.62974496187628, 41.95742515554585]; + nudgeContainer.selectAll('button') + .data(directions).enter() + .append('button') + .attr('class', function(d) { return d[0] + ' nudge'; }) + .on('mousedown', clickNudge); - context.map().centerZoom(start, 18); - reveal('button.add-line', t('intro.lines.add'), {tooltipClass: 'intro-lines-add'}); + var resetButton = nudgeContainer + .append('button') + .attr('class', 'reset disabled') + .on('click', function () { + context.background().offset([0, 0]); + resetButton.classed('disabled', true); + }) + .call(iD.svg.Icon('#icon-undo')); - context.on('enter.intro', addLine); + context.map() + .on('move.background-update', _.debounce(update, 1000)); - function addLine(mode) { - if (mode.id !== 'add-line') return; - context.on('enter.intro', drawLine); + context.background() + .on('change.background-update', update); - var padding = 150 * Math.pow(2, context.map().zoom() - 18); - var pointBox = iD.ui.intro.pad(start, padding, context); - reveal(pointBox, t('intro.lines.start')); + update(); + setOpacity(opacityDefault); - context.map().on('move.intro', function() { - padding = 150 * Math.pow(2, context.map().zoom() - 18); - pointBox = iD.ui.intro.pad(start, padding, context); - reveal(pointBox, t('intro.lines.start'), {duration: 0}); - }); - } + var keybinding = d3.keybinding('background') + .on(key, toggle) + .on('F', hide) + .on('H', hide); - function drawLine(mode) { - if (mode.id !== 'draw-line') return; - context.history().on('change.intro', addIntersection); - context.on('enter.intro', retry); + d3.select(document) + .call(keybinding); - var padding = 300 * Math.pow(2, context.map().zoom() - 19); - var pointBox = iD.ui.intro.pad(midpoint, padding, context); - reveal(pointBox, t('intro.lines.intersect')); + context.surface().on('mousedown.background-outside', hide); + context.container().on('mousedown.background-outside', hide); + } - context.map().on('move.intro', function() { - padding = 300 * Math.pow(2, context.map().zoom() - 19); - pointBox = iD.ui.intro.pad(midpoint, padding, context); - reveal(pointBox, t('intro.lines.intersect'), {duration: 0}); - }); - } + return background; +}; +// Translate a MacOS key command into the appropriate Windows/Linux equivalent. +// For example, ⌘Z -> Ctrl+Z +iD.ui.cmd = function(code) { + if (iD.detect().os === 'mac') { + return code; + } - // ended line before creating intersection - function retry(mode) { - if (mode.id !== 'select') return; - var pointBox = iD.ui.intro.pad(intersection, 30, context); - reveal(pointBox, t('intro.lines.restart')); - timeout(function() { - context.replace(iD.actions.DeleteMultiple(mode.selectedIDs())); - step.exit(); - step.enter(); - }, 3000); - } + if (iD.detect().os === 'win') { + if (code === '⌘⇧Z') return 'Ctrl+Y'; + } - function addIntersection(changes) { - if ( _.any(changes.created(), function(d) { - return d.type === 'node' && context.graph().parentWays(d).length > 1; - })) { - context.history().on('change.intro', null); - context.on('enter.intro', enterSelect); + var result = '', + replacements = { + '⌘': 'Ctrl', + '⇧': 'Shift', + '⌥': 'Alt', + '⌫': 'Backspace', + '⌦': 'Delete' + }; - var padding = 900 * Math.pow(2, context.map().zoom() - 19); - var pointBox = iD.ui.intro.pad(centroid, padding, context); - reveal(pointBox, t('intro.lines.finish')); + for (var i = 0; i < code.length; i++) { + if (code[i] in replacements) { + result += replacements[code[i]] + '+'; + } else { + result += code[i]; + } + } - context.map().on('move.intro', function() { - padding = 900 * Math.pow(2, context.map().zoom() - 19); - pointBox = iD.ui.intro.pad(centroid, padding, context); - reveal(pointBox, t('intro.lines.finish'), {duration: 0}); - }); - } - } + return result; +}; +iD.ui.Commit = function(context) { + var dispatch = d3.dispatch('cancel', 'save'); - function enterSelect(mode) { - if (mode.id !== 'select') return; - context.map().on('move.intro', null); - context.on('enter.intro', null); - d3.select('#curtain').style('pointer-events', 'all'); + function commit(selection) { + var changes = context.history().changes(), + summary = context.history().difference().summary(); - presetCategory(); + function zoomToEntity(change) { + var entity = change.entity; + if (change.changeType !== 'deleted' && + context.graph().entity(entity.id).geometry(context.graph()) !== 'vertex') { + context.map().zoomTo(entity); + context.surface().selectAll( + iD.util.entityOrMemberSelector([entity.id], context.graph())) + .classed('hover', true); + } } - function presetCategory() { - timeout(function() { - d3.select('#curtain').style('pointer-events', 'none'); - var road = d3.select('.preset-category-road .preset-list-button'); - reveal(road.node(), t('intro.lines.road')); - road.one('click.intro', roadCategory); - }, 500); - } + var header = selection.append('div') + .attr('class', 'header fillL'); - function roadCategory() { - timeout(function() { - var grid = d3.select('.subgrid'); - reveal(grid.node(), t('intro.lines.residential')); - grid.selectAll(':not(.preset-highway-residential) .preset-list-button') - .one('click.intro', retryPreset); - grid.selectAll('.preset-highway-residential .preset-list-button') - .one('click.intro', roadDetails); - }, 500); - } + header.append('h3') + .text(t('commit.title')); - // selected wrong road type - function retryPreset() { - timeout(function() { - var preset = d3.select('.entity-editor-pane .preset-list-button'); - reveal(preset.node(), t('intro.lines.wrong_preset')); - preset.one('click.intro', presetCategory); - }, 500); - } + var body = selection.append('div') + .attr('class', 'body'); - function roadDetails() { - reveal('.pane', t('intro.lines.describe')); - context.on('exit.intro', event.done); - } - }; + // Comment Section + var commentSection = body.append('div') + .attr('class', 'modal-section form-field commit-form'); - step.exit = function() { - d3.select('#curtain').style('pointer-events', 'none'); - timeouts.forEach(window.clearTimeout); - context.on('enter.intro', null); - context.on('exit.intro', null); - context.map().on('move.intro', null); - context.history().on('change.intro', null); - }; + commentSection.append('label') + .attr('class', 'form-label') + .text(t('commit.message_label')); - return d3.rebind(step, event, 'on'); -}; -iD.ui.intro.navigation = function(context, reveal) { + var commentField = commentSection.append('textarea') + .attr('placeholder', t('commit.description_placeholder')) + .attr('maxlength', 255) + .property('value', context.storage('comment') || '') + .on('input.save', enableDisableSaveButton) + .on('change.save', enableDisableSaveButton) + .on('blur.save', function() { + context.storage('comment', this.value); + }); - var event = d3.dispatch('done'), - timeouts = []; + function enableDisableSaveButton() { + d3.selectAll('.save-section .save-button') + .attr('disabled', (this.value.length ? null : true)); + } - var step = { - title: 'intro.navigation.title' - }; + commentField.node().select(); - function set(f, t) { - timeouts.push(window.setTimeout(f, t)); - } + context.connection().userChangesets(function (err, changesets) { + if (err) return; - /* - * Steps: - * Drag map - * Select poi - * Show editor header - * Show editor pane - * Select road - * Show header - */ + var comments = []; - step.enter = function() { + for (var i = 0; i < changesets.length; i++) { + if (changesets[i].tags.comment) { + comments.push({ + title: changesets[i].tags.comment, + value: changesets[i].tags.comment + }); + } + } - var rect = context.surfaceRect(), - map = { - left: rect.left + 10, - top: rect.top + 70, - width: rect.width - 70, - height: rect.height - 170 - }; + commentField.call(d3.combobox().data(comments)); + }); - context.map().centerZoom([-85.63591, 41.94285], 19); + var changeSetInfo = commentSection.append('div') + .attr('class', 'changeset-info'); - reveal(map, t('intro.navigation.drag')); + changeSetInfo.append('a') + .attr('target', '_blank') + .attr('tabindex', -1) + .call(iD.svg.Icon('#icon-out-link', 'inline')) + .attr('href', t('commit.about_changeset_comments_link')) + .append('span') + .text(t('commit.about_changeset_comments')); - context.map().on('move.intro', _.debounce(function() { - context.map().on('move.intro', null); - townhall(); - context.on('enter.intro', inspectTownHall); - }, 400)); + // Warnings + var warnings = body.selectAll('div.warning-section') + .data([context.history().validate(changes)]) + .enter() + .append('div') + .attr('class', 'modal-section warning-section fillL2') + .style('display', function(d) { return _.isEmpty(d) ? 'none' : null; }) + .style('background', '#ffb'); - function townhall() { - var hall = [-85.63645945147184, 41.942986488012565]; + warnings.append('h3') + .text(t('commit.warnings')); - var point = context.projection(hall); - if (point[0] < 0 || point[0] > rect.width || - point[1] < 0 || point[1] > rect.height) { - context.map().center(hall); - } + var warningLi = warnings.append('ul') + .attr('class', 'changeset-list') + .selectAll('li') + .data(function(d) { return d; }) + .enter() + .append('li') + .style() + .on('mouseover', mouseover) + .on('mouseout', mouseout) + .on('click', warningClick); - var box = iD.ui.intro.pointBox(hall, context); - reveal(box, t('intro.navigation.select')); + warningLi + .call(iD.svg.Icon('#icon-alert', 'pre-text')); - context.map().on('move.intro', function() { - var box = iD.ui.intro.pointBox(hall, context); - reveal(box, t('intro.navigation.select'), {duration: 0}); + warningLi + .append('strong').text(function(d) { + return d.message; }); - } - - function inspectTownHall(mode) { - if (mode.id !== 'select') return; - context.on('enter.intro', null); - context.map().on('move.intro', null); - set(function() { - reveal('.entity-editor-pane', t('intro.navigation.pane')); - context.on('exit.intro', event.done); - }, 700); - } - - }; - step.exit = function() { - context.map().on('move.intro', null); - context.on('enter.intro', null); - context.on('exit.intro', null); - timeouts.forEach(window.clearTimeout); - }; + warningLi.filter(function(d) { return d.tooltip; }) + .call(bootstrap.tooltip() + .title(function(d) { return d.tooltip; }) + .placement('top') + ); - return d3.rebind(step, event, 'on'); -}; -iD.ui.intro.point = function(context, reveal) { - var event = d3.dispatch('done'), - timeouts = []; + // Upload Explanation + var saveSection = body.append('div') + .attr('class','modal-section save-section fillL cf'); - var step = { - title: 'intro.points.title' - }; + var prose = saveSection.append('p') + .attr('class', 'commit-info') + .html(t('commit.upload_explanation')); - function setTimeout(f, t) { - timeouts.push(window.setTimeout(f, t)); - } + context.connection().userDetails(function(err, user) { + if (err) return; - step.enter = function() { + var userLink = d3.select(document.createElement('div')); - context.map().centerZoom([-85.63279, 41.94394], 19); - reveal('button.add-point', t('intro.points.add'), {tooltipClass: 'intro-points-add'}); + if (user.image_url) { + userLink.append('img') + .attr('src', user.image_url) + .attr('class', 'icon pre-text user-icon'); + } - var corner = [-85.632481,41.944094]; + userLink.append('a') + .attr('class','user-info') + .text(user.display_name) + .attr('href', context.connection().userURL(user.display_name)) + .attr('tabindex', -1) + .attr('target', '_blank'); - context.on('enter.intro', addPoint); + prose.html(t('commit.upload_explanation_with_user', {user: userLink.html()})); + }); - function addPoint(mode) { - if (mode.id !== 'add-point') return; - context.on('enter.intro', enterSelect); - var pointBox = iD.ui.intro.pad(corner, 150, context); - reveal(pointBox, t('intro.points.place')); + // Buttons + var buttonSection = saveSection.append('div') + .attr('class','buttons fillL cf'); - context.map().on('move.intro', function() { - pointBox = iD.ui.intro.pad(corner, 150, context); - reveal(pointBox, t('intro.points.place'), {duration: 0}); + var saveButton = buttonSection.append('button') + .attr('class', 'action col5 button save-button') + .attr('disabled', function() { + var n = d3.select('.commit-form textarea').node(); + return (n && n.value.length) ? null : true; + }) + .on('click.save', function() { + dispatch.save({ + comment: commentField.node().value + }); }); - } - - function enterSelect(mode) { - if (mode.id !== 'select') return; - context.map().on('move.intro', null); - context.on('enter.intro', null); + saveButton.append('span') + .attr('class', 'label') + .text(t('commit.save')); - setTimeout(function() { - reveal('.preset-search-input', t('intro.points.search', {name: context.presets().item('amenity/cafe').name()})); - d3.select('.preset-search-input').on('keyup.intro', keySearch); - }, 500); - } + var cancelButton = buttonSection.append('button') + .attr('class', 'action col5 button cancel-button') + .on('click.cancel', function() { dispatch.cancel(); }); - function keySearch() { - var first = d3.select('.preset-list-item:first-child'); - if (first.classed('preset-amenity-cafe')) { - reveal(first.select('.preset-list-button').node(), t('intro.points.choose')); - d3.selection.prototype.one.call(context.history(), 'change.intro', selectedPreset); + cancelButton.append('span') + .attr('class', 'label') + .text(t('commit.cancel')); - d3.select('.preset-search-input').on('keydown.intro', function() { - // Prevent search from updating and changing the grid - d3.event.stopPropagation(); - d3.event.preventDefault(); - }, true).on('keyup.intro', null); - } - } - function selectedPreset() { - setTimeout(function() { - reveal('.entity-editor-pane', t('intro.points.describe'), {tooltipClass: 'intro-points-describe'}); - context.history().on('change.intro', closeEditor); - context.on('exit.intro', selectPoint); - }, 400); - } + // Changes + var changeSection = body.selectAll('div.commit-section') + .data([0]) + .enter() + .append('div') + .attr('class', 'commit-section modal-section fillL2'); - function closeEditor() { - d3.select('.preset-search-input').on('keydown.intro', null); - context.history().on('change.intro', null); - reveal('.entity-editor-pane', t('intro.points.close')); - } + changeSection.append('h3') + .text(t('commit.changes', {count: summary.length})); - function selectPoint() { - context.on('exit.intro', null); - context.history().on('change.intro', null); - context.on('enter.intro', enterReselect); + var li = changeSection.append('ul') + .attr('class', 'changeset-list') + .selectAll('li') + .data(summary) + .enter() + .append('li') + .on('mouseover', mouseover) + .on('mouseout', mouseout) + .on('click', zoomToEntity); - var pointBox = iD.ui.intro.pad(corner, 150, context); - reveal(pointBox, t('intro.points.reselect')); + li.each(function(d) { + d3.select(this) + .call(iD.svg.Icon('#icon-' + d.entity.geometry(d.graph), 'pre-text ' + d.changeType)); + }); - context.map().on('move.intro', function() { - pointBox = iD.ui.intro.pad(corner, 150, context); - reveal(pointBox, t('intro.points.reselect'), {duration: 0}); + li.append('span') + .attr('class', 'change-type') + .text(function(d) { + return t('commit.' + d.changeType) + ' '; }); - } - function enterReselect(mode) { - if (mode.id !== 'select') return; - context.map().on('move.intro', null); - context.on('enter.intro', null); + li.append('strong') + .attr('class', 'entity-type') + .text(function(d) { + return context.presets().match(d.entity, d.graph).name(); + }); - setTimeout(function() { - reveal('.entity-editor-pane', t('intro.points.fixname')); - context.on('exit.intro', deletePoint); - }, 500); - } + li.append('span') + .attr('class', 'entity-name') + .text(function(d) { + var name = iD.util.displayName(d.entity) || '', + string = ''; + if (name !== '') string += ':'; + return string += ' ' + name; + }); - function deletePoint() { - context.on('exit.intro', null); - context.on('enter.intro', enterDelete); + li.style('opacity', 0) + .transition() + .style('opacity', 1); - var pointBox = iD.ui.intro.pad(corner, 150, context); - reveal(pointBox, t('intro.points.reselect_delete')); + li.style('opacity', 0) + .transition() + .style('opacity', 1); - context.map().on('move.intro', function() { - pointBox = iD.ui.intro.pad(corner, 150, context); - reveal(pointBox, t('intro.points.reselect_delete'), {duration: 0}); - }); + function mouseover(d) { + if (d.entity) { + context.surface().selectAll( + iD.util.entityOrMemberSelector([d.entity.id], context.graph()) + ).classed('hover', true); + } } - function enterDelete(mode) { - if (mode.id !== 'select') return; - context.map().on('move.intro', null); - context.on('enter.intro', null); - context.on('exit.intro', deletePoint); - context.map().on('move.intro', deletePoint); - context.history().on('change.intro', deleted); - - setTimeout(function() { - var node = d3.select('.radial-menu-item-delete').node(); - var pointBox = iD.ui.intro.pad(node.getBoundingClientRect(), 50, context); - reveal(pointBox, t('intro.points.delete')); - }, 300); + function mouseout() { + context.surface().selectAll('.hover') + .classed('hover', false); } - function deleted(changed) { - if (changed.deleted().length) event.done(); + function warningClick(d) { + if (d.entity) { + context.map().zoomTo(d.entity); + context.enter( + iD.modes.Select(context, [d.entity.id]) + .suppressMenu(true)); + } } + } - }; + return d3.rebind(commit, dispatch, 'on'); +}; +iD.ui.confirm = function(selection) { + var modal = iD.ui.modal(selection); - step.exit = function() { - timeouts.forEach(window.clearTimeout); - context.on('exit.intro', null); - context.on('enter.intro', null); - context.map().on('move.intro', null); - context.history().on('change.intro', null); - d3.select('.preset-search-input').on('keyup.intro', null).on('keydown.intro', null); + modal.select('.modal') + .classed('modal-alert', true); + + var section = modal.select('.content'); + + section.append('div') + .attr('class', 'modal-section header'); + + section.append('div') + .attr('class', 'modal-section message-text'); + + var buttons = section.append('div') + .attr('class', 'modal-section buttons cf'); + + modal.okButton = function() { + buttons + .append('button') + .attr('class', 'action col4') + .on('click.confirm', function() { + modal.remove(); + }) + .text(t('confirm.okay')); + + return modal; }; - return d3.rebind(step, event, 'on'); + return modal; }; -iD.ui.intro.startEditing = function(context, reveal) { +iD.ui.Conflicts = function(context) { + var dispatch = d3.dispatch('download', 'cancel', 'save'), + list; - var event = d3.dispatch('done', 'startEditing'), - modal, - timeouts = []; + function conflicts(selection) { + var header = selection + .append('div') + .attr('class', 'header fillL'); - var step = { - title: 'intro.startediting.title' - }; + header + .append('button') + .attr('class', 'fr') + .on('click', function() { dispatch.cancel(); }) + .call(iD.svg.Icon('#icon-close')); - function timeout(f, t) { - timeouts.push(window.setTimeout(f, t)); - } + header + .append('h3') + .text(t('save.conflict.header')); - step.enter = function() { + var body = selection + .append('div') + .attr('class', 'body fillL'); - reveal('.map-control.help-control', t('intro.startediting.help')); + body + .append('div') + .attr('class', 'conflicts-help') + .text(t('save.conflict.help')) + .append('a') + .attr('class', 'conflicts-download') + .text(t('save.conflict.download_changes')) + .on('click.download', function() { dispatch.download(); }); - timeout(function() { - reveal('#bar button.save', t('intro.startediting.save')); - }, 3500); + body + .append('div') + .attr('class', 'conflict-container fillL3') + .call(showConflict, 0); - timeout(function() { - reveal('#surface'); - }, 7000); + body + .append('div') + .attr('class', 'conflicts-done') + .attr('opacity', 0) + .style('display', 'none') + .text(t('save.conflict.done')); - timeout(function() { - modal = iD.ui.modal(context.container()); + var buttons = body + .append('div') + .attr('class','buttons col12 joined conflicts-buttons'); - modal.select('.modal') - .attr('class', 'modal-splash modal col6'); + buttons + .append('button') + .attr('disabled', list.length > 1) + .attr('class', 'action conflicts-button col6') + .text(t('save.title')) + .on('click.try_again', function() { dispatch.save(); }); - modal.selectAll('.close').remove(); + buttons + .append('button') + .attr('class', 'secondary-action conflicts-button col6') + .text(t('confirm.cancel')) + .on('click.cancel', function() { dispatch.cancel(); }); + } - var startbutton = modal.select('.content') - .attr('class', 'fillL') - .append('button') - .attr('class', 'modal-section huge-modal-button') - .on('click', function() { - modal.remove(); - }); - startbutton.append('div') - .attr('class','illustration'); - startbutton.append('h2') - .text(t('intro.startediting.start')); + function showConflict(selection, index) { + if (index < 0 || index >= list.length) return; - event.startEditing(); + var parent = d3.select(selection.node().parentNode); - }, 7500); - }; + // enable save button if this is the last conflict being reviewed.. + if (index === list.length - 1) { + window.setTimeout(function() { + parent.select('.conflicts-button') + .attr('disabled', null); - step.exit = function() { - if (modal) modal.remove(); - timeouts.forEach(window.clearTimeout); - }; + parent.select('.conflicts-done') + .transition() + .attr('opacity', 1) + .style('display', 'block'); + }, 250); + } - return d3.rebind(step, event, 'on'); -}; -iD.presets = function() { + var item = selection + .selectAll('.conflict') + .data([list[index]]); - // an iD.presets.Collection with methods for - // loading new data and returning defaults + var enter = item.enter() + .append('div') + .attr('class', 'conflict'); - var all = iD.presets.Collection([]), - defaults = { area: all, line: all, point: all, vertex: all, relation: all }, - fields = {}, - universal = [], - recent = iD.presets.Collection([]); + enter + .append('h4') + .attr('class', 'conflict-count') + .text(t('save.conflict.count', { num: index + 1, total: list.length })); - // Index of presets by (geometry, tag key). - var index = { - point: {}, - vertex: {}, - line: {}, - area: {}, - relation: {} - }; + enter + .append('a') + .attr('class', 'conflict-description') + .attr('href', '#') + .text(function(d) { return d.name; }) + .on('click', function(d) { + zoomToEntity(d.id); + d3.event.preventDefault(); + }); - all.match = function(entity, resolver) { - var geometry = entity.geometry(resolver), - geometryMatches = index[geometry], - best = -1, - match; + var details = enter + .append('div') + .attr('class', 'conflict-detail-container'); - for (var k in entity.tags) { - var keyMatches = geometryMatches[k]; - if (!keyMatches) continue; + details + .append('ul') + .attr('class', 'conflict-detail-list') + .selectAll('li') + .data(function(d) { return d.details || []; }) + .enter() + .append('li') + .attr('class', 'conflict-detail-item') + .html(function(d) { return d; }); - for (var i = 0; i < keyMatches.length; i++) { - var score = keyMatches[i].matchScore(entity); - if (score > best) { - best = score; - match = keyMatches[i]; - } - } - } + details + .append('div') + .attr('class', 'conflict-choices') + .call(addChoices); - return match || all.item(geometry); - }; + details + .append('div') + .attr('class', 'conflict-nav-buttons joined cf') + .selectAll('button') + .data(['previous', 'next']) + .enter() + .append('button') + .text(function(d) { return t('save.conflict.' + d); }) + .attr('class', 'conflict-nav-button action col6') + .attr('disabled', function(d, i) { + return (i === 0 && index === 0) || + (i === 1 && index === list.length - 1) || null; + }) + .on('click', function(d, i) { + var container = parent.select('.conflict-container'), + sign = (i === 0 ? -1 : 1); - all.load = function(d) { + container + .selectAll('.conflict') + .remove(); - if (d.fields) { - _.forEach(d.fields, function(d, id) { - fields[id] = iD.presets.Field(id, d); - if (d.universal) universal.push(fields[id]); + container + .call(showConflict, index + sign); + + d3.event.preventDefault(); }); - } - if (d.presets) { - _.forEach(d.presets, function(d, id) { - all.collection.push(iD.presets.Preset(id, d, fields)); + item.exit() + .remove(); + + } + + function addChoices(selection) { + var choices = selection + .append('ul') + .attr('class', 'layer-list') + .selectAll('li') + .data(function(d) { return d.choices || []; }); + + var enter = choices.enter() + .append('li') + .attr('class', 'layer'); + + var label = enter + .append('label'); + + label + .append('input') + .attr('type', 'radio') + .attr('name', function(d) { return d.id; }) + .on('change', function(d, i) { + var ul = this.parentNode.parentNode.parentNode; + ul.__data__.chosen = i; + choose(ul, d); }); - } - if (d.categories) { - _.forEach(d.categories, function(d, id) { - all.collection.push(iD.presets.Category(id, d, all)); + label + .append('span') + .text(function(d) { return d.text; }); + + choices + .each(function(d, i) { + var ul = this.parentNode; + if (ul.__data__.chosen === i) choose(ul, d); }); - } + } - if (d.defaults) { - var getItem = _.bind(all.item, all); - defaults = { - area: iD.presets.Collection(d.defaults.area.map(getItem)), - line: iD.presets.Collection(d.defaults.line.map(getItem)), - point: iD.presets.Collection(d.defaults.point.map(getItem)), - vertex: iD.presets.Collection(d.defaults.vertex.map(getItem)), - relation: iD.presets.Collection(d.defaults.relation.map(getItem)) - }; - } - - for (var i = 0; i < all.collection.length; i++) { - var preset = all.collection[i], - geometry = preset.geometry; - - for (var j = 0; j < geometry.length; j++) { - var g = index[geometry[j]]; - for (var k in preset.tags) { - (g[k] = g[k] || []).push(preset); - } - } - } - - return all; - }; - - all.field = function(id) { - return fields[id]; - }; + function choose(ul, datum) { + if (d3.event) d3.event.preventDefault(); - all.universal = function() { - return universal; - }; + d3.select(ul) + .selectAll('li') + .classed('active', function(d) { return d === datum; }) + .selectAll('input') + .property('checked', function(d) { return d === datum; }); - all.defaults = function(geometry, n) { - var rec = recent.matchGeometry(geometry).collection.slice(0, 4), - def = _.uniq(rec.concat(defaults[geometry].collection)).slice(0, n - 1); - return iD.presets.Collection(_.unique(rec.concat(def).concat(all.item(geometry)))); - }; + var extent = iD.geo.Extent(), + entity; - all.choose = function(preset) { - if (!preset.isFallback()) { - recent = iD.presets.Collection(_.unique([preset].concat(recent.collection))); - } - return all; - }; + entity = context.graph().hasEntity(datum.id); + if (entity) extent._extend(entity.extent(context.graph())); - return all; -}; -iD.presets.Category = function(id, category, all) { - category = _.clone(category); + datum.action(); - category.id = id; + entity = context.graph().hasEntity(datum.id); + if (entity) extent._extend(entity.extent(context.graph())); - category.members = iD.presets.Collection(category.members.map(function(id) { - return all.item(id); - })); + zoomToEntity(datum.id, extent); + } - category.matchGeometry = function(geometry) { - return category.geometry.indexOf(geometry) >= 0; - }; + function zoomToEntity(id, extent) { + context.surface().selectAll('.hover') + .classed('hover', false); - category.matchScore = function() { return -1; }; + var entity = context.graph().hasEntity(id); + if (entity) { + if (extent) { + context.map().trimmedExtent(extent); + } else { + context.map().zoomTo(entity); + } + context.surface().selectAll( + iD.util.entityOrMemberSelector([entity.id], context.graph())) + .classed('hover', true); + } + } - category.name = function() { - return t('presets.categories.' + id + '.name', {'default': id}); - }; - category.terms = function() { - return []; + // The conflict list should be an array of objects like: + // { + // id: id, + // name: entityName(local), + // details: merge.conflicts(), + // chosen: 1, + // choices: [ + // choice(id, keepMine, forceLocal), + // choice(id, keepTheirs, forceRemote) + // ] + // } + conflicts.list = function(_) { + if (!arguments.length) return list; + list = _; + return conflicts; }; - return category; + return d3.rebind(conflicts, dispatch, 'on'); }; -iD.presets.Collection = function(collection) { - - var maxSearchResults = 50, - maxSuggestionResults = 10; +iD.ui.Contributors = function(context) { + var debouncedUpdate = _.debounce(function() { update(); }, 1000), + limit = 4, + hidden = false, + wrap = d3.select(null); - var presets = { + function update() { + var users = {}, + entities = context.intersects(context.map().extent()); - collection: collection, + entities.forEach(function(entity) { + if (entity && entity.user) users[entity.user] = true; + }); - item: function(id) { - return _.find(collection, function(d) { - return d.id === id; - }); - }, + var u = Object.keys(users), + subset = u.slice(0, u.length > limit ? limit - 1 : limit); - matchGeometry: function(geometry) { - return iD.presets.Collection(collection.filter(function(d) { - return d.matchGeometry(geometry); - })); - }, + wrap.html('') + .call(iD.svg.Icon('#icon-nearby', 'pre-text light')); - search: function(value, geometry) { - if (!value) return this; + var userList = d3.select(document.createElement('span')); - value = value.toLowerCase(); + userList.selectAll() + .data(subset) + .enter() + .append('a') + .attr('class', 'user-link') + .attr('href', function(d) { return context.connection().userURL(d); }) + .attr('target', '_blank') + .attr('tabindex', -1) + .text(String); - var searchable = _.filter(collection, function(a) { - return a.searchable !== false && a.suggestion !== true; - }), - suggestions = _.filter(collection, function(a) { - return a.suggestion === true; - }); + if (u.length > limit) { + var count = d3.select(document.createElement('span')); - // matches value to preset.name - var leading_name = _.filter(searchable, function(a) { - return leading(a.name().toLowerCase()); - }).sort(function(a, b) { - var i = a.name().toLowerCase().indexOf(value) - b.name().toLowerCase().indexOf(value); - if (i === 0) return a.name().length - b.name().length; - else return i; - }); + count.append('a') + .attr('target', '_blank') + .attr('tabindex', -1) + .attr('href', function() { + return context.connection().changesetsURL(context.map().center(), context.map().zoom()); + }) + .text(u.length - limit + 1); - // matches value to preset.terms values - var leading_terms = _.filter(searchable, function(a) { - return _.any(a.terms() || [], leading); - }); + wrap.append('span') + .html(t('contributors.truncated_list', { users: userList.html(), count: count.html() })); - function leading(a) { - var index = a.indexOf(value); - return index === 0 || a[index - 1] === ' '; - } + } else { + wrap.append('span') + .html(t('contributors.list', { users: userList.html() })); + } - // finds close matches to value in preset.name - var levenstein_name = searchable.map(function(a) { - return { - preset: a, - dist: iD.util.editDistance(value, a.name().toLowerCase()) - }; - }).filter(function(a) { - return a.dist + Math.min(value.length - a.preset.name().length, 0) < 3; - }).sort(function(a, b) { - return a.dist - b.dist; - }).map(function(a) { - return a.preset; - }); + if (!u.length) { + hidden = true; + wrap + .transition() + .style('opacity', 0); - // finds close matches to value in preset.terms - var leventstein_terms = _.filter(searchable, function(a) { - return _.any(a.terms() || [], function(b) { - return iD.util.editDistance(value, b) + Math.min(value.length - b.length, 0) < 3; - }); - }); + } else if (hidden) { + wrap + .transition() + .style('opacity', 1); + } + } - function suggestionName(name) { - var nameArray = name.split(' - '); - if (nameArray.length > 1) { - name = nameArray.slice(0, nameArray.length-1).join(' - '); - } - return name.toLowerCase(); - } + return function(selection) { + wrap = selection; + update(); - var leading_suggestions = _.filter(suggestions, function(a) { - return leading(suggestionName(a.name())); - }).sort(function(a, b) { - a = suggestionName(a.name()); - b = suggestionName(b.name()); - var i = a.indexOf(value) - b.indexOf(value); - if (i === 0) return a.length - b.length; - else return i; - }); + context.connection().on('loaded.contributors', debouncedUpdate); + context.map().on('move.contributors', debouncedUpdate); + }; +}; +iD.ui.Disclosure = function() { + var dispatch = d3.dispatch('toggled'), + title, + expanded = false, + content = function () {}; - var leven_suggestions = suggestions.map(function(a) { - return { - preset: a, - dist: iD.util.editDistance(value, suggestionName(a.name())) - }; - }).filter(function(a) { - return a.dist + Math.min(value.length - suggestionName(a.preset.name()).length, 0) < 1; - }).sort(function(a, b) { - return a.dist - b.dist; - }).map(function(a) { - return a.preset; - }); + var disclosure = function(selection) { + var $link = selection.selectAll('.hide-toggle') + .data([0]); - var other = presets.item(geometry); + $link.enter().append('a') + .attr('href', '#') + .attr('class', 'hide-toggle'); - var results = leading_name.concat( - leading_terms, - leading_suggestions.slice(0, maxSuggestionResults+5), - levenstein_name, - leventstein_terms, - leven_suggestions.slice(0, maxSuggestionResults) - ).slice(0, maxSearchResults-1); + $link.text(title) + .on('click', toggle) + .classed('expanded', expanded); - return iD.presets.Collection(_.unique( - results.concat(other) - )); - } - }; + var $body = selection.selectAll('div') + .data([0]); - return presets; -}; -iD.presets.Field = function(id, field) { - field = _.clone(field); + $body.enter().append('div'); - field.id = id; + $body.classed('hide', !expanded) + .call(content); - field.matchGeometry = function(geometry) { - return !field.geometry || field.geometry.indexOf(geometry) >= 0; + function toggle() { + expanded = !expanded; + $link.classed('expanded', expanded); + $body.call(iD.ui.Toggle(expanded)); + dispatch.toggled(expanded); + } }; - field.t = function(scope, options) { - return t('presets.fields.' + id + '.' + scope, options); + disclosure.title = function(_) { + if (!arguments.length) return title; + title = _; + return disclosure; }; - field.label = function() { - return field.t('label', {'default': id}); + disclosure.expanded = function(_) { + if (!arguments.length) return expanded; + expanded = _; + return disclosure; }; - var placeholder = field.placeholder; - field.placeholder = function() { - return field.t('placeholder', {'default': placeholder}); + disclosure.content = function(_) { + if (!arguments.length) return content; + content = _; + return disclosure; }; - return field; + return d3.rebind(disclosure, dispatch, 'on'); }; -iD.presets.Preset = function(id, preset, fields) { - preset = _.clone(preset); +iD.ui.EntityEditor = function(context) { + var dispatch = d3.dispatch('choose'), + state = 'select', + coalesceChanges = false, + modified = false, + base, + id, + preset, + reference; - preset.id = id; - preset.fields = (preset.fields || []).map(getFields); + var presetEditor = iD.ui.preset(context) + .on('change', changeTags); + var rawTagEditor = iD.ui.RawTagEditor(context) + .on('change', changeTags); - function getFields(f) { - return fields[f]; - } + function entityEditor(selection) { + var entity = context.entity(id), + tags = _.clone(entity.tags); - preset.matchGeometry = function(geometry) { - return preset.geometry.indexOf(geometry) >= 0; - }; + var $header = selection.selectAll('.header') + .data([0]); - var matchScore = preset.matchScore || 1; - preset.matchScore = function(entity) { - var tags = preset.tags, - score = 0; + // Enter + var $enter = $header.enter().append('div') + .attr('class', 'header fillL cf'); - for (var t in tags) { - if (entity.tags[t] === tags[t]) { - score += matchScore; - } else if (tags[t] === '*' && t in entity.tags) { - score += matchScore / 2; - } else { - return -1; - } - } + $enter.append('button') + .attr('class', 'fl preset-reset preset-choose') + .append('span') + .html('◄'); - return score; - }; + $enter.append('button') + .attr('class', 'fr preset-close') + .call(iD.svg.Icon(modified ? '#icon-apply' : '#icon-close')); - preset.t = function(scope, options) { - return t('presets.presets.' + id + '.' + scope, options); - }; + $enter.append('h3'); - var name = preset.name; - preset.name = function() { - if (preset.suggestion) { - id = id.split('/'); - id = id[0] + '/' + id[1]; - return name + ' - ' + t('presets.presets.' + id + '.name'); - } - return preset.t('name', {'default': name}); - }; + // Update + $header.select('h3') + .text(t('inspector.edit')); - preset.terms = function() { - return preset.t('terms', {'default': ''}).split(','); - }; + $header.select('.preset-close') + .on('click', function() { + context.enter(iD.modes.Browse(context)); + }); - preset.isFallback = function() { - return Object.keys(preset.tags).length === 0; - }; + var $body = selection.selectAll('.inspector-body') + .data([0]); - preset.reference = function(geometry) { - var key = Object.keys(preset.tags)[0], - value = preset.tags[key]; + // Enter + $enter = $body.enter().append('div') + .attr('class', 'inspector-body'); - if (geometry === 'relation' && key === 'type') { - return { rtype: value }; - } else if (value === '*') { - return { key: key }; - } else { - return { key: key, value: value }; - } - }; + $enter.append('div') + .attr('class', 'preset-list-item inspector-inner') + .append('div') + .attr('class', 'preset-list-button-wrap') + .append('button') + .attr('class', 'preset-list-button preset-reset') + .call(bootstrap.tooltip() + .title(t('inspector.back_tooltip')) + .placement('bottom')) + .append('div') + .attr('class', 'label'); - var removeTags = preset.removeTags || preset.tags; - preset.removeTags = function(tags, geometry) { - tags = _.omit(tags, _.keys(removeTags)); + $body.select('.preset-list-button-wrap') + .call(reference.button); - for (var f in preset.fields) { - var field = preset.fields[f]; - if (field.matchGeometry(geometry) && field['default'] === tags[field.key]) { - delete tags[field.key]; - } - } + $body.select('.preset-list-item') + .call(reference.body); - return tags; - }; + $enter.append('div') + .attr('class', 'inspector-border inspector-preset'); - var applyTags = preset.addTags || preset.tags; - preset.applyTags = function(tags, geometry) { - var k; + $enter.append('div') + .attr('class', 'inspector-border raw-tag-editor inspector-inner'); - tags = _.clone(tags); + $enter.append('div') + .attr('class', 'inspector-border raw-member-editor inspector-inner'); - for (k in applyTags) { - if (applyTags[k] === '*') { - tags[k] = 'yes'; - } else { - tags[k] = applyTags[k]; - } - } + $enter.append('div') + .attr('class', 'raw-membership-editor inspector-inner'); - // Add area=yes if necessary - for (k in applyTags) { - if (geometry === 'area' && !(k in iD.areaKeys)) - tags.area = 'yes'; - break; - } + selection.selectAll('.preset-reset') + .on('click', function() { + dispatch.choose(preset); + }); - for (var f in preset.fields) { - var field = preset.fields[f]; - if (field.matchGeometry(geometry) && field.key && !tags[field.key] && field['default']) { - tags[field.key] = field['default']; - } - } + // Update + $body.select('.preset-list-item button') + .call(iD.ui.PresetIcon() + .geometry(context.geometry(id)) + .preset(preset)); - return tags; - }; + $body.select('.preset-list-item .label') + .text(preset.name()); - return preset; -}; -iD.validate = function(changes, graph) { - var warnings = []; + $body.select('.inspector-preset') + .call(presetEditor + .preset(preset) + .entityID(id) + .tags(tags) + .state(state)); - // https://github.com/openstreetmap/josm/blob/mirror/src/org/ - // openstreetmap/josm/data/validation/tests/UnclosedWays.java#L80 - function tagSuggestsArea(change) { - if (_.isEmpty(change.tags)) return false; - var tags = change.tags; - var presence = ['landuse', 'amenities', 'tourism', 'shop']; - for (var i = 0; i < presence.length; i++) { - if (tags[presence[i]] !== undefined) { - return presence[i] + '=' + tags[presence[i]]; - } + $body.select('.raw-tag-editor') + .call(rawTagEditor + .preset(preset) + .entityID(id) + .tags(tags) + .state(state)); + + if (entity.type === 'relation') { + $body.select('.raw-member-editor') + .style('display', 'block') + .call(iD.ui.RawMemberEditor(context) + .entityID(id)); + } else { + $body.select('.raw-member-editor') + .style('display', 'none'); } - if (tags.building && tags.building === 'yes') return 'building=yes'; - } - if (changes.deleted.length > 100) { - warnings.push({ - message: t('validations.many_deletions', { n: changes.deleted.length }) - }); - } + $body.select('.raw-membership-editor') + .call(iD.ui.RawMembershipEditor(context) + .entityID(id)); - for (var i = 0; i < changes.created.length; i++) { - var change = changes.created[i], - geometry = change.geometry(graph); + function historyChanged() { + if (state === 'hide') return; - if ((geometry === 'point' || geometry === 'line' || geometry === 'area') && !change.isUsed(graph)) { - warnings.push({ - message: t('validations.untagged_' + geometry), - tooltip: t('validations.untagged_tooltip', {geometry: geometry}), - entity: change - }); - } + var entity = context.hasEntity(id), + graph = context.graph(); + if (!entity) return; - var deprecatedTags = change.deprecatedTags(); - if (!_.isEmpty(deprecatedTags)) { - warnings.push({ - message: t('validations.deprecated_tags', { - tags: iD.util.tagText({ tags: deprecatedTags }) - }), entity: change }); + entityEditor.preset(context.presets().match(entity, graph)); + entityEditor.modified(base !== graph); + entityEditor(selection); } - if (geometry === 'line' && tagSuggestsArea(change)) { - warnings.push({ - message: t('validations.tag_suggests_area', {tag: tagSuggestsArea(change)}), - entity: change - }); - } + context.history() + .on('change.entity-editor', historyChanged); } - return warnings; -}; -/* jshint ignore:start */ -})(); -window.locale = { _current: 'en' }; + function clean(o) { -locale.current = function(_) { - if (!arguments.length) return locale._current; - if (locale[_] !== undefined) locale._current = _; - else if (locale[_.split('-')[0]]) locale._current = _.split('-')[0]; - return locale; -}; + function cleanVal(k, v) { + function keepSpaces(k) { + var whitelist = ['opening_hours', 'service_times', 'collection_times', + 'operating_times', 'smoking_hours', 'happy_hours']; + return _.any(whitelist, function(s) { return k.indexOf(s) !== -1; }); + } -function t(s, o, loc) { - loc = loc || locale._current; + var blacklist = ['description', 'note', 'fixme']; + if (_.any(blacklist, function(s) { return k.indexOf(s) !== -1; })) return v; - var path = s.split(".").reverse(), - rep = locale[loc]; + var cleaned = v.split(';') + .map(function(s) { return s.trim(); }) + .join(keepSpaces(k) ? '; ' : ';'); - while (rep !== undefined && path.length) rep = rep[path.pop()]; + // The code below is not intended to validate websites and emails. + // It is only intended to prevent obvious copy-paste errors. (#2323) - if (rep !== undefined) { - if (o) for (var k in o) rep = rep.replace('{' + k + '}', o[k]); - return rep; - } + // clean website- and email-like tags + if (k.indexOf('website') !== -1 || + k.indexOf('email') !== -1 || + cleaned.indexOf('http') === 0) { + cleaned = cleaned + .replace(/[\u200B-\u200F\uFEFF]/g, ''); // strip LRM and other zero width chars - if (loc !== 'en') { - return t(s, o, 'en'); - } + } - if (o && 'default' in o) { - return o['default']; + return cleaned; + } + + var out = {}, k, v; + for (k in o) { + if (k && (v = o[k]) !== undefined) { + out[k] = cleanVal(k, v); + } + } + return out; } - var missing = 'Missing ' + loc + ' translation: ' + s; - if (typeof console !== "undefined") console.error(missing); + // Tag changes that fire on input can all get coalesced into a single + // history operation when the user leaves the field. #2342 + function changeTags(changed, onInput) { + var entity = context.entity(id), + annotation = t('operations.change_tags.annotation'), + tags = clean(_.extend({}, entity.tags, changed)); - return missing; -} -iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:56:33Z","tags":{}},"n185964961":{"id":"n185964961","loc":[-85.6406588,41.942601],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T20:04:13Z","tags":{}},"n185964962":{"id":"n185964962","loc":[-85.6394548,41.94261],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T20:04:13Z","tags":{}},"n185970607":{"id":"n185970607","loc":[-85.641094,41.94006],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:04:43Z","tags":{}},"n185970614":{"id":"n185970614","loc":[-85.641825,41.941316],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:04:43Z","tags":{}},"n185970616":{"id":"n185970616","loc":[-85.641838,41.941556],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:04:43Z","tags":{}},"n185973650":{"id":"n185973650","loc":[-85.639918,41.940064],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:59Z","tags":{}},"n185973660":{"id":"n185973660","loc":[-85.640645,41.941339],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:59Z","tags":{}},"n185973659":{"id":"n185973659","loc":[-85.6406115,41.9400658],"version":"3","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:56Z","tags":{}},"n185974479":{"id":"n185974479","loc":[-85.639402,41.941344],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:06:18Z","tags":{}},"n185974481":{"id":"n185974481","loc":[-85.643071,41.941288],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:06:18Z","tags":{}},"n185976259":{"id":"n185976259","loc":[-85.642213,41.940043],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:07:24Z","tags":{}},"n185976261":{"id":"n185976261","loc":[-85.643056,41.94001],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:07:24Z","tags":{}},"n185964959":{"id":"n185964959","loc":[-85.6431031,41.9425754],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T20:04:12Z","tags":{}},"n185964960":{"id":"n185964960","loc":[-85.6418749,41.9425864],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T20:04:12Z","tags":{}},"n185981481":{"id":"n185981481","loc":[-85.6386827,41.9400828],"version":"3","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:56Z","tags":{}},"n185981482":{"id":"n185981482","loc":[-85.6393664,41.9400854],"version":"3","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:56Z","tags":{}},"n2138493844":{"id":"n2138493844","loc":[-85.6427969,41.940522],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493845":{"id":"n2138493845","loc":[-85.6425891,41.9405228],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493846":{"id":"n2138493846","loc":[-85.6425868,41.9402875],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493847":{"id":"n2138493847","loc":[-85.6427969,41.9402858],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493848":{"id":"n2138493848","loc":[-85.6425708,41.9405234],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493849":{"id":"n2138493849","loc":[-85.642568,41.9402855],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493850":{"id":"n2138493850","loc":[-85.6423157,41.9402886],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:32Z","tags":{}},"n2138493851":{"id":"n2138493851","loc":[-85.6423212,41.9404362],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:32Z","tags":{}},"n2138493852":{"id":"n2138493852","loc":[-85.6422923,41.9404578],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:32Z","tags":{}},"n2138493853":{"id":"n2138493853","loc":[-85.6422868,41.9404834],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:32Z","tags":{}},"n2138493854":{"id":"n2138493854","loc":[-85.6423226,41.9405091],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:32Z","tags":{}},"n2138493855":{"id":"n2138493855","loc":[-85.6423847,41.9405111],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:32Z","tags":{}},"n2138493856":{"id":"n2138493856","loc":[-85.6424081,41.9405265],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:32Z","tags":{}},"n2140155811":{"id":"n2140155811","loc":[-85.6419547,41.9410956],"version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{}},"n2140155814":{"id":"n2140155814","loc":[-85.6427577,41.9410884],"version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{}},"n2140155816":{"id":"n2140155816","loc":[-85.6427545,41.9410052],"version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{}},"n2140155818":{"id":"n2140155818","loc":[-85.6428057,41.9410028],"version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{}},"n2140155821":{"id":"n2140155821","loc":[-85.6427993,41.9407339],"version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{}},"n2140155823":{"id":"n2140155823","loc":[-85.6427385,41.9407339],"version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{}},"n2140155825":{"id":"n2140155825","loc":[-85.6427417,41.9406435],"version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{}},"n2140155827":{"id":"n2140155827","loc":[-85.6419515,41.9406482],"version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{}},"n2140155828":{"id":"n2140155828","loc":[-85.6429368,41.9412407],"version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{}},"n2140155829":{"id":"n2140155829","loc":[-85.6417756,41.9412526],"version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{}},"n2140155830":{"id":"n2140155830","loc":[-85.641766,41.9405983],"version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{}},"n2140155831":{"id":"n2140155831","loc":[-85.6419803,41.9405983],"version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{}},"n2140155832":{"id":"n2140155832","loc":[-85.6419611,41.9401366],"version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{}},"n2140155833":{"id":"n2140155833","loc":[-85.6429336,41.94012],"version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{}},"n2140155834":{"id":"n2140155834","loc":[-85.6430697,41.9411732],"version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{}},"n2140155835":{"id":"n2140155835","loc":[-85.6428411,41.9409974],"version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{}},"n2140155837":{"id":"n2140155837","loc":[-85.6428388,41.9407211],"version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{}},"n2140155839":{"id":"n2140155839","loc":[-85.6430624,41.9405521],"version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{}},"n2140155840":{"id":"n2140155840","loc":[-85.6427323,41.9412396],"version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{}},"n2140155842":{"id":"n2140155842","loc":[-85.6418147,41.9412457],"version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{}},"n2140155844":{"id":"n2140155844","loc":[-85.641813,41.9411319],"version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{}},"n2140155845":{"id":"n2140155845","loc":[-85.6418394,41.9411111],"version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{}},"n2140155847":{"id":"n2140155847","loc":[-85.6418838,41.9410977],"version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{}},"n2140155849":{"id":"n2140155849","loc":[-85.6427324,41.9410921],"version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{}},"n2140155851":{"id":"n2140155851","loc":[-85.6427798,41.9412945],"version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{}},"n2140155852":{"id":"n2140155852","loc":[-85.6427701,41.9411777],"version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{}},"n2140155854":{"id":"n2140155854","loc":[-85.6427323,41.9411572],"version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{}},"n2140155856":{"id":"n2140155856","loc":[-85.6418478,41.9411666],"version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{}},"n2165942818":{"id":"n2165942818","loc":[-85.6437533,41.9415029],"version":"1","changeset":"15116533","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-21T20:33:02Z","tags":{}},"n2165942819":{"id":"n2165942819","loc":[-85.6437623,41.9421195],"version":"1","changeset":"15116533","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-21T20:33:02Z","tags":{}},"n2168510551":{"id":"n2168510551","loc":[-85.6423795,41.9422615],"version":"1","changeset":"15132039","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:10:23Z","tags":{}},"n2168510552":{"id":"n2168510552","loc":[-85.6423744,41.9419439],"version":"1","changeset":"15132039","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:10:23Z","tags":{}},"n2168510553":{"id":"n2168510553","loc":[-85.642518,41.9419427],"version":"1","changeset":"15132039","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:10:23Z","tags":{}},"n2168510554":{"id":"n2168510554","loc":[-85.6425186,41.9419801],"version":"1","changeset":"15132039","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:10:23Z","tags":{}},"n2168510555":{"id":"n2168510555","loc":[-85.6428314,41.9419773],"version":"1","changeset":"15132039","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:10:23Z","tags":{}},"n2168510556":{"id":"n2168510556","loc":[-85.6428368,41.9423116],"version":"1","changeset":"15132039","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:10:23Z","tags":{}},"n2168510557":{"id":"n2168510557","loc":[-85.6424947,41.9423146],"version":"1","changeset":"15132039","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:10:23Z","tags":{}},"n2168510558":{"id":"n2168510558","loc":[-85.6424938,41.9422605],"version":"1","changeset":"15132039","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:10:23Z","tags":{}},"n2189046007":{"id":"n2189046007","loc":[-85.6410866,41.9424327],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046009":{"id":"n2189046009","loc":[-85.6410805,41.9420061],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046011":{"id":"n2189046011","loc":[-85.6412443,41.9420048],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046012":{"id":"n2189046012","loc":[-85.6412505,41.9424314],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046014":{"id":"n2189046014","loc":[-85.6413311,41.942968],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046016":{"id":"n2189046016","loc":[-85.6413281,41.942713],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046018":{"id":"n2189046018","loc":[-85.641521,41.9427117],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046021":{"id":"n2189046021","loc":[-85.6415234,41.9429236],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046022":{"id":"n2189046022","loc":[-85.6415045,41.9429238],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046025":{"id":"n2189046025","loc":[-85.641505,41.9429668],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046053":{"id":"n2189046053","loc":[-85.6385988,41.942412],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046054":{"id":"n2189046054","loc":[-85.6385985,41.9423311],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046055":{"id":"n2189046055","loc":[-85.6387617,41.9423308],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046056":{"id":"n2189046056","loc":[-85.6387616,41.9423026],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046058":{"id":"n2189046058","loc":[-85.6388215,41.9423025],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046059":{"id":"n2189046059","loc":[-85.6388219,41.9424115],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046060":{"id":"n2189046060","loc":[-85.6391096,41.9424486],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046061":{"id":"n2189046061","loc":[-85.6391105,41.9423673],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046063":{"id":"n2189046063","loc":[-85.6392911,41.9423684],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046065":{"id":"n2189046065","loc":[-85.6392903,41.9424497],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046067":{"id":"n2189046067","loc":[-85.6397927,41.9423876],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046069":{"id":"n2189046069","loc":[-85.6397897,41.9422981],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046070":{"id":"n2189046070","loc":[-85.6399702,41.9422947],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046072":{"id":"n2189046072","loc":[-85.6399732,41.9423843],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046074":{"id":"n2189046074","loc":[-85.6396331,41.9430227],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046075":{"id":"n2189046075","loc":[-85.6398673,41.9430189],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046077":{"id":"n2189046077","loc":[-85.6398656,41.9429637],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046079":{"id":"n2189046079","loc":[-85.6398885,41.9429633],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046082":{"id":"n2189046082","loc":[-85.6398832,41.942779],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046083":{"id":"n2189046083","loc":[-85.6398513,41.9427796],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046085":{"id":"n2189046085","loc":[-85.6398502,41.9427401],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046087":{"id":"n2189046087","loc":[-85.6397889,41.9427411],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046089":{"id":"n2189046089","loc":[-85.6397892,41.942753],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046090":{"id":"n2189046090","loc":[-85.6396983,41.9427544],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046092":{"id":"n2189046092","loc":[-85.6396993,41.9427882],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046094":{"id":"n2189046094","loc":[-85.6396746,41.9427886],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046096":{"id":"n2189046096","loc":[-85.6396758,41.9428296],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046097":{"id":"n2189046097","loc":[-85.6397007,41.9428292],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046099":{"id":"n2189046099","loc":[-85.6397018,41.9428686],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:43Z","tags":{}},"n2189046103":{"id":"n2189046103","loc":[-85.6396289,41.9428697],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046112":{"id":"n2189046112","loc":[-85.6435683,41.9429457],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046113":{"id":"n2189046113","loc":[-85.643568,41.9427766],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046115":{"id":"n2189046115","loc":[-85.6434011,41.9427767],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046116":{"id":"n2189046116","loc":[-85.6434012,41.9428631],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046117":{"id":"n2189046117","loc":[-85.643448,41.9428631],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046118":{"id":"n2189046118","loc":[-85.6434481,41.9429457],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046119":{"id":"n2189046119","loc":[-85.6428363,41.9429809],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046120":{"id":"n2189046120","loc":[-85.6429171,41.9429791],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046121":{"id":"n2189046121","loc":[-85.642914,41.9429041],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046122":{"id":"n2189046122","loc":[-85.6429385,41.9429035],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046123":{"id":"n2189046123","loc":[-85.6429348,41.9428126],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046124":{"id":"n2189046124","loc":[-85.6427746,41.9428163],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046125":{"id":"n2189046125","loc":[-85.6427783,41.942906],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046126":{"id":"n2189046126","loc":[-85.6428332,41.9429047],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046127":{"id":"n2189046127","loc":[-85.6423018,41.9428859],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046128":{"id":"n2189046128","loc":[-85.6422987,41.9427208],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046130":{"id":"n2189046130","loc":[-85.6424218,41.9427195],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046131":{"id":"n2189046131","loc":[-85.6424246,41.9428684],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046132":{"id":"n2189046132","loc":[-85.6423845,41.9428689],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046133":{"id":"n2189046133","loc":[-85.6423848,41.942885],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046134":{"id":"n2189046134","loc":[-85.641533,41.9429392],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046135":{"id":"n2189046135","loc":[-85.6416096,41.9428768],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046137":{"id":"n2189046137","loc":[-85.6416763,41.9429221],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046138":{"id":"n2189046138","loc":[-85.6415997,41.9429845],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046139":{"id":"n2189046139","loc":[-85.6420598,41.9428016],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046140":{"id":"n2189046140","loc":[-85.6420593,41.9427415],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046141":{"id":"n2189046141","loc":[-85.6421957,41.9427409],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046142":{"id":"n2189046142","loc":[-85.6421963,41.9428182],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046143":{"id":"n2189046143","loc":[-85.6421281,41.9428185],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046144":{"id":"n2189046144","loc":[-85.6421279,41.9428013],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046145":{"id":"n2189046145","loc":[-85.6409429,41.9429345],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046146":{"id":"n2189046146","loc":[-85.6410354,41.9429334],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046147":{"id":"n2189046147","loc":[-85.6410325,41.9427972],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046148":{"id":"n2189046148","loc":[-85.640997,41.9427976],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046149":{"id":"n2189046149","loc":[-85.6409963,41.9427643],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046150":{"id":"n2189046150","loc":[-85.6408605,41.9427659],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046152":{"id":"n2189046152","loc":[-85.6408623,41.9428482],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189046153":{"id":"n2189046153","loc":[-85.640941,41.9428473],"version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:44Z","tags":{}},"n2189152992":{"id":"n2189152992","loc":[-85.6437661,41.9422257],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189152993":{"id":"n2189152993","loc":[-85.643768,41.9424067],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189152994":{"id":"n2189152994","loc":[-85.6432176,41.9417705],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189152995":{"id":"n2189152995","loc":[-85.6432097,41.941327],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189152996":{"id":"n2189152996","loc":[-85.6436493,41.9413226],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189152997":{"id":"n2189152997","loc":[-85.6436563,41.9417164],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189152998":{"id":"n2189152998","loc":[-85.6435796,41.9417171],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189152999":{"id":"n2189152999","loc":[-85.6435805,41.9417669],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153000":{"id":"n2189153000","loc":[-85.6438202,41.9414953],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153001":{"id":"n2189153001","loc":[-85.6438173,41.9413175],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153004":{"id":"n2189153004","loc":[-85.6432535,41.9418466],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153005":{"id":"n2189153005","loc":[-85.6433935,41.9418599],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153006":{"id":"n2189153006","loc":[-85.6434831,41.9418986],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153007":{"id":"n2189153007","loc":[-85.6435678,41.9419774],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153008":{"id":"n2189153008","loc":[-85.6435987,41.9420282],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153009":{"id":"n2189153009","loc":[-85.643438,41.9419573],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153010":{"id":"n2189153010","loc":[-85.6435284,41.9424676],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153011":{"id":"n2189153011","loc":[-85.6436207,41.9423631],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153012":{"id":"n2189153012","loc":[-85.6434957,41.9422973],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153013":{"id":"n2189153013","loc":[-85.6434457,41.9422458],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153014":{"id":"n2189153014","loc":[-85.6433976,41.9421772],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153015":{"id":"n2189153015","loc":[-85.6433861,41.9420785],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153016":{"id":"n2189153016","loc":[-85.6433765,41.9420313],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153017":{"id":"n2189153017","loc":[-85.6432207,41.9420284],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153018":{"id":"n2189153018","loc":[-85.6432245,41.9422759],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153019":{"id":"n2189153019","loc":[-85.6432649,41.9423474],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153020":{"id":"n2189153020","loc":[-85.6433226,41.9424132],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153021":{"id":"n2189153021","loc":[-85.6434111,41.9424704],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153022":{"id":"n2189153022","loc":[-85.6434591,41.9424347],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153025":{"id":"n2189153025","loc":[-85.6437669,41.9423073],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153026":{"id":"n2189153026","loc":[-85.6436611,41.942293],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153027":{"id":"n2189153027","loc":[-85.6435784,41.9422473],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153028":{"id":"n2189153028","loc":[-85.6435245,41.9421443],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153029":{"id":"n2189153029","loc":[-85.6435149,41.9420613],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153030":{"id":"n2189153030","loc":[-85.6433528,41.9419269],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153031":{"id":"n2189153031","loc":[-85.6432535,41.9419191],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153032":{"id":"n2189153032","loc":[-85.6430868,41.9419198],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153033":{"id":"n2189153033","loc":[-85.6434894,41.9420033],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153034":{"id":"n2189153034","loc":[-85.6432974,41.9419225],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153035":{"id":"n2189153035","loc":[-85.6433055,41.9421632],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:07Z","tags":{}},"n2189153036":{"id":"n2189153036","loc":[-85.6433538,41.9422849],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:07Z","tags":{}},"n2189153037":{"id":"n2189153037","loc":[-85.6434718,41.9423887],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:07Z","tags":{}},"n2189153038":{"id":"n2189153038","loc":[-85.6436134,41.9422667],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:07Z","tags":{}},"n2189153040":{"id":"n2189153040","loc":[-85.6438759,41.9414017],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:07Z","tags":{}},"n2189153041":{"id":"n2189153041","loc":[-85.6438181,41.9413687],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:07Z","tags":{}},"n2189153042":{"id":"n2189153042","loc":[-85.6436821,41.9413044],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:07Z","tags":{}},"n2189153043":{"id":"n2189153043","loc":[-85.6435899,41.9412862],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:07Z","tags":{}},"n2189153044":{"id":"n2189153044","loc":[-85.6433169,41.9417268],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:07Z","tags":{}},"n2189153045":{"id":"n2189153045","loc":[-85.643301,41.9412859],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:07Z","tags":{}},"n2189153046":{"id":"n2189153046","loc":[-85.6435531,41.9416981],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:07Z","tags":{}},"n2189153047":{"id":"n2189153047","loc":[-85.6435427,41.9412863],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:07Z","tags":{}},"n185948706":{"id":"n185948706","loc":[-85.6369439,41.940122],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T20:04:13Z","tags":{}},"n185949348":{"id":"n185949348","loc":[-85.640039,41.931135],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:54:09Z","tags":{}},"n185949870":{"id":"n185949870","loc":[-85.643195,41.949261],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:54:20Z","tags":{}},"n185954680":{"id":"n185954680","loc":[-85.6337802,41.9401143],"version":"3","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:56Z","tags":{}},"n185954784":{"id":"n185954784","loc":[-85.6487485,41.942527],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T20:04:13Z","tags":{}},"n185958670":{"id":"n185958670","loc":[-85.637255,41.940104],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:30Z","tags":{}},"n185958672":{"id":"n185958672","loc":[-85.636996,41.941355],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:31Z","tags":{}},"n185960207":{"id":"n185960207","loc":[-85.634992,41.940118],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:59:09Z","tags":{}},"n185963163":{"id":"n185963163","loc":[-85.638831,41.93398],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:00:45Z","tags":{}},"n185963165":{"id":"n185963165","loc":[-85.640073,41.933968],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:00:45Z","tags":{}},"n185963167":{"id":"n185963167","loc":[-85.641225,41.933972],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:00:45Z","tags":{}},"n185963168":{"id":"n185963168","loc":[-85.642386,41.933952],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:00:45Z","tags":{}},"n185964695":{"id":"n185964695","loc":[-85.6443608,41.9425645],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T20:04:12Z","tags":{}},"n185964697":{"id":"n185964697","loc":[-85.644384,41.939941],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:31Z","tags":{}},"n185964963":{"id":"n185964963","loc":[-85.6382347,41.9426146],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T20:04:13Z","tags":{}},"n185964965":{"id":"n185964965","loc":[-85.637022,41.942622],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:40Z","tags":{}},"n185964967":{"id":"n185964967","loc":[-85.6363706,41.9426606],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T20:04:13Z","tags":{}},"n185964968":{"id":"n185964968","loc":[-85.6357988,41.9427748],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T20:04:13Z","tags":{}},"n185964969":{"id":"n185964969","loc":[-85.6355409,41.9428465],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T20:04:13Z","tags":{}},"n185964970":{"id":"n185964970","loc":[-85.6348729,41.9430443],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:46:00Z","tags":{}},"n185966958":{"id":"n185966958","loc":[-85.641946,41.946413],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:51Z","tags":{}},"n185966960":{"id":"n185966960","loc":[-85.643148,41.946389],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:51Z","tags":{}},"n185967774":{"id":"n185967774","loc":[-85.641889,41.943852],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:03:12Z","tags":{}},"n185967775":{"id":"n185967775","loc":[-85.641922,41.945121],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:03:12Z","tags":{}},"n185967776":{"id":"n185967776","loc":[-85.641927,41.947544],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:03:12Z","tags":{}},"n185967777":{"id":"n185967777","loc":[-85.641982,41.947622],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:03:12Z","tags":{}},"n185969289":{"id":"n185969289","loc":[-85.63928,41.929221],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:03:52Z","tags":{}},"n185969704":{"id":"n185969704","loc":[-85.6388186,41.9350099],"version":"3","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:56Z","tags":{}},"n185969706":{"id":"n185969706","loc":[-85.6400709,41.9349957],"version":"3","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:56Z","tags":{}},"n185969708":{"id":"n185969708","loc":[-85.6412214,41.9349827],"version":"3","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:56Z","tags":{}},"n185969710":{"id":"n185969710","loc":[-85.6423509,41.934974],"version":"3","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:56Z","tags":{}},"n185970602":{"id":"n185970602","loc":[-85.641293,41.931817],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:04:43Z","tags":{}},"n185970604":{"id":"n185970604","loc":[-85.641258,41.932705],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:04:43Z","tags":{}},"n185970605":{"id":"n185970605","loc":[-85.641148,41.936984],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:04:43Z","tags":{}},"n185970606":{"id":"n185970606","loc":[-85.641112,41.938169],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:04:43Z","tags":{}},"n185970906":{"id":"n185970906","loc":[-85.639454,41.943871],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:04:50Z","tags":{}},"n185970908":{"id":"n185970908","loc":[-85.6394635,41.9450504],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:57Z","tags":{}},"n185970909":{"id":"n185970909","loc":[-85.6394914,41.9451911],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:57Z","tags":{}},"n185971368":{"id":"n185971368","loc":[-85.635769,41.940122],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:01Z","tags":{}},"n185971978":{"id":"n185971978","loc":[-85.640003,41.936988],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:14Z","tags":{}},"n185971980":{"id":"n185971980","loc":[-85.642299,41.936988],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:14Z","tags":{}},"n185973633":{"id":"n185973633","loc":[-85.639023,41.92861],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:59Z","tags":{}},"n185973635":{"id":"n185973635","loc":[-85.639153,41.928969],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:59Z","tags":{}},"n185973637":{"id":"n185973637","loc":[-85.639213,41.929088],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:59Z","tags":{}},"n185973639":{"id":"n185973639","loc":[-85.63935,41.929396],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:59Z","tags":{}},"n185973641":{"id":"n185973641","loc":[-85.640143,41.931462],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:59Z","tags":{}},"n185973644":{"id":"n185973644","loc":[-85.64019,41.931788],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:59Z","tags":{}},"n185973646":{"id":"n185973646","loc":[-85.6401365,41.9327199],"version":"3","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:56Z","tags":{}},"n185973648":{"id":"n185973648","loc":[-85.639983,41.938174],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:59Z","tags":{}},"n185974477":{"id":"n185974477","loc":[-85.638206,41.941331],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:06:18Z","tags":{}},"n185975928":{"id":"n185975928","loc":[-85.640683,41.94513],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:07:13Z","tags":{}},"n185975930":{"id":"n185975930","loc":[-85.643102,41.945103],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:07:13Z","tags":{}},"n185976255":{"id":"n185976255","loc":[-85.642424,41.931817],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:07:24Z","tags":{}},"n185976257":{"id":"n185976257","loc":[-85.64242,41.932699],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:07:24Z","tags":{}},"n185976258":{"id":"n185976258","loc":[-85.6422621,41.9381489],"version":"3","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:57Z","tags":{}},"n185977452":{"id":"n185977452","loc":[-85.6457497,41.9398834],"version":"3","changeset":"5841745","user":"themps","uid":"196173","visible":"true","timestamp":"2010-09-22T00:20:34Z","tags":{}},"n185978772":{"id":"n185978772","loc":[-85.646656,41.939869],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:34Z","tags":{}},"n185981472":{"id":"n185981472","loc":[-85.6388962,41.9321266],"version":"3","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:56Z","tags":{}},"n185981474":{"id":"n185981474","loc":[-85.6388769,41.9327334],"version":"3","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:56Z","tags":{}},"n185981476":{"id":"n185981476","loc":[-85.638829,41.934116],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:10:11Z","tags":{}},"n185981478":{"id":"n185981478","loc":[-85.63876,41.937002],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:10:11Z","tags":{}},"n185981480":{"id":"n185981480","loc":[-85.638682,41.93819],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:10:11Z","tags":{}},"n185981999":{"id":"n185981999","loc":[-85.638194,41.9400866],"version":"3","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:57Z","tags":{}},"n185982001":{"id":"n185982001","loc":[-85.646302,41.93988],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:10:26Z","tags":{}},"n185982877":{"id":"n185982877","loc":[-85.640676,41.943867],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:10:54Z","tags":{}},"n185982879":{"id":"n185982879","loc":[-85.640734,41.945887],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:10:54Z","tags":{}},"n185985823":{"id":"n185985823","loc":[-85.643106,41.943841],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:39Z","tags":{}},"n185985824":{"id":"n185985824","loc":[-85.643145,41.947641],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:39Z","tags":{}},"n185985825":{"id":"n185985825","loc":[-85.643219,41.950829],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:39Z","tags":{}},"n1475301385":{"id":"n1475301385","loc":[-85.6360612,41.9427042],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T20:04:12Z","tags":{}},"n1475301397":{"id":"n1475301397","loc":[-85.6366651,41.9426328],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T20:04:12Z","tags":{}},"n2139795811":{"id":"n2139795811","loc":[-85.6469154,41.9425427],"version":"1","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:47:56Z","tags":{}},"n2139795830":{"id":"n2139795830","loc":[-85.6443194,41.9399444],"version":"1","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:47:57Z","tags":{}},"n2139795834":{"id":"n2139795834","loc":[-85.6453506,41.9399002],"version":"1","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:47:57Z","tags":{}},"n2139795837":{"id":"n2139795837","loc":[-85.645806,41.9398831],"version":"1","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:47:57Z","tags":{}},"n2139858932":{"id":"n2139858932","loc":[-85.6351721,41.9429557],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2140019000":{"id":"n2140019000","loc":[-85.6359935,41.9427224],"version":"1","changeset":"14895342","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:35:05Z","tags":{}},"n2165942817":{"id":"n2165942817","loc":[-85.6442017,41.9414993],"version":"1","changeset":"15116533","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-21T20:33:02Z","tags":{}},"n2165942820":{"id":"n2165942820","loc":[-85.6442107,41.9421159],"version":"1","changeset":"15116533","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-21T20:33:02Z","tags":{}},"n2189152990":{"id":"n2189152990","loc":[-85.6442328,41.942404],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:05Z","tags":{}},"n2189152991":{"id":"n2189152991","loc":[-85.6442309,41.9422229],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153002":{"id":"n2189153002","loc":[-85.6441329,41.9413147],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153003":{"id":"n2189153003","loc":[-85.6441357,41.9414925],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153023":{"id":"n2189153023","loc":[-85.6443453,41.9423074],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153024":{"id":"n2189153024","loc":[-85.6442318,41.9423045],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:06Z","tags":{}},"n2189153039":{"id":"n2189153039","loc":[-85.6441343,41.9414025],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:07Z","tags":{}},"w208643102":{"id":"w208643102","version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:12Z","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2189153034","n2189153035","n2189153036","n2189153037","n2189153038"]},"w17966942":{"id":"w17966942","version":"3","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:48:04Z","tags":{"highway":"residential","name":"Millard St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Millard","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312476:15312477:15312478:15326070:15326071:15329003:15329004:15312479:15312480:15312483:15326956:15326957:15312485:15312486:15322600:15325988","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185954680","n185960207","n185971368","n185948706","n185958670","n185981999","n185981481","n185981482","n185973650","n185973659","n185970607","n185976259","n185976261","n2139795830","n185964697","n2139795834","n185977452","n2139795837","n185982001","n185978772"]},"w208643105":{"id":"w208643105","version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:12Z","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2189153046","n2189153047"]},"w208631637":{"id":"w208631637","version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:45Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189046014","n2189046016","n2189046018","n2189046021","n2189046022","n2189046025","n2189046014"]},"w208643096":{"id":"w208643096","version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:12Z","tags":{"amenity":"parking","area":"yes","fee":"no"},"nodes":["n2189152990","n2189153024","n2189152991","n2189152992","n2189153025","n2189152993","n2189152990"]},"w208631656":{"id":"w208631656","version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:46Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189046134","n2189046135","n2189046137","n2189046138","n2189046134"]},"w204003417":{"id":"w204003417","version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{"area":"yes","building":"school"},"nodes":["n2140155811","n2140155814","n2140155816","n2140155818","n2140155821","n2140155823","n2140155825","n2140155827","n2140155811"]},"w208631654":{"id":"w208631654","version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:46Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189046127","n2189046128","n2189046130","n2189046131","n2189046132","n2189046133","n2189046127"]},"w17966327":{"id":"w17966327","version":"3","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:16Z","tags":{"highway":"residential","name":"S Douglas Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Douglas","tiger:name_direction_prefix":"S","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185976261","n2140155839","n2140155834","n185974481","n2189153032","n185964959"]},"w41785752":{"id":"w41785752","version":"10","changeset":"15421127","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-19T15:11:59Z","tags":{"highway":"primary","name":"West Michigan Avenue","old_ref":"US 131","ref":"US 131 Business;M 60","tiger:cfcc":"A21","tiger:county":"St. Joseph, MI","tiger:name_base":"Michigan","tiger:name_base_1":"State Highway 60","tiger:name_base_2":"US Hwy 131 (Bus)","tiger:name_direction_prefix":"W","tiger:name_type":"Ave","tiger:reviewed":"no","access":"yes"},"nodes":["n185954784","n2139795811","n185964695","n185964959","n185964960","n185964961","n185964962","n185964963","n185964965","n1475301397","n185964967","n1475301385","n2140019000","n185964968","n185964969","n2139858932","n185964970"]},"w203841842":{"id":"w203841842","version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:32Z","tags":{"area":"yes","leisure":"playground"},"nodes":["n2138493848","n2138493849","n2138493850","n2138493851","n2138493852","n2138493853","n2138493854","n2138493855","n2138493856","n2138493848"]},"w208643103":{"id":"w208643103","version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:12Z","tags":{"highway":"service"},"nodes":["n2189153039","n2189153040","n2189153041","n2189153042","n2189153043","n2189153047","n2189153045","n185974481"]},"w208643098":{"id":"w208643098","version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:12Z","tags":{"amenity":"parking","area":"yes"},"nodes":["n2189153000","n2189153041","n2189153001","n2189153002","n2189153039","n2189153003","n2189153000"]},"w208631646":{"id":"w208631646","version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:45Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189046067","n2189046069","n2189046070","n2189046072","n2189046067"]},"w208631653":{"id":"w208631653","version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:45Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189046119","n2189046120","n2189046121","n2189046122","n2189046123","n2189046124","n2189046125","n2189046126","n2189046119"]},"w17966041":{"id":"w17966041","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:41:50Z","tags":{"highway":"residential","name":"S Lincoln Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Lincoln","tiger:name_direction_prefix":"S","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312474:15312448","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185973659","n185973660","n185964961"]},"w208631645":{"id":"w208631645","version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:45Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189046060","n2189046061","n2189046063","n2189046065","n2189046060"]},"w206803397":{"id":"w206803397","version":"1","changeset":"15132039","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:10:25Z","tags":{"area":"yes","building":"yes"},"nodes":["n2168510551","n2168510552","n2168510553","n2168510554","n2168510555","n2168510556","n2168510557","n2168510558","n2168510551"]},"w17965792":{"id":"w17965792","version":"2","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:46:10Z","tags":{"highway":"residential","name":"N Hooker Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Hooker","tiger:name_direction_prefix":"N","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313197:15312414:15312395","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185964962","n185970906","n185970908","n185970909"]},"w208631651":{"id":"w208631651","version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:45Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189046112","n2189046113","n2189046115","n2189046116","n2189046117","n2189046118","n2189046112"]},"w208631643":{"id":"w208631643","version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:45Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189046053","n2189046054","n2189046055","n2189046056","n2189046058","n2189046059","n2189046053"]},"w17966878":{"id":"w17966878","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:48:03Z","tags":{"highway":"residential","name":"S Hooker Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Hooker","tiger:name_direction_prefix":"S","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312508:15312529:15312553:15312597:15328883:15338803","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185981472","n185981474","n185963163","n185981476","n185969704","n185981478","n185981480","n185981481"]},"w17966102":{"id":"w17966102","version":"2","changeset":"14896694","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:01:36Z","tags":{"highway":"residential","name":"South St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"South","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312446","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185958672","n185974477","n185974479","n185973660","n185970614"]},"w208631660":{"id":"w208631660","version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:46Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189046145","n2189046146","n2189046147","n2189046148","n2189046149","n2189046150","n2189046152","n2189046153","n2189046145"]},"w208643101":{"id":"w208643101","version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:12Z","tags":{"highway":"service"},"nodes":["n2189153023","n2189153024","n2189153025","n2189153026","n2189153038","n2189153027","n2189153028","n2189153029","n2189153033","n2189153009","n2189153030","n2189153034","n2189153031","n2189153032"]},"w204000205":{"id":"w204000205","version":"2","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:19Z","tags":{"highway":"residential","name":"South St","oneway":"yes","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"South","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312446","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185974481","n2140155851","n185970614"]},"w203841841":{"id":"w203841841","version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:32Z","tags":{"area":"yes","leisure":"pitch","pitch":"basketball"},"nodes":["n2138493844","n2138493845","n2138493846","n2138493847","n2138493844"]},"w17965444":{"id":"w17965444","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:37:03Z","tags":{"highway":"residential","name":"N Grant Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Grant","tiger:name_direction_prefix":"N","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312348:15312365:15312422:15312392","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185964960","n185967774","n185967775","n185966958","n185967776","n185967777"]},"w208631648":{"id":"w208631648","version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:45Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189046074","n2189046075","n2189046077","n2189046079","n2189046082","n2189046083","n2189046085","n2189046087","n2189046089","n2189046090","n2189046092","n2189046094","n2189046096","n2189046097","n2189046099","n2189046103","n2189046074"]},"w208643100":{"id":"w208643100","version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:12Z","tags":{"amenity":"parking","area":"yes"},"nodes":["n2189153010","n2189153011","n2189153012","n2189153013","n2189153014","n2189153015","n2189153016","n2189153017","n2189153018","n2189153019","n2189153020","n2189153021","n2189153022","n2189153010"]},"w17965749":{"id":"w17965749","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:39:28Z","tags":{"highway":"residential","name":"S Grant Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Grant","tiger:name_direction_prefix":"S","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312445","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185970614","n185970616","n185964960"]},"w206574482":{"id":"w206574482","version":"2","changeset":"15128027","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-22T20:03:31Z","tags":{"addr:state":"MI","amenity":"library","area":"yes","building":"yes","ele":"249","gnis:county_name":"St. Joseph","gnis:feature_id":"2418162","gnis:import_uuid":"57871b70-0100-4405-bb30-88b2e001a944","gnis:reviewed":"no","name":"Three Rivers Public Library","source":"USGS Geonames"},"nodes":["n2165942817","n2165942818","n2165942819","n2165942820","n2165942817"]},"w208643097":{"id":"w208643097","version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:12Z","tags":{"amenity":"parking","area":"yes"},"nodes":["n2189152994","n2189152995","n2189152996","n2189152997","n2189152998","n2189152999","n2189152994"]},"w17966879":{"id":"w17966879","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:48:03Z","tags":{"highway":"residential","name":"S Hooker Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Hooker","tiger:name_direction_prefix":"S","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312475:15312449","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185981482","n185974479","n185964962"]},"w17966325":{"id":"w17966325","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:43:58Z","tags":{"highway":"residential","name":"S Douglas Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Douglas","tiger:name_direction_prefix":"S","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15330300:15312522:15312547:15330299:15312603:15312571:15331740","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185976255","n185976257","n185963168","n185969710","n185971980","n185976258","n185954700","n185976259"]},"w17967390":{"id":"w17967390","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:51:27Z","tags":{"highway":"residential","name":"N Douglas Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Douglas","tiger:name_direction_prefix":"N","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312300","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185964959","n185985823","n185975930","n185966960","n185985824","n185949870","n185985825"]},"w208631635":{"id":"w208631635","version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:45Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189046007","n2189046009","n2189046011","n2189046012","n2189046007"]},"w208643099":{"id":"w208643099","version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:12Z","tags":{"amenity":"parking","area":"yes"},"nodes":["n2189153031","n2189153004","n2189153005","n2189153006","n2189153007","n2189153008","n2189153029","n2189153033","n2189153009","n2189153030","n2189153031"]},"w208631658":{"id":"w208631658","version":"1","changeset":"15276417","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:05:46Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189046139","n2189046140","n2189046141","n2189046142","n2189046143","n2189046144","n2189046139"]},"w208643104":{"id":"w208643104","version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:12Z","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2189153044","n2189153045"]},"w17966039":{"id":"w17966039","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:41:49Z","tags":{"highway":"residential","name":"S Lincoln Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Lincoln","tiger:name_direction_prefix":"S","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312526:15312511:15312550:15312601:15312998:15312626:15312574:15328327:15328328:15313210","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185973633","n185973635","n185973637","n185969289","n185973639","n185949348","n185973641","n185973644","n185973646","n185963165","n185969706","n185971978","n185973648","n185973650"]},"w204003420":{"id":"w204003420","version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{"amenity":"parking","area":"yes"},"nodes":["n2140155840","n2140155842","n2140155844","n2140155845","n2140155847","n2140155849","n2140155854","n2140155840"]},"w204003419":{"id":"w204003419","version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{"highway":"service"},"nodes":["n2140155834","n2140155835","n2140155837","n2140155839"]},"w204003418":{"id":"w204003418","version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{"amenity":"school","area":"yes","name":"Andrews Elementary School"},"nodes":["n2140155828","n2140155829","n2140155830","n2140155831","n2140155832","n2140155833","n2140155828"]},"w17965747":{"id":"w17965747","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:39:27Z","tags":{"highway":"residential","name":"S Grant Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Grant","tiger:name_direction_prefix":"S","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312509:15312524:15312549:15312605:15329008:15312572","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185970602","n185970604","n185963167","n185969708","n185970605","n185970606","n185970607"]},"w17967073":{"id":"w17967073","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:49:07Z","tags":{"highway":"residential","name":"N Lincoln Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Lincoln","tiger:name_direction_prefix":"N","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313196:15312424:15312394","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185964961","n185982877","n185975928","n185982879"]},"w204003421":{"id":"w204003421","version":"1","changeset":"14897169","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T14:35:18Z","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2140155851","n2140155852","n2140155854","n2140155856"]},"r1943857":{"id":"r1943857","version":"2","changeset":"13612265","user":"migurski","uid":"8287","visible":"true","timestamp":"2012-10-24T04:10:54Z","tags":{"is_in:state":"MI","modifier":"Business","name":"US 131 Business (Three Rivers, MI)","network":"US:US","ref":"131","route":"road","type":"route"},"members":[{"id":"w17966509","type":"way","role":"forward"},{"id":"w143497377","type":"way","role":""},{"id":"w134150811","type":"way","role":""},{"id":"w134150800","type":"way","role":""},{"id":"w134150789","type":"way","role":""},{"id":"w134150795","type":"way","role":""},{"id":"w41785752","type":"way","role":""},{"id":"w17965146","type":"way","role":"forward"},{"id":"w17964031","type":"way","role":"forward"}]},"r270277":{"id":"r270277","version":"21","changeset":"15347356","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T03:41:02Z","tags":{"network":"US:MI","ref":"60","route":"road","state_id":"MI","type":"route","url":"http://en.wikipedia.org/wiki/M-60_%28Michigan_highway%29"},"members":[{"id":"w17751087","type":"way","role":"east"},{"id":"w117148312","type":"way","role":"east"},{"id":"w40942155","type":"way","role":"west"},{"id":"w17751017","type":"way","role":""},{"id":"w17751083","type":"way","role":""},{"id":"w17747780","type":"way","role":""},{"id":"w41068082","type":"way","role":""},{"id":"w197025212","type":"way","role":""},{"id":"w17743874","type":"way","role":""},{"id":"w17751044","type":"way","role":""},{"id":"w17752167","type":"way","role":""},{"id":"w17751089","type":"way","role":""},{"id":"w17743879","type":"way","role":""},{"id":"w17751064","type":"way","role":""},{"id":"w197057073","type":"way","role":""},{"id":"w167699963","type":"way","role":""},{"id":"w167699972","type":"way","role":""},{"id":"w17967584","type":"way","role":""},{"id":"w167699964","type":"way","role":""},{"id":"w17967582","type":"way","role":"west"},{"id":"w41260270","type":"way","role":"west"},{"id":"w17965146","type":"way","role":"west"},{"id":"w41785752","type":"way","role":""},{"id":"w134150795","type":"way","role":""},{"id":"w134150789","type":"way","role":""},{"id":"w134150800","type":"way","role":""},{"id":"w134150811","type":"way","role":""},{"id":"w134150836","type":"way","role":""},{"id":"w134150802","type":"way","role":""},{"id":"w41074896","type":"way","role":""},{"id":"w17966773","type":"way","role":""},{"id":"w17967415","type":"way","role":""},{"id":"w41074899","type":"way","role":""},{"id":"w17967581","type":"way","role":""},{"id":"w41074902","type":"way","role":""},{"id":"w41074906","type":"way","role":""},{"id":"w209707997","type":"way","role":""},{"id":"w209707998","type":"way","role":""},{"id":"w17964798","type":"way","role":""},{"id":"w17966034","type":"way","role":""},{"id":"w17967593","type":"way","role":""},{"id":"w41074888","type":"way","role":""},{"id":"w17733772","type":"way","role":""},{"id":"w41074813","type":"way","role":""},{"id":"w17742213","type":"way","role":""},{"id":"w17746863","type":"way","role":""},{"id":"w17745772","type":"way","role":""},{"id":"w17742222","type":"way","role":""},{"id":"w17745922","type":"way","role":""},{"id":"w17742198","type":"way","role":""},{"id":"w17747675","type":"way","role":""},{"id":"w17739927","type":"way","role":""},{"id":"w17745708","type":"way","role":""},{"id":"w41006323","type":"way","role":""},{"id":"w17744233","type":"way","role":""},{"id":"w17739436","type":"way","role":""},{"id":"w17742201","type":"way","role":""},{"id":"w151418616","type":"way","role":""},{"id":"w17750062","type":"way","role":""},{"id":"w17742227","type":"way","role":"east"},{"id":"w41006348","type":"way","role":"east"},{"id":"w41260984","type":"way","role":""},{"id":"w17832427","type":"way","role":""},{"id":"w17838408","type":"way","role":""},{"id":"w17835846","type":"way","role":""},{"id":"w17832923","type":"way","role":""},{"id":"w17839388","type":"way","role":""},{"id":"w17838390","type":"way","role":""},{"id":"w17831272","type":"way","role":""},{"id":"w17828581","type":"way","role":""},{"id":"w38240686","type":"way","role":""},{"id":"w17838405","type":"way","role":"east"},{"id":"w123323711","type":"way","role":"east"},{"id":"w17830167","type":"way","role":"east"},{"id":"w99011909","type":"way","role":"east"},{"id":"w41911361","type":"way","role":"east"},{"id":"w41911355","type":"way","role":"east"},{"id":"w41911356","type":"way","role":"east"},{"id":"w117148326","type":"way","role":"west"},{"id":"w41911352","type":"way","role":"west"},{"id":"w41911353","type":"way","role":"west"},{"id":"w41911354","type":"way","role":"west"},{"id":"w41911360","type":"way","role":"west"},{"id":"w38240676","type":"way","role":"west"},{"id":"w123323710","type":"way","role":"west"},{"id":"w41260271","type":"way","role":"east"},{"id":"w41260273","type":"way","role":"east"},{"id":"w17964031","type":"way","role":"east"},{"id":"w41006344","type":"way","role":"west"},{"id":"w41006351","type":"way","role":"west"}]},"n367813436":{"id":"n367813436","loc":[-85.63605205663384,41.94305506683346],"version":"2","changeset":"14895342","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:35:05Z","tags":{"addr:state":"MI","amenity":"fire_station","ele":"245","gnis:county_name":"St. Joseph","gnis:feature_id":"2417894","gnis:import_uuid":"57871b70-0100-4405-bb30-88b2e001a944","gnis:reviewed":"no","name":"Three Rivers Fire Department","source":"USGS Geonames"}},"n185948708":{"id":"n185948708","loc":[-85.6369828,41.9408789],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T20:04:13Z","tags":{}},"n185948710":{"id":"n185948710","loc":[-85.6370184,41.9411346],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T20:04:13Z","tags":{}},"n185954691":{"id":"n185954691","loc":[-85.634476,41.941475],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:56:32Z","tags":{}},"n185954692":{"id":"n185954692","loc":[-85.635008,41.941846],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:56:32Z","tags":{}},"n185954693":{"id":"n185954693","loc":[-85.635362,41.941962],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:56:33Z","tags":{}},"n185954695":{"id":"n185954695","loc":[-85.63578,41.941978],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:56:33Z","tags":{}},"n185972903":{"id":"n185972903","loc":[-85.63295,41.9430062],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:59Z","tags":{}},"n185964971":{"id":"n185964971","loc":[-85.6346811,41.9431023],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:46:00Z","tags":{}},"n1819805854":{"id":"n1819805854","loc":[-85.6331275,41.9404837],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:28Z","tags":{}},"n1819805918":{"id":"n1819805918","loc":[-85.6331168,41.942798],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:28Z","tags":{}},"n1819805762":{"id":"n1819805762","loc":[-85.6333034,41.9424123],"version":"2","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:33Z","tags":{}},"n1819805907":{"id":"n1819805907","loc":[-85.6334819,41.9419121],"version":"2","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:33Z","tags":{}},"n1819805915":{"id":"n1819805915","loc":[-85.6334554,41.9413588],"version":"2","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:33Z","tags":{}},"n1819848888":{"id":"n1819848888","loc":[-85.6331625,41.942679],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:50Z","tags":{}},"n1819848930":{"id":"n1819848930","loc":[-85.6338684,41.9431252],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:51Z","tags":{}},"n1819858505":{"id":"n1819858505","loc":[-85.6346782,41.9429092],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:54Z","tags":{}},"n1819858507":{"id":"n1819858507","loc":[-85.6339003,41.9414534],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:54Z","tags":{}},"n1819858508":{"id":"n1819858508","loc":[-85.6345709,41.9427742],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:54Z","tags":{}},"n1819858509":{"id":"n1819858509","loc":[-85.63419,41.9417322],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:54Z","tags":{}},"n1819858511":{"id":"n1819858511","loc":[-85.6340666,41.9415652],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:54Z","tags":{}},"n1819858512":{"id":"n1819858512","loc":[-85.6343295,41.9423027],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:54Z","tags":{}},"n1819858514":{"id":"n1819858514","loc":[-85.6343241,41.942207],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:54Z","tags":{}},"n1819858521":{"id":"n1819858521","loc":[-85.633391,41.941231],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:55Z","tags":{}},"n1819858528":{"id":"n1819858528","loc":[-85.6343027,41.9419716],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:55Z","tags":{}},"n185954683":{"id":"n185954683","loc":[-85.6335412,41.940147],"version":"3","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:56Z","tags":{}},"n185954685":{"id":"n185954685","loc":[-85.6334296,41.9403023],"version":"3","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:56Z","tags":{}},"n185954687":{"id":"n185954687","loc":[-85.6333988,41.9404704],"version":"3","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:56Z","tags":{}},"n185954689":{"id":"n185954689","loc":[-85.6335511,41.9410225],"version":"3","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:56Z","tags":{}},"n185954690":{"id":"n185954690","loc":[-85.6336721,41.9411669],"version":"3","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:56Z","tags":{}},"n1820938802":{"id":"n1820938802","loc":[-85.6330671,41.941845],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:43Z","tags":{}},"n1821006702":{"id":"n1821006702","loc":[-85.6344047,41.9395496],"version":"1","changeset":"12181163","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T01:58:48Z","tags":{}},"n2130304133":{"id":"n2130304133","loc":[-85.6349025,41.9427659],"version":"1","changeset":"14802606","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-01-27T04:50:52Z","tags":{}},"n2130304136":{"id":"n2130304136","loc":[-85.6346027,41.9422017],"version":"1","changeset":"14802606","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-01-27T04:50:52Z","tags":{}},"n2130304138":{"id":"n2130304138","loc":[-85.6348577,41.9421517],"version":"1","changeset":"14802606","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-01-27T04:50:52Z","tags":{}},"n2130304140":{"id":"n2130304140","loc":[-85.6348419,41.9422694],"version":"1","changeset":"14802606","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-01-27T04:50:52Z","tags":{}},"n2130304142":{"id":"n2130304142","loc":[-85.6349071,41.9423135],"version":"1","changeset":"14802606","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-01-27T04:50:52Z","tags":{}},"n2130304144":{"id":"n2130304144","loc":[-85.6350495,41.9423312],"version":"1","changeset":"14802606","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-01-27T04:50:52Z","tags":{}},"n2130304146":{"id":"n2130304146","loc":[-85.6351009,41.9422812],"version":"1","changeset":"14802606","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-01-27T04:50:52Z","tags":{}},"n2130304147":{"id":"n2130304147","loc":[-85.6351227,41.9421532],"version":"1","changeset":"14802606","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-01-27T04:50:52Z","tags":{}},"n2130304148":{"id":"n2130304148","loc":[-85.635526,41.9421547],"version":"1","changeset":"14802606","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-01-27T04:50:52Z","tags":{}},"n2130304149":{"id":"n2130304149","loc":[-85.6355339,41.9425768],"version":"1","changeset":"14802606","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-01-27T04:50:52Z","tags":{}},"n2130304150":{"id":"n2130304150","loc":[-85.6351582,41.9426562],"version":"1","changeset":"14802606","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-01-27T04:50:52Z","tags":{}},"n2130304151":{"id":"n2130304151","loc":[-85.6351207,41.9427032],"version":"1","changeset":"14802606","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-01-27T04:50:52Z","tags":{}},"n2138493807":{"id":"n2138493807","loc":[-85.6350923,41.9415216],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493808":{"id":"n2138493808","loc":[-85.6353603,41.9411061],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493809":{"id":"n2138493809","loc":[-85.6354421,41.9410942],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493810":{"id":"n2138493810","loc":[-85.6355079,41.9411044],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493811":{"id":"n2138493811","loc":[-85.6355693,41.9411246],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493812":{"id":"n2138493812","loc":[-85.6355829,41.9411061],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493813":{"id":"n2138493813","loc":[-85.6355624,41.9409777],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493814":{"id":"n2138493814","loc":[-85.6355011,41.9409152],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493815":{"id":"n2138493815","loc":[-85.635383,41.9409219],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493816":{"id":"n2138493816","loc":[-85.635299,41.9409658],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493817":{"id":"n2138493817","loc":[-85.6351695,41.941204],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493818":{"id":"n2138493818","loc":[-85.6348879,41.9415166],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493819":{"id":"n2138493819","loc":[-85.634897,41.9415757],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493820":{"id":"n2138493820","loc":[-85.6349606,41.9416399],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493821":{"id":"n2138493821","loc":[-85.6350219,41.9416669],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493822":{"id":"n2138493822","loc":[-85.6351241,41.9416314],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493823":{"id":"n2138493823","loc":[-85.6350855,41.9415622],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493824":{"id":"n2138493824","loc":[-85.6350401,41.9413603],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493825":{"id":"n2138493825","loc":[-85.6352206,41.9410765],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493826":{"id":"n2138493826","loc":[-85.6343865,41.9415594],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493827":{"id":"n2138493827","loc":[-85.6343506,41.9415873],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493828":{"id":"n2138493828","loc":[-85.6344158,41.9417557],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493829":{"id":"n2138493829","loc":[-85.6344614,41.9417968],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493830":{"id":"n2138493830","loc":[-85.6345005,41.9418186],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493831":{"id":"n2138493831","loc":[-85.6345965,41.9418162],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493832":{"id":"n2138493832","loc":[-85.6347317,41.9417242],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493833":{"id":"n2138493833","loc":[-85.6346722,41.941775],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2139858909":{"id":"n2139858909","loc":[-85.633403,41.9391006],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858910":{"id":"n2139858910","loc":[-85.6332973,41.9393967],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858911":{"id":"n2139858911","loc":[-85.633205,41.9396742],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858912":{"id":"n2139858912","loc":[-85.6332203,41.9397772],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858913":{"id":"n2139858913","loc":[-85.6333453,41.939936],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858914":{"id":"n2139858914","loc":[-85.6333761,41.9400018],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858915":{"id":"n2139858915","loc":[-85.63328,41.9402249],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858916":{"id":"n2139858916","loc":[-85.6332357,41.9403523],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858917":{"id":"n2139858917","loc":[-85.6332838,41.9405831],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858918":{"id":"n2139858918","loc":[-85.6333643,41.9408744],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858919":{"id":"n2139858919","loc":[-85.6334394,41.9410519],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858920":{"id":"n2139858920","loc":[-85.6335815,41.9411717],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858921":{"id":"n2139858921","loc":[-85.6337478,41.9412734],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858922":{"id":"n2139858922","loc":[-85.6343174,41.9415268],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858923":{"id":"n2139858923","loc":[-85.6343886,41.9417397],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858924":{"id":"n2139858924","loc":[-85.6344407,41.9418015],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858925":{"id":"n2139858925","loc":[-85.6345139,41.9418366],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858926":{"id":"n2139858926","loc":[-85.6344846,41.942005],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858927":{"id":"n2139858927","loc":[-85.6345775,41.9422218],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858928":{"id":"n2139858928","loc":[-85.6348771,41.9427814],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858929":{"id":"n2139858929","loc":[-85.6349487,41.9427995],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858930":{"id":"n2139858930","loc":[-85.6350415,41.9427874],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858931":{"id":"n2139858931","loc":[-85.6351246,41.9428589],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858978":{"id":"n2139858978","loc":[-85.6349658,41.9431481],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858979":{"id":"n2139858979","loc":[-85.6350081,41.9431287],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858980":{"id":"n2139858980","loc":[-85.6349967,41.9430997],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858981":{"id":"n2139858981","loc":[-85.6352158,41.9430352],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858982":{"id":"n2139858982","loc":[-85.6348174,41.94267],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858983":{"id":"n2139858983","loc":[-85.6346142,41.9425989],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858984":{"id":"n2139858984","loc":[-85.6344938,41.9423809],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858985":{"id":"n2139858985","loc":[-85.6344856,41.9422997],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139870380":{"id":"n2139870380","loc":[-85.6346707,41.9417955],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870381":{"id":"n2139870381","loc":[-85.6345949,41.9418311],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870382":{"id":"n2139870382","loc":[-85.6343322,41.9418659],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870383":{"id":"n2139870383","loc":[-85.6342072,41.941885],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870384":{"id":"n2139870384","loc":[-85.6341325,41.9418919],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870385":{"id":"n2139870385","loc":[-85.6341314,41.9422028],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870386":{"id":"n2139870386","loc":[-85.6340472,41.9423271],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870387":{"id":"n2139870387","loc":[-85.6342185,41.9427933],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870388":{"id":"n2139870388","loc":[-85.6340605,41.9423924],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870389":{"id":"n2139870389","loc":[-85.6339889,41.9424069],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870390":{"id":"n2139870390","loc":[-85.633971,41.942356],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870391":{"id":"n2139870391","loc":[-85.63361,41.9424235],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870392":{"id":"n2139870392","loc":[-85.6337137,41.9426819],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870393":{"id":"n2139870393","loc":[-85.6336977,41.9428632],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870394":{"id":"n2139870394","loc":[-85.6338823,41.9428647],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870395":{"id":"n2139870395","loc":[-85.6339412,41.9430069],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870396":{"id":"n2139870396","loc":[-85.6338873,41.9430353],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870397":{"id":"n2139870397","loc":[-85.6337676,41.942815],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870398":{"id":"n2139870398","loc":[-85.6336822,41.9423505],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870399":{"id":"n2139870399","loc":[-85.634037,41.9422725],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870400":{"id":"n2139870400","loc":[-85.6340294,41.9422518],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870401":{"id":"n2139870401","loc":[-85.6336726,41.9423312],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870402":{"id":"n2139870402","loc":[-85.6342188,41.9425715],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870403":{"id":"n2139870403","loc":[-85.6342524,41.942565],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870404":{"id":"n2139870404","loc":[-85.6341438,41.942299],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870405":{"id":"n2139870405","loc":[-85.6341149,41.9423061],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870407":{"id":"n2139870407","loc":[-85.6340846,41.9431458],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870408":{"id":"n2139870408","loc":[-85.6339436,41.9429032],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870409":{"id":"n2139870409","loc":[-85.6343143,41.9428207],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870410":{"id":"n2139870410","loc":[-85.6343507,41.94277],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870411":{"id":"n2139870411","loc":[-85.6341527,41.942254],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870412":{"id":"n2139870412","loc":[-85.6340925,41.9422199],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870413":{"id":"n2139870413","loc":[-85.6335435,41.9423433],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870414":{"id":"n2139870414","loc":[-85.6335023,41.9423975],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870415":{"id":"n2139870415","loc":[-85.6335086,41.9424552],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870416":{"id":"n2139870416","loc":[-85.6336296,41.942665],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870417":{"id":"n2139870417","loc":[-85.6341396,41.9428596],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870418":{"id":"n2139870418","loc":[-85.6339701,41.9424487],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870419":{"id":"n2139870419","loc":[-85.6335514,41.9425294],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870420":{"id":"n2139870420","loc":[-85.6337406,41.9424929],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870421":{"id":"n2139870421","loc":[-85.6338939,41.9428687],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870422":{"id":"n2139870422","loc":[-85.6341323,41.9419538],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870423":{"id":"n2139870423","loc":[-85.6340321,41.9420376],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870424":{"id":"n2139870424","loc":[-85.6337648,41.942238],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870425":{"id":"n2139870425","loc":[-85.6337604,41.9422685],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870426":{"id":"n2139870426","loc":[-85.6337682,41.9422928],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870427":{"id":"n2139870427","loc":[-85.6338086,41.9423862],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870428":{"id":"n2139870428","loc":[-85.6349465,41.9416631],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870429":{"id":"n2139870429","loc":[-85.6351097,41.9416973],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870430":{"id":"n2139870430","loc":[-85.6353371,41.9416798],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870431":{"id":"n2139870431","loc":[-85.6349627,41.9422506],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870432":{"id":"n2139870432","loc":[-85.634979,41.9421815],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870433":{"id":"n2139870433","loc":[-85.634885,41.9421679],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870434":{"id":"n2139870434","loc":[-85.6348689,41.9422377],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870435":{"id":"n2139870435","loc":[-85.6349779,41.9419486],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870436":{"id":"n2139870436","loc":[-85.6349505,41.9418933],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870437":{"id":"n2139870437","loc":[-85.6347327,41.9419505],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870438":{"id":"n2139870438","loc":[-85.6347614,41.9420087],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870439":{"id":"n2139870439","loc":[-85.6351889,41.9416912],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870440":{"id":"n2139870440","loc":[-85.6351092,41.9418426],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870441":{"id":"n2139870441","loc":[-85.635086,41.9419659],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870442":{"id":"n2139870442","loc":[-85.6350584,41.9421466],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870443":{"id":"n2139870443","loc":[-85.6350993,41.9421606],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870444":{"id":"n2139870444","loc":[-85.6350993,41.9422132],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870445":{"id":"n2139870445","loc":[-85.6350794,41.9422855],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870446":{"id":"n2139870446","loc":[-85.6350474,41.9423159],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870447":{"id":"n2139870447","loc":[-85.6349251,41.9422998],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870448":{"id":"n2139870448","loc":[-85.634911,41.9422755],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870449":{"id":"n2139870449","loc":[-85.6349157,41.9422553],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870450":{"id":"n2139870450","loc":[-85.6347213,41.9419324],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870451":{"id":"n2139870451","loc":[-85.6349535,41.9418771],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139870452":{"id":"n2139870452","loc":[-85.6350135,41.9419421],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:02Z","tags":{}},"n2139870453":{"id":"n2139870453","loc":[-85.6348584,41.9418997],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:02Z","tags":{}},"n2139870454":{"id":"n2139870454","loc":[-85.6348113,41.9418101],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:02Z","tags":{}},"n2139870455":{"id":"n2139870455","loc":[-85.6347306,41.9417449],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:02Z","tags":{}},"n2139870456":{"id":"n2139870456","loc":[-85.6349123,41.941776],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:02Z","tags":{}},"n2139870457":{"id":"n2139870457","loc":[-85.6349423,41.9421448],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:02Z","tags":{}},"n2139870458":{"id":"n2139870458","loc":[-85.6349436,41.9420652],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:02Z","tags":{}},"n2139870459":{"id":"n2139870459","loc":[-85.6349136,41.9419963],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:02Z","tags":{}},"n2139870460":{"id":"n2139870460","loc":[-85.6349814,41.9419789],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:02Z","tags":{}},"n2139989328":{"id":"n2139989328","loc":[-85.6334188,41.9421725],"version":"1","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:33Z","tags":{}},"n2139989330":{"id":"n2139989330","loc":[-85.6335087,41.9416308],"version":"1","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:33Z","tags":{}},"n2139989335":{"id":"n2139989335","loc":[-85.6336856,41.9429371],"version":"1","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:33Z","tags":{}},"n2139989337":{"id":"n2139989337","loc":[-85.6333713,41.9427217],"version":"1","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:33Z","tags":{}},"n2139989339":{"id":"n2139989339","loc":[-85.6332912,41.9425383],"version":"1","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:33Z","tags":{}},"n2139989341":{"id":"n2139989341","loc":[-85.6339369,41.9409198],"version":"1","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:33Z","tags":{}},"n2139989344":{"id":"n2139989344","loc":[-85.634097,41.9409469],"version":"1","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:33Z","tags":{}},"n2139989346":{"id":"n2139989346","loc":[-85.634137,41.9412852],"version":"1","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:33Z","tags":{}},"n2139989348":{"id":"n2139989348","loc":[-85.6344536,41.9414151],"version":"1","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:33Z","tags":{}},"n2139989350":{"id":"n2139989350","loc":[-85.6350794,41.9412392],"version":"1","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:33Z","tags":{}},"n2139989351":{"id":"n2139989351","loc":[-85.6352541,41.9409387],"version":"1","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:33Z","tags":{}},"n2139989353":{"id":"n2139989353","loc":[-85.6357198,41.9408007],"version":"1","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:33Z","tags":{}},"n2139989355":{"id":"n2139989355","loc":[-85.6357235,41.9427088],"version":"1","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:33Z","tags":{}},"n2139989357":{"id":"n2139989357","loc":[-85.6337119,41.9421256],"version":"1","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:33Z","tags":{}},"n2139989359":{"id":"n2139989359","loc":[-85.6336913,41.9420655],"version":"1","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:33Z","tags":{}},"n2139989360":{"id":"n2139989360","loc":[-85.633582,41.9420867],"version":"1","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:33Z","tags":{}},"n2139989362":{"id":"n2139989362","loc":[-85.6336058,41.9421491],"version":"1","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:33Z","tags":{}},"n2139989364":{"id":"n2139989364","loc":[-85.6339685,41.9410995],"version":"1","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:33Z","tags":{}},"n2139989366":{"id":"n2139989366","loc":[-85.6339067,41.9411383],"version":"1","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:33Z","tags":{}},"n2139989368":{"id":"n2139989368","loc":[-85.6339685,41.9411972],"version":"1","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:33Z","tags":{}},"n2139989370":{"id":"n2139989370","loc":[-85.6340398,41.9411619],"version":"1","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:33Z","tags":{}},"n2139870379":{"id":"n2139870379","loc":[-85.6348391,41.9416651],"version":"2","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:33Z","tags":{}},"n2140006363":{"id":"n2140006363","loc":[-85.6353144,41.9430345],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006364":{"id":"n2140006364","loc":[-85.6349191,41.9431422],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140018997":{"id":"n2140018997","loc":[-85.63645945147184,41.942986488012565],"version":"1","changeset":"14895342","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:35:05Z","tags":{"amenity":"townhall","name":"Three Rivers City Hall"}},"n2140018998":{"id":"n2140018998","loc":[-85.6370319,41.9427919],"version":"1","changeset":"14895342","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:35:05Z","tags":{}},"n2140018999":{"id":"n2140018999","loc":[-85.6360687,41.9427808],"version":"1","changeset":"14895342","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:35:05Z","tags":{}},"n2199856288":{"id":"n2199856288","loc":[-85.6344968,41.9407307],"version":"1","changeset":"15353718","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T16:29:46Z","tags":{}},"n2199856289":{"id":"n2199856289","loc":[-85.634492,41.9406036],"version":"1","changeset":"15353718","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T16:29:46Z","tags":{}},"n2199856290":{"id":"n2199856290","loc":[-85.634891,41.9406001],"version":"1","changeset":"15353718","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T16:29:46Z","tags":{}},"n2199856291":{"id":"n2199856291","loc":[-85.6348894,41.9405288],"version":"1","changeset":"15353718","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T16:29:46Z","tags":{}},"n2199856292":{"id":"n2199856292","loc":[-85.6349166,41.94053],"version":"1","changeset":"15353718","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T16:29:46Z","tags":{}},"n2199856293":{"id":"n2199856293","loc":[-85.6349166,41.9404956],"version":"1","changeset":"15353718","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T16:29:46Z","tags":{}},"n2199856294":{"id":"n2199856294","loc":[-85.6350219,41.9404956],"version":"1","changeset":"15353718","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T16:29:46Z","tags":{}},"n2199856295":{"id":"n2199856295","loc":[-85.6350251,41.94053],"version":"1","changeset":"15353718","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T16:29:46Z","tags":{}},"n2199856296":{"id":"n2199856296","loc":[-85.6350538,41.9405288],"version":"1","changeset":"15353718","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T16:29:46Z","tags":{}},"n2199856297":{"id":"n2199856297","loc":[-85.6350602,41.94079],"version":"1","changeset":"15353718","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T16:29:46Z","tags":{}},"n2199856298":{"id":"n2199856298","loc":[-85.6351703,41.9407912],"version":"1","changeset":"15353718","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T16:29:46Z","tags":{}},"n2199856299":{"id":"n2199856299","loc":[-85.6351688,41.9409171],"version":"1","changeset":"15353718","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T16:29:46Z","tags":{}},"n2199856300":{"id":"n2199856300","loc":[-85.6347889,41.9409135],"version":"1","changeset":"15353718","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T16:29:46Z","tags":{}},"n2199856301":{"id":"n2199856301","loc":[-85.6347921,41.94079],"version":"1","changeset":"15353718","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T16:29:46Z","tags":{}},"n2199856302":{"id":"n2199856302","loc":[-85.6348942,41.9407888],"version":"1","changeset":"15353718","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T16:29:46Z","tags":{}},"n2199856303":{"id":"n2199856303","loc":[-85.6348926,41.9407283],"version":"1","changeset":"15353718","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T16:29:46Z","tags":{}},"n185951869":{"id":"n185951869","loc":[-85.6387639,41.957288],"version":"3","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:17Z","tags":{}},"n185958643":{"id":"n185958643","loc":[-85.636746,41.929221],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:30Z","tags":{}},"n185958645":{"id":"n185958645","loc":[-85.636791,41.929363],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:30Z","tags":{}},"n185958647":{"id":"n185958647","loc":[-85.6375975,41.9314987],"version":"3","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:55Z","tags":{}},"n185958649":{"id":"n185958649","loc":[-85.637669,41.931667],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:30Z","tags":{}},"n185958651":{"id":"n185958651","loc":[-85.637728,41.931901],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:30Z","tags":{}},"n185958653":{"id":"n185958653","loc":[-85.637724,41.932187],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:30Z","tags":{}},"n185958656":{"id":"n185958656","loc":[-85.637732,41.932761],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:30Z","tags":{}},"n185958658":{"id":"n185958658","loc":[-85.637688,41.93398],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:30Z","tags":{}},"n185958660":{"id":"n185958660","loc":[-85.637685,41.934223],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:30Z","tags":{}},"n185958662":{"id":"n185958662","loc":[-85.6376468,41.9350232],"version":"3","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:55Z","tags":{}},"n185958664":{"id":"n185958664","loc":[-85.637564,41.937028],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:30Z","tags":{}},"n185958666":{"id":"n185958666","loc":[-85.637458,41.938197],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:30Z","tags":{}},"n185958668":{"id":"n185958668","loc":[-85.637424,41.938692],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:30Z","tags":{}},"n185964972":{"id":"n185964972","loc":[-85.6341901,41.9432732],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:46:00Z","tags":{}},"n185971361":{"id":"n185971361","loc":[-85.635762,41.938208],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:01Z","tags":{}},"n185971364":{"id":"n185971364","loc":[-85.635732,41.9384],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:01Z","tags":{}},"n185971366":{"id":"n185971366","loc":[-85.635736,41.938697],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:01Z","tags":{}},"n185972775":{"id":"n185972775","loc":[-85.635638,42.070357],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:36Z","tags":{}},"n185972777":{"id":"n185972777","loc":[-85.635724,42.069929],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:36Z","tags":{}},"n185972779":{"id":"n185972779","loc":[-85.635804,42.069248],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:36Z","tags":{}},"n185972781":{"id":"n185972781","loc":[-85.635869,42.068361],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:36Z","tags":{}},"n185972783":{"id":"n185972783","loc":[-85.635883,42.067582],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:36Z","tags":{}},"n185972785":{"id":"n185972785","loc":[-85.635875,42.067114],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:36Z","tags":{}},"n185972787":{"id":"n185972787","loc":[-85.635778,42.065359],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:36Z","tags":{}},"n185972788":{"id":"n185972788","loc":[-85.635728,42.063416],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:36Z","tags":{}},"n185972789":{"id":"n185972789","loc":[-85.635665,42.062491],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:36Z","tags":{}},"n185972790":{"id":"n185972790","loc":[-85.635617,42.061928],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:36Z","tags":{}},"n185972791":{"id":"n185972791","loc":[-85.635614,42.061898],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:36Z","tags":{}},"n185972793":{"id":"n185972793","loc":[-85.635379,42.060288],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:36Z","tags":{}},"n185972795":{"id":"n185972795","loc":[-85.635092,42.05799],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:36Z","tags":{}},"n185972797":{"id":"n185972797","loc":[-85.634843,42.055781],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:36Z","tags":{}},"n185972798":{"id":"n185972798","loc":[-85.634817,42.055549],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:36Z","tags":{}},"n185972800":{"id":"n185972800","loc":[-85.634708,42.053942],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:37Z","tags":{}},"n185972802":{"id":"n185972802","loc":[-85.634447,42.051809],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:37Z","tags":{}},"n185972805":{"id":"n185972805","loc":[-85.634241,42.04946],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:37Z","tags":{}},"n185972807":{"id":"n185972807","loc":[-85.633787,42.045926],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:37Z","tags":{}},"n185972809":{"id":"n185972809","loc":[-85.633811,42.045645],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:37Z","tags":{}},"n185972811":{"id":"n185972811","loc":[-85.63373,42.043626],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:37Z","tags":{}},"n185972813":{"id":"n185972813","loc":[-85.633698,42.042184],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:37Z","tags":{}},"n185972814":{"id":"n185972814","loc":[-85.63369,42.04181],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:37Z","tags":{}},"n185972815":{"id":"n185972815","loc":[-85.633681,42.040714],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:37Z","tags":{}},"n185972816":{"id":"n185972816","loc":[-85.633571,42.036322],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:37Z","tags":{}},"n185972817":{"id":"n185972817","loc":[-85.633537,42.034044],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:37Z","tags":{}},"n185972819":{"id":"n185972819","loc":[-85.633481,42.030785],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:37Z","tags":{}},"n185972821":{"id":"n185972821","loc":[-85.633452,42.027538],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:37Z","tags":{}},"n185972824":{"id":"n185972824","loc":[-85.633438,42.027427],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:37Z","tags":{}},"n185972826":{"id":"n185972826","loc":[-85.633342,42.022656],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:37Z","tags":{}},"n185972830":{"id":"n185972830","loc":[-85.63327,42.020724],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:37Z","tags":{}},"n185972832":{"id":"n185972832","loc":[-85.633198,42.019106],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:37Z","tags":{}},"n185972834":{"id":"n185972834","loc":[-85.633249,42.018363],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:37Z","tags":{}},"n185972835":{"id":"n185972835","loc":[-85.633139,42.012944],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:37Z","tags":{}},"n185972836":{"id":"n185972836","loc":[-85.63309,42.008284],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:38Z","tags":{}},"n185972839":{"id":"n185972839","loc":[-85.63298,42.00005],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:38Z","tags":{}},"n185972845":{"id":"n185972845","loc":[-85.6325369,41.9764959],"version":"3","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:17Z","tags":{}},"n185972847":{"id":"n185972847","loc":[-85.6327549,41.9750005],"version":"4","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:17Z","tags":{}},"n185972849":{"id":"n185972849","loc":[-85.6329374,41.9742527],"version":"4","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:17Z","tags":{}},"n185972851":{"id":"n185972851","loc":[-85.6331387,41.9736039],"version":"3","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:17Z","tags":{}},"n185972862":{"id":"n185972862","loc":[-85.6383589,41.9585023],"version":"4","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:17Z","tags":{}},"n185972868":{"id":"n185972868","loc":[-85.6393633,41.9551716],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:55Z","tags":{}},"n185972878":{"id":"n185972878","loc":[-85.639377,41.95335],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:39Z","tags":{}},"n185972882":{"id":"n185972882","loc":[-85.6389179,41.9516944],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:55Z","tags":{}},"n185972885":{"id":"n185972885","loc":[-85.6387444,41.9512105],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:55Z","tags":{}},"n185972891":{"id":"n185972891","loc":[-85.636421,41.946392],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:39Z","tags":{}},"n185972895":{"id":"n185972895","loc":[-85.635965,41.945809],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:39Z","tags":{}},"n185972897":{"id":"n185972897","loc":[-85.635683,41.945449],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:39Z","tags":{}},"n185972899":{"id":"n185972899","loc":[-85.635281,41.9450252],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:59Z","tags":{}},"n185972905":{"id":"n185972905","loc":[-85.6324428,41.9425743],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:46:00Z","tags":{}},"n185985217":{"id":"n185985217","loc":[-85.638243,41.943674],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:20Z","tags":{}},"n185985219":{"id":"n185985219","loc":[-85.638228,41.943747],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:20Z","tags":{}},"n185985221":{"id":"n185985221","loc":[-85.638163,41.943797],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:20Z","tags":{}},"n185985222":{"id":"n185985222","loc":[-85.638089,41.943832],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:20Z","tags":{}},"n185985223":{"id":"n185985223","loc":[-85.637969,41.943841],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:20Z","tags":{}},"n185985225":{"id":"n185985225","loc":[-85.637841,41.943833],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:20Z","tags":{}},"n185985227":{"id":"n185985227","loc":[-85.637601,41.943789],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:20Z","tags":{}},"n185985229":{"id":"n185985229","loc":[-85.637449,41.943754],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:20Z","tags":{}},"n185985231":{"id":"n185985231","loc":[-85.637342,41.943734],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:20Z","tags":{}},"n185985233":{"id":"n185985233","loc":[-85.637218,41.943703],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:21Z","tags":{}},"n185985235":{"id":"n185985235","loc":[-85.637151,41.943663],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:21Z","tags":{}},"n185985238":{"id":"n185985238","loc":[-85.637118,41.943615],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:21Z","tags":{}},"n185985240":{"id":"n185985240","loc":[-85.637073,41.943494],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:21Z","tags":{}},"n185990434":{"id":"n185990434","loc":[-85.6329028,41.9984292],"version":"3","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:18Z","tags":{"railway":"level_crossing"}},"n1475284023":{"id":"n1475284023","loc":[-85.6336163,41.9435806],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:47Z","tags":{"railway":"level_crossing"}},"n1475293222":{"id":"n1475293222","loc":[-85.6394045,41.953658],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:50Z","tags":{"railway":"level_crossing"}},"n1475293226":{"id":"n1475293226","loc":[-85.6364975,41.9638663],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:50Z","tags":{"railway":"level_crossing"}},"n1475293234":{"id":"n1475293234","loc":[-85.6390449,41.9565145],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:51Z","tags":{}},"n1475293240":{"id":"n1475293240","loc":[-85.636943,41.9473114],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:51Z","tags":{}},"n1475293252":{"id":"n1475293252","loc":[-85.6392115,41.9559003],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:51Z","tags":{}},"n1475293254":{"id":"n1475293254","loc":[-85.6348931,41.9685127],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:51Z","tags":{"railway":"level_crossing"}},"n1475293260":{"id":"n1475293260","loc":[-85.6375999,41.9485401],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:52Z","tags":{}},"n1475293261":{"id":"n1475293261","loc":[-85.6391256,41.9523817],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:52Z","tags":{"railway":"level_crossing"}},"n1475293264":{"id":"n1475293264","loc":[-85.6394155,41.9546493],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:52Z","tags":{"railway":"level_crossing"}},"n1819805614":{"id":"n1819805614","loc":[-85.6345652,41.9363097],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:25Z","tags":{}},"n1819805618":{"id":"n1819805618","loc":[-85.6295334,41.9426862],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:25Z","tags":{}},"n1819805622":{"id":"n1819805622","loc":[-85.6308208,41.9430773],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:25Z","tags":{}},"n1819805626":{"id":"n1819805626","loc":[-85.6274734,41.9406592],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:25Z","tags":{}},"n1819805629":{"id":"n1819805629","loc":[-85.6296943,41.9430533],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:25Z","tags":{}},"n1819805632":{"id":"n1819805632","loc":[-85.6340931,41.9354477],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:25Z","tags":{}},"n1819805636":{"id":"n1819805636","loc":[-85.6304131,41.9436598],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:25Z","tags":{}},"n1819805639":{"id":"n1819805639","loc":[-85.6304882,41.9426623],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:25Z","tags":{}},"n1819805641":{"id":"n1819805641","loc":[-85.6336103,41.9367487],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:26Z","tags":{}},"n1819805643":{"id":"n1819805643","loc":[-85.6300376,41.9418084],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:26Z","tags":{}},"n1819805645":{"id":"n1819805645","loc":[-85.6365286,41.9336679],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:26Z","tags":{}},"n1819805647":{"id":"n1819805647","loc":[-85.632016,41.9429221],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:26Z","tags":{}},"n1819805666":{"id":"n1819805666","loc":[-85.6314753,41.9442663],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:26Z","tags":{}},"n1819805669":{"id":"n1819805669","loc":[-85.6268619,41.9402203],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:26Z","tags":{}},"n1819805673":{"id":"n1819805673","loc":[-85.6296728,41.9412099],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:26Z","tags":{}},"n1819805676":{"id":"n1819805676","loc":[-85.6354557,41.932766],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:26Z","tags":{}},"n1819805680":{"id":"n1819805680","loc":[-85.632752,41.9431012],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:26Z","tags":{}},"n1819805683":{"id":"n1819805683","loc":[-85.631147,41.9432014],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:26Z","tags":{}},"n1819805687":{"id":"n1819805687","loc":[-85.635284,41.9343942],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:26Z","tags":{}},"n1819805690":{"id":"n1819805690","loc":[-85.6249736,41.9405794],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:26Z","tags":{}},"n1819805694":{"id":"n1819805694","loc":[-85.6294153,41.9417925],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:26Z","tags":{}},"n1819805698":{"id":"n1819805698","loc":[-85.6323486,41.9426986],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:26Z","tags":{}},"n1819805702":{"id":"n1819805702","loc":[-85.6340287,41.9373871],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:26Z","tags":{}},"n1819805707":{"id":"n1819805707","loc":[-85.6353698,41.9316326],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:26Z","tags":{}},"n1819805711":{"id":"n1819805711","loc":[-85.6284176,41.940356],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:26Z","tags":{}},"n1819805715":{"id":"n1819805715","loc":[-85.6291471,41.9412897],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:26Z","tags":{}},"n1819805718":{"id":"n1819805718","loc":[-85.6311105,41.943979],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:26Z","tags":{}},"n1819805722":{"id":"n1819805722","loc":[-85.6320868,41.9400128],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:26Z","tags":{}},"n1819805724":{"id":"n1819805724","loc":[-85.635166,41.9324627],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:26Z","tags":{}},"n1819805727":{"id":"n1819805727","loc":[-85.6344686,41.9350567],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:26Z","tags":{}},"n1819805728":{"id":"n1819805728","loc":[-85.6357132,41.9332369],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:26Z","tags":{}},"n1819805731":{"id":"n1819805731","loc":[-85.629984,41.9434444],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:26Z","tags":{}},"n1819805760":{"id":"n1819805760","loc":[-85.6330996,41.9378784],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:27Z","tags":{}},"n1819805766":{"id":"n1819805766","loc":[-85.625274,41.9411141],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:27Z","tags":{}},"n1819805770":{"id":"n1819805770","loc":[-85.6326321,41.9412173],"version":"2","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:28Z","tags":{}},"n1819805774":{"id":"n1819805774","loc":[-85.6347047,41.9312096],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:27Z","tags":{}},"n1819805777":{"id":"n1819805777","loc":[-85.6363569,41.9339552],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:27Z","tags":{}},"n1819805780":{"id":"n1819805780","loc":[-85.6327392,41.941926],"version":"2","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:28Z","tags":{}},"n1819805783":{"id":"n1819805783","loc":[-85.6357239,41.9338435],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:27Z","tags":{}},"n1819805786":{"id":"n1819805786","loc":[-85.6356595,41.9346576],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:27Z","tags":{}},"n1819805789":{"id":"n1819805789","loc":[-85.6316469,41.9436598],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:27Z","tags":{}},"n1819805792":{"id":"n1819805792","loc":[-85.6350587,41.9354557],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:27Z","tags":{}},"n1819805795":{"id":"n1819805795","loc":[-85.6360028,41.9322791],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:27Z","tags":{}},"n1819805798":{"id":"n1819805798","loc":[-85.63125,41.9443062],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:27Z","tags":{}},"n1819805802":{"id":"n1819805802","loc":[-85.6263362,41.9408109],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:27Z","tags":{}},"n1819805805":{"id":"n1819805805","loc":[-85.6315075,41.9438753],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:27Z","tags":{}},"n1819805808":{"id":"n1819805808","loc":[-85.6340008,41.9316051],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:27Z","tags":{}},"n1819805810":{"id":"n1819805810","loc":[-85.6345545,41.9320557],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:27Z","tags":{}},"n1819805812":{"id":"n1819805812","loc":[-85.6250809,41.9408587],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:27Z","tags":{}},"n1819805814":{"id":"n1819805814","loc":[-85.6257783,41.9400926],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:27Z","tags":{}},"n1819805834":{"id":"n1819805834","loc":[-85.6326408,41.9424363],"version":"2","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:28Z","tags":{}},"n1819805838":{"id":"n1819805838","loc":[-85.6365607,41.9334365],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:27Z","tags":{}},"n1819805842":{"id":"n1819805842","loc":[-85.6288253,41.9410343],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:27Z","tags":{}},"n1819805846":{"id":"n1819805846","loc":[-85.6279133,41.9402921],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:27Z","tags":{}},"n1819805849":{"id":"n1819805849","loc":[-85.6289433,41.9405156],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:28Z","tags":{}},"n1819805852":{"id":"n1819805852","loc":[-85.6313787,41.9439152],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:28Z","tags":{}},"n1819805858":{"id":"n1819805858","loc":[-85.6300805,41.9420398],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:28Z","tags":{}},"n1819805861":{"id":"n1819805861","loc":[-85.6321941,41.9396297],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:28Z","tags":{}},"n1819805864":{"id":"n1819805864","loc":[-85.6329129,41.9393903],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:28Z","tags":{}},"n1819805868":{"id":"n1819805868","loc":[-85.632001,41.9434922],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:28Z","tags":{}},"n1819805870":{"id":"n1819805870","loc":[-85.6314903,41.9431535],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:28Z","tags":{}},"n1819805873":{"id":"n1819805873","loc":[-85.6251667,41.9401166],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:28Z","tags":{}},"n1819805876":{"id":"n1819805876","loc":[-85.63287,41.939941],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:28Z","tags":{}},"n1819805878":{"id":"n1819805878","loc":[-85.6307886,41.9437317],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:28Z","tags":{}},"n1819805880":{"id":"n1819805880","loc":[-85.6321727,41.940348],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:28Z","tags":{}},"n1819805883":{"id":"n1819805883","loc":[-85.6265872,41.940113],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:28Z","tags":{}},"n1819805885":{"id":"n1819805885","loc":[-85.6268404,41.9406672],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:28Z","tags":{}},"n1819805887":{"id":"n1819805887","loc":[-85.6325267,41.9389035],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:28Z","tags":{}},"n1819805889":{"id":"n1819805889","loc":[-85.6364964,41.933189],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:28Z","tags":{}},"n1819805911":{"id":"n1819805911","loc":[-85.6248663,41.9401804],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:28Z","tags":{}},"n1819805922":{"id":"n1819805922","loc":[-85.633267,41.9387199],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:28Z","tags":{}},"n1819805925":{"id":"n1819805925","loc":[-85.6293402,41.9408428],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:08:28Z","tags":{}},"n1819848849":{"id":"n1819848849","loc":[-85.6464957,41.9695178],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:49Z","tags":{}},"n1819848850":{"id":"n1819848850","loc":[-85.6497642,41.9611355],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:49Z","tags":{}},"n1819848851":{"id":"n1819848851","loc":[-85.6480943,41.9624818],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:49Z","tags":{}},"n1819848854":{"id":"n1819848854","loc":[-85.6500362,41.9657367],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:49Z","tags":{}},"n1819848855":{"id":"n1819848855","loc":[-85.6493673,41.9783496],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:49Z","tags":{}},"n1819848856":{"id":"n1819848856","loc":[-85.6457409,41.9548007],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:49Z","tags":{}},"n1819848857":{"id":"n1819848857","loc":[-85.651313,41.9760426],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:49Z","tags":{}},"n1819848858":{"id":"n1819848858","loc":[-85.6495819,41.9784772],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:49Z","tags":{}},"n1819848859":{"id":"n1819848859","loc":[-85.6495105,41.9833722],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:49Z","tags":{}},"n1819848860":{"id":"n1819848860","loc":[-85.6405053,41.9492792],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:49Z","tags":{}},"n1819848863":{"id":"n1819848863","loc":[-85.6502293,41.9786826],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:49Z","tags":{}},"n1819848865":{"id":"n1819848865","loc":[-85.6406877,41.9495106],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:49Z","tags":{}},"n1819848870":{"id":"n1819848870","loc":[-85.6493136,41.9704611],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:49Z","tags":{}},"n1819848871":{"id":"n1819848871","loc":[-85.6372249,41.9441284],"version":"2","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:57Z","tags":{}},"n1819848873":{"id":"n1819848873","loc":[-85.6512379,41.9659441],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:49Z","tags":{}},"n1819848875":{"id":"n1819848875","loc":[-85.6508087,41.9650187],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:49Z","tags":{}},"n1819848877":{"id":"n1819848877","loc":[-85.6487166,41.9605352],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:49Z","tags":{}},"n1819848878":{"id":"n1819848878","loc":[-85.6506478,41.9760665],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:49Z","tags":{}},"n1819848879":{"id":"n1819848879","loc":[-85.651431,41.9758512],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:49Z","tags":{}},"n1819848886":{"id":"n1819848886","loc":[-85.6477617,41.9563945],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:49Z","tags":{}},"n1819848889":{"id":"n1819848889","loc":[-85.6497895,41.9832286],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:50Z","tags":{}},"n1819848892":{"id":"n1819848892","loc":[-85.6504868,41.9791931],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:50Z","tags":{}},"n1819848893":{"id":"n1819848893","loc":[-85.6498002,41.9615085],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:50Z","tags":{}},"n1819848894":{"id":"n1819848894","loc":[-85.6404302,41.9502846],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:50Z","tags":{}},"n1819848901":{"id":"n1819848901","loc":[-85.6354412,41.9439886],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:50Z","tags":{}},"n1819848903":{"id":"n1819848903","loc":[-85.6472145,41.9698528],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:50Z","tags":{}},"n1819848904":{"id":"n1819848904","loc":[-85.6401979,41.9486233],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:50Z","tags":{}},"n1819848905":{"id":"n1819848905","loc":[-85.6475042,41.963503],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:50Z","tags":{}},"n1819848909":{"id":"n1819848909","loc":[-85.6343405,41.94358],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:50Z","tags":{}},"n1819848914":{"id":"n1819848914","loc":[-85.6503474,41.9737773],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:50Z","tags":{}},"n1819848915":{"id":"n1819848915","loc":[-85.6389533,41.9470992],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:50Z","tags":{}},"n1819848916":{"id":"n1819848916","loc":[-85.6483625,41.9577907],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:50Z","tags":{}},"n1819848917":{"id":"n1819848917","loc":[-85.6484768,41.9617419],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:50Z","tags":{}},"n1819848918":{"id":"n1819848918","loc":[-85.644078,41.9545693],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:50Z","tags":{}},"n1819848919":{"id":"n1819848919","loc":[-85.6437169,41.9543041],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:50Z","tags":{}},"n1819848920":{"id":"n1819848920","loc":[-85.6478331,41.9627949],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:50Z","tags":{}},"n1819848922":{"id":"n1819848922","loc":[-85.6499144,41.9785889],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:50Z","tags":{}},"n1819848924":{"id":"n1819848924","loc":[-85.647633,41.9720066],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:51Z","tags":{}},"n1819848926":{"id":"n1819848926","loc":[-85.6487987,41.978868],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:51Z","tags":{}},"n1819848927":{"id":"n1819848927","loc":[-85.6495105,41.9730355],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:51Z","tags":{}},"n1819848928":{"id":"n1819848928","loc":[-85.648223,41.9829654],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:51Z","tags":{}},"n1819848929":{"id":"n1819848929","loc":[-85.6514846,41.9659122],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:51Z","tags":{}},"n1819848931":{"id":"n1819848931","loc":[-85.6498753,41.9731871],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:51Z","tags":{}},"n1819848932":{"id":"n1819848932","loc":[-85.640906,41.9508575],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:51Z","tags":{}},"n1819848933":{"id":"n1819848933","loc":[-85.649775,41.9799767],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:51Z","tags":{}},"n1819848934":{"id":"n1819848934","loc":[-85.6507014,41.9739927],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:51Z","tags":{}},"n1819848937":{"id":"n1819848937","loc":[-85.6479763,41.9840899],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:51Z","tags":{}},"n1819848938":{"id":"n1819848938","loc":[-85.6501113,41.9600884],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:51Z","tags":{}},"n1819848939":{"id":"n1819848939","loc":[-85.6389962,41.9478253],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:51Z","tags":{}},"n1819848941":{"id":"n1819848941","loc":[-85.637469,41.9445791],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:51Z","tags":{}},"n1819848942":{"id":"n1819848942","loc":[-85.6494569,41.9601682],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:51Z","tags":{}},"n1819848943":{"id":"n1819848943","loc":[-85.6368803,41.9439351],"version":"2","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:57Z","tags":{}},"n1819848945":{"id":"n1819848945","loc":[-85.6474398,41.9724213],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:51Z","tags":{}},"n1819848946":{"id":"n1819848946","loc":[-85.6382629,41.9463666],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:51Z","tags":{}},"n1819848948":{"id":"n1819848948","loc":[-85.6489633,41.9830771],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n1819848952":{"id":"n1819848952","loc":[-85.6488882,41.9600326],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n1819848953":{"id":"n1819848953","loc":[-85.6488094,41.9774324],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n1819848954":{"id":"n1819848954","loc":[-85.6491135,41.9600485],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n1819848955":{"id":"n1819848955","loc":[-85.6501435,41.9734583],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n1819848956":{"id":"n1819848956","loc":[-85.6495534,41.960958],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n1819848958":{"id":"n1819848958","loc":[-85.6474683,41.9561491],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n1819848959":{"id":"n1819848959","loc":[-85.6401083,41.9485451],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n1819848960":{"id":"n1819848960","loc":[-85.6481764,41.9678686],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n1819848961":{"id":"n1819848961","loc":[-85.6484017,41.967382],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n1819848962":{"id":"n1819848962","loc":[-85.6501328,41.959897],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n1819848964":{"id":"n1819848964","loc":[-85.6403695,41.9504586],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n1819848966":{"id":"n1819848966","loc":[-85.6398975,41.9491499],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n1819848967":{"id":"n1819848967","loc":[-85.6412455,41.9510187],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n1819848968":{"id":"n1819848968","loc":[-85.6482622,41.9619493],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n1819848969":{"id":"n1819848969","loc":[-85.6405841,41.9501474],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n1819848970":{"id":"n1819848970","loc":[-85.6478583,41.9703394],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n1819848971":{"id":"n1819848971","loc":[-85.6493388,41.9832845],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n1819848972":{"id":"n1819848972","loc":[-85.6485664,41.9829415],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n1819848974":{"id":"n1819848974","loc":[-85.6491457,41.9779887],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n1819848975":{"id":"n1819848975","loc":[-85.6468889,41.9697033],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n1819848976":{"id":"n1819848976","loc":[-85.6452726,41.9546072],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n1819848977":{"id":"n1819848977","loc":[-85.6448435,41.9546072],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:53Z","tags":{}},"n1819848979":{"id":"n1819848979","loc":[-85.6485342,41.9763138],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:53Z","tags":{}},"n1819848980":{"id":"n1819848980","loc":[-85.6495282,41.9664087],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:53Z","tags":{}},"n1819848986":{"id":"n1819848986","loc":[-85.6486307,41.9603278],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:53Z","tags":{}},"n1819848987":{"id":"n1819848987","loc":[-85.6492278,41.9791871],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:53Z","tags":{}},"n1819848990":{"id":"n1819848990","loc":[-85.6501934,41.9800724],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:53Z","tags":{}},"n1819848992":{"id":"n1819848992","loc":[-85.6482445,41.9819685],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:53Z","tags":{}},"n1819848993":{"id":"n1819848993","loc":[-85.6481871,41.9704451],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:53Z","tags":{}},"n1819848994":{"id":"n1819848994","loc":[-85.6371364,41.9457602],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:53Z","tags":{}},"n1819848996":{"id":"n1819848996","loc":[-85.6500362,41.9801023],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:53Z","tags":{}},"n1819849000":{"id":"n1819849000","loc":[-85.639007,41.9485914],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:53Z","tags":{}},"n1819849001":{"id":"n1819849001","loc":[-85.6488882,41.9669253],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:53Z","tags":{}},"n1819849002":{"id":"n1819849002","loc":[-85.6484698,41.9565062],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:53Z","tags":{}},"n1819849004":{"id":"n1819849004","loc":[-85.6510769,41.9761064],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:53Z","tags":{}},"n1819849005":{"id":"n1819849005","loc":[-85.6503581,41.9799029],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:53Z","tags":{}},"n1819849006":{"id":"n1819849006","loc":[-85.6489381,41.9703893],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:53Z","tags":{}},"n1819849008":{"id":"n1819849008","loc":[-85.6497457,41.9833588],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:53Z","tags":{}},"n1819849011":{"id":"n1819849011","loc":[-85.6497358,41.9717593],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:53Z","tags":{}},"n1819849012":{"id":"n1819849012","loc":[-85.6494676,41.9796796],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:53Z","tags":{}},"n1819849019":{"id":"n1819849019","loc":[-85.6486093,41.9771034],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:54Z","tags":{}},"n1819849021":{"id":"n1819849021","loc":[-85.6504546,41.9796556],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:54Z","tags":{}},"n1819849022":{"id":"n1819849022","loc":[-85.6371294,41.9454154],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:54Z","tags":{}},"n1819849023":{"id":"n1819849023","loc":[-85.6503436,41.9759249],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:54Z","tags":{}},"n1819849025":{"id":"n1819849025","loc":[-85.6462382,41.9693822],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:54Z","tags":{}},"n1819849026":{"id":"n1819849026","loc":[-85.6497573,41.983093],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:54Z","tags":{}},"n1819849028":{"id":"n1819849028","loc":[-85.6497465,41.9602799],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:54Z","tags":{}},"n1819849029":{"id":"n1819849029","loc":[-85.6374728,41.9460698],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:54Z","tags":{}},"n1819849030":{"id":"n1819849030","loc":[-85.6486592,41.9566039],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:54Z","tags":{}},"n1819849031":{"id":"n1819849031","loc":[-85.6515989,41.9654993],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:54Z","tags":{}},"n1819849032":{"id":"n1819849032","loc":[-85.6387028,41.9482658],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:54Z","tags":{}},"n1819849033":{"id":"n1819849033","loc":[-85.6464742,41.9688398],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:54Z","tags":{}},"n1819849034":{"id":"n1819849034","loc":[-85.6495212,41.9589236],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:54Z","tags":{}},"n1819849035":{"id":"n1819849035","loc":[-85.6490599,41.9790096],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:54Z","tags":{}},"n1819849036":{"id":"n1819849036","loc":[-85.6489918,41.9800724],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:54Z","tags":{}},"n1819849038":{"id":"n1819849038","loc":[-85.6499182,41.9659042],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:54Z","tags":{}},"n1819849040":{"id":"n1819849040","loc":[-85.639758,41.9490143],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:54Z","tags":{}},"n1819849041":{"id":"n1819849041","loc":[-85.6514846,41.9755241],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:54Z","tags":{}},"n1819849042":{"id":"n1819849042","loc":[-85.6436633,41.9540647],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:54Z","tags":{}},"n1819849045":{"id":"n1819849045","loc":[-85.6475541,41.9726387],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849046":{"id":"n1819849046","loc":[-85.6488308,41.9718331],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849047":{"id":"n1819849047","loc":[-85.6377694,41.9460953],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849048":{"id":"n1819849048","loc":[-85.6490706,41.9804452],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849049":{"id":"n1819849049","loc":[-85.6485449,41.9766248],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849051":{"id":"n1819849051","loc":[-85.6483625,41.9790256],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849052":{"id":"n1819849052","loc":[-85.6490706,41.9585167],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849053":{"id":"n1819849053","loc":[-85.6425008,41.9522874],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849054":{"id":"n1819849054","loc":[-85.6475793,41.9632158],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849055":{"id":"n1819849055","loc":[-85.6408631,41.9499399],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849056":{"id":"n1819849056","loc":[-85.6483373,41.9814681],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849057":{"id":"n1819849057","loc":[-85.6313548,41.9442876],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849058":{"id":"n1819849058","loc":[-85.6432663,41.9529796],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849059":{"id":"n1819849059","loc":[-85.6487128,41.9582873],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849060":{"id":"n1819849060","loc":[-85.6482338,41.9817612],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849062":{"id":"n1819849062","loc":[-85.6485664,41.9788661],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849063":{"id":"n1819849063","loc":[-85.6373081,41.9448824],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849064":{"id":"n1819849064","loc":[-85.6472215,41.9557582],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849065":{"id":"n1819849065","loc":[-85.6348984,41.9440414],"version":"2","changeset":"14893390","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:53:38Z","tags":{}},"n1819849066":{"id":"n1819849066","loc":[-85.6501972,41.9647315],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849067":{"id":"n1819849067","loc":[-85.6489741,41.9808281],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849068":{"id":"n1819849068","loc":[-85.6420111,41.9515034],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849069":{"id":"n1819849069","loc":[-85.6397972,41.9488882],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849070":{"id":"n1819849070","loc":[-85.6499718,41.9593465],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849071":{"id":"n1819849071","loc":[-85.6486844,41.9811311],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849072":{"id":"n1819849072","loc":[-85.6390392,41.9474663],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849074":{"id":"n1819849074","loc":[-85.6495642,41.9616362],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849075":{"id":"n1819849075","loc":[-85.6483518,41.9791931],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849076":{"id":"n1819849076","loc":[-85.6478974,41.9833104],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:56Z","tags":{}},"n1819849077":{"id":"n1819849077","loc":[-85.640155,41.948719],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:56Z","tags":{}},"n1819849078":{"id":"n1819849078","loc":[-85.6399366,41.9487845],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:56Z","tags":{}},"n1819849079":{"id":"n1819849079","loc":[-85.6492959,41.9825348],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:56Z","tags":{}},"n1819849080":{"id":"n1819849080","loc":[-85.6505083,41.9648352],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:56Z","tags":{}},"n1819849081":{"id":"n1819849081","loc":[-85.6492959,41.9645241],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:56Z","tags":{}},"n1819849082":{"id":"n1819849082","loc":[-85.6402049,41.9491835],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:56Z","tags":{}},"n1819849083":{"id":"n1819849083","loc":[-85.6495175,41.9826963],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:56Z","tags":{}},"n1819849084":{"id":"n1819849084","loc":[-85.6480836,41.9728361],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:56Z","tags":{}},"n1819849085":{"id":"n1819849085","loc":[-85.6374349,41.9443425],"version":"2","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:57Z","tags":{}},"n1819849086":{"id":"n1819849086","loc":[-85.6478331,41.9681238],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:56Z","tags":{}},"n1819849089":{"id":"n1819849089","loc":[-85.639368,41.9486169],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:56Z","tags":{}},"n1819849092":{"id":"n1819849092","loc":[-85.6503581,41.9788022],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:56Z","tags":{}},"n1819849093":{"id":"n1819849093","loc":[-85.64862,41.9568014],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:56Z","tags":{}},"n1819849094":{"id":"n1819849094","loc":[-85.6496999,41.9828877],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:56Z","tags":{}},"n1819849095":{"id":"n1819849095","loc":[-85.647472,41.972198],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:56Z","tags":{}},"n1819849096":{"id":"n1819849096","loc":[-85.6485771,41.9644523],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:56Z","tags":{}},"n1819849097":{"id":"n1819849097","loc":[-85.6388353,41.9480488],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:56Z","tags":{}},"n1819849099":{"id":"n1819849099","loc":[-85.6472752,41.9683312],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:56Z","tags":{}},"n1819849104":{"id":"n1819849104","loc":[-85.6479548,41.9836035],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:57Z","tags":{}},"n1819849105":{"id":"n1819849105","loc":[-85.6462489,41.9691668],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:57Z","tags":{}},"n1819849107":{"id":"n1819849107","loc":[-85.6511912,41.9746328],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:57Z","tags":{}},"n1819849108":{"id":"n1819849108","loc":[-85.6498646,41.9714881],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:57Z","tags":{}},"n1819849111":{"id":"n1819849111","loc":[-85.6488239,41.961684],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:57Z","tags":{}},"n1819849112":{"id":"n1819849112","loc":[-85.6469356,41.9553812],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:57Z","tags":{}},"n1819849114":{"id":"n1819849114","loc":[-85.6479548,41.9640853],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:57Z","tags":{}},"n1819849119":{"id":"n1819849119","loc":[-85.6491565,41.961692],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:57Z","tags":{}},"n1819849121":{"id":"n1819849121","loc":[-85.651667,41.9656728],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:57Z","tags":{}},"n1819849124":{"id":"n1819849124","loc":[-85.6388423,41.9484414],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:57Z","tags":{}},"n1819849126":{"id":"n1819849126","loc":[-85.6371686,41.9450978],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:57Z","tags":{}},"n1819849127":{"id":"n1819849127","loc":[-85.6502615,41.9656728],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:57Z","tags":{}},"n1819849129":{"id":"n1819849129","loc":[-85.6498501,41.9613031],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:57Z","tags":{}},"n1819849131":{"id":"n1819849131","loc":[-85.6513881,41.9653298],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:57Z","tags":{}},"n1819849133":{"id":"n1819849133","loc":[-85.639883,41.9485291],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:57Z","tags":{}},"n1819849139":{"id":"n1819849139","loc":[-85.6508693,41.9658264],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:57Z","tags":{}},"n1819849140":{"id":"n1819849140","loc":[-85.6486806,41.9761642],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:57Z","tags":{}},"n1819849141":{"id":"n1819849141","loc":[-85.6483159,41.9717613],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:57Z","tags":{}},"n1819849144":{"id":"n1819849144","loc":[-85.6443714,41.9546232],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849146":{"id":"n1819849146","loc":[-85.641775,41.9513359],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849147":{"id":"n1819849147","loc":[-85.6495604,41.9757335],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849148":{"id":"n1819849148","loc":[-85.6465671,41.9551678],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849150":{"id":"n1819849150","loc":[-85.6485127,41.9794084],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849151":{"id":"n1819849151","loc":[-85.6499144,41.9757096],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849152":{"id":"n1819849152","loc":[-85.6433736,41.9531072],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849154":{"id":"n1819849154","loc":[-85.6489741,41.9607426],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849155":{"id":"n1819849155","loc":[-85.640627,41.9507697],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849156":{"id":"n1819849156","loc":[-85.6509659,41.9743058],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849157":{"id":"n1819849157","loc":[-85.6486844,41.9704431],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849158":{"id":"n1819849158","loc":[-85.6498538,41.9711132],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849159":{"id":"n1819849159","loc":[-85.6358937,41.943719],"version":"2","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:57Z","tags":{}},"n1819849160":{"id":"n1819849160","loc":[-85.6497358,41.9707702],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849161":{"id":"n1819849161","loc":[-85.6480476,41.9564842],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849162":{"id":"n1819849162","loc":[-85.6482982,41.9574556],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849163":{"id":"n1819849163","loc":[-85.6501757,41.9757794],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849164":{"id":"n1819849164","loc":[-85.6372973,41.9459916],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849165":{"id":"n1819849165","loc":[-85.6513773,41.9750775],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849166":{"id":"n1819849166","loc":[-85.6436418,41.9537455],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849167":{"id":"n1819849167","loc":[-85.6483625,41.9571524],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849169":{"id":"n1819849169","loc":[-85.647751,41.9727962],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849170":{"id":"n1819849170","loc":[-85.6504546,41.9656808],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849171":{"id":"n1819849171","loc":[-85.6479977,41.971839],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849172":{"id":"n1819849172","loc":[-85.6482767,41.9642449],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849174":{"id":"n1819849174","loc":[-85.6414317,41.9512086],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849176":{"id":"n1819849176","loc":[-85.6469034,41.9685287],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:59Z","tags":{}},"n1819849179":{"id":"n1819849179","loc":[-85.6408631,41.9497564],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:59Z","tags":{}},"n1819849182":{"id":"n1819849182","loc":[-85.6476721,41.96384],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:59Z","tags":{}},"n1819849183":{"id":"n1819849183","loc":[-85.6479725,41.983111],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:59Z","tags":{}},"n1819849184":{"id":"n1819849184","loc":[-85.640788,41.9500516],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:59Z","tags":{}},"n1819849185":{"id":"n1819849185","loc":[-85.6427798,41.9528778],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:59Z","tags":{}},"n1819849186":{"id":"n1819849186","loc":[-85.6435308,41.9534124],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:59Z","tags":{}},"n1819849187":{"id":"n1819849187","loc":[-85.6483733,41.9821998],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:59Z","tags":{}},"n1819849189":{"id":"n1819849189","loc":[-85.6351752,41.9440796],"version":"2","changeset":"14893390","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:53:38Z","tags":{}},"n1819849191":{"id":"n1819849191","loc":[-85.6487021,41.9601463],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:59Z","tags":{}},"n1819849192":{"id":"n1819849192","loc":[-85.6363811,41.9437605],"version":"2","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:57Z","tags":{}},"n1819849193":{"id":"n1819849193","loc":[-85.6490883,41.9759728],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:59Z","tags":{}},"n1819849194":{"id":"n1819849194","loc":[-85.6423292,41.9520081],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:59Z","tags":{}},"n1819849195":{"id":"n1819849195","loc":[-85.6500003,41.960242],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:59Z","tags":{}},"n1819849196":{"id":"n1819849196","loc":[-85.6385778,41.9466443],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:59Z","tags":{}},"n1819849197":{"id":"n1819849197","loc":[-85.6494032,41.9718789],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:59Z","tags":{}},"n1819849198":{"id":"n1819849198","loc":[-85.6404339,41.9506501],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:59Z","tags":{}},"n1819849199":{"id":"n1819849199","loc":[-85.6426226,41.9527083],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:59Z","tags":{}},"n1819849200":{"id":"n1819849200","loc":[-85.6439101,41.9545035],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:59Z","tags":{}},"n1819849201":{"id":"n1819849201","loc":[-85.6516563,41.9657845],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:48:00Z","tags":{}},"n1819849202":{"id":"n1819849202","loc":[-85.6473395,41.9699585],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:48:00Z","tags":{}},"n1819858501":{"id":"n1819858501","loc":[-85.6361263,41.9437126],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:54Z","tags":{}},"n1819858503":{"id":"n1819858503","loc":[-85.6350068,41.944034],"version":"2","changeset":"14893390","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:53:38Z","tags":{}},"n1819858513":{"id":"n1819858513","loc":[-85.6371402,41.9453282],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:54Z","tags":{}},"n1819858518":{"id":"n1819858518","loc":[-85.6348713,41.9432923],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:54Z","tags":{}},"n1819858523":{"id":"n1819858523","loc":[-85.6357047,41.943799],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:55Z","tags":{}},"n1819858526":{"id":"n1819858526","loc":[-85.6349947,41.9435756],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:55Z","tags":{}},"n1819858531":{"id":"n1819858531","loc":[-85.6350376,41.943827],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:55Z","tags":{}},"n1820937508":{"id":"n1820937508","loc":[-85.1026013,42.0881722],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:57Z","tags":{}},"n1820937509":{"id":"n1820937509","loc":[-85.0558088,42.102493],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:57Z","tags":{}},"n1820937511":{"id":"n1820937511","loc":[-85.3030116,41.9724451],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:57Z","tags":{}},"n1820937513":{"id":"n1820937513","loc":[-85.0353221,42.1027398],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:57Z","tags":{}},"n1820937514":{"id":"n1820937514","loc":[-85.0835468,42.1015469],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:57Z","tags":{}},"n1820937515":{"id":"n1820937515","loc":[-85.2421298,42.0106305],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:57Z","tags":{}},"n1820937517":{"id":"n1820937517","loc":[-85.0090632,42.0910452],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:57Z","tags":{}},"n1820937518":{"id":"n1820937518","loc":[-85.086626,42.0948838],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:57Z","tags":{}},"n1820937520":{"id":"n1820937520","loc":[-85.2552039,42.0015448],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:58Z","tags":{}},"n1820937521":{"id":"n1820937521","loc":[-85.3739614,41.9969917],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:58Z","tags":{}},"n1820937522":{"id":"n1820937522","loc":[-85.4831166,41.993898],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:58Z","tags":{}},"n1820937523":{"id":"n1820937523","loc":[-85.0341084,42.0977657],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:58Z","tags":{}},"n1820937524":{"id":"n1820937524","loc":[-85.3272802,41.9710333],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:58Z","tags":{}},"n1820937525":{"id":"n1820937525","loc":[-85.2125568,42.0414521],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:58Z","tags":{}},"n1820937526":{"id":"n1820937526","loc":[-85.3798022,41.9992458],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:58Z","tags":{}},"n1820937527":{"id":"n1820937527","loc":[-85.2652021,41.999768],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:58Z","tags":{}},"n1820937528":{"id":"n1820937528","loc":[-85.3852739,42.0004896],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:58Z","tags":{}},"n1820937529":{"id":"n1820937529","loc":[-85.3911919,42.0030513],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:58Z","tags":{}},"n1820937530":{"id":"n1820937530","loc":[-85.5440349,41.9717109],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:58Z","tags":{}},"n1820937531":{"id":"n1820937531","loc":[-85.2790155,41.9911764],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:58Z","tags":{}},"n1820937532":{"id":"n1820937532","loc":[-85.4723277,41.9950518],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:58Z","tags":{}},"n1820937533":{"id":"n1820937533","loc":[-85.5690546,41.9653931],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:58Z","tags":{}},"n1820937535":{"id":"n1820937535","loc":[-85.5674882,41.9649623],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:58Z","tags":{}},"n1820937536":{"id":"n1820937536","loc":[-85.6362815,41.9189165],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:58Z","tags":{}},"n1820937537":{"id":"n1820937537","loc":[-85.5659003,41.963638],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:58Z","tags":{}},"n1820937539":{"id":"n1820937539","loc":[-85.6391353,41.9122262],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:59Z","tags":{}},"n1820937540":{"id":"n1820937540","loc":[-85.4834385,41.9894803],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:59Z","tags":{}},"n1820937541":{"id":"n1820937541","loc":[-85.6399078,41.9160744],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:59Z","tags":{}},"n1820937542":{"id":"n1820937542","loc":[-85.632874,41.941031],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:59Z","tags":{}},"n1820937543":{"id":"n1820937543","loc":[-85.1307591,42.0726961],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:59Z","tags":{}},"n1820937544":{"id":"n1820937544","loc":[-85.6444397,41.9128378],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:59Z","tags":{}},"n1820937545":{"id":"n1820937545","loc":[-85.6197204,41.9420365],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:59Z","tags":{}},"n1820937546":{"id":"n1820937546","loc":[-85.1164857,42.0864631],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:59Z","tags":{}},"n1820937547":{"id":"n1820937547","loc":[-85.6476111,41.9142222],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:59Z","tags":{}},"n1820937548":{"id":"n1820937548","loc":[-85.2915747,41.9774223],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:59Z","tags":{}},"n1820937549":{"id":"n1820937549","loc":[-85.6430192,41.9102461],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:59Z","tags":{}},"n1820937550":{"id":"n1820937550","loc":[-85.1597495,42.0639017],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:59Z","tags":{}},"n1820937551":{"id":"n1820937551","loc":[-85.5504079,41.9701793],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:59Z","tags":{}},"n1820937553":{"id":"n1820937553","loc":[-85.2781317,41.9948951],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:59Z","tags":{}},"n1820937555":{"id":"n1820937555","loc":[-85.3724594,41.997518],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:59Z","tags":{}},"n1820937556":{"id":"n1820937556","loc":[-85.5629434,41.9665155],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:59Z","tags":{}},"n1820937557":{"id":"n1820937557","loc":[-85.3791971,41.9990808],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:59Z","tags":{}},"n1820937558":{"id":"n1820937558","loc":[-85.001891,42.0878843],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:55:59Z","tags":{}},"n1820937560":{"id":"n1820937560","loc":[-85.3140838,41.9709056],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:00Z","tags":{}},"n1820937561":{"id":"n1820937561","loc":[-85.2468032,42.0146987],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:00Z","tags":{}},"n1820937563":{"id":"n1820937563","loc":[-85.0877378,42.097255],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:00Z","tags":{}},"n1820937564":{"id":"n1820937564","loc":[-85.2442498,42.0150654],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:00Z","tags":{}},"n1820937566":{"id":"n1820937566","loc":[-85.3108973,41.9701478],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:00Z","tags":{}},"n1820937568":{"id":"n1820937568","loc":[-85.0344584,42.1016572],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:00Z","tags":{}},"n1820937569":{"id":"n1820937569","loc":[-85.2331025,42.0297387],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:00Z","tags":{}},"n1820937570":{"id":"n1820937570","loc":[-85.5058446,41.9746996],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:00Z","tags":{}},"n1820937571":{"id":"n1820937571","loc":[-85.5622739,41.9676427],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:00Z","tags":{}},"n1820937572":{"id":"n1820937572","loc":[-85.2792687,41.9890337],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:00Z","tags":{}},"n1820937574":{"id":"n1820937574","loc":[-84.9909302,42.08695],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:00Z","tags":{}},"n1820937575":{"id":"n1820937575","loc":[-85.6218233,41.9418609],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:00Z","tags":{}},"n1820937576":{"id":"n1820937576","loc":[-85.3577437,41.9931062],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:00Z","tags":{}},"n1820937577":{"id":"n1820937577","loc":[-85.639028,41.9165853],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:00Z","tags":{}},"n1820937578":{"id":"n1820937578","loc":[-84.9956576,42.0865348],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:00Z","tags":{}},"n1820937579":{"id":"n1820937579","loc":[-85.4828376,41.990198],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:00Z","tags":{}},"n1820937580":{"id":"n1820937580","loc":[-85.3244478,41.9720543],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:00Z","tags":{}},"n1820937582":{"id":"n1820937582","loc":[-85.0517479,42.1035159],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:00Z","tags":{}},"n1820937583":{"id":"n1820937583","loc":[-85.225646,42.0338025],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:00Z","tags":{}},"n1820937584":{"id":"n1820937584","loc":[-84.9941019,42.0862163],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:00Z","tags":{}},"n1820937586":{"id":"n1820937586","loc":[-85.1051762,42.0879452],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:00Z","tags":{}},"n1820937587":{"id":"n1820937587","loc":[-85.1245203,42.0753162],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:00Z","tags":{}},"n1820937588":{"id":"n1820937588","loc":[-85.3250808,41.9719506],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:00Z","tags":{}},"n1820937589":{"id":"n1820937589","loc":[-85.2720109,41.997933],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:00Z","tags":{}},"n1820937590":{"id":"n1820937590","loc":[-85.2556653,42.0027248],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:01Z","tags":{}},"n1820937591":{"id":"n1820937591","loc":[-85.0872483,42.0943544],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:01Z","tags":{}},"n1820937592":{"id":"n1820937592","loc":[-85.2778353,41.9955023],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:01Z","tags":{}},"n1820937593":{"id":"n1820937593","loc":[-85.2984733,41.9735538],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:01Z","tags":{}},"n1820937594":{"id":"n1820937594","loc":[-85.101578,42.0889552],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:01Z","tags":{}},"n1820937595":{"id":"n1820937595","loc":[-85.3888745,42.0016959],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:01Z","tags":{}},"n1820937596":{"id":"n1820937596","loc":[-84.9903508,42.0870654],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:01Z","tags":{}},"n1820937597":{"id":"n1820937597","loc":[-85.6405558,41.9146261],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:01Z","tags":{}},"n1820937598":{"id":"n1820937598","loc":[-85.6460704,41.9141311],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:01Z","tags":{}},"n1820937599":{"id":"n1820937599","loc":[-85.0377468,42.1037428],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:01Z","tags":{}},"n1820937600":{"id":"n1820937600","loc":[-85.2298345,42.0312899],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:01Z","tags":{}},"n1820937601":{"id":"n1820937601","loc":[-85.1080958,42.0861964],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:01Z","tags":{}},"n1820937602":{"id":"n1820937602","loc":[-85.6325307,41.9402329],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:01Z","tags":{}},"n1820937603":{"id":"n1820937603","loc":[-85.1165984,42.0832184],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:01Z","tags":{}},"n1820937604":{"id":"n1820937604","loc":[-85.6354446,41.9190602],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:01Z","tags":{}},"n1820937605":{"id":"n1820937605","loc":[-85.1114592,42.0862959],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:01Z","tags":{}},"n1820937606":{"id":"n1820937606","loc":[-85.0858763,42.1001646],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:01Z","tags":{}},"n1820937607":{"id":"n1820937607","loc":[-85.0472083,42.1015151],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:01Z","tags":{}},"n1820937608":{"id":"n1820937608","loc":[-85.0802477,42.1027609],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:01Z","tags":{}},"n1820937610":{"id":"n1820937610","loc":[-85.0924585,42.0928564],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:01Z","tags":{}},"n1820937611":{"id":"n1820937611","loc":[-85.0329617,42.09827],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:01Z","tags":{}},"n1820937612":{"id":"n1820937612","loc":[-85.2814617,41.993465],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:01Z","tags":{}},"n1820937613":{"id":"n1820937613","loc":[-85.3097708,41.9700282],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:01Z","tags":{}},"n1820937614":{"id":"n1820937614","loc":[-85.2809427,41.993695],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:01Z","tags":{}},"n1820937615":{"id":"n1820937615","loc":[-85.0583233,42.1026494],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:01Z","tags":{}},"n1820937617":{"id":"n1820937617","loc":[-85.2801592,41.9840021],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:02Z","tags":{}},"n1820937619":{"id":"n1820937619","loc":[-85.1064154,42.0863449],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:02Z","tags":{}},"n1820937620":{"id":"n1820937620","loc":[-85.0423173,42.1014662],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:02Z","tags":{}},"n1820937621":{"id":"n1820937621","loc":[-85.2168913,42.0398107],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:02Z","tags":{}},"n1820937622":{"id":"n1820937622","loc":[-85.2798481,41.9833401],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:02Z","tags":{}},"n1820937623":{"id":"n1820937623","loc":[-85.0575468,42.1028672],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:02Z","tags":{}},"n1820937625":{"id":"n1820937625","loc":[-85.0130369,42.0893067],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:02Z","tags":{}},"n1820937626":{"id":"n1820937626","loc":[-85.0346985,42.1018256],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:02Z","tags":{}},"n1820937627":{"id":"n1820937627","loc":[-85.2231569,42.0372768],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:02Z","tags":{}},"n1820937628":{"id":"n1820937628","loc":[-85.2956195,41.9732268],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:02Z","tags":{}},"n1820937629":{"id":"n1820937629","loc":[-85.1052312,42.086893],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:02Z","tags":{}},"n1820937630":{"id":"n1820937630","loc":[-85.4813356,41.9958436],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:02Z","tags":{}},"n1820937631":{"id":"n1820937631","loc":[-85.0961599,42.0914672],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:02Z","tags":{}},"n1820937632":{"id":"n1820937632","loc":[-85.308419,41.9704749],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:02Z","tags":{}},"n1820937633":{"id":"n1820937633","loc":[-85.295952,41.9715119],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:02Z","tags":{}},"n1820937634":{"id":"n1820937634","loc":[-85.3310933,41.9703923],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:02Z","tags":{}},"n1820937635":{"id":"n1820937635","loc":[-85.2940745,41.9739686],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:02Z","tags":{}},"n1820937636":{"id":"n1820937636","loc":[-85.3803343,42.000484],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:02Z","tags":{}},"n1820937637":{"id":"n1820937637","loc":[-85.1174231,42.0845533],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:02Z","tags":{}},"n1820937638":{"id":"n1820937638","loc":[-85.0095836,42.089839],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937639":{"id":"n1820937639","loc":[-85.3179354,41.9705866],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937640":{"id":"n1820937640","loc":[-85.257708,42.0001189],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937641":{"id":"n1820937641","loc":[-85.2563522,42.0002771],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937642":{"id":"n1820937642","loc":[-85.3181929,41.970419],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937643":{"id":"n1820937643","loc":[-85.2911884,41.9757154],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937644":{"id":"n1820937644","loc":[-85.2714423,41.9975862],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937645":{"id":"n1820937645","loc":[-85.0193669,42.089888],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937646":{"id":"n1820937646","loc":[-85.3889818,42.0039921],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937647":{"id":"n1820937647","loc":[-85.3408093,41.9853965],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937648":{"id":"n1820937648","loc":[-85.1258091,42.0748332],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937649":{"id":"n1820937649","loc":[-85.5722561,41.962782],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937650":{"id":"n1820937650","loc":[-85.3266902,41.9721819],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937651":{"id":"n1820937651","loc":[-85.1473255,42.065192],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937652":{"id":"n1820937652","loc":[-85.1462526,42.0655106],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937653":{"id":"n1820937653","loc":[-85.4641051,42.0013929],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937654":{"id":"n1820937654","loc":[-85.5620379,41.9700677],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937655":{"id":"n1820937655","loc":[-85.3226025,41.971121],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937656":{"id":"n1820937656","loc":[-85.0200965,42.0899516],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937657":{"id":"n1820937657","loc":[-85.0624714,42.1044711],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937658":{"id":"n1820937658","loc":[-85.5649562,41.9637178],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937659":{"id":"n1820937659","loc":[-85.2360315,42.0253315],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937660":{"id":"n1820937660","loc":[-85.3881449,41.9994475],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937661":{"id":"n1820937661","loc":[-85.5032911,41.976263],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937662":{"id":"n1820937662","loc":[-85.481297,41.9871414],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937663":{"id":"n1820937663","loc":[-85.1167056,42.0841898],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937664":{"id":"n1820937664","loc":[-85.2891714,41.9787223],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937665":{"id":"n1820937665","loc":[-85.4393429,42.0058736],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937666":{"id":"n1820937666","loc":[-85.0077007,42.0895762],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937667":{"id":"n1820937667","loc":[-85.2736202,41.9979171],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937668":{"id":"n1820937668","loc":[-84.9935332,42.0859296],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:03Z","tags":{}},"n1820937669":{"id":"n1820937669","loc":[-85.0622769,42.1046713],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:04Z","tags":{}},"n1820937670":{"id":"n1820937670","loc":[-85.2309031,42.0311249],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:04Z","tags":{}},"n1820937671":{"id":"n1820937671","loc":[-85.0343726,42.10069],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:04Z","tags":{}},"n1820937672":{"id":"n1820937672","loc":[-85.0596551,42.1048612],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:04Z","tags":{}},"n1820937673":{"id":"n1820937673","loc":[-85.1338597,42.0707449],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:04Z","tags":{}},"n1820937674":{"id":"n1820937674","loc":[-85.3117663,41.9689194],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:04Z","tags":{}},"n1820937675":{"id":"n1820937675","loc":[-85.0705649,42.1057499],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:04Z","tags":{}},"n1820937676":{"id":"n1820937676","loc":[-85.2441425,42.0180944],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:04Z","tags":{}},"n1820937677":{"id":"n1820937677","loc":[-85.1171174,42.0862692],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:04Z","tags":{}},"n1820937678":{"id":"n1820937678","loc":[-85.0346824,42.1005519],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:04Z","tags":{}},"n1820937680":{"id":"n1820937680","loc":[-85.2389927,42.0229245],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:04Z","tags":{}},"n1820937681":{"id":"n1820937681","loc":[-85.0834892,42.1018642],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:04Z","tags":{}},"n1820937682":{"id":"n1820937682","loc":[-85.0619443,42.1049459],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:04Z","tags":{}},"n1820937683":{"id":"n1820937683","loc":[-85.2845366,41.9811868],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:04Z","tags":{}},"n1820937684":{"id":"n1820937684","loc":[-85.210411,42.0394123],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:04Z","tags":{}},"n1820937685":{"id":"n1820937685","loc":[-85.4377383,42.0055942],"version":"2","changeset":"12524188","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-28T14:51:01Z","tags":{}},"n1820937686":{"id":"n1820937686","loc":[-85.2882058,41.9789138],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:04Z","tags":{}},"n1820937687":{"id":"n1820937687","loc":[-85.2741191,41.9955808],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:04Z","tags":{}},"n1820937688":{"id":"n1820937688","loc":[-85.3442211,41.9903575],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:04Z","tags":{}},"n1820937689":{"id":"n1820937689","loc":[-85.2641413,41.9995237],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:04Z","tags":{}},"n1820937690":{"id":"n1820937690","loc":[-85.2804489,41.9829174],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:04Z","tags":{}},"n1820937691":{"id":"n1820937691","loc":[-85.5593342,41.9729074],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:04Z","tags":{}},"n1820937692":{"id":"n1820937692","loc":[-85.3590912,41.9932601],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:04Z","tags":{}},"n1820937694":{"id":"n1820937694","loc":[-85.4826445,41.9957479],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:05Z","tags":{}},"n1820937695":{"id":"n1820937695","loc":[-85.4539127,42.0063041],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:05Z","tags":{}},"n1820937696":{"id":"n1820937696","loc":[-85.2456767,42.0153683],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:05Z","tags":{}},"n1820937697":{"id":"n1820937697","loc":[-85.5794015,41.9489631],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:05Z","tags":{}},"n1820937698":{"id":"n1820937698","loc":[-85.4108686,42.0078507],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:05Z","tags":{}},"n1820937699":{"id":"n1820937699","loc":[-85.0616386,42.1051529],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:05Z","tags":{}},"n1820937700":{"id":"n1820937700","loc":[-85.4977979,41.978241],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:05Z","tags":{}},"n1820937701":{"id":"n1820937701","loc":[-85.2488417,42.0086319],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:05Z","tags":{}},"n1820937702":{"id":"n1820937702","loc":[-85.5588836,41.9728116],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:05Z","tags":{}},"n1820937703":{"id":"n1820937703","loc":[-85.4557366,42.0051241],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:05Z","tags":{}},"n1820937705":{"id":"n1820937705","loc":[-85.0723151,42.1056094],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:05Z","tags":{}},"n1820937706":{"id":"n1820937706","loc":[-85.0057909,42.0887323],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:05Z","tags":{}},"n1820937707":{"id":"n1820937707","loc":[-85.0756786,42.105677],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:05Z","tags":{}},"n1820937708":{"id":"n1820937708","loc":[-85.0901504,42.0940001],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:05Z","tags":{}},"n1820937709":{"id":"n1820937709","loc":[-85.0979999,42.0910213],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:05Z","tags":{}},"n1820937710":{"id":"n1820937710","loc":[-85.2376301,42.0239686],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:05Z","tags":{}},"n1820937711":{"id":"n1820937711","loc":[-85.2780671,41.9902299],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:05Z","tags":{}},"n1820937712":{"id":"n1820937712","loc":[-85.251481,42.0113188],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:05Z","tags":{}},"n1820937713":{"id":"n1820937713","loc":[-85.3114767,41.9690311],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:05Z","tags":{}},"n1820937714":{"id":"n1820937714","loc":[-85.2649621,41.9975662],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:05Z","tags":{}},"n1820937715":{"id":"n1820937715","loc":[-85.283807,41.9813383],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:05Z","tags":{}},"n1820937716":{"id":"n1820937716","loc":[-85.5515451,41.9703867],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:06Z","tags":{}},"n1820937717":{"id":"n1820937717","loc":[-85.1176605,42.0850896],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:06Z","tags":{}},"n1820937718":{"id":"n1820937718","loc":[-85.1069317,42.0862441],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:06Z","tags":{}},"n1820937719":{"id":"n1820937719","loc":[-85.2739314,41.9976938],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:06Z","tags":{}},"n1820937720":{"id":"n1820937720","loc":[-85.5550212,41.9702112],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:06Z","tags":{}},"n1820937721":{"id":"n1820937721","loc":[-85.3076679,41.9719904],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:06Z","tags":{}},"n1820937722":{"id":"n1820937722","loc":[-85.592319,41.9440316],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:06Z","tags":{}},"n1820937723":{"id":"n1820937723","loc":[-85.3139979,41.9704031],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:06Z","tags":{}},"n1820937724":{"id":"n1820937724","loc":[-85.0421134,42.1013149],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:06Z","tags":{}},"n1820937725":{"id":"n1820937725","loc":[-85.2508373,42.0102741],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:06Z","tags":{}},"n1820937726":{"id":"n1820937726","loc":[-85.0830922,42.1038821],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:06Z","tags":{}},"n1820937727":{"id":"n1820937727","loc":[-85.6342473,41.9360031],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:06Z","tags":{}},"n1820937730":{"id":"n1820937730","loc":[-85.0500192,42.1024942],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:06Z","tags":{}},"n1820937731":{"id":"n1820937731","loc":[-85.3498644,41.9926221],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:06Z","tags":{}},"n1820937732":{"id":"n1820937732","loc":[-85.0234117,42.0918903],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:06Z","tags":{}},"n1820937733":{"id":"n1820937733","loc":[-85.0464425,42.1009408],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:06Z","tags":{}},"n1820937734":{"id":"n1820937734","loc":[-85.033938,42.099886],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:06Z","tags":{}},"n1820937736":{"id":"n1820937736","loc":[-85.0152752,42.0886009],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:06Z","tags":{}},"n1820937737":{"id":"n1820937737","loc":[-85.0441894,42.1012671],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:06Z","tags":{}},"n1820937738":{"id":"n1820937738","loc":[-85.4668731,41.9979804],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:06Z","tags":{}},"n1820937739":{"id":"n1820937739","loc":[-85.4407377,42.006033],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:06Z","tags":{}},"n1820937740":{"id":"n1820937740","loc":[-85.2262253,42.0344878],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:06Z","tags":{}},"n1820937741":{"id":"n1820937741","loc":[-85.2550001,42.0033706],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:06Z","tags":{}},"n1820937742":{"id":"n1820937742","loc":[-85.3071422,41.9722617],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:06Z","tags":{}},"n1820937743":{"id":"n1820937743","loc":[-85.6147852,41.942228],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:06Z","tags":{}},"n1820937744":{"id":"n1820937744","loc":[-85.0183853,42.0901825],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:06Z","tags":{}},"n1820937745":{"id":"n1820937745","loc":[-85.6323161,41.9228489],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:07Z","tags":{}},"n1820937746":{"id":"n1820937746","loc":[-85.0095568,42.0901376],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:07Z","tags":{}},"n1820937747":{"id":"n1820937747","loc":[-85.2524037,42.0113826],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:07Z","tags":{}},"n1820937748":{"id":"n1820937748","loc":[-85.3186864,41.9708578],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:07Z","tags":{}},"n1820937749":{"id":"n1820937749","loc":[-85.2805669,41.9870883],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:07Z","tags":{}},"n1820937750":{"id":"n1820937750","loc":[-85.0585768,42.1038144],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:07Z","tags":{}},"n1820937751":{"id":"n1820937751","loc":[-85.2970786,41.9715358],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:07Z","tags":{}},"n1820937752":{"id":"n1820937752","loc":[-85.1315758,42.0723445],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:07Z","tags":{}},"n1820937753":{"id":"n1820937753","loc":[-85.2448291,42.0175444],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:07Z","tags":{}},"n1820937754":{"id":"n1820937754","loc":[-85.2446468,42.0174248],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:07Z","tags":{}},"n1820937755":{"id":"n1820937755","loc":[-85.229165,42.032129],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:07Z","tags":{}},"n1820937756":{"id":"n1820937756","loc":[-85.5612654,41.9724926],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:07Z","tags":{}},"n1820937757":{"id":"n1820937757","loc":[-85.2331776,42.030854],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:07Z","tags":{}},"n1820937758":{"id":"n1820937758","loc":[-85.2271909,42.0334519],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:07Z","tags":{}},"n1820937759":{"id":"n1820937759","loc":[-85.1032396,42.0879214],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:07Z","tags":{}},"n1820937760":{"id":"n1820937760","loc":[-85.0638447,42.1044154],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:07Z","tags":{}},"n1820937761":{"id":"n1820937761","loc":[-85.1260706,42.0745556],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:07Z","tags":{}},"n1820937762":{"id":"n1820937762","loc":[-85.3454485,41.99132],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:07Z","tags":{}},"n1820937763":{"id":"n1820937763","loc":[-85.2639321,41.9980088],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:07Z","tags":{}},"n1820937764":{"id":"n1820937764","loc":[-85.0837681,42.1013746],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:07Z","tags":{}},"n1820937765":{"id":"n1820937765","loc":[-85.2808137,41.9869368],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:07Z","tags":{}},"n1820937766":{"id":"n1820937766","loc":[-85.6338997,41.9309373],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:07Z","tags":{}},"n1820937767":{"id":"n1820937767","loc":[-85.2267403,42.0332766],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:07Z","tags":{}},"n1820937768":{"id":"n1820937768","loc":[-85.0605831,42.1052074],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:07Z","tags":{}},"n1820937769":{"id":"n1820937769","loc":[-85.0259021,42.0930037],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:07Z","tags":{}},"n1820937770":{"id":"n1820937770","loc":[-85.232963,42.0313162],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:07Z","tags":{}},"n1820937771":{"id":"n1820937771","loc":[-85.2404947,42.0125381],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:07Z","tags":{}},"n1820937772":{"id":"n1820937772","loc":[-85.0910892,42.0935742],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:08Z","tags":{}},"n1820937773":{"id":"n1820937773","loc":[-85.2554829,42.0019435],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:08Z","tags":{}},"n1820937774":{"id":"n1820937774","loc":[-85.2799339,41.9867773],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:08Z","tags":{}},"n1820937775":{"id":"n1820937775","loc":[-85.1075432,42.0852767],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:08Z","tags":{}},"n1820937776":{"id":"n1820937776","loc":[-85.1176927,42.0854001],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:08Z","tags":{}},"n1820937777":{"id":"n1820937777","loc":[-85.1067064,42.0863357],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:08Z","tags":{}},"n1820937778":{"id":"n1820937778","loc":[-85.2517492,42.0106333],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:08Z","tags":{}},"n1820937779":{"id":"n1820937779","loc":[-85.0987174,42.0909031],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:08Z","tags":{}},"n1820937780":{"id":"n1820937780","loc":[-85.1160083,42.0863994],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:08Z","tags":{}},"n1820937781":{"id":"n1820937781","loc":[-85.1268645,42.0739703],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:08Z","tags":{}},"n1820937782":{"id":"n1820937782","loc":[-85.0454702,42.1002852],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:08Z","tags":{}},"n1820937783":{"id":"n1820937783","loc":[-85.1334145,42.0705418],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:08Z","tags":{}},"n1820937784":{"id":"n1820937784","loc":[-85.5866542,41.947431],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:08Z","tags":{}},"n1820937786":{"id":"n1820937786","loc":[-85.2359886,42.0250366],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:08Z","tags":{}},"n1820937787":{"id":"n1820937787","loc":[-85.3138048,41.9698527],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:08Z","tags":{}},"n1820937788":{"id":"n1820937788","loc":[-85.1274291,42.0733081],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:08Z","tags":{}},"n1820937790":{"id":"n1820937790","loc":[-85.6292905,41.9411267],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:08Z","tags":{}},"n1820937791":{"id":"n1820937791","loc":[-85.5958809,41.9417333],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:08Z","tags":{}},"n1820937792":{"id":"n1820937792","loc":[-85.1271019,42.0737581],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:09Z","tags":{}},"n1820937793":{"id":"n1820937793","loc":[-85.2312679,42.0314437],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:09Z","tags":{}},"n1820937794":{"id":"n1820937794","loc":[-85.1081387,42.0863516],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:09Z","tags":{}},"n1820937795":{"id":"n1820937795","loc":[-85.2424473,42.0212109],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:09Z","tags":{}},"n1820937796":{"id":"n1820937796","loc":[-85.2710654,41.9975236],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:09Z","tags":{}},"n1820937797":{"id":"n1820937797","loc":[-85.4798408,41.9863223],"version":"2","changeset":"12182679","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T07:37:01Z","tags":{}},"n1820937798":{"id":"n1820937798","loc":[-85.035939,42.104296],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:09Z","tags":{}},"n1820937799":{"id":"n1820937799","loc":[-85.2178139,42.0395398],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:09Z","tags":{}},"n1820937800":{"id":"n1820937800","loc":[-85.0630709,42.1042614],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:09Z","tags":{}},"n1820937801":{"id":"n1820937801","loc":[-85.0440124,42.1014861],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:09Z","tags":{}},"n1820937802":{"id":"n1820937802","loc":[-85.1321874,42.0720458],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:09Z","tags":{}},"n1820937804":{"id":"n1820937804","loc":[-85.079427,42.1029121],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:09Z","tags":{}},"n1820937805":{"id":"n1820937805","loc":[-85.2962632,41.9738968],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:09Z","tags":{}},"n1820937806":{"id":"n1820937806","loc":[-85.6334748,41.9274627],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:09Z","tags":{}},"n1820937807":{"id":"n1820937807","loc":[-85.1057341,42.0872804],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:09Z","tags":{}},"n1820937808":{"id":"n1820937808","loc":[-85.4960169,41.9778263],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:09Z","tags":{}},"n1820937809":{"id":"n1820937809","loc":[-85.2821226,41.9910273],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:09Z","tags":{}},"n1820937810":{"id":"n1820937810","loc":[-85.0013868,42.0885054],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:09Z","tags":{}},"n1820937811":{"id":"n1820937811","loc":[-85.2952547,41.9729795],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:09Z","tags":{}},"n1820937812":{"id":"n1820937812","loc":[-85.1298375,42.0667842],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:09Z","tags":{}},"n1820937813":{"id":"n1820937813","loc":[-85.1339201,42.0710025],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:09Z","tags":{}},"n1820937814":{"id":"n1820937814","loc":[-85.0374356,42.103691],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:09Z","tags":{}},"n1820937815":{"id":"n1820937815","loc":[-85.0061115,42.0880607],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:09Z","tags":{}},"n1820937817":{"id":"n1820937817","loc":[-85.2398402,42.0226934],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:09Z","tags":{}},"n1820937818":{"id":"n1820937818","loc":[-85.123501,42.076236],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:09Z","tags":{}},"n1820937819":{"id":"n1820937819","loc":[-85.1209489,42.0791294],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:10Z","tags":{}},"n1820937820":{"id":"n1820937820","loc":[-85.0818624,42.1025778],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:10Z","tags":{}},"n1820937821":{"id":"n1820937821","loc":[-85.4428835,42.0054749],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:10Z","tags":{}},"n1820937822":{"id":"n1820937822","loc":[-85.4710359,41.9961147],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:10Z","tags":{}},"n1820937823":{"id":"n1820937823","loc":[-85.4253354,42.006198],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:10Z","tags":{}},"n1820937824":{"id":"n1820937824","loc":[-85.5486483,41.9709451],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:10Z","tags":{}},"n1820937825":{"id":"n1820937825","loc":[-85.2303238,42.0310452],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:10Z","tags":{}},"n1820937826":{"id":"n1820937826","loc":[-85.6450405,41.9136361],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:10Z","tags":{}},"n1820937828":{"id":"n1820937828","loc":[-85.2606853,41.9964073],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:10Z","tags":{}},"n1820937830":{"id":"n1820937830","loc":[-85.097383,42.0911447],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:10Z","tags":{}},"n1820937831":{"id":"n1820937831","loc":[-85.0498207,42.102136],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:10Z","tags":{}},"n1820937832":{"id":"n1820937832","loc":[-85.1232435,42.0763793],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:10Z","tags":{}},"n1820937833":{"id":"n1820937833","loc":[-85.394093,42.0055921],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:10Z","tags":{}},"n1820937834":{"id":"n1820937834","loc":[-85.3566665,41.9928295],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:10Z","tags":{}},"n1820937835":{"id":"n1820937835","loc":[-85.3543276,41.9920002],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:10Z","tags":{}},"n1820937837":{"id":"n1820937837","loc":[-85.084668,42.1034932],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:10Z","tags":{}},"n1820937838":{"id":"n1820937838","loc":[-85.4400296,42.0060649],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:10Z","tags":{}},"n1820937839":{"id":"n1820937839","loc":[-85.2362246,42.025714],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:10Z","tags":{}},"n1820937840":{"id":"n1820937840","loc":[-85.0409225,42.1012791],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:10Z","tags":{}},"n1820937841":{"id":"n1820937841","loc":[-85.2442283,42.019832],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:10Z","tags":{}},"n1820937842":{"id":"n1820937842","loc":[-85.1123001,42.084824],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:10Z","tags":{}},"n1820937843":{"id":"n1820937843","loc":[-85.1603074,42.0638061],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:10Z","tags":{}},"n1820937844":{"id":"n1820937844","loc":[-85.1359744,42.0650646],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:10Z","tags":{}},"n1820937845":{"id":"n1820937845","loc":[-85.1757569,42.053849],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:10Z","tags":{}},"n1820937846":{"id":"n1820937846","loc":[-85.5200925,41.9716686],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:10Z","tags":{}},"n1820937848":{"id":"n1820937848","loc":[-85.5525322,41.9701315],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:10Z","tags":{}},"n1820937849":{"id":"n1820937849","loc":[-85.0406489,42.10149],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:10Z","tags":{}},"n1820937850":{"id":"n1820937850","loc":[-85.0142547,42.088825],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:11Z","tags":{}},"n1820937851":{"id":"n1820937851","loc":[-85.343749,41.9881884],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:11Z","tags":{}},"n1820937852":{"id":"n1820937852","loc":[-85.074996,42.1060205],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:11Z","tags":{}},"n1820937853":{"id":"n1820937853","loc":[-85.2436275,42.0136864],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:11Z","tags":{}},"n1820937854":{"id":"n1820937854","loc":[-85.2641453,41.9980897],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:11Z","tags":{}},"n1820937856":{"id":"n1820937856","loc":[-85.2802343,41.9870086],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:11Z","tags":{}},"n1820937857":{"id":"n1820937857","loc":[-85.0099256,42.0909946],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:11Z","tags":{}},"n1820937858":{"id":"n1820937858","loc":[-85.493957,41.9786079],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:11Z","tags":{}},"n1820937859":{"id":"n1820937859","loc":[-85.0739405,42.1059795],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:11Z","tags":{}},"n1820937860":{"id":"n1820937860","loc":[-85.2331605,42.0301423],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:11Z","tags":{}},"n1820937862":{"id":"n1820937862","loc":[-85.2035231,42.0438425],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:11Z","tags":{}},"n1820937863":{"id":"n1820937863","loc":[-85.0884928,42.0986971],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:11Z","tags":{}},"n1820937864":{"id":"n1820937864","loc":[-85.131597,42.0690142],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:11Z","tags":{}},"n1820937865":{"id":"n1820937865","loc":[-85.3937454,42.0052677],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:11Z","tags":{}},"n1820937866":{"id":"n1820937866","loc":[-85.2212729,42.0378561],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:11Z","tags":{}},"n1820937867":{"id":"n1820937867","loc":[-85.0886068,42.0982421],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:11Z","tags":{}},"n1820937868":{"id":"n1820937868","loc":[-85.0875004,42.0968064],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:11Z","tags":{}},"n1820937869":{"id":"n1820937869","loc":[-85.0771323,42.1042642],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:12Z","tags":{}},"n1820937870":{"id":"n1820937870","loc":[-85.0164554,42.0894887],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:12Z","tags":{}},"n1820937871":{"id":"n1820937871","loc":[-85.6069102,41.9415577],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:12Z","tags":{}},"n1820937872":{"id":"n1820937872","loc":[-85.3273875,41.9704908],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:12Z","tags":{}},"n1820937873":{"id":"n1820937873","loc":[-85.3890891,41.9997983],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:12Z","tags":{}},"n1820937875":{"id":"n1820937875","loc":[-85.5091276,41.9723705],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:12Z","tags":{}},"n1820937876":{"id":"n1820937876","loc":[-85.0770626,42.1047696],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:12Z","tags":{}},"n1820937877":{"id":"n1820937877","loc":[-85.612575,41.9419567],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:12Z","tags":{}},"n1820937878":{"id":"n1820937878","loc":[-85.3868146,42.0036094],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:12Z","tags":{}},"n1820937879":{"id":"n1820937879","loc":[-85.2722738,41.9981204],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:12Z","tags":{}},"n1820937880":{"id":"n1820937880","loc":[-85.3064878,41.9723733],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:12Z","tags":{}},"n1820937882":{"id":"n1820937882","loc":[-85.1270845,42.0727678],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:12Z","tags":{}},"n1820937884":{"id":"n1820937884","loc":[-85.3316512,41.97923],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:12Z","tags":{}},"n1820937885":{"id":"n1820937885","loc":[-85.3932519,42.0042472],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:12Z","tags":{}},"n1820937886":{"id":"n1820937886","loc":[-85.2457411,42.0175444],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:12Z","tags":{}},"n1820937887":{"id":"n1820937887","loc":[-85.1397509,42.0648415],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:12Z","tags":{}},"n1820937891":{"id":"n1820937891","loc":[-85.3196735,41.9719665],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:12Z","tags":{}},"n1820937892":{"id":"n1820937892","loc":[-85.3372473,41.9845033],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:12Z","tags":{}},"n1820937894":{"id":"n1820937894","loc":[-85.3254778,41.9719745],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:12Z","tags":{}},"n1820937897":{"id":"n1820937897","loc":[-85.3185148,41.9691268],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:12Z","tags":{}},"n1820937899":{"id":"n1820937899","loc":[-85.5419106,41.9714556],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:12Z","tags":{}},"n1820937901":{"id":"n1820937901","loc":[-85.3293509,41.9748368],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:12Z","tags":{}},"n1820937903":{"id":"n1820937903","loc":[-85.0798078,42.1028365],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:13Z","tags":{}},"n1820937905":{"id":"n1820937905","loc":[-85.3954191,42.0056025],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:13Z","tags":{}},"n1820937909":{"id":"n1820937909","loc":[-85.3417534,41.9857155],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:13Z","tags":{}},"n1820937913":{"id":"n1820937913","loc":[-84.9927822,42.0857107],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:13Z","tags":{}},"n1820937915":{"id":"n1820937915","loc":[-85.5444212,41.9712801],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:13Z","tags":{}},"n1820937917":{"id":"n1820937917","loc":[-85.259088,41.9981682],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:13Z","tags":{}},"n1820937921":{"id":"n1820937921","loc":[-85.2784576,41.9876358],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:13Z","tags":{}},"n1820937922":{"id":"n1820937922","loc":[-84.9971918,42.087753],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:13Z","tags":{}},"n1820937924":{"id":"n1820937924","loc":[-85.5310688,41.966899],"version":"2","changeset":"12182668","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T07:35:33Z","tags":{}},"n1820937928":{"id":"n1820937928","loc":[-85.3766436,41.9979326],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:13Z","tags":{}},"n1820937930":{"id":"n1820937930","loc":[-85.5494852,41.9704346],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:13Z","tags":{}},"n1820937933":{"id":"n1820937933","loc":[-85.5548281,41.9695412],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:13Z","tags":{}},"n1820937935":{"id":"n1820937935","loc":[-85.0768588,42.105088],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:13Z","tags":{}},"n1820937937":{"id":"n1820937937","loc":[-85.2646885,41.9978054],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:13Z","tags":{}},"n1820937939":{"id":"n1820937939","loc":[-85.2441532,42.0176082],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:13Z","tags":{}},"n1820937941":{"id":"n1820937941","loc":[-85.105553,42.0877928],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:13Z","tags":{}},"n1820937943":{"id":"n1820937943","loc":[-85.0879457,42.0958909],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:13Z","tags":{}},"n1820937944":{"id":"n1820937944","loc":[-85.3187015,41.9704402],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:13Z","tags":{}},"n1820937945":{"id":"n1820937945","loc":[-85.5624456,41.970626],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:13Z","tags":{}},"n1820937946":{"id":"n1820937946","loc":[-85.0580176,42.1028644],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:13Z","tags":{}},"n1820937948":{"id":"n1820937948","loc":[-85.3016061,41.9726286],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:13Z","tags":{}},"n1820937949":{"id":"n1820937949","loc":[-85.4310388,42.0069418],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:13Z","tags":{}},"n1820937950":{"id":"n1820937950","loc":[-85.2945144,41.9740723],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:13Z","tags":{}},"n1820937951":{"id":"n1820937951","loc":[-85.1170222,42.082657],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:13Z","tags":{}},"n1820937952":{"id":"n1820937952","loc":[-85.0864503,42.0947632],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:14Z","tags":{}},"n1820937953":{"id":"n1820937953","loc":[-85.4285926,42.0059533],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:14Z","tags":{}},"n1820937970":{"id":"n1820937970","loc":[-85.3629965,41.9938023],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:14Z","tags":{}},"n1820937972":{"id":"n1820937972","loc":[-85.2438099,42.0199755],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:14Z","tags":{}},"n1820937974":{"id":"n1820937974","loc":[-85.1327654,42.0699285],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:14Z","tags":{}},"n1820937977":{"id":"n1820937977","loc":[-85.1515956,42.0611935],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:14Z","tags":{}},"n1820937978":{"id":"n1820937978","loc":[-85.0107369,42.0896638],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:14Z","tags":{}},"n1820937979":{"id":"n1820937979","loc":[-85.1152626,42.0862083],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:14Z","tags":{}},"n1820937980":{"id":"n1820937980","loc":[-85.4531831,42.0062881],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:14Z","tags":{}},"n1820937981":{"id":"n1820937981","loc":[-85.0341473,42.0985924],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:14Z","tags":{}},"n1820937982":{"id":"n1820937982","loc":[-85.0877485,42.0960171],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:14Z","tags":{}},"n1820937983":{"id":"n1820937983","loc":[-85.2756373,41.9951742],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:14Z","tags":{}},"n1820937984":{"id":"n1820937984","loc":[-85.2965421,41.9714401],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:14Z","tags":{}},"n1820937985":{"id":"n1820937985","loc":[-85.2409775,42.0226934],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:14Z","tags":{}},"n1820937986":{"id":"n1820937986","loc":[-85.0170723,42.0900579],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:14Z","tags":{}},"n1820937987":{"id":"n1820937987","loc":[-85.1034663,42.0880555],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:14Z","tags":{}},"n1820937988":{"id":"n1820937988","loc":[-85.0585071,42.1031577],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:14Z","tags":{}},"n1820937990":{"id":"n1820937990","loc":[-85.0819174,42.1032373],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:14Z","tags":{}},"n1820937992":{"id":"n1820937992","loc":[-85.0546608,42.1030542],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:14Z","tags":{}},"n1820937993":{"id":"n1820937993","loc":[-85.0100811,42.0906125],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:14Z","tags":{}},"n1820937995":{"id":"n1820937995","loc":[-85.6304278,41.9432655],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:14Z","tags":{}},"n1820937997":{"id":"n1820937997","loc":[-85.0255628,42.092778],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:14Z","tags":{}},"n1820938011":{"id":"n1820938011","loc":[-85.2316756,42.0317146],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:15Z","tags":{}},"n1820938012":{"id":"n1820938012","loc":[-85.4067917,42.008042],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:15Z","tags":{}},"n1820938013":{"id":"n1820938013","loc":[-85.390398,42.0028759],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:15Z","tags":{}},"n1820938014":{"id":"n1820938014","loc":[-85.0161604,42.0886527],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:15Z","tags":{}},"n1820938015":{"id":"n1820938015","loc":[-85.125337,42.0744589],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:15Z","tags":{}},"n1820938016":{"id":"n1820938016","loc":[-85.2151317,42.0404801],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:15Z","tags":{}},"n1820938017":{"id":"n1820938017","loc":[-85.3165085,41.9706025],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:15Z","tags":{}},"n1820938018":{"id":"n1820938018","loc":[-85.5641193,41.9640688],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:15Z","tags":{}},"n1820938019":{"id":"n1820938019","loc":[-85.147583,42.0642203],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:15Z","tags":{}},"n1820938022":{"id":"n1820938022","loc":[-85.2803781,41.9947886],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:15Z","tags":{}},"n1820938024":{"id":"n1820938024","loc":[-85.2692469,41.9982053],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:15Z","tags":{}},"n1820938026":{"id":"n1820938026","loc":[-85.4321975,42.0067505],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:15Z","tags":{}},"n1820938028":{"id":"n1820938028","loc":[-85.572535,41.9633405],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:15Z","tags":{}},"n1820938030":{"id":"n1820938030","loc":[-85.3237505,41.9716475],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:15Z","tags":{}},"n1820938032":{"id":"n1820938032","loc":[-85.6487698,41.9141583],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:15Z","tags":{}},"n1820938033":{"id":"n1820938033","loc":[-85.0526371,42.1038315],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:15Z","tags":{}},"n1820938034":{"id":"n1820938034","loc":[-85.088069,42.0978731],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:15Z","tags":{}},"n1820938035":{"id":"n1820938035","loc":[-85.2516312,42.0102267],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:15Z","tags":{}},"n1820938039":{"id":"n1820938039","loc":[-85.2731374,41.9982958],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:15Z","tags":{}},"n1820938040":{"id":"n1820938040","loc":[-85.5453224,41.9713439],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:16Z","tags":{}},"n1820938041":{"id":"n1820938041","loc":[-85.4480548,42.0049647],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:16Z","tags":{}},"n1820938043":{"id":"n1820938043","loc":[-85.2504081,42.010322],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:16Z","tags":{}},"n1820938045":{"id":"n1820938045","loc":[-85.2663447,41.99919],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:16Z","tags":{}},"n1820938046":{"id":"n1820938046","loc":[-85.0507287,42.102907],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:16Z","tags":{}},"n1820938047":{"id":"n1820938047","loc":[-85.0408246,42.1024743],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:16Z","tags":{}},"n1820938048":{"id":"n1820938048","loc":[-85.2796335,41.9866099],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:16Z","tags":{}},"n1820938050":{"id":"n1820938050","loc":[-85.452475,42.0061127],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:16Z","tags":{}},"n1820938051":{"id":"n1820938051","loc":[-85.2410569,42.0128147],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:16Z","tags":{}},"n1820938052":{"id":"n1820938052","loc":[-85.0413302,42.1011477],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:16Z","tags":{}},"n1820938053":{"id":"n1820938053","loc":[-85.6327409,41.9197627],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:16Z","tags":{}},"n1820938056":{"id":"n1820938056","loc":[-85.1072039,42.0857994],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:16Z","tags":{}},"n1820938057":{"id":"n1820938057","loc":[-85.2001114,42.0448145],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:16Z","tags":{}},"n1820938058":{"id":"n1820938058","loc":[-85.2655347,41.9978186],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:16Z","tags":{}},"n1820938059":{"id":"n1820938059","loc":[-85.2330918,42.0304874],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:16Z","tags":{}},"n1820938060":{"id":"n1820938060","loc":[-85.2601113,41.9966545],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:16Z","tags":{}},"n1820938061":{"id":"n1820938061","loc":[-85.5397863,41.9708494],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:16Z","tags":{}},"n1820938062":{"id":"n1820938062","loc":[-85.2702085,41.9977217],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:16Z","tags":{}},"n1820938063":{"id":"n1820938063","loc":[-85.2219982,42.03699],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:16Z","tags":{}},"n1820938064":{"id":"n1820938064","loc":[-85.0668957,42.105121],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:16Z","tags":{}},"n1820938065":{"id":"n1820938065","loc":[-85.2328665,42.0270769],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:16Z","tags":{}},"n1820938066":{"id":"n1820938066","loc":[-85.3189654,41.9694778],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:16Z","tags":{}},"n1820938067":{"id":"n1820938067","loc":[-85.3814115,42.0022915],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:16Z","tags":{}},"n1820938068":{"id":"n1820938068","loc":[-85.2759108,41.9956008],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:16Z","tags":{}},"n1820938069":{"id":"n1820938069","loc":[-85.0391938,42.1034853],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:17Z","tags":{}},"n1820938070":{"id":"n1820938070","loc":[-85.2850623,41.9810353],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:17Z","tags":{}},"n1820938071":{"id":"n1820938071","loc":[-85.538074,41.970855],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:17Z","tags":{}},"n1820938073":{"id":"n1820938073","loc":[-85.1319661,42.0670932],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:17Z","tags":{}},"n1820938074":{"id":"n1820938074","loc":[-85.2816763,41.9913678],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:17Z","tags":{}},"n1820938075":{"id":"n1820938075","loc":[-85.3182144,41.9700282],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:17Z","tags":{}},"n1820938076":{"id":"n1820938076","loc":[-85.5909028,41.9458989],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:17Z","tags":{}},"n1820938077":{"id":"n1820938077","loc":[-85.4057617,42.0074361],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:17Z","tags":{}},"n1820938078":{"id":"n1820938078","loc":[-85.2620438,41.9967729],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:17Z","tags":{}},"n1820938079":{"id":"n1820938079","loc":[-85.1122143,42.0851107],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:17Z","tags":{}},"n1820938080":{"id":"n1820938080","loc":[-85.2443785,42.0174567],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:17Z","tags":{}},"n1820938081":{"id":"n1820938081","loc":[-85.0319733,42.0953853],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:17Z","tags":{}},"n1820938082":{"id":"n1820938082","loc":[-85.0878276,42.09443],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:17Z","tags":{}},"n1820938083":{"id":"n1820938083","loc":[-85.0271789,42.0935809],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:17Z","tags":{}},"n1820938084":{"id":"n1820938084","loc":[-85.0326399,42.0974222],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:17Z","tags":{}},"n1820938085":{"id":"n1820938085","loc":[-85.3989167,42.0065592],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:17Z","tags":{}},"n1820938086":{"id":"n1820938086","loc":[-85.3263361,41.9721261],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:17Z","tags":{}},"n1820938087":{"id":"n1820938087","loc":[-85.2547855,42.0037134],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:17Z","tags":{}},"n1820938088":{"id":"n1820938088","loc":[-85.4373259,42.005746],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:17Z","tags":{}},"n1820938089":{"id":"n1820938089","loc":[-85.3094275,41.9699245],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:17Z","tags":{}},"n1820938090":{"id":"n1820938090","loc":[-85.2783246,41.9872793],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:17Z","tags":{}},"n1820938092":{"id":"n1820938092","loc":[-85.0815633,42.1025169],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:17Z","tags":{}},"n1820938093":{"id":"n1820938093","loc":[-85.1788511,42.0522134],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:17Z","tags":{}},"n1820938095":{"id":"n1820938095","loc":[-85.2830345,41.9816733],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:17Z","tags":{}},"n1820938096":{"id":"n1820938096","loc":[-85.0744984,42.1059835],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:17Z","tags":{}},"n1820938097":{"id":"n1820938097","loc":[-85.2788396,41.9879333],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:17Z","tags":{}},"n1820938098":{"id":"n1820938098","loc":[-85.3640093,41.9946531],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:18Z","tags":{}},"n1820938099":{"id":"n1820938099","loc":[-85.291167,41.9787463],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:18Z","tags":{}},"n1820938100":{"id":"n1820938100","loc":[-85.0772436,42.1038156],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:18Z","tags":{}},"n1820938101":{"id":"n1820938101","loc":[-85.00563,42.0887482],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:18Z","tags":{}},"n1820938102":{"id":"n1820938102","loc":[-85.0326881,42.0961245],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:18Z","tags":{}},"n1820938104":{"id":"n1820938104","loc":[-85.0530448,42.1038634],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:18Z","tags":{}},"n1820938105":{"id":"n1820938105","loc":[-85.2625266,41.9970639],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:18Z","tags":{}},"n1820938106":{"id":"n1820938106","loc":[-85.2827556,41.9823512],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:18Z","tags":{}},"n1820938107":{"id":"n1820938107","loc":[-85.2784319,41.9910752],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:18Z","tags":{}},"n1820938108":{"id":"n1820938108","loc":[-85.0882099,42.094393],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:18Z","tags":{}},"n1820938109":{"id":"n1820938109","loc":[-85.5718484,41.9645371],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:18Z","tags":{}},"n1820938110":{"id":"n1820938110","loc":[-85.2559764,42.0099317],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:18Z","tags":{}},"n1820938111":{"id":"n1820938111","loc":[-85.2969284,41.973179],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:18Z","tags":{}},"n1820938113":{"id":"n1820938113","loc":[-85.3875055,42.0019726],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:18Z","tags":{}},"n1820938114":{"id":"n1820938114","loc":[-85.4250779,42.0068199],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:18Z","tags":{}},"n1820938115":{"id":"n1820938115","loc":[-85.0645367,42.104889],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:18Z","tags":{}},"n1820938116":{"id":"n1820938116","loc":[-85.1636762,42.0623724],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:18Z","tags":{}},"n1820938117":{"id":"n1820938117","loc":[-85.0757322,42.1055935],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:18Z","tags":{}},"n1820938118":{"id":"n1820938118","loc":[-85.3695197,41.9981559],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:19Z","tags":{}},"n1820938120":{"id":"n1820938120","loc":[-85.1297516,42.0671027],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:19Z","tags":{}},"n1820938121":{"id":"n1820938121","loc":[-85.1057448,42.0875551],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:19Z","tags":{}},"n1820938122":{"id":"n1820938122","loc":[-85.2805175,41.9943182],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:19Z","tags":{}},"n1820938123":{"id":"n1820938123","loc":[-85.2545173,42.0040722],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:19Z","tags":{}},"n1820938124":{"id":"n1820938124","loc":[-84.9966607,42.0871319],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:19Z","tags":{}},"n1820938125":{"id":"n1820938125","loc":[-85.0099899,42.0904612],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:19Z","tags":{}},"n1820938126":{"id":"n1820938126","loc":[-85.2489919,42.0091102],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:19Z","tags":{}},"n1820938127":{"id":"n1820938127","loc":[-85.0342706,42.0979476],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:19Z","tags":{}},"n1820938128":{"id":"n1820938128","loc":[-85.1080891,42.0855884],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:19Z","tags":{}},"n1820938129":{"id":"n1820938129","loc":[-85.0128183,42.0905356],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:19Z","tags":{}},"n1820938130":{"id":"n1820938130","loc":[-85.631608,41.9434251],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:19Z","tags":{}},"n1820938131":{"id":"n1820938131","loc":[-85.2551975,42.0008524],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:19Z","tags":{}},"n1820938132":{"id":"n1820938132","loc":[-85.6421823,41.9096233],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:19Z","tags":{}},"n1820938133":{"id":"n1820938133","loc":[-85.0125059,42.0906284],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:19Z","tags":{}},"n1820938134":{"id":"n1820938134","loc":[-85.5499358,41.9701793],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:19Z","tags":{}},"n1820938135":{"id":"n1820938135","loc":[-85.5472107,41.9712323],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:19Z","tags":{}},"n1820938136":{"id":"n1820938136","loc":[-85.2760758,41.9958691],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:19Z","tags":{}},"n1820938137":{"id":"n1820938137","loc":[-85.276678,41.9960433],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:19Z","tags":{}},"n1820938138":{"id":"n1820938138","loc":[-85.0570319,42.1024731],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:19Z","tags":{}},"n1820938140":{"id":"n1820938140","loc":[-85.2394325,42.0227492],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:19Z","tags":{}},"n1820938142":{"id":"n1820938142","loc":[-85.5666341,41.9638829],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:19Z","tags":{}},"n1820938144":{"id":"n1820938144","loc":[-85.258101,41.9996353],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:19Z","tags":{}},"n1820938147":{"id":"n1820938147","loc":[-85.2129645,42.0413565],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:19Z","tags":{}},"n1820938149":{"id":"n1820938149","loc":[-84.9962369,42.0868373],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:20Z","tags":{}},"n1820938151":{"id":"n1820938151","loc":[-85.2570386,42.0084968],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:20Z","tags":{}},"n1820938153":{"id":"n1820938153","loc":[-85.3971142,42.0050285],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:20Z","tags":{}},"n1820938155":{"id":"n1820938155","loc":[-85.1072093,42.0855566],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:20Z","tags":{}},"n1820938157":{"id":"n1820938157","loc":[-85.2840323,41.9920959],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:20Z","tags":{}},"n1820938159":{"id":"n1820938159","loc":[-85.1187924,42.0816458],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:20Z","tags":{}},"n1820938161":{"id":"n1820938161","loc":[-85.2681324,41.9985788],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:20Z","tags":{}},"n1820938163":{"id":"n1820938163","loc":[-85.0887034,42.0984969],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:20Z","tags":{}},"n1820938165":{"id":"n1820938165","loc":[-85.4133405,42.0073141],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:20Z","tags":{}},"n1820938166":{"id":"n1820938166","loc":[-85.0097445,42.0902888],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:20Z","tags":{}},"n1820938167":{"id":"n1820938167","loc":[-85.0828133,42.1037388],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:20Z","tags":{}},"n1820938168":{"id":"n1820938168","loc":[-85.0549599,42.1030833],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:20Z","tags":{}},"n1820938169":{"id":"n1820938169","loc":[-85.4571528,42.0010421],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:20Z","tags":{}},"n1820938178":{"id":"n1820938178","loc":[-85.2706644,41.9975941],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:20Z","tags":{}},"n1820938180":{"id":"n1820938180","loc":[-85.2258606,42.0335794],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:20Z","tags":{}},"n1820938182":{"id":"n1820938182","loc":[-85.2832276,41.9814659],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:20Z","tags":{}},"n1820938184":{"id":"n1820938184","loc":[-85.1082299,42.0860928],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:20Z","tags":{}},"n1820938185":{"id":"n1820938185","loc":[-85.3839392,42.0022381],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:20Z","tags":{}},"n1820938186":{"id":"n1820938186","loc":[-85.2772131,41.995905],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:20Z","tags":{}},"n1820938187":{"id":"n1820938187","loc":[-85.1044895,42.0879214],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:20Z","tags":{}},"n1820938188":{"id":"n1820938188","loc":[-85.2135267,42.0407087],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:20Z","tags":{}},"n1820938189":{"id":"n1820938189","loc":[-85.2543993,42.0044628],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:20Z","tags":{}},"n1820938190":{"id":"n1820938190","loc":[-85.1501793,42.0617351],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:20Z","tags":{}},"n1820938191":{"id":"n1820938191","loc":[-85.3350587,41.9820469],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:20Z","tags":{}},"n1820938192":{"id":"n1820938192","loc":[-85.1350731,42.0655735],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:20Z","tags":{}},"n1820938193":{"id":"n1820938193","loc":[-85.0404008,42.1028843],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:20Z","tags":{}},"n1820938194":{"id":"n1820938194","loc":[-85.6323161,41.943042],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:21Z","tags":{}},"n1820938195":{"id":"n1820938195","loc":[-85.1259593,42.0742837],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:21Z","tags":{}},"n1820938196":{"id":"n1820938196","loc":[-85.4562988,42.0033758],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:21Z","tags":{}},"n1820938197":{"id":"n1820938197","loc":[-85.256824,42.0056826],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:21Z","tags":{}},"n1820938198":{"id":"n1820938198","loc":[-85.2742103,41.9963862],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:21Z","tags":{}},"n1820938199":{"id":"n1820938199","loc":[-85.0380888,42.1037877],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:21Z","tags":{}},"n1820938200":{"id":"n1820938200","loc":[-85.47404,41.9944721],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:21Z","tags":{}},"n1820938201":{"id":"n1820938201","loc":[-85.103021,42.087948],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:21Z","tags":{}},"n1820938202":{"id":"n1820938202","loc":[-85.4030151,42.0065113],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:21Z","tags":{}},"n1820938203":{"id":"n1820938203","loc":[-85.2113981,42.040735],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:21Z","tags":{}},"n1820938204":{"id":"n1820938204","loc":[-85.2603433,41.9965137],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:21Z","tags":{}},"n1820938206":{"id":"n1820938206","loc":[-85.1669378,42.0607634],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:21Z","tags":{}},"n1820938207":{"id":"n1820938207","loc":[-85.0642027,42.1046076],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:21Z","tags":{}},"n1820938208":{"id":"n1820938208","loc":[-85.2812428,41.9915696],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:21Z","tags":{}},"n1820938209":{"id":"n1820938209","loc":[-85.0839559,42.1038343],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:21Z","tags":{}},"n1820938210":{"id":"n1820938210","loc":[-85.1239946,42.0769368],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:21Z","tags":{}},"n1820938211":{"id":"n1820938211","loc":[-85.2311177,42.0283042],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:21Z","tags":{}},"n1820938212":{"id":"n1820938212","loc":[-85.2791614,41.9882682],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:21Z","tags":{}},"n1820938213":{"id":"n1820938213","loc":[-85.2674941,41.9987582],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:21Z","tags":{}},"n1820938214":{"id":"n1820938214","loc":[-85.352787,41.9919579],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:21Z","tags":{}},"n1820938215":{"id":"n1820938215","loc":[-85.0874146,42.0952182],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:21Z","tags":{}},"n1820938216":{"id":"n1820938216","loc":[-85.0069711,42.0877092],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:21Z","tags":{}},"n1820938217":{"id":"n1820938217","loc":[-85.2059049,42.0404004],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:21Z","tags":{}},"n1820938218":{"id":"n1820938218","loc":[-85.2403552,42.0227332],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:21Z","tags":{}},"n1820938219":{"id":"n1820938219","loc":[-85.2492923,42.0098915],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:21Z","tags":{}},"n1820938220":{"id":"n1820938220","loc":[-85.269778,41.9979541],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:22Z","tags":{}},"n1820938221":{"id":"n1820938221","loc":[-85.2097673,42.0389024],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:22Z","tags":{}},"n1820938222":{"id":"n1820938222","loc":[-85.0845942,42.1032015],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:22Z","tags":{}},"n1820938223":{"id":"n1820938223","loc":[-84.993206,42.0858142],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:22Z","tags":{}},"n1820938224":{"id":"n1820938224","loc":[-85.2108187,42.0402729],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:22Z","tags":{}},"n1820938225":{"id":"n1820938225","loc":[-84.9893959,42.0873043],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:22Z","tags":{}},"n1820938226":{"id":"n1820938226","loc":[-85.2952332,41.9719984],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:22Z","tags":{}},"n1820938227":{"id":"n1820938227","loc":[-85.4100961,42.0081536],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:22Z","tags":{}},"n1820938228":{"id":"n1820938228","loc":[-85.3299088,41.9785696],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:22Z","tags":{}},"n1820938229":{"id":"n1820938229","loc":[-85.2258176,42.0340097],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:22Z","tags":{}},"n1820938230":{"id":"n1820938230","loc":[-85.3146739,41.9711449],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:22Z","tags":{}},"n1820938231":{"id":"n1820938231","loc":[-85.5447645,41.9712801],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:22Z","tags":{}},"n1820938232":{"id":"n1820938232","loc":[-85.5510087,41.9705941],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:22Z","tags":{}},"n1820938233":{"id":"n1820938233","loc":[-85.5122389,41.9703445],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:22Z","tags":{}},"n1820938234":{"id":"n1820938234","loc":[-85.2792687,41.9865381],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:22Z","tags":{}},"n1820938235":{"id":"n1820938235","loc":[-85.1475229,42.0630151],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:22Z","tags":{}},"n1820938237":{"id":"n1820938237","loc":[-85.0332889,42.0996034],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:22Z","tags":{}},"n1820938238":{"id":"n1820938238","loc":[-85.2588882,41.9986877],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:22Z","tags":{}},"n1820938239":{"id":"n1820938239","loc":[-85.0656458,42.1050892],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:22Z","tags":{}},"n1820938240":{"id":"n1820938240","loc":[-84.9913915,42.086098],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:23Z","tags":{}},"n1820938241":{"id":"n1820938241","loc":[-85.4752416,41.9944402],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:23Z","tags":{}},"n1820938242":{"id":"n1820938242","loc":[-85.1214304,42.0791147],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:23Z","tags":{}},"n1820938243":{"id":"n1820938243","loc":[-85.0075183,42.0886925],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:23Z","tags":{}},"n1820938244":{"id":"n1820938244","loc":[-85.1052888,42.0872087],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:23Z","tags":{}},"n1820938245":{"id":"n1820938245","loc":[-85.3104252,41.9703393],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:23Z","tags":{}},"n1820938246":{"id":"n1820938246","loc":[-85.232109,42.0318158],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:23Z","tags":{}},"n1820938247":{"id":"n1820938247","loc":[-85.0756075,42.1059528],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:23Z","tags":{}},"n1820938248":{"id":"n1820938248","loc":[-85.0075612,42.0890866],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:23Z","tags":{}},"n1820938249":{"id":"n1820938249","loc":[-85.1013312,42.0897474],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:23Z","tags":{}},"n1820938250":{"id":"n1820938250","loc":[-85.1168076,42.0828919],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:23Z","tags":{}},"n1820938251":{"id":"n1820938251","loc":[-85.2951367,41.9723334],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:23Z","tags":{}},"n1820938252":{"id":"n1820938252","loc":[-85.0879363,42.0976053],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:23Z","tags":{}},"n1820938253":{"id":"n1820938253","loc":[-85.0354763,42.1021838],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:23Z","tags":{}},"n1820938254":{"id":"n1820938254","loc":[-85.2379627,42.0236339],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:23Z","tags":{}},"n1820938255":{"id":"n1820938255","loc":[-85.1308245,42.0685364],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:23Z","tags":{}},"n1820938256":{"id":"n1820938256","loc":[-85.0914446,42.0934774],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:23Z","tags":{}},"n1820938257":{"id":"n1820938257","loc":[-85.2436812,42.014069],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:23Z","tags":{}},"n1820938258":{"id":"n1820938258","loc":[-85.0682529,42.1056106],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:23Z","tags":{}},"n1820938259":{"id":"n1820938259","loc":[-85.290652,41.9766805],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:23Z","tags":{}},"n1820938260":{"id":"n1820938260","loc":[-85.0133494,42.0897434],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:23Z","tags":{}},"n1820938261":{"id":"n1820938261","loc":[-85.2753047,41.9949429],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:23Z","tags":{}},"n1820938262":{"id":"n1820938262","loc":[-85.0314691,42.0950788],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:23Z","tags":{}},"n1820938263":{"id":"n1820938263","loc":[-85.3444786,41.9908359],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:24Z","tags":{}},"n1820938264":{"id":"n1820938264","loc":[-85.0443115,42.1009061],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:24Z","tags":{}},"n1820938265":{"id":"n1820938265","loc":[-85.0634853,42.1043159],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:24Z","tags":{}},"n1820938267":{"id":"n1820938267","loc":[-85.3978223,42.0053952],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:24Z","tags":{}},"n1820938268":{"id":"n1820938268","loc":[-85.0228659,42.0911885],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:24Z","tags":{}},"n1820938269":{"id":"n1820938269","loc":[-85.0220237,42.0906272],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:24Z","tags":{}},"n1820938270":{"id":"n1820938270","loc":[-85.1061525,42.0863369],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:24Z","tags":{}},"n1820938271":{"id":"n1820938271","loc":[-85.2382309,42.0233708],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:24Z","tags":{}},"n1820938272":{"id":"n1820938272","loc":[-85.310672,41.9702755],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:24Z","tags":{}},"n1820938273":{"id":"n1820938273","loc":[-85.1448192,42.0652613],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:24Z","tags":{}},"n1820938274":{"id":"n1820938274","loc":[-85.6036057,41.9403766],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:24Z","tags":{}},"n1820938275":{"id":"n1820938275","loc":[-85.0778941,42.1032413],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:24Z","tags":{}},"n1820938276":{"id":"n1820938276","loc":[-85.1279374,42.0723974],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:24Z","tags":{}},"n1820938277":{"id":"n1820938277","loc":[-85.2806635,41.9847836],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:24Z","tags":{}},"n1820938278":{"id":"n1820938278","loc":[-85.2653201,41.9976352],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:24Z","tags":{}},"n1820938279":{"id":"n1820938279","loc":[-85.0351665,42.1001805],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:24Z","tags":{}},"n1820938280":{"id":"n1820938280","loc":[-85.0718269,42.1056253],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:24Z","tags":{}},"n1820938281":{"id":"n1820938281","loc":[-85.2574248,42.0075322],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:24Z","tags":{}},"n1820938282":{"id":"n1820938282","loc":[-85.126666,42.0740778],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:24Z","tags":{}},"n1820938283":{"id":"n1820938283","loc":[-85.077705,42.1034733],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:24Z","tags":{}},"n1820938284":{"id":"n1820938284","loc":[-85.3535552,41.9919045],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:24Z","tags":{}},"n1820938286":{"id":"n1820938286","loc":[-85.2810711,41.9866657],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:24Z","tags":{}},"n1820938287":{"id":"n1820938287","loc":[-85.4567494,42.0019885],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:24Z","tags":{}},"n1820938288":{"id":"n1820938288","loc":[-85.2642419,41.9992936],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:24Z","tags":{}},"n1820938289":{"id":"n1820938289","loc":[-85.2643344,41.9980925],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:24Z","tags":{}},"n1820938290":{"id":"n1820938290","loc":[-85.3270335,41.9776125],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:24Z","tags":{}},"n1820938291":{"id":"n1820938291","loc":[-85.1200584,42.0795077],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:24Z","tags":{}},"n1820938292":{"id":"n1820938292","loc":[-85.2290792,42.0340256],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:25Z","tags":{}},"n1820938293":{"id":"n1820938293","loc":[-85.6015887,41.9401372],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:25Z","tags":{}},"n1820938294":{"id":"n1820938294","loc":[-85.5370869,41.970488],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:25Z","tags":{}},"n1820938295":{"id":"n1820938295","loc":[-85.3108866,41.9698048],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:25Z","tags":{}},"n1820938297":{"id":"n1820938297","loc":[-85.1556511,42.0628184],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:25Z","tags":{}},"n1820938298":{"id":"n1820938298","loc":[-85.0027922,42.0875221],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:25Z","tags":{}},"n1820938300":{"id":"n1820938300","loc":[-85.3873338,42.0040614],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:25Z","tags":{}},"n1820938301":{"id":"n1820938301","loc":[-85.0350753,42.1004034],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:25Z","tags":{}},"n1820938302":{"id":"n1820938302","loc":[-85.6239476,41.9411906],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:25Z","tags":{}},"n1820938304":{"id":"n1820938304","loc":[-85.0118246,42.0897964],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:25Z","tags":{}},"n1820938306":{"id":"n1820938306","loc":[-85.4796877,41.995275],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:25Z","tags":{}},"n1820938307":{"id":"n1820938307","loc":[-85.5388636,41.9707856],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:25Z","tags":{}},"n1820938309":{"id":"n1820938309","loc":[-85.2971902,41.9727773],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:25Z","tags":{}},"n1820938310":{"id":"n1820938310","loc":[-85.5426831,41.9715513],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:25Z","tags":{}},"n1820938311":{"id":"n1820938311","loc":[-85.2798373,41.9836671],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:25Z","tags":{}},"n1820938312":{"id":"n1820938312","loc":[-85.2432198,42.0104017],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:25Z","tags":{}},"n1820938313":{"id":"n1820938313","loc":[-85.2650412,41.9987554],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:25Z","tags":{}},"n1820938317":{"id":"n1820938317","loc":[-85.0015423,42.0882386],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:25Z","tags":{}},"n1820938318":{"id":"n1820938318","loc":[-85.1409783,42.064879],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:26Z","tags":{}},"n1820938319":{"id":"n1820938319","loc":[-85.1691908,42.058995],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:26Z","tags":{}},"n1820938320":{"id":"n1820938320","loc":[-85.1059165,42.0864882],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:26Z","tags":{}},"n1820938321":{"id":"n1820938321","loc":[-85.3664941,41.9965771],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:26Z","tags":{}},"n1820938323":{"id":"n1820938323","loc":[-85.3143198,41.9710971],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:26Z","tags":{}},"n1820938324":{"id":"n1820938324","loc":[-85.0016067,42.0880675],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:26Z","tags":{}},"n1820938325":{"id":"n1820938325","loc":[-85.0148139,42.0887164],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:26Z","tags":{}},"n1820938326":{"id":"n1820938326","loc":[-85.0324682,42.0959056],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:26Z","tags":{}},"n1820938327":{"id":"n1820938327","loc":[-85.0898661,42.0939921],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:26Z","tags":{}},"n1820938328":{"id":"n1820938328","loc":[-85.2556427,42.0004936],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:26Z","tags":{}},"n1820938329":{"id":"n1820938329","loc":[-85.6287112,41.9407437],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:26Z","tags":{}},"n1820938330":{"id":"n1820938330","loc":[-84.9913392,42.0866701],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:26Z","tags":{}},"n1820938331":{"id":"n1820938331","loc":[-85.2685777,41.9984632],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:26Z","tags":{}},"n1820938332":{"id":"n1820938332","loc":[-85.0078884,42.0901614],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:26Z","tags":{}},"n1820938333":{"id":"n1820938333","loc":[-84.999642,42.0878616],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:26Z","tags":{}},"n1820938334":{"id":"n1820938334","loc":[-85.0188909,42.0899186],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:26Z","tags":{}},"n1820938335":{"id":"n1820938335","loc":[-85.2830238,41.9819843],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:26Z","tags":{}},"n1820938336":{"id":"n1820938336","loc":[-85.2491421,42.0096204],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:26Z","tags":{}},"n1820938337":{"id":"n1820938337","loc":[-85.0585701,42.1034295],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:27Z","tags":{}},"n1820938338":{"id":"n1820938338","loc":[-85.0651965,42.1051636],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:27Z","tags":{}},"n1820938339":{"id":"n1820938339","loc":[-85.0583944,42.104292],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:27Z","tags":{}},"n1820938340":{"id":"n1820938340","loc":[-85.119876,42.0801567],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:27Z","tags":{}},"n1820938341":{"id":"n1820938341","loc":[-85.0943937,42.0931323],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:27Z","tags":{}},"n1820938342":{"id":"n1820938342","loc":[-85.1504583,42.0613209],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:27Z","tags":{}},"n1820938343":{"id":"n1820938343","loc":[-85.0425426,42.1019836],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:27Z","tags":{}},"n1820938345":{"id":"n1820938345","loc":[-84.9991391,42.0878206],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:27Z","tags":{}},"n1820938346":{"id":"n1820938346","loc":[-85.2563841,42.0094614],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:27Z","tags":{}},"n1820938347":{"id":"n1820938347","loc":[-85.0515387,42.103297],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:27Z","tags":{}},"n1820938348":{"id":"n1820938348","loc":[-85.0857261,42.1003636],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:27Z","tags":{}},"n1820938349":{"id":"n1820938349","loc":[-85.078971,42.1029241],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:27Z","tags":{}},"n1820938350":{"id":"n1820938350","loc":[-85.5699558,41.958931],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:27Z","tags":{}},"n1820938351":{"id":"n1820938351","loc":[-85.3181285,41.9696533],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:27Z","tags":{}},"n1820938352":{"id":"n1820938352","loc":[-85.5998506,41.9402329],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:27Z","tags":{}},"n1820938353":{"id":"n1820938353","loc":[-85.2567277,42.000317],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:27Z","tags":{}},"n1820938354":{"id":"n1820938354","loc":[-85.3082795,41.9708338],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:27Z","tags":{}},"n1820938355":{"id":"n1820938355","loc":[-85.3127856,41.9692784],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:27Z","tags":{}},"n1820938356":{"id":"n1820938356","loc":[-85.0340775,42.1010721],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:27Z","tags":{}},"n1820938357":{"id":"n1820938357","loc":[-85.3158111,41.9706583],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:27Z","tags":{}},"n1820938359":{"id":"n1820938359","loc":[-85.2312035,42.0280412],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:27Z","tags":{}},"n1820938360":{"id":"n1820938360","loc":[-85.2448613,42.018477],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:27Z","tags":{}},"n1820938361":{"id":"n1820938361","loc":[-85.29077,41.9759068],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:27Z","tags":{}},"n1820938364":{"id":"n1820938364","loc":[-85.3677387,41.9976615],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:28Z","tags":{}},"n1820938365":{"id":"n1820938365","loc":[-85.0785204,42.1030355],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:28Z","tags":{}},"n1820938366":{"id":"n1820938366","loc":[-85.2262039,42.0333722],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:28Z","tags":{}},"n1820938367":{"id":"n1820938367","loc":[-85.1226011,42.0780902],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:28Z","tags":{}},"n1820938368":{"id":"n1820938368","loc":[-85.3229673,41.971129],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:28Z","tags":{}},"n1820938369":{"id":"n1820938369","loc":[-85.385334,42.0000056],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:28Z","tags":{}},"n1820938370":{"id":"n1820938370","loc":[-85.000098,42.0879094],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:28Z","tags":{}},"n1820938372":{"id":"n1820938372","loc":[-85.3852481,42.0025091],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:28Z","tags":{}},"n1820938373":{"id":"n1820938373","loc":[-85.3770513,41.9982515],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:28Z","tags":{}},"n1820938374":{"id":"n1820938374","loc":[-85.6278314,41.9405362],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:28Z","tags":{}},"n1820938375":{"id":"n1820938375","loc":[-85.6355133,41.9344068],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:28Z","tags":{}},"n1820938376":{"id":"n1820938376","loc":[-85.635642,41.9324753],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:28Z","tags":{}},"n1820938377":{"id":"n1820938377","loc":[-85.3154463,41.970778],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:28Z","tags":{}},"n1820938378":{"id":"n1820938378","loc":[-85.0920334,42.093411],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:28Z","tags":{}},"n1820938379":{"id":"n1820938379","loc":[-85.3269155,41.9722297],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:28Z","tags":{}},"n1820938381":{"id":"n1820938381","loc":[-85.1134334,42.0849184],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:28Z","tags":{}},"n1820938382":{"id":"n1820938382","loc":[-85.005968,42.088585],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:28Z","tags":{}},"n1820938384":{"id":"n1820938384","loc":[-85.1245203,42.0757183],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:28Z","tags":{}},"n1820938385":{"id":"n1820938385","loc":[-85.020704,42.0905396],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:28Z","tags":{}},"n1820938386":{"id":"n1820938386","loc":[-85.119585,42.0808984],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:28Z","tags":{}},"n1820938387":{"id":"n1820938387","loc":[-85.0072447,42.0880117],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:28Z","tags":{}},"n1820938388":{"id":"n1820938388","loc":[-85.2742908,41.9960273],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:28Z","tags":{}},"n1820938389":{"id":"n1820938389","loc":[-85.3275807,41.9696852],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:28Z","tags":{}},"n1820938390":{"id":"n1820938390","loc":[-85.2385635,42.0231556],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:28Z","tags":{}},"n1820938392":{"id":"n1820938392","loc":[-85.0202856,42.0900778],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:29Z","tags":{}},"n1820938393":{"id":"n1820938393","loc":[-85.2067847,42.0395398],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:29Z","tags":{}},"n1820938394":{"id":"n1820938394","loc":[-85.5183544,41.9713495],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:29Z","tags":{}},"n1820938396":{"id":"n1820938396","loc":[-85.5073037,41.9736787],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:29Z","tags":{}},"n1820938397":{"id":"n1820938397","loc":[-85.2519638,42.0114225],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:29Z","tags":{}},"n1820938398":{"id":"n1820938398","loc":[-85.287487,41.9793285],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:29Z","tags":{}},"n1820938399":{"id":"n1820938399","loc":[-85.2298088,42.0336431],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:29Z","tags":{}},"n1820938400":{"id":"n1820938400","loc":[-85.229444,42.0339141],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:29Z","tags":{}},"n1820938401":{"id":"n1820938401","loc":[-85.2421791,42.0220239],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:29Z","tags":{}},"n1820938402":{"id":"n1820938402","loc":[-85.2976687,41.9737612],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:29Z","tags":{}},"n1820938403":{"id":"n1820938403","loc":[-85.3622069,41.993473],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:29Z","tags":{}},"n1820938404":{"id":"n1820938404","loc":[-85.2465458,42.014906],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:29Z","tags":{}},"n1820938405":{"id":"n1820938405","loc":[-85.5724663,41.9639412],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:29Z","tags":{}},"n1820938406":{"id":"n1820938406","loc":[-85.3708501,41.9982037],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:29Z","tags":{}},"n1820938408":{"id":"n1820938408","loc":[-85.2564592,42.0055311],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:29Z","tags":{}},"n1820938409":{"id":"n1820938409","loc":[-85.1192846,42.0810856],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:29Z","tags":{}},"n1820938410":{"id":"n1820938410","loc":[-85.5623812,41.971663],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:29Z","tags":{}},"n1820938411":{"id":"n1820938411","loc":[-85.3221948,41.9719665],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:29Z","tags":{}},"n1820938412":{"id":"n1820938412","loc":[-85.5168738,41.9710305],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:29Z","tags":{}},"n1820938413":{"id":"n1820938413","loc":[-85.4546852,42.0061127],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:29Z","tags":{}},"n1820938414":{"id":"n1820938414","loc":[-85.5896153,41.9463617],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:29Z","tags":{}},"n1820938415":{"id":"n1820938415","loc":[-85.2978189,41.9722138],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:30Z","tags":{}},"n1820938416":{"id":"n1820938416","loc":[-85.1021681,42.0883581],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:30Z","tags":{}},"n1820938417":{"id":"n1820938417","loc":[-85.2797193,41.9912984],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:30Z","tags":{}},"n1820938419":{"id":"n1820938419","loc":[-85.2362461,42.0248533],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:30Z","tags":{}},"n1820938420":{"id":"n1820938420","loc":[-85.4833639,41.9846252],"version":"2","changeset":"12182679","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T07:37:01Z","tags":{}},"n1820938422":{"id":"n1820938422","loc":[-85.3281064,41.9689433],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:30Z","tags":{}},"n1820938424":{"id":"n1820938424","loc":[-85.2416963,42.0130088],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:30Z","tags":{}},"n1820938425":{"id":"n1820938425","loc":[-85.5718655,41.9564577],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:30Z","tags":{}},"n1820938426":{"id":"n1820938426","loc":[-85.0512812,42.1030701],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:30Z","tags":{}},"n1820938427":{"id":"n1820938427","loc":[-85.1273527,42.0723616],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:30Z","tags":{}},"n1820938428":{"id":"n1820938428","loc":[-85.0215033,42.0904083],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:30Z","tags":{}},"n1820938429":{"id":"n1820938429","loc":[-85.6169953,41.942228],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:30Z","tags":{}},"n1820938430":{"id":"n1820938430","loc":[-85.2829165,41.9907243],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:30Z","tags":{}},"n1820938431":{"id":"n1820938431","loc":[-85.2240796,42.0374203],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:30Z","tags":{}},"n1820938432":{"id":"n1820938432","loc":[-85.0167598,42.0898442],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:30Z","tags":{}},"n1820938433":{"id":"n1820938433","loc":[-85.2132649,42.0411334],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:30Z","tags":{}},"n1820938434":{"id":"n1820938434","loc":[-85.2293839,42.031513],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:30Z","tags":{}},"n1820938435":{"id":"n1820938435","loc":[-85.1203374,42.0792608],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:31Z","tags":{}},"n1820938436":{"id":"n1820938436","loc":[-85.109571,42.086268],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:31Z","tags":{}},"n1820938437":{"id":"n1820938437","loc":[-85.1079026,42.0853842],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:31Z","tags":{}},"n1820938438":{"id":"n1820938438","loc":[-85.109237,42.0862413],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:31Z","tags":{}},"n1820938439":{"id":"n1820938439","loc":[-85.2259936,42.0350831],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:31Z","tags":{}},"n1820938440":{"id":"n1820938440","loc":[-85.3669705,41.99679],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:31Z","tags":{}},"n1820938441":{"id":"n1820938441","loc":[-85.2418143,42.0223507],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:31Z","tags":{}},"n1820938442":{"id":"n1820938442","loc":[-85.3101248,41.9702515],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:31Z","tags":{}},"n1820938443":{"id":"n1820938443","loc":[-85.069315,42.1059688],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:31Z","tags":{}},"n1820938444":{"id":"n1820938444","loc":[-85.205862,42.0410378],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:31Z","tags":{}},"n1820938445":{"id":"n1820938445","loc":[-85.0388076,42.1036604],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:31Z","tags":{}},"n1820938446":{"id":"n1820938446","loc":[-85.2225389,42.0370115],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:31Z","tags":{}},"n1820938447":{"id":"n1820938447","loc":[-85.3241474,41.9719346],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:31Z","tags":{}},"n1820938448":{"id":"n1820938448","loc":[-85.3125496,41.9690789],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:31Z","tags":{}},"n1820938449":{"id":"n1820938449","loc":[-85.1146497,42.0857039],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:31Z","tags":{}},"n1820938450":{"id":"n1820938450","loc":[-85.1333944,42.0714963],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:31Z","tags":{}},"n1820938451":{"id":"n1820938451","loc":[-85.5619306,41.9720937],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:31Z","tags":{}},"n1820938452":{"id":"n1820938452","loc":[-85.2553651,42.0006479],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:31Z","tags":{}},"n1820938453":{"id":"n1820938453","loc":[-85.3151137,41.9710093],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:31Z","tags":{}},"n1820938454":{"id":"n1820938454","loc":[-85.2592315,41.9977947],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:31Z","tags":{}},"n1820938455":{"id":"n1820938455","loc":[-85.2655723,41.9995966],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:31Z","tags":{}},"n1820938456":{"id":"n1820938456","loc":[-85.4820652,41.9959233],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:32Z","tags":{}},"n1820938459":{"id":"n1820938459","loc":[-85.450737,42.0055068],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:32Z","tags":{}},"n1820938460":{"id":"n1820938460","loc":[-85.2428658,42.0205573],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:32Z","tags":{}},"n1820938461":{"id":"n1820938461","loc":[-85.0835576,42.1021559],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:32Z","tags":{}},"n1820938462":{"id":"n1820938462","loc":[-85.244636,42.0194733],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:32Z","tags":{}},"n1820938463":{"id":"n1820938463","loc":[-85.5702562,41.9581332],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:32Z","tags":{}},"n1820938465":{"id":"n1820938465","loc":[-85.5680031,41.9659515],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:32Z","tags":{}},"n1820938467":{"id":"n1820938467","loc":[-85.2798752,41.9948353],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:32Z","tags":{}},"n1820938468":{"id":"n1820938468","loc":[-85.0477407,42.1015537],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:32Z","tags":{}},"n1820938469":{"id":"n1820938469","loc":[-85.6403842,41.913732],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:32Z","tags":{}},"n1820938470":{"id":"n1820938470","loc":[-85.0396029,42.103289],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:32Z","tags":{}},"n1820938471":{"id":"n1820938471","loc":[-85.2824702,41.9907777],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:32Z","tags":{}},"n1820938472":{"id":"n1820938472","loc":[-85.2969284,41.9735538],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:32Z","tags":{}},"n1820938474":{"id":"n1820938474","loc":[-85.401041,42.0070853],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:32Z","tags":{}},"n1820938475":{"id":"n1820938475","loc":[-85.4116625,42.0073883],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:32Z","tags":{}},"n1820938476":{"id":"n1820938476","loc":[-85.0437764,42.1016214],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:32Z","tags":{}},"n1820938477":{"id":"n1820938477","loc":[-85.3643269,41.9958436],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:32Z","tags":{}},"n1820938478":{"id":"n1820938478","loc":[-85.3895182,42.0009465],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:32Z","tags":{}},"n1820938479":{"id":"n1820938479","loc":[-85.636157,41.9333373],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:32Z","tags":{}},"n1820938480":{"id":"n1820938480","loc":[-85.2811355,41.9858044],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:33Z","tags":{}},"n1820938481":{"id":"n1820938481","loc":[-85.0239052,42.092153],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:33Z","tags":{}},"n1820938482":{"id":"n1820938482","loc":[-85.2558798,42.0053557],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:33Z","tags":{}},"n1820938483":{"id":"n1820938483","loc":[-85.2544422,42.0047339],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:33Z","tags":{}},"n1820938484":{"id":"n1820938484","loc":[-85.4864683,41.9843183],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:33Z","tags":{}},"n1820938485":{"id":"n1820938485","loc":[-85.2554185,42.0031075],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:33Z","tags":{}},"n1820938486":{"id":"n1820938486","loc":[-85.3082795,41.9712486],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:33Z","tags":{}},"n1820938487":{"id":"n1820938487","loc":[-85.2433378,42.0133436],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:33Z","tags":{}},"n1820938488":{"id":"n1820938488","loc":[-85.0216696,42.0904162],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:33Z","tags":{}},"n1820938489":{"id":"n1820938489","loc":[-85.2546138,42.0050289],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:33Z","tags":{}},"n1820938490":{"id":"n1820938490","loc":[-85.2717521,41.9977349],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:33Z","tags":{}},"n1820938491":{"id":"n1820938491","loc":[-85.0100489,42.0908195],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:33Z","tags":{}},"n1820938492":{"id":"n1820938492","loc":[-85.207879,42.0392211],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:33Z","tags":{}},"n1820938493":{"id":"n1820938493","loc":[-85.0007363,42.0882836],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:33Z","tags":{}},"n1820938494":{"id":"n1820938494","loc":[-85.5775303,41.9504097],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:33Z","tags":{}},"n1820938495":{"id":"n1820938495","loc":[-85.1131584,42.0847683],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:33Z","tags":{}},"n1820938496":{"id":"n1820938496","loc":[-85.0887825,42.0941633],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:33Z","tags":{}},"n1820938497":{"id":"n1820938497","loc":[-85.1185926,42.0818938],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:33Z","tags":{}},"n1820938498":{"id":"n1820938498","loc":[-85.2748487,41.9948712],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:33Z","tags":{}},"n1820938499":{"id":"n1820938499","loc":[-85.2566952,42.0090788],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:33Z","tags":{}},"n1820938500":{"id":"n1820938500","loc":[-85.0774757,42.1036234],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:33Z","tags":{}},"n1820938501":{"id":"n1820938501","loc":[-85.4190869,42.008903],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:33Z","tags":{}},"n1820938502":{"id":"n1820938502","loc":[-85.1140395,42.0850577],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:33Z","tags":{}},"n1820938503":{"id":"n1820938503","loc":[-85.1136104,42.0848627],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:33Z","tags":{}},"n1820938504":{"id":"n1820938504","loc":[-85.5828089,41.9480638],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:33Z","tags":{}},"n1820938505":{"id":"n1820938505","loc":[-85.625514,41.9405202],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:33Z","tags":{}},"n1820938506":{"id":"n1820938506","loc":[-85.2063384,42.0398322],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:33Z","tags":{}},"n1820938507":{"id":"n1820938507","loc":[-85.3395476,41.9851636],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:33Z","tags":{}},"n1820938508":{"id":"n1820938508","loc":[-85.0328853,42.0963606],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:34Z","tags":{}},"n1820938510":{"id":"n1820938510","loc":[-85.1170369,42.0843702],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:34Z","tags":{}},"n1820938511":{"id":"n1820938511","loc":[-85.2784748,41.9868487],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:34Z","tags":{}},"n1820938512":{"id":"n1820938512","loc":[-85.6310501,41.9435528],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:34Z","tags":{}},"n1820938514":{"id":"n1820938514","loc":[-85.0334284,42.0981028],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:34Z","tags":{}},"n1820938515":{"id":"n1820938515","loc":[-84.9912091,42.0868226],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:34Z","tags":{}},"n1820938516":{"id":"n1820938516","loc":[-85.2806141,41.9940351],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:34Z","tags":{}},"n1820938517":{"id":"n1820938517","loc":[-85.1233025,42.0776734],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:34Z","tags":{}},"n1820938518":{"id":"n1820938518","loc":[-85.2047891,42.0429023],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:34Z","tags":{}},"n1820938519":{"id":"n1820938519","loc":[-85.1475443,42.0648312],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:34Z","tags":{}},"n1820938520":{"id":"n1820938520","loc":[-85.2644685,41.9990891],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:34Z","tags":{}},"n1820938521":{"id":"n1820938521","loc":[-85.1056281,42.0872553],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:34Z","tags":{}},"n1820938522":{"id":"n1820938522","loc":[-85.4813184,41.9930105],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:34Z","tags":{}},"n1820938523":{"id":"n1820938523","loc":[-85.321551,41.9722936],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:34Z","tags":{}},"n1820938524":{"id":"n1820938524","loc":[-85.1564664,42.0631211],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:34Z","tags":{}},"n1820938525":{"id":"n1820938525","loc":[-85.4149885,42.0079144],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:34Z","tags":{}},"n1820938527":{"id":"n1820938527","loc":[-85.2861888,41.9803653],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:34Z","tags":{}},"n1820938528":{"id":"n1820938528","loc":[-85.1301379,42.0682178],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:34Z","tags":{}},"n1820938529":{"id":"n1820938529","loc":[-85.4156537,42.0084247],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:34Z","tags":{}},"n1820938530":{"id":"n1820938530","loc":[-85.245151,42.0176082],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:34Z","tags":{}},"n1820938531":{"id":"n1820938531","loc":[-85.457818,42.0001651],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:34Z","tags":{}},"n1820938532":{"id":"n1820938532","loc":[-85.310951,41.9694538],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:35Z","tags":{}},"n1820938533":{"id":"n1820938533","loc":[-85.1509089,42.0611298],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:35Z","tags":{}},"n1820938534":{"id":"n1820938534","loc":[-85.1108249,42.086321],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:35Z","tags":{}},"n1820938535":{"id":"n1820938535","loc":[-85.1260344,42.0740687],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:35Z","tags":{}},"n1820938536":{"id":"n1820938536","loc":[-85.4561228,42.0042791],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:35Z","tags":{}},"n1820938537":{"id":"n1820938537","loc":[-85.2805082,41.9945761],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:35Z","tags":{}},"n1820938538":{"id":"n1820938538","loc":[-85.273352,41.9981921],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:35Z","tags":{}},"n1820938539":{"id":"n1820938539","loc":[-85.1084216,42.0864364],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:35Z","tags":{}},"n1820938540":{"id":"n1820938540","loc":[-85.5009737,41.9773637],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:35Z","tags":{}},"n1820938541":{"id":"n1820938541","loc":[-85.3960843,42.0051879],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:35Z","tags":{}},"n1820938542":{"id":"n1820938542","loc":[-85.3425088,41.9865034],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:35Z","tags":{}},"n1820938545":{"id":"n1820938545","loc":[-84.9937907,42.0860849],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:35Z","tags":{}},"n1820938546":{"id":"n1820938546","loc":[-85.1084176,42.086065],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:35Z","tags":{}},"n1820938547":{"id":"n1820938547","loc":[-85.3492851,41.9924786],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:35Z","tags":{}},"n1820938548":{"id":"n1820938548","loc":[-85.2512235,42.0101147],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:35Z","tags":{}},"n1820938549":{"id":"n1820938549","loc":[-85.3717298,41.9979326],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:35Z","tags":{}},"n1820938551":{"id":"n1820938551","loc":[-85.2573712,42.0064081],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:36Z","tags":{}},"n1820938552":{"id":"n1820938552","loc":[-85.2514596,42.010139],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:36Z","tags":{}},"n1820938553":{"id":"n1820938553","loc":[-85.416512,42.0088073],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:36Z","tags":{}},"n1820938554":{"id":"n1820938554","loc":[-85.4365964,42.0061606],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:36Z","tags":{}},"n1820938555":{"id":"n1820938555","loc":[-85.4552431,42.0057301],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:36Z","tags":{}},"n1820938556":{"id":"n1820938556","loc":[-85.2916283,41.9778769],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:36Z","tags":{}},"n1820938557":{"id":"n1820938557","loc":[-85.100709,42.0902968],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:36Z","tags":{}},"n1820938558":{"id":"n1820938558","loc":[-85.4703064,41.9965771],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:36Z","tags":{}},"n1820938559":{"id":"n1820938559","loc":[-85.3134722,41.9696134],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:36Z","tags":{}},"n1820938560":{"id":"n1820938560","loc":[-85.4834213,41.9885768],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:36Z","tags":{}},"n1820938561":{"id":"n1820938561","loc":[-85.2740641,41.9975236],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:36Z","tags":{}},"n1820938562":{"id":"n1820938562","loc":[-85.148334,42.0623405],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:36Z","tags":{}},"n1820938563":{"id":"n1820938563","loc":[-85.2358598,42.0263675],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:36Z","tags":{}},"n1820938565":{"id":"n1820938565","loc":[-85.2902979,41.9790892],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:36Z","tags":{}},"n1820938566":{"id":"n1820938566","loc":[-85.2528865,42.0112869],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:36Z","tags":{}},"n1820938567":{"id":"n1820938567","loc":[-85.2595319,41.9973003],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:36Z","tags":{}},"n1820938568":{"id":"n1820938568","loc":[-85.071151,42.105689],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:36Z","tags":{}},"n1820938570":{"id":"n1820938570","loc":[-85.299278,41.9732188],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:36Z","tags":{}},"n1820938571":{"id":"n1820938571","loc":[-85.0354669,42.1024771],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:36Z","tags":{}},"n1820938583":{"id":"n1820938583","loc":[-85.3313937,41.972562],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:36Z","tags":{}},"n1820938585":{"id":"n1820938585","loc":[-85.0756933,42.1058334],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:36Z","tags":{}},"n1820938587":{"id":"n1820938587","loc":[-85.3130324,41.9694219],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:36Z","tags":{}},"n1820938590":{"id":"n1820938590","loc":[-85.0934227,42.0931681],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:37Z","tags":{}},"n1820938592":{"id":"n1820938592","loc":[-85.3517956,41.9922553],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:37Z","tags":{}},"n1820938593":{"id":"n1820938593","loc":[-85.4023971,42.0065169],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:37Z","tags":{}},"n1820938594":{"id":"n1820938594","loc":[-85.3506798,41.9925583],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:37Z","tags":{}},"n1820938595":{"id":"n1820938595","loc":[-85.3673524,41.9971193],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:37Z","tags":{}},"n1820938596":{"id":"n1820938596","loc":[-85.1073608,42.0853523],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:37Z","tags":{}},"n1820938597":{"id":"n1820938597","loc":[-85.2976579,41.972477],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:37Z","tags":{}},"n1820938598":{"id":"n1820938598","loc":[-85.5616517,41.9694295],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:37Z","tags":{}},"n1820938599":{"id":"n1820938599","loc":[-85.3552074,41.9921915],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:37Z","tags":{}},"n1820938600":{"id":"n1820938600","loc":[-85.4665126,41.9999953],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:37Z","tags":{}},"n1820938601":{"id":"n1820938601","loc":[-85.2740695,41.9966226],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:37Z","tags":{}},"n1820938602":{"id":"n1820938602","loc":[-85.279376,41.9886669],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:37Z","tags":{}},"n1820938603":{"id":"n1820938603","loc":[-85.0771109,42.1040413],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:37Z","tags":{}},"n1820938604":{"id":"n1820938604","loc":[-85.2636049,41.9977895],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:37Z","tags":{}},"n1820938605":{"id":"n1820938605","loc":[-85.3762145,41.9976456],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:37Z","tags":{}},"n1820938606":{"id":"n1820938606","loc":[-85.2321369,42.0289577],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:37Z","tags":{}},"n1820938620":{"id":"n1820938620","loc":[-85.4947724,41.9776189],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:37Z","tags":{}},"n1820938622":{"id":"n1820938622","loc":[-85.1547069,42.0622768],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:37Z","tags":{}},"n1820938624":{"id":"n1820938624","loc":[-85.0005056,42.0880249],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:37Z","tags":{}},"n1820938626":{"id":"n1820938626","loc":[-85.0735596,42.1059357],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:37Z","tags":{}},"n1820938628":{"id":"n1820938628","loc":[-85.4665298,41.99932],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:37Z","tags":{}},"n1820938629":{"id":"n1820938629","loc":[-85.434515,42.0065273],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:37Z","tags":{}},"n1820938630":{"id":"n1820938630","loc":[-85.117462,42.0823823],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:37Z","tags":{}},"n1820938631":{"id":"n1820938631","loc":[-85.0131777,42.0890707],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:37Z","tags":{}},"n1820938632":{"id":"n1820938632","loc":[-85.0875326,42.0961934],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:37Z","tags":{}},"n1820938634":{"id":"n1820938634","loc":[-85.6433839,41.9112042],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:38Z","tags":{}},"n1820938635":{"id":"n1820938635","loc":[-85.1366181,42.064969],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:38Z","tags":{}},"n1820938636":{"id":"n1820938636","loc":[-85.073109,42.1057925],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:38Z","tags":{}},"n1820938638":{"id":"n1820938638","loc":[-85.161406,42.0632541],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:38Z","tags":{}},"n1820938640":{"id":"n1820938640","loc":[-85.6343932,41.9188845],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:38Z","tags":{}},"n1820938642":{"id":"n1820938642","loc":[-85.2500004,42.010306],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:38Z","tags":{}},"n1820938644":{"id":"n1820938644","loc":[-85.291918,41.9753166],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:38Z","tags":{}},"n1820938663":{"id":"n1820938663","loc":[-85.2841611,41.9916812],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:38Z","tags":{}},"n1820938664":{"id":"n1820938664","loc":[-85.1052955,42.0868134],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:38Z","tags":{}},"n1820938665":{"id":"n1820938665","loc":[-85.4606118,42.0005534],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:38Z","tags":{}},"n1820938666":{"id":"n1820938666","loc":[-85.5672736,41.9642922],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:38Z","tags":{}},"n1820938667":{"id":"n1820938667","loc":[-85.6348481,41.9316932],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:38Z","tags":{}},"n1820938668":{"id":"n1820938668","loc":[-85.0224904,42.0909576],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:38Z","tags":{}},"n1820938669":{"id":"n1820938669","loc":[-85.0133856,42.0899755],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:38Z","tags":{}},"n1820938670":{"id":"n1820938670","loc":[-85.344779,41.991139],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:38Z","tags":{}},"n1820938671":{"id":"n1820938671","loc":[-85.632874,41.9425313],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:38Z","tags":{}},"n1820938673":{"id":"n1820938673","loc":[-85.4941501,41.9779698],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:38Z","tags":{}},"n1820938675":{"id":"n1820938675","loc":[-85.0862559,42.0997519],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:38Z","tags":{}},"n1820938676":{"id":"n1820938676","loc":[-85.0097874,42.0898032],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:38Z","tags":{}},"n1820938678":{"id":"n1820938678","loc":[-84.9913553,42.0863675],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:38Z","tags":{}},"n1820938680":{"id":"n1820938680","loc":[-85.0533666,42.1038315],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:38Z","tags":{}},"n1820938682":{"id":"n1820938682","loc":[-85.2950294,41.9743914],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:38Z","tags":{}},"n1820938684":{"id":"n1820938684","loc":[-85.2517385,42.0104499],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:38Z","tags":{}},"n1820938686":{"id":"n1820938686","loc":[-85.0247971,42.0922514],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:38Z","tags":{}},"n1820938688":{"id":"n1820938688","loc":[-85.0807037,42.1026017],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:38Z","tags":{}},"n1820938690":{"id":"n1820938690","loc":[-85.52462,41.9722748],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:39Z","tags":{}},"n1820938694":{"id":"n1820938694","loc":[-85.2586535,41.9988818],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:39Z","tags":{}},"n1820938695":{"id":"n1820938695","loc":[-85.0931612,42.092948],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:39Z","tags":{}},"n1820938697":{"id":"n1820938697","loc":[-85.2470822,42.016564],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:39Z","tags":{}},"n1820938698":{"id":"n1820938698","loc":[-85.4143018,42.0075158],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:39Z","tags":{}},"n1820938699":{"id":"n1820938699","loc":[-85.0771484,42.104487],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:39Z","tags":{}},"n1820938700":{"id":"n1820938700","loc":[-85.0291208,42.0942775],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:39Z","tags":{}},"n1820938701":{"id":"n1820938701","loc":[-85.6367964,41.9185971],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:39Z","tags":{}},"n1820938702":{"id":"n1820938702","loc":[-85.085419,42.1010693],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:39Z","tags":{}},"n1820938703":{"id":"n1820938703","loc":[-85.0583877,42.1040584],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:39Z","tags":{}},"n1820938705":{"id":"n1820938705","loc":[-85.2573379,42.0003182],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:39Z","tags":{}},"n1820938706":{"id":"n1820938706","loc":[-85.2655937,41.9981575],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:39Z","tags":{}},"n1820938707":{"id":"n1820938707","loc":[-85.023181,42.0915758],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:39Z","tags":{}},"n1820938708":{"id":"n1820938708","loc":[-85.2318687,42.0274674],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:39Z","tags":{}},"n1820938709":{"id":"n1820938709","loc":[-85.1056389,42.0866184],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:39Z","tags":{}},"n1820938710":{"id":"n1820938710","loc":[-85.5276265,41.9700978],"version":"2","changeset":"12182668","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T07:35:33Z","tags":{}},"n1820938711":{"id":"n1820938711","loc":[-85.0864128,42.0945761],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:39Z","tags":{}},"n1820938712":{"id":"n1820938712","loc":[-84.9897071,42.0871888],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:39Z","tags":{}},"n1820938714":{"id":"n1820938714","loc":[-85.1328845,42.0665611],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:40Z","tags":{}},"n1820938715":{"id":"n1820938715","loc":[-85.0336537,42.0991377],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:40Z","tags":{}},"n1820938716":{"id":"n1820938716","loc":[-85.087597,42.0986692],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:40Z","tags":{}},"n1820938717":{"id":"n1820938717","loc":[-85.1241394,42.0761882],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:40Z","tags":{}},"n1820938718":{"id":"n1820938718","loc":[-85.1176002,42.0847723],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:40Z","tags":{}},"n1820938719":{"id":"n1820938719","loc":[-85.2423615,42.0216572],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:40Z","tags":{}},"n1820938721":{"id":"n1820938721","loc":[-85.2196378,42.0387908],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:40Z","tags":{}},"n1820938722":{"id":"n1820938722","loc":[-85.0164272,42.0890082],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:40Z","tags":{}},"n1820938723":{"id":"n1820938723","loc":[-85.5917182,41.9451807],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:40Z","tags":{}},"n1820938724":{"id":"n1820938724","loc":[-85.2458806,42.0086638],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:40Z","tags":{}},"n1820938725":{"id":"n1820938725","loc":[-85.1264474,42.0740527],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:40Z","tags":{}},"n1820938726":{"id":"n1820938726","loc":[-85.1961631,42.04738],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:40Z","tags":{}},"n1820938727":{"id":"n1820938727","loc":[-85.2784643,41.9943648],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:40Z","tags":{}},"n1820938728":{"id":"n1820938728","loc":[-85.2905554,41.9763216],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:40Z","tags":{}},"n1820938729":{"id":"n1820938729","loc":[-85.2913386,41.9771511],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:40Z","tags":{}},"n1820938730":{"id":"n1820938730","loc":[-85.0112519,42.0895683],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:40Z","tags":{}},"n1820938732":{"id":"n1820938732","loc":[-85.4290261,42.0064531],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:40Z","tags":{}},"n1820938733":{"id":"n1820938733","loc":[-85.3867073,42.0031629],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:41Z","tags":{}},"n1820938734":{"id":"n1820938734","loc":[-85.4943647,41.9836005],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:41Z","tags":{}},"n1820938735":{"id":"n1820938735","loc":[-85.4900303,41.9860728],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:41Z","tags":{}},"n1820938736":{"id":"n1820938736","loc":[-85.0866153,42.0944539],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:41Z","tags":{}},"n1820938737":{"id":"n1820938737","loc":[-85.0869532,42.0990911],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:41Z","tags":{}},"n1820938738":{"id":"n1820938738","loc":[-85.6321659,41.9208851],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:41Z","tags":{}},"n1820938739":{"id":"n1820938739","loc":[-85.5930485,41.9433453],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:41Z","tags":{}},"n1820938740":{"id":"n1820938740","loc":[-85.0406851,42.102733],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:41Z","tags":{}},"n1820938741":{"id":"n1820938741","loc":[-85.1051131,42.0869846],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:41Z","tags":{}},"n1820938742":{"id":"n1820938742","loc":[-85.1377554,42.0648893],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:41Z","tags":{}},"n1820938743":{"id":"n1820938743","loc":[-85.2795694,41.994604],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:41Z","tags":{}},"n1820938745":{"id":"n1820938745","loc":[-85.4948153,41.9826594],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:41Z","tags":{}},"n1820938746":{"id":"n1820938746","loc":[-85.4488916,42.0050923],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:41Z","tags":{}},"n1820938747":{"id":"n1820938747","loc":[-85.1052526,42.0866144],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:41Z","tags":{}},"n1820938748":{"id":"n1820938748","loc":[-85.1468749,42.0653991],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:41Z","tags":{}},"n1820938749":{"id":"n1820938749","loc":[-85.0856886,42.1006104],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:41Z","tags":{}},"n1820938750":{"id":"n1820938750","loc":[-85.2144022,42.0404004],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:41Z","tags":{}},"n1820938751":{"id":"n1820938751","loc":[-85.277771,41.9907458],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:41Z","tags":{}},"n1820938752":{"id":"n1820938752","loc":[-85.1474542,42.0636149],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:41Z","tags":{}},"n1820938753":{"id":"n1820938753","loc":[-85.0820515,42.1028075],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:41Z","tags":{}},"n1820938754":{"id":"n1820938754","loc":[-85.1122948,42.08525],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:41Z","tags":{}},"n1820938756":{"id":"n1820938756","loc":[-85.0173352,42.0901933],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:42Z","tags":{}},"n1820938757":{"id":"n1820938757","loc":[-85.2259721,42.0354018],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:42Z","tags":{}},"n1820938758":{"id":"n1820938758","loc":[-85.0872389,42.0987795],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:42Z","tags":{}},"n1820938759":{"id":"n1820938759","loc":[-85.2291436,42.031874],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:42Z","tags":{}},"n1820938760":{"id":"n1820938760","loc":[-85.3802485,42.0016002],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:42Z","tags":{}},"n1820938761":{"id":"n1820938761","loc":[-85.3945822,42.0057938],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:42Z","tags":{}},"n1820938762":{"id":"n1820938762","loc":[-85.5273237,41.9713017],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:42Z","tags":{}},"n1820938763":{"id":"n1820938763","loc":[-85.2868862,41.9798629],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:42Z","tags":{}},"n1820938764":{"id":"n1820938764","loc":[-85.2516677,42.0107899],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:42Z","tags":{}},"n1820938766":{"id":"n1820938766","loc":[-85.3183002,41.9693103],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:42Z","tags":{}},"n1820938768":{"id":"n1820938768","loc":[-85.2159042,42.0401932],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:42Z","tags":{}},"n1820938770":{"id":"n1820938770","loc":[-85.0094481,42.0911141],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:42Z","tags":{}},"n1820938771":{"id":"n1820938771","loc":[-85.0244538,42.0922155],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:42Z","tags":{}},"n1820938772":{"id":"n1820938772","loc":[-85.231697,42.028862],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:42Z","tags":{}},"n1820938773":{"id":"n1820938773","loc":[-85.2102394,42.0390617],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:42Z","tags":{}},"n1820938774":{"id":"n1820938774","loc":[-85.2463419,42.0151212],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:42Z","tags":{}},"n1820938775":{"id":"n1820938775","loc":[-85.0726195,42.1056424],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:42Z","tags":{}},"n1820938776":{"id":"n1820938776","loc":[-85.0060431,42.0883262],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:42Z","tags":{}},"n1820938778":{"id":"n1820938778","loc":[-85.425889,42.0056982],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:42Z","tags":{}},"n1820938779":{"id":"n1820938779","loc":[-85.1183042,42.0820638],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:42Z","tags":{}},"n1820938780":{"id":"n1820938780","loc":[-85.441596,42.0058257],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:43Z","tags":{}},"n1820938781":{"id":"n1820938781","loc":[-85.1124879,42.0847086],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:43Z","tags":{}},"n1820938782":{"id":"n1820938782","loc":[-85.2452733,42.0153894],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:43Z","tags":{}},"n1820938783":{"id":"n1820938783","loc":[-85.2741191,41.9969244],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:43Z","tags":{}},"n1820938784":{"id":"n1820938784","loc":[-85.2829487,41.9822236],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:43Z","tags":{}},"n1820938785":{"id":"n1820938785","loc":[-85.3202743,41.972142],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:43Z","tags":{}},"n1820938786":{"id":"n1820938786","loc":[-85.2345402,42.0266465],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:43Z","tags":{}},"n1820938787":{"id":"n1820938787","loc":[-85.3037626,41.9724611],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:43Z","tags":{}},"n1820938789":{"id":"n1820938789","loc":[-85.2474792,42.0161973],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:43Z","tags":{}},"n1820938790":{"id":"n1820938790","loc":[-85.2951045,41.9727323],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:43Z","tags":{}},"n1820938791":{"id":"n1820938791","loc":[-85.322345,41.9712726],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:43Z","tags":{}},"n1820938792":{"id":"n1820938792","loc":[-85.2402372,42.0110394],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:43Z","tags":{}},"n1820938793":{"id":"n1820938793","loc":[-85.5135693,41.9698659],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:43Z","tags":{}},"n1820938794":{"id":"n1820938794","loc":[-85.4695339,41.9967366],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:43Z","tags":{}},"n1820938796":{"id":"n1820938796","loc":[-85.0418492,42.1011131],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:43Z","tags":{}},"n1820938797":{"id":"n1820938797","loc":[-85.3334107,41.9806337],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:43Z","tags":{}},"n1820938798":{"id":"n1820938798","loc":[-85.5625314,41.9711685],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:43Z","tags":{}},"n1820938799":{"id":"n1820938799","loc":[-85.3755707,41.9973585],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:43Z","tags":{}},"n1820938800":{"id":"n1820938800","loc":[-85.5227532,41.9722429],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:43Z","tags":{}},"n1820938801":{"id":"n1820938801","loc":[-85.4267687,42.0052836],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:43Z","tags":{}},"n1820938803":{"id":"n1820938803","loc":[-85.0284704,42.0940837],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:43Z","tags":{}},"n1820938804":{"id":"n1820938804","loc":[-85.015585,42.0885305],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:43Z","tags":{}},"n1820938805":{"id":"n1820938805","loc":[-85.0765905,42.1053865],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:43Z","tags":{}},"n1820938806":{"id":"n1820938806","loc":[-85.2614953,41.9964551],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:43Z","tags":{}},"n1820938808":{"id":"n1820938808","loc":[-85.0307355,42.0947313],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:44Z","tags":{}},"n1820938810":{"id":"n1820938810","loc":[-85.3894753,42.0003565],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:44Z","tags":{}},"n1820938812":{"id":"n1820938812","loc":[-85.0868848,42.095006],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:44Z","tags":{}},"n1820938813":{"id":"n1820938813","loc":[-85.3854198,42.0009465],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:44Z","tags":{}},"n1820938814":{"id":"n1820938814","loc":[-85.2659692,41.9993534],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:44Z","tags":{}},"n1820938815":{"id":"n1820938815","loc":[-85.1234259,42.0765266],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:44Z","tags":{}},"n1820938816":{"id":"n1820938816","loc":[-85.1426906,42.0648893],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:44Z","tags":{}},"n1820938818":{"id":"n1820938818","loc":[-85.1014533,42.0893067],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:44Z","tags":{}},"n1820938819":{"id":"n1820938819","loc":[-85.0883064,42.098067],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:44Z","tags":{}},"n1820938820":{"id":"n1820938820","loc":[-85.0503156,42.102704],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:44Z","tags":{}},"n1820938821":{"id":"n1820938821","loc":[-85.1179649,42.0821884],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:44Z","tags":{}},"n1820938822":{"id":"n1820938822","loc":[-85.3484697,41.9921596],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:44Z","tags":{}},"n1820938823":{"id":"n1820938823","loc":[-85.3732962,41.9970874],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:44Z","tags":{}},"n1820938824":{"id":"n1820938824","loc":[-85.2784104,41.9898312],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:44Z","tags":{}},"n1820938825":{"id":"n1820938825","loc":[-85.4441709,42.0052198],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:44Z","tags":{}},"n1820938826":{"id":"n1820938826","loc":[-85.3925438,42.0038326],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:44Z","tags":{}},"n1820938829":{"id":"n1820938829","loc":[-85.5717582,41.9621861],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:44Z","tags":{}},"n1820938830":{"id":"n1820938830","loc":[-85.0866314,42.0995051],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:45Z","tags":{}},"n1820938831":{"id":"n1820938831","loc":[-85.576672,41.9522769],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:45Z","tags":{}},"n1820938832":{"id":"n1820938832","loc":[-85.1587238,42.0636205],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:45Z","tags":{}},"n1820938833":{"id":"n1820938833","loc":[-85.3804245,41.9999155],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:45Z","tags":{}},"n1820938834":{"id":"n1820938834","loc":[-85.280083,41.9948843],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:45Z","tags":{}},"n1820938836":{"id":"n1820938836","loc":[-85.561892,41.9686693],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:45Z","tags":{}},"n1820938837":{"id":"n1820938837","loc":[-85.0158975,42.0885253],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:45Z","tags":{}},"n1820938838":{"id":"n1820938838","loc":[-85.4248204,42.007633],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:45Z","tags":{}},"n1820938839":{"id":"n1820938839","loc":[-85.0352738,42.1039657],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:45Z","tags":{}},"n1820938840":{"id":"n1820938840","loc":[-85.211956,42.0411812],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:45Z","tags":{}},"n1820938841":{"id":"n1820938841","loc":[-85.4816575,41.9908997],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:45Z","tags":{}},"n1820938842":{"id":"n1820938842","loc":[-85.3807635,42.0020308],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:45Z","tags":{}},"n1820938843":{"id":"n1820938843","loc":[-85.0100865,42.0898521],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:45Z","tags":{}},"n1820938844":{"id":"n1820938844","loc":[-85.0103936,42.0897434],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:45Z","tags":{}},"n1820938848":{"id":"n1820938848","loc":[-85.2430052,42.0131363],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:45Z","tags":{}},"n1820938849":{"id":"n1820938849","loc":[-85.112559,42.0853723],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:45Z","tags":{}},"n1820938851":{"id":"n1820938851","loc":[-85.3641553,41.9952535],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:46Z","tags":{}},"n1820938852":{"id":"n1820938852","loc":[-85.2087373,42.0390777],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:46Z","tags":{}},"n1820938853":{"id":"n1820938853","loc":[-85.2473933,42.0148263],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:46Z","tags":{}},"n1820938854":{"id":"n1820938854","loc":[-85.0213464,42.090509],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:46Z","tags":{}},"n1820938855":{"id":"n1820938855","loc":[-85.0673208,42.1052353],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:46Z","tags":{}},"n1820938856":{"id":"n1820938856","loc":[-85.1003053,42.0905528],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:46Z","tags":{}},"n1820938857":{"id":"n1820938857","loc":[-85.2617367,41.9965389],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:46Z","tags":{}},"n1820938858":{"id":"n1820938858","loc":[-85.280363,41.9916015],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:46Z","tags":{}},"n1820938859":{"id":"n1820938859","loc":[-85.0038866,42.0873469],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:46Z","tags":{}},"n1820938860":{"id":"n1820938860","loc":[-85.2476401,42.0151451],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:46Z","tags":{}},"n1820938861":{"id":"n1820938861","loc":[-85.193717,42.0499294],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:46Z","tags":{}},"n1820938862":{"id":"n1820938862","loc":[-85.3478689,41.9917609],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:46Z","tags":{}},"n1820938863":{"id":"n1820938863","loc":[-85.5638017,41.9648881],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:46Z","tags":{}},"n1820938864":{"id":"n1820938864","loc":[-85.4356308,42.0064476],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:46Z","tags":{}},"n1820938865":{"id":"n1820938865","loc":[-85.0561722,42.1023509],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:46Z","tags":{}},"n1820938867":{"id":"n1820938867","loc":[-85.2256031,42.0356034],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:46Z","tags":{}},"n1820938868":{"id":"n1820938868","loc":[-85.6102576,41.9420844],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:46Z","tags":{}},"n1820938869":{"id":"n1820938869","loc":[-85.2285213,42.0339938],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:46Z","tags":{}},"n1820938870":{"id":"n1820938870","loc":[-85.0326238,42.0978003],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:47Z","tags":{}},"n1820938871":{"id":"n1820938871","loc":[-85.0131389,42.0903736],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:47Z","tags":{}},"n1820938872":{"id":"n1820938872","loc":[-85.2550859,42.0012259],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:47Z","tags":{}},"n1820938873":{"id":"n1820938873","loc":[-85.1130029,42.0846966],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:47Z","tags":{}},"n1820938874":{"id":"n1820938874","loc":[-85.1579041,42.06336],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:47Z","tags":{}},"n1820938875":{"id":"n1820938875","loc":[-85.0430522,42.1020234],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:47Z","tags":{}},"n1820938876":{"id":"n1820938876","loc":[-85.2786679,41.9865935],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:47Z","tags":{}},"n1820938877":{"id":"n1820938877","loc":[-85.1221666,42.0788706],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:47Z","tags":{}},"n1820938878":{"id":"n1820938878","loc":[-85.2554614,42.0103303],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:47Z","tags":{}},"n1820938879":{"id":"n1820938879","loc":[-85.2349801,42.0265748],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:47Z","tags":{}},"n1820938880":{"id":"n1820938880","loc":[-85.0997434,42.0907864],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:47Z","tags":{}},"n1820938881":{"id":"n1820938881","loc":[-85.0045464,42.0878167],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:47Z","tags":{}},"n1820938882":{"id":"n1820938882","loc":[-85.2728048,41.9982519],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:47Z","tags":{}},"n1820938883":{"id":"n1820938883","loc":[-85.3111333,41.9691587],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:47Z","tags":{}},"n1820938884":{"id":"n1820938884","loc":[-85.3219802,41.9721899],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:47Z","tags":{}},"n1820938885":{"id":"n1820938885","loc":[-85.3091378,41.9699325],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:47Z","tags":{}},"n1820938887":{"id":"n1820938887","loc":[-85.4242367,42.0085203],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:47Z","tags":{}},"n1820938888":{"id":"n1820938888","loc":[-84.9968377,42.0874504],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:47Z","tags":{}},"n1820938890":{"id":"n1820938890","loc":[-85.5443139,41.9714078],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:48Z","tags":{}},"n1820938891":{"id":"n1820938891","loc":[-85.6404013,41.9154676],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:48Z","tags":{}},"n1820938892":{"id":"n1820938892","loc":[-85.3644986,41.9962582],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:48Z","tags":{}},"n1820938893":{"id":"n1820938893","loc":[-85.0496772,42.1018323],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:48Z","tags":{}},"n1820938894":{"id":"n1820938894","loc":[-85.297261,41.9737373],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:48Z","tags":{}},"n1820938895":{"id":"n1820938895","loc":[-85.0327096,42.098071],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:48Z","tags":{}},"n1820938896":{"id":"n1820938896","loc":[-85.3856773,41.9996867],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:48Z","tags":{}},"n1820938897":{"id":"n1820938897","loc":[-85.0493862,42.1015509],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:48Z","tags":{}},"n1820938898":{"id":"n1820938898","loc":[-84.9969879,42.0876614],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:48Z","tags":{}},"n1820938899":{"id":"n1820938899","loc":[-85.0848625,42.1013587],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:48Z","tags":{}},"n1820938900":{"id":"n1820938900","loc":[-85.5853195,41.9479201],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:48Z","tags":{}},"n1820938901":{"id":"n1820938901","loc":[-85.6329169,41.9387964],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:48Z","tags":{}},"n1820938902":{"id":"n1820938902","loc":[-85.0843046,42.1029468],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:48Z","tags":{}},"n1820938903":{"id":"n1820938903","loc":[-85.1228747,42.0778474],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:48Z","tags":{}},"n1820938904":{"id":"n1820938904","loc":[-85.4855456,41.984095],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:48Z","tags":{}},"n1820938905":{"id":"n1820938905","loc":[-85.0573269,42.1026801],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:48Z","tags":{}},"n1820938906":{"id":"n1820938906","loc":[-85.2425868,42.0131523],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:48Z","tags":{}},"n1820938907":{"id":"n1820938907","loc":[-85.1149622,42.0860053],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:48Z","tags":{}},"n1820938908":{"id":"n1820938908","loc":[-85.4833097,41.9951578],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:48Z","tags":{}},"n1820938909":{"id":"n1820938909","loc":[-85.075979,42.1056372],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:48Z","tags":{}},"n1820938910":{"id":"n1820938910","loc":[-85.0338509,42.0977139],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:48Z","tags":{}},"n1820938911":{"id":"n1820938911","loc":[-85.6384272,41.9115715],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:48Z","tags":{}},"n1820938912":{"id":"n1820938912","loc":[-85.0458363,42.1004074],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:48Z","tags":{}},"n1820938913":{"id":"n1820938913","loc":[-85.0592138,42.1048305],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:48Z","tags":{}},"n1820938914":{"id":"n1820938914","loc":[-85.2807493,41.9916653],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:49Z","tags":{}},"n1820938915":{"id":"n1820938915","loc":[-85.1103274,42.0864193],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:49Z","tags":{}},"n1820938916":{"id":"n1820938916","loc":[-85.6267156,41.9404404],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:49Z","tags":{}},"n1820938918":{"id":"n1820938918","loc":[-85.0331374,42.0982911],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:49Z","tags":{}},"n1820938919":{"id":"n1820938919","loc":[-85.5637331,41.965409],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:49Z","tags":{}},"n1820938920":{"id":"n1820938920","loc":[-85.5457515,41.9714237],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:49Z","tags":{}},"n1820938922":{"id":"n1820938922","loc":[-85.082073,42.1030104],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:49Z","tags":{}},"n1820938923":{"id":"n1820938923","loc":[-85.0780765,42.103102],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:49Z","tags":{}},"n1820938924":{"id":"n1820938924","loc":[-85.4208035,42.0089508],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:49Z","tags":{}},"n1820938925":{"id":"n1820938925","loc":[-85.3469934,41.9914795],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:49Z","tags":{}},"n1820938926":{"id":"n1820938926","loc":[-85.0322,42.095619],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:49Z","tags":{}},"n1820938927":{"id":"n1820938927","loc":[-85.4784431,41.9949401],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:49Z","tags":{}},"n1820938928":{"id":"n1820938928","loc":[-85.1303095,42.0667523],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:49Z","tags":{}},"n1820938929":{"id":"n1820938929","loc":[-85.2463784,42.0084781],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:49Z","tags":{}},"n1820938930":{"id":"n1820938930","loc":[-85.6299986,41.9427707],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:49Z","tags":{}},"n1820938931":{"id":"n1820938931","loc":[-85.6325907,41.9238499],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:49Z","tags":{}},"n1820938932":{"id":"n1820938932","loc":[-85.4808464,41.9914476],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:49Z","tags":{}},"n1820938934":{"id":"n1820938934","loc":[-85.2411599,42.0105292],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:49Z","tags":{}},"n1820938935":{"id":"n1820938935","loc":[-85.0163213,42.0892379],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:49Z","tags":{}},"n1820938936":{"id":"n1820938936","loc":[-85.3290934,41.9682322],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:49Z","tags":{}},"n1820938937":{"id":"n1820938937","loc":[-85.4925623,41.9853231],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:49Z","tags":{}},"n1820938938":{"id":"n1820938938","loc":[-85.0338294,42.09892],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:50Z","tags":{}},"n1820938940":{"id":"n1820938940","loc":[-85.4174561,42.008903],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:50Z","tags":{}},"n1820938941":{"id":"n1820938941","loc":[-85.1165595,42.0838845],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:50Z","tags":{}},"n1820938942":{"id":"n1820938942","loc":[-85.2954585,41.9717192],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:50Z","tags":{}},"n1820938943":{"id":"n1820938943","loc":[-85.6330199,41.9257338],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:50Z","tags":{}},"n1820938944":{"id":"n1820938944","loc":[-85.2294654,42.0324478],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:50Z","tags":{}},"n1820938945":{"id":"n1820938945","loc":[-85.5601282,41.9728914],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:50Z","tags":{}},"n1820938946":{"id":"n1820938946","loc":[-85.1176324,42.08568],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:50Z","tags":{}},"n1820938947":{"id":"n1820938947","loc":[-85.0210245,42.0906005],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:50Z","tags":{}},"n1820938948":{"id":"n1820938948","loc":[-85.0251887,42.09253],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:50Z","tags":{}},"n1820938949":{"id":"n1820938949","loc":[-85.0895832,42.0939551],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:50Z","tags":{}},"n1820938950":{"id":"n1820938950","loc":[-84.9915109,42.085842],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:50Z","tags":{}},"n1820938951":{"id":"n1820938951","loc":[-85.2187366,42.0393486],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:50Z","tags":{}},"n1820938952":{"id":"n1820938952","loc":[-85.006605,42.087579],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:50Z","tags":{}},"n1820938953":{"id":"n1820938953","loc":[-85.046641,42.1012393],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:50Z","tags":{}},"n1820938954":{"id":"n1820938954","loc":[-85.052102,42.103695],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:50Z","tags":{}},"n1820938955":{"id":"n1820938955","loc":[-85.283925,41.9912825],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:50Z","tags":{}},"n1820938956":{"id":"n1820938956","loc":[-85.2326626,42.0316349],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:50Z","tags":{}},"n1820938957":{"id":"n1820938957","loc":[-85.1174298,42.0859694],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:50Z","tags":{}},"n1820938958":{"id":"n1820938958","loc":[-85.3802056,41.9994794],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:50Z","tags":{}},"n1820938959":{"id":"n1820938959","loc":[-85.4586334,41.9999737],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:50Z","tags":{}},"n1820938960":{"id":"n1820938960","loc":[-85.4302234,42.0069418],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:50Z","tags":{}},"n1820938961":{"id":"n1820938961","loc":[-85.092201,42.0930674],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:50Z","tags":{}},"n1820938962":{"id":"n1820938962","loc":[-85.3684511,41.9979382],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:50Z","tags":{}},"n1820938963":{"id":"n1820938963","loc":[-85.4618735,42.0011856],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:50Z","tags":{}},"n1820938964":{"id":"n1820938964","loc":[-85.4828205,41.9877793],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:50Z","tags":{}},"n1820938965":{"id":"n1820938965","loc":[-85.0837789,42.1025726],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:51Z","tags":{}},"n1820938966":{"id":"n1820938966","loc":[-85.0176195,42.090253],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:51Z","tags":{}},"n1820938967":{"id":"n1820938967","loc":[-85.3801627,42.001074],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:51Z","tags":{}},"n1820938968":{"id":"n1820938968","loc":[-85.4767007,41.994488],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:51Z","tags":{}},"n1820938969":{"id":"n1820938969","loc":[-85.274268,41.9957495],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:51Z","tags":{}},"n1820938970":{"id":"n1820938970","loc":[-85.2977438,41.9719506],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:51Z","tags":{}},"n1820938971":{"id":"n1820938971","loc":[-85.2425546,42.0208682],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:51Z","tags":{}},"n1820938972":{"id":"n1820938972","loc":[-85.2557082,42.002382],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:51Z","tags":{}},"n1820938973":{"id":"n1820938973","loc":[-85.3187937,41.9691986],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:51Z","tags":{}},"n1820938975":{"id":"n1820938975","loc":[-85.2448077,42.0153045],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:51Z","tags":{}},"n1820938977":{"id":"n1820938977","loc":[-85.0343015,42.0997718],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:51Z","tags":{}},"n1820938978":{"id":"n1820938978","loc":[-85.2449364,42.01874],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:51Z","tags":{}},"n1820938979":{"id":"n1820938979","loc":[-85.2598391,41.9969602],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:51Z","tags":{}},"n1820938980":{"id":"n1820938980","loc":[-85.4294724,42.0067665],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:51Z","tags":{}},"n1820938981":{"id":"n1820938981","loc":[-85.428082,42.0055124],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:51Z","tags":{}},"n1820938983":{"id":"n1820938983","loc":[-85.5436315,41.9717484],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:51Z","tags":{}},"n1820938985":{"id":"n1820938985","loc":[-85.5978336,41.9407437],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:51Z","tags":{}},"n1820938986":{"id":"n1820938986","loc":[-85.491661,41.9860249],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:51Z","tags":{}},"n1820938987":{"id":"n1820938987","loc":[-85.4942789,41.9801392],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:51Z","tags":{}},"n1820938988":{"id":"n1820938988","loc":[-85.0416306,42.1010841],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:52Z","tags":{}},"n1820938989":{"id":"n1820938989","loc":[-85.2653644,41.9984433],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:52Z","tags":{}},"n1820938990":{"id":"n1820938990","loc":[-85.1028266,42.0881124],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:52Z","tags":{}},"n1820938991":{"id":"n1820938991","loc":[-85.0163146,42.0887932],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:52Z","tags":{}},"n1820938992":{"id":"n1820938992","loc":[-85.5282209,41.9678112],"version":"2","changeset":"12182668","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T07:35:33Z","tags":{}},"n1820938993":{"id":"n1820938993","loc":[-85.5442752,41.9715888],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:52Z","tags":{}},"n1820938994":{"id":"n1820938994","loc":[-85.5634327,41.9658558],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:52Z","tags":{}},"n1820938995":{"id":"n1820938995","loc":[-85.0384227,42.1037627],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:52Z","tags":{}},"n1820938996":{"id":"n1820938996","loc":[-85.1144258,42.0854439],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:52Z","tags":{}},"n1820938997":{"id":"n1820938997","loc":[-85.1870651,42.0506305],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:52Z","tags":{}},"n1820938998":{"id":"n1820938998","loc":[-85.1256159,42.0747376],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:52Z","tags":{}},"n1820938999":{"id":"n1820938999","loc":[-85.3272695,41.9715836],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:52Z","tags":{}},"n1820939000":{"id":"n1820939000","loc":[-85.0543067,42.103098],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:52Z","tags":{}},"n1820939001":{"id":"n1820939001","loc":[-85.4678173,41.9973585],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:52Z","tags":{}},"n1820939003":{"id":"n1820939003","loc":[-85.0266626,42.0933154],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:52Z","tags":{}},"n1820939004":{"id":"n1820939004","loc":[-85.0353046,42.1019728],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:52Z","tags":{}},"n1820939005":{"id":"n1820939005","loc":[-85.1237961,42.0762798],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:52Z","tags":{}},"n1820939006":{"id":"n1820939006","loc":[-85.2812214,41.9826702],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:52Z","tags":{}},"n1820939007":{"id":"n1820939007","loc":[-85.2927763,41.9747343],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:53Z","tags":{}},"n1820939008":{"id":"n1820939008","loc":[-85.3270979,41.9720862],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:53Z","tags":{}},"n1820939009":{"id":"n1820939009","loc":[-85.488657,41.9856581],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:53Z","tags":{}},"n1820939010":{"id":"n1820939010","loc":[-85.3087301,41.9701399],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:53Z","tags":{}},"n1820939011":{"id":"n1820939011","loc":[-85.0276939,42.093768],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:53Z","tags":{}},"n1820939012":{"id":"n1820939012","loc":[-85.2956516,41.9748779],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:53Z","tags":{}},"n1820939013":{"id":"n1820939013","loc":[-85.1298579,42.0726443],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:53Z","tags":{}},"n1820939014":{"id":"n1820939014","loc":[-85.105144,42.0870893],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:53Z","tags":{}},"n1820939015":{"id":"n1820939015","loc":[-85.0677486,42.1053917],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:53Z","tags":{}},"n1820939016":{"id":"n1820939016","loc":[-85.0333681,42.0993459],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:53Z","tags":{}},"n1820939017":{"id":"n1820939017","loc":[-85.6384272,41.910805],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:53Z","tags":{}},"n1820939018":{"id":"n1820939018","loc":[-85.399496,42.006894],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:53Z","tags":{}},"n1820939019":{"id":"n1820939019","loc":[-85.2648427,41.9998318],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:53Z","tags":{}},"n1820939020":{"id":"n1820939020","loc":[-85.1237424,42.0766779],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:53Z","tags":{}},"n1820939021":{"id":"n1820939021","loc":[-85.2515025,42.0109442],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:53Z","tags":{}},"n1820939022":{"id":"n1820939022","loc":[-85.5566306,41.9718385],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:53Z","tags":{}},"n1820939023":{"id":"n1820939023","loc":[-85.090644,42.0938369],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:53Z","tags":{}},"n1820939024":{"id":"n1820939024","loc":[-85.1245525,42.074914],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:53Z","tags":{}},"n1820939025":{"id":"n1820939025","loc":[-85.1099934,42.0863926],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:53Z","tags":{}},"n1820939026":{"id":"n1820939026","loc":[-85.1251653,42.0744589],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:53Z","tags":{}},"n1820939027":{"id":"n1820939027","loc":[-85.401792,42.0068143],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:54Z","tags":{}},"n1820939028":{"id":"n1820939028","loc":[-85.0094763,42.0899584],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:54Z","tags":{}},"n1820939029":{"id":"n1820939029","loc":[-85.1330779,42.0705605],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:54Z","tags":{}},"n1820939030":{"id":"n1820939030","loc":[-85.4935064,41.984398],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:54Z","tags":{}},"n1820939031":{"id":"n1820939031","loc":[-85.5713334,41.9613939],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:54Z","tags":{}},"n1820939032":{"id":"n1820939032","loc":[-85.0873945,42.0964669],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:54Z","tags":{}},"n1820939033":{"id":"n1820939033","loc":[-85.0886497,42.0986481],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:54Z","tags":{}},"n1820939034":{"id":"n1820939034","loc":[-85.3276343,41.9758897],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:54Z","tags":{}},"n1820939035":{"id":"n1820939035","loc":[-85.1304386,42.0727387],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:54Z","tags":{}},"n1820939036":{"id":"n1820939036","loc":[-85.2551932,42.0052999],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:54Z","tags":{}},"n1820939037":{"id":"n1820939037","loc":[-85.2206936,42.0384458],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:54Z","tags":{}},"n1820939038":{"id":"n1820939038","loc":[-85.2313645,42.0286389],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:54Z","tags":{}},"n1820939039":{"id":"n1820939039","loc":[-85.0754586,42.1059835],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:54Z","tags":{}},"n1820939040":{"id":"n1820939040","loc":[-85.0663324,42.1050812],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:54Z","tags":{}},"n1820939041":{"id":"n1820939041","loc":[-85.2406234,42.0106887],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:54Z","tags":{}},"n1820939042":{"id":"n1820939042","loc":[-85.0685962,42.1058175],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:54Z","tags":{}},"n1820939043":{"id":"n1820939043","loc":[-85.0689462,42.1059437],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:54Z","tags":{}},"n1820939044":{"id":"n1820939044","loc":[-85.0586144,42.1046144],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:54Z","tags":{}},"n1820939045":{"id":"n1820939045","loc":[-85.3650565,41.9965452],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:54Z","tags":{}},"n1820939047":{"id":"n1820939047","loc":[-85.5752558,41.9536014],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:54Z","tags":{}},"n1820939048":{"id":"n1820939048","loc":[-85.5110159,41.9710624],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:55Z","tags":{}},"n1820939050":{"id":"n1820939050","loc":[-85.2832641,41.9926477],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:55Z","tags":{}},"n1820939051":{"id":"n1820939051","loc":[-85.0078402,42.0898947],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:55Z","tags":{}},"n1820939052":{"id":"n1820939052","loc":[-85.3882737,42.0017916],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:55Z","tags":{}},"n1820939053":{"id":"n1820939053","loc":[-85.1718945,42.0564937],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:55Z","tags":{}},"n1820939054":{"id":"n1820939054","loc":[-85.0947048,42.0929293],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:55Z","tags":{}},"n1820939055":{"id":"n1820939055","loc":[-85.4456944,42.0051082],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:55Z","tags":{}},"n1820939056":{"id":"n1820939056","loc":[-85.3139872,41.9706903],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:55Z","tags":{}},"n1820939057":{"id":"n1820939057","loc":[-85.3893895,42.0034021],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:55Z","tags":{}},"n1820939058":{"id":"n1820939058","loc":[-85.2425332,42.0106089],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:55Z","tags":{}},"n1820939059":{"id":"n1820939059","loc":[-85.6085624,41.9420844],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:55Z","tags":{}},"n1820939060":{"id":"n1820939060","loc":[-85.210411,42.0397789],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:55Z","tags":{}},"n1820939061":{"id":"n1820939061","loc":[-85.2762542,41.9960473],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:55Z","tags":{}},"n1820939062":{"id":"n1820939062","loc":[-85.4686584,41.9969973],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:55Z","tags":{}},"n1820939063":{"id":"n1820939063","loc":[-85.3860421,42.0018394],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:55Z","tags":{}},"n1820939064":{"id":"n1820939064","loc":[-85.5636944,41.9644414],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:55Z","tags":{}},"n1820939065":{"id":"n1820939065","loc":[-85.3267331,41.9766554],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:55Z","tags":{}},"n1820939066":{"id":"n1820939066","loc":[-85.0868996,42.0943822],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:55Z","tags":{}},"n1820939067":{"id":"n1820939067","loc":[-85.104861,42.0880038],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:55Z","tags":{}},"n1820939068":{"id":"n1820939068","loc":[-85.5537123,41.9695093],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:55Z","tags":{}},"n1820939069":{"id":"n1820939069","loc":[-85.6325092,41.9396743],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:55Z","tags":{}},"n1820939070":{"id":"n1820939070","loc":[-85.3869648,42.0024454],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:55Z","tags":{}},"n1820939071":{"id":"n1820939071","loc":[-85.2775349,41.9957335],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:55Z","tags":{}},"n1820939072":{"id":"n1820939072","loc":[-85.2055616,42.0421533],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:56Z","tags":{}},"n1820939073":{"id":"n1820939073","loc":[-85.4731431,41.9946531],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:56Z","tags":{}},"n1820939074":{"id":"n1820939074","loc":[-85.0399609,42.1030833],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:56Z","tags":{}},"n1820939075":{"id":"n1820939075","loc":[-85.3055758,41.9725169],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:56Z","tags":{}},"n1820939076":{"id":"n1820939076","loc":[-85.4834599,41.994488],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:56Z","tags":{}},"n1820939077":{"id":"n1820939077","loc":[-85.3819866,42.0023018],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:56Z","tags":{}},"n1820939078":{"id":"n1820939078","loc":[-85.1218756,42.0789992],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:56Z","tags":{}},"n1820939079":{"id":"n1820939079","loc":[-85.2793159,41.9944458],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:56Z","tags":{}},"n1820939080":{"id":"n1820939080","loc":[-85.2495498,42.0101466],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:56Z","tags":{}},"n1820939081":{"id":"n1820939081","loc":[-85.0035969,42.0872434],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:56Z","tags":{}},"n1820939082":{"id":"n1820939082","loc":[-85.1054243,42.0865626],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:56Z","tags":{}},"n1820939083":{"id":"n1820939083","loc":[-85.0917665,42.0934774],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:56Z","tags":{}},"n1820939084":{"id":"n1820939084","loc":[-85.3442211,41.988938],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:56Z","tags":{}},"n1820939086":{"id":"n1820939086","loc":[-85.273989,41.9953588],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:56Z","tags":{}},"n1820939087":{"id":"n1820939087","loc":[-85.1142541,42.0852488],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:56Z","tags":{}},"n1820939089":{"id":"n1820939089","loc":[-85.1526684,42.0615758],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:56Z","tags":{}},"n1820939090":{"id":"n1820939090","loc":[-85.2538843,42.0110159],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:56Z","tags":{}},"n1820939091":{"id":"n1820939091","loc":[-85.28341,41.9909635],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:56Z","tags":{}},"n1820939092":{"id":"n1820939092","loc":[-85.3963178,42.0050217],"version":"2","changeset":"13114234","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-09-15T03:33:29Z","tags":{}},"n1820939093":{"id":"n1820939093","loc":[-85.0851682,42.1012472],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:56Z","tags":{}},"n1820939095":{"id":"n1820939095","loc":[-85.2811784,41.986243],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:56Z","tags":{}},"n1820939096":{"id":"n1820939096","loc":[-85.4274125,42.0052995],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:56Z","tags":{}},"n1820939097":{"id":"n1820939097","loc":[-85.0871262,42.0951652],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:56Z","tags":{}},"n1820939099":{"id":"n1820939099","loc":[-85.1314253,42.0671665],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:57Z","tags":{}},"n1820939100":{"id":"n1820939100","loc":[-85.2778997,41.991001],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:57Z","tags":{}},"n1820939101":{"id":"n1820939101","loc":[-85.112107,42.0862812],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:57Z","tags":{}},"n1820939102":{"id":"n1820939102","loc":[-85.299911,41.9729955],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:57Z","tags":{}},"n1820939103":{"id":"n1820939103","loc":[-85.639822,41.9094796],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:57Z","tags":{}},"n1820939104":{"id":"n1820939104","loc":[-85.122294,42.0785334],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:57Z","tags":{}},"n1820939105":{"id":"n1820939105","loc":[-85.2476294,42.015719],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:57Z","tags":{}},"n1820939106":{"id":"n1820939106","loc":[-85.4946007,41.9814631],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:57Z","tags":{}},"n1820939107":{"id":"n1820939107","loc":[-85.0879524,42.0986919],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:57Z","tags":{}},"n1820939108":{"id":"n1820939108","loc":[-85.0342814,42.098274],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:57Z","tags":{}},"n1820939109":{"id":"n1820939109","loc":[-85.2450695,42.0095463],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:57Z","tags":{}},"n1820939110":{"id":"n1820939110","loc":[-85.3847546,42.0024135],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:57Z","tags":{}},"n1820939111":{"id":"n1820939111","loc":[-85.2961344,41.9742558],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:57Z","tags":{}},"n1820939112":{"id":"n1820939112","loc":[-85.27899,41.994317],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:57Z","tags":{}},"n1820939114":{"id":"n1820939114","loc":[-85.1017644,42.0886618],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:57Z","tags":{}},"n1820939115":{"id":"n1820939115","loc":[-85.076215,42.1056333],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:57Z","tags":{}},"n1820939116":{"id":"n1820939116","loc":[-85.1198009,42.0805349],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:57Z","tags":{}},"n1820939117":{"id":"n1820939117","loc":[-85.11988,42.0798513],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:57Z","tags":{}},"n1820939118":{"id":"n1820939118","loc":[-85.147819,42.0625476],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:57Z","tags":{}},"n1820939119":{"id":"n1820939119","loc":[-85.0585969,42.1029042],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:57Z","tags":{}},"n1820939120":{"id":"n1820939120","loc":[-85.1248596,42.0745744],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:57Z","tags":{}},"n1820939121":{"id":"n1820939121","loc":[-85.3023786,41.9725249],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:58Z","tags":{}},"n1820939123":{"id":"n1820939123","loc":[-85.0119332,42.0900699],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:58Z","tags":{}},"n1820939124":{"id":"n1820939124","loc":[-85.2466852,42.0170343],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:58Z","tags":{}},"n1820939125":{"id":"n1820939125","loc":[-85.0033019,42.0872792],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:58Z","tags":{}},"n1820939126":{"id":"n1820939126","loc":[-85.0042084,42.0875778],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:58Z","tags":{}},"n1820939128":{"id":"n1820939128","loc":[-85.0052961,42.0885424],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:58Z","tags":{}},"n1820939130":{"id":"n1820939130","loc":[-85.0647942,42.10508],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:58Z","tags":{}},"n1820939131":{"id":"n1820939131","loc":[-85.2824123,41.9825107],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:58Z","tags":{}},"n1820939132":{"id":"n1820939132","loc":[-85.3210039,41.9723255],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:58Z","tags":{}},"n1820939133":{"id":"n1820939133","loc":[-85.0491033,42.1014184],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:58Z","tags":{}},"n1820939134":{"id":"n1820939134","loc":[-85.1127776,42.0855168],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:58Z","tags":{}},"n1820939135":{"id":"n1820939135","loc":[-85.1243768,42.0759322],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:58Z","tags":{}},"n1820939137":{"id":"n1820939137","loc":[-85.125974,42.0747547],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:58Z","tags":{}},"n1820939138":{"id":"n1820939138","loc":[-85.1071248,42.0859973],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:58Z","tags":{}},"n1820939139":{"id":"n1820939139","loc":[-85.5326175,41.9674833],"version":"2","changeset":"12182668","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T07:35:32Z","tags":{}},"n1820939140":{"id":"n1820939140","loc":[-85.1338715,42.0660833],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:58Z","tags":{}},"n1820939142":{"id":"n1820939142","loc":[-85.649671,41.9135675],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:58Z","tags":{}},"n1820939144":{"id":"n1820939144","loc":[-85.0236545,42.0920444],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:59Z","tags":{}},"n1820939145":{"id":"n1820939145","loc":[-85.1084391,42.0859376],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:59Z","tags":{}},"n1820939146":{"id":"n1820939146","loc":[-85.1539988,42.0618626],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:59Z","tags":{}},"n1820939147":{"id":"n1820939147","loc":[-85.2354521,42.026511],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:59Z","tags":{}},"n1820939148":{"id":"n1820939148","loc":[-85.2362246,42.0260408],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:59Z","tags":{}},"n1820939149":{"id":"n1820939149","loc":[-85.2401342,42.0115233],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:59Z","tags":{}},"n1820939150":{"id":"n1820939150","loc":[-85.295319,41.9747423],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:59Z","tags":{}},"n1820939151":{"id":"n1820939151","loc":[-85.1164696,42.0835409],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:59Z","tags":{}},"n1820939152":{"id":"n1820939152","loc":[-85.3232891,41.9712885],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:59Z","tags":{}},"n1820939153":{"id":"n1820939153","loc":[-85.2574463,42.0068944],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:59Z","tags":{}},"n1820939155":{"id":"n1820939155","loc":[-85.5704064,41.9598246],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:59Z","tags":{}},"n1820939156":{"id":"n1820939156","loc":[-85.0349077,42.0998116],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:59Z","tags":{}},"n1820939157":{"id":"n1820939157","loc":[-85.0949529,42.0925619],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:59Z","tags":{}},"n1820939159":{"id":"n1820939159","loc":[-85.0179829,42.0902343],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:59Z","tags":{}},"n1820939160":{"id":"n1820939160","loc":[-85.0405832,42.1016942],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:59Z","tags":{}},"n1820939161":{"id":"n1820939161","loc":[-85.2534015,42.0111833],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:59Z","tags":{}},"n1820939162":{"id":"n1820939162","loc":[-85.0839881,42.102708],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:59Z","tags":{}},"n1820939163":{"id":"n1820939163","loc":[-85.0341996,42.1008385],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:59Z","tags":{}},"n1820939164":{"id":"n1820939164","loc":[-85.1037761,42.0879731],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:56:59Z","tags":{}},"n1820939173":{"id":"n1820939173","loc":[-85.0460616,42.1005786],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:00Z","tags":{}},"n1820939177":{"id":"n1820939177","loc":[-85.0061651,42.0878059],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:00Z","tags":{}},"n1820939181":{"id":"n1820939181","loc":[-85.1456775,42.0654684],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:00Z","tags":{}},"n1820939183":{"id":"n1820939183","loc":[-85.1325508,42.0718439],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:00Z","tags":{}},"n1820939185":{"id":"n1820939185","loc":[-85.2485842,42.008329],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:00Z","tags":{}},"n1820939187":{"id":"n1820939187","loc":[-85.2744128,41.9949322],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:00Z","tags":{}},"n1820939189":{"id":"n1820939189","loc":[-85.2579025,41.9999542],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:00Z","tags":{}},"n1820939191":{"id":"n1820939191","loc":[-85.3358998,41.9828987],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:00Z","tags":{}},"n1820939193":{"id":"n1820939193","loc":[-85.3192658,41.9716714],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:00Z","tags":{}},"n1820939194":{"id":"n1820939194","loc":[-85.6400795,41.9130725],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:00Z","tags":{}},"n1820939195":{"id":"n1820939195","loc":[-85.3278489,41.9780591],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:00Z","tags":{}},"n1820939196":{"id":"n1820939196","loc":[-85.2800197,41.983061],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:00Z","tags":{}},"n1820939197":{"id":"n1820939197","loc":[-85.3278167,41.9692943],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:00Z","tags":{}},"n1820939198":{"id":"n1820939198","loc":[-85.3366894,41.9838653],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:00Z","tags":{}},"n1820939199":{"id":"n1820939199","loc":[-85.0328383,42.0969923],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:00Z","tags":{}},"n1820939201":{"id":"n1820939201","loc":[-85.3259284,41.9720383],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:00Z","tags":{}},"n1820939217":{"id":"n1820939217","loc":[-85.1840181,42.0503277],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:01Z","tags":{}},"n1820939220":{"id":"n1820939220","loc":[-85.422563,42.0089986],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:01Z","tags":{}},"n1820939222":{"id":"n1820939222","loc":[-85.555386,41.9707856],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:01Z","tags":{}},"n1820939224":{"id":"n1820939224","loc":[-85.3830809,42.002254],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:01Z","tags":{}},"n1820939226":{"id":"n1820939226","loc":[-84.9917938,42.0857517],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:01Z","tags":{}},"n1820939227":{"id":"n1820939227","loc":[-85.2936775,41.9740484],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:01Z","tags":{}},"n1820939228":{"id":"n1820939228","loc":[-85.2632133,41.9975024],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:01Z","tags":{}},"n1820939229":{"id":"n1820939229","loc":[-85.2809424,41.9853259],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:01Z","tags":{}},"n1820939230":{"id":"n1820939230","loc":[-85.242104,42.0131204],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:01Z","tags":{}},"n1820939232":{"id":"n1820939232","loc":[-85.2610246,41.9963901],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:01Z","tags":{}},"n1820939233":{"id":"n1820939233","loc":[-85.2335531,42.0268378],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:01Z","tags":{}},"n1820939234":{"id":"n1820939234","loc":[-85.3188839,41.9713575],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:01Z","tags":{}},"n1820939235":{"id":"n1820939235","loc":[-85.2413637,42.0225658],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:01Z","tags":{}},"n1820939237":{"id":"n1820939237","loc":[-85.0010796,42.0887215],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:01Z","tags":{}},"n1820939239":{"id":"n1820939239","loc":[-85.2241697,42.0362624],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:01Z","tags":{}},"n1820939243":{"id":"n1820939243","loc":[-85.0368456,42.1040134],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:01Z","tags":{}},"n1820939244":{"id":"n1820939244","loc":[-85.1327986,42.069524],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:01Z","tags":{}},"n1820939260":{"id":"n1820939260","loc":[-85.5408163,41.9711206],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:01Z","tags":{}},"n1820939261":{"id":"n1820939261","loc":[-85.2959199,41.9746546],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:02Z","tags":{}},"n1820939262":{"id":"n1820939262","loc":[-85.3298659,41.9683598],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:02Z","tags":{}},"n1820939263":{"id":"n1820939263","loc":[-85.2240581,42.0358425],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:02Z","tags":{}},"n1820939264":{"id":"n1820939264","loc":[-85.2438206,42.0101944],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:02Z","tags":{}},"n1820939265":{"id":"n1820939265","loc":[-85.3984489,42.0059589],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:02Z","tags":{}},"n1820939266":{"id":"n1820939266","loc":[-85.2330811,42.0294279],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:02Z","tags":{}},"n1820939268":{"id":"n1820939268","loc":[-85.1126877,42.0857704],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:02Z","tags":{}},"n1820939271":{"id":"n1820939271","loc":[-85.254925,42.0106253],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:02Z","tags":{}},"n1820939273":{"id":"n1820939273","loc":[-85.4328046,42.0064662],"version":"2","changeset":"12524188","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-28T14:51:01Z","tags":{}},"n1820939277":{"id":"n1820939277","loc":[-85.289622,41.9789616],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:02Z","tags":{}},"n1820939279":{"id":"n1820939279","loc":[-85.4574532,42.0004043],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:02Z","tags":{}},"n1820939281":{"id":"n1820939281","loc":[-85.4803486,41.9867211],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:02Z","tags":{}},"n1820939283":{"id":"n1820939283","loc":[-85.157475,42.0631848],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:02Z","tags":{}},"n1820939285":{"id":"n1820939285","loc":[-85.2571458,42.0059935],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:02Z","tags":{}},"n1820939287":{"id":"n1820939287","loc":[-85.2818544,41.9825984],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:02Z","tags":{}},"n1820939289":{"id":"n1820939289","loc":[-85.2298302,42.0328781],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:02Z","tags":{}},"n1820939291":{"id":"n1820939291","loc":[-85.4819523,41.984821],"version":"2","changeset":"12182679","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T07:37:01Z","tags":{}},"n1820939301":{"id":"n1820939301","loc":[-85.3139765,41.9701159],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:03Z","tags":{}},"n1820939304":{"id":"n1820939304","loc":[-85.0424447,42.101742],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:03Z","tags":{}},"n1820939306":{"id":"n1820939306","loc":[-85.6360283,41.9338482],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:03Z","tags":{}},"n1820939310":{"id":"n1820939310","loc":[-85.3463025,41.9913622],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:03Z","tags":{}},"n1820939312":{"id":"n1820939312","loc":[-85.4664869,41.9988097],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:03Z","tags":{}},"n1820939314":{"id":"n1820939314","loc":[-85.149364,42.0622449],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:03Z","tags":{}},"n1820939316":{"id":"n1820939316","loc":[-85.2460415,42.0153125],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:03Z","tags":{}},"n1820939318":{"id":"n1820939318","loc":[-85.4806103,41.9924523],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:03Z","tags":{}},"n1820939320":{"id":"n1820939320","loc":[-85.2449042,42.0190987],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:03Z","tags":{}},"n1820939322":{"id":"n1820939322","loc":[-85.5280165,41.9689263],"version":"2","changeset":"12182668","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T07:35:33Z","tags":{}},"n1820939324":{"id":"n1820939324","loc":[-85.0051204,42.0882625],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:03Z","tags":{}},"n1820939326":{"id":"n1820939326","loc":[-85.1240925,42.0771546],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:03Z","tags":{}},"n1820939329":{"id":"n1820939329","loc":[-85.2261653,42.0342225],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:03Z","tags":{}},"n1820939331":{"id":"n1820939331","loc":[-85.5259933,41.972211],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:03Z","tags":{}},"n1820939333":{"id":"n1820939333","loc":[-85.0074754,42.0883183],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:03Z","tags":{}},"n1820939335":{"id":"n1820939335","loc":[-85.0764014,42.1055549],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:03Z","tags":{}},"n1820939336":{"id":"n1820939336","loc":[-85.2908773,41.9769597],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:03Z","tags":{}},"n1820939337":{"id":"n1820939337","loc":[-85.4095382,42.0083449],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:03Z","tags":{}},"n1820939346":{"id":"n1820939346","loc":[-85.2514166,42.0111753],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:03Z","tags":{}},"n1820939348":{"id":"n1820939348","loc":[-85.0030377,42.0873799],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:03Z","tags":{}},"n1820939350":{"id":"n1820939350","loc":[-85.3659362,41.9964974],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:03Z","tags":{}},"n1820939352":{"id":"n1820939352","loc":[-85.226058,42.0348281],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:04Z","tags":{}},"n1820939355":{"id":"n1820939355","loc":[-85.1902408,42.0507101],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:04Z","tags":{}},"n1820939357":{"id":"n1820939357","loc":[-85.2781854,41.9946001],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:04Z","tags":{}},"n1820939359":{"id":"n1820939359","loc":[-85.2139988,42.0405175],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:04Z","tags":{}},"n1820939361":{"id":"n1820939361","loc":[-85.0086609,42.0908262],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:04Z","tags":{}},"n1820939363":{"id":"n1820939363","loc":[-85.0627128,42.1043398],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:04Z","tags":{}},"n1820939365":{"id":"n1820939365","loc":[-85.1311346,42.072501],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:04Z","tags":{}},"n1820939369":{"id":"n1820939369","loc":[-85.248198,42.0082652],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:04Z","tags":{}},"n1820939370":{"id":"n1820939370","loc":[-84.99792,42.087794],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:04Z","tags":{}},"n1820939371":{"id":"n1820939371","loc":[-85.2786775,41.9942783],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:04Z","tags":{}},"n1820939372":{"id":"n1820939372","loc":[-85.0342103,42.1013957],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:04Z","tags":{}},"n1820939373":{"id":"n1820939373","loc":[-85.2022357,42.0444799],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:04Z","tags":{}},"n1820939374":{"id":"n1820939374","loc":[-85.2279205,42.0337388],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:04Z","tags":{}},"n1820939375":{"id":"n1820939375","loc":[-85.1337699,42.0712614],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:04Z","tags":{}},"n1820939376":{"id":"n1820939376","loc":[-85.317517,41.9707062],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:04Z","tags":{}},"n1820939377":{"id":"n1820939377","loc":[-85.1326326,42.070218],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:04Z","tags":{}},"n1820939394":{"id":"n1820939394","loc":[-85.0197746,42.0899118],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:04Z","tags":{}},"n1820939397":{"id":"n1820939397","loc":[-85.2590076,41.9984632],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:04Z","tags":{}},"n1820939399":{"id":"n1820939399","loc":[-85.2469964,42.0083449],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:04Z","tags":{}},"n1820939400":{"id":"n1820939400","loc":[-85.2470929,42.0146668],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:04Z","tags":{}},"n1820939401":{"id":"n1820939401","loc":[-84.9984095,42.0878087],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:04Z","tags":{}},"n1820939402":{"id":"n1820939402","loc":[-85.2372653,42.0243273],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:04Z","tags":{}},"n1820939403":{"id":"n1820939403","loc":[-85.2454986,42.0091955],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:05Z","tags":{}},"n1820939404":{"id":"n1820939404","loc":[-85.0539205,42.1035995],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:05Z","tags":{}},"n1820939405":{"id":"n1820939405","loc":[-85.550601,41.9706101],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:05Z","tags":{}},"n1820939406":{"id":"n1820939406","loc":[-85.0351343,42.0999656],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:05Z","tags":{}},"n1820939407":{"id":"n1820939407","loc":[-85.0082908,42.0905755],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:05Z","tags":{}},"n1820939408":{"id":"n1820939408","loc":[-85.0132904,42.0902251],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:05Z","tags":{}},"n1820939410":{"id":"n1820939410","loc":[-85.0892546,42.094012],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:05Z","tags":{}},"n1820939412":{"id":"n1820939412","loc":[-85.0350793,42.1030315],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:05Z","tags":{}},"n1820939416":{"id":"n1820939416","loc":[-85.0012406,42.0886777],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:05Z","tags":{}},"n1820939418":{"id":"n1820939418","loc":[-85.0577453,42.1029229],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:05Z","tags":{}},"n1820939420":{"id":"n1820939420","loc":[-85.1230786,42.0776722],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:05Z","tags":{}},"n1820939422":{"id":"n1820939422","loc":[-85.571136,41.9649304],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:05Z","tags":{}},"n1820939436":{"id":"n1820939436","loc":[-85.1137968,42.0848997],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:05Z","tags":{}},"n1820939437":{"id":"n1820939437","loc":[-85.3559584,41.9925105],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:05Z","tags":{}},"n1820939438":{"id":"n1820939438","loc":[-85.0080172,42.0903565],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:05Z","tags":{}},"n1820939439":{"id":"n1820939439","loc":[-85.0048897,42.0880913],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:05Z","tags":{}},"n1820939441":{"id":"n1820939441","loc":[-85.0406959,42.1018574],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:05Z","tags":{}},"n1820939443":{"id":"n1820939443","loc":[-85.3897328,42.0029078],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:05Z","tags":{}},"n1820939445":{"id":"n1820939445","loc":[-85.122349,42.0782814],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:05Z","tags":{}},"n1820939448":{"id":"n1820939448","loc":[-85.4872193,41.985036],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:05Z","tags":{}},"n1820939450":{"id":"n1820939450","loc":[-85.0120459,42.0904919],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:05Z","tags":{}},"n1820939452":{"id":"n1820939452","loc":[-85.6320543,41.921982],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:06Z","tags":{}},"n1820939456":{"id":"n1820939456","loc":[-85.0844749,42.1036843],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:06Z","tags":{}},"n1820939458":{"id":"n1820939458","loc":[-85.0968037,42.091296],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:06Z","tags":{}},"n1820939463":{"id":"n1820939463","loc":[-85.5339747,41.9681841],"version":"2","changeset":"12182668","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T07:35:33Z","tags":{}},"n1820939465":{"id":"n1820939465","loc":[-85.4125423,42.0072129],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:06Z","tags":{}},"n1820939467":{"id":"n1820939467","loc":[-85.6335563,41.9303626],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:06Z","tags":{}},"n1820939469":{"id":"n1820939469","loc":[-85.2821014,41.9932126],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:06Z","tags":{}},"n1820939471":{"id":"n1820939471","loc":[-85.374691,41.9969917],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:06Z","tags":{}},"n1820939485":{"id":"n1820939485","loc":[-85.4471321,42.0049806],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:06Z","tags":{}},"n1820939487":{"id":"n1820939487","loc":[-85.3752532,41.9972206],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:06Z","tags":{}},"n1820939489":{"id":"n1820939489","loc":[-85.4517283,42.005927],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:06Z","tags":{}},"n1820939492":{"id":"n1820939492","loc":[-85.4662552,42.0005693],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:06Z","tags":{}},"n1820939494":{"id":"n1820939494","loc":[-85.0120083,42.0902928],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:06Z","tags":{}},"n1820939496":{"id":"n1820939496","loc":[-85.044463,42.1004631],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:06Z","tags":{}},"n1820939498":{"id":"n1820939498","loc":[-85.418293,42.0089667],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:06Z","tags":{}},"n1820939500":{"id":"n1820939500","loc":[-85.0554762,42.1027358],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:06Z","tags":{}},"n1820939504":{"id":"n1820939504","loc":[-85.1246289,42.0746858],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:06Z","tags":{}},"n1820939507":{"id":"n1820939507","loc":[-85.0408139,42.1021838],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:07Z","tags":{}},"n1820939508":{"id":"n1820939508","loc":[-85.1236204,42.0775169],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:07Z","tags":{}},"n1820939509":{"id":"n1820939509","loc":[-85.0350109,42.1037428],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:07Z","tags":{}},"n1820939510":{"id":"n1820939510","loc":[-85.0551583,42.1029878],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:07Z","tags":{}},"n1820939511":{"id":"n1820939511","loc":[-85.0956771,42.0916662],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:07Z","tags":{}},"n1820939512":{"id":"n1820939512","loc":[-85.2323408,42.0273638],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:07Z","tags":{}},"n1820939513":{"id":"n1820939513","loc":[-85.1232771,42.0762388],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:07Z","tags":{}},"n1820939531":{"id":"n1820939531","loc":[-85.264608,41.9997828],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:07Z","tags":{}},"n1820939533":{"id":"n1820939533","loc":[-85.4198808,42.0087914],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:07Z","tags":{}},"n1820939535":{"id":"n1820939535","loc":[-85.3080864,41.9715677],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:07Z","tags":{}},"n1820939536":{"id":"n1820939536","loc":[-85.1189426,42.0812596],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:07Z","tags":{}},"n1820939537":{"id":"n1820939537","loc":[-85.2642741,41.9996764],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:07Z","tags":{}},"n1820939538":{"id":"n1820939538","loc":[-85.2572531,42.0079627],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:07Z","tags":{}},"n1820939539":{"id":"n1820939539","loc":[-85.2907807,41.9790174],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:07Z","tags":{}},"n1820939540":{"id":"n1820939540","loc":[-85.3171415,41.9707301],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:07Z","tags":{}},"n1820939541":{"id":"n1820939541","loc":[-85.08777,42.0953841],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:07Z","tags":{}},"n1820939542":{"id":"n1820939542","loc":[-85.1239262,42.0773218],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:07Z","tags":{}},"n1820939543":{"id":"n1820939543","loc":[-84.9973956,42.0877968],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:07Z","tags":{}},"n1820939544":{"id":"n1820939544","loc":[-85.011606,42.0896161],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:07Z","tags":{}},"n1820939545":{"id":"n1820939545","loc":[-85.4077358,42.0082971],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:07Z","tags":{}},"n1820939546":{"id":"n1820939546","loc":[-85.3614945,41.9933717],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:07Z","tags":{}},"n1820939547":{"id":"n1820939547","loc":[-85.3189118,41.9697649],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:08Z","tags":{}},"n1820939550":{"id":"n1820939550","loc":[-85.1262691,42.0740221],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:08Z","tags":{}},"n1820939551":{"id":"n1820939551","loc":[-85.3863639,41.9994635],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:08Z","tags":{}},"n1820939552":{"id":"n1820939552","loc":[-85.2836034,41.9923953],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:08Z","tags":{}},"n1820939554":{"id":"n1820939554","loc":[-85.3222377,41.9715916],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:08Z","tags":{}},"n1820939555":{"id":"n1820939555","loc":[-85.0122658,42.0906312],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:08Z","tags":{}},"n1820939556":{"id":"n1820939556","loc":[-85.0022652,42.0877581],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:08Z","tags":{}},"n1820939557":{"id":"n1820939557","loc":[-85.1011314,42.0899954],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:08Z","tags":{}},"n1820939559":{"id":"n1820939559","loc":[-85.0008181,42.0885293],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:08Z","tags":{}},"n1820939561":{"id":"n1820939561","loc":[-85.3637046,41.9942488],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:08Z","tags":{}},"n1820939562":{"id":"n1820939562","loc":[-85.4500117,42.0052892],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:08Z","tags":{}},"n1820939563":{"id":"n1820939563","loc":[-85.0537636,42.1036365],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:08Z","tags":{}},"n1820939565":{"id":"n1820939565","loc":[-85.2367503,42.0246939],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:08Z","tags":{}},"n1820939566":{"id":"n1820939566","loc":[-85.0448479,42.1002653],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:08Z","tags":{}},"n1820939567":{"id":"n1820939567","loc":[-85.6337065,41.9295006],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:08Z","tags":{}},"n1820939568":{"id":"n1820939568","loc":[-85.0879792,42.095623],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:08Z","tags":{}},"n1820939569":{"id":"n1820939569","loc":[-85.6347623,41.9352369],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:08Z","tags":{}},"n1820939570":{"id":"n1820939570","loc":[-85.1497931,42.0620378],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:08Z","tags":{}},"n1820939571":{"id":"n1820939571","loc":[-85.5676169,41.9656324],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:09Z","tags":{}},"n1820939572":{"id":"n1820939572","loc":[-85.638041,41.9166971],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:09Z","tags":{}},"n1820939573":{"id":"n1820939573","loc":[-85.4993429,41.9781293],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:09Z","tags":{}},"n1820939574":{"id":"n1820939574","loc":[-85.5352831,41.9692127],"version":"2","changeset":"12182668","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T07:35:33Z","tags":{}},"n1820939575":{"id":"n1820939575","loc":[-84.9924429,42.0857118],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:09Z","tags":{}},"n1820939577":{"id":"n1820939577","loc":[-85.0581101,42.1026721],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:09Z","tags":{}},"n1820939578":{"id":"n1820939578","loc":[-85.641088,41.9094477],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:09Z","tags":{}},"n1820939579":{"id":"n1820939579","loc":[-85.2548821,42.0052282],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:09Z","tags":{}},"n1820939580":{"id":"n1820939580","loc":[-85.1124463,42.0859734],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:09Z","tags":{}},"n1820939581":{"id":"n1820939581","loc":[-85.1083479,42.0857624],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:09Z","tags":{}},"n1820939583":{"id":"n1820939583","loc":[-85.1387424,42.0648893],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:09Z","tags":{}},"n1820939584":{"id":"n1820939584","loc":[-85.5152645,41.9700892],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:09Z","tags":{}},"n1820939585":{"id":"n1820939585","loc":[-85.5463738,41.9713439],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:09Z","tags":{}},"n1820939586":{"id":"n1820939586","loc":[-85.360207,41.9933717],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:09Z","tags":{}},"n1820939587":{"id":"n1820939587","loc":[-85.2402372,42.0120917],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:09Z","tags":{}},"n1820939588":{"id":"n1820939588","loc":[-85.3936381,42.0047255],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:09Z","tags":{}},"n1820939589":{"id":"n1820939589","loc":[-85.3310246,41.973784],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:09Z","tags":{}},"n1820939590":{"id":"n1820939590","loc":[-85.0329403,42.096642],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:09Z","tags":{}},"n1820939591":{"id":"n1820939591","loc":[-85.0097271,42.0910981],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:10Z","tags":{}},"n1820939593":{"id":"n1820939593","loc":[-85.0446562,42.1003437],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:10Z","tags":{}},"n1820939595":{"id":"n1820939595","loc":[-85.0856671,42.1008452],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:10Z","tags":{}},"n1820939596":{"id":"n1820939596","loc":[-85.4087228,42.0083449],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:10Z","tags":{}},"n1820939597":{"id":"n1820939597","loc":[-85.0609519,42.1052564],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:10Z","tags":{}},"n1820939598":{"id":"n1820939598","loc":[-85.3432126,41.9874548],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:10Z","tags":{}},"n1820939599":{"id":"n1820939599","loc":[-85.4041738,42.0067027],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:10Z","tags":{}},"n1820939600":{"id":"n1820939600","loc":[-85.0825437,42.1035768],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:10Z","tags":{}},"n1820939601":{"id":"n1820939601","loc":[-85.048422,42.101498],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:10Z","tags":{}},"n1820939602":{"id":"n1820939602","loc":[-85.0336256,42.0999031],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:10Z","tags":{}},"n1820939603":{"id":"n1820939603","loc":[-85.046818,42.1014104],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:10Z","tags":{}},"n1820939605":{"id":"n1820939605","loc":[-85.2856524,41.98078],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:10Z","tags":{}},"n1820939607":{"id":"n1820939607","loc":[-85.1118173,42.0864245],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:10Z","tags":{}},"n1820939609":{"id":"n1820939609","loc":[-85.0443397,42.1006263],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:10Z","tags":{}},"n1820939610":{"id":"n1820939610","loc":[-85.0336698,42.0978361],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:10Z","tags":{}},"n1820939611":{"id":"n1820939611","loc":[-85.4630322,42.0014248],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:11Z","tags":{}},"n1820939612":{"id":"n1820939612","loc":[-85.0613127,42.1052353],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:11Z","tags":{}},"n1820939613":{"id":"n1820939613","loc":[-85.0137571,42.0887801],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:11Z","tags":{}},"n1820939614":{"id":"n1820939614","loc":[-85.272487,41.9982013],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:11Z","tags":{}},"n1820939616":{"id":"n1820939616","loc":[-85.4665727,41.9983791],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:11Z","tags":{}},"n1820939617":{"id":"n1820939617","loc":[-85.1288078,42.0725476],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:11Z","tags":{}},"n1820939618":{"id":"n1820939618","loc":[-85.4653282,42.00109],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:11Z","tags":{}},"n1820939619":{"id":"n1820939619","loc":[-85.2314717,42.0276746],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:11Z","tags":{}},"n1820939620":{"id":"n1820939620","loc":[-85.255982,42.0003569],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:11Z","tags":{}},"n1820939621":{"id":"n1820939621","loc":[-85.2886779,41.9787223],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:11Z","tags":{}},"n1820939622":{"id":"n1820939622","loc":[-85.22438,42.0367509],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:11Z","tags":{}},"n1820939623":{"id":"n1820939623","loc":[-85.0334713,42.0998382],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:11Z","tags":{}},"n1820939624":{"id":"n1820939624","loc":[-85.2236504,42.037484],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:11Z","tags":{}},"n1820939625":{"id":"n1820939625","loc":[-85.636908,41.9175162],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:11Z","tags":{}},"n1820939627":{"id":"n1820939627","loc":[-85.2669187,41.9989707],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:11Z","tags":{}},"n1820939628":{"id":"n1820939628","loc":[-85.3247268,41.9720702],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:11Z","tags":{}},"n1820939629":{"id":"n1820939629","loc":[-85.3785104,41.9987299],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:11Z","tags":{}},"n1820939630":{"id":"n1820939630","loc":[-85.5267658,41.9720515],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:12Z","tags":{}},"n1820939631":{"id":"n1820939631","loc":[-85.2445116,42.0098811],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:12Z","tags":{}},"n1820939632":{"id":"n1820939632","loc":[-85.1271448,42.0725077],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:12Z","tags":{}},"n1820939633":{"id":"n1820939633","loc":[-85.0345751,42.099724],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:12Z","tags":{}},"n1820939634":{"id":"n1820939634","loc":[-85.4217476,42.0089986],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:12Z","tags":{}},"n1820939635":{"id":"n1820939635","loc":[-85.3121848,41.9689433],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:12Z","tags":{}},"n1820939636":{"id":"n1820939636","loc":[-85.2826419,41.9929985],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:12Z","tags":{}},"n1820939637":{"id":"n1820939637","loc":[-85.3160257,41.9706344],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:12Z","tags":{}},"n1820939638":{"id":"n1820939638","loc":[-85.5684967,41.9657919],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:12Z","tags":{}},"n1820939640":{"id":"n1820939640","loc":[-85.225131,42.0356194],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:12Z","tags":{}},"n1820939642":{"id":"n1820939642","loc":[-85.1324124,42.0693328],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:12Z","tags":{}},"n1820939644":{"id":"n1820939644","loc":[-84.9994073,42.0878843],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:12Z","tags":{}},"n1820939645":{"id":"n1820939645","loc":[-85.1087596,42.0863329],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:12Z","tags":{}},"n1820939646":{"id":"n1820939646","loc":[-85.2915532,41.9782996],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:12Z","tags":{}},"n1820939647":{"id":"n1820939647","loc":[-84.9988708,42.0877808],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:12Z","tags":{}},"n1820939648":{"id":"n1820939648","loc":[-85.2243628,42.0356728],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:12Z","tags":{}},"n1820939649":{"id":"n1820939649","loc":[-85.0427397,42.1020524],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:12Z","tags":{}},"n1820939650":{"id":"n1820939650","loc":[-85.6388392,41.9100752],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:13Z","tags":{}},"n1820939651":{"id":"n1820939651","loc":[-85.0133709,42.0888557],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:13Z","tags":{}},"n1820939652":{"id":"n1820939652","loc":[-85.318798,41.9701211],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:13Z","tags":{}},"n1820939653":{"id":"n1820939653","loc":[-85.6335778,41.9190602],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:13Z","tags":{}},"n1820939654":{"id":"n1820939654","loc":[-85.6338396,41.9370247],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:13Z","tags":{}},"n1820939655":{"id":"n1820939655","loc":[-85.0939069,42.0931988],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:13Z","tags":{}},"n1820939656":{"id":"n1820939656","loc":[-85.5702347,41.9651378],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:13Z","tags":{}},"n1820939657":{"id":"n1820939657","loc":[-85.4235286,42.0088392],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:13Z","tags":{}},"n1820939658":{"id":"n1820939658","loc":[-85.2740856,41.9972206],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:13Z","tags":{}},"n1820939659":{"id":"n1820939659","loc":[-85.4824299,41.9934195],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:13Z","tags":{}},"n1820939660":{"id":"n1820939660","loc":[-85.3857846,42.0014408],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:13Z","tags":{}},"n1820939661":{"id":"n1820939661","loc":[-85.0451658,42.10028],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:13Z","tags":{}},"n1820939662":{"id":"n1820939662","loc":[-85.3893036,42.001377],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:13Z","tags":{}},"n1820939664":{"id":"n1820939664","loc":[-85.2455845,42.0088607],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:13Z","tags":{}},"n1820939665":{"id":"n1820939665","loc":[-85.2741071,41.9951116],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:13Z","tags":{}},"n1820939666":{"id":"n1820939666","loc":[-85.1298375,42.0677718],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:13Z","tags":{}},"n1820939667":{"id":"n1820939667","loc":[-85.5491848,41.9707377],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:13Z","tags":{}},"n1820939669":{"id":"n1820939669","loc":[-85.2780298,41.995238],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:14Z","tags":{}},"n1820939670":{"id":"n1820939670","loc":[-85.1330068,42.0716926],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:14Z","tags":{}},"n1820939671":{"id":"n1820939671","loc":[-85.0811342,42.1025129],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:14Z","tags":{}},"n1820939672":{"id":"n1820939672","loc":[-85.2325124,42.0290135],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:14Z","tags":{}},"n1820939673":{"id":"n1820939673","loc":[-85.2975077,41.9716953],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:14Z","tags":{}},"n1820939674":{"id":"n1820939674","loc":[-85.0951729,42.0922394],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:14Z","tags":{}},"n1820939676":{"id":"n1820939676","loc":[-85.0363252,42.1043119],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:14Z","tags":{}},"n1820939677":{"id":"n1820939677","loc":[-85.2960057,41.97349],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:14Z","tags":{}},"n1820939678":{"id":"n1820939678","loc":[-85.3701849,41.9982515],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:14Z","tags":{}},"n1820939679":{"id":"n1820939679","loc":[-85.3381486,41.9848861],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:14Z","tags":{}},"n1820939680":{"id":"n1820939680","loc":[-85.2058448,42.0417286],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:14Z","tags":{}},"n1820939682":{"id":"n1820939682","loc":[-85.0819335,42.1034443],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:14Z","tags":{}},"n1820939683":{"id":"n1820939683","loc":[-85.3872223,41.9993359],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:14Z","tags":{}},"n1820939684":{"id":"n1820939684","loc":[-85.095366,42.091909],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:14Z","tags":{}},"n1820939685":{"id":"n1820939685","loc":[-85.2327914,42.0291888],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:14Z","tags":{}},"n1820939686":{"id":"n1820939686","loc":[-85.0433459,42.1018773],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:14Z","tags":{}},"n1820939687":{"id":"n1820939687","loc":[-85.0585339,42.1027318],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:14Z","tags":{}},"n1820939688":{"id":"n1820939688","loc":[-85.0062885,42.0876347],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:14Z","tags":{}},"n1820939689":{"id":"n1820939689","loc":[-85.246299,42.017377],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:14Z","tags":{}},"n1820939690":{"id":"n1820939690","loc":[-85.2932376,41.9742877],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:14Z","tags":{}},"n1820939691":{"id":"n1820939691","loc":[-85.2962846,41.9736815],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:14Z","tags":{}},"n1820939692":{"id":"n1820939692","loc":[-85.6052365,41.9409193],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:15Z","tags":{}},"n1820939693":{"id":"n1820939693","loc":[-85.2570536,42.0003341],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:15Z","tags":{}},"n1820939694":{"id":"n1820939694","loc":[-85.0488458,42.1014064],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:15Z","tags":{}},"n1820939695":{"id":"n1820939695","loc":[-85.4050321,42.0069578],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:15Z","tags":{}},"n1820939696":{"id":"n1820939696","loc":[-85.4847517,41.9845894],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:15Z","tags":{}},"n1820939697":{"id":"n1820939697","loc":[-85.0844655,42.1013826],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:15Z","tags":{}},"n1820939698":{"id":"n1820939698","loc":[-85.1437206,42.0650008],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:15Z","tags":{}},"n1820939699":{"id":"n1820939699","loc":[-85.1168183,42.0864034],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:15Z","tags":{}},"n1820939700":{"id":"n1820939700","loc":[-85.5479831,41.9711366],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:15Z","tags":{}},"n1820939701":{"id":"n1820939701","loc":[-85.0349948,42.1034124],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:15Z","tags":{}},"n1820939702":{"id":"n1820939702","loc":[-85.0835589,42.1038821],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:15Z","tags":{}},"n1820939703":{"id":"n1820939703","loc":[-85.0203875,42.0902649],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:15Z","tags":{}},"n1820939704":{"id":"n1820939704","loc":[-85.0371191,42.1038184],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:15Z","tags":{}},"n1820939705":{"id":"n1820939705","loc":[-85.1273312,42.0735681],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:15Z","tags":{}},"n1820939707":{"id":"n1820939707","loc":[-85.1272239,42.0730226],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:15Z","tags":{}},"n1820939710":{"id":"n1820939710","loc":[-85.0349881,42.1019012],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:15Z","tags":{}},"n1820939712":{"id":"n1820939712","loc":[-85.2440459,42.0178313],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:15Z","tags":{}},"n1820939713":{"id":"n1820939713","loc":[-85.2444751,42.0182618],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:15Z","tags":{}},"n1820939714":{"id":"n1820939714","loc":[-85.0539996,42.1032863],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:15Z","tags":{}},"n1820939715":{"id":"n1820939715","loc":[-85.2215905,42.0373246],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:16Z","tags":{}},"n1820939716":{"id":"n1820939716","loc":[-85.0649712,42.1051994],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:16Z","tags":{}},"n1820939717":{"id":"n1820939717","loc":[-85.0927146,42.0927581],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:16Z","tags":{}},"n1820939718":{"id":"n1820939718","loc":[-85.3884668,42.0042312],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:16Z","tags":{}},"n1820939719":{"id":"n1820939719","loc":[-85.0840672,42.1013241],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:16Z","tags":{}},"n1820939720":{"id":"n1820939720","loc":[-85.304739,41.9725408],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:16Z","tags":{}},"n1820939721":{"id":"n1820939721","loc":[-85.2243585,42.0371334],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:16Z","tags":{}},"n1820939722":{"id":"n1820939722","loc":[-85.0599823,42.1049686],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:16Z","tags":{}},"n1820939723":{"id":"n1820939723","loc":[-85.0298825,42.0944288],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:16Z","tags":{}},"n1820939724":{"id":"n1820939724","loc":[-85.0366095,42.1042443],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:16Z","tags":{}},"n1820939725":{"id":"n1820939725","loc":[-85.0698783,42.1058135],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:16Z","tags":{}},"n1820939726":{"id":"n1820939726","loc":[-85.1054551,42.0873361],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:16Z","tags":{}},"n1820939727":{"id":"n1820939727","loc":[-84.9952324,42.0864285],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:16Z","tags":{}},"n1820939728":{"id":"n1820939728","loc":[-85.3442211,41.9897993],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:16Z","tags":{}},"n1820939729":{"id":"n1820939729","loc":[-85.4386134,42.0056822],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:16Z","tags":{}},"n1820939730":{"id":"n1820939730","loc":[-85.2438528,42.0146589],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:16Z","tags":{}},"n1820939731":{"id":"n1820939731","loc":[-85.0355581,42.1041846],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:16Z","tags":{}},"n1820939732":{"id":"n1820939732","loc":[-85.557682,41.9724447],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:16Z","tags":{}},"n1820939734":{"id":"n1820939734","loc":[-85.2299418,42.033314],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:16Z","tags":{}},"n1820939735":{"id":"n1820939735","loc":[-85.6297412,41.9419088],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:16Z","tags":{}},"n1820939736":{"id":"n1820939736","loc":[-85.2645101,41.9980259],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:16Z","tags":{}},"n1820939738":{"id":"n1820939738","loc":[-85.082195,42.1035649],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:16Z","tags":{}},"n1820939739":{"id":"n1820939739","loc":[-85.234272,42.0267102],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:17Z","tags":{}},"n1820939740":{"id":"n1820939740","loc":[-85.0130758,42.0895006],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:17Z","tags":{}},"n1820939741":{"id":"n1820939741","loc":[-85.4594702,42.0000375],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:17Z","tags":{}},"n1820939742":{"id":"n1820939742","loc":[-84.9946745,42.0863687],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:17Z","tags":{}},"n1820939743":{"id":"n1820939743","loc":[-85.6438775,41.9120186],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:17Z","tags":{}},"n1820939744":{"id":"n1820939744","loc":[-85.6372685,41.9168089],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:17Z","tags":{}},"n1820939745":{"id":"n1820939745","loc":[-85.2789468,41.9893208],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:17Z","tags":{}},"n1820939747":{"id":"n1820939747","loc":[-85.3775019,41.998427],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:17Z","tags":{}},"n1820939749":{"id":"n1820939749","loc":[-85.0993571,42.0909178],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:17Z","tags":{}},"n1820939750":{"id":"n1820939750","loc":[-85.1308503,42.0669339],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:17Z","tags":{}},"n1820939751":{"id":"n1820939751","loc":[-85.4802566,41.9856659],"version":"2","changeset":"12182679","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T07:37:01Z","tags":{}},"n1820939752":{"id":"n1820939752","loc":[-85.2543563,42.0108804],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:17Z","tags":{}},"n1820939753":{"id":"n1820939753","loc":[-85.1041033,42.0878815],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:17Z","tags":{}},"n1820939755":{"id":"n1820939755","loc":[-85.4000969,42.0071651],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:17Z","tags":{}},"n1820939757":{"id":"n1820939757","loc":[-85.3858275,42.0022381],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:17Z","tags":{}},"n1820939758":{"id":"n1820939758","loc":[-85.3653998,41.996609],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:17Z","tags":{}},"n1820939759":{"id":"n1820939759","loc":[-85.2432949,42.0202305],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:17Z","tags":{}},"n1820939760":{"id":"n1820939760","loc":[-85.3878874,42.0042472],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:17Z","tags":{}},"n1820939761":{"id":"n1820939761","loc":[-85.2516741,42.0114145],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:17Z","tags":{}},"n1820939762":{"id":"n1820939762","loc":[-85.2788825,41.9865142],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:18Z","tags":{}},"n1820939763":{"id":"n1820939763","loc":[-85.0009147,42.0886686],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:18Z","tags":{}},"n1820939764":{"id":"n1820939764","loc":[-85.3918142,42.003434],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:18Z","tags":{}},"n1820939765":{"id":"n1820939765","loc":[-85.5532832,41.9696848],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:18Z","tags":{}},"n1820939766":{"id":"n1820939766","loc":[-85.5545063,41.969254],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:18Z","tags":{}},"n1820939768":{"id":"n1820939768","loc":[-85.1327989,42.0704769],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:18Z","tags":{}},"n1820939770":{"id":"n1820939770","loc":[-85.0588558,42.1047696],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:18Z","tags":{}},"n1820939772":{"id":"n1820939772","loc":[-85.555798,41.9713017],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:18Z","tags":{}},"n1820939773":{"id":"n1820939773","loc":[-85.0565853,42.1023589],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:18Z","tags":{}},"n1820939774":{"id":"n1820939774","loc":[-85.2582941,41.9992765],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:18Z","tags":{}},"n1820939775":{"id":"n1820939775","loc":[-85.3007264,41.9727642],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:18Z","tags":{}},"n1820939776":{"id":"n1820939776","loc":[-85.2477045,42.0082652],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:18Z","tags":{}},"n1820939777":{"id":"n1820939777","loc":[-85.2415247,42.0104973],"version":"1","changeset":"12180411","user":"Thad C","uid":"349027","visible":"true","timestamp":"2012-07-10T22:57:18Z","tags":{}},"n1821006698":{"id":"n1821006698","loc":[-85.6345227,41.9382009],"version":"1","changeset":"12181163","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T01:58:48Z","tags":{}},"n1821006700":{"id":"n1821006700","loc":[-85.6344894,41.938975],"version":"1","changeset":"12181163","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T01:58:48Z","tags":{}},"n1821006704":{"id":"n1821006704","loc":[-85.6351181,41.9370157],"version":"1","changeset":"12181163","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T01:58:48Z","tags":{}},"n1821006706":{"id":"n1821006706","loc":[-85.6357554,41.9361657],"version":"1","changeset":"12181163","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T01:58:48Z","tags":{}},"n1821006708":{"id":"n1821006708","loc":[-85.6351235,41.9368481],"version":"1","changeset":"12181163","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T01:58:48Z","tags":{}},"n1821006710":{"id":"n1821006710","loc":[-85.6352844,41.9364211],"version":"1","changeset":"12181163","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T01:58:48Z","tags":{}},"n1821006712":{"id":"n1821006712","loc":[-85.6351503,41.937307],"version":"1","changeset":"12181163","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T01:58:48Z","tags":{}},"n1821006716":{"id":"n1821006716","loc":[-85.6350366,41.9379774],"version":"1","changeset":"12181163","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T01:58:48Z","tags":{}},"n1821006725":{"id":"n1821006725","loc":[-85.6352147,41.9375903],"version":"1","changeset":"12181163","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T01:58:48Z","tags":{}},"n1821137607":{"id":"n1821137607","loc":[-85.5297057,41.9669915],"version":"1","changeset":"12182668","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T07:35:32Z","tags":{}},"n1821137608":{"id":"n1821137608","loc":[-85.5288598,41.9673094],"version":"1","changeset":"12182668","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T07:35:32Z","tags":{}},"n1821139530":{"id":"n1821139530","loc":[-85.4832228,41.9881686],"version":"1","changeset":"12182679","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T07:37:01Z","tags":{}},"n1821139531":{"id":"n1821139531","loc":[-85.4812101,41.9851258],"version":"1","changeset":"12182679","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T07:37:01Z","tags":{}},"n1821139532":{"id":"n1821139532","loc":[-85.4799127,41.9860244],"version":"1","changeset":"12182679","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T07:37:01Z","tags":{}},"n1821139533":{"id":"n1821139533","loc":[-85.4800313,41.9865555],"version":"1","changeset":"12182679","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T07:37:01Z","tags":{}},"n1841425201":{"id":"n1841425201","loc":[-85.4334577,42.0063713],"version":"1","changeset":"12524188","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-28T14:50:57Z","tags":{}},"n1841425222":{"id":"n1841425222","loc":[-85.4382449,42.0055785],"version":"1","changeset":"12524188","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-28T14:50:58Z","tags":{}},"n1914861007":{"id":"n1914861007","loc":[-85.394959,42.0057472],"version":"1","changeset":"13114234","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-09-15T03:33:21Z","tags":{}},"n1914861057":{"id":"n1914861057","loc":[-85.3967185,42.0049695],"version":"1","changeset":"13114234","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-09-15T03:33:22Z","tags":{}},"n1914861112":{"id":"n1914861112","loc":[-85.394179,42.0056906],"version":"1","changeset":"13114234","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-09-15T03:33:24Z","tags":{}},"n1914861306":{"id":"n1914861306","loc":[-85.3900226,42.0028488],"version":"1","changeset":"13114234","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-09-15T03:33:27Z","tags":{}},"n2114807565":{"id":"n2114807565","loc":[-85.6385979,41.9577824],"version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:15Z","tags":{}},"n2114807568":{"id":"n2114807568","loc":[-85.6325097,41.9775713],"version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:15Z","tags":{}},"n2114807572":{"id":"n2114807572","loc":[-85.6328996,41.9980965],"version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:15Z","tags":{}},"n2114807578":{"id":"n2114807578","loc":[-85.6344818,41.9696956],"version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:15Z","tags":{}},"n2114807583":{"id":"n2114807583","loc":[-85.6326289,41.9757853],"version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:15Z","tags":{}},"n2114807593":{"id":"n2114807593","loc":[-85.6360828,41.9650674],"version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:15Z","tags":{}},"n2130304159":{"id":"n2130304159","loc":[-85.6352537,41.9450015],"version":"1","changeset":"14802606","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-01-27T04:50:52Z","tags":{"railway":"level_crossing"}},"n2139795852":{"id":"n2139795852","loc":[-85.6374708,41.9311633],"version":"1","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:47:57Z","tags":{}},"n2139858882":{"id":"n2139858882","loc":[-85.635178,41.9356158],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:11Z","tags":{}},"n2139858883":{"id":"n2139858883","loc":[-85.63533,41.9355886],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:11Z","tags":{}},"n2139858884":{"id":"n2139858884","loc":[-85.6353819,41.93556],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:11Z","tags":{}},"n2139858885":{"id":"n2139858885","loc":[-85.6353665,41.9355157],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:11Z","tags":{}},"n2139858886":{"id":"n2139858886","loc":[-85.6353165,41.9354971],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:11Z","tags":{}},"n2139858887":{"id":"n2139858887","loc":[-85.6352454,41.9355328],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:11Z","tags":{}},"n2139858888":{"id":"n2139858888","loc":[-85.6350184,41.9357846],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:11Z","tags":{}},"n2139858889":{"id":"n2139858889","loc":[-85.634978,41.9359448],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:11Z","tags":{}},"n2139858890":{"id":"n2139858890","loc":[-85.6347723,41.9361523],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:11Z","tags":{}},"n2139858891":{"id":"n2139858891","loc":[-85.6347165,41.9362667],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:11Z","tags":{}},"n2139858892":{"id":"n2139858892","loc":[-85.6346992,41.9364312],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:11Z","tags":{}},"n2139858893":{"id":"n2139858893","loc":[-85.634603,41.9366329],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:11Z","tags":{}},"n2139858894":{"id":"n2139858894","loc":[-85.6345973,41.9367488],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:11Z","tags":{}},"n2139858895":{"id":"n2139858895","loc":[-85.6345127,41.9369734],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:11Z","tags":{}},"n2139858896":{"id":"n2139858896","loc":[-85.634478,41.9371923],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:11Z","tags":{}},"n2139858897":{"id":"n2139858897","loc":[-85.6344838,41.9373768],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:11Z","tags":{}},"n2139858898":{"id":"n2139858898","loc":[-85.6346242,41.9375299],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:11Z","tags":{}},"n2139858899":{"id":"n2139858899","loc":[-85.6347723,41.9376357],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:11Z","tags":{}},"n2139858900":{"id":"n2139858900","loc":[-85.6347607,41.9377788],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:11Z","tags":{}},"n2139858901":{"id":"n2139858901","loc":[-85.6346204,41.9379533],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:11Z","tags":{}},"n2139858902":{"id":"n2139858902","loc":[-85.6344184,41.9380105],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:11Z","tags":{}},"n2139858903":{"id":"n2139858903","loc":[-85.6341627,41.9380406],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:11Z","tags":{}},"n2139858904":{"id":"n2139858904","loc":[-85.634005,41.9381679],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:11Z","tags":{}},"n2139858905":{"id":"n2139858905","loc":[-85.63393,41.9383353],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:11Z","tags":{}},"n2139858906":{"id":"n2139858906","loc":[-85.6338588,41.9384597],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858907":{"id":"n2139858907","loc":[-85.6336627,41.9387759],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858908":{"id":"n2139858908","loc":[-85.6335127,41.9389361],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858933":{"id":"n2139858933","loc":[-85.6353118,41.9432646],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858934":{"id":"n2139858934","loc":[-85.6353952,41.9433002],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858935":{"id":"n2139858935","loc":[-85.6356496,41.9433255],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858936":{"id":"n2139858936","loc":[-85.6363128,41.9433373],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858937":{"id":"n2139858937","loc":[-85.6365467,41.9433779],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858938":{"id":"n2139858938","loc":[-85.6368692,41.9435265],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858939":{"id":"n2139858939","loc":[-85.6370986,41.9437039],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858940":{"id":"n2139858940","loc":[-85.6372371,41.9437732],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858941":{"id":"n2139858941","loc":[-85.6374756,41.9438171],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858942":{"id":"n2139858942","loc":[-85.6376164,41.9439286],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858943":{"id":"n2139858943","loc":[-85.6377504,41.944138],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858944":{"id":"n2139858944","loc":[-85.6384204,41.9443137],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858945":{"id":"n2139858945","loc":[-85.6385726,41.9444506],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858946":{"id":"n2139858946","loc":[-85.638702,41.9445739],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858947":{"id":"n2139858947","loc":[-85.6387179,41.9446516],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858948":{"id":"n2139858948","loc":[-85.6387088,41.9447985],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858949":{"id":"n2139858949","loc":[-85.6387656,41.9449877],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858950":{"id":"n2139858950","loc":[-85.638777,41.9451448],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858951":{"id":"n2139858951","loc":[-85.6387088,41.9452631],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858964":{"id":"n2139858964","loc":[-85.6383346,41.9442912],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858966":{"id":"n2139858966","loc":[-85.6384724,41.9443605],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858967":{"id":"n2139858967","loc":[-85.6354078,41.9434285],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858968":{"id":"n2139858968","loc":[-85.635271,41.943654],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858969":{"id":"n2139858969","loc":[-85.6352657,41.9437437],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858970":{"id":"n2139858970","loc":[-85.635271,41.9438195],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858971":{"id":"n2139858971","loc":[-85.6351563,41.9438906],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858972":{"id":"n2139858972","loc":[-85.6351384,41.9438882],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858973":{"id":"n2139858973","loc":[-85.6351514,41.9438034],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858974":{"id":"n2139858974","loc":[-85.6351237,41.9436641],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858975":{"id":"n2139858975","loc":[-85.6351498,41.9436108],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858976":{"id":"n2139858976","loc":[-85.6351058,41.9435345],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858977":{"id":"n2139858977","loc":[-85.6349641,41.9432051],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858986":{"id":"n2139858986","loc":[-85.6341205,41.9380746],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858990":{"id":"n2139858990","loc":[-85.6345671,41.9381816],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858995":{"id":"n2139858995","loc":[-85.6339783,41.9382273],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139859003":{"id":"n2139859003","loc":[-85.6340477,41.9373489],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:14Z","tags":{}},"n2139859004":{"id":"n2139859004","loc":[-85.6339784,41.9374752],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:14Z","tags":{}},"n2139870406":{"id":"n2139870406","loc":[-85.6342265,41.9432605],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:01Z","tags":{}},"n2139877106":{"id":"n2139877106","loc":[-85.6346323,41.9438746],"version":"1","changeset":"14893390","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:53:38Z","tags":{}},"n2139982399":{"id":"n2139982399","loc":[-85.6324055,41.9408537],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982400":{"id":"n2139982400","loc":[-85.632488,41.941063],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{"leisure":"slipway"}},"n2139982401":{"id":"n2139982401","loc":[-85.6327261,41.9415366],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982402":{"id":"n2139982402","loc":[-85.6326391,41.9413598],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982403":{"id":"n2139982403","loc":[-85.6327041,41.9414391],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982405":{"id":"n2139982405","loc":[-85.6322891,41.9406009],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982406":{"id":"n2139982406","loc":[-85.6325412,41.9425257],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139989333":{"id":"n2139989333","loc":[-85.6340584,41.9431731],"version":"1","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:33Z","tags":{}},"n2140006331":{"id":"n2140006331","loc":[-85.6361751,41.9459744],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006334":{"id":"n2140006334","loc":[-85.636528,41.9459751],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006336":{"id":"n2140006336","loc":[-85.6370918,41.9458926],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006338":{"id":"n2140006338","loc":[-85.6378806,41.9456474],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006340":{"id":"n2140006340","loc":[-85.6385831,41.9454343],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006342":{"id":"n2140006342","loc":[-85.639341,41.945157],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006344":{"id":"n2140006344","loc":[-85.6393497,41.9450232],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006346":{"id":"n2140006346","loc":[-85.6388245,41.9450145],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006348":{"id":"n2140006348","loc":[-85.6388167,41.9441739],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006351":{"id":"n2140006351","loc":[-85.6382915,41.9441797],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006353":{"id":"n2140006353","loc":[-85.63828,41.9438109],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006355":{"id":"n2140006355","loc":[-85.6381949,41.9436009],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006357":{"id":"n2140006357","loc":[-85.6371904,41.9435918],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006359":{"id":"n2140006359","loc":[-85.6366966,41.9432727],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006361":{"id":"n2140006361","loc":[-85.6353755,41.9432744],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006365":{"id":"n2140006365","loc":[-85.6350906,41.9435472],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006366":{"id":"n2140006366","loc":[-85.6343461,41.9441573],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006395":{"id":"n2140006395","loc":[-85.6351171,41.9437175],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006397":{"id":"n2140006397","loc":[-85.635352,41.9450206],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006399":{"id":"n2140006399","loc":[-85.6358194,41.9454937],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006401":{"id":"n2140006401","loc":[-85.6348693,41.9445739],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006431":{"id":"n2140006431","loc":[-85.6376737,41.9438023],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:25Z","tags":{}},"n2140006437":{"id":"n2140006437","loc":[-85.6382631,41.9442724],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:25Z","tags":{}},"n2189123379":{"id":"n2189123379","loc":[-85.6342671,41.9352665],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"w203974076":{"id":"w203974076","version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:03Z","tags":{"highway":"footway"},"nodes":["n2139870442","n2139870457","n2139870458","n2139870459","n2139870460","n2139870452"]},"w170989131":{"id":"w170989131","version":"5","changeset":"13114234","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-09-15T03:33:30Z","tags":{"name":"St Joseph River","source":"Bing Imagery","waterway":"river"},"nodes":["n1820938225","n1820938712","n1820937596","n1820937574","n1820938515","n1820938330","n1820938678","n1820938240","n1820938950","n1820939226","n1820939575","n1820937913","n1820938223","n1820937668","n1820938545","n1820937584","n1820939742","n1820939727","n1820937578","n1820938149","n1820938124","n1820938888","n1820938898","n1820937922","n1820939543","n1820939370","n1820939401","n1820939647","n1820938345","n1820939644","n1820938333","n1820938370","n1820938624","n1820938493","n1820939559","n1820939763","n1820939237","n1820939416","n1820937810","n1820938317","n1820938324","n1820937558","n1820939556","n1820938298","n1820939348","n1820939125","n1820939081","n1820938859","n1820939126","n1820938881","n1820939439","n1820939324","n1820939128","n1820938101","n1820937706","n1820938382","n1820938776","n1820937815","n1820939177","n1820939688","n1820938952","n1820938216","n1820938387","n1820939333","n1820938243","n1820938248","n1820937666","n1820939051","n1820938332","n1820939438","n1820939407","n1820939361","n1820937517","n1820938770","n1820939591","n1820937857","n1820938491","n1820937993","n1820938125","n1820938166","n1820937746","n1820939028","n1820937638","n1820938676","n1820938843","n1820938844","n1820937978","n1820938730","n1820939544","n1820938304","n1820939123","n1820939494","n1820939450","n1820939555","n1820938133","n1820938129","n1820938871","n1820939408","n1820938669","n1820938260","n1820939740","n1820937625","n1820938631","n1820939651","n1820939613","n1820937850","n1820938325","n1820937736","n1820938804","n1820938837","n1820938014","n1820938991","n1820938722","n1820938935","n1820937870","n1820938432","n1820937986","n1820938756","n1820938966","n1820939159","n1820937744","n1820938334","n1820937645","n1820939394","n1820937656","n1820938392","n1820939703","n1820938385","n1820938947","n1820938854","n1820938428","n1820938488","n1820938269","n1820938668","n1820938268","n1820938707","n1820937732","n1820939144","n1820938481","n1820938771","n1820938686","n1820938948","n1820937997","n1820937769","n1820939003","n1820938083","n1820939011","n1820938803","n1820938700","n1820939723","n1820938808","n1820938262","n1820938081","n1820938926","n1820938326","n1820938102","n1820938508","n1820939590","n1820939199","n1820938084","n1820938870","n1820938895","n1820937611","n1820938918","n1820938514","n1820939610","n1820938910","n1820937523","n1820938127","n1820939108","n1820937981","n1820938938","n1820938715","n1820939016","n1820938237","n1820939623","n1820939602","n1820937734","n1820938977","n1820939633","n1820939156","n1820939406","n1820938279","n1820938301","n1820937678","n1820937671","n1820939163","n1820938356","n1820939372","n1820937568","n1820937626","n1820939710","n1820939004","n1820938253","n1820938571","n1820937513","n1820939412","n1820939701","n1820939509","n1820938839","n1820939731","n1820937798","n1820939676","n1820939724","n1820939243","n1820939704","n1820937814","n1820937599","n1820938199","n1820938995","n1820938445","n1820938069","n1820938470","n1820939074","n1820938193","n1820938740","n1820938047","n1820939507","n1820939441","n1820939160","n1820937849","n1820937840","n1820938052","n1820938988","n1820938796","n1820937724","n1820937620","n1820939304","n1820938343","n1820939649","n1820938875","n1820939686","n1820938476","n1820937801","n1820937737","n1820938264","n1820939609","n1820939496","n1820939593","n1820939566","n1820939661","n1820937782","n1820938912","n1820939173","n1820937733","n1820938953","n1820939603","n1820937607","n1820938468","n1820939601","n1820939694","n1820939133","n1820938897","n1820938893","n1820937831","n1820937730","n1820938820","n1820938046","n1820938426","n1820938347","n1820937582","n1820938954","n1820938033","n1820938104","n1820938680","n1820939563","n1820939404","n1820939714","n1820939000","n1820937992","n1820938168","n1820939510","n1820939500","n1820937509","n1820938865","n1820939773","n1820938138","n1820938905","n1820937623","n1820939418","n1820937946","n1820939577","n1820937615","n1820939687","n1820939119","n1820937988","n1820938337","n1820937750","n1820938703","n1820938339","n1820939044","n1820939770","n1820938913","n1820937672","n1820939722","n1820937768","n1820939597","n1820939612","n1820937699","n1820937682","n1820937669","n1820937657","n1820939363","n1820937800","n1820938265","n1820937760","n1820938207","n1820938115","n1820939130","n1820939716","n1820938338","n1820938239","n1820939040","n1820938064","n1820938855","n1820939015","n1820938258","n1820939042","n1820939043","n1820938443","n1820939725","n1820937675","n1820938568","n1820938280","n1820937705","n1820938775","n1820938636","n1820938626","n1820937859","n1820938096","n1820937852","n1820939039","n1820938247","n1820938585","n1820937707","n1820938117","n1820938909","n1820939115","n1820939335","n1820938805","n1820937935","n1820937876","n1820938699","n1820937869","n1820938603","n1820938100","n1820938500","n1820938283","n1820938275","n1820938923","n1820938365","n1820938349","n1820937804","n1820937903","n1820937608","n1820938688","n1820939671","n1820938092","n1820937820","n1820938753","n1820938922","n1820937990","n1820939682","n1820939738","n1820939600","n1820938167","n1820937726","n1820939702","n1820938209","n1820939456","n1820937837","n1820938222","n1820938902","n1820939162","n1820938965","n1820938461","n1820937681","n1820937514","n1820937764","n1820939719","n1820939697","n1820938899","n1820939093","n1820938702","n1820939595","n1820938749","n1820938348","n1820937606","n1820938675","n1820938830","n1820938737","n1820938758","n1820938716","n1820939107","n1820937863","n1820939033","n1820938163","n1820937867","n1820938819","n1820938034","n1820938252","n1820937563","n1820937868","n1820939032","n1820938632","n1820937982","n1820937943","n1820939568","n1820939541","n1820938215","n1820939097","n1820938812","n1820937518","n1820937952","n1820938711","n1820938736","n1820939066","n1820937591","n1820938082","n1820938108","n1820938496","n1820939410","n1820938949","n1820938327","n1820937708","n1820939023","n1820937772","n1820938256","n1820939083","n1820938378","n1820938961","n1820937610","n1820939717","n1820938695","n1820938590","n1820939655","n1820938341","n1820939054","n1820939157","n1820939674","n1820939684","n1820939511","n1820937631","n1820939458","n1820937830","n1820937709","n1820937779","n1820939749","n1820938880","n1820938856","n1820938557","n1820939557","n1820938249","n1820938818","n1820937594","n1820939114","n1820938416","n1820937508","n1820938990","n1820938201","n1820937759","n1820937987","n1820939164","n1820939753","n1820938187","n1820939067","n1820937586","n1820937941","n1820938121","n1820937807","n1820938521","n1820939726","n1820938244","n1820939014","n1820938741","n1820937629","n1820938664","n1820938747","n1820939082","n1820938709","n1820938320","n1820938270","n1820937619","n1820937777","n1820937718","n1820939138","n1820938056","n1820938155","n1820938596","n1820937775","n1820938437","n1820938128","n1820939581","n1820939145","n1820938546","n1820938184","n1820937601","n1820937794","n1820938539","n1820939645","n1820938438","n1820938436","n1820939025","n1820938915","n1820938534","n1820937605","n1820939607","n1820939101","n1820939580","n1820939268","n1820939134","n1820938849","n1820938754","n1820938079","n1820937842","n1820938781","n1820938873","n1820938495","n1820938381","n1820938503","n1820939436","n1820938502","n1820939087","n1820938996","n1820938449","n1820938907","n1820937979","n1820937780","n1820937546","n1820939699","n1820937677","n1820938957","n1820938946","n1820937776","n1820937717","n1820938718","n1820937637","n1820938510","n1820937663","n1820938941","n1820939151","n1820937603","n1820938250","n1820937951","n1820938630","n1820938821","n1820938779","n1820938497","n1820938159","n1820939536","n1820938409","n1820938386","n1820939116","n1820938340","n1820939117","n1820938291","n1820938435","n1820937819","n1820938242","n1820939078","n1820938877","n1820939104","n1820939445","n1820938367","n1820938903","n1820939420","n1820938517","n1820939508","n1820939542","n1820939326","n1820938210","n1820939020","n1820938815","n1820937832","n1820939513","n1820937818","n1820939005","n1820938717","n1820939135","n1820938384","n1820937587","n1820939024","n1820939504","n1820939120","n1820939026","n1820938015","n1820938998","n1820937648","n1820939137","n1820937761","n1820938195","n1820938535","n1820939550","n1820938725","n1820938282","n1820937781","n1820937792","n1820939705","n1820937788","n1820939707","n1820937882","n1820939632","n1820938427","n1820938276","n1820939617","n1820939013","n1820939035","n1820937543","n1820939365","n1820937752","n1820937802","n1820939183","n1820939670","n1820938450","n1820939375","n1820937813","n1820937673","n1820937783","n1820939029","n1820939768","n1820939377","n1820937974","n1820939244","n1820939642","n1820937864","n1820938255","n1820938528","n1820939666","n1820938120","n1820937812","n1820938928","n1820939750","n1820939099","n1820938073","n1820938714","n1820939140","n1820938192","n1820937844","n1820938635","n1820938742","n1820939583","n1820937887","n1820938318","n1820938816","n1820939698","n1820938273","n1820939181","n1820937652","n1820938748","n1820937651","n1820938519","n1820938019","n1820938752","n1820938235","n1820939118","n1820938562","n1820939314","n1820939570","n1820938190","n1820938342","n1820938533","n1820937977","n1820939089","n1820939146","n1820938622","n1820938297","n1820938524","n1820939283","n1820938874","n1820938832","n1820937550","n1820937843","n1820938638","n1820938116","n1820938206","n1820938319","n1820939053","n1820937845","n1820938093","n1820939217","n1820938997","n1820939355","n1820938861","n1820938726","n1820938057","n1820939373","n1820937862","n1820938518","n1820939072","n1820939680","n1820938444","n1820938217","n1820938506","n1820938393","n1820938492","n1820938852","n1820938221","n1820938773","n1820937684","n1820939060","n1820938224","n1820938203","n1820938840","n1820937525","n1820938147","n1820938433","n1820938188","n1820939359","n1820938750","n1820938016","n1820938768","n1820937621","n1820937799","n1820938951","n1820938721","n1820939037","n1820937866","n1820939715","n1820938063","n1820938446","n1820937627","n1820939624","n1820938431","n1820939721","n1820939622","n1820939239","n1820939263","n1820939648","n1820939640","n1820938867","n1820938757","n1820938439","n1820939352","n1820937740","n1820939329","n1820938229","n1820937583","n1820938180","n1820938366","n1820937767","n1820937758","n1820939374","n1820938869","n1820938292","n1820938400","n1820938399","n1820939734","n1820939289","n1820938944","n1820937755","n1820938759","n1820938434","n1820937600","n1820937825","n1820937670","n1820937793","n1820938011","n1820938246","n1820938956","n1820937770","n1820937757","n1820938059","n1820937860","n1820937569","n1820939266","n1820939685","n1820939672","n1820938606","n1820938772","n1820939038","n1820938211","n1820938359","n1820939619","n1820938708","n1820939512","n1820938065","n1820939233","n1820939739","n1820938786","n1820938879","n1820939147","n1820938563","n1820939148","n1820937839","n1820937659","n1820937786","n1820938419","n1820939565","n1820939402","n1820937710","n1820938254","n1820938271","n1820938390","n1820937680","n1820938140","n1820937817","n1820938218","n1820937985","n1820939235","n1820938441","n1820938401","n1820938719","n1820937795","n1820938971","n1820938460","n1820939759","n1820937972","n1820937841","n1820938462","n1820939320","n1820938978","n1820938360","n1820939713","n1820937676","n1820939712","n1820937939","n1820938080","n1820937754","n1820937753","n1820938530","n1820937886","n1820939689","n1820939124","n1820938697","n1820938789","n1820939105","n1820938860","n1820938853","n1820939400","n1820937561","n1820938404","n1820938774","n1820939316","n1820937696","n1820938782","n1820938975","n1820937564","n1820939730","n1820938257","n1820937853","n1820938487","n1820938848","n1820938906","n1820939230","n1820938424","n1820938051","n1820937771","n1820939587","n1820939149","n1820938792","n1820939041","n1820938934","n1820939777","n1820937515","n1820939058","n1820938312","n1820939264","n1820939631","n1820939109","n1820939403","n1820939664","n1820938724","n1820938929","n1820939399","n1820939776","n1820939369","n1820939185","n1820937701","n1820938126","n1820938336","n1820938219","n1820939080","n1820938642","n1820938043","n1820937725","n1820938548","n1820938552","n1820938035","n1820938684","n1820937778","n1820938764","n1820939021","n1820939346","n1820937712","n1820939761","n1820938397","n1820937747","n1820938566","n1820939161","n1820939090","n1820939752","n1820939271","n1820938878","n1820938110","n1820938346","n1820938499","n1820938151","n1820939538","n1820938281","n1820939153","n1820938551","n1820939285","n1820938197","n1820938408","n1820938482","n1820939036","n1820939579","n1820938489","n1820938483","n1820938189","n1820938123","n1820938087","n1820937741","n1820938485","n1820937590","n1820938972","n1820937773","n1820937520","n1820938872","n1820938131","n1820938452","n1820938328","n1820939620","n1820937641","n1820938353","n1820939693","n1820938705","n1820937640","n1820939189","n1820938144","n1820939774","n1820938694","n1820938238","n1820939397","n1820937917","n1820938454","n1820938567","n1820938979","n1820938060","n1820938204","n1820937828","n1820939232","n1820938806","n1820938857","n1820938078","n1820938105","n1820939228","n1820938604","n1820937763","n1820937854","n1820938289","n1820939736","n1820937937","n1820937714","n1820938278","n1820938058","n1820938706","n1820938989","n1820938313","n1820938520","n1820938288","n1820937689","n1820939537","n1820939531","n1820939019","n1820937527","n1820938455","n1820938814","n1820938045","n1820939627","n1820938213","n1820938161","n1820938331","n1820938024","n1820938220","n1820938062","n1820938178","n1820937796","n1820937644","n1820938490","n1820937589","n1820937879","n1820939614","n1820938882","n1820938039","n1820938538","n1820937667","n1820937719","n1820938561","n1820939658","n1820938783","n1820938601","n1820938198","n1820938388","n1820938969","n1820937687","n1820939086","n1820939665","n1820939187","n1820938498","n1820938261","n1820937983","n1820938068","n1820938136","n1820939061","n1820938137","n1820938186","n1820939071","n1820937592","n1820939669","n1820937553","n1820939357","n1820938727","n1820939371","n1820939112","n1820939079","n1820938743","n1820938467","n1820938834","n1820938022","n1820938537","n1820938122","n1820938516","n1820937614","n1820937612","n1820939469","n1820939636","n1820939050","n1820939552","n1820938157","n1820938663","n1820938955","n1820939091","n1820938430","n1820938471","n1820937809","n1820938074","n1820938208","n1820938914","n1820938858","n1820938417","n1820937531","n1820938107","n1820939100","n1820938751","n1820937711","n1820938824","n1820939745","n1820937572","n1820938602","n1820938212","n1820938097","n1820937921","n1820938090","n1820938511","n1820938876","n1820939762","n1820938234","n1820938048","n1820937774","n1820937856","n1820937749","n1820937765","n1820938286","n1820939095","n1820938480","n1820939229","n1820938277","n1820937617","n1820938311","n1820937622","n1820939196","n1820937690","n1820939006","n1820939287","n1820939131","n1820938106","n1820938784","n1820938335","n1820938095","n1820938182","n1820937715","n1820937683","n1820938070","n1820939605","n1820938527","n1820938763","n1820938398","n1820937686","n1820939621","n1820937664","n1820939277","n1820938565","n1820939539","n1820938099","n1820939646","n1820938556","n1820937548","n1820938729","n1820939336","n1820938259","n1820938728","n1820938361","n1820937643","n1820938644","n1820939007","n1820939690","n1820939227","n1820937635","n1820937950","n1820938682","n1820939150","n1820939012","n1820939261","n1820939111","n1820937805","n1820939691","n1820939677","n1820937628","n1820937811","n1820938790","n1820938251","n1820938226","n1820938942","n1820937633","n1820937984","n1820937751","n1820939673","n1820938970","n1820938415","n1820938597","n1820938309","n1820938111","n1820938472","n1820938894","n1820938402","n1820937593","n1820938570","n1820939102","n1820939775","n1820937948","n1820939121","n1820937511","n1820938787","n1820939720","n1820939075","n1820937880","n1820937742","n1820937721","n1820939535","n1820938486","n1820938354","n1820937632","n1820939010","n1820938885","n1820938089","n1820937613","n1820938442","n1820938245","n1820938272","n1820937566","n1820938295","n1820938532","n1820938883","n1820937713","n1820937674","n1820939635","n1820938448","n1820938355","n1820938587","n1820938559","n1820937787","n1820939301","n1820937723","n1820939056","n1820937560","n1820938323","n1820938230","n1820938453","n1820938377","n1820938357","n1820939637","n1820938017","n1820939540","n1820939376","n1820937639","n1820937642","n1820938075","n1820938351","n1820938766","n1820937897","n1820938973","n1820938066","n1820939547","n1820939652","n1820937944","n1820937748","n1820939234","n1820939193","n1820937891","n1820938785","n1820939132","n1820938523","n1820938884","n1820938411","n1820939554","n1820938791","n1820937655","n1820938368","n1820939152","n1820938030","n1820938447","n1820937580","n1820939628","n1820937588","n1820937894","n1820939201","n1820938086","n1820937650","n1820938379","n1820939008","n1820938999","n1820937524","n1820937872","n1820938389","n1820939197","n1820938422","n1820938936","n1820939262","n1820937634","n1820938583","n1820939589","n1820937901","n1820939034","n1820939065","n1820938290","n1820939195","n1820938228","n1820937884","n1820938797","n1820938191","n1820939191","n1820939198","n1820937892","n1820939679","n1820938507","n1820937647","n1820937909","n1820938542","n1820939598","n1820937851","n1820939084","n1820939728","n1820937688","n1820938263","n1820938670","n1820937762","n1820939310","n1820938925","n1820938862","n1820938822","n1820938547","n1820937731","n1820938594","n1820938592","n1820938214","n1820938284","n1820937835","n1820938599","n1820939437","n1820937834","n1820937576","n1820937692","n1820939586","n1820939546","n1820938403","n1820937970","n1820939561","n1820938098","n1820938851","n1820938477","n1820938892","n1820939045","n1820939758","n1820939350","n1820938321","n1820938440","n1820938595","n1820938364","n1820938962","n1820938118","n1820939678","n1820938406","n1820938549","n1820937555","n1820938823","n1820937521","n1820939471","n1820939487","n1820938799","n1820938605","n1820937928","n1820938373","n1820939747","n1820939629","n1820937557","n1820937526","n1820938958","n1820938833","n1820937636","n1820938967","n1820938760","n1820938842","n1820938067","n1820939077","n1820939224","n1820938185","n1820939110","n1820938372","n1820939757","n1820939063","n1820939660","n1820938813","n1820937528","n1820938369","n1820938896","n1820939551","n1820939683","n1820937660","n1820937873","n1820938810","n1820938478","n1820939662","n1820937595","n1820939052","n1820938113","n1820939070","n1820938733","n1820937878","n1820938300","n1820939760","n1820939718","n1820937646","n1820939057","n1820939443","n1914861306","n1820938013","n1820937529","n1820939764","n1820938826","n1820937885","n1820939588","n1820937865","n1820937833","n1914861112","n1820938761","n1914861007","n1820937905","n1820938541","n1820939092","n1914861057","n1820938153","n1820938267","n1820939265","n1820938085","n1820939018","n1820939755","n1820938474","n1820939027","n1820938593","n1820938202","n1820939599","n1820939695","n1820938077","n1820938012","n1820939545","n1820939596","n1820939337","n1820938227","n1820937698","n1820938475","n1820939465","n1820938165","n1820938698","n1820938525","n1820938529","n1820938553","n1820938940","n1820939498","n1820938501","n1820939533","n1820938924","n1820939634","n1820939220","n1820939657","n1820938887","n1820938838","n1820938114","n1820937823","n1820938778","n1820938801","n1820939096","n1820938981","n1820937953","n1820938732","n1820938980","n1820938960","n1820937949","n1820938026","n1820939273","n1841425201","n1820938629","n1820938864","n1820938554","n1820938088","n1820937685","n1841425222","n1820939729","n1820937665","n1820937838","n1820937739","n1820938780","n1820937821","n1820938825","n1820939055","n1820939485","n1820938041","n1820938746","n1820939562","n1820938459","n1820939489","n1820938050","n1820937980","n1820937695","n1820938413","n1820938555","n1820937703","n1820938536","n1820938196","n1820938287","n1820938169","n1820939279","n1820938531","n1820938959","n1820939741","n1820938665","n1820938963","n1820939611","n1820937653","n1820939618","n1820939492","n1820938600","n1820938628","n1820939312","n1820939616","n1820937738","n1820939001","n1820939062","n1820938794","n1820938558","n1820937822","n1820937532","n1820939073","n1820938200","n1820938241","n1820938968","n1820938927","n1820938306","n1820937630","n1820938456","n1820937694","n1820938908","n1820939076","n1820937522","n1820939659","n1820938522","n1820939318","n1820938932","n1820938841","n1820937579","n1820937540","n1820938560","n1821139530","n1820938964","n1820937662","n1820939281","n1821139533","n1820937797","n1821139532","n1820939751","n1821139531","n1820939291","n1820938420","n1820939696","n1820938904","n1820938484","n1820939448","n1820939009","n1820938735","n1820938986","n1820938937","n1820939030","n1820938734","n1820938745","n1820939106","n1820938987","n1820937858","n1820938673","n1820938620","n1820937808","n1820937700","n1820939573","n1820938540","n1820937661","n1820937570","n1820938396","n1820937875","n1820939048","n1820938233","n1820938793","n1820939584","n1820938412","n1820938394","n1820937846","n1820938800","n1820938690","n1820939331","n1820939630","n1820938762","n1820938710","n1820939322","n1820938992","n1821137608","n1821137607","n1820937924","n1820939139","n1820939463","n1820939574","n1820938294","n1820938071","n1820938307","n1820938061","n1820939260","n1820937899","n1820938310","n1820938983","n1820937530","n1820938993","n1820938890","n1820937915","n1820938231","n1820938040","n1820938920","n1820939585","n1820938135","n1820939700","n1820937824","n1820939667","n1820937930","n1820938134","n1820937551","n1820939405","n1820938232","n1820937716","n1820937848","n1820939765","n1820939068","n1820939766","n1820937933","n1820937720","n1820939222","n1820939772","n1820939022","n1820939732","n1820937702","n1820937691","n1820938945","n1820937756","n1820938451","n1820938410","n1820938798","n1820937945","n1820937654","n1820938598","n1820938836","n1820937571","n1820937556","n1820938994","n1820938919","n1820938863","n1820939064","n1820938018","n1820937658","n1820937537","n1820938142","n1820938666","n1820937535","n1820939571","n1820938465","n1820939638","n1820937533","n1820939656","n1820939422","n1820938109","n1820938405","n1820938028","n1820937649","n1820938829","n1820939031","n1820939155","n1820938350","n1820938463","n1820938425","n1820939047","n1820938831","n1820938494","n1820937697","n1820938504","n1820938900","n1820937784","n1820938414","n1820938076","n1820938723","n1820937722","n1820938739","n1820937791","n1820938985","n1820938352","n1820938293","n1820938274","n1820939692","n1820937871","n1820939059","n1820938868","n1820937877","n1820937743","n1820938429","n1820937545","n1820937575","n1820938302","n1820938505","n1820938916","n1820938374","n1820938329","n1820937790","n1820939735","n1820938930","n1820937995","n1820938512","n1820938130","n1820938194","n1820938671","n1820938802","n1820937542","n1820937602","n1820939069","n1820938901","n1820939654","n1820937727","n1820939569","n1820938375","n1820939306","n1820938479","n1820938376","n1820938667","n1820937766","n1820939467","n1820939567","n1820937806","n1820938943","n1820938931","n1820937745","n1820939452","n1820938738","n1820938053","n1820939653","n1820938640","n1820937604","n1820937536","n1820938701","n1820939625","n1820939744","n1820939572","n1820937577","n1820937541","n1820938891","n1820937597","n1820938469","n1820939194","n1820937539","n1820938911","n1820939017","n1820939650","n1820939103","n1820939578","n1820938132","n1820937549","n1820938634","n1820939743","n1820937544","n1820937826","n1820937598","n1820937547","n1820938032","n1820939142"]},"w17963021":{"id":"w17963021","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:22:17Z","tags":{"highway":"residential","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15331667","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185948706","n185948708","n185948710"]},"w203974069":{"id":"w203974069","version":"2","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:34Z","tags":{"amenity":"shelter","area":"yes","building":"yes","shelter_type":"picnic_shelter"},"nodes":["n2139870431","n2139870432","n2139870433","n2139870434","n2139870431"]},"w209816575":{"id":"w209816575","version":"1","changeset":"15353718","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T16:29:46Z","tags":{"area":"yes","building":"yes"},"nodes":["n2199856288","n2199856289","n2199856290","n2199856291","n2199856292","n2199856293","n2199856294","n2199856295","n2199856296","n2199856297","n2199856298","n2199856299","n2199856300","n2199856301","n2199856302","n2199856303","n2199856288"]},"w203841838":{"id":"w203841838","version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:32Z","tags":{"area":"yes","natural":"water"},"nodes":["n2138493826","n2138493827","n2138493828","n2138493829","n2138493830","n2138493831","n2138493833","n2138493832","n2138493826"]},"w203972937":{"id":"w203972937","version":"2","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:26Z","tags":{"highway":"path","name":"Riverwalk Trail","surface":"asphalt","width":"3"},"nodes":["n2139858882","n2139858883","n2139858884","n2139858885","n2139858886","n2139858887","n2139858882","n2139858888","n2139858889","n2139858890","n2139858891","n2139858892","n2139858893","n2139858894","n2139858895","n2139858896","n2139858897","n2139858898","n2139858899","n2139858900","n2139858901","n2139858902","n2139858903","n2139858986","n2139858904","n2139858995","n2139858905","n2139858906","n2139858907","n2139858908","n2139858909","n2139858910","n2139858911","n2139858912","n2139858913","n2139858914","n2139858915","n2139858916","n2139858917","n2139858918","n2139858919","n2139858920","n2139858921","n2139858922","n2139858923","n2139858924","n2139858925","n2139858926","n2139858927","n2139858982","n2139858928","n2139858929","n2139858930","n2139858931","n2139858932","n2139858981","n2139858933","n2139858934","n2139858935","n2139858936","n2139858937","n2139858938","n2139858939","n2139858940","n2139858941","n2139858942","n2139858943","n2140006437","n2139858964","n2139858944","n2139858966","n2139858945","n2139858946","n2139858947","n2139858948","n2139858949","n2139858950","n2139858951"]},"w17964015":{"id":"w17964015","version":"2","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:03Z","tags":{"highway":"residential","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15326005:15326006","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185954680","n185954683","n185954685","n185954687","n185954689","n185954690","n185954691","n2139870379","n2139870456","n185954692","n185954693","n185954695"]},"w17967315":{"id":"w17967315","version":"2","changeset":"15421127","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-19T15:12:01Z","tags":{"highway":"residential","name":"South Andrews Street","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Andrews","tiger:name_direction_prefix":"S","tiger:name_type":"St","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185981999","n185974477","n185964963"]},"w203974071":{"id":"w203974071","version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:03Z","tags":{"highway":"footway"},"nodes":["n2139870439","n2139870440","n2139870441","n2139870442","n2139870443","n2139870444","n2139870445","n2139870446","n2139870447","n2139870448","n2139870449"]},"w170848824":{"id":"w170848824","version":"3","changeset":"15276848","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:54:30Z","tags":{"name":"Rocky River","source":"Bing","waterway":"river"},"nodes":["n1819858503","n1819858531","n1819858526","n1819858518","n1819858505","n1819858508","n1819858512","n1819858514","n1819858528","n1819858509","n1819858511","n1819858507","n1819858521"]},"w203986458":{"id":"w203986458","version":"1","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:33Z","tags":{"amenity":"shelter","area":"yes","shelter_type":"picnic_shelter"},"nodes":["n2139989357","n2139989359","n2139989360","n2139989362","n2139989357"]},"w170844917":{"id":"w170844917","version":"7","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:22Z","tags":{"source":"Bing","waterway":"riverbank"},"nodes":["n1819805911","n1819805690","n1819805812","n1819805766","n1819805802","n1819805885","n1819805626","n1819805842","n1819805715","n1819805694","n1819805618","n1819805629","n1819805731","n1819805636","n1819805878","n1819805718","n1819805798","n1819849057","n1819805666","n1819805852","n1819805805","n1819805789","n1819805868","n1819805680","n1819805918","n1819848888","n1819805762","n2139989328","n1819805907","n2139989330","n1819805915","n1819858521","n1819805854","n1819805876","n1819805864","n1819805922","n2139859004","n1819805702","n2139859003","n1819805614","n1819805792","n1819805786","n1819805777","n1819805645","n1819805838","n1819805889","n1819805795","n1819805707","n1819805774","n1819805808","n1819805810","n1819805724","n1819805676","n1819805728","n1819805783","n1819805687","n1819805727","n2189123379","n1819805632","n1819805641","n1819805760","n1819805887","n1819805861","n1819805722","n1819805880","n2139982405","n2139982399","n2139982400","n1819805770","n2139982402","n2139982403","n2139982401","n1819805780","n1819805834","n2139982406","n1819805698","n1819805647","n1819805870","n1819805683","n1819805622","n1819805639","n1819805858","n1819805643","n1819805673","n1819805925","n1819805849","n1819805711","n1819805846","n1819805669","n1819805883","n1819805814","n1819805873","n1819805911"]},"w17967326":{"id":"w17967326","version":"4","changeset":"15421127","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-19T15:12:01Z","tags":{"highway":"residential","name":"North Constantine Street","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Constantine","tiger:name_direction_prefix":"N","tiger:name_type":"St","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185985217","n185985219","n185985221","n185985222","n185985223","n185985225","n2140006431","n185985227","n185985229","n185985231","n185985233","n185985235","n185985238","n185985240","n2140018998","n185964965"]},"w134150789":{"id":"w134150789","version":"5","changeset":"15421127","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-19T15:11:59Z","tags":{"highway":"primary","name":"West Michigan Avenue","old_ref":"US 131","ref":"US 131 Business;M 60","tiger:cfcc":"A21","tiger:county":"St. Joseph, MI","tiger:name_base":"Michigan","tiger:name_base_1":"State Highway 60","tiger:name_base_2":"US Hwy 131 (Bus)","tiger:name_direction_prefix":"W","tiger:name_type":"Ave","tiger:reviewed":"no"},"nodes":["n185964971","n2139870406","n185964972"]},"w17966400":{"id":"w17966400","version":"3","changeset":"15421127","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-19T15:12:01Z","tags":{"highway":"tertiary","name":"South Constantine Street","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Constantine","tiger:name_direction_prefix":"S","tiger:name_type":"St","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185958672","n185964965"]},"w203974066":{"id":"w203974066","version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:02Z","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2139870417","n2139870418","n2139870420","n2139870419"]},"w17965998":{"id":"w17965998","version":"5","changeset":"14802606","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-01-27T04:50:53Z","tags":{"name":"Conrail Railroad","railway":"rail","tiger:cfcc":"B11","tiger:county":"St. Joseph, MI","tiger:name_base":"Conrail Railroad","tiger:reviewed":"no"},"nodes":["n185972775","n185972777","n185972779","n185972781","n185972783","n185972785","n185972787","n185972788","n185972789","n185972790","n185972791","n185972793","n185972795","n185972797","n185972798","n185972800","n185972802","n185972805","n185972807","n185972809","n185972811","n185972813","n185972814","n185972815","n185972816","n185972817","n185972819","n185972821","n185972824","n185972826","n185972830","n185972832","n185972834","n185972835","n185972836","n185972839","n185990434","n2114807572","n2114807568","n185972845","n2114807583","n185972847","n185972849","n185972851","n2114807578","n1475293254","n2114807593","n1475293226","n185972862","n2114807565","n185951869","n1475293234","n1475293252","n185972868","n1475293264","n1475293222","n185972878","n1475293261","n185972882","n185972885","n1475293260","n1475293240","n185972891","n185972895","n185972897","n185972899","n2130304159","n1475284023","n185972903"]},"w134150795":{"id":"w134150795","version":"4","changeset":"15421127","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-19T15:11:59Z","tags":{"bridge":"yes","highway":"primary","name":"West Michigan Avenue","old_ref":"US 131","ref":"US 131 Business;M 60","tiger:cfcc":"A21","tiger:county":"St. Joseph, MI","tiger:name_base":"Michigan","tiger:name_base_1":"State Highway 60","tiger:name_base_2":"US Hwy 131 (Bus)","tiger:name_direction_prefix":"W","tiger:name_type":"Ave","tiger:reviewed":"no"},"nodes":["n185964970","n185964971"]},"w203974067":{"id":"w203974067","version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:02Z","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2139870420","n2139870421"]},"w170995908":{"id":"w170995908","version":"3","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:15Z","tags":{"highway":"residential","name":"Thomas Street","source":"Bing"},"nodes":["n1821006702","n1821006700","n1821006698","n2139858990","n1821006716","n1821006725","n1821006712","n1821006704","n1821006708","n1821006710","n1821006706"]},"w17965834":{"id":"w17965834","version":"3","changeset":"15421127","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-19T15:12:01Z","tags":{"highway":"residential","name":"Spring Street","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Spring","tiger:name_type":"St","tiger:reviewed":"no","tiger:zip_left":"49093"},"nodes":["n185971361","n185971364","n185971366","n185971368","n185954695","n185964968"]},"w203974070":{"id":"w203974070","version":"2","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:34Z","tags":{"amenity":"shelter","area":"yes","building":"yes","shelter_type":"picnic_shelter"},"nodes":["n2139870435","n2139870436","n2139870437","n2139870438","n2139870435"]},"w203989879":{"id":"w203989879","version":"1","changeset":"14895342","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:35:05Z","tags":{"highway":"service"},"nodes":["n2140018998","n2140018999","n2140019000"]},"w203974062":{"id":"w203974062","version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:02Z","tags":{"amenity":"parking","area":"yes"},"nodes":["n2139870387","n2139870388","n2139870389","n2139870390","n2139870391","n2139870392","n2139870397","n2139870393","n2139870396","n2139870395","n2139870394","n2139870387"]},"w203974061":{"id":"w203974061","version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:02Z","tags":{"bridge":"yes","highway":"footway"},"nodes":["n2139870382","n2139870383"]},"w203049587":{"id":"w203049587","version":"1","changeset":"14802606","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-01-27T04:50:52Z","tags":{"area":"yes","name":"Scidmore Park Petting Zoo","tourism":"zoo","zoo":"petting_zoo"},"nodes":["n2130304133","n2130304136","n2130304138","n2130304140","n2130304142","n2130304144","n2130304146","n2130304147","n2130304148","n2130304149","n2130304150","n2130304151","n2130304133"]},"w203972941":{"id":"w203972941","version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:14Z","tags":{"highway":"path"},"nodes":["n2139858982","n2139858983","n2139858984","n2139858985","n2139858927"]},"w203974065":{"id":"w203974065","version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:02Z","tags":{"highway":"service"},"nodes":["n2139870406","n2139870407","n2139870408","n2139870417","n2139870409","n2139870410","n2139870411","n2139870412","n2139870426","n2139870413","n2139870414","n2139870415","n2139870419","n2139870416","n2139870421","n2139870408"]},"w203972940":{"id":"w203972940","version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:14Z","tags":{"highway":"path","name":"Riverwalk Trail"},"nodes":["n2139858934","n2139858967","n2139858968","n2139858969","n2139858970","n2139858971","n2139858972","n2139858973","n2139858974","n2139858975","n2139858976","n2139858977","n2139858978","n2139858979","n2139858980","n2139858981"]},"w203974072":{"id":"w203974072","version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:03Z","tags":{"highway":"footway"},"nodes":["n2139858925","n2139870450","n2139870453","n2139870451","n2139870452","n2139870441"]},"w203974074":{"id":"w203974074","version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:03Z","tags":{"highway":"footway"},"nodes":["n2139870454","n2139870456","n2139870429"]},"w203974060":{"id":"w203974060","version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:02Z","tags":{"highway":"footway"},"nodes":["n2139870383","n2139870384","n2139870422","n2139870385","n2139870386","n2139870388"]},"w203841837":{"id":"w203841837","version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:32Z","tags":{"area":"yes","natural":"water"},"nodes":["n2138493807","n2138493808","n2138493809","n2138493810","n2138493811","n2138493812","n2138493813","n2138493814","n2138493815","n2138493816","n2138493825","n2138493817","n2138493824","n2138493818","n2138493819","n2138493820","n2138493821","n2138493822","n2138493823","n2138493807"]},"w134150845":{"id":"w134150845","version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:57Z","tags":{"bridge":"yes","name":"Conrail Railroad","railway":"rail","tiger:cfcc":"B11","tiger:county":"St. Joseph, MI","tiger:name_base":"Conrail Railroad","tiger:reviewed":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15324560:15329061:15329062:15333515:15333516:15333517:15328802:15312982:15312984:15312980:15326010:15326011:15313203:15322169:15324562:15312971:15312973:15312977:15328799:15328907:15328908:15322175:15329059:15333626:15333627:15325105:15322549:15337756:153","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185972903","n185972905"]},"w203974059":{"id":"w203974059","version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:02Z","tags":{"highway":"footway"},"nodes":["n2139870430","n2139870439","n2139870429","n2139870428","n2139870379","n2139870455","n2139870380","n2139870381","n2139858925","n2139870382"]},"w203986457":{"id":"w203986457","version":"2","changeset":"15287771","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T21:56:30Z","tags":{"area":"yes","ele":"241","gnis:county_id":"149","gnis:created":"04/30/2008","gnis:feature_id":"2417887","gnis:state_id":"26","leisure":"park","name":"Scidmore Park","website":"http://www.threeriversmi.us/?page_id=53"},"nodes":["n2139989333","n2139989335","n2139989337","n2139989339","n1819805762","n2139989328","n1819805907","n2139989330","n1819805915","n2139989341","n2139989344","n2139989346","n2139989348","n2139989350","n2139989351","n2139989353","n2139989355","n2139989333"]},"w170848331":{"id":"w170848331","version":"4","changeset":"15276848","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T22:54:29Z","tags":{"name":"Rocky River","source":"Bing","waterway":"river"},"nodes":["n1819848937","n1819849104","n1819849076","n1819849183","n1819848928","n1819848972","n1819848948","n1819848971","n1819848859","n1819849008","n1819848889","n1819849026","n1819849094","n1819849083","n1819849079","n1819849187","n1819848992","n1819849060","n1819849056","n1819849071","n1819849067","n1819849048","n1819849036","n1819849150","n1819849075","n1819849051","n1819849062","n1819848926","n1819849035","n1819848987","n1819849012","n1819848933","n1819848996","n1819848990","n1819849005","n1819849021","n1819848892","n1819849092","n1819848863","n1819848922","n1819848858","n1819848855","n1819848974","n1819848953","n1819849019","n1819849049","n1819848979","n1819849140","n1819849193","n1819849147","n1819849151","n1819849163","n1819849023","n1819848878","n1819849004","n1819848857","n1819848879","n1819849041","n1819849165","n1819849107","n1819849156","n1819848934","n1819848914","n1819848955","n1819848931","n1819848927","n1819849084","n1819849169","n1819849045","n1819848945","n1819849095","n1819848924","n1819849171","n1819849141","n1819849046","n1819849197","n1819849011","n1819849108","n1819849158","n1819849160","n1819848870","n1819849006","n1819849157","n1819848993","n1819848970","n1819849202","n1819848903","n1819848975","n1819848849","n1819849025","n1819849105","n1819849033","n1819849176","n1819849099","n1819849086","n1819848960","n1819848961","n1819849001","n1819848980","n1819849038","n1819848854","n1819849127","n1819849170","n1819849139","n1819848873","n1819848929","n1819849201","n1819849121","n1819849031","n1819849131","n1819848875","n1819849080","n1819849066","n1819849081","n1819849096","n1819849172","n1819849114","n1819849182","n1819848905","n1819849054","n1819848920","n1819848851","n1819848968","n1819848917","n1819849111","n1819849119","n1819849074","n1819848893","n1819849129","n1819848850","n1819848956","n1819849154","n1819848877","n1819848986","n1819849191","n1819848952","n1819848954","n1819848942","n1819849028","n1819849195","n1819848938","n1819848962","n1819849070","n1819849034","n1819849052","n1819849059","n1819848916","n1819849162","n1819849167","n1819849093","n1819849030","n1819849002","n1819849161","n1819848886","n1819848958","n1819849064","n1819849112","n1819849148","n1819848856","n1819848976","n1819848977","n1819849144","n1819848918","n1819849200","n1819848919","n1819849042","n1819849166","n1819849186","n1819849152","n1819849058","n1819849185","n1819849199","n1819849053","n1819849194","n1819849068","n1819849146","n1819849174","n1819848967","n1819848932","n1819849155","n1819849198","n1819848964","n1819848894","n1819848969","n1819849184","n1819849055","n1819849179","n1819848865","n1819848860","n1819849082","n1819848966","n1819849040","n1819849069","n1819849078","n1819849077","n1819848904","n1819848959","n1819849133","n1819849089","n1819849000","n1819849124","n1819849032","n1819849097","n1819848939","n1819849072","n1819848915","n1819849196","n1819848946","n1819849047","n1819849029","n1819849164","n1819848994","n1819849022","n1819858513","n1819849126","n1819849063","n1819848941","n1819849085","n1819848871","n1819848943","n1819849192","n1819858501","n1819849159","n1819858523","n1819848901","n1819849189","n1819858503","n1819849065","n2139877106","n1819848909","n1819848930","n1819848888"]},"w17967397":{"id":"w17967397","version":"2","changeset":"15421127","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-19T15:12:01Z","tags":{"highway":"residential","name":"North Andrews Street","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Andrews","tiger:name_direction_prefix":"N","tiger:name_type":"St","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185964963","n185985217"]},"w17964497":{"id":"w17964497","version":"3","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:48:05Z","tags":{"highway":"tertiary","name":"Constantine St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Constantine","tiger:name_type":"St","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185958643","n185958645","n2139795852","n185958647","n185958649","n185958651","n185958653","n185958656","n185958658","n185958660","n185958662","n185958664","n185958666","n185958668","n185958670","n185948710","n185958672"]},"w203974068":{"id":"w203974068","version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:03Z","tags":{"highway":"footway"},"nodes":["n2139870422","n2139870423","n2139870424","n2139870425","n2139870426","n2139870427"]},"w203974063":{"id":"w203974063","version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:02Z","tags":{"amenity":"parking","area":"yes"},"nodes":["n2139870398","n2139870399","n2139870400","n2139870401","n2139870398"]},"w203986459":{"id":"w203986459","version":"1","changeset":"14894902","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:02:33Z","tags":{"amenity":"shelter","area":"yes","shelter_type":"picnic_shelter"},"nodes":["n2139989364","n2139989366","n2139989368","n2139989370","n2139989364"]},"w203988286":{"id":"w203988286","version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:25Z","tags":{"area":"yes","leisure":"park","name":"Memory Isle Park","website":"http://www.threeriversmi.us/?page_id=53"},"nodes":["n2140006331","n2140006334","n2140006336","n2140006338","n2140006340","n2140006342","n2140006344","n2140006346","n2140006348","n2140006351","n2140006353","n2140006355","n2140006357","n2140006359","n2140006361","n2140006363","n2140006364","n2140006365","n2140006395","n2140006366","n2140006401","n2140006397","n2140006399","n2140006331"]},"w203974073":{"id":"w203974073","version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:03Z","tags":{"highway":"footway"},"nodes":["n2139870453","n2139870454","n2139870455"]},"w203974064":{"id":"w203974064","version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:02Z","tags":{"amenity":"parking","area":"yes"},"nodes":["n2139870402","n2139870403","n2139870404","n2139870405","n2139870402"]},"n185966959":{"id":"n185966959","loc":[-85.642185,41.946411],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:51Z","tags":{}},"n1475283980":{"id":"n1475283980","loc":[-85.6398249,41.9451425],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:46Z","tags":{}},"n1475284013":{"id":"n1475284013","loc":[-85.6396448,41.9451666],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:47Z","tags":{}},"n1475284042":{"id":"n1475284042","loc":[-85.6386382,41.9454789],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:47Z","tags":{}},"n185975925":{"id":"n185975925","loc":[-85.6393332,41.9452388],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:58Z","tags":{}},"n185975919":{"id":"n185975919","loc":[-85.6391279,41.9453044],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:58Z","tags":{}},"n185975917":{"id":"n185975917","loc":[-85.6389034,41.9453872],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:58Z","tags":{}},"n2140006369":{"id":"n2140006369","loc":[-85.6386163,41.9451631],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006370":{"id":"n2140006370","loc":[-85.6385144,41.9449357],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006417":{"id":"n2140006417","loc":[-85.6385785,41.9450299],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006419":{"id":"n2140006419","loc":[-85.6385781,41.9452152],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2189123361":{"id":"n2189123361","loc":[-85.6404948,41.947015],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123363":{"id":"n2189123363","loc":[-85.6395765,41.946495],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123365":{"id":"n2189123365","loc":[-85.6389347,41.9460875],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n185966962":{"id":"n185966962","loc":[-85.644417,41.946364],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:51Z","tags":{}},"n185975911":{"id":"n185975911","loc":[-85.637532,41.9458276],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:58Z","tags":{}},"n185975913":{"id":"n185975913","loc":[-85.6376323,41.9457936],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:59Z","tags":{}},"n185975915":{"id":"n185975915","loc":[-85.6383596,41.9455425],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:58Z","tags":{}},"n185975932":{"id":"n185975932","loc":[-85.644403,41.945088],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:07:13Z","tags":{}},"n185975934":{"id":"n185975934","loc":[-85.645486,41.945084],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:07:13Z","tags":{}},"n185979974":{"id":"n185979974","loc":[-85.644381,41.943831],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:24Z","tags":{}},"n2139795809":{"id":"n2139795809","loc":[-85.6464756,41.9450813],"version":"1","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:47:56Z","tags":{}},"n2139795810":{"id":"n2139795810","loc":[-85.6466646,41.945174],"version":"1","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:47:56Z","tags":{}},"n2139858952":{"id":"n2139858952","loc":[-85.6383567,41.9454039],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:12Z","tags":{}},"n2139858953":{"id":"n2139858953","loc":[-85.6380506,41.9455301],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858954":{"id":"n2139858954","loc":[-85.6377321,41.9455546],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858955":{"id":"n2139858955","loc":[-85.6376571,41.9455245],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858956":{"id":"n2139858956","loc":[-85.6375859,41.9454544],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858957":{"id":"n2139858957","loc":[-85.6376686,41.9453185],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858958":{"id":"n2139858958","loc":[-85.6378936,41.9451712],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858959":{"id":"n2139858959","loc":[-85.6379225,41.9450825],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858960":{"id":"n2139858960","loc":[-85.6379302,41.9447564],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858961":{"id":"n2139858961","loc":[-85.6379763,41.9446963],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858962":{"id":"n2139858962","loc":[-85.6380436,41.9446706],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858963":{"id":"n2139858963","loc":[-85.6381286,41.9445969],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2139858965":{"id":"n2139858965","loc":[-85.6382523,41.9444134],"version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:13Z","tags":{}},"n2140006367":{"id":"n2140006367","loc":[-85.6380923,41.9454418],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006368":{"id":"n2140006368","loc":[-85.6384089,41.9453146],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006372":{"id":"n2140006372","loc":[-85.6383252,41.9447706],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006374":{"id":"n2140006374","loc":[-85.6381033,41.9447436],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006376":{"id":"n2140006376","loc":[-85.6379759,41.9447815],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006378":{"id":"n2140006378","loc":[-85.6379832,41.9448654],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006380":{"id":"n2140006380","loc":[-85.6380632,41.9450738],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006382":{"id":"n2140006382","loc":[-85.6380414,41.9452064],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006389":{"id":"n2140006389","loc":[-85.6379068,41.9453092],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006391":{"id":"n2140006391","loc":[-85.637925,41.9453904],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006393":{"id":"n2140006393","loc":[-85.6379977,41.94545],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2189123275":{"id":"n2189123275","loc":[-85.6371346,41.9462544],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:20Z","tags":{}},"n2189123278":{"id":"n2189123278","loc":[-85.6368371,41.9466153],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:20Z","tags":{}},"n2189123280":{"id":"n2189123280","loc":[-85.6379537,41.9489088],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:20Z","tags":{}},"n2189123282":{"id":"n2189123282","loc":[-85.6383816,41.9497858],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:20Z","tags":{}},"n2189123285":{"id":"n2189123285","loc":[-85.6393673,41.9512417],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:20Z","tags":{}},"n2189123287":{"id":"n2189123287","loc":[-85.640554,41.9517766],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:20Z","tags":{}},"n2189123289":{"id":"n2189123289","loc":[-85.6411,41.9522344],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:20Z","tags":{}},"n2189123291":{"id":"n2189123291","loc":[-85.6417418,41.9526574],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:20Z","tags":{}},"n2189123293":{"id":"n2189123293","loc":[-85.642321,41.9529407],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:20Z","tags":{}},"n2189123295":{"id":"n2189123295","loc":[-85.6427697,41.9532278],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:20Z","tags":{}},"n2189123297":{"id":"n2189123297","loc":[-85.6433332,41.9538254],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:20Z","tags":{}},"n2189123300":{"id":"n2189123300","loc":[-85.6435785,41.9543648],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:20Z","tags":{}},"n2189123301":{"id":"n2189123301","loc":[-85.6444394,41.9541048],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:20Z","tags":{}},"n2189123303":{"id":"n2189123303","loc":[-85.6450603,41.954],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:20Z","tags":{}},"n2189123312":{"id":"n2189123312","loc":[-85.6454829,41.9539108],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:20Z","tags":{}},"n2189123314":{"id":"n2189123314","loc":[-85.6460464,41.9538526],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:20Z","tags":{}},"n2189123315":{"id":"n2189123315","loc":[-85.6463178,41.9537167],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:20Z","tags":{}},"n2189123316":{"id":"n2189123316","loc":[-85.646276,41.9534141],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:20Z","tags":{}},"n2189123317":{"id":"n2189123317","loc":[-85.6459995,41.9531541],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:20Z","tags":{}},"n2189123318":{"id":"n2189123318","loc":[-85.645222,41.9531929],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:20Z","tags":{}},"n2189123319":{"id":"n2189123319","loc":[-85.6447316,41.9531813],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:20Z","tags":{}},"n2189123320":{"id":"n2189123320","loc":[-85.6440637,41.9532977],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123321":{"id":"n2189123321","loc":[-85.6438185,41.9531774],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123322":{"id":"n2189123322","loc":[-85.6440011,41.9528398],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123323":{"id":"n2189123323","loc":[-85.6442672,41.9525914],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123324":{"id":"n2189123324","loc":[-85.6442881,41.9523276],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123326":{"id":"n2189123326","loc":[-85.644262,41.952153],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123328":{"id":"n2189123328","loc":[-85.6441681,41.9520404],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123330":{"id":"n2189123330","loc":[-85.6442098,41.9517494],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123333":{"id":"n2189123333","loc":[-85.6438498,41.9515864],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123336":{"id":"n2189123336","loc":[-85.6435889,41.9513225],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123339":{"id":"n2189123339","loc":[-85.6425349,41.9510315],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123342":{"id":"n2189123342","loc":[-85.6422688,41.9508802],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123345":{"id":"n2189123345","loc":[-85.6418775,41.9508142],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123348":{"id":"n2189123348","loc":[-85.6415488,41.9508064],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123351":{"id":"n2189123351","loc":[-85.6411027,41.9505488],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123353":{"id":"n2189123353","loc":[-85.6410374,41.9498208],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123355":{"id":"n2189123355","loc":[-85.6410061,41.9494327],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123357":{"id":"n2189123357","loc":[-85.6411522,41.9482569],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123359":{"id":"n2189123359","loc":[-85.6410548,41.9473036],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123368":{"id":"n2189123368","loc":[-85.6380216,41.9458974],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123370":{"id":"n2189123370","loc":[-85.6386721,41.9507782],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"w17968193":{"id":"w17968193","version":"1","changeset":"402580","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:56:35Z","tags":{"highway":"residential","name":"French St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"French","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312389:15312396","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185970906","n185982877","n185967774","n185985823","n185979974"]},"w203972939":{"id":"w203972939","version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:14Z","tags":{"highway":"path"},"nodes":["n2139858965","n2139858966"]},"w203988289":{"id":"w203988289","version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:25Z","tags":{"area":"yes","natural":"water"},"nodes":["n2140006367","n2140006368","n2140006419","n2140006369","n2140006417","n2140006370","n2140006372","n2140006374","n2140006376","n2140006378","n2140006380","n2140006382","n2140006389","n2140006391","n2140006393","n2140006367"]},"w208640157":{"id":"w208640157","version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:22Z","tags":{"area":"yes","natural":"wetland"},"nodes":["n1819849029","n2189123275","n2189123278","n2189123280","n2189123282","n2189123370","n2189123285","n2189123287","n2189123289","n2189123291","n2189123293","n2189123295","n2189123297","n2189123300","n2189123301","n2189123303","n2189123312","n2189123314","n2189123315","n2189123316","n2189123317","n2189123318","n2189123319","n2189123320","n2189123321","n2189123322","n2189123323","n2189123324","n2189123326","n2189123328","n2189123330","n2189123333","n2189123336","n2189123339","n2189123342","n2189123345","n2189123348","n2189123351","n2189123353","n2189123355","n2189123357","n2189123359","n2189123361","n2189123363","n2189123365","n2189123368","n1819849029"]},"w17966281":{"id":"w17966281","version":"3","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:48:03Z","tags":{"highway":"residential","name":"Pealer St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Pealer","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312363:15312366:15312367:15312368:15325990:15325991:15324554","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185975911","n185975913","n185975915","n1475284042","n185975917","n185975919","n185975925","n185970909","n1475284013","n1475283980","n185975928","n185967775","n185975930","n185975932","n185975934","n2139795809","n2139795810"]},"w17965353":{"id":"w17965353","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:36:24Z","tags":{"highway":"residential","name":"Yauney St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Yauney","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312346:15312347","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185966958","n185966959","n185966960","n185966962"]},"w203972938":{"id":"w203972938","version":"1","changeset":"14893110","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:29:14Z","tags":{"highway":"path","name":"Riverwalk Trail"},"nodes":["n2139858964","n2139858965","n2139858963","n2139858962","n2139858961","n2139858960","n2139858959","n2139858958","n2139858957","n2139858956","n2139858955","n2139858954","n2139858953","n2139858952","n2139858951"]},"n354002665":{"id":"n354002665","loc":[-85.6366599,41.9444923],"version":"1","changeset":"698464","user":"iandees","uid":"4732","visible":"true","timestamp":"2009-02-28T21:20:26Z","tags":{"ele":"244","gnis:county_id":"149","gnis:created":"04/14/1980","gnis:feature_id":"1624726","gnis:state_id":"26","name":"Memory Isle","place":"island"}},"n354031301":{"id":"n354031301","loc":[-85.635,41.9463889],"version":"1","changeset":"698464","user":"iandees","uid":"4732","visible":"true","timestamp":"2009-02-28T22:12:53Z","tags":{"amenity":"post_office","ele":"248","gnis:county_id":"149","gnis:created":"04/30/2008","gnis:feature_id":"2418163","gnis:state_id":"26","name":"Three Rivers Post Office"}},"n185963454":{"id":"n185963454","loc":[-85.633686,41.946072],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:00:55Z","tags":{}},"n185963455":{"id":"n185963455","loc":[-85.633815,41.946131],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:00:55Z","tags":{}},"n185963456":{"id":"n185963456","loc":[-85.633951,41.946174],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:00:55Z","tags":{}},"n185978375":{"id":"n185978375","loc":[-85.634385,41.94559],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:23Z","tags":{}},"n185978377":{"id":"n185978377","loc":[-85.634544,41.945725],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:23Z","tags":{}},"n185978379":{"id":"n185978379","loc":[-85.634573,41.945764],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:23Z","tags":{}},"n185978381":{"id":"n185978381","loc":[-85.634616,41.945849],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:23Z","tags":{}},"n185978383":{"id":"n185978383","loc":[-85.634629,41.945893],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:24Z","tags":{}},"n185984011":{"id":"n185984011","loc":[-85.636058,41.946201],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:11:46Z","tags":{}},"n185984013":{"id":"n185984013","loc":[-85.636112,41.946366],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:11:46Z","tags":{}},"n185984015":{"id":"n185984015","loc":[-85.636143,41.946551],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:11:46Z","tags":{}},"n185988237":{"id":"n185988237","loc":[-85.6354162,41.946044],"version":"3","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:16Z","tags":{}},"n185988969":{"id":"n185988969","loc":[-85.635374,41.945325],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:16Z","tags":{}},"n185988971":{"id":"n185988971","loc":[-85.635643,41.945585],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:16Z","tags":{}},"n185988972":{"id":"n185988972","loc":[-85.635853,41.94586],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:16Z","tags":{}},"n1475283992":{"id":"n1475283992","loc":[-85.6372968,41.9459007],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:46Z","tags":{}},"n1475284011":{"id":"n1475284011","loc":[-85.6359415,41.9459797],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:47Z","tags":{}},"n1475284019":{"id":"n1475284019","loc":[-85.6364433,41.9460423],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:47Z","tags":{}},"n185984009":{"id":"n185984009","loc":[-85.6360524,41.9460485],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:58Z","tags":{}},"n185988239":{"id":"n185988239","loc":[-85.6358187,41.9460423],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:59Z","tags":{}},"n185988243":{"id":"n185988243","loc":[-85.6366156,41.9460282],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:59Z","tags":{}},"n185988244":{"id":"n185988244","loc":[-85.6368316,41.9460046],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:59Z","tags":{}},"n185988245":{"id":"n185988245","loc":[-85.6370133,41.9459704],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:59Z","tags":{}},"n185988241":{"id":"n185988241","loc":[-85.636291,41.9460461],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:59Z","tags":{}},"n185964976":{"id":"n185964976","loc":[-85.633923,41.9434157],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:46:00Z","tags":{}},"n185964980":{"id":"n185964980","loc":[-85.6333656,41.9437293],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:46:00Z","tags":{}},"n185978388":{"id":"n185978388","loc":[-85.6346449,41.9460571],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:46:01Z","tags":{}},"n1819858504":{"id":"n1819858504","loc":[-85.6365343,41.9447926],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:54Z","tags":{}},"n1819858506":{"id":"n1819858506","loc":[-85.6370546,41.9451882],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:54Z","tags":{}},"n1819858516":{"id":"n1819858516","loc":[-85.6358369,41.9444654],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:54Z","tags":{}},"n1819858519":{"id":"n1819858519","loc":[-85.6361534,41.9446176],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:54Z","tags":{}},"n1819858525":{"id":"n1819858525","loc":[-85.6368025,41.9449442],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:55Z","tags":{}},"n1819858527":{"id":"n1819858527","loc":[-85.6334199,41.9457495],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:55Z","tags":{}},"n185963452":{"id":"n185963452","loc":[-85.633564,41.9458519],"version":"3","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:56Z","tags":{}},"n185963453":{"id":"n185963453","loc":[-85.6336152,41.9459804],"version":"3","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:56Z","tags":{}},"n185963451":{"id":"n185963451","loc":[-85.6332888,41.9456871],"version":"3","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:57Z","tags":{}},"n2130304152":{"id":"n2130304152","loc":[-85.6359466,41.9454599],"version":"1","changeset":"14802606","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-01-27T04:50:52Z","tags":{}},"n2130304153":{"id":"n2130304153","loc":[-85.6362773,41.9452683],"version":"1","changeset":"14802606","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-01-27T04:50:52Z","tags":{}},"n2130304154":{"id":"n2130304154","loc":[-85.6352028,41.9442868],"version":"1","changeset":"14802606","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-01-27T04:50:52Z","tags":{}},"n2130304155":{"id":"n2130304155","loc":[-85.6348756,41.9444769],"version":"1","changeset":"14802606","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-01-27T04:50:52Z","tags":{}},"n2130304156":{"id":"n2130304156","loc":[-85.6349723,41.9444207],"version":"1","changeset":"14802606","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-01-27T04:50:52Z","tags":{}},"n2130304157":{"id":"n2130304157","loc":[-85.6338698,41.9434443],"version":"1","changeset":"14802606","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-01-27T04:50:52Z","tags":{}},"n2130304158":{"id":"n2130304158","loc":[-85.635094,41.9451026],"version":"1","changeset":"14802606","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-01-27T04:50:52Z","tags":{}},"n2130304160":{"id":"n2130304160","loc":[-85.6353716,41.9449322],"version":"1","changeset":"14802606","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-01-27T04:50:52Z","tags":{}},"n2130304162":{"id":"n2130304162","loc":[-85.6365942,41.9459352],"version":"1","changeset":"14802606","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-01-27T04:50:52Z","tags":{}},"n2130304163":{"id":"n2130304163","loc":[-85.6369006,41.9457469],"version":"1","changeset":"14802606","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-01-27T04:50:52Z","tags":{}},"n2130304164":{"id":"n2130304164","loc":[-85.6363292,41.9452278],"version":"1","changeset":"14802606","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-01-27T04:50:52Z","tags":{}},"n2130304165":{"id":"n2130304165","loc":[-85.6360248,41.9454175],"version":"1","changeset":"14802606","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-01-27T04:50:52Z","tags":{}},"n2139824683":{"id":"n2139824683","loc":[-85.6339825,41.9446441],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:01Z","tags":{}},"n2139824689":{"id":"n2139824689","loc":[-85.6340437,41.9446925],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:01Z","tags":{}},"n2139824702":{"id":"n2139824702","loc":[-85.6340961,41.9447551],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824705":{"id":"n2139824705","loc":[-85.6337467,41.944809],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824707":{"id":"n2139824707","loc":[-85.6341598,41.9448129],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824710":{"id":"n2139824710","loc":[-85.6342771,41.9448223],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824712":{"id":"n2139824712","loc":[-85.6346058,41.944841],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824713":{"id":"n2139824713","loc":[-85.633808,41.9448574],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824714":{"id":"n2139824714","loc":[-85.6340889,41.9448589],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824716":{"id":"n2139824716","loc":[-85.6343335,41.944871],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824717":{"id":"n2139824717","loc":[-85.6343341,41.9448717],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824720":{"id":"n2139824720","loc":[-85.6338757,41.9449069],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824721":{"id":"n2139824721","loc":[-85.6341445,41.9449071],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824724":{"id":"n2139824724","loc":[-85.6334787,41.9449262],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824726":{"id":"n2139824726","loc":[-85.6347119,41.9449332],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824727":{"id":"n2139824727","loc":[-85.6347175,41.9449418],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824728":{"id":"n2139824728","loc":[-85.6344284,41.9449538],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824729":{"id":"n2139824729","loc":[-85.6339339,41.9449573],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824730":{"id":"n2139824730","loc":[-85.6339179,41.9449682],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824732":{"id":"n2139824732","loc":[-85.6335472,41.9449895],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824733":{"id":"n2139824733","loc":[-85.6339736,41.9450164],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824735":{"id":"n2139824735","loc":[-85.6336034,41.9450415],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824736":{"id":"n2139824736","loc":[-85.6348317,41.945043],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824737":{"id":"n2139824737","loc":[-85.63403,41.9450651],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824738":{"id":"n2139824738","loc":[-85.6336611,41.9450949],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824740":{"id":"n2139824740","loc":[-85.6336582,41.9450966],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824744":{"id":"n2139824744","loc":[-85.6331702,41.9451107],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824745":{"id":"n2139824745","loc":[-85.6333388,41.9451142],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824746":{"id":"n2139824746","loc":[-85.6337131,41.9451341],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824747":{"id":"n2139824747","loc":[-85.6337021,41.9451372],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824748":{"id":"n2139824748","loc":[-85.6341244,41.9451472],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824749":{"id":"n2139824749","loc":[-85.6333952,41.945166],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:02Z","tags":{}},"n2139824750":{"id":"n2139824750","loc":[-85.633395,41.9451661],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824751":{"id":"n2139824751","loc":[-85.6346258,41.9451725],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824752":{"id":"n2139824752","loc":[-85.6332387,41.9451741],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824753":{"id":"n2139824753","loc":[-85.6346901,41.9451853],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824754":{"id":"n2139824754","loc":[-85.6346611,41.9452035],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824755":{"id":"n2139824755","loc":[-85.6346574,41.9452059],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824756":{"id":"n2139824756","loc":[-85.6345611,41.9452133],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824757":{"id":"n2139824757","loc":[-85.633453,41.9452194],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824758":{"id":"n2139824758","loc":[-85.6335508,41.9452283],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824759":{"id":"n2139824759","loc":[-85.6347424,41.9452312],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824760":{"id":"n2139824760","loc":[-85.6342305,41.9452395],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824761":{"id":"n2139824761","loc":[-85.6342319,41.9452449],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824762":{"id":"n2139824762","loc":[-85.6334969,41.94526],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824763":{"id":"n2139824763","loc":[-85.63468,41.9452706],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824764":{"id":"n2139824764","loc":[-85.6346772,41.9452724],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824765":{"id":"n2139824765","loc":[-85.6338611,41.9452763],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824766":{"id":"n2139824766","loc":[-85.6347811,41.9452939],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824767":{"id":"n2139824767","loc":[-85.6347375,41.9453211],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824768":{"id":"n2139824768","loc":[-85.6339171,41.9453301],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824769":{"id":"n2139824769","loc":[-85.6348307,41.9453377],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824770":{"id":"n2139824770","loc":[-85.6347067,41.9453405],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824771":{"id":"n2139824771","loc":[-85.6343461,41.9453461],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824772":{"id":"n2139824772","loc":[-85.6343481,41.9453475],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824773":{"id":"n2139824773","loc":[-85.634805,41.9453538],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824774":{"id":"n2139824774","loc":[-85.6336997,41.9453692],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824775":{"id":"n2139824775","loc":[-85.6339709,41.9453818],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824776":{"id":"n2139824776","loc":[-85.6336229,41.9454134],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824777":{"id":"n2139824777","loc":[-85.6349022,41.9454141],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824778":{"id":"n2139824778","loc":[-85.6348854,41.9454246],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824779":{"id":"n2139824779","loc":[-85.6340286,41.9454373],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824780":{"id":"n2139824780","loc":[-85.6336963,41.9454572],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824781":{"id":"n2139824781","loc":[-85.6336789,41.9454672],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824782":{"id":"n2139824782","loc":[-85.6344933,41.945475],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824783":{"id":"n2139824783","loc":[-85.6340854,41.9454918],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824784":{"id":"n2139824784","loc":[-85.6350036,41.9455034],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824785":{"id":"n2139824785","loc":[-85.6337501,41.9455089],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824786":{"id":"n2139824786","loc":[-85.6337497,41.9455091],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824787":{"id":"n2139824787","loc":[-85.6345425,41.9455186],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824788":{"id":"n2139824788","loc":[-85.6341459,41.9455372],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824789":{"id":"n2139824789","loc":[-85.6341376,41.945542],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824790":{"id":"n2139824790","loc":[-85.6338394,41.9455462],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824791":{"id":"n2139824791","loc":[-85.6349171,41.9455588],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824792":{"id":"n2139824792","loc":[-85.6338074,41.9455646],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824793":{"id":"n2139824793","loc":[-85.6346229,41.9455894],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824794":{"id":"n2139824794","loc":[-85.6338983,41.9455995],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824795":{"id":"n2139824795","loc":[-85.6338962,41.9456007],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824796":{"id":"n2139824796","loc":[-85.6342475,41.9456348],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824797":{"id":"n2139824797","loc":[-85.6339505,41.9456497],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824798":{"id":"n2139824798","loc":[-85.6347243,41.9456788],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824799":{"id":"n2139824799","loc":[-85.635057,41.9456831],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824800":{"id":"n2139824800","loc":[-85.635287,41.9457056],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824801":{"id":"n2139824801","loc":[-85.6350753,41.9457068],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:03Z","tags":{}},"n2139824802":{"id":"n2139824802","loc":[-85.6347753,41.9457252],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:04Z","tags":{}},"n2139824803":{"id":"n2139824803","loc":[-85.6340521,41.9457473],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:04Z","tags":{}},"n2139824804":{"id":"n2139824804","loc":[-85.6352875,41.9457611],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:04Z","tags":{}},"n2139824805":{"id":"n2139824805","loc":[-85.6352941,41.9457611],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:04Z","tags":{}},"n2139824806":{"id":"n2139824806","loc":[-85.6350758,41.9457623],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:04Z","tags":{}},"n2139824807":{"id":"n2139824807","loc":[-85.6348194,41.9457638],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:04Z","tags":{}},"n2139824808":{"id":"n2139824808","loc":[-85.635296,41.9459428],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:04Z","tags":{}},"n2139824809":{"id":"n2139824809","loc":[-85.6348212,41.9459455],"version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:04Z","tags":{}},"n2139832635":{"id":"n2139832635","loc":[-85.6354612,41.9448791],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832636":{"id":"n2139832636","loc":[-85.6360241,41.9453844],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832637":{"id":"n2139832637","loc":[-85.6361452,41.9453121],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832639":{"id":"n2139832639","loc":[-85.6355997,41.944797],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832641":{"id":"n2139832641","loc":[-85.6351346,41.9443541],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832647":{"id":"n2139832647","loc":[-85.6329883,41.9453692],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832653":{"id":"n2139832653","loc":[-85.6333643,41.9456293],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832663":{"id":"n2139832663","loc":[-85.6335394,41.9455339],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832665":{"id":"n2139832665","loc":[-85.6332375,41.9452476],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832667":{"id":"n2139832667","loc":[-85.6331664,41.9452161],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832669":{"id":"n2139832669","loc":[-85.6331144,41.9451875],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832671":{"id":"n2139832671","loc":[-85.6330779,41.9451274],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832673":{"id":"n2139832673","loc":[-85.6330664,41.9450802],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832678":{"id":"n2139832678","loc":[-85.6332218,41.9453585],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832686":{"id":"n2139832686","loc":[-85.6334246,41.945541],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832691":{"id":"n2139832691","loc":[-85.6329898,41.9454997],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832693":{"id":"n2139832693","loc":[-85.6343554,41.9443274],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832694":{"id":"n2139832694","loc":[-85.6336339,41.9437089],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832696":{"id":"n2139832696","loc":[-85.633532,41.9437708],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832697":{"id":"n2139832697","loc":[-85.6338316,41.9440868],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832698":{"id":"n2139832698","loc":[-85.6342258,41.9444141],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832699":{"id":"n2139832699","loc":[-85.6339164,41.9442166],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832700":{"id":"n2139832700","loc":[-85.6341389,41.944384],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832701":{"id":"n2139832701","loc":[-85.634235,41.9443259],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832702":{"id":"n2139832702","loc":[-85.633613,41.9437875],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832703":{"id":"n2139832703","loc":[-85.633915,41.9436132],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832704":{"id":"n2139832704","loc":[-85.6340019,41.9435613],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832706":{"id":"n2139832706","loc":[-85.6343197,41.9438427],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832708":{"id":"n2139832708","loc":[-85.6342361,41.9438936],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832709":{"id":"n2139832709","loc":[-85.6353839,41.9460401],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832710":{"id":"n2139832710","loc":[-85.6354032,41.9456763],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832711":{"id":"n2139832711","loc":[-85.6356839,41.9459252],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832712":{"id":"n2139832712","loc":[-85.6356109,41.945735],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832713":{"id":"n2139832713","loc":[-85.6353997,41.9457421],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832714":{"id":"n2139832714","loc":[-85.6353895,41.9459347],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832715":{"id":"n2139832715","loc":[-85.6334777,41.9436628],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832716":{"id":"n2139832716","loc":[-85.6333137,41.9435382],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832717":{"id":"n2139832717","loc":[-85.6330938,41.9435406],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:50Z","tags":{}},"n2139832721":{"id":"n2139832721","loc":[-85.6333023,41.9434922],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:50Z","tags":{}},"n2139832722":{"id":"n2139832722","loc":[-85.6330466,41.943623],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:50Z","tags":{}},"n2139832723":{"id":"n2139832723","loc":[-85.6332746,41.9435624],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:50Z","tags":{}},"n2139832724":{"id":"n2139832724","loc":[-85.6333511,41.9435176],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:50Z","tags":{}},"n2139832725":{"id":"n2139832725","loc":[-85.6332241,41.9434001],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:50Z","tags":{}},"n2139832726":{"id":"n2139832726","loc":[-85.6332355,41.9433686],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:50Z","tags":{}},"n2139870373":{"id":"n2139870373","loc":[-85.6351783,41.9439117],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870374":{"id":"n2139870374","loc":[-85.6351431,41.9439217],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870375":{"id":"n2139870375","loc":[-85.6348853,41.9439117],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870376":{"id":"n2139870376","loc":[-85.6348317,41.9439105],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870377":{"id":"n2139870377","loc":[-85.6346384,41.944007],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2139870378":{"id":"n2139870378","loc":[-85.6345563,41.9440523],"version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:00Z","tags":{}},"n2140006403":{"id":"n2140006403","loc":[-85.6359942,41.9450097],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006405":{"id":"n2140006405","loc":[-85.6363884,41.9446079],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006407":{"id":"n2140006407","loc":[-85.6362148,41.9447874],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006409":{"id":"n2140006409","loc":[-85.6379476,41.9445869],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006411":{"id":"n2140006411","loc":[-85.6378485,41.9445674],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006413":{"id":"n2140006413","loc":[-85.6378952,41.9444547],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006415":{"id":"n2140006415","loc":[-85.6379962,41.944477],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006421":{"id":"n2140006421","loc":[-85.6355248,41.9433702],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:24Z","tags":{}},"n2140006423":{"id":"n2140006423","loc":[-85.6378471,41.9439233],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:25Z","tags":{}},"n2140006425":{"id":"n2140006425","loc":[-85.6378913,41.9441238],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:25Z","tags":{}},"n2140006426":{"id":"n2140006426","loc":[-85.6381674,41.9442289],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:25Z","tags":{}},"n2140006427":{"id":"n2140006427","loc":[-85.6382359,41.9440975],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:25Z","tags":{}},"n2140006428":{"id":"n2140006428","loc":[-85.6382071,41.9440252],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:25Z","tags":{}},"n2140006429":{"id":"n2140006429","loc":[-85.6381409,41.9439973],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:25Z","tags":{}},"n2140006430":{"id":"n2140006430","loc":[-85.6380569,41.9440153],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:25Z","tags":{}},"n2140006433":{"id":"n2140006433","loc":[-85.6379071,41.9442467],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:25Z","tags":{}},"n2140006435":{"id":"n2140006435","loc":[-85.6381634,41.9443125],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:25Z","tags":{}},"n2140006436":{"id":"n2140006436","loc":[-85.6382407,41.944301],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:25Z","tags":{}},"n2140006438":{"id":"n2140006438","loc":[-85.6382761,41.9442188],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:25Z","tags":{}},"n2140006439":{"id":"n2140006439","loc":[-85.6382429,41.9441761],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:25Z","tags":{}},"n2140006440":{"id":"n2140006440","loc":[-85.6382016,41.9441632],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:25Z","tags":{}},"n2140006441":{"id":"n2140006441","loc":[-85.6378185,41.9439835],"version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:25Z","tags":{}},"n2166205688":{"id":"n2166205688","loc":[-85.6349963,41.9444392],"version":"1","changeset":"15117845","user":"rolandg","uid":"8703","visible":"true","timestamp":"2013-02-21T23:02:38Z","tags":{}},"n2168544780":{"id":"n2168544780","loc":[-85.633944,41.945807],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544781":{"id":"n2168544781","loc":[-85.6340783,41.9458621],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544782":{"id":"n2168544782","loc":[-85.6338184,41.9457548],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544783":{"id":"n2168544783","loc":[-85.6339925,41.9459777],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544784":{"id":"n2168544784","loc":[-85.6337317,41.9458698],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544785":{"id":"n2168544785","loc":[-85.6337297,41.9460042],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544786":{"id":"n2168544786","loc":[-85.633919,41.9460797],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544787":{"id":"n2168544787","loc":[-85.6338672,41.9459263],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544788":{"id":"n2168544788","loc":[-85.6338246,41.9459853],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544789":{"id":"n2168544789","loc":[-85.6337615,41.9459601],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544790":{"id":"n2168544790","loc":[-85.6342079,41.9460399],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544791":{"id":"n2168544791","loc":[-85.6343346,41.9458503],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544792":{"id":"n2168544792","loc":[-85.6343759,41.9458116],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544793":{"id":"n2168544793","loc":[-85.6344394,41.9458109],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544795":{"id":"n2168544795","loc":[-85.6344827,41.945851],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544797":{"id":"n2168544797","loc":[-85.6344807,41.945969],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544798":{"id":"n2168544798","loc":[-85.6344404,41.9459697],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544799":{"id":"n2168544799","loc":[-85.6344413,41.9460333],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544800":{"id":"n2168544800","loc":[-85.6342173,41.9460705],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544801":{"id":"n2168544801","loc":[-85.6342162,41.9460392],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544802":{"id":"n2168544802","loc":[-85.6344251,41.9460351],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544805":{"id":"n2168544805","loc":[-85.6344257,41.9460507],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544807":{"id":"n2168544807","loc":[-85.6344721,41.9460498],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544809":{"id":"n2168544809","loc":[-85.6344754,41.9461427],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544811":{"id":"n2168544811","loc":[-85.6344311,41.9461435],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544813":{"id":"n2168544813","loc":[-85.6344317,41.9461592],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544815":{"id":"n2168544815","loc":[-85.6343708,41.9461604],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544817":{"id":"n2168544817","loc":[-85.6343715,41.9461786],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544819":{"id":"n2168544819","loc":[-85.6343229,41.9461795],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544821":{"id":"n2168544821","loc":[-85.6343222,41.9461606],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544823":{"id":"n2168544823","loc":[-85.6342476,41.9461621],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544825":{"id":"n2168544825","loc":[-85.6342444,41.94607],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544827":{"id":"n2168544827","loc":[-85.634138,41.9461632],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544829":{"id":"n2168544829","loc":[-85.6342016,41.9460703],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544830":{"id":"n2168544830","loc":[-85.6332929,41.9463092],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544831":{"id":"n2168544831","loc":[-85.633122,41.946239],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544832":{"id":"n2168544832","loc":[-85.6332954,41.9460055],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544833":{"id":"n2168544833","loc":[-85.6333954,41.9460466],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544834":{"id":"n2168544834","loc":[-85.6334044,41.9460345],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544835":{"id":"n2168544835","loc":[-85.6334594,41.9460571],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544836":{"id":"n2168544836","loc":[-85.6333871,41.9461544],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544837":{"id":"n2168544837","loc":[-85.633403,41.9461609],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544838":{"id":"n2168544838","loc":[-85.6341683,41.9464167],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544839":{"id":"n2168544839","loc":[-85.6341711,41.9463411],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544840":{"id":"n2168544840","loc":[-85.6344471,41.9463469],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544841":{"id":"n2168544841","loc":[-85.6344441,41.9464243],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544842":{"id":"n2168544842","loc":[-85.6343622,41.9464226],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544843":{"id":"n2168544843","loc":[-85.6343593,41.9464989],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544844":{"id":"n2168544844","loc":[-85.6342812,41.9464973],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544845":{"id":"n2168544845","loc":[-85.634283,41.9464504],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544846":{"id":"n2168544846","loc":[-85.6342609,41.9464499],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544847":{"id":"n2168544847","loc":[-85.6342621,41.9464187],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544848":{"id":"n2168544848","loc":[-85.6348414,41.9463396],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544849":{"id":"n2168544849","loc":[-85.6348387,41.9461872],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544850":{"id":"n2168544850","loc":[-85.6351186,41.9461844],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544851":{"id":"n2168544851","loc":[-85.635119,41.9462112],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544852":{"id":"n2168544852","loc":[-85.6351918,41.9462104],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544853":{"id":"n2168544853","loc":[-85.6351944,41.9463515],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544854":{"id":"n2168544854","loc":[-85.6351049,41.9463524],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2168544855":{"id":"n2168544855","loc":[-85.6351046,41.946337],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{}},"n2189153180":{"id":"n2189153180","loc":[-85.6340369,41.9469572],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153181":{"id":"n2189153181","loc":[-85.6342531,41.946953],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153183":{"id":"n2189153183","loc":[-85.6348115,41.9465468],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153184":{"id":"n2189153184","loc":[-85.6348105,41.9464569],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153185":{"id":"n2189153185","loc":[-85.6351431,41.9464549],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153186":{"id":"n2189153186","loc":[-85.6351441,41.9465448],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153187":{"id":"n2189153187","loc":[-85.6350077,41.9465456],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153188":{"id":"n2189153188","loc":[-85.635008,41.9465721],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153189":{"id":"n2189153189","loc":[-85.6348965,41.9465727],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153190":{"id":"n2189153190","loc":[-85.6348962,41.9465463],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153191":{"id":"n2189153191","loc":[-85.6348963,41.9471586],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153192":{"id":"n2189153192","loc":[-85.6348944,41.947032],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153193":{"id":"n2189153193","loc":[-85.6350241,41.947031],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153194":{"id":"n2189153194","loc":[-85.635026,41.9471575],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153195":{"id":"n2189153195","loc":[-85.6352328,41.9471053],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153196":{"id":"n2189153196","loc":[-85.6352359,41.9469906],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153197":{"id":"n2189153197","loc":[-85.6353694,41.9469925],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153198":{"id":"n2189153198","loc":[-85.6353664,41.9471072],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153199":{"id":"n2189153199","loc":[-85.6348241,41.9469287],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153200":{"id":"n2189153200","loc":[-85.6348248,41.9468185],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153201":{"id":"n2189153201","loc":[-85.6351199,41.9468195],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153202":{"id":"n2189153202","loc":[-85.6351192,41.9469298],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153203":{"id":"n2189153203","loc":[-85.6347965,41.9468057],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153204":{"id":"n2189153204","loc":[-85.634792,41.9466044],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153205":{"id":"n2189153205","loc":[-85.6349483,41.9466025],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153206":{"id":"n2189153206","loc":[-85.6349493,41.9466448],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153207":{"id":"n2189153207","loc":[-85.6349753,41.9466445],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153208":{"id":"n2189153208","loc":[-85.6349743,41.9465995],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153209":{"id":"n2189153209","loc":[-85.6351173,41.9465977],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153210":{"id":"n2189153210","loc":[-85.6351219,41.9468015],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153211":{"id":"n2189153211","loc":[-85.6349806,41.9468032],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153212":{"id":"n2189153212","loc":[-85.6349794,41.9467519],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153213":{"id":"n2189153213","loc":[-85.6349521,41.9467523],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153214":{"id":"n2189153214","loc":[-85.6349532,41.9468037],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153215":{"id":"n2189153215","loc":[-85.6346302,41.9468381],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153216":{"id":"n2189153216","loc":[-85.6343028,41.9468449],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153217":{"id":"n2189153217","loc":[-85.6342006,41.9468297],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153218":{"id":"n2189153218","loc":[-85.6336698,41.9465918],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153219":{"id":"n2189153219","loc":[-85.6344663,41.9466639],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153220":{"id":"n2189153220","loc":[-85.6344639,41.9466015],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153221":{"id":"n2189153221","loc":[-85.6342283,41.9466065],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153222":{"id":"n2189153222","loc":[-85.6342303,41.9466587],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153223":{"id":"n2189153223","loc":[-85.6342843,41.9466575],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153224":{"id":"n2189153224","loc":[-85.6342851,41.9466794],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153225":{"id":"n2189153225","loc":[-85.6343475,41.9466781],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153226":{"id":"n2189153226","loc":[-85.634347,41.9466664],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153227":{"id":"n2189153227","loc":[-85.6354428,41.9470148],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153228":{"id":"n2189153228","loc":[-85.6354432,41.9468005],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153229":{"id":"n2189153229","loc":[-85.6360277,41.9468011],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153230":{"id":"n2189153230","loc":[-85.6360273,41.9470154],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153231":{"id":"n2189153231","loc":[-85.6354565,41.9465823],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153232":{"id":"n2189153232","loc":[-85.6354496,41.946218],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153233":{"id":"n2189153233","loc":[-85.6356355,41.9465788],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153234":{"id":"n2189153234","loc":[-85.6357155,41.9468008],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153235":{"id":"n2189153235","loc":[-85.6359539,41.9467969],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153236":{"id":"n2189153236","loc":[-85.6359561,41.9463036],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153237":{"id":"n2189153237","loc":[-85.6360129,41.9464793],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153238":{"id":"n2189153238","loc":[-85.6360152,41.9463898],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153239":{"id":"n2189153239","loc":[-85.6359607,41.9464928],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153240":{"id":"n2189153240","loc":[-85.6356903,41.9462227],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153242":{"id":"n2189153242","loc":[-85.6354163,41.946142],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153243":{"id":"n2189153243","loc":[-85.6357546,41.9462214],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153244":{"id":"n2189153244","loc":[-85.6357937,41.9462542],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153245":{"id":"n2189153245","loc":[-85.6358723,41.9467048],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153246":{"id":"n2189153246","loc":[-85.6361494,41.946757],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153247":{"id":"n2189153247","loc":[-85.6354173,41.9469082],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153248":{"id":"n2189153248","loc":[-85.635443,41.9469079],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153249":{"id":"n2189153249","loc":[-85.6360275,41.9469093],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153250":{"id":"n2189153250","loc":[-85.6361542,41.946915],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153251":{"id":"n2189153251","loc":[-85.6358654,41.9464843],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153252":{"id":"n2189153252","loc":[-85.6359549,41.9467499],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153253":{"id":"n2189153253","loc":[-85.6357172,41.9466335],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153254":{"id":"n2189153254","loc":[-85.6355644,41.9461768],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153255":{"id":"n2189153255","loc":[-85.6355655,41.946528],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153256":{"id":"n2189153256","loc":[-85.6357055,41.9465971],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153257":{"id":"n2189153257","loc":[-85.635869,41.9465971],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153259":{"id":"n2189153259","loc":[-85.6354561,41.9470278],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153260":{"id":"n2189153260","loc":[-85.6357961,41.9470233],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153261":{"id":"n2189153261","loc":[-85.6357977,41.9470907],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153262":{"id":"n2189153262","loc":[-85.6357297,41.9470916],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153263":{"id":"n2189153263","loc":[-85.635733,41.947233],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153264":{"id":"n2189153264","loc":[-85.6362674,41.9468637],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153265":{"id":"n2189153265","loc":[-85.6362646,41.9467047],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153266":{"id":"n2189153266","loc":[-85.6363267,41.9467047],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153267":{"id":"n2189153267","loc":[-85.6362633,41.9465848],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153268":{"id":"n2189153268","loc":[-85.6363805,41.9465468],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153269":{"id":"n2189153269","loc":[-85.6364604,41.9466842],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153270":{"id":"n2189153270","loc":[-85.6364604,41.9468647],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2199109756":{"id":"n2199109756","loc":[-85.6337134,41.9471841],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109757":{"id":"n2199109757","loc":[-85.6336514,41.94716],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109758":{"id":"n2199109758","loc":[-85.6337043,41.9470847],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109759":{"id":"n2199109759","loc":[-85.6335997,41.9470441],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109760":{"id":"n2199109760","loc":[-85.6335064,41.9471771],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n185960195":{"id":"n185960195","loc":[-85.6295992,41.9524346],"version":"3","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:17Z","tags":{}},"n185960796":{"id":"n185960796","loc":[-85.634723,41.953681],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:59:24Z","tags":{}},"n185961396":{"id":"n185961396","loc":[-85.634767,41.959009],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:59:39Z","tags":{}},"n185962625":{"id":"n185962625","loc":[-85.635175,41.97201],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:00:29Z","tags":{}},"n185964982":{"id":"n185964982","loc":[-85.632799,41.9440543],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:46:00Z","tags":{}},"n185965289":{"id":"n185965289","loc":[-85.634621,41.947323],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:49Z","tags":{}},"n185965291":{"id":"n185965291","loc":[-85.636166,41.947296],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:49Z","tags":{}},"n185965399":{"id":"n185965399","loc":[-85.634776,41.959834],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:52Z","tags":{}},"n185966937":{"id":"n185966937","loc":[-85.633183,41.947315],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:50Z","tags":{}},"n185966948":{"id":"n185966948","loc":[-85.626406,41.957188],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:50Z","tags":{}},"n185967422":{"id":"n185967422","loc":[-85.6320229,41.9490123],"version":"3","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:17Z","tags":{}},"n185967917":{"id":"n185967917","loc":[-85.634763,41.958292],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:03:17Z","tags":{}},"n185967918":{"id":"n185967918","loc":[-85.636271,41.958311],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:03:17Z","tags":{}},"n185968100":{"id":"n185968100","loc":[-85.630835,41.950656],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:03:22Z","tags":{}},"n185970515":{"id":"n185970515","loc":[-85.634832,41.963866],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:04:41Z","tags":{}},"n185971578":{"id":"n185971578","loc":[-85.634641,41.948627],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:05Z","tags":{}},"n185971580":{"id":"n185971580","loc":[-85.6361818,41.9486135],"version":"3","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:48:03Z","tags":{}},"n185971631":{"id":"n185971631","loc":[-85.634729,41.954667],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:06Z","tags":{}},"n185971632":{"id":"n185971632","loc":[-85.636236,41.954656],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:06Z","tags":{}},"n185972155":{"id":"n185972155","loc":[-85.623333,41.961987],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:18Z","tags":{}},"n185974583":{"id":"n185974583","loc":[-85.634686,41.951158],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:06:21Z","tags":{}},"n185974585":{"id":"n185974585","loc":[-85.6362059,41.9511457],"version":"3","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:48:03Z","tags":{}},"n185975064":{"id":"n185975064","loc":[-85.636218,41.953667],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:06:49Z","tags":{}},"n185975735":{"id":"n185975735","loc":[-85.634923,41.969269],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:07:09Z","tags":{}},"n185978390":{"id":"n185978390","loc":[-85.634668,41.949875],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:24Z","tags":{}},"n185978392":{"id":"n185978392","loc":[-85.634686,41.952415],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:24Z","tags":{}},"n185978394":{"id":"n185978394","loc":[-85.634726,41.955921],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:24Z","tags":{}},"n185978399":{"id":"n185978399","loc":[-85.6347861,41.9606613],"version":"3","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:17Z","tags":{}},"n185978402":{"id":"n185978402","loc":[-85.634806,41.961485],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:24Z","tags":{}},"n185978406":{"id":"n185978406","loc":[-85.6348298,41.964783],"version":"3","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:48:00Z","tags":{}},"n185978410":{"id":"n185978410","loc":[-85.6348766,41.9677088],"version":"3","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:17Z","tags":{}},"n185978414":{"id":"n185978414","loc":[-85.634938,41.971566],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:25Z","tags":{}},"n185978415":{"id":"n185978415","loc":[-85.634942,41.971611],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:25Z","tags":{}},"n185978417":{"id":"n185978417","loc":[-85.634952,41.971655],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:25Z","tags":{}},"n185978419":{"id":"n185978419","loc":[-85.634989,41.971741],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:25Z","tags":{}},"n185978420":{"id":"n185978420","loc":[-85.635063,41.971864],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:25Z","tags":{}},"n185978787":{"id":"n185978787","loc":[-85.627936,41.954693],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:34Z","tags":{}},"n185978790":{"id":"n185978790","loc":[-85.626832,41.954677],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:34Z","tags":{}},"n185978967":{"id":"n185978967","loc":[-85.632278,41.948613],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:39Z","tags":{}},"n185980735":{"id":"n185980735","loc":[-85.628639,41.953725],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:47Z","tags":{}},"n185982163":{"id":"n185982163","loc":[-85.636233,41.952398],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:10:31Z","tags":{}},"n185982193":{"id":"n185982193","loc":[-85.6313855,41.9499125],"version":"3","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:17Z","tags":{}},"n185982195":{"id":"n185982195","loc":[-85.6304857,41.9511945],"version":"3","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:17Z","tags":{}},"n185982196":{"id":"n185982196","loc":[-85.626336,41.957291],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:10:32Z","tags":{}},"n185982197":{"id":"n185982197","loc":[-85.625578,41.958664],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:10:32Z","tags":{}},"n185982198":{"id":"n185982198","loc":[-85.624619,41.960145],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:10:32Z","tags":{}},"n185982200":{"id":"n185982200","loc":[-85.624494,41.960338],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:10:32Z","tags":{}},"n185984017":{"id":"n185984017","loc":[-85.636163,41.947382],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:11:46Z","tags":{}},"n185984020":{"id":"n185984020","loc":[-85.636188,41.9498803],"version":"3","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:48:03Z","tags":{}},"n185984022":{"id":"n185984022","loc":[-85.636276,41.955919],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:11:47Z","tags":{}},"n185984024":{"id":"n185984024","loc":[-85.636279,41.956901],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:11:47Z","tags":{}},"n185988036":{"id":"n185988036","loc":[-85.631422,41.948294],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:13:30Z","tags":{}},"n185988867":{"id":"n185988867","loc":[-85.63102,41.948805],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:13Z","tags":{}},"n185988869":{"id":"n185988869","loc":[-85.630773,41.949209],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:13Z","tags":{}},"n185988871":{"id":"n185988871","loc":[-85.63005,41.95016],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:13Z","tags":{}},"n185988872":{"id":"n185988872","loc":[-85.629423,41.951016],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:13Z","tags":{}},"n185988873":{"id":"n185988873","loc":[-85.629252,41.951256],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:13Z","tags":{}},"n185988875":{"id":"n185988875","loc":[-85.629126,41.951489],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:13Z","tags":{}},"n185988877":{"id":"n185988877","loc":[-85.628991,41.951704],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:13Z","tags":{}},"n185988878":{"id":"n185988878","loc":[-85.628689,41.952112],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:13Z","tags":{}},"n185988879":{"id":"n185988879","loc":[-85.628313,41.952666],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:13Z","tags":{}},"n185988880":{"id":"n185988880","loc":[-85.627687,41.953529],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:13Z","tags":{}},"n185988882":{"id":"n185988882","loc":[-85.627394,41.953947],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:13Z","tags":{}},"n185988884":{"id":"n185988884","loc":[-85.627287,41.954128],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:14Z","tags":{}},"n1819858502":{"id":"n1819858502","loc":[-85.6328435,41.9455473],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:54Z","tags":{}},"n1819858510":{"id":"n1819858510","loc":[-85.6324841,41.9453438],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:54Z","tags":{}},"n1819858515":{"id":"n1819858515","loc":[-85.6318511,41.9446409],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:54Z","tags":{}},"n1819858520":{"id":"n1819858520","loc":[-85.6326558,41.9454708],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:54Z","tags":{}},"n1819858522":{"id":"n1819858522","loc":[-85.6319048,41.9447407],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:55Z","tags":{}},"n1819858524":{"id":"n1819858524","loc":[-85.6317718,41.9443666],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:55Z","tags":{}},"n1819858530":{"id":"n1819858530","loc":[-85.632055,41.9449128],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:55Z","tags":{}},"n2139795768":{"id":"n2139795768","loc":[-85.6243023,41.9606102],"version":"1","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:47:55Z","tags":{}},"n2139832645":{"id":"n2139832645","loc":[-85.6324455,41.9448607],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832649":{"id":"n2139832649","loc":[-85.6328043,41.9454773],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832651":{"id":"n2139832651","loc":[-85.6322547,41.9449621],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832675":{"id":"n2139832675","loc":[-85.6327356,41.944757],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832677":{"id":"n2139832677","loc":[-85.6325433,41.9448599],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832680":{"id":"n2139832680","loc":[-85.6328885,41.9455614],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832682":{"id":"n2139832682","loc":[-85.6320913,41.9449492],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832684":{"id":"n2139832684","loc":[-85.6325366,41.9447133],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832688":{"id":"n2139832688","loc":[-85.6322786,41.94485],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:49Z","tags":{}},"n2139832718":{"id":"n2139832718","loc":[-85.6327486,41.9432475],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:50Z","tags":{}},"n2139832719":{"id":"n2139832719","loc":[-85.6327926,41.9431773],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:50Z","tags":{}},"n2139832720":{"id":"n2139832720","loc":[-85.6329033,41.943153],"version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:50Z","tags":{}},"n2139832727":{"id":"n2139832727","loc":[-85.6328975,41.9430783],"version":"2","changeset":"14892929","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:11:47Z","tags":{}},"n2139844839":{"id":"n2139844839","loc":[-85.6326261,41.9432308],"version":"1","changeset":"14892929","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:11:47Z","tags":{}},"n2189015992":{"id":"n2189015992","loc":[-85.6347706,41.9593383],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189153179":{"id":"n2189153179","loc":[-85.6340476,41.9472565],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153182":{"id":"n2189153182","loc":[-85.6342638,41.9472522],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:10Z","tags":{}},"n2189153241":{"id":"n2189153241","loc":[-85.6354184,41.9473091],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153258":{"id":"n2189153258","loc":[-85.6354611,41.9472366],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153277":{"id":"n2189153277","loc":[-85.6328948,41.9462374],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:12Z","tags":{}},"n2199109755":{"id":"n2199109755","loc":[-85.6336729,41.9472417],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"w203970139":{"id":"w203970139","version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:06Z","tags":{"building":"yes"},"nodes":["n2139824793","n2139824787","n2139824773","n2139824778","n2139824793"]},"w203970098":{"id":"w203970098","version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:04Z","tags":{"building":"yes"},"nodes":["n2139824748","n2139824712","n2139824726","n2139824760","n2139824748"]},"w208643132":{"id":"w208643132","version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:14Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189153195","n2189153196","n2189153197","n2189153198","n2189153195"]},"w203970094":{"id":"w203970094","version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:04Z","tags":{"building":"yes"},"nodes":["n2139824755","n2139824753","n2139824759","n2139824764","n2139824763","n2139824767","n2139824770","n2139824782","n2139824772","n2139824756","n2139824751","n2139824754","n2139824755"]},"w208643138":{"id":"w208643138","version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:15Z","tags":{"amenity":"parking","area":"yes"},"nodes":["n2189153231","n2189153232","n2189153240","n2189153244","n2189153236","n2189153238","n2189153237","n2189153239","n2189153252","n2189153235","n2189153234","n2189153253","n2189153233","n2189153231"]},"w203970125":{"id":"w203970125","version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:05Z","tags":{"building":"yes"},"nodes":["n2139824735","n2139824738","n2139824757","n2139824749","n2139824735"]},"w170848823":{"id":"w170848823","version":"2","changeset":"14893390","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:53:39Z","tags":{"name":"Rocky River","source":"Bing","waterway":"river"},"nodes":["n1819849189","n1819858516","n1819858519","n1819858504","n1819858525","n1819858506","n1819858513"]},"w203970898":{"id":"w203970898","version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:50Z","tags":{"amenity":"parking","area":"yes"},"nodes":["n2139832645","n2139832647","n2139832649","n2139832651","n2139832645"]},"w203970134":{"id":"w203970134","version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:06Z","tags":{"building":"yes"},"nodes":["n2139824796","n2139824803","n2139824797","n2139824788","n2139824796"]},"w203970104":{"id":"w203970104","version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:04Z","tags":{"building":"yes"},"nodes":["n2139824733","n2139824730","n2139824714","n2139824721","n2139824733"]},"w206805245":{"id":"w206805245","version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:04Z","tags":{"area":"yes","building":"yes"},"nodes":["n2168544780","n2168544781","n2139824796","n2139824803","n2168544780"]},"w206805252":{"id":"w206805252","version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:04Z","tags":{"area":"yes","building":"yes"},"nodes":["n2168544838","n2168544839","n2168544840","n2168544841","n2168544842","n2168544843","n2168544844","n2168544845","n2168544846","n2168544847","n2168544838"]},"w203970099":{"id":"w203970099","version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:04Z","tags":{"building":"yes"},"nodes":["n2139824783","n2139824795","n2139824790","n2139824779","n2139824783"]},"w17967730":{"id":"w17967730","version":"2","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:18Z","tags":{"highway":"residential","name":"Water St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Water","tiger:name_type":"St","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185963451","n2189153277","n185988036","n185988867","n185988869","n185988871","n185988872","n185988873","n185988875","n185988877","n185988878","n185988879","n185988880","n185988882","n185988884","n185978790"]},"w208643133":{"id":"w208643133","version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:14Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189153199","n2189153200","n2189153201","n2189153202","n2189153199"]},"w203970127":{"id":"w203970127","version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:05Z","tags":{"building":"yes"},"nodes":["n2139824794","n2139824783","n2139824789","n2139824797","n2139824794"]},"w208643139":{"id":"w208643139","version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:15Z","tags":{"highway":"service"},"nodes":["n185988237","n2189153242","n2189153247","n2189153241"]},"w203988297":{"id":"w203988297","version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:25Z","tags":{"amenity":"parking","area":"yes"},"nodes":["n2140006423","n2140006441","n2140006425","n2140006426","n2140006440","n2140006427","n2140006428","n2140006429","n2140006430","n2140006423"]},"w206805250":{"id":"w206805250","version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:04Z","tags":{"area":"yes","building":"yes"},"nodes":["n2168544827","n2168544823","n2168544825","n2168544800","n2168544829","n2168544827"]},"w208643140":{"id":"w208643140","version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:15Z","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2189153242","n2189153254","n2189153243","n2189153244","n2189153251","n2189153257","n2189153245","n2189153252","n2189153246"]},"w203974055":{"id":"w203974055","version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:02Z","tags":{"bridge":"yes","highway":"path","name":"Riverwalk Trail"},"nodes":["n2139870376","n2139870377"]},"w206805247":{"id":"w206805247","version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:04Z","tags":{"area":"yes","building":"yes"},"nodes":["n2168544785","n2168544786","n2168544783","n2168544787","n2168544788","n2168544789","n2168544785"]},"w17964996":{"id":"w17964996","version":"3","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:51Z","tags":{"highway":"residential","name":"Foster St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Foster","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312360","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n1819858524","n1819858515","n1819858522","n1819858530","n2139832682","n1819858510","n1819858520","n1819858502","n2139832680","n185963451","n1819858527","n185963452","n185963453","n185963454","n185963455","n185963456"]},"w208643144":{"id":"w208643144","version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:15Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189153264","n2189153265","n2189153266","n2189153267","n2189153268","n2189153269","n2189153270","n2189153264"]},"w203970914":{"id":"w203970914","version":"2","changeset":"14892929","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:11:47Z","tags":{"amenity":"parking","area":"yes"},"nodes":["n2139832722","n2139832723","n2139832724","n2139832725","n2139832726","n2139832727","n2139844839","n2139832722"]},"w208643143":{"id":"w208643143","version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:15Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189153258","n2189153259","n2189153260","n2189153261","n2189153262","n2189153263","n2189153258"]},"w203049590":{"id":"w203049590","version":"3","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:25Z","tags":{"amenity":"parking","area":"yes"},"nodes":["n2130304152","n2130304153","n2140006403","n2130304154","n2130304156","n2130304155","n2130304160","n2130304152"]},"w203974054":{"id":"w203974054","version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:02Z","tags":{"highway":"path","name":"Riverwalk Trail"},"nodes":["n2139858971","n2139870373","n2139870374"]},"w203049595":{"id":"w203049595","version":"2","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:51Z","tags":{"highway":"service"},"nodes":["n2130304158","n2130304159","n2130304160","n2139832635","n2139832639"]},"w203970913":{"id":"w203970913","version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:51Z","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2139832715","n2139832716","n2139832717","n2139832718","n2139832719","n2139832720","n2139832721","n2139832716"]},"w208643134":{"id":"w208643134","version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:15Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189153203","n2189153204","n2189153205","n2189153206","n2189153207","n2189153208","n2189153209","n2189153210","n2189153211","n2189153212","n2189153213","n2189153214","n2189153203"]},"w134150808":{"id":"w134150808","version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:53Z","tags":{"bridge":"yes","highway":"residential","name":"Moore St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Moore","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15328392:15312870:15312967","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185988239","n185984009","n185988241","n1475284019"]},"w203970115":{"id":"w203970115","version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:05Z","tags":{"building":"yes"},"nodes":["n2139824761","n2139824727","n2139824736","n2139824771","n2139824761"]},"w208643130":{"id":"w208643130","version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:14Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189153183","n2189153184","n2189153185","n2189153186","n2189153187","n2189153188","n2189153189","n2189153190","n2189153183"]},"w206805246":{"id":"w206805246","version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:04Z","tags":{"area":"yes","building":"yes"},"nodes":["n2168544782","n2168544780","n2168544781","n2168544783","n2168544787","n2168544784","n2168544782"]},"w203970138":{"id":"w203970138","version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:06Z","tags":{"building":"yes"},"nodes":["n2139824729","n2139824720","n2139824702","n2139824707","n2139824729"]},"w203970133":{"id":"w203970133","version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:06Z","tags":{"building":"yes"},"nodes":["n2139824748","n2139824737","n2139824717","n2139824728","n2139824748"]},"w203970907":{"id":"w203970907","version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:50Z","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2139832700","n2139832701","n2139832702"]},"w203974056":{"id":"w203974056","version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:02Z","tags":{"highway":"path","name":"Riverwalk Trail"},"nodes":["n2139870377","n2139870378"]},"w203970897":{"id":"w203970897","version":"2","changeset":"15117845","user":"rolandg","uid":"8703","visible":"true","timestamp":"2013-02-21T23:02:38Z","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2130304156","n2166205688","n2139832635","n2139832636","n2139832637","n2139832639","n2139832641","n2166205688"]},"w203974057":{"id":"w203974057","version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:02Z","tags":{"highway":"path","name":"Riverwalk Trail"},"nodes":["n2139870375","n2139870376"]},"w203049594":{"id":"w203049594","version":"3","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:03Z","tags":{"highway":"service"},"nodes":["n2130304156","n2139870378","n2139832706","n2139832704","n2130304157"]},"w203970122":{"id":"w203970122","version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:05Z","tags":{"building":"yes"},"nodes":["n2139824757","n2139824740","n2139824747","n2139824762","n2139824757"]},"w208643136":{"id":"w208643136","version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:15Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189153219","n2189153220","n2189153221","n2189153222","n2189153223","n2189153224","n2189153225","n2189153226","n2189153219"]},"w203970128":{"id":"w203970128","version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:05Z","tags":{"building":"yes"},"nodes":["n2139824732","n2139824752","n2139824744","n2139824724","n2139824732"]},"w203970097":{"id":"w203970097","version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:04Z","tags":{"building":"yes"},"nodes":["n2139824737","n2139824733","n2139824710","n2139824716","n2139824737"]},"w203970137":{"id":"w203970137","version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:06Z","tags":{"building":"yes"},"nodes":["n2139824765","n2139824774","n2139824758","n2139824746","n2139824765"]},"w134150840":{"id":"w134150840","version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:56Z","tags":{"highway":"residential","name":"Moore St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Moore","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15328392:15312870:15312967","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n1475284019","n185988243","n185988244","n185988245"]},"w17967628":{"id":"w17967628","version":"3","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:51Z","tags":{"highway":"residential","name":"Moore St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Moore","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15328392:15312870:15312967","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185978388","n2139832709","n185988237","n185988239"]},"w203988292":{"id":"w203988292","version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:25Z","tags":{"bridge":"yes","highway":"footway"},"nodes":["n2140006407","n2140006405"]},"w203970118":{"id":"w203970118","version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:05Z","tags":{"building":"yes"},"nodes":["n2139824775","n2139824785","n2139824780","n2139824768","n2139824775"]},"w203970121":{"id":"w203970121","version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:05Z","tags":{"building":"yes"},"nodes":["n2139824768","n2139824781","n2139824776","n2139824765","n2139824768"]},"w17967752":{"id":"w17967752","version":"5","changeset":"15421127","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-19T15:12:00Z","tags":{"highway":"residential","name":"Railroad Drive","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Railroad","tiger:name_type":"Dr","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185964980","n2139832699","n2139832700","n2130304158","n185988969","n185988971","n185988972","n1475284011"]},"w203970136":{"id":"w203970136","version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:06Z","tags":{"building":"yes"},"nodes":["n2139824798","n2139824793","n2139824777","n2139824784","n2139824798"]},"w203970142":{"id":"w203970142","version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:06Z","tags":{"building":"yes"},"nodes":["n2139824808","n2139824809","n2139824807","n2139824806","n2139824801","n2139824800","n2139824804","n2139824805","n2139824808"]},"w208643137":{"id":"w208643137","version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:15Z","tags":{"amenity":"parking","area":"yes"},"nodes":["n2189153227","n2189153248","n2189153228","n2189153234","n2189153235","n2189153229","n2189153249","n2189153230","n2189153227"]},"w208643129":{"id":"w208643129","version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:14Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189153179","n2189153180","n2189153181","n2189153182","n2189153179"]},"w203970909":{"id":"w203970909","version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:50Z","tags":{"amenity":"parking","area":"yes"},"nodes":["n2139832703","n2139832704","n2139832706","n2139832708","n2139832703"]},"w203970905":{"id":"w203970905","version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:50Z","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2139832688","n2139832691"]},"w203988298":{"id":"w203988298","version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:25Z","tags":{"highway":"service"},"nodes":["n2140006431","n2140006433","n2140006435","n2140006436","n2140006437","n2140006438","n2140006439","n2140006440"]},"w203970106":{"id":"w203970106","version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:04Z","tags":{"building":"yes"},"nodes":["n2139824798","n2139824791","n2139824799","n2139824802","n2139824798"]},"w203970129":{"id":"w203970129","version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:06Z","tags":{"building":"yes"},"nodes":["n2139824787","n2139824782","n2139824766","n2139824769","n2139824787"]},"w208643131":{"id":"w208643131","version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:14Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189153191","n2189153192","n2189153193","n2189153194","n2189153191"]},"w206805249":{"id":"w206805249","version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:04Z","tags":{"area":"yes","building":"yes"},"nodes":["n2168544800","n2168544801","n2168544802","n2168544805","n2168544807","n2168544809","n2168544811","n2168544813","n2168544815","n2168544817","n2168544819","n2168544821","n2168544823","n2168544825","n2168544800"]},"w134150800":{"id":"w134150800","version":"3","changeset":"13675000","user":"NE2","uid":"207745","visible":"true","timestamp":"2012-10-29T15:08:54Z","tags":{"bridge":"yes","highway":"primary","name":"W Michigan Ave","old_ref":"US 131","ref":"US 131 Business;M 60","tiger:cfcc":"A21","tiger:county":"St. Joseph, MI","tiger:name_base":"Michigan","tiger:name_base_1":"State Highway 60","tiger:name_base_2":"US Hwy 131 (Bus)","tiger:name_direction_prefix":"W","tiger:name_type":"Ave","tiger:reviewed":"no"},"nodes":["n185964972","n185964976"]},"w17966984":{"id":"w17966984","version":"4","changeset":"15473186","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-24T01:52:21Z","tags":{"highway":"residential","name":"Portage Avenue","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Portage","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185978375","n185963456","n2189153218","n185966937","n185978967","n185967422","n185982193","n185968100","n185982195","n185960195","n185980735","n185978787","n185966948","n185982196","n185982197","n185982198","n185982200","n2139795768","n185972155"]},"w203988294":{"id":"w203988294","version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:25Z","tags":{"amenity":"shelter","area":"yes","building":"yes","shelter_type":"picnic_shelter"},"nodes":["n2140006409","n2140006411","n2140006413","n2140006415","n2140006409"]},"w203970912":{"id":"w203970912","version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:50Z","tags":{"amenity":"parking","area":"yes"},"nodes":["n2139832711","n2139832712","n2139832713","n2139832714","n2139832711"]},"w203970119":{"id":"w203970119","version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:05Z","tags":{"building":"yes"},"nodes":["n2139824713","n2139824705","n2139824683","n2139824689","n2139824713"]},"w203970114":{"id":"w203970114","version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:05Z","tags":{"building":"yes"},"nodes":["n2139824735","n2139824750","n2139824745","n2139824732","n2139824735"]},"w208643142":{"id":"w208643142","version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:15Z","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2189153254","n2189153255","n2189153256","n2189153257"]},"w206805253":{"id":"w206805253","version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:04Z","tags":{"area":"yes","building":"yes"},"nodes":["n2168544848","n2168544849","n2168544850","n2168544851","n2168544852","n2168544853","n2168544854","n2168544855","n2168544848"]},"w143497377":{"id":"w143497377","version":"7","changeset":"15421127","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-19T15:11:59Z","tags":{"highway":"primary","name":"North Main Street","old_ref":"US 131","ref":"US 131 Business","tiger:cfcc":"A31","tiger:county":"St. Joseph, MI","tiger:name_base":"Main","tiger:name_base_1":"US Hwy 131 (Bus)","tiger:name_direction_prefix":"N","tiger:name_type":"St","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_left_1":"49093","tiger:zip_right":"49093","tiger:zip_right_1":"49093"},"nodes":["n185962625","n185978420","n185978419","n185978417","n185978415","n185978414","n185975735","n1475293254","n185978410","n185978406","n185970515","n185978402","n185978399","n185965399","n2189015992","n185961396","n185967917","n185978394","n185971631","n185960796","n185978392","n185974583","n185978390","n185971578","n185965289","n2189153215","n185978388","n185978383","n185978381","n185978379","n185978377","n185978375","n185964982"]},"w134150811":{"id":"w134150811","version":"6","changeset":"15421127","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-19T15:11:58Z","tags":{"highway":"primary","name":"West Michigan Avenue","old_ref":"US 131","ref":"US 131 Business;M 60","tiger:cfcc":"A21","tiger:county":"St. Joseph, MI","tiger:name_base":"Michigan","tiger:name_base_1":"State Highway 60","tiger:name_base_2":"US Hwy 131 (Bus)","tiger:name_direction_prefix":"W","tiger:name_type":"Ave","tiger:reviewed":"no"},"nodes":["n185964976","n2130304157","n1475284023","n2139832715","n185964980","n185964982"]},"w208643135":{"id":"w208643135","version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:15Z","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2189153215","n2189153216","n2189153217","n2189153218"]},"w17967183":{"id":"w17967183","version":"4","changeset":"15473186","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-24T01:52:23Z","tags":{"highway":"residential","name":"West Street","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"West","tiger:name_type":"St","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n1475284011","n185984011","n185984013","n185984015","n2189153246","n2189153250","n185965291","n185984017","n185971580","n185984020","n185974585","n185982163","n185975064","n185971632","n185984022","n185984024","n185967918"]},"w134150778":{"id":"w134150778","version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:48Z","tags":{"bridge":"yes","highway":"residential","name":"Moore St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Moore","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15328392:15312870:15312967","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185988245","n1475283992","n185975911"]},"w206805248":{"id":"w206805248","version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:04Z","tags":{"area":"yes","building":"yes"},"nodes":["n2168544790","n2168544791","n2168544792","n2168544793","n2168544795","n2168544797","n2168544798","n2168544799","n2168544802","n2168544801","n2168544790"]},"w203974058":{"id":"w203974058","version":"1","changeset":"14893310","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T09:47:02Z","tags":{"bridge":"yes","highway":"path","name":"Riverwalk Trail"},"nodes":["n2139870374","n2139870375"]},"w203970902":{"id":"w203970902","version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:50Z","tags":{"highway":"service"},"nodes":["n2139832678","n2139832691","n2139832680"]},"w203988296":{"id":"w203988296","version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:25Z","tags":{"highway":"path"},"nodes":["n2139858967","n2140006421","n2139858935"]},"w206805251":{"id":"w206805251","version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:04Z","tags":{"area":"yes","building":"yes"},"nodes":["n2168544830","n2168544831","n2168544832","n2168544833","n2168544834","n2168544835","n2168544836","n2168544837","n2168544830"]},"w203970906":{"id":"w203970906","version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:50Z","tags":{"amenity":"parking","area":"yes"},"nodes":["n2139832693","n2139832694","n2139832696","n2139832697","n2139832698","n2139832693"]},"w203049598":{"id":"w203049598","version":"1","changeset":"14802606","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-01-27T04:50:52Z","tags":{"area":"yes","leisure":"pitch","sport":"tennis"},"nodes":["n2130304162","n2130304163","n2130304164","n2130304165","n2130304162"]},"w203970911":{"id":"w203970911","version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:50Z","tags":{"highway":"service"},"nodes":["n2139832709","n2139832714","n2139832713","n2139832710","n185988971"]},"w203970105":{"id":"w203970105","version":"1","changeset":"14892598","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:37:04Z","tags":{"building":"yes"},"nodes":["n2139824779","n2139824792","n2139824786","n2139824775","n2139824779"]},"w203988290":{"id":"w203988290","version":"1","changeset":"14895132","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T12:19:25Z","tags":{"highway":"footway"},"nodes":["n2140006403","n2140006407"]},"w203970900":{"id":"w203970900","version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:50Z","tags":{"amenity":"parking","area":"yes"},"nodes":["n2139832653","n2139832663","n2139832665","n2139832667","n2139832669","n2139832671","n2139832673","n2139832675","n2139832677","n2139832653"]},"w209717048":{"id":"w209717048","version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:53Z","tags":{"area":"yes","building":"yes"},"nodes":["n2199109755","n2199109756","n2199109757","n2199109758","n2199109759","n2199109760","n2199109755"]},"w208643141":{"id":"w208643141","version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:15Z","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2189153247","n2189153248","n2189153249","n2189153250"]},"w203970903":{"id":"w203970903","version":"1","changeset":"14892737","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T08:51:50Z","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2139832682","n2139832688","n2139832684","n2139832678","n2139832686"]},"n354002527":{"id":"n354002527","loc":[-85.6236039,41.9458813],"version":"1","changeset":"698464","user":"iandees","uid":"4732","visible":"true","timestamp":"2009-02-28T21:20:07Z","tags":{"amenity":"school","ele":"246","gnis:county_id":"149","gnis:created":"04/14/1980","gnis:edited":"02/21/2008","gnis:feature_id":"1624371","gnis:state_id":"26","name":"Barrows School"}},"n185963396":{"id":"n185963396","loc":[-85.627401,41.943496],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:00:52Z","tags":{}},"n185963397":{"id":"n185963397","loc":[-85.627403,41.943625],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:00:52Z","tags":{}},"n185965101":{"id":"n185965101","loc":[-85.626409,41.943215],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:44Z","tags":{}},"n185971474":{"id":"n185971474","loc":[-85.624884,41.943508],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:03Z","tags":{}},"n185971475":{"id":"n185971475","loc":[-85.625191,41.943509],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:03Z","tags":{}},"n185971482":{"id":"n185971482","loc":[-85.624882,41.94382],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:03Z","tags":{}},"n185983135":{"id":"n185983135","loc":[-85.624893,41.945616],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:11:01Z","tags":{}},"n185983137":{"id":"n185983137","loc":[-85.624912,41.946524],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:11:01Z","tags":{}},"n185988027":{"id":"n185988027","loc":[-85.622721,41.946535],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:13:30Z","tags":{}},"n185963398":{"id":"n185963398","loc":[-85.6273993,41.9446899],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:58Z","tags":{}},"n185983238":{"id":"n185983238","loc":[-85.6227157,41.9456321],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:04Z","tags":{}},"n185980374":{"id":"n185980374","loc":[-85.6248856,41.9447242],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:04Z","tags":{}},"n185980373":{"id":"n185980373","loc":[-85.6226744,41.9447371],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:04Z","tags":{}},"n2196831342":{"id":"n2196831342","loc":[-85.6250924,41.945063],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:39Z","tags":{}},"n2196831343":{"id":"n2196831343","loc":[-85.6252335,41.9450636],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:39Z","tags":{}},"n2196831344":{"id":"n2196831344","loc":[-85.6252286,41.9448707],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:39Z","tags":{}},"n2196831345":{"id":"n2196831345","loc":[-85.6250661,41.9448707],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:39Z","tags":{}},"n2196831346":{"id":"n2196831346","loc":[-85.6250243,41.9449012],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:39Z","tags":{}},"n2196831347":{"id":"n2196831347","loc":[-85.6250251,41.9449244],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:39Z","tags":{}},"n2196831348":{"id":"n2196831348","loc":[-85.6250867,41.9449257],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:39Z","tags":{}},"n2196831349":{"id":"n2196831349","loc":[-85.625349,41.9445058],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:39Z","tags":{}},"n2196831350":{"id":"n2196831350","loc":[-85.6253471,41.9443882],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:39Z","tags":{}},"n2196831351":{"id":"n2196831351","loc":[-85.6251516,41.94439],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:39Z","tags":{}},"n2196831352":{"id":"n2196831352","loc":[-85.6251522,41.9444308],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:39Z","tags":{}},"n2196831353":{"id":"n2196831353","loc":[-85.6251344,41.9444309],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:39Z","tags":{}},"n2196831354":{"id":"n2196831354","loc":[-85.6251356,41.9445077],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:39Z","tags":{}},"n2196831355":{"id":"n2196831355","loc":[-85.6232357,41.9463406],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:39Z","tags":{}},"n2196831356":{"id":"n2196831356","loc":[-85.6232409,41.9460668],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831357":{"id":"n2196831357","loc":[-85.6232072,41.9460665],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831358":{"id":"n2196831358","loc":[-85.6232117,41.9458272],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831359":{"id":"n2196831359","loc":[-85.6229808,41.9458248],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831360":{"id":"n2196831360","loc":[-85.6229763,41.9460627],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831361":{"id":"n2196831361","loc":[-85.623006,41.946063],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831362":{"id":"n2196831362","loc":[-85.6230023,41.9462557],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831363":{"id":"n2196831363","loc":[-85.6230755,41.9462565],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831364":{"id":"n2196831364","loc":[-85.6230739,41.9463389],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n185947349":{"id":"n185947349","loc":[-85.618327,41.945607],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:11Z","tags":{}},"n185947359":{"id":"n185947359","loc":[-85.615453,41.945597],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:11Z","tags":{}},"n185947378":{"id":"n185947378","loc":[-85.617231,41.945603],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:12Z","tags":{}},"n185947474":{"id":"n185947474","loc":[-85.616136,41.945602],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:14Z","tags":{}},"n185948972":{"id":"n185948972","loc":[-85.615273,41.945637],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:54:02Z","tags":{}},"n185955019":{"id":"n185955019","loc":[-85.620172,41.945627],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:56:37Z","tags":{}},"n185960682":{"id":"n185960682","loc":[-85.622759,41.951845],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:59:21Z","tags":{}},"n185961369":{"id":"n185961369","loc":[-85.622758,41.947444],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:59:38Z","tags":{}},"n185961371":{"id":"n185961371","loc":[-85.624908,41.947416],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:59:38Z","tags":{}},"n185963392":{"id":"n185963392","loc":[-85.6270462,41.9409953],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:58Z","tags":{}},"n185963393":{"id":"n185963393","loc":[-85.627295,41.941304],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:00:51Z","tags":{}},"n185963394":{"id":"n185963394","loc":[-85.627352,41.94148],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:00:52Z","tags":{}},"n185963395":{"id":"n185963395","loc":[-85.62737,41.942261],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:00:52Z","tags":{}},"n185965099":{"id":"n185965099","loc":[-85.6264,41.942263],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:44Z","tags":{}},"n185965108":{"id":"n185965108","loc":[-85.622769,41.949224],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:44Z","tags":{}},"n185965110":{"id":"n185965110","loc":[-85.624937,41.949237],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:44Z","tags":{}},"n185966295":{"id":"n185966295","loc":[-85.6299942,41.9446689],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:46:01Z","tags":{}},"n185966342":{"id":"n185966342","loc":[-85.624873,41.942022],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:34Z","tags":{}},"n185970222":{"id":"n185970222","loc":[-85.622761,41.948357],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:04:17Z","tags":{}},"n185970224":{"id":"n185970224","loc":[-85.624924,41.9483338],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:05Z","tags":{}},"n185971477":{"id":"n185971477","loc":[-85.620051,41.94383],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:03Z","tags":{}},"n185971478":{"id":"n185971478","loc":[-85.621219,41.943801],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:03Z","tags":{}},"n185971481":{"id":"n185971481","loc":[-85.621812,41.943807],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:03Z","tags":{}},"n185973866":{"id":"n185973866","loc":[-85.627629,41.946498],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:06:03Z","tags":{}},"n185974699":{"id":"n185974699","loc":[-85.6227688,41.950119],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:05Z","tags":{}},"n185978800":{"id":"n185978800","loc":[-85.623953,41.954684],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:34Z","tags":{}},"n185980372":{"id":"n185980372","loc":[-85.621459,41.944756],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:37Z","tags":{}},"n185980378":{"id":"n185980378","loc":[-85.6286375,41.9446764],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:59Z","tags":{}},"n185980380":{"id":"n185980380","loc":[-85.630139,41.944661],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:38Z","tags":{}},"n185980382":{"id":"n185980382","loc":[-85.630298,41.944635],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:38Z","tags":{}},"n185980384":{"id":"n185980384","loc":[-85.630759,41.94454],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:38Z","tags":{}},"n185980386":{"id":"n185980386","loc":[-85.6312369,41.9444548],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:59Z","tags":{}},"n185983133":{"id":"n185983133","loc":[-85.6248672,41.9415903],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:57Z","tags":{}},"n185983139":{"id":"n185983139","loc":[-85.624951,41.950239],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:11:01Z","tags":{}},"n185983140":{"id":"n185983140","loc":[-85.624934,41.950681],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:11:01Z","tags":{}},"n185983141":{"id":"n185983141","loc":[-85.624813,41.950983],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:11:02Z","tags":{}},"n185983143":{"id":"n185983143","loc":[-85.6246225,41.951591],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:03Z","tags":{}},"n185983144":{"id":"n185983144","loc":[-85.623908,41.9539165],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:03Z","tags":{}},"n185983145":{"id":"n185983145","loc":[-85.6238903,41.9540956],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:03Z","tags":{}},"n185983146":{"id":"n185983146","loc":[-85.623898,41.95431],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:11:02Z","tags":{}},"n185983236":{"id":"n185983236","loc":[-85.628481,41.945611],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:11:05Z","tags":{}},"n185985914":{"id":"n185985914","loc":[-85.620072,41.946538],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:42Z","tags":{}},"n185986812":{"id":"n185986812","loc":[-85.6227785,41.9510005],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:05Z","tags":{}},"n185988028":{"id":"n185988028","loc":[-85.6281401,41.9469632],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:58Z","tags":{}},"n185988030":{"id":"n185988030","loc":[-85.6282451,41.9470314],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:58Z","tags":{}},"n185988032":{"id":"n185988032","loc":[-85.6283312,41.9470656],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:58Z","tags":{}},"w17964989":{"id":"w17964989","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:33:37Z","tags":{"highway":"residential","name":"Middle St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Middle","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312433:15328741:15312403:15312465","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185963392","n185963393","n185963394","n185963395","n185963396","n185963397","n185963398"]},"w17965158":{"id":"w17965158","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:34:55Z","tags":{"access":"private","highway":"service","name":"Battle St","tiger:cfcc":"A74","tiger:county":"St. Joseph, MI","tiger:name_base":"Battle","tiger:name_type":"St","tiger:reviewed":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313281","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185965099","n185965101"]},"w41074896":{"id":"w41074896","version":"4","changeset":"15421127","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-19T15:11:58Z","tags":{"highway":"secondary","name":"East Michigan Avenue","name_1":"State Highway 60","ref":"M 60","tiger:cfcc":"A31","tiger:county":"St. Joseph, MI","tiger:name_base":"Michigan","tiger:name_base_1":"State Highway 60","tiger:name_direction_prefix":"E","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185980372","n185980373","n185980374","n185963398","n185980378","n185966295","n185980380","n185980382","n185980384","n185980386"]},"w17965846":{"id":"w17965846","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:40:12Z","tags":{"highway":"residential","name":"2nd Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"2nd","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313726","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185971477","n185971478","n185971481","n185971482"]},"w209470306":{"id":"w209470306","version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:41Z","tags":{"area":"yes","building":"yes"},"nodes":["n2196831349","n2196831350","n2196831351","n2196831352","n2196831353","n2196831354","n2196831349"]},"w17965845":{"id":"w17965845","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:40:12Z","tags":{"highway":"residential","name":"2nd Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"2nd","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15335065","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185971474","n185971475","n185963396"]},"w209470307":{"id":"w209470307","version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:41Z","tags":{"area":"yes","building":"yes"},"nodes":["n2196831355","n2196831356","n2196831357","n2196831358","n2196831359","n2196831360","n2196831361","n2196831362","n2196831363","n2196831364","n2196831355"]},"w17968192":{"id":"w17968192","version":"2","changeset":"15473162","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-24T01:43:17Z","tags":{"highway":"residential","name":"Washington St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Washington","tiger:name_type":"St","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185980373","n185983238","n185988027","n185961369","n185970222","n185965108","n185974699","n185986812","n185960682"]},"w17967603":{"id":"w17967603","version":"2","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:46:23Z","tags":{"highway":"residential","name":"5th Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"5th","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312324:15312811:15314055:15314056:15313692:15328995:15313188","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185985914","n185988027","n185983137","n185973866","n185988028","n185988030","n185988032"]},"w209470305":{"id":"w209470305","version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:41Z","tags":{"area":"yes","building":"yes"},"nodes":["n2196831342","n2196831343","n2196831344","n2196831345","n2196831346","n2196831347","n2196831348","n2196831342"]},"w17967092":{"id":"w17967092","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:49:18Z","tags":{"highway":"residential","name":"Wood St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Wood","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313653:15313659:15313679:15314060","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185983133","n185966342","n185971474","n185971482","n185980374","n185983135","n185983137","n185961371","n185970224","n185965110","n185983139","n185983140","n185983141","n185983143","n185983144","n185983145","n185983146","n185978800"]},"w17967107":{"id":"w17967107","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:49:23Z","tags":{"highway":"residential","name":"4th Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"4th","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15314053:15314054:15313697:15313698:15313700:15313701:15313699:15314427","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185983236","n185983135","n185983238","n185955019","n185947349","n185947378","n185947474","n185947359","n185948972"]},"n354030330":{"id":"n354030330","loc":[-85.6297222,41.9444444],"version":"1","changeset":"698464","user":"iandees","uid":"4732","visible":"true","timestamp":"2009-02-28T22:10:58Z","tags":{"ele":"243","gnis:county_id":"149","gnis:created":"03/21/2008","gnis:feature_id":"2401246","gnis:state_id":"26","leisure":"park","name":"Scouter Park"}},"n185966296":{"id":"n185966296","loc":[-85.629998,41.944078],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:33Z","tags":{}},"n185966298":{"id":"n185966298","loc":[-85.629972,41.943927],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:33Z","tags":{}},"n185966300":{"id":"n185966300","loc":[-85.629948,41.943783],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:33Z","tags":{}},"n185980391":{"id":"n185980391","loc":[-85.6322992,41.9442766],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:59Z","tags":{}},"n185980393":{"id":"n185980393","loc":[-85.6324925,41.9442136],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:59Z","tags":{}},"n185980389":{"id":"n185980389","loc":[-85.6320272,41.9443281],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:59Z","tags":{}},"n185980388":{"id":"n185980388","loc":[-85.6315778,41.9443959],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:59Z","tags":{}},"n354031320":{"id":"n354031320","loc":[-85.6280556,41.9447222],"version":"3","changeset":"3908860","user":"Geogast","uid":"51045","visible":"true","timestamp":"2010-02-18T13:28:21Z","tags":{"amenity":"place_of_worship","ele":"245","gnis:county_id":"149","gnis:created":"04/30/2008","gnis:feature_id":"2417881","gnis:state_id":"26","name":"Riverside Church","religion":"christian"}},"n185987309":{"id":"n185987309","loc":[-85.6286497,41.9453531],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:57Z","tags":{}},"n185987311":{"id":"n185987311","loc":[-85.6285942,41.9454805],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:57Z","tags":{}},"n185988034":{"id":"n185988034","loc":[-85.6285815,41.9471692],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:58Z","tags":{}},"n185988896":{"id":"n185988896","loc":[-85.6318433,41.9437929],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:59Z","tags":{}},"n185977764":{"id":"n185977764","loc":[-85.6322988,41.943472],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:46:01Z","tags":{}},"n1819848852":{"id":"n1819848852","loc":[-85.6315188,41.9448808],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:49Z","tags":{}},"n1819848912":{"id":"n1819848912","loc":[-85.6284289,41.9472189],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:50Z","tags":{}},"n1819848925":{"id":"n1819848925","loc":[-85.6314501,41.9451617],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:51Z","tags":{}},"n1819848949":{"id":"n1819848949","loc":[-85.6309394,41.9455192],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n1819848951":{"id":"n1819848951","loc":[-85.6290297,41.9457187],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n1819848963":{"id":"n1819848963","loc":[-85.630521,41.9455591],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n1819848981":{"id":"n1819848981","loc":[-85.6292936,41.9455846],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:53Z","tags":{}},"n1819848989":{"id":"n1819848989","loc":[-85.6298451,41.9455431],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:53Z","tags":{}},"n1819848998":{"id":"n1819848998","loc":[-85.6314973,41.9446254],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:53Z","tags":{}},"n1819849018":{"id":"n1819849018","loc":[-85.6302807,41.9455527],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:54Z","tags":{}},"n1819849043":{"id":"n1819849043","loc":[-85.6285533,41.9469731],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:54Z","tags":{}},"n1819849087":{"id":"n1819849087","loc":[-85.6314501,41.9453532],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:56Z","tags":{}},"n1819849090":{"id":"n1819849090","loc":[-85.628843,41.9461033],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:56Z","tags":{}},"n1819849109":{"id":"n1819849109","loc":[-85.6311926,41.9454729],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:57Z","tags":{}},"n1819849116":{"id":"n1819849116","loc":[-85.6288967,41.9459437],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:57Z","tags":{}},"n1819849177":{"id":"n1819849177","loc":[-85.6287894,41.9464544],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:59Z","tags":{}},"n1819858529":{"id":"n1819858529","loc":[-85.6325485,41.9445625],"version":"1","changeset":"12170230","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:56:55Z","tags":{}},"n2189112797":{"id":"n2189112797","loc":[-85.6275271,41.944555],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112798":{"id":"n2189112798","loc":[-85.6275196,41.9437258],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112799":{"id":"n2189112799","loc":[-85.6278937,41.943723],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112800":{"id":"n2189112800","loc":[-85.6278969,41.9439191],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112801":{"id":"n2189112801","loc":[-85.6279907,41.9439345],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112802":{"id":"n2189112802","loc":[-85.6280817,41.9439663],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112803":{"id":"n2189112803","loc":[-85.6281768,41.9440145],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112804":{"id":"n2189112804","loc":[-85.6281933,41.9440483],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112805":{"id":"n2189112805","loc":[-85.6281671,41.9440535],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112806":{"id":"n2189112806","loc":[-85.6281933,41.9440935],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112807":{"id":"n2189112807","loc":[-85.6282126,41.9441437],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:16Z","tags":{}},"n2189112808":{"id":"n2189112808","loc":[-85.628214,41.9441991],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:16Z","tags":{}},"n2189112809":{"id":"n2189112809","loc":[-85.6283298,41.944196],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:16Z","tags":{}},"n2189112810":{"id":"n2189112810","loc":[-85.6283285,41.9442616],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:16Z","tags":{}},"n2189112811":{"id":"n2189112811","loc":[-85.6281727,41.9442616],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:16Z","tags":{}},"n2189112812":{"id":"n2189112812","loc":[-85.6281713,41.9442934],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:16Z","tags":{}},"n2189112813":{"id":"n2189112813","loc":[-85.6280386,41.9442963],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:16Z","tags":{}},"n2189112814":{"id":"n2189112814","loc":[-85.6280405,41.9443292],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:16Z","tags":{}},"n2189112815":{"id":"n2189112815","loc":[-85.627829,41.9443349],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:16Z","tags":{}},"n2189112816":{"id":"n2189112816","loc":[-85.6278347,41.9445495],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:16Z","tags":{}},"n2189153271":{"id":"n2189153271","loc":[-85.6321053,41.9460342],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153272":{"id":"n2189153272","loc":[-85.632278,41.9457841],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153273":{"id":"n2189153273","loc":[-85.632823,41.9459936],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153274":{"id":"n2189153274","loc":[-85.6326845,41.9461963],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:11Z","tags":{}},"n2189153275":{"id":"n2189153275","loc":[-85.6325664,41.9461507],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:12Z","tags":{}},"n2189153276":{"id":"n2189153276","loc":[-85.6325323,41.946198],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:12Z","tags":{}},"n2189153278":{"id":"n2189153278","loc":[-85.6321916,41.9459733],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:12Z","tags":{}},"n2189153279":{"id":"n2189153279","loc":[-85.6322598,41.9458703],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:12Z","tags":{}},"n2189153280":{"id":"n2189153280","loc":[-85.6327208,41.9460358],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:12Z","tags":{}},"n2189153281":{"id":"n2189153281","loc":[-85.6326413,41.9461422],"version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:12Z","tags":{}},"n185959079":{"id":"n185959079","loc":[-85.6293702,41.9474668],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:58Z","tags":{}},"n185966301":{"id":"n185966301","loc":[-85.629692,41.943136],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:33Z","tags":{}},"n185966304":{"id":"n185966304","loc":[-85.629565,41.942916],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:33Z","tags":{}},"n185966308":{"id":"n185966308","loc":[-85.629501,41.942751],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:33Z","tags":{}},"n185966315":{"id":"n185966315","loc":[-85.629472,41.942578],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:34Z","tags":{}},"n185966319":{"id":"n185966319","loc":[-85.629444,41.942414],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:34Z","tags":{}},"n185966321":{"id":"n185966321","loc":[-85.629391,41.94205],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:34Z","tags":{}},"n185966323":{"id":"n185966323","loc":[-85.629369,41.941858],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:34Z","tags":{}},"n185966327":{"id":"n185966327","loc":[-85.629297,41.941604],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:34Z","tags":{}},"n185966331":{"id":"n185966331","loc":[-85.629233,41.941549],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:34Z","tags":{}},"n185966336":{"id":"n185966336","loc":[-85.628504,41.941364],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:34Z","tags":{}},"n185966338":{"id":"n185966338","loc":[-85.628275,41.941303],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:34Z","tags":{}},"n185966340":{"id":"n185966340","loc":[-85.6269038,41.9410983],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:46:01Z","tags":{}},"n185973867":{"id":"n185973867","loc":[-85.626843,41.947333],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:06:03Z","tags":{}},"n185977762":{"id":"n185977762","loc":[-85.6318441,41.9429453],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:46:01Z","tags":{}},"n1819848853":{"id":"n1819848853","loc":[-85.625854,41.9492218],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:49Z","tags":{}},"n1819848861":{"id":"n1819848861","loc":[-85.6251459,41.9552376],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:49Z","tags":{}},"n1819848874":{"id":"n1819848874","loc":[-85.6267445,41.9482961],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:49Z","tags":{}},"n1819848882":{"id":"n1819848882","loc":[-85.6257209,41.9552396],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:49Z","tags":{}},"n1819848883":{"id":"n1819848883","loc":[-85.624706,41.9523173],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:49Z","tags":{}},"n1819848907":{"id":"n1819848907","loc":[-85.62609,41.9561471],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:50Z","tags":{}},"n1819848908":{"id":"n1819848908","loc":[-85.6244013,41.9549284],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:50Z","tags":{}},"n1819848911":{"id":"n1819848911","loc":[-85.6265578,41.9553672],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:50Z","tags":{}},"n1819848923":{"id":"n1819848923","loc":[-85.6246802,41.9550959],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:50Z","tags":{}},"n1819848936":{"id":"n1819848936","loc":[-85.6241588,41.9539291],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:51Z","tags":{}},"n1819848940":{"id":"n1819848940","loc":[-85.62506,41.9511129],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:51Z","tags":{}},"n1819848944":{"id":"n1819848944","loc":[-85.624942,41.9515912],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:51Z","tags":{}},"n1819848950":{"id":"n1819848950","loc":[-85.6273989,41.9475461],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n1819848957":{"id":"n1819848957","loc":[-85.627695,41.947404],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n1819849009":{"id":"n1819849009","loc":[-85.6259248,41.94896],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:53Z","tags":{}},"n1819849037":{"id":"n1819849037","loc":[-85.6257252,41.9502112],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:54Z","tags":{}},"n1819849061":{"id":"n1819849061","loc":[-85.6270084,41.9479626],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849073":{"id":"n1819849073","loc":[-85.6243734,41.9534583],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849091":{"id":"n1819849091","loc":[-85.6241373,41.9543918],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:56Z","tags":{}},"n1819849130":{"id":"n1819849130","loc":[-85.6282572,41.9473067],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:57Z","tags":{}},"n1819849143":{"id":"n1819849143","loc":[-85.625281,41.9506596],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:57Z","tags":{}},"n1819849153":{"id":"n1819849153","loc":[-85.6258647,41.9498043],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849168":{"id":"n1819849168","loc":[-85.6265084,41.9559317],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849173":{"id":"n1819849173","loc":[-85.6263325,41.9552156],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849175":{"id":"n1819849175","loc":[-85.6266372,41.9556764],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:58Z","tags":{}},"n1819849178":{"id":"n1819849178","loc":[-85.6242232,41.9545993],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:59Z","tags":{}},"n1819849181":{"id":"n1819849181","loc":[-85.6262187,41.9486712],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:59Z","tags":{}},"n1819849188":{"id":"n1819849188","loc":[-85.6245558,41.9530434],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:59Z","tags":{}},"n1819849190":{"id":"n1819849190","loc":[-85.6255982,41.9563017],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:59Z","tags":{}},"n2168544738":{"id":"n2168544738","loc":[-85.6245707,41.9529711],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"w208643145":{"id":"w208643145","version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:15Z","tags":{"amenity":"parking","area":"yes"},"nodes":["n2189153271","n2189153272","n2189153273","n2189153274","n2189153275","n2189153276","n2189153271"]},"w17967561":{"id":"w17967561","version":"2","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:46:21Z","tags":{"highway":"residential","name":"Garden St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Garden","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312361:15322884:15322885","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185980378","n185987309","n185987311","n185983236","n185973866"]},"w134150802":{"id":"w134150802","version":"2","changeset":"15421127","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-19T15:11:58Z","tags":{"bridge":"yes","highway":"secondary","name":"East Michigan Avenue","name_1":"State Highway 60","ref":"M 60","tiger:cfcc":"A31","tiger:county":"St. Joseph, MI","tiger:name_base":"Michigan","tiger:name_base_1":"State Highway 60","tiger:name_direction_prefix":"E","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185980386","n185980388"]},"w208639462":{"id":"w208639462","version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:18Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189112797","n2189112798","n2189112799","n2189112800","n2189112801","n2189112802","n2189112803","n2189112804","n2189112805","n2189112806","n2189112807","n2189112808","n2189112809","n2189112810","n2189112811","n2189112812","n2189112813","n2189112814","n2189112815","n2189112816","n2189112797"]},"w134150830":{"id":"w134150830","version":"3","changeset":"15421127","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-19T15:12:00Z","tags":{"bridge":"yes","highway":"secondary","name":"South Main Street","old_ref":"US 131","ref":"M 86","tiger:cfcc":"A31","tiger:county":"St. Joseph, MI","tiger:name_base":"Main","tiger:name_base_1":"State Highway 86","tiger:name_direction_prefix":"S","tiger:name_type":"St","tiger:reviewed":"no"},"nodes":["n185977762","n185977764"]},"w134150801":{"id":"w134150801","version":"3","changeset":"15421127","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-19T15:12:00Z","tags":{"highway":"secondary","name":"South Main Street","old_ref":"US 131","ref":"M 86","tiger:cfcc":"A31","tiger:county":"St. Joseph, MI","tiger:name_base":"Main","tiger:name_base_1":"State Highway 86","tiger:name_direction_prefix":"S","tiger:name_type":"St","tiger:reviewed":"no"},"nodes":["n185977764","n185964982"]},"w208643146":{"id":"w208643146","version":"1","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:16Z","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2189153277","n2189153281","n2189153278","n2189153279","n2189153280","n2189153281"]},"w17966061":{"id":"w17966061","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:42:00Z","tags":{"highway":"residential","name":"John Glenn Ct","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"John Glenn","tiger:name_type":"Ct","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313190","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185973866","n185973867"]},"w134150772":{"id":"w134150772","version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:48Z","tags":{"highway":"residential","name":"5th Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"5th","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312324:15312811:15314055:15314056:15313692:15328995:15313188","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185988034","n185959079","n185988036","n185978967"]},"w134150836":{"id":"w134150836","version":"3","changeset":"15421127","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-19T15:11:58Z","tags":{"highway":"secondary","name":"East Michigan Avenue","name_1":"State Highway 60","ref":"M 60","tiger:cfcc":"A31","tiger:county":"St. Joseph, MI","tiger:name_base":"Michigan","tiger:name_base_1":"State Highway 60","tiger:name_direction_prefix":"E","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185980388","n1819858524","n185980389","n185980391","n185980393","n185964982"]},"w17967734":{"id":"w17967734","version":"3","changeset":"15421127","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-19T15:12:00Z","tags":{"highway":"residential","name":"Water Street","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Water","tiger:name_type":"St","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185988896","n185980391","n1819858529"]},"w17965305":{"id":"w17965305","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:35:57Z","tags":{"highway":"residential","name":"River Dr","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"River","tiger:name_type":"Dr","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312440:15338837","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185966295","n185966296","n185966298","n185966300","n185966301","n185966304","n185966308","n185966315","n185966319","n185966321","n185966323","n185966327","n185966331","n185966336","n185966338","n185963392","n185966340","n185966342"]},"w134150826":{"id":"w134150826","version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:55Z","tags":{"bridge":"yes","highway":"residential","name":"5th Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"5th","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312324:15312811:15314055:15314056:15313692:15328995:15313188","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185988032","n185988034"]},"w170848330":{"id":"w170848330","version":"3","changeset":"15306846","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-09T19:50:50Z","tags":{"name":"Portage River","source":"Bing","waterway":"river"},"nodes":["n1819849190","n1819848907","n1819849168","n1819849175","n1819848911","n1819849173","n1819848882","n1819848861","n1819848923","n1819848908","n1819849178","n1819849091","n1819848936","n1819849073","n1819849188","n2168544738","n1819848883","n1819848944","n1819848940","n1819849143","n1819849037","n1819849153","n1819848853","n1819849009","n1819849181","n1819848874","n1819849061","n1819848950","n1819848957","n1819849130","n1819848912","n1819849043","n1819849177","n1819849090","n1819849116","n1819848951","n1819848981","n1819848989","n1819849018","n1819848963","n1819848949","n1819849109","n1819849087","n1819848925","n1819848852","n1819848998","n1819849057"]},"r270264":{"id":"r270264","version":"8","changeset":"13611326","user":"migurski","uid":"8287","visible":"true","timestamp":"2012-10-23T23:35:16Z","tags":{"network":"US:MI","ref":"86","route":"road","state_id":"MI","type":"route","url":"http://en.wikipedia.org/wiki/M-86_%28Michigan_highway%29"},"members":[{"id":"w17737723","type":"way","role":""},{"id":"w17735949","type":"way","role":""},{"id":"w17740404","type":"way","role":""},{"id":"w17966273","type":"way","role":""},{"id":"w17964745","type":"way","role":""},{"id":"w151538068","type":"way","role":""},{"id":"w151538067","type":"way","role":""},{"id":"w17964960","type":"way","role":""},{"id":"w17966099","type":"way","role":""},{"id":"w17968009","type":"way","role":""},{"id":"w41259499","type":"way","role":""},{"id":"w151540401","type":"way","role":""},{"id":"w151540418","type":"way","role":""},{"id":"w17967997","type":"way","role":""},{"id":"w17966029","type":"way","role":""},{"id":"w17964801","type":"way","role":""},{"id":"w41259496","type":"way","role":""},{"id":"w151540399","type":"way","role":""},{"id":"w17968004","type":"way","role":""},{"id":"w17966462","type":"way","role":""},{"id":"w134150830","type":"way","role":""},{"id":"w134150801","type":"way","role":""},{"id":"w17732295","type":"way","role":""}]},"n185980093":{"id":"n185980093","loc":[-85.6271414,41.9407274],"version":"4","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:30:01Z","tags":{}},"n185964330":{"id":"n185964330","loc":[-85.6235688,41.9399111],"version":"3","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:30:01Z","tags":{}},"n185964328":{"id":"n185964328","loc":[-85.6235609,41.9391301],"version":"3","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:30:01Z","tags":{}},"n185958034":{"id":"n185958034","loc":[-85.627102,41.939125],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:00Z","tags":{}},"n185964331":{"id":"n185964331","loc":[-85.623571,41.940124],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:21Z","tags":{}},"n185964329":{"id":"n185964329","loc":[-85.623562,41.9392411],"version":"3","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:30:01Z","tags":{}},"n185972756":{"id":"n185972756","loc":[-85.623802,41.939102],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:35Z","tags":{}},"n185972757":{"id":"n185972757","loc":[-85.623584,41.93913],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:35Z","tags":{}},"n185975325":{"id":"n185975325","loc":[-85.624835,41.939318],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:06:57Z","tags":{}},"n185975326":{"id":"n185975326","loc":[-85.624811,41.939435],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:06:57Z","tags":{}},"n185975327":{"id":"n185975327","loc":[-85.624635,41.939703],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:06:57Z","tags":{}},"n185975328":{"id":"n185975328","loc":[-85.624366,41.940055],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:06:57Z","tags":{}},"n185975330":{"id":"n185975330","loc":[-85.624287,41.940113],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:06:57Z","tags":{}},"n185975332":{"id":"n185975332","loc":[-85.624215,41.940134],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:06:57Z","tags":{}},"n185980088":{"id":"n185980088","loc":[-85.627127,41.940086],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:28Z","tags":{}},"n185988943":{"id":"n185988943","loc":[-85.622643,41.940128],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:15Z","tags":{}},"n185988961":{"id":"n185988961","loc":[-85.627263,41.940082],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:16Z","tags":{}},"n185990192":{"id":"n185990192","loc":[-85.622933,41.939224],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:56Z","tags":{}},"n185990194":{"id":"n185990194","loc":[-85.621976,41.939203],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:56Z","tags":{}},"n185991378":{"id":"n185991378","loc":[-85.622643,41.940635],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:15:34Z","tags":{}},"n1475283999":{"id":"n1475283999","loc":[-85.6271165,41.9408429],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:46Z","tags":{}},"n185980090":{"id":"n185980090","loc":[-85.6271315,41.9402001],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:59Z","tags":{}},"n185958036":{"id":"n185958036","loc":[-85.6248366,41.9391615],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:46:01Z","tags":{}},"n1819800188":{"id":"n1819800188","loc":[-85.6246947,41.9401644],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:21Z","tags":{}},"n1819800199":{"id":"n1819800199","loc":[-85.6233686,41.9430896],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:22Z","tags":{}},"n1819800204":{"id":"n1819800204","loc":[-85.6223236,41.9408587],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:22Z","tags":{}},"n1819800213":{"id":"n1819800213","loc":[-85.6247526,41.9414138],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:22Z","tags":{}},"n1819800216":{"id":"n1819800216","loc":[-85.6230961,41.9407151],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:22Z","tags":{}},"n1819800218":{"id":"n1819800218","loc":[-85.621991,41.9429336],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:22Z","tags":{}},"n1819800221":{"id":"n1819800221","loc":[-85.6246088,41.9424708],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:22Z","tags":{}},"n1819800227":{"id":"n1819800227","loc":[-85.6241368,41.9403081],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:22Z","tags":{}},"n1819800230":{"id":"n1819800230","loc":[-85.6226776,41.9431012],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:22Z","tags":{}},"n1819800231":{"id":"n1819800231","loc":[-85.6243728,41.9401644],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:22Z","tags":{}},"n1819800232":{"id":"n1819800232","loc":[-85.6249629,41.9408907],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:22Z","tags":{}},"n1819800248":{"id":"n1819800248","loc":[-85.6238685,41.9405555],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800266":{"id":"n1819800266","loc":[-85.6246882,41.9418367],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800271":{"id":"n1819800271","loc":[-85.62492,41.9413695],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800294":{"id":"n1819800294","loc":[-85.6243556,41.9427465],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:24Z","tags":{}},"n1819800304":{"id":"n1819800304","loc":[-85.6251453,41.94117],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:24Z","tags":{}},"n1819800325":{"id":"n1819800325","loc":[-85.6248234,41.9405714],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800362":{"id":"n1819800362","loc":[-85.6239544,41.9429416],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800368":{"id":"n1819800368","loc":[-85.6243406,41.9402283],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:26Z","tags":{}},"n1819800375":{"id":"n1819800375","loc":[-85.6226562,41.940755],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:26Z","tags":{}},"n1819800377":{"id":"n1819800377","loc":[-85.6232033,41.9406512],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:26Z","tags":{}},"n185945133":{"id":"n185945133","loc":[-85.623501,41.933232],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:52:24Z","tags":{}},"n185945135":{"id":"n185945135","loc":[-85.624776,41.933205],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:52:24Z","tags":{}},"n185945395":{"id":"n185945395","loc":[-85.624741,41.93019],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:52:30Z","tags":{}},"n185952239":{"id":"n185952239","loc":[-85.615166,41.9382],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:55:12Z","tags":{}},"n185954490":{"id":"n185954490","loc":[-85.624721,41.929278],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:56:27Z","tags":{}},"n185957831":{"id":"n185957831","loc":[-85.625041,41.938662],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:57:55Z","tags":{}},"n185958030":{"id":"n185958030","loc":[-85.629033,41.93913],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:00Z","tags":{}},"n185958032":{"id":"n185958032","loc":[-85.628429,41.939143],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:00Z","tags":{}},"n185958498":{"id":"n185958498","loc":[-85.621605,41.940143],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:27Z","tags":{}},"n185961186":{"id":"n185961186","loc":[-85.624792,41.935214],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:59:34Z","tags":{}},"n185963099":{"id":"n185963099","loc":[-85.6204461,41.9401485],"version":"3","changeset":"15379124","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-15T23:38:37Z","tags":{}},"n185963698":{"id":"n185963698","loc":[-85.6297342,41.9400783],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:55Z","tags":{}},"n185964320":{"id":"n185964320","loc":[-85.623511,41.934216],"version":"3","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:30:01Z","tags":{}},"n185964322":{"id":"n185964322","loc":[-85.6235312,41.9362084],"version":"3","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:30:01Z","tags":{}},"n185964324":{"id":"n185964324","loc":[-85.6235488,41.9371726],"version":"3","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:30:01Z","tags":{}},"n185964326":{"id":"n185964326","loc":[-85.6235512,41.9381718],"version":"3","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:30:01Z","tags":{}},"n185967077":{"id":"n185967077","loc":[-85.617359,41.940161],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:54Z","tags":{}},"n185967634":{"id":"n185967634","loc":[-85.6248039,41.9362012],"version":"3","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:29:59Z","tags":{}},"n185970833":{"id":"n185970833","loc":[-85.6248019,41.9381684],"version":"3","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:30:00Z","tags":{}},"n185972752":{"id":"n185972752","loc":[-85.624582,41.938848],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:35Z","tags":{}},"n185972754":{"id":"n185972754","loc":[-85.6242,41.939008],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:35Z","tags":{}},"n185973251":{"id":"n185973251","loc":[-85.602727,41.936012],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:49Z","tags":{}},"n185974509":{"id":"n185974509","loc":[-85.62478,41.93217],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:06:19Z","tags":{}},"n185975315":{"id":"n185975315","loc":[-85.624703,41.925597],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:06:56Z","tags":{}},"n185975316":{"id":"n185975316","loc":[-85.624716,41.927359],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:06:57Z","tags":{}},"n185975317":{"id":"n185975317","loc":[-85.62475,41.93119],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:06:57Z","tags":{}},"n185975318":{"id":"n185975318","loc":[-85.624782,41.934218],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:06:57Z","tags":{}},"n185975320":{"id":"n185975320","loc":[-85.6247949,41.9371708],"version":"3","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:29:58Z","tags":{}},"n185977754":{"id":"n185977754","loc":[-85.6276,41.937412],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:04Z","tags":{}},"n185980075":{"id":"n185980075","loc":[-85.627451,41.937549],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:28Z","tags":{}},"n185980077":{"id":"n185980077","loc":[-85.627375,41.937618],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:28Z","tags":{}},"n185980078":{"id":"n185980078","loc":[-85.627278,41.937728],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:28Z","tags":{}},"n185980079":{"id":"n185980079","loc":[-85.627199,41.937842],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:28Z","tags":{}},"n185980081":{"id":"n185980081","loc":[-85.627141,41.937981],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:28Z","tags":{}},"n185980083":{"id":"n185980083","loc":[-85.627109,41.938153],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:28Z","tags":{}},"n185980085":{"id":"n185980085","loc":[-85.627101,41.938699],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:28Z","tags":{}},"n185981173":{"id":"n185981173","loc":[-85.61433,41.940167],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:10:02Z","tags":{}},"n185987021":{"id":"n185987021","loc":[-85.628311,41.942261],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:13:07Z","tags":{}},"n185988963":{"id":"n185988963","loc":[-85.628439,41.940086],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:16Z","tags":{}},"n185990195":{"id":"n185990195","loc":[-85.621225,41.939143],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:56Z","tags":{}},"n185990196":{"id":"n185990196","loc":[-85.620576,41.939033],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:56Z","tags":{}},"n185990198":{"id":"n185990198","loc":[-85.619081,41.938804],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:56Z","tags":{}},"n185990200":{"id":"n185990200","loc":[-85.617593,41.938552],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:56Z","tags":{}},"n185990202":{"id":"n185990202","loc":[-85.617372,41.938535],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:56Z","tags":{}},"n185990204":{"id":"n185990204","loc":[-85.616087,41.93832],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:56Z","tags":{}},"n185990206":{"id":"n185990206","loc":[-85.615754,41.938289],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:57Z","tags":{}},"n185990209":{"id":"n185990209","loc":[-85.615438,41.938251],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:57Z","tags":{}},"n185990211":{"id":"n185990211","loc":[-85.613469,41.937867],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:57Z","tags":{}},"n185990212":{"id":"n185990212","loc":[-85.610172,41.937298],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:57Z","tags":{}},"n185990213":{"id":"n185990213","loc":[-85.605537,41.936497],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:57Z","tags":{}},"n185990214":{"id":"n185990214","loc":[-85.604014,41.936234],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:57Z","tags":{}},"n1819800180":{"id":"n1819800180","loc":[-85.588775,41.9455032],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:21Z","tags":{}},"n1819800181":{"id":"n1819800181","loc":[-85.6074212,41.9408827],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:21Z","tags":{}},"n1819800182":{"id":"n1819800182","loc":[-85.6131397,41.9427022],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:21Z","tags":{}},"n1819800183":{"id":"n1819800183","loc":[-85.6171523,41.9416807],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:21Z","tags":{}},"n1819800184":{"id":"n1819800184","loc":[-85.602465,41.9397415],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:21Z","tags":{}},"n1819800185":{"id":"n1819800185","loc":[-85.6109296,41.9410583],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:21Z","tags":{}},"n1819800186":{"id":"n1819800186","loc":[-85.6165729,41.9418004],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:21Z","tags":{}},"n1819800189":{"id":"n1819800189","loc":[-85.5866293,41.9458224],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:21Z","tags":{}},"n1819800191":{"id":"n1819800191","loc":[-85.5853311,41.9466603],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:21Z","tags":{}},"n1819800201":{"id":"n1819800201","loc":[-85.6101142,41.9433406],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:22Z","tags":{}},"n1819800202":{"id":"n1819800202","loc":[-85.600963,41.9428618],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:22Z","tags":{}},"n1819800206":{"id":"n1819800206","loc":[-85.6154357,41.9427501],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:22Z","tags":{}},"n1819800207":{"id":"n1819800207","loc":[-85.6040309,41.9414094],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:22Z","tags":{}},"n1819800209":{"id":"n1819800209","loc":[-85.6113694,41.943189],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:22Z","tags":{}},"n1819800211":{"id":"n1819800211","loc":[-85.618032,41.9416408],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:22Z","tags":{}},"n1819800214":{"id":"n1819800214","loc":[-85.5959419,41.9402602],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:22Z","tags":{}},"n1819800219":{"id":"n1819800219","loc":[-85.5972117,41.9420043],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:22Z","tags":{}},"n1819800223":{"id":"n1819800223","loc":[-85.6117171,41.9430019],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:22Z","tags":{}},"n1819800224":{"id":"n1819800224","loc":[-85.5977873,41.9395579],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:22Z","tags":{}},"n1819800226":{"id":"n1819800226","loc":[-85.5917362,41.9432209],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:22Z","tags":{}},"n1819800228":{"id":"n1819800228","loc":[-85.6055759,41.9419122],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:22Z","tags":{}},"n1819800229":{"id":"n1819800229","loc":[-85.6203395,41.9425595],"version":"2","changeset":"14894526","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:32:18Z","tags":{}},"n1819800233":{"id":"n1819800233","loc":[-85.6107579,41.9433007],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:22Z","tags":{}},"n1819800234":{"id":"n1819800234","loc":[-85.6039773,41.9412498],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:22Z","tags":{}},"n1819800235":{"id":"n1819800235","loc":[-85.6000977,41.9412861],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:22Z","tags":{}},"n1819800236":{"id":"n1819800236","loc":[-85.6026689,41.9407231],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:22Z","tags":{}},"n1819800237":{"id":"n1819800237","loc":[-85.615161,41.9428662],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800238":{"id":"n1819800238","loc":[-85.5878953,41.9454314],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800239":{"id":"n1819800239","loc":[-85.6035267,41.941569],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800240":{"id":"n1819800240","loc":[-85.5929738,41.9450208],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800241":{"id":"n1819800241","loc":[-85.6186329,41.9416488],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800242":{"id":"n1819800242","loc":[-85.5881136,41.9483963],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800243":{"id":"n1819800243","loc":[-85.5909208,41.9466922],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800244":{"id":"n1819800244","loc":[-85.5997721,41.9394941],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800245":{"id":"n1819800245","loc":[-85.6202064,41.9425712],"version":"2","changeset":"14894526","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:32:18Z","tags":{}},"n1819800246":{"id":"n1819800246","loc":[-85.591071,41.9448808],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800247":{"id":"n1819800247","loc":[-85.5866078,41.9490622],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800250":{"id":"n1819800250","loc":[-85.602383,41.9420841],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800251":{"id":"n1819800251","loc":[-85.5957418,41.9426906],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800255":{"id":"n1819800255","loc":[-85.6157039,41.9416727],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800256":{"id":"n1819800256","loc":[-85.6080328,41.9410982],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800258":{"id":"n1819800258","loc":[-85.6192551,41.9414892],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800260":{"id":"n1819800260","loc":[-85.6104253,41.94117],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800261":{"id":"n1819800261","loc":[-85.6204503,41.9425709],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800263":{"id":"n1819800263","loc":[-85.5872194,41.9455431],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800264":{"id":"n1819800264","loc":[-85.616176,41.9418244],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800268":{"id":"n1819800268","loc":[-85.6120883,41.9426703],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800269":{"id":"n1819800269","loc":[-85.5894547,41.9474946],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800272":{"id":"n1819800272","loc":[-85.6209181,41.9425027],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800274":{"id":"n1819800274","loc":[-85.6122814,41.9412817],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800276":{"id":"n1819800276","loc":[-85.5895153,41.9452798],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800277":{"id":"n1819800277","loc":[-85.5884317,41.9455272],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800279":{"id":"n1819800279","loc":[-85.5884103,41.9480966],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n1819800287":{"id":"n1819800287","loc":[-85.5904917,41.9453915],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:24Z","tags":{}},"n1819800288":{"id":"n1819800288","loc":[-85.6212292,41.9412977],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:24Z","tags":{}},"n1819800289":{"id":"n1819800289","loc":[-85.5954377,41.9406832],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:24Z","tags":{}},"n1819800290":{"id":"n1819800290","loc":[-85.593721,41.9420957],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:24Z","tags":{}},"n1819800291":{"id":"n1819800291","loc":[-85.6162832,41.9427102],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:24Z","tags":{}},"n1819800292":{"id":"n1819800292","loc":[-85.605018,41.9401804],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:24Z","tags":{}},"n1819800293":{"id":"n1819800293","loc":[-85.6086443,41.941146],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:24Z","tags":{}},"n1819800296":{"id":"n1819800296","loc":[-85.6204675,41.9413775],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:24Z","tags":{}},"n1819800297":{"id":"n1819800297","loc":[-85.612496,41.9424947],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:24Z","tags":{}},"n1819800299":{"id":"n1819800299","loc":[-85.6065629,41.9423431],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:24Z","tags":{}},"n1819800301":{"id":"n1819800301","loc":[-85.6036125,41.9398452],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:24Z","tags":{}},"n1819800303":{"id":"n1819800303","loc":[-85.6114767,41.94117],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:24Z","tags":{}},"n1819800306":{"id":"n1819800306","loc":[-85.592616,41.9428139],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:24Z","tags":{}},"n1819800308":{"id":"n1819800308","loc":[-85.6023041,41.9419521],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:24Z","tags":{}},"n1819800310":{"id":"n1819800310","loc":[-85.6218944,41.9411061],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:24Z","tags":{}},"n1819800311":{"id":"n1819800311","loc":[-85.6097816,41.941162],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:24Z","tags":{}},"n1819800312":{"id":"n1819800312","loc":[-85.5922549,41.9457869],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:24Z","tags":{}},"n1819800313":{"id":"n1819800313","loc":[-85.5986027,41.9417206],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:24Z","tags":{}},"n1819800314":{"id":"n1819800314","loc":[-85.5918687,41.946138],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:24Z","tags":{}},"n1819800315":{"id":"n1819800315","loc":[-85.5872875,41.948883],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:24Z","tags":{}},"n1819800316":{"id":"n1819800316","loc":[-85.594272,41.9436642],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800317":{"id":"n1819800317","loc":[-85.6176351,41.941577],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800318":{"id":"n1819800318","loc":[-85.6137834,41.9430853],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800319":{"id":"n1819800319","loc":[-85.6195383,41.942622],"version":"2","changeset":"14894526","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:32:18Z","tags":{"leisure":"slipway"}},"n1819800320":{"id":"n1819800320","loc":[-85.5971006,41.9398053],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800321":{"id":"n1819800321","loc":[-85.601714,41.9406752],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800322":{"id":"n1819800322","loc":[-85.5908028,41.9453117],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800323":{"id":"n1819800323","loc":[-85.6062732,41.9404597],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800324":{"id":"n1819800324","loc":[-85.62124,41.9425905],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800327":{"id":"n1819800327","loc":[-85.6008664,41.942766],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800328":{"id":"n1819800328","loc":[-85.6179355,41.9428538],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800330":{"id":"n1819800330","loc":[-85.6045566,41.9415131],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800331":{"id":"n1819800331","loc":[-85.5944935,41.9414653],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800333":{"id":"n1819800333","loc":[-85.6088911,41.943181],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800334":{"id":"n1819800334","loc":[-85.5946367,41.943369],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800336":{"id":"n1819800336","loc":[-85.6150494,41.9429656],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800343":{"id":"n1819800343","loc":[-85.6096099,41.9433326],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800345":{"id":"n1819800345","loc":[-85.5915216,41.9435401],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800347":{"id":"n1819800347","loc":[-85.607786,41.9428698],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800349":{"id":"n1819800349","loc":[-85.6187616,41.9426623],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800350":{"id":"n1819800350","loc":[-85.6012527,41.9426064],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800352":{"id":"n1819800352","loc":[-85.6214867,41.9428379],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800354":{"id":"n1819800354","loc":[-85.61338,41.94293],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800355":{"id":"n1819800355","loc":[-85.5923156,41.9428139],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800357":{"id":"n1819800357","loc":[-85.5901591,41.9453197],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800359":{"id":"n1819800359","loc":[-85.6033979,41.9408827],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800360":{"id":"n1819800360","loc":[-85.6186543,41.9414653],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800363":{"id":"n1819800363","loc":[-85.6128607,41.9425665],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800365":{"id":"n1819800365","loc":[-85.614234,41.9412977],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:25Z","tags":{}},"n1819800367":{"id":"n1819800367","loc":[-85.6089662,41.9410902],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:26Z","tags":{}},"n1819800369":{"id":"n1819800369","loc":[-85.6197379,41.9413695],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:26Z","tags":{}},"n1819800370":{"id":"n1819800370","loc":[-85.6037348,41.941733],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:26Z","tags":{}},"n1819800371":{"id":"n1819800371","loc":[-85.5993467,41.9415654],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:26Z","tags":{}},"n1819800372":{"id":"n1819800372","loc":[-85.598077,41.94196],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:26Z","tags":{}},"n1819800373":{"id":"n1819800373","loc":[-85.5984203,41.9394781],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:26Z","tags":{}},"n1819800374":{"id":"n1819800374","loc":[-85.6013315,41.9427066],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:26Z","tags":{}},"n1819800376":{"id":"n1819800376","loc":[-85.5934673,41.944167],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:26Z","tags":{}},"n1819800378":{"id":"n1819800378","loc":[-85.6011062,41.9407753],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:26Z","tags":{}},"n1819800379":{"id":"n1819800379","loc":[-85.6150602,41.9415131],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:26Z","tags":{}},"n1819800380":{"id":"n1819800380","loc":[-85.6132148,41.9412338],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:26Z","tags":{}},"n1819800381":{"id":"n1819800381","loc":[-85.5889038,41.9453835],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:26Z","tags":{}},"n2139966621":{"id":"n2139966621","loc":[-85.6198719,41.9426184],"version":"1","changeset":"14894526","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:32:17Z","tags":{}},"n2139966622":{"id":"n2139966622","loc":[-85.6197551,41.9426123],"version":"1","changeset":"14894526","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:32:17Z","tags":{}},"n2139966623":{"id":"n2139966623","loc":[-85.6196467,41.9426279],"version":"1","changeset":"14894526","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:32:18Z","tags":{}},"n2139966624":{"id":"n2139966624","loc":[-85.6191519,41.9426221],"version":"1","changeset":"14894526","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:32:18Z","tags":{}},"n2139966625":{"id":"n2139966625","loc":[-85.6194153,41.9426256],"version":"1","changeset":"14894526","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:32:18Z","tags":{}},"n2139966626":{"id":"n2139966626","loc":[-85.6200497,41.9425812],"version":"1","changeset":"14894526","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:32:18Z","tags":{}},"n2139966629":{"id":"n2139966629","loc":[-85.6192123,41.9426229],"version":"1","changeset":"14894526","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:32:18Z","tags":{}},"n2203933101":{"id":"n2203933101","loc":[-85.6030009,41.9360592],"version":"1","changeset":"15379124","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-15T23:38:36Z","tags":{}},"w17967539":{"id":"w17967539","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:52:28Z","tags":{"highway":"residential","name":"1st Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"1st","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15335113:15313280","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185965099","n185963395","n185987021"]},"w17967751":{"id":"w17967751","version":"2","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:55:03Z","tags":{"highway":"residential","name":"River St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"River","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312481:15312487","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185980088","n185988961","n185988963","n185963698"]},"w17965088":{"id":"w17965088","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:34:20Z","tags":{"highway":"residential","name":"9th St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"9th","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15314207:15313759:15313772:15313802:15313796:15313781:15314179","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185945133","n185964320","n185964322","n185964324","n185964326","n185964328","n185964329","n185964330","n185964331"]},"w17964467":{"id":"w17964467","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:29:37Z","tags":{"highway":"residential","name":"Mechanic St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Mechanic","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312501:15312497:15335073","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185958030","n185958032","n185958034","n185958036"]},"w134150842":{"id":"w134150842","version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:56Z","tags":{"bridge":"yes","highway":"residential","name":"6th St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"6th","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312892:15312519","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185980090","n185980093"]},"w17966740":{"id":"w17966740","version":"2","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:46:07Z","tags":{"highway":"residential","name":"6th St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"6th","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312892:15312519","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185977754","n185980075","n185980077","n185980078","n185980079","n185980081","n185980083","n185980085","n185958034","n185980088","n185980090"]},"w170844765":{"id":"w170844765","version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:26Z","tags":{"waterway":"dam"},"nodes":["n1819800304","n1819800232","n1819800325","n1819800188"]},"w17967745":{"id":"w17967745","version":"2","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:21Z","tags":{"highway":"residential","name":"River St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"River","tiger:name_type":"St","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185981173","n185967077","n185963099","n185958498","n185988943","n185964331","n185975332"]},"w17968113":{"id":"w17968113","version":"1","changeset":"402580","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:56:09Z","tags":{"highway":"residential","name":"Green St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Green","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15314409","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185988943","n185991378"]},"w134150833":{"id":"w134150833","version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:55Z","tags":{"highway":"residential","name":"6th St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"6th","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312892:15312519","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185980093","n1475283999","n185963392"]},"w17967935":{"id":"w17967935","version":"3","changeset":"15379124","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-15T23:38:37Z","tags":{"name":"Michigan Central Railroad","railway":"abandoned","tiger:cfcc":"B11","tiger:county":"St. Joseph, MI","tiger:name_base":"Michigan Central Railroad","tiger:reviewed":"no"},"nodes":["n185972757","n185990192","n185990194","n185990195","n185990196","n185990198","n185990200","n185990202","n185990204","n185990206","n185990209","n185952239","n185990211","n185990212","n185990213","n185990214","n2203933101","n185973251"]},"w17965993":{"id":"w17965993","version":"2","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:46:19Z","tags":{"name":"Conrail Railroad","railway":"abandoned","tiger:cfcc":"B11","tiger:county":"St. Joseph, MI","tiger:name_base":"Conrail Railroad","tiger:reviewed":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15314180:15314177","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185957831","n185972752","n185972754","n185972756","n185972757"]},"w17966211":{"id":"w17966211","version":"2","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:46:07Z","tags":{"highway":"residential","name":"8th St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"8th","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313757:15313771:15313791:15313794:15313799:15313811:15313814:15313824:15313846:15314618:15313817:15313788:15314178:15324590","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185975315","n185975316","n185954490","n185945395","n185975317","n185974509","n185945135","n185975318","n185961186","n185967634","n185975320","n185970833","n185958036","n185975325","n185975326","n185975327","n185975328","n185975330","n185975332"]},"w170844766":{"id":"w170844766","version":"2","changeset":"14894526","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:32:18Z","tags":{"source":"Bing","waterway":"riverbank"},"nodes":["n1819800229","n1819800245","n2139966626","n2139966621","n2139966622","n2139966623","n1819800319","n2139966625","n2139966629","n2139966624","n1819800349","n1819800328","n1819800291","n1819800206","n1819800237","n1819800336","n1819800318","n1819800354","n1819800182","n1819800363","n1819800297","n1819800268","n1819800223","n1819800209","n1819800233","n1819800201","n1819800343","n1819800333","n1819800347","n1819800299","n1819800228","n1819800330","n1819800370","n1819800250","n1819800374","n1819800202","n1819800327","n1819800350","n1819800308","n1819800239","n1819800207","n1819800234","n1819800359","n1819800236","n1819800321","n1819800378","n1819800235","n1819800371","n1819800313","n1819800372","n1819800219","n1819800251","n1819800334","n1819800316","n1819800376","n1819800240","n1819800312","n1819800314","n1819800243","n1819800269","n1819800279","n1819800242","n1819800315","n1819800247","n1819800191","n1819800189","n1819800263","n1819800238","n1819800277","n1819800180","n1819800381","n1819800276","n1819800357","n1819800287","n1819800322","n1819800246","n1819800345","n1819800226","n1819800355","n1819800306","n1819800290","n1819800331","n1819800289","n1819800214","n1819800320","n1819800224","n1819800373","n1819800244","n1819800184","n1819800301","n1819800292","n1819800323","n1819800181","n1819800256","n1819800293","n1819800367","n1819800311","n1819800260","n1819800185","n1819800303","n1819800274","n1819800380","n1819800365","n1819800379","n1819800255","n1819800264","n1819800186","n1819800183","n1819800317","n1819800211","n1819800241","n1819800360","n1819800258","n1819800369","n1819800296","n1819800288","n1819800310","n1819800204","n1819800375","n1819800216","n1819800377","n1819800248","n1819800227","n1819800368","n1819800231","n1819800188","n1819800325","n1819800232","n1819800304","n1819800271","n1819800213","n1819800266","n1819800221","n1819800294","n1819800362","n1819800199","n1819800230","n1819800218","n1819800352","n1819800324","n1819800272","n1819800261","n1819800229"]},"n1875654132":{"id":"n1875654132","loc":[-85.6297439,41.939808],"version":"1","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:29:36Z","tags":{}},"n1475293263":{"id":"n1475293263","loc":[-85.6296235,41.939922],"version":"2","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:30:02Z","tags":{}},"n185947850":{"id":"n185947850","loc":[-85.631594,41.942613],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:22Z","tags":{}},"n185952745":{"id":"n185952745","loc":[-85.630986,41.941786],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:55:25Z","tags":{}},"n185972907":{"id":"n185972907","loc":[-85.631797,41.9420055],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:55Z","tags":{}},"n185972911":{"id":"n185972911","loc":[-85.6309723,41.9411623],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:55Z","tags":{}},"n185972915":{"id":"n185972915","loc":[-85.6295971,41.939267],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:55Z","tags":{}},"n1475293223":{"id":"n1475293223","loc":[-85.6313962,41.9416114],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:50Z","tags":{"railway":"level_crossing"}},"n1475293231":{"id":"n1475293231","loc":[-85.6318779,41.9415447],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:50Z","tags":{}},"n1475293241":{"id":"n1475293241","loc":[-85.6304613,41.9405499],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:51Z","tags":{}},"n1475293246":{"id":"n1475293246","loc":[-85.6297512,41.9395393],"version":"2","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:30:02Z","tags":{"railway":"level_crossing"}},"n1475293251":{"id":"n1475293251","loc":[-85.6316633,41.9415128],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:51Z","tags":{}},"n2139982404":{"id":"n2139982404","loc":[-85.6313283,41.9413748],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982407":{"id":"n2139982407","loc":[-85.6325545,41.9417787],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982408":{"id":"n2139982408","loc":[-85.6324499,41.9417693],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982409":{"id":"n2139982409","loc":[-85.6324753,41.9416444],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982410":{"id":"n2139982410","loc":[-85.6325814,41.9416538],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982411":{"id":"n2139982411","loc":[-85.6319572,41.9413515],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982412":{"id":"n2139982412","loc":[-85.6322925,41.941139],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982413":{"id":"n2139982413","loc":[-85.6323153,41.941153],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982414":{"id":"n2139982414","loc":[-85.6323019,41.9412617],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982415":{"id":"n2139982415","loc":[-85.6323703,41.9412667],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982416":{"id":"n2139982416","loc":[-85.6323555,41.941538],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982417":{"id":"n2139982417","loc":[-85.6321343,41.9416777],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982418":{"id":"n2139982418","loc":[-85.6319425,41.9416866],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982419":{"id":"n2139982419","loc":[-85.6320303,41.9416941],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982420":{"id":"n2139982420","loc":[-85.6321665,41.9415554],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982421":{"id":"n2139982421","loc":[-85.632412,41.9414164],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982422":{"id":"n2139982422","loc":[-85.6324801,41.9413421],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982423":{"id":"n2139982423","loc":[-85.6325023,41.9412585],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982424":{"id":"n2139982424","loc":[-85.6324532,41.9411607],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982425":{"id":"n2139982425","loc":[-85.6323502,41.941103],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982426":{"id":"n2139982426","loc":[-85.6322362,41.9411183],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982427":{"id":"n2139982427","loc":[-85.6318941,41.9413551],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982428":{"id":"n2139982428","loc":[-85.6318592,41.9414105],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982429":{"id":"n2139982429","loc":[-85.6320111,41.9415866],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982430":{"id":"n2139982430","loc":[-85.632446,41.9413792],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982431":{"id":"n2139982431","loc":[-85.6325112,41.941416],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982432":{"id":"n2139982432","loc":[-85.6325449,41.9416345],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982433":{"id":"n2139982433","loc":[-85.6326122,41.94164],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982434":{"id":"n2139982434","loc":[-85.6325954,41.9421966],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982435":{"id":"n2139982435","loc":[-85.6325655,41.9422411],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982436":{"id":"n2139982436","loc":[-85.632515,41.9422564],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982437":{"id":"n2139982437","loc":[-85.6324495,41.94223],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982438":{"id":"n2139982438","loc":[-85.6324009,41.9421743],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982439":{"id":"n2139982439","loc":[-85.6323915,41.9421145],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982440":{"id":"n2139982440","loc":[-85.6320287,41.9418585],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n2139982441":{"id":"n2139982441","loc":[-85.6318285,41.9416387],"version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{}},"n1475293258":{"id":"n1475293258","loc":[-85.6318289,41.9415077],"version":"2","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:28Z","tags":{}},"n2168544754":{"id":"n2168544754","loc":[-85.6312814,41.9431198],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n2168544755":{"id":"n2168544755","loc":[-85.6314212,41.9430646],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n2168544756":{"id":"n2168544756","loc":[-85.6313387,41.942949],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n2168544757":{"id":"n2168544757","loc":[-85.6311989,41.9430041],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n2168544758":{"id":"n2168544758","loc":[-85.6311024,41.9429313],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n2168544759":{"id":"n2168544759","loc":[-85.6310087,41.9428087],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n2168544760":{"id":"n2168544760","loc":[-85.6313831,41.9426504],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n2168544761":{"id":"n2168544761","loc":[-85.6314768,41.9427729],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n2168544762":{"id":"n2168544762","loc":[-85.6306376,41.942809],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n2168544763":{"id":"n2168544763","loc":[-85.6307378,41.9429427],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n2168544764":{"id":"n2168544764","loc":[-85.630841,41.9428998],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n2168544765":{"id":"n2168544765","loc":[-85.6307408,41.9427662],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n2168544766":{"id":"n2168544766","loc":[-85.6305404,41.9426029],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n2168544767":{"id":"n2168544767","loc":[-85.6304976,41.9426194],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n2168544768":{"id":"n2168544768","loc":[-85.6305673,41.9427184],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544769":{"id":"n2168544769","loc":[-85.6306164,41.9426984],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544770":{"id":"n2168544770","loc":[-85.6306418,41.9427302],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544771":{"id":"n2168544771","loc":[-85.6306861,41.9427137],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544772":{"id":"n2168544772","loc":[-85.6307146,41.9427537],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544773":{"id":"n2168544773","loc":[-85.6308999,41.9426807],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544774":{"id":"n2168544774","loc":[-85.6308429,41.9426053],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544775":{"id":"n2168544775","loc":[-85.6308999,41.9425806],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544776":{"id":"n2168544776","loc":[-85.6308318,41.9424875],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544777":{"id":"n2168544777","loc":[-85.6307732,41.9425087],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544778":{"id":"n2168544778","loc":[-85.6307178,41.9424357],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2168544779":{"id":"n2168544779","loc":[-85.630485,41.942524],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:02Z","tags":{}},"n2189099387":{"id":"n2189099387","loc":[-85.631203,41.9393371],"version":"1","changeset":"15276938","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:06:04Z","tags":{}},"n2189099404":{"id":"n2189099404","loc":[-85.6301963,41.9391363],"version":"1","changeset":"15276938","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:06:04Z","tags":{}},"n2189099405":{"id":"n2189099405","loc":[-85.6304447,41.9391352],"version":"1","changeset":"15276938","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:06:04Z","tags":{}},"n2189099406":{"id":"n2189099406","loc":[-85.6304463,41.9393391],"version":"1","changeset":"15276938","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:06:04Z","tags":{}},"n2189099407":{"id":"n2189099407","loc":[-85.6308435,41.9393373],"version":"1","changeset":"15276938","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:06:04Z","tags":{}},"n2189099408":{"id":"n2189099408","loc":[-85.6308418,41.9391251],"version":"1","changeset":"15276938","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:06:04Z","tags":{}},"n2189099409":{"id":"n2189099409","loc":[-85.6310929,41.939124],"version":"1","changeset":"15276938","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:06:04Z","tags":{}},"n2189099410":{"id":"n2189099410","loc":[-85.6310946,41.9393376],"version":"1","changeset":"15276938","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:06:04Z","tags":{}},"n2189112720":{"id":"n2189112720","loc":[-85.6314677,41.9412327],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112721":{"id":"n2189112721","loc":[-85.6313337,41.9411397],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112722":{"id":"n2189112722","loc":[-85.6320521,41.9405678],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112723":{"id":"n2189112723","loc":[-85.6321899,41.9406633],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112724":{"id":"n2189112724","loc":[-85.6313229,41.9408344],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112725":{"id":"n2189112725","loc":[-85.6311223,41.9410018],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112726":{"id":"n2189112726","loc":[-85.6313205,41.9411333],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112727":{"id":"n2189112727","loc":[-85.6315211,41.9409659],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112728":{"id":"n2189112728","loc":[-85.6311035,41.9402529],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112729":{"id":"n2189112729","loc":[-85.631226,41.9402107],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112730":{"id":"n2189112730","loc":[-85.6315966,41.9408051],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112731":{"id":"n2189112731","loc":[-85.6314741,41.9408473],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112732":{"id":"n2189112732","loc":[-85.6318114,41.940534],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112733":{"id":"n2189112733","loc":[-85.631588,41.94061],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112734":{"id":"n2189112734","loc":[-85.6314379,41.940366],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112735":{"id":"n2189112735","loc":[-85.6316613,41.94029],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112736":{"id":"n2189112736","loc":[-85.6306214,41.9400415],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112737":{"id":"n2189112737","loc":[-85.6304362,41.9397728],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112738":{"id":"n2189112738","loc":[-85.6305899,41.9397142],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112739":{"id":"n2189112739","loc":[-85.6307751,41.9399828],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112740":{"id":"n2189112740","loc":[-85.6304695,41.9401673],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112741":{"id":"n2189112741","loc":[-85.6301298,41.9396855],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112742":{"id":"n2189112742","loc":[-85.6303016,41.9396184],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112743":{"id":"n2189112743","loc":[-85.6306413,41.9401003],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112744":{"id":"n2189112744","loc":[-85.6309656,41.9406189],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112745":{"id":"n2189112745","loc":[-85.6308738,41.940493],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112746":{"id":"n2189112746","loc":[-85.6309333,41.940469],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112747":{"id":"n2189112747","loc":[-85.6307634,41.9402358],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112748":{"id":"n2189112748","loc":[-85.6308798,41.9401889],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112749":{"id":"n2189112749","loc":[-85.6311416,41.940548],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112750":{"id":"n2189112750","loc":[-85.6309577,41.9408708],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112751":{"id":"n2189112751","loc":[-85.630874,41.9407777],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112752":{"id":"n2189112752","loc":[-85.6310622,41.9406841],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112753":{"id":"n2189112753","loc":[-85.6311459,41.9407772],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112754":{"id":"n2189112754","loc":[-85.6320308,41.9405747],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112755":{"id":"n2189112755","loc":[-85.6317769,41.9401857],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112756":{"id":"n2189112756","loc":[-85.6313462,41.9401785],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:14Z","tags":{}},"n2189112757":{"id":"n2189112757","loc":[-85.6313423,41.9401199],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112758":{"id":"n2189112758","loc":[-85.6318308,41.9401184],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112759":{"id":"n2189112759","loc":[-85.6321154,41.9405433],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112760":{"id":"n2189112760","loc":[-85.6310307,41.941683],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112761":{"id":"n2189112761","loc":[-85.6309808,41.9416078],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112762":{"id":"n2189112762","loc":[-85.6312094,41.9415156],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112763":{"id":"n2189112763","loc":[-85.6312636,41.9415865],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112764":{"id":"n2189112764","loc":[-85.6309384,41.94155],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112765":{"id":"n2189112765","loc":[-85.631156,41.9414619],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112766":{"id":"n2189112766","loc":[-85.6311968,41.94152],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112767":{"id":"n2189112767","loc":[-85.6308946,41.9414851],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112768":{"id":"n2189112768","loc":[-85.6308237,41.9413888],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112769":{"id":"n2189112769","loc":[-85.6309858,41.9413228],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112770":{"id":"n2189112770","loc":[-85.6310567,41.9414192],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112771":{"id":"n2189112771","loc":[-85.6307774,41.9413276],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112772":{"id":"n2189112772","loc":[-85.6309068,41.9412735],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112773":{"id":"n2189112773","loc":[-85.6309531,41.9413347],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112774":{"id":"n2189112774","loc":[-85.6307975,41.9412466],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112775":{"id":"n2189112775","loc":[-85.6307006,41.9411699],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112776":{"id":"n2189112776","loc":[-85.6308289,41.941113],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112777":{"id":"n2189112777","loc":[-85.6308997,41.9412012],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112778":{"id":"n2189112778","loc":[-85.630765,41.9412062],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112779":{"id":"n2189112779","loc":[-85.630739,41.9412177],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112780":{"id":"n2189112780","loc":[-85.6305822,41.9410391],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112781":{"id":"n2189112781","loc":[-85.6304117,41.9408177],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112782":{"id":"n2189112782","loc":[-85.6305086,41.9407769],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112783":{"id":"n2189112783","loc":[-85.6306779,41.9410044],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112784":{"id":"n2189112784","loc":[-85.6307734,41.9421663],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112785":{"id":"n2189112785","loc":[-85.630708,41.9420741],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112786":{"id":"n2189112786","loc":[-85.630863,41.9420133],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112787":{"id":"n2189112787","loc":[-85.6309285,41.9421055],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112788":{"id":"n2189112788","loc":[-85.6307014,41.9420263],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112789":{"id":"n2189112789","loc":[-85.6306648,41.941971],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112790":{"id":"n2189112790","loc":[-85.6307927,41.9419178],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112791":{"id":"n2189112791","loc":[-85.6308366,41.9419696],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112792":{"id":"n2189112792","loc":[-85.6307574,41.9418708],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112793":{"id":"n2189112793","loc":[-85.6306288,41.9419231],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112794":{"id":"n2189112794","loc":[-85.6306943,41.9417835],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112795":{"id":"n2189112795","loc":[-85.6305344,41.9418474],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189112796":{"id":"n2189112796","loc":[-85.6305981,41.9419355],"version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:15Z","tags":{}},"n2189123410":{"id":"n2189123410","loc":[-85.6315476,41.9393801],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123412":{"id":"n2189123412","loc":[-85.6315247,41.9399188],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:22Z","tags":{}},"n2189123415":{"id":"n2189123415","loc":[-85.6316484,41.9400433],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:22Z","tags":{}},"n185945138":{"id":"n185945138","loc":[-85.627073,41.93319],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:52:24Z","tags":{}},"n185945142":{"id":"n185945142","loc":[-85.6296891,41.9331674],"version":"3","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:30:00Z","tags":{}},"n185945401":{"id":"n185945401","loc":[-85.6269,41.930199],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:52:30Z","tags":{}},"n185945405":{"id":"n185945405","loc":[-85.6296598,41.9301676],"version":"3","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:30:00Z","tags":{}},"n185956891":{"id":"n185956891","loc":[-85.6251617,41.9255049],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:46:00Z","tags":{}},"n185959979":{"id":"n185959979","loc":[-85.626333,41.928347],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:59:03Z","tags":{}},"n185959983":{"id":"n185959983","loc":[-85.6296419,41.9283288],"version":"3","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:29:59Z","tags":{}},"n185961192":{"id":"n185961192","loc":[-85.627053,41.9352031],"version":"3","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:29:59Z","tags":{}},"n185961200":{"id":"n185961200","loc":[-85.6297088,41.9351902],"version":"4","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:29:59Z","tags":{}},"n185963655":{"id":"n185963655","loc":[-85.6296112,41.9273948],"version":"3","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:30:00Z","tags":{}},"n185963665":{"id":"n185963665","loc":[-85.626047,41.92737],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:01Z","tags":{}},"n185963688":{"id":"n185963688","loc":[-85.6296503,41.9292199],"version":"3","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:30:01Z","tags":{}},"n185963689":{"id":"n185963689","loc":[-85.6296694,41.931157],"version":"3","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:30:01Z","tags":{}},"n185963690":{"id":"n185963690","loc":[-85.6296791,41.9321485],"version":"3","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:30:01Z","tags":{}},"n185963691":{"id":"n185963691","loc":[-85.6296991,41.9341973],"version":"3","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:30:01Z","tags":{}},"n185967638":{"id":"n185967638","loc":[-85.627089,41.9361884],"version":"3","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:29:59Z","tags":{}},"n185972917":{"id":"n185972917","loc":[-85.6293759,41.9388605],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:55Z","tags":{}},"n185972919":{"id":"n185972919","loc":[-85.6290337,41.9380234],"version":"3","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:30:01Z","tags":{}},"n185972921":{"id":"n185972921","loc":[-85.628424,41.936212],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:40Z","tags":{}},"n185972923":{"id":"n185972923","loc":[-85.628367,41.936029],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:40Z","tags":{}},"n185974511":{"id":"n185974511","loc":[-85.627064,41.932169],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:06:19Z","tags":{}},"n185977728":{"id":"n185977728","loc":[-85.625605,41.925842],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:03Z","tags":{}},"n185977729":{"id":"n185977729","loc":[-85.625685,41.926163],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:03Z","tags":{}},"n185977731":{"id":"n185977731","loc":[-85.6257845,41.9264872],"version":"3","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:29:59Z","tags":{}},"n185977733":{"id":"n185977733","loc":[-85.62663,41.929251],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:03Z","tags":{}},"n185977734":{"id":"n185977734","loc":[-85.627008,41.930642],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:03Z","tags":{}},"n185977736":{"id":"n185977736","loc":[-85.627029,41.930775],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:03Z","tags":{}},"n185977738":{"id":"n185977738","loc":[-85.627041,41.930946],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:03Z","tags":{}},"n185977739":{"id":"n185977739","loc":[-85.6270379,41.9311746],"version":"3","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:29:59Z","tags":{}},"n185977742":{"id":"n185977742","loc":[-85.627055,41.934206],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:04Z","tags":{}},"n185977744":{"id":"n185977744","loc":[-85.627084,41.936804],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:04Z","tags":{}},"n185977746":{"id":"n185977746","loc":[-85.627104,41.936914],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:04Z","tags":{}},"n185977748":{"id":"n185977748","loc":[-85.627156,41.937026],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:04Z","tags":{}},"n185977750":{"id":"n185977750","loc":[-85.6272406,41.9371672],"version":"3","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:29:59Z","tags":{}},"n185977752":{"id":"n185977752","loc":[-85.627317,41.93723],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:04Z","tags":{}},"n185977753":{"id":"n185977753","loc":[-85.627422,41.937312],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:04Z","tags":{}},"n185977755":{"id":"n185977755","loc":[-85.627754,41.937504],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:04Z","tags":{}},"n185977757":{"id":"n185977757","loc":[-85.627883,41.937623],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:04Z","tags":{}},"n185977761":{"id":"n185977761","loc":[-85.627984,41.93773],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:04Z","tags":{}},"n1475283996":{"id":"n1475283996","loc":[-85.6270514,41.9317122],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:46Z","tags":{"railway":"level_crossing"}},"n1475284004":{"id":"n1475284004","loc":[-85.6278177,41.9342117],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:46Z","tags":{"railway":"level_crossing"}},"n1475284014":{"id":"n1475284014","loc":[-85.6251877,41.9255913],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:47Z","tags":{"railway":"level_crossing"}},"n1475284017":{"id":"n1475284017","loc":[-85.6274992,41.9331816],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:47Z","tags":{"railway":"level_crossing"}},"n1475284021":{"id":"n1475284021","loc":[-85.6297108,41.9353939],"version":"2","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:30:02Z","tags":{"railway":"level_crossing"}},"n1475284027":{"id":"n1475284027","loc":[-85.62811,41.935198],"version":"2","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:30:03Z","tags":{"railway":"level_crossing"}},"n1475284035":{"id":"n1475284035","loc":[-85.626888,41.9311757],"version":"2","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:30:03Z","tags":{"railway":"level_crossing"}},"n1475293245":{"id":"n1475293245","loc":[-85.6286047,41.9367881],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:51Z","tags":{}},"n1875654302":{"id":"n1875654302","loc":[-85.6296367,41.927491],"version":"1","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:29:43Z","tags":{}},"n2189099388":{"id":"n2189099388","loc":[-85.6312007,41.9389988],"version":"1","changeset":"15276938","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:06:04Z","tags":{}},"n2189099389":{"id":"n2189099389","loc":[-85.6311003,41.9389992],"version":"1","changeset":"15276938","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:06:04Z","tags":{}},"n2189099390":{"id":"n2189099390","loc":[-85.6310988,41.9387847],"version":"1","changeset":"15276938","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:06:04Z","tags":{}},"n2189099391":{"id":"n2189099391","loc":[-85.6312165,41.9387843],"version":"1","changeset":"15276938","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:06:04Z","tags":{}},"n2189099392":{"id":"n2189099392","loc":[-85.6312152,41.9385857],"version":"1","changeset":"15276938","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:06:04Z","tags":{}},"n2189099393":{"id":"n2189099393","loc":[-85.6310877,41.9385862],"version":"1","changeset":"15276938","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:06:04Z","tags":{}},"n2189099394":{"id":"n2189099394","loc":[-85.6310858,41.9383161],"version":"1","changeset":"15276938","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:06:04Z","tags":{}},"n2189099395":{"id":"n2189099395","loc":[-85.6302002,41.9383196],"version":"1","changeset":"15276938","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:06:04Z","tags":{}},"n2189099396":{"id":"n2189099396","loc":[-85.6302011,41.9384472],"version":"1","changeset":"15276938","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:06:04Z","tags":{}},"n2189099397":{"id":"n2189099397","loc":[-85.6301018,41.9384476],"version":"1","changeset":"15276938","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:06:04Z","tags":{}},"n2189099398":{"id":"n2189099398","loc":[-85.6301025,41.9385419],"version":"1","changeset":"15276938","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:06:04Z","tags":{}},"n2189099399":{"id":"n2189099399","loc":[-85.6299275,41.9385427],"version":"1","changeset":"15276938","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:06:04Z","tags":{}},"n2189099400":{"id":"n2189099400","loc":[-85.62993,41.9388653],"version":"1","changeset":"15276938","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:06:04Z","tags":{}},"n2189099401":{"id":"n2189099401","loc":[-85.630107,41.9388645],"version":"1","changeset":"15276938","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:06:04Z","tags":{}},"n2189099402":{"id":"n2189099402","loc":[-85.6301079,41.9389908],"version":"1","changeset":"15276938","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:06:04Z","tags":{}},"n2189099403":{"id":"n2189099403","loc":[-85.6301951,41.9389904],"version":"1","changeset":"15276938","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:06:04Z","tags":{}},"n2189123382":{"id":"n2189123382","loc":[-85.6336279,41.9354365],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123384":{"id":"n2189123384","loc":[-85.6328492,41.9355177],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123387":{"id":"n2189123387","loc":[-85.6323762,41.9357396],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123388":{"id":"n2189123388","loc":[-85.6315174,41.9358966],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123389":{"id":"n2189123389","loc":[-85.6304331,41.936124],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123390":{"id":"n2189123390","loc":[-85.6302075,41.9364271],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123391":{"id":"n2189123391","loc":[-85.6303458,41.9367953],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123392":{"id":"n2189123392","loc":[-85.6299601,41.9369739],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123393":{"id":"n2189123393","loc":[-85.6299164,41.9374882],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123394":{"id":"n2189123394","loc":[-85.6299455,41.9378022],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123395":{"id":"n2189123395","loc":[-85.6299771,41.9379053],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123396":{"id":"n2189123396","loc":[-85.6301597,41.9379091],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123397":{"id":"n2189123397","loc":[-85.6308042,41.9377913],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123398":{"id":"n2189123398","loc":[-85.6316885,41.9378082],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123399":{"id":"n2189123399","loc":[-85.6316848,41.9380079],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123400":{"id":"n2189123400","loc":[-85.6318449,41.9381161],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123401":{"id":"n2189123401","loc":[-85.6320705,41.9381811],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123402":{"id":"n2189123402","loc":[-85.6321433,41.9383706],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123404":{"id":"n2189123404","loc":[-85.632056,41.9384355],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123406":{"id":"n2189123406","loc":[-85.6317867,41.9384572],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123409":{"id":"n2189123409","loc":[-85.6316572,41.9387281],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:21Z","tags":{}},"n2189123417":{"id":"n2189123417","loc":[-85.6315946,41.93775],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:22Z","tags":{}},"n2189123419":{"id":"n2189123419","loc":[-85.6302641,41.9378393],"version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:22Z","tags":{}},"w208640158":{"id":"w208640158","version":"1","changeset":"15277145","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:41:22Z","tags":{"area":"yes","natural":"wetland"},"nodes":["n2189123379","n2189123382","n2189123384","n2189123387","n2189123388","n2189123389","n2189123390","n2189123391","n2189123392","n2189123393","n2189123394","n2189123395","n2189123396","n2189123419","n2189123397","n2189123417","n2189123398","n2189123399","n2189123400","n2189123401","n2189123402","n2189123404","n2189123406","n2189123409","n2189123410","n2189123412","n2189123415","n1819805722","n1819805861","n1819805887","n1819805760","n1819805641","n1819805632","n2189123379"]},"w134150787":{"id":"w134150787","version":"3","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:20Z","tags":{"name":"Conrail Railroad","railway":"rail","tiger:cfcc":"B11","tiger:county":"St. Joseph, MI","tiger:name_base":"Conrail Railroad","tiger:reviewed":"no"},"nodes":["n185972905","n185972907","n1475293223","n185972911","n1475293241","n1475293246","n185972915","n185972917","n185972919","n1475293245","n185972921","n185972923","n1475284027","n1475284004","n1475284017","n1475283996","n1475284035","n1475284014","n185956891"]},"w208639443":{"id":"w208639443","version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:17Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189112720","n2189112721","n2189112722","n2189112723","n2189112720"]},"w17966462":{"id":"w17966462","version":"9","changeset":"15421127","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-19T15:12:00Z","tags":{"highway":"secondary","name":"South Main Street","old_ref":"US 131","ref":"M 86","tiger:cfcc":"A31","tiger:county":"St. Joseph, MI","tiger:name_base":"Main","tiger:name_base_1":"State Highway 86","tiger:name_direction_prefix":"S","tiger:name_type":"St","tiger:reviewed":"no"},"nodes":["n185977728","n185977729","n185977731","n185963665","n185959979","n185977733","n185945401","n185977734","n185977736","n185977738","n185977739","n1475283996","n185974511","n185945138","n185977742","n185961192","n185967638","n185977744","n185977746","n185977748","n185977750","n185977752","n185977753","n185977754","n185977755","n185977757","n185977761","n185958030","n1475293263","n185963698","n185952745","n185947850","n185977762"]},"w203985741":{"id":"w203985741","version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:27Z","tags":{"area":"yes","leisure":"park","name":"Conservation Park","website":"http://www.threeriversmi.us/?page_id=53"},"nodes":["n2139982404","n2139982405","n2139982399","n2139982400","n1819805770","n2139982402","n2139982403","n2139982401","n1819805780","n1819805834","n2139982406","n2139982404"]},"w17963676":{"id":"w17963676","version":"3","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:28Z","tags":{"highway":"service","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312976","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n1475293258","n2139982428","n2139982427","n2139982426","n2139982425","n2139982424","n2139982423","n2139982422","n2139982430","n2139982421","n2139982420","n2139982429","n1475293231","n1475293258","n1475293251","n1475293223","n185952745"]},"w203985745":{"id":"w203985745","version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:28Z","tags":{"highway":"footway"},"nodes":["n2139982430","n2139982431","n2139982432","n2139982433","n2139982434","n2139982435","n2139982436","n2139982437","n2139982438","n2139982439","n2139982440","n2139982441","n1475293231"]},"w208639451":{"id":"w208639451","version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:17Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189112754","n2189112755","n2189112756","n2189112757","n2189112758","n2189112759","n2189112754"]},"w208639452":{"id":"w208639452","version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:17Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189112760","n2189112761","n2189112766","n2189112762","n2189112763","n2189112760"]},"w206805244":{"id":"w206805244","version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{"area":"yes","building":"yes"},"nodes":["n2168544766","n2168544767","n2168544768","n2168544769","n2168544770","n2168544771","n2168544772","n2168544773","n2168544774","n2168544775","n2168544776","n2168544777","n2168544778","n2168544779","n2168544766"]},"w208639444":{"id":"w208639444","version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:17Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189112724","n2189112725","n2189112726","n2189112727","n2189112724"]},"w208639450":{"id":"w208639450","version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:17Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189112750","n2189112751","n2189112752","n2189112753","n2189112750"]},"w208639448":{"id":"w208639448","version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:17Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189112740","n2189112741","n2189112742","n2189112743","n2189112740"]},"w208637859":{"id":"w208637859","version":"1","changeset":"15276938","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:06:06Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189099387","n2189099388","n2189099389","n2189099390","n2189099391","n2189099392","n2189099393","n2189099394","n2189099395","n2189099396","n2189099397","n2189099398","n2189099399","n2189099400","n2189099401","n2189099402","n2189099403","n2189099404","n2189099405","n2189099406","n2189099407","n2189099408","n2189099409","n2189099410","n2189099387"]},"w208639453":{"id":"w208639453","version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:17Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189112764","n2189112765","n2189112766","n2189112761","n2189112764"]},"w208639456":{"id":"w208639456","version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:18Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189112774","n2189112778","n2189112779","n2189112775","n2189112776","n2189112777","n2189112774"]},"w208639445":{"id":"w208639445","version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:17Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189112728","n2189112729","n2189112730","n2189112731","n2189112728"]},"w17967776":{"id":"w17967776","version":"1","changeset":"402580","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:54:17Z","tags":{"highway":"residential","name":"5th St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"5th","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312495","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185958032","n185988963"]},"w208639461":{"id":"w208639461","version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:18Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189112792","n2189112794","n2189112795","n2189112796","n2189112793","n2189112792"]},"w206805241":{"id":"w206805241","version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{"area":"yes","building":"yes"},"nodes":["n2168544754","n2168544755","n2168544756","n2168544757","n2168544754"]},"w208639449":{"id":"w208639449","version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:17Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189112744","n2189112745","n2189112746","n2189112747","n2189112748","n2189112749","n2189112744"]},"w208639455":{"id":"w208639455","version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:18Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189112771","n2189112772","n2189112773","n2189112768","n2189112771"]},"w208639457":{"id":"w208639457","version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:18Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189112780","n2189112781","n2189112782","n2189112783","n2189112780"]},"w208639446":{"id":"w208639446","version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:17Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189112732","n2189112733","n2189112734","n2189112735","n2189112732"]},"w208639454":{"id":"w208639454","version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:17Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189112767","n2189112768","n2189112773","n2189112769","n2189112770","n2189112767"]},"w203985743":{"id":"w203985743","version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:28Z","tags":{"amenity":"parking","area":"yes"},"nodes":["n2139982411","n2139982412","n2139982413","n2139982414","n2139982415","n2139982416","n2139982417","n2139982419","n2139982418","n2139982411"]},"w17965023":{"id":"w17965023","version":"4","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:30:10Z","tags":{"highway":"residential","name":"4th St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"4th","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313205","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185963655","n1875654302","n185959983","n185963688","n185945405","n185963689","n185963690","n185945142","n185963691","n185961200","n1475284021","n1475293246","n1875654132","n1475293263"]},"w206805242":{"id":"w206805242","version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{"area":"yes","building":"yes"},"nodes":["n2168544758","n2168544759","n2168544760","n2168544761","n2168544758"]},"w208639460":{"id":"w208639460","version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:18Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189112792","n2189112793","n2189112789","n2189112790","n2189112792"]},"w208639447":{"id":"w208639447","version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:17Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189112736","n2189112737","n2189112738","n2189112739","n2189112736"]},"w208639458":{"id":"w208639458","version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:18Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189112784","n2189112785","n2189112786","n2189112787","n2189112784"]},"w203985744":{"id":"w203985744","version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:28Z","tags":{"highway":"service"},"nodes":["n2139982425","n2139982400"]},"w208639459":{"id":"w208639459","version":"1","changeset":"15277056","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T23:26:18Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189112788","n2189112789","n2189112790","n2189112791","n2189112788"]},"w203985742":{"id":"w203985742","version":"1","changeset":"14894784","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:53:28Z","tags":{"amenity":"shelter","area":"yes","shelter_type":"picnic_shelter"},"nodes":["n2139982407","n2139982408","n2139982409","n2139982410","n2139982407"]},"w206805243":{"id":"w206805243","version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:03Z","tags":{"area":"yes","building":"yes"},"nodes":["n2168544762","n2168544763","n2168544764","n2168544765","n2168544762"]},"n185959081":{"id":"n185959081","loc":[-85.628469,41.948674],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:41Z","tags":{}},"n185967427":{"id":"n185967427","loc":[-85.632054,41.951174],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:03:04Z","tags":{}},"n185967424":{"id":"n185967424","loc":[-85.6320391,41.9499109],"version":"3","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:17Z","tags":{}},"n185968101":{"id":"n185968101","loc":[-85.6308395,41.9511969],"version":"3","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:17Z","tags":{}},"n185960792":{"id":"n185960792","loc":[-85.632074,41.953707],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:59:24Z","tags":{}},"n185961389":{"id":"n185961389","loc":[-85.630935,41.959037],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:59:39Z","tags":{}},"n185961391":{"id":"n185961391","loc":[-85.632169,41.959025],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:59:39Z","tags":{}},"n185965395":{"id":"n185965395","loc":[-85.63216,41.959859],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:52Z","tags":{}},"n185966953":{"id":"n185966953","loc":[-85.630894,41.957428],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:50Z","tags":{}},"n185966955":{"id":"n185966955","loc":[-85.632122,41.957427],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:50Z","tags":{}},"n185967430":{"id":"n185967430","loc":[-85.632077,41.952453],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:03:04Z","tags":{}},"n185967432":{"id":"n185967432","loc":[-85.632095,41.954685],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:03:04Z","tags":{}},"n185967434":{"id":"n185967434","loc":[-85.632121,41.955914],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:03:04Z","tags":{}},"n185967436":{"id":"n185967436","loc":[-85.632128,41.9583],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:03:04Z","tags":{}},"n185967438":{"id":"n185967438","loc":[-85.632187,41.960681],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:03:04Z","tags":{}},"n185967440":{"id":"n185967440","loc":[-85.632182,41.961493],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:03:04Z","tags":{}},"n185968102":{"id":"n185968102","loc":[-85.630855,41.952452],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:03:22Z","tags":{}},"n185968104":{"id":"n185968104","loc":[-85.630887,41.953714],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:03:22Z","tags":{}},"n185968106":{"id":"n185968106","loc":[-85.630883,41.954692],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:03:22Z","tags":{}},"n185968108":{"id":"n185968108","loc":[-85.630904,41.955913],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:03:22Z","tags":{}},"n185968110":{"id":"n185968110","loc":[-85.630904,41.958058],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:03:22Z","tags":{}},"n185968112":{"id":"n185968112","loc":[-85.630952,41.960667],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:03:22Z","tags":{}},"n185968114":{"id":"n185968114","loc":[-85.630972,41.961495],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:03:22Z","tags":{}},"n185968116":{"id":"n185968116","loc":[-85.630962,41.961967],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:03:22Z","tags":{}},"n185978969":{"id":"n185978969","loc":[-85.633214,41.948618],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:39Z","tags":{}},"n185985812":{"id":"n185985812","loc":[-85.633274,41.951159],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:39Z","tags":{}},"n185986155":{"id":"n185986155","loc":[-85.633258,41.949893],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:48Z","tags":{}},"n2208608826":{"id":"n2208608826","loc":[-85.6339222,41.9486225],"version":"1","changeset":"15411098","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-18T17:54:40Z","tags":{}},"w17964531":{"id":"w17964531","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:30:22Z","tags":{"highway":"residential","name":"Willow Dr","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Willow","tiger:name_type":"Dr","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313189","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093"},"nodes":["n185959079","n185959081"]},"w17967386":{"id":"w17967386","version":"3","changeset":"15473186","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-24T01:52:24Z","tags":{"highway":"residential","name":"East Armitage Street","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Armitage","tiger:name_direction_prefix":"E","tiger:name_type":"St","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185982195","n185968101","n185967427","n185985812","n185974583"]},"w17965502":{"id":"w17965502","version":"2","changeset":"15473186","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-24T01:52:21Z","tags":{"highway":"residential","name":"Elm Street","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Elm","tiger:name_type":"St","tiger:reviewed":"no"},"nodes":["n185968100","n185968101","n185968102","n185968104","n185968106","n185968108","n185966953","n185968110","n185961389","n185968112","n185968114","n185968116"]},"w17967844":{"id":"w17967844","version":"2","changeset":"15473186","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-24T01:52:24Z","tags":{"highway":"residential","name":"East Bennett Street","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Bennett","tiger:name_direction_prefix":"E","tiger:name_type":"St","tiger:reviewed":"no"},"nodes":["n185982193","n185967424","n185986155","n185978390"]},"w17966581":{"id":"w17966581","version":"2","changeset":"15411098","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-18T17:54:40Z","tags":{"highway":"residential","name":"E Kelsey St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Kelsey","tiger:name_direction_prefix":"E","tiger:name_type":"St","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185978967","n185978969","n2208608826","n185971578"]},"w17965402":{"id":"w17965402","version":"3","changeset":"15473186","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-24T01:52:22Z","tags":{"highway":"residential","name":"Walnut Street","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Walnut","tiger:name_type":"St","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185967422","n185967424","n185967427","n185967430","n185960792","n185967432","n185967434","n185966955","n185967436","n185961391","n185965395","n185967438","n185967440"]},"n2199093506":{"id":"n2199093506","loc":[-85.6251879,41.9478322],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093505":{"id":"n2199093505","loc":[-85.6252076,41.9477749],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093504":{"id":"n2199093504","loc":[-85.6252289,41.9477602],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093503":{"id":"n2199093503","loc":[-85.625201,41.9477492],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093502":{"id":"n2199093502","loc":[-85.6251682,41.9477066],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093501":{"id":"n2199093501","loc":[-85.6251715,41.947609],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093500":{"id":"n2199093500","loc":[-85.6252125,41.9475639],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093499":{"id":"n2199093499","loc":[-85.6252896,41.9475602],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093498":{"id":"n2199093498","loc":[-85.6253027,41.9475334],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093497":{"id":"n2199093497","loc":[-85.6253437,41.9474822],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093496":{"id":"n2199093496","loc":[-85.6254421,41.9474675],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093495":{"id":"n2199093495","loc":[-85.6256503,41.9474944],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093494":{"id":"n2199093494","loc":[-85.6257257,41.9476127],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093493":{"id":"n2199093493","loc":[-85.6257028,41.9477285],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093492":{"id":"n2199093492","loc":[-85.6255339,41.9478102],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093491":{"id":"n2199093491","loc":[-85.6253912,41.9478224],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093490":{"id":"n2199093490","loc":[-85.6253043,41.947859],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093489":{"id":"n2199093489","loc":[-85.6252027,41.9478846],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093458":{"id":"n2199093458","loc":[-85.6246876,41.9486617],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:43Z","tags":{}},"n2199093457":{"id":"n2199093457","loc":[-85.6243127,41.9486583],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:43Z","tags":{}},"n2199093456":{"id":"n2199093456","loc":[-85.624306,41.9490569],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:43Z","tags":{}},"n2199093455":{"id":"n2199093455","loc":[-85.624681,41.9490603],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:43Z","tags":{}},"n2199093514":{"id":"n2199093514","loc":[-85.6236228,41.9496059],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:45Z","tags":{}},"n2199093513":{"id":"n2199093513","loc":[-85.6236231,41.9496997],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:45Z","tags":{}},"n2199093512":{"id":"n2199093512","loc":[-85.623357,41.9497002],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:45Z","tags":{}},"n2199093511":{"id":"n2199093511","loc":[-85.6233567,41.9496136],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:45Z","tags":{}},"n2199093508":{"id":"n2199093508","loc":[-85.6239735,41.9494287],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:45Z","tags":{}},"n2199093507":{"id":"n2199093507","loc":[-85.6239741,41.9496052],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:45Z","tags":{}},"n2199093488":{"id":"n2199093488","loc":[-85.624497,41.9512286],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093487":{"id":"n2199093487","loc":[-85.6244966,41.9511259],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093486":{"id":"n2199093486","loc":[-85.6243151,41.9511263],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093485":{"id":"n2199093485","loc":[-85.6243154,41.951229],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093484":{"id":"n2199093484","loc":[-85.6241205,41.9508665],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093483":{"id":"n2199093483","loc":[-85.624115,41.9505249],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093482":{"id":"n2199093482","loc":[-85.6243149,41.9505231],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093481":{"id":"n2199093481","loc":[-85.6243203,41.9508648],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093480":{"id":"n2199093480","loc":[-85.624393,41.9508668],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093479":{"id":"n2199093479","loc":[-85.6243904,41.9505956],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093478":{"id":"n2199093478","loc":[-85.6246727,41.950594],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093477":{"id":"n2199093477","loc":[-85.624675,41.9508203],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093476":{"id":"n2199093476","loc":[-85.6245097,41.9508212],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093475":{"id":"n2199093475","loc":[-85.6245101,41.9508662],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093474":{"id":"n2199093474","loc":[-85.6241008,41.9493459],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093473":{"id":"n2199093473","loc":[-85.6242442,41.9493459],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093472":{"id":"n2199093472","loc":[-85.6242442,41.9493681],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093471":{"id":"n2199093471","loc":[-85.6243397,41.9493681],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093470":{"id":"n2199093470","loc":[-85.6243417,41.9493511],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093469":{"id":"n2199093469","loc":[-85.6247251,41.9493485],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093468":{"id":"n2199093468","loc":[-85.6247548,41.9504949],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093467":{"id":"n2199093467","loc":[-85.6241214,41.9505017],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093466":{"id":"n2199093466","loc":[-85.6254398,41.950174],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093465":{"id":"n2199093465","loc":[-85.6254412,41.9499872],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093464":{"id":"n2199093464","loc":[-85.6255363,41.9499876],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093463":{"id":"n2199093463","loc":[-85.6255374,41.9498439],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093462":{"id":"n2199093462","loc":[-85.6255638,41.949844],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:44Z","tags":{}},"n2199093461":{"id":"n2199093461","loc":[-85.6255652,41.9496672],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:43Z","tags":{}},"n2199093460":{"id":"n2199093460","loc":[-85.6251823,41.9496656],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:43Z","tags":{}},"n2199093459":{"id":"n2199093459","loc":[-85.6251785,41.9501729],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:43Z","tags":{}},"n2199093510":{"id":"n2199093510","loc":[-85.6229922,41.9496143],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:45Z","tags":{}},"n2199093509":{"id":"n2199093509","loc":[-85.6229915,41.9494306],"version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:45Z","tags":{}},"n185948903":{"id":"n185948903","loc":[-85.616514,41.947449],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:45Z","tags":{}},"n185955120":{"id":"n185955120","loc":[-85.620103,41.951],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:56:39Z","tags":{}},"n185955143":{"id":"n185955143","loc":[-85.619784,41.94746],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:56:39Z","tags":{}},"n185960124":{"id":"n185960124","loc":[-85.615238,41.947468],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:59:07Z","tags":{}},"n185961362":{"id":"n185961362","loc":[-85.617437,41.947451],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:59:38Z","tags":{}},"n185961364":{"id":"n185961364","loc":[-85.61861,41.947456],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:59:38Z","tags":{}},"n185961367":{"id":"n185961367","loc":[-85.620088,41.947458],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:59:38Z","tags":{}},"n185965105":{"id":"n185965105","loc":[-85.620087,41.94924],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:44Z","tags":{}},"n185970220":{"id":"n185970220","loc":[-85.62156,41.948333],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:04:17Z","tags":{}},"n185974697":{"id":"n185974697","loc":[-85.6201059,41.950132],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:05Z","tags":{}},"n2138420778":{"id":"n2138420778","loc":[-85.616948,41.9474499],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:13Z","tags":{}},"w17967535":{"id":"w17967535","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:52:19Z","tags":{"highway":"residential","name":"10th Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"10th","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313652:15313654","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185955120","n185986812","n185983141"]},"w209716130":{"id":"w209716130","version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:46Z","tags":{"area":"yes","building":"yes"},"nodes":["n2199093485","n2199093486","n2199093487","n2199093488","n2199093485"]},"w17964788":{"id":"w17964788","version":"2","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:15Z","tags":{"highway":"residential","name":"6th Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"6th","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313681:15313682:15329115:15329116:15330465:15330466","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185960124","n185948903","n2138420778","n185961362","n185961364","n185955143","n185961367","n185961369","n185961371"]},"w17965159":{"id":"w17965159","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:34:55Z","tags":{"highway":"residential","name":"8th Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"8th","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313660","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185965105","n185965108","n185965110"]},"w209716125":{"id":"w209716125","version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:45Z","tags":{"area":"yes","building":"yes"},"nodes":["n2199093459","n2199093460","n2199093461","n2199093462","n2199093463","n2199093464","n2199093465","n2199093466","n2199093459"]},"w17965699":{"id":"w17965699","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:39:03Z","tags":{"highway":"residential","name":"7th Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"7th","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313667:15314407","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185970220","n185970222","n185970224"]},"w209716132":{"id":"w209716132","version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:46Z","tags":{"area":"yes","building":"yes"},"nodes":["n2199093507","n2199093508","n2199093509","n2199093510","n2199093511","n2199093512","n2199093513","n2199093514","n2199093507"]},"w17966129":{"id":"w17966129","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:42:41Z","tags":{"highway":"residential","name":"9th Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"9th","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313656","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185974697","n185974699"]},"w209716127":{"id":"w209716127","version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:46Z","tags":{"area":"yes","building":"yes"},"nodes":["n2199093475","n2199093476","n2199093477","n2199093478","n2199093479","n2199093480","n2199093475"]},"w209716131":{"id":"w209716131","version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:46Z","tags":{"area":"yes","natural":"water","water":"pond"},"nodes":["n2199093489","n2199093490","n2199093491","n2199093492","n2199093493","n2199093494","n2199093495","n2199093496","n2199093497","n2199093498","n2199093499","n2199093500","n2199093501","n2199093502","n2199093503","n2199093504","n2199093505","n2199093506","n2199093489"]},"w209716126":{"id":"w209716126","version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:45Z","tags":{"area":"yes","building":"yes"},"nodes":["n2199093467","n2199093468","n2199093469","n2199093470","n2199093471","n2199093472","n2199093473","n2199093474","n2199093467"]},"w209716124":{"id":"w209716124","version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:45Z","tags":{"area":"yes","building":"yes"},"nodes":["n2199093455","n2199093456","n2199093457","n2199093458","n2199093455"]},"w209716128":{"id":"w209716128","version":"1","changeset":"15347539","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T04:54:46Z","tags":{"area":"yes","building":"yes"},"nodes":["n2199093481","n2199093482","n2199093483","n2199093484","n2199093481"]},"n185949872":{"id":"n185949872","loc":[-85.643009,41.949264],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:54:20Z","tags":{}},"n185949875":{"id":"n185949875","loc":[-85.642598,41.94929],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:54:20Z","tags":{}},"n185949877":{"id":"n185949877","loc":[-85.642127,41.949382],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:54:20Z","tags":{}},"n185949881":{"id":"n185949881","loc":[-85.64169,41.949936],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:54:20Z","tags":{}},"n185988165":{"id":"n185988165","loc":[-85.642167,41.947657],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:13:33Z","tags":{}},"n185988167":{"id":"n185988167","loc":[-85.642347,41.947662],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:13:33Z","tags":{}},"n185988169":{"id":"n185988169","loc":[-85.642621,41.947659],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:13:33Z","tags":{}},"n185965019":{"id":"n185965019","loc":[-85.6385084,41.951127],"version":"4","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:48:03Z","tags":{}},"n1475293248":{"id":"n1475293248","loc":[-85.6386095,41.9512214],"version":"2","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:48:04Z","tags":{}},"n185962639":{"id":"n185962639","loc":[-85.649669,41.949161],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:00:30Z","tags":{}},"n185962810":{"id":"n185962810","loc":[-85.649907,41.949157],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:00:34Z","tags":{}},"n185964355":{"id":"n185964355","loc":[-85.637412,41.9511359],"version":"3","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:48:03Z","tags":{}},"n185965021":{"id":"n185965021","loc":[-85.638661,41.952386],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:42Z","tags":{}},"n185965023":{"id":"n185965023","loc":[-85.638654,41.953665],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:42Z","tags":{}},"n185965025":{"id":"n185965025","loc":[-85.638694,41.954649],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:42Z","tags":{}},"n185965027":{"id":"n185965027","loc":[-85.638724,41.955913],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:42Z","tags":{}},"n185971415":{"id":"n185971415","loc":[-85.644466,41.949246],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:02Z","tags":{}},"n185971417":{"id":"n185971417","loc":[-85.647021,41.949193],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:02Z","tags":{}},"n185971420":{"id":"n185971420","loc":[-85.648476,41.949169],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:02Z","tags":{}},"n185979975":{"id":"n185979975","loc":[-85.644429,41.947633],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:24Z","tags":{}},"n185988171":{"id":"n185988171","loc":[-85.645377,41.947622],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:13:34Z","tags":{}},"w17963211":{"id":"w17963211","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:23:06Z","tags":{"highway":"residential","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313193","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185949870","n185949872","n185949875","n185949877","n185949881"]},"w17965839":{"id":"w17965839","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:40:10Z","tags":{"highway":"residential","name":"Arnold St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Arnold","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15327930:15324550:15312304:15324551","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185949870","n185971415","n185971417","n185971420","n185962639","n185962810"]},"w17967618":{"id":"w17967618","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:53:22Z","tags":{"highway":"residential","name":"Pierson St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Pierson","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313265:15312333:15324553","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185967777","n185988165","n185988167","n185988169","n185985824","n185979975","n185988171"]},"w17965149":{"id":"w17965149","version":"2","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:56Z","tags":{"highway":"residential","name":"Oak St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Oak","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15331522","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185965019","n1475293248","n185965021","n185965023","n185965025","n185965027"]},"w17966118":{"id":"w17966118","version":"3","changeset":"15473186","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-24T01:52:24Z","tags":{"highway":"residential","name":"West Armitage Street","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Armitage","tiger:name_direction_prefix":"W","tiger:name_type":"St","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185974583","n185974585","n185964355","n185965019"]},"n2208608800":{"id":"n2208608800","loc":[-85.6354294,41.9486201],"version":"1","changeset":"15411098","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-18T17:54:39Z","tags":{}},"n2199109806":{"id":"n2199109806","loc":[-85.6350474,41.9477884],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109804":{"id":"n2199109804","loc":[-85.6350476,41.9477962],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109802":{"id":"n2199109802","loc":[-85.635002,41.9477969],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109799":{"id":"n2199109799","loc":[-85.6350018,41.9477883],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109797":{"id":"n2199109797","loc":[-85.6349141,41.9477897],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109795":{"id":"n2199109795","loc":[-85.6349131,41.9477535],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109793":{"id":"n2199109793","loc":[-85.6349395,41.9477531],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109791":{"id":"n2199109791","loc":[-85.6349382,41.9477077],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109789":{"id":"n2199109789","loc":[-85.6351236,41.9477049],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109787":{"id":"n2199109787","loc":[-85.6351259,41.9477872],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109785":{"id":"n2199109785","loc":[-85.634972,41.9475992],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109783":{"id":"n2199109783","loc":[-85.6349206,41.9475997],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109770":{"id":"n2199109770","loc":[-85.6348499,41.9475461],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109768":{"id":"n2199109768","loc":[-85.6348499,41.9475084],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109765":{"id":"n2199109765","loc":[-85.6349241,41.9474569],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109763":{"id":"n2199109763","loc":[-85.634967,41.9474564],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109762":{"id":"n2199109762","loc":[-85.6350405,41.9475121],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109761":{"id":"n2199109761","loc":[-85.6350405,41.9475419],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109753":{"id":"n2199109753","loc":[-85.6342443,41.9478391],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109751":{"id":"n2199109751","loc":[-85.6342427,41.9477927],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109745":{"id":"n2199109745","loc":[-85.6342439,41.9476859],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109743":{"id":"n2199109743","loc":[-85.6342429,41.9476575],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109741":{"id":"n2199109741","loc":[-85.6344615,41.9476533],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109739":{"id":"n2199109739","loc":[-85.6344678,41.9478348],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109737":{"id":"n2199109737","loc":[-85.634416,41.9480059],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109735":{"id":"n2199109735","loc":[-85.6344145,41.9478983],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109733":{"id":"n2199109733","loc":[-85.6342749,41.9478993],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109731":{"id":"n2199109731","loc":[-85.6342753,41.9479272],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109729":{"id":"n2199109729","loc":[-85.6342498,41.9479274],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109727":{"id":"n2199109727","loc":[-85.6342505,41.9479762],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109725":{"id":"n2199109725","loc":[-85.6342743,41.947976],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109723":{"id":"n2199109723","loc":[-85.6342747,41.948007],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109721":{"id":"n2199109721","loc":[-85.6343415,41.9476355],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109719":{"id":"n2199109719","loc":[-85.6343391,41.9474973],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109717":{"id":"n2199109717","loc":[-85.6343133,41.9474798],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109715":{"id":"n2199109715","loc":[-85.6342874,41.9474737],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109709":{"id":"n2199109709","loc":[-85.6349804,41.94815],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109707":{"id":"n2199109707","loc":[-85.6348915,41.9481505],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109705":{"id":"n2199109705","loc":[-85.6348917,41.9481692],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109702":{"id":"n2199109702","loc":[-85.6348522,41.9481694],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109700":{"id":"n2199109700","loc":[-85.6348532,41.9482679],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109698":{"id":"n2199109698","loc":[-85.6348315,41.948268],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109696":{"id":"n2199109696","loc":[-85.6348318,41.9482955],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109694":{"id":"n2199109694","loc":[-85.6349653,41.9482946],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109692":{"id":"n2199109692","loc":[-85.6349656,41.9483211],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109690":{"id":"n2199109690","loc":[-85.634999,41.9483209],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109688":{"id":"n2199109688","loc":[-85.6349987,41.9482947],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109686":{"id":"n2199109686","loc":[-85.6351753,41.9482935],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109684":{"id":"n2199109684","loc":[-85.6351749,41.9482617],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109682":{"id":"n2199109682","loc":[-85.6351588,41.9482618],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109680":{"id":"n2199109680","loc":[-85.6351575,41.9481518],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109678":{"id":"n2199109678","loc":[-85.6350671,41.9481524],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109676":{"id":"n2199109676","loc":[-85.6350649,41.9479659],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109674":{"id":"n2199109674","loc":[-85.6349785,41.9479665],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109671":{"id":"n2199109671","loc":[-85.6343069,41.9483263],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109669":{"id":"n2199109669","loc":[-85.6343052,41.9482981],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109658":{"id":"n2199109658","loc":[-85.6343314,41.9480549],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109656":{"id":"n2199109656","loc":[-85.6343305,41.9480461],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109654":{"id":"n2199109654","loc":[-85.634435,41.9480468],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109652":{"id":"n2199109652","loc":[-85.6344342,41.9483746],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109650":{"id":"n2199109650","loc":[-85.6344629,41.9483727],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109648":{"id":"n2199109648","loc":[-85.6344637,41.9484561],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:49Z","tags":{}},"n2199109645":{"id":"n2199109645","loc":[-85.63443,41.9484567],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:49Z","tags":{}},"n2199109642":{"id":"n2199109642","loc":[-85.6344317,41.948505],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:49Z","tags":{}},"n185964352":{"id":"n185964352","loc":[-85.6373958,41.9489943],"version":"3","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:48:03Z","tags":{}},"n185964351":{"id":"n185964351","loc":[-85.637113,41.9486],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:21Z","tags":{}},"n2208608825":{"id":"n2208608825","loc":[-85.6354483,41.9494241],"version":"1","changeset":"15411098","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-18T17:54:40Z","tags":{}},"n2208608823":{"id":"n2208608823","loc":[-85.6360418,41.949416],"version":"1","changeset":"15411098","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-18T17:54:40Z","tags":{}},"n2208608821":{"id":"n2208608821","loc":[-85.6360458,41.9495802],"version":"1","changeset":"15411098","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-18T17:54:40Z","tags":{}},"n2208608811":{"id":"n2208608811","loc":[-85.6357458,41.9495843],"version":"1","changeset":"15411098","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-18T17:54:39Z","tags":{}},"n2208608808":{"id":"n2208608808","loc":[-85.6357508,41.9497835],"version":"1","changeset":"15411098","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-18T17:54:39Z","tags":{}},"n2208608806":{"id":"n2208608806","loc":[-85.6354573,41.9497875],"version":"1","changeset":"15411098","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-18T17:54:39Z","tags":{}},"n2208608795":{"id":"n2208608795","loc":[-85.6354595,41.9498778],"version":"1","changeset":"15411098","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-18T17:54:39Z","tags":{}},"n2199109638":{"id":"n2199109638","loc":[-85.6349605,41.949749],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:49Z","tags":{}},"n2199109636":{"id":"n2199109636","loc":[-85.6349605,41.9497639],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:49Z","tags":{}},"n2199109634":{"id":"n2199109634","loc":[-85.6349061,41.94971],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:49Z","tags":{}},"n2199109632":{"id":"n2199109632","loc":[-85.6349048,41.9496569],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:49Z","tags":{}},"n2199109630":{"id":"n2199109630","loc":[-85.6348835,41.9496571],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:49Z","tags":{}},"n2199109628":{"id":"n2199109628","loc":[-85.6348829,41.9497103],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:49Z","tags":{}},"n2199109626":{"id":"n2199109626","loc":[-85.635227,41.9497738],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:49Z","tags":{}},"n2199109624":{"id":"n2199109624","loc":[-85.6352184,41.9497787],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:49Z","tags":{}},"n2199109622":{"id":"n2199109622","loc":[-85.6351181,41.9497806],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:49Z","tags":{}},"n2199109620":{"id":"n2199109620","loc":[-85.6351181,41.9497456],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:49Z","tags":{}},"n2199109618":{"id":"n2199109618","loc":[-85.6348842,41.9497651],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:49Z","tags":{}},"n2199109616":{"id":"n2199109616","loc":[-85.6348827,41.9496238],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:49Z","tags":{}},"n2199109615":{"id":"n2199109615","loc":[-85.6351268,41.9496206],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:49Z","tags":{}},"n2199109614":{"id":"n2199109614","loc":[-85.6351261,41.9495891],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:49Z","tags":{}},"n2199109613":{"id":"n2199109613","loc":[-85.6351957,41.9495881],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:49Z","tags":{}},"n2199109612":{"id":"n2199109612","loc":[-85.6351924,41.9494515],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:49Z","tags":{}},"n2199109611":{"id":"n2199109611","loc":[-85.6353997,41.9494488],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:49Z","tags":{}},"n2199109610":{"id":"n2199109610","loc":[-85.6354074,41.9497715],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:49Z","tags":{}},"n2189015681":{"id":"n2189015681","loc":[-85.6344229,41.9509639],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:49Z","tags":{}},"n2189015677":{"id":"n2189015677","loc":[-85.634424,41.9507396],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:49Z","tags":{}},"n2138493843":{"id":"n2138493843","loc":[-85.6343935,41.9502836],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493840":{"id":"n2138493840","loc":[-85.634398,41.9506264],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n354002838":{"id":"n354002838","loc":[-85.6345197,41.9510631],"version":"2","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:18Z","tags":{}},"n2114807590":{"id":"n2114807590","loc":[-85.634511,41.9499767],"version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:15Z","tags":{}},"n185964353":{"id":"n185964353","loc":[-85.6374092,41.9498755],"version":"3","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:48:03Z","tags":{}},"n1819849180":{"id":"n1819849180","loc":[-85.6348236,41.94996],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:59Z","tags":{}},"n1819849115":{"id":"n1819849115","loc":[-85.6354372,41.9499538],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:57Z","tags":{}},"n1819848921":{"id":"n1819848921","loc":[-85.6348439,41.951064],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:50Z","tags":{}},"n1819848885":{"id":"n1819848885","loc":[-85.6354575,41.9510578],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:49Z","tags":{}},"n185984281":{"id":"n185984281","loc":[-85.638075,41.949872],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:11:55Z","tags":{}},"n2208608827":{"id":"n2208608827","loc":[-85.6339169,41.9473191],"version":"1","changeset":"15411098","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-18T17:54:40Z","tags":{}},"n2199109749":{"id":"n2199109749","loc":[-85.6342082,41.9477934],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109747":{"id":"n2199109747","loc":[-85.6342045,41.9476867],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109713":{"id":"n2199109713","loc":[-85.6342404,41.9474746],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109711":{"id":"n2199109711","loc":[-85.6342404,41.9476355],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109673":{"id":"n2199109673","loc":[-85.6340886,41.9483282],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109667":{"id":"n2199109667","loc":[-85.6342403,41.9482988],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109665":{"id":"n2199109665","loc":[-85.6342386,41.9482116],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109662":{"id":"n2199109662","loc":[-85.6340861,41.9482135],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109660":{"id":"n2199109660","loc":[-85.6340802,41.9480562],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:50Z","tags":{}},"n2199109640":{"id":"n2199109640","loc":[-85.6340928,41.9485063],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:49Z","tags":{}},"n354031366":{"id":"n354031366","loc":[-85.6341667,41.9477778],"version":"3","changeset":"3908860","user":"Geogast","uid":"51045","visible":"true","timestamp":"2010-02-18T13:28:25Z","tags":{"amenity":"place_of_worship","ele":"249","gnis:county_id":"149","gnis:created":"04/30/2008","gnis:feature_id":"2417877","gnis:state_id":"26","name":"Faith Tabernacle Church","religion":"christian"}},"n2189015686":{"id":"n2189015686","loc":[-85.6337798,41.95099],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:49Z","tags":{}},"n2189015684":{"id":"n2189015684","loc":[-85.6337794,41.9509674],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:49Z","tags":{}},"n2189015673":{"id":"n2189015673","loc":[-85.6337501,41.9507457],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:49Z","tags":{}},"n2189015669":{"id":"n2189015669","loc":[-85.6337501,41.9506974],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:49Z","tags":{}},"n2189015665":{"id":"n2189015665","loc":[-85.6339034,41.9506959],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:49Z","tags":{}},"n2189015662":{"id":"n2189015662","loc":[-85.6339015,41.950436],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:49Z","tags":{}},"n2189015658":{"id":"n2189015658","loc":[-85.6334916,41.9504376],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:49Z","tags":{}},"n2189015655":{"id":"n2189015655","loc":[-85.6334939,41.9507558],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:49Z","tags":{}},"n2189015650":{"id":"n2189015650","loc":[-85.6334543,41.950756],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:49Z","tags":{}},"n2189015649":{"id":"n2189015649","loc":[-85.633456,41.9509915],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:49Z","tags":{}},"n2138493842":{"id":"n2138493842","loc":[-85.6339937,41.9502836],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2138493841":{"id":"n2138493841","loc":[-85.6339983,41.9506281],"version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:31Z","tags":{}},"n2114807579":{"id":"n2114807579","loc":[-85.6333644,41.9510682],"version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:15Z","tags":{}},"n2114807573":{"id":"n2114807573","loc":[-85.6333557,41.9499819],"version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:15Z","tags":{}},"n354031330":{"id":"n354031330","loc":[-85.6341667,41.9497222],"version":"3","changeset":"3908860","user":"Geogast","uid":"51045","visible":"true","timestamp":"2010-02-18T13:28:24Z","tags":{"amenity":"place_of_worship","ele":"250","gnis:county_id":"149","gnis:created":"04/30/2008","gnis:feature_id":"2417879","gnis:state_id":"26","name":"Trinity Episcopal Church","religion":"christian"}},"n185960794":{"id":"n185960794","loc":[-85.633307,41.9537],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:59:24Z","tags":{}},"n185964357":{"id":"n185964357","loc":[-85.637432,41.952399],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:21Z","tags":{}},"n185964358":{"id":"n185964358","loc":[-85.637452,41.953665],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:21Z","tags":{}},"n185964359":{"id":"n185964359","loc":[-85.63746,41.954658],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:21Z","tags":{}},"n185964360":{"id":"n185964360","loc":[-85.637473,41.95592],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:21Z","tags":{}},"n185964361":{"id":"n185964361","loc":[-85.637468,41.956906],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:21Z","tags":{}},"n185964362":{"id":"n185964362","loc":[-85.637483,41.958313],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:21Z","tags":{}},"n185966957":{"id":"n185966957","loc":[-85.633361,41.957422],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:50Z","tags":{}},"n185975351":{"id":"n185975351","loc":[-85.63334,41.9559],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:06:58Z","tags":{}},"n185978784":{"id":"n185978784","loc":[-85.633311,41.954679],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:34Z","tags":{}},"n185986157":{"id":"n185986157","loc":[-85.633287,41.952426],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:48Z","tags":{}},"n185986158":{"id":"n185986158","loc":[-85.6333607,41.9582301],"version":"3","changeset":"15473186","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-24T01:52:20Z","tags":{"highway":"turning_circle"}},"w17965182":{"id":"w17965182","version":"2","changeset":"15277317","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-07T00:30:17Z","tags":{"highway":"residential","name":"W Prutzman St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Prutzman","tiger:name_direction_prefix":"W","tiger:name_type":"St","tiger:reviewed":"no","tiger:zip_left":"49093"},"nodes":["n185965289","n2189153241","n185965291"]},"w208627205":{"id":"w208627205","version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:53Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189015649","n2189015650","n2189015655","n2189015658","n2189015662","n2189015665","n2189015669","n2189015673","n2189015677","n2189015681","n2189015684","n2189015686","n2189015649"]},"w209717042":{"id":"w209717042","version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{"amenity":"place_of_worship","area":"yes","building":"yes","denomination":"presbyterian","ele":"250","gnis:county_id":"149","gnis:created":"04/30/2008","gnis:feature_id":"2417878","gnis:state_id":"26","name":"First Presbyterian Church","religion":"christian"},"nodes":["n2199109610","n2199109611","n2199109612","n2199109613","n2199109614","n2199109615","n2199109616","n2199109630","n2199109632","n2199109634","n2199109628","n2199109618","n2199109636","n2199109638","n2199109620","n2199109622","n2199109624","n2199109626","n2199109610"]},"w209717045":{"id":"w209717045","version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{"area":"yes","building":"yes"},"nodes":["n2199109711","n2199109713","n2199109715","n2199109717","n2199109719","n2199109721","n2199109711"]},"w209717047":{"id":"w209717047","version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:53Z","tags":{"area":"yes","building":"yes"},"nodes":["n2199109739","n2199109741","n2199109743","n2199109745","n2199109747","n2199109749","n2199109751","n2199109753","n2199109739"]},"w209717044":{"id":"w209717044","version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{"area":"yes","building":"yes"},"nodes":["n2199109674","n2199109676","n2199109678","n2199109680","n2199109682","n2199109684","n2199109686","n2199109688","n2199109690","n2199109692","n2199109694","n2199109696","n2199109698","n2199109700","n2199109702","n2199109705","n2199109707","n2199109709","n2199109674"]},"w210822776":{"id":"w210822776","version":"1","changeset":"15411098","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-18T17:54:40Z","tags":{"highway":"service","service":"alley","surface":"unpaved"},"nodes":["n2208608795","n2208608806","n2208608825","n2208608800","n2189153241"]},"w210822778":{"id":"w210822778","version":"1","changeset":"15411098","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-18T17:54:40Z","tags":{"highway":"service","service":"alley"},"nodes":["n2208608826","n2208608827"]},"w209717050":{"id":"w209717050","version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:53Z","tags":{"area":"yes","building":"yes"},"nodes":["n2199109787","n2199109789","n2199109791","n2199109793","n2199109795","n2199109797","n2199109799","n2199109802","n2199109804","n2199109806","n2199109787"]},"w17965097":{"id":"w17965097","version":"2","changeset":"15473186","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-24T01:52:23Z","tags":{"highway":"residential","name":"Maple Street","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Maple","tiger:name_type":"St","tiger:reviewed":"no"},"nodes":["n185964351","n185964352","n185964353","n185964355","n185964357","n185964358","n185964359","n185964360","n185964361","n185964362"]},"w17965856":{"id":"w17965856","version":"2","changeset":"15411098","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-18T17:54:40Z","tags":{"highway":"residential","name":"W Kelsey St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Kelsey","tiger:name_direction_prefix":"W","tiger:name_type":"St","tiger:reviewed":"no","tiger:zip_left":"49093"},"nodes":["n185971578","n2208608800","n185971580","n185964351"]},"w17967444":{"id":"w17967444","version":"2","changeset":"15473186","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-24T01:52:22Z","tags":{"highway":"residential","name":"East Street","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"East","tiger:name_type":"St","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185966937","n185978969","n185986155","n185985812","n185986157","n185960794","n185978784","n185975351","n185966957","n185986158"]},"w17967764":{"id":"w17967764","version":"1","changeset":"402580","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:54:14Z","tags":{"highway":"residential","name":"Rock River Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Rock River","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312338","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185984017","n185964351"]},"w170848329":{"id":"w170848329","version":"2","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:18Z","tags":{"ele":"251","gnis:county_id":"149","gnis:created":"04/30/2008","gnis:feature_id":"2418164","gnis:state_id":"26","leisure":"park","name":"LaFayette Park","source":"Bing"},"nodes":["n1819849180","n1819849115","n1819848885","n1819848921","n1819849180"]},"w17967208":{"id":"w17967208","version":"4","changeset":"15473186","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-24T01:52:24Z","tags":{"highway":"residential","name":"West Bennett Street","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Bennett","tiger:name_direction_prefix":"W","tiger:name_type":"St","tiger:reviewed":"no"},"nodes":["n185978390","n2208608795","n185984020","n185964353","n185984281"]},"w17965349":{"id":"w17965349","version":"2","changeset":"15411098","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-18T17:54:40Z","tags":{"highway":"residential","name":"E Prutzman St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Prutzman","tiger:name_direction_prefix":"E","tiger:name_type":"St","tiger:reviewed":"no","tiger:zip_left":"49093"},"nodes":["n185966937","n2208608827","n185965289"]},"w209717049":{"id":"w209717049","version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:53Z","tags":{"area":"yes","building":"yes"},"nodes":["n2199109761","n2199109762","n2199109763","n2199109765","n2199109768","n2199109770","n2199109783","n2199109785","n2199109761"]},"w203841840":{"id":"w203841840","version":"1","changeset":"14879185","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:55:32Z","tags":{"area":"yes","leisure":"playground"},"nodes":["n2138493840","n2138493841","n2138493842","n2138493843","n2138493840"]},"w209717043":{"id":"w209717043","version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{"amenity":"place_of_worship","area":"yes","building":"church","denomination":"methodist","ele":"249","gnis:county_id":"149","gnis:created":"04/30/2008","gnis:feature_id":"2417880","gnis:state_id":"26","name":"First United Methodist Church","religion":"christian"},"nodes":["n2199109640","n2199109642","n2199109645","n2199109648","n2199109650","n2199109652","n2199109654","n2199109656","n2199109658","n2199109660","n2199109662","n2199109665","n2199109667","n2199109669","n2199109671","n2199109673","n2199109640"]},"w201484341":{"id":"w201484341","version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:16Z","tags":{"amenity":"school","ele":"250","gnis:county_id":"149","gnis:created":"04/14/1980","gnis:edited":"02/22/2008","gnis:feature_id":"1624612","gnis:state_id":"26","name":"Hoppin School"},"nodes":["n354002838","n2114807579","n2114807573","n2114807590","n354002838"]},"w209717046":{"id":"w209717046","version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{"area":"yes","building":"yes"},"nodes":["n2199109723","n2199109725","n2199109727","n2199109729","n2199109731","n2199109733","n2199109735","n2199109737","n2199109723"]},"w210822777":{"id":"w210822777","version":"1","changeset":"15411098","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-18T17:54:40Z","tags":{"amenity":"parking","area":"yes"},"nodes":["n2208608806","n2208608808","n2208608811","n2208608821","n2208608823","n2208608825","n2208608806"]},"n185954965":{"id":"n185954965","loc":[-85.6191189,41.9441922],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:57Z","tags":{}},"n185954968":{"id":"n185954968","loc":[-85.6194384,41.9442405],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:58Z","tags":{}},"n185954970":{"id":"n185954970","loc":[-85.6196543,41.9443252],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:58Z","tags":{}},"n185954972":{"id":"n185954972","loc":[-85.6197862,41.9444539],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:58Z","tags":{}},"n354002931":{"id":"n354002931","loc":[-85.6198991,41.9455269],"version":"2","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:46:01Z","tags":{}},"n354030853":{"id":"n354030853","loc":[-85.6219444,41.9455556],"version":"3","changeset":"3908860","user":"Geogast","uid":"51045","visible":"true","timestamp":"2010-02-18T13:28:19Z","tags":{"amenity":"place_of_worship","ele":"246","gnis:county_id":"149","gnis:created":"04/30/2008","gnis:feature_id":"2417869","gnis:state_id":"26","name":"Grant Chapel","religion":"christian"}},"n367815963":{"id":"n367815963","loc":[-85.6202778,41.9461111],"version":"1","changeset":"871579","user":"amillar","uid":"28145","visible":"true","timestamp":"2009-03-31T07:45:44Z","tags":{"addr:state":"MI","building":"yes","ele":"247","gnis:county_name":"St. Joseph","gnis:feature_id":"2418176","gnis:import_uuid":"57871b70-0100-4405-bb30-88b2e001a944","gnis:reviewed":"no","name":"George Washington Carver Community Center","source":"USGS Geonames"}},"n185947331":{"id":"n185947331","loc":[-85.618779,41.943269],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:11Z","tags":{}},"n185947333":{"id":"n185947333","loc":[-85.618795,41.943511],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:11Z","tags":{}},"n185947336":{"id":"n185947336","loc":[-85.618711,41.94413],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:11Z","tags":{}},"n185947338":{"id":"n185947338","loc":[-85.618704,41.944189],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:11Z","tags":{}},"n185947339":{"id":"n185947339","loc":[-85.618597,41.944337],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:11Z","tags":{}},"n185947340":{"id":"n185947340","loc":[-85.618485,41.944528],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:11Z","tags":{}},"n185947343":{"id":"n185947343","loc":[-85.618442,41.944716],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:11Z","tags":{}},"n185947345":{"id":"n185947345","loc":[-85.618457,41.945107],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:11Z","tags":{}},"n185947347":{"id":"n185947347","loc":[-85.618296,41.945338],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:11Z","tags":{}},"n185947374":{"id":"n185947374","loc":[-85.616748,41.944453],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:11Z","tags":{}},"n185947375":{"id":"n185947375","loc":[-85.616813,41.944646],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:11Z","tags":{}},"n185947376":{"id":"n185947376","loc":[-85.616859,41.945196],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:12Z","tags":{}},"n185947377":{"id":"n185947377","loc":[-85.616941,41.945352],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:12Z","tags":{}},"n185947406":{"id":"n185947406","loc":[-85.618184,41.944227],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:13Z","tags":{}},"n185947409":{"id":"n185947409","loc":[-85.617911,41.943875],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:13Z","tags":{}},"n185947410":{"id":"n185947410","loc":[-85.617579,41.943682],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:13Z","tags":{}},"n185947411":{"id":"n185947411","loc":[-85.61713,41.943589],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:13Z","tags":{}},"n185947412":{"id":"n185947412","loc":[-85.616549,41.943559],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:13Z","tags":{}},"n185947414":{"id":"n185947414","loc":[-85.616482,41.943556],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:13Z","tags":{}},"n185947464":{"id":"n185947464","loc":[-85.616526,41.943788],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:14Z","tags":{}},"n185947466":{"id":"n185947466","loc":[-85.616504,41.944002],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:14Z","tags":{}},"n185948863":{"id":"n185948863","loc":[-85.619017,41.943391],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:45Z","tags":{}},"n185948865":{"id":"n185948865","loc":[-85.619059,41.943368],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:45Z","tags":{}},"n185955022":{"id":"n185955022","loc":[-85.620088,41.945571],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:56:37Z","tags":{}},"n185955025":{"id":"n185955025","loc":[-85.620051,41.945505],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:56:37Z","tags":{}},"n185955028":{"id":"n185955028","loc":[-85.62001,41.94541],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:56:37Z","tags":{}},"n185980371":{"id":"n185980371","loc":[-85.620982,41.944742],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:37Z","tags":{}},"n185980398":{"id":"n185980398","loc":[-85.621305,41.944782],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:38Z","tags":{}},"n185980401":{"id":"n185980401","loc":[-85.621174,41.944819],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:38Z","tags":{}},"n185980403":{"id":"n185980403","loc":[-85.621029,41.944871],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:38Z","tags":{}},"n185980405":{"id":"n185980405","loc":[-85.620741,41.945011],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:38Z","tags":{}},"n185980407":{"id":"n185980407","loc":[-85.620616,41.945085],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:38Z","tags":{}},"n185980409":{"id":"n185980409","loc":[-85.620506,41.945172],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:38Z","tags":{}},"n185980411":{"id":"n185980411","loc":[-85.620394,41.945273],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:38Z","tags":{}},"n185980413":{"id":"n185980413","loc":[-85.620316,41.94536],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:39Z","tags":{}},"n185980415":{"id":"n185980415","loc":[-85.620257,41.945452],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:39Z","tags":{}},"n185980417":{"id":"n185980417","loc":[-85.620212,41.945535],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:39Z","tags":{}},"n185985910":{"id":"n185985910","loc":[-85.620101,41.945811],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:41Z","tags":{}},"n185985912":{"id":"n185985912","loc":[-85.620081,41.945937],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:42Z","tags":{}},"n1475283972":{"id":"n1475283972","loc":[-85.6198991,41.9437179],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:45Z","tags":{}},"n1475283982":{"id":"n1475283982","loc":[-85.6195022,41.9433463],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:46Z","tags":{}},"n1475284007":{"id":"n1475284007","loc":[-85.6193037,41.9433383],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:47Z","tags":{}},"n1475284040":{"id":"n1475284040","loc":[-85.6197329,41.9434121],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:47Z","tags":{}},"n1475284044":{"id":"n1475284044","loc":[-85.6198756,41.9435363],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:47Z","tags":{}},"n1475284050":{"id":"n1475284050","loc":[-85.6199689,41.9432106],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:48Z","tags":{}},"n1475284053":{"id":"n1475284053","loc":[-85.6198943,41.9432921],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:48Z","tags":{}},"n185954974":{"id":"n185954974","loc":[-85.6198296,41.94473],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:58Z","tags":{}},"n185954977":{"id":"n185954977","loc":[-85.6200474,41.9447384],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:58Z","tags":{}},"n2196831365":{"id":"n2196831365","loc":[-85.6202259,41.9460883],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831366":{"id":"n2196831366","loc":[-85.6202245,41.9458642],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831367":{"id":"n2196831367","loc":[-85.6205184,41.9458631],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831368":{"id":"n2196831368","loc":[-85.6205189,41.9459437],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831369":{"id":"n2196831369","loc":[-85.6203879,41.9459441],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831370":{"id":"n2196831370","loc":[-85.6203888,41.9460878],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831371":{"id":"n2196831371","loc":[-85.6184046,41.9465663],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831372":{"id":"n2196831372","loc":[-85.6191563,41.9465618],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831373":{"id":"n2196831373","loc":[-85.6191536,41.946319],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831374":{"id":"n2196831374","loc":[-85.6187356,41.9463216],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831375":{"id":"n2196831375","loc":[-85.6187334,41.9461197],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831376":{"id":"n2196831376","loc":[-85.6193167,41.9461162],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831377":{"id":"n2196831377","loc":[-85.6193156,41.9460229],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831378":{"id":"n2196831378","loc":[-85.619622,41.946021],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831379":{"id":"n2196831379","loc":[-85.6196237,41.9461712],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831380":{"id":"n2196831380","loc":[-85.6197702,41.9461703],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831381":{"id":"n2196831381","loc":[-85.6197685,41.9460202],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831382":{"id":"n2196831382","loc":[-85.6197323,41.9460204],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831383":{"id":"n2196831383","loc":[-85.6197305,41.9458563],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831384":{"id":"n2196831384","loc":[-85.6196165,41.945857],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831385":{"id":"n2196831385","loc":[-85.6196156,41.9457764],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831386":{"id":"n2196831386","loc":[-85.6194472,41.9457775],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831387":{"id":"n2196831387","loc":[-85.6194151,41.9457777],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831388":{"id":"n2196831388","loc":[-85.6183779,41.9457883],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831389":{"id":"n2196831389","loc":[-85.6183842,41.9461317],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831390":{"id":"n2196831390","loc":[-85.6185026,41.9461304],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831391":{"id":"n2196831391","loc":[-85.6185061,41.9463194],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831392":{"id":"n2196831392","loc":[-85.6184001,41.9463205],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831393":{"id":"n2196831393","loc":[-85.6182482,41.9464163],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831394":{"id":"n2196831394","loc":[-85.6182467,41.9463193],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831395":{"id":"n2196831395","loc":[-85.6180389,41.946321],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n2196831397":{"id":"n2196831397","loc":[-85.6180404,41.946418],"version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:40Z","tags":{}},"n185947303":{"id":"n185947303","loc":[-85.611074,41.943389],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:10Z","tags":{}},"n185947304":{"id":"n185947304","loc":[-85.611332,41.943267],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:10Z","tags":{}},"n185947305":{"id":"n185947305","loc":[-85.611635,41.943218],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:10Z","tags":{}},"n185947306":{"id":"n185947306","loc":[-85.612762,41.943311],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:10Z","tags":{}},"n185947308":{"id":"n185947308","loc":[-85.613027,41.943327],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:10Z","tags":{}},"n185947310":{"id":"n185947310","loc":[-85.615377,41.942996],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:10Z","tags":{}},"n185947312":{"id":"n185947312","loc":[-85.615701,41.943007],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:10Z","tags":{}},"n185947314":{"id":"n185947314","loc":[-85.61604,41.943067],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:10Z","tags":{}},"n185947315":{"id":"n185947315","loc":[-85.61626,41.943083],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:10Z","tags":{}},"n185947316":{"id":"n185947316","loc":[-85.616507,41.943048],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:10Z","tags":{}},"n185947319":{"id":"n185947319","loc":[-85.616702,41.94299],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:10Z","tags":{}},"n185947321":{"id":"n185947321","loc":[-85.617078,41.942918],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:11Z","tags":{}},"n185947322":{"id":"n185947322","loc":[-85.617366,41.942973],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:11Z","tags":{}},"n185947323":{"id":"n185947323","loc":[-85.617601,41.943033],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:11Z","tags":{}},"n185947325":{"id":"n185947325","loc":[-85.617799,41.943027],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:11Z","tags":{}},"n185947327":{"id":"n185947327","loc":[-85.618264,41.942961],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:11Z","tags":{}},"n185947328":{"id":"n185947328","loc":[-85.618508,41.942972],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:11Z","tags":{}},"n185947329":{"id":"n185947329","loc":[-85.618707,41.943076],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:11Z","tags":{}},"n185947361":{"id":"n185947361","loc":[-85.615356,41.944922],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:11Z","tags":{}},"n185947363":{"id":"n185947363","loc":[-85.61536,41.944893],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:11Z","tags":{}},"n185947365":{"id":"n185947365","loc":[-85.615406,41.944547],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:11Z","tags":{}},"n185947367":{"id":"n185947367","loc":[-85.61548,41.944351],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:11Z","tags":{}},"n185947369":{"id":"n185947369","loc":[-85.615805,41.94419],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:11Z","tags":{}},"n185947371":{"id":"n185947371","loc":[-85.616166,41.944156],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:11Z","tags":{}},"n185947373":{"id":"n185947373","loc":[-85.616411,41.944197],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:11Z","tags":{}},"n185947416":{"id":"n185947416","loc":[-85.616335,41.94343],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:13Z","tags":{}},"n185947417":{"id":"n185947417","loc":[-85.616069,41.943293],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:13Z","tags":{}},"n185947419":{"id":"n185947419","loc":[-85.615803,41.943249],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:13Z","tags":{}},"n185947420":{"id":"n185947420","loc":[-85.615524,41.943342],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:13Z","tags":{}},"n185947421":{"id":"n185947421","loc":[-85.615311,41.94353],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:13Z","tags":{}},"n185947422":{"id":"n185947422","loc":[-85.614338,41.943558],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:13Z","tags":{}},"n185947423":{"id":"n185947423","loc":[-85.61422,41.94369],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:13Z","tags":{}},"n185947425":{"id":"n185947425","loc":[-85.614221,41.944224],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:13Z","tags":{}},"n185947427":{"id":"n185947427","loc":[-85.614198,41.944888],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:13Z","tags":{}},"n185947429":{"id":"n185947429","loc":[-85.614221,41.945439],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:13Z","tags":{}},"n185947468":{"id":"n185947468","loc":[-85.615908,41.944756],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:14Z","tags":{}},"n185947470":{"id":"n185947470","loc":[-85.615871,41.944888],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:14Z","tags":{}},"n185947472":{"id":"n185947472","loc":[-85.615878,41.94507],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:14Z","tags":{}},"n185955153":{"id":"n185955153","loc":[-85.620087,41.947701],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:56:39Z","tags":{}},"n185960690":{"id":"n185960690","loc":[-85.620141,41.951901],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:59:21Z","tags":{}},"n185978817":{"id":"n185978817","loc":[-85.617193,41.954706],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:35Z","tags":{}},"n185985916":{"id":"n185985916","loc":[-85.620088,41.94758],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:42Z","tags":{}},"n185985918":{"id":"n185985918","loc":[-85.620133,41.951538],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:42Z","tags":{}},"n185985919":{"id":"n185985919","loc":[-85.62013,41.952104],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:42Z","tags":{}},"n185985920":{"id":"n185985920","loc":[-85.620104,41.952305],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:42Z","tags":{}},"n185985921":{"id":"n185985921","loc":[-85.620062,41.952499],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:42Z","tags":{}},"n185985922":{"id":"n185985922","loc":[-85.619993,41.952702],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:42Z","tags":{}},"n185985925":{"id":"n185985925","loc":[-85.619879,41.952986],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:42Z","tags":{}},"n185985927":{"id":"n185985927","loc":[-85.619689,41.95329],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:42Z","tags":{}},"n185985928":{"id":"n185985928","loc":[-85.619508,41.953521],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:42Z","tags":{}},"n185985929":{"id":"n185985929","loc":[-85.619286,41.953728],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:42Z","tags":{}},"n185985930":{"id":"n185985930","loc":[-85.618925,41.954007],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:42Z","tags":{}},"n185985931":{"id":"n185985931","loc":[-85.618638,41.954189],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:42Z","tags":{}},"n185985932":{"id":"n185985932","loc":[-85.61831,41.954358],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:42Z","tags":{}},"n185985934":{"id":"n185985934","loc":[-85.618015,41.954485],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:43Z","tags":{}},"n185985936":{"id":"n185985936","loc":[-85.617606,41.954611],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:12:43Z","tags":{}},"n1475283975":{"id":"n1475283975","loc":[-85.6150935,41.9434118],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:46Z","tags":{}},"n1475283979":{"id":"n1475283979","loc":[-85.6193367,41.9430252],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:46Z","tags":{}},"n1475283989":{"id":"n1475283989","loc":[-85.6104771,41.9455269],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:46Z","tags":{}},"n1475283990":{"id":"n1475283990","loc":[-85.6104771,41.9437179],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:46Z","tags":{}},"n1475283994":{"id":"n1475283994","loc":[-85.6198042,41.9429763],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:46Z","tags":{}},"n1475283998":{"id":"n1475283998","loc":[-85.6192101,41.9426716],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:46Z","tags":{}},"n1475284000":{"id":"n1475284000","loc":[-85.6198622,41.942836],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:46Z","tags":{}},"n1475284002":{"id":"n1475284002","loc":[-85.6163262,41.9427688],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:46Z","tags":{}},"n1475284006":{"id":"n1475284006","loc":[-85.6179527,41.9429168],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:47Z","tags":{}},"n1475284029":{"id":"n1475284029","loc":[-85.6197195,41.9427278],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:47Z","tags":{}},"n1475284038":{"id":"n1475284038","loc":[-85.6194405,41.9427837],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:47Z","tags":{}},"n1475284052":{"id":"n1475284052","loc":[-85.6153225,41.942841],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:48Z","tags":{}},"n1475284055":{"id":"n1475284055","loc":[-85.6129233,41.9437179],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:48Z","tags":{}},"n2139966627":{"id":"n2139966627","loc":[-85.61958,41.9427558],"version":"1","changeset":"14894526","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:32:18Z","tags":{}},"w17966773":{"id":"w17966773","version":"3","changeset":"2558583","user":"elliskev","uid":"163338","visible":"true","timestamp":"2009-09-21T16:12:43Z","tags":{"highway":"secondary","name":"E Michigan Ave","ref":"M 60","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Michigan","tiger:name_direction_prefix":"E","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313712","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185980372","n185980398","n185980401","n185980403","n185980405","n185980407","n185980409","n185980411","n185980413","n185980415","n185980417","n185955019"]},"w17964043":{"id":"w17964043","version":"3","changeset":"14894526","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:32:19Z","tags":{"highway":"residential","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15326065:15326068","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185955019","n185955022","n185955025","n185955028","n185954977","n185971477","n1475284050","n1475284000","n1475284029","n2139966627","n1475284038"]},"w17962834":{"id":"w17962834","version":"2","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:46:15Z","tags":{"highway":"service","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313719:15313728:15331618","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185947316","n185947414","n185947464","n185947466","n185947373","n185947468","n185947470","n185947472","n185947474"]},"w209470310":{"id":"w209470310","version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:41Z","tags":{"area":"yes","building":"yes"},"nodes":["n2196831393","n2196831394","n2196831395","n2196831397","n2196831393"]},"w17963058":{"id":"w17963058","version":"2","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:46:05Z","tags":{"highway":"service","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15326058:15326066:15326067","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185947333","n185948863","n185948865","n1475284007","n1475283982","n1475284040","n1475284044"]},"w17962823":{"id":"w17962823","version":"2","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:46:14Z","tags":{"highway":"service","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313714:15313704:15313720:15313721","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185947359","n185947361","n185947363","n185947365","n185947367","n185947369","n185947371","n185947373","n185947374","n185947375","n185947376","n185947377","n185947378"]},"w17962821":{"id":"w17962821","version":"2","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:46:15Z","tags":{"highway":"service","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313713:15313734:15313731:15313735:15313737:15313723","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185947303","n185947304","n185947305","n185947306","n185947308","n185947310","n185947312","n185947314","n185947315","n185947316","n185947319","n185947321","n185947322","n185947323","n185947325","n185947327","n185947328","n185947329","n185947331","n185947333","n185947336","n185947338","n185947339","n185947340","n185947343","n185947345","n185947347","n185947349"]},"w134150798":{"id":"w134150798","version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:45:52Z","tags":{"amenity":"grave_yard","ele":"249","gnis:county_id":"149","gnis:created":"04/14/1980","gnis:feature_id":"1624862","gnis:state_id":"26","name":"Riverside Cemetery"},"nodes":["n354002931","n1475283972","n1475284053","n1475283994","n1475283979","n1475283998","n1475284006","n1475284002","n1475284052","n1475283975","n1475284055","n1475283990","n1475283989","n354002931"]},"w17964040":{"id":"w17964040","version":"2","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:46:02Z","tags":{"highway":"service","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15326063:15326064","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185947336","n185954965","n185954968","n185954970","n185954972","n185954974","n185954977"]},"w209470308":{"id":"w209470308","version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:41Z","tags":{"area":"yes","building":"yes"},"nodes":["n2196831365","n2196831366","n2196831367","n2196831368","n2196831369","n2196831370","n2196831365"]},"w17962828":{"id":"w17962828","version":"2","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:46:14Z","tags":{"highway":"service","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313715:15313706:15328746:15313727:15313729","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185947340","n185947406","n185947409","n185947410","n185947411","n185947412","n185947414","n185947416","n185947417","n185947419","n185947420","n185947421","n185947422","n185947423","n185947425","n185947427","n185947429"]},"w209470309":{"id":"w209470309","version":"1","changeset":"15335510","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-12T03:10:41Z","tags":{"area":"yes","building":"yes"},"nodes":["n2196831371","n2196831372","n2196831373","n2196831374","n2196831375","n2196831376","n2196831377","n2196831378","n2196831379","n2196831380","n2196831381","n2196831382","n2196831383","n2196831384","n2196831385","n2196831386","n2196831387","n2196831388","n2196831389","n2196831390","n2196831391","n2196831392","n2196831371"]},"w17967415":{"id":"w17967415","version":"3","changeset":"2558583","user":"elliskev","uid":"163338","visible":"true","timestamp":"2009-09-21T16:12:41Z","tags":{"highway":"secondary","name":"Jefferson St","name_1":"State Highway 60","ref":"M 60","tiger:cfcc":"A31","tiger:county":"St. Joseph, MI","tiger:name_base":"Jefferson","tiger:name_base_1":"State Highway 60","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313637:15313662:15313657:15328403","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093"},"nodes":["n185955019","n185985910","n185985912","n185985914","n185961367","n185985916","n185955153","n185965105","n185974697","n185955120","n185985918","n185960690","n185985919","n185985920","n185985921","n185985922","n185985925","n185985927","n185985928","n185985929","n185985930","n185985931","n185985932","n185985934","n185985936","n185978817"]},"w17966772":{"id":"w17966772","version":"4","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:46:07Z","tags":{"highway":"unclassified","name":"E Michigan Ave","name_1":"State Highway 60","tiger:cfcc":"A31","tiger:county":"St. Joseph, MI","tiger:name_base":"Michigan","tiger:name_base_1":"State Highway 60","tiger:name_direction_prefix":"E","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313710:15313711:15314052:15312385:15312378","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185954977","n185980371","n185980372"]},"n185958500":{"id":"n185958500","loc":[-85.621591,41.941075],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:27Z","tags":{}},"n185963110":{"id":"n185963110","loc":[-85.6204416,41.9408882],"version":"3","changeset":"15379124","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-15T23:38:37Z","tags":{}},"n2139966628":{"id":"n2139966628","loc":[-85.6196431,41.9426467],"version":"1","changeset":"14894526","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:32:18Z","tags":{"leisure":"fishing"}},"n2139966630":{"id":"n2139966630","loc":[-85.6199354,41.9429616],"version":"1","changeset":"14894526","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:32:18Z","tags":{}},"n2199127051":{"id":"n2199127051","loc":[-85.6170556,41.939696],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:19Z","tags":{}},"n2199127052":{"id":"n2199127052","loc":[-85.6170536,41.9392909],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:19Z","tags":{}},"n2199127053":{"id":"n2199127053","loc":[-85.6172067,41.9392905],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:19Z","tags":{}},"n2199127054":{"id":"n2199127054","loc":[-85.6172061,41.9391853],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:19Z","tags":{}},"n2199127055":{"id":"n2199127055","loc":[-85.6171481,41.9391854],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:19Z","tags":{}},"n2199127060":{"id":"n2199127060","loc":[-85.6167389,41.9392896],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127061":{"id":"n2199127061","loc":[-85.6168728,41.9392892],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127062":{"id":"n2199127062","loc":[-85.6168747,41.9396965],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127071":{"id":"n2199127071","loc":[-85.620196,41.9399446],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127072":{"id":"n2199127072","loc":[-85.620193,41.9397316],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127073":{"id":"n2199127073","loc":[-85.6200381,41.9397328],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127074":{"id":"n2199127074","loc":[-85.6200412,41.9399458],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127075":{"id":"n2199127075","loc":[-85.6203606,41.9399939],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127076":{"id":"n2199127076","loc":[-85.6205527,41.9399922],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127077":{"id":"n2199127077","loc":[-85.6205482,41.9397115],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127078":{"id":"n2199127078","loc":[-85.6204132,41.9397124],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127079":{"id":"n2199127079","loc":[-85.6204144,41.9396341],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127080":{"id":"n2199127080","loc":[-85.6205699,41.9396324],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127081":{"id":"n2199127081","loc":[-85.6205722,41.939498],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127082":{"id":"n2199127082","loc":[-85.6204064,41.9394997],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127083":{"id":"n2199127083","loc":[-85.6204087,41.939561],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127084":{"id":"n2199127084","loc":[-85.6203103,41.9395618],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127085":{"id":"n2199127085","loc":[-85.620308,41.9396069],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127086":{"id":"n2199127086","loc":[-85.6200347,41.9396086],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127087":{"id":"n2199127087","loc":[-85.6200382,41.9397141],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127088":{"id":"n2199127088","loc":[-85.6202257,41.9397149],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127089":{"id":"n2199127089","loc":[-85.6202269,41.9399182],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127090":{"id":"n2199127090","loc":[-85.6203595,41.9399199],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127091":{"id":"n2199127091","loc":[-85.6212335,41.939688],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127092":{"id":"n2199127092","loc":[-85.6212328,41.939595],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127093":{"id":"n2199127093","loc":[-85.6208807,41.9395966],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127094":{"id":"n2199127094","loc":[-85.6208815,41.9396896],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127095":{"id":"n2199127095","loc":[-85.6208676,41.9396872],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127096":{"id":"n2199127096","loc":[-85.6208583,41.9393539],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127097":{"id":"n2199127097","loc":[-85.6207006,41.9393563],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n2199127098":{"id":"n2199127098","loc":[-85.6207099,41.9396896],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:20Z","tags":{}},"n185967054":{"id":"n185967054","loc":[-85.6173384,41.9356126],"version":"3","changeset":"15379027","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-15T23:24:18Z","tags":{}},"n185967063":{"id":"n185967063","loc":[-85.617371,41.936243],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:53Z","tags":{}},"n185967065":{"id":"n185967065","loc":[-85.617337,41.936299],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:53Z","tags":{}},"n185967068":{"id":"n185967068","loc":[-85.617321,41.936373],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:53Z","tags":{}},"n185967070":{"id":"n185967070","loc":[-85.6173562,41.9366969],"version":"3","changeset":"15379027","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-15T23:24:18Z","tags":{}},"n185967074":{"id":"n185967074","loc":[-85.6173635,41.9377414],"version":"3","changeset":"15379027","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-15T23:24:18Z","tags":{}},"n185967075":{"id":"n185967075","loc":[-85.6173696,41.9381886],"version":"3","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:29:58Z","tags":{}},"n185967076":{"id":"n185967076","loc":[-85.617372,41.938535],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:54Z","tags":{}},"n2199127056":{"id":"n2199127056","loc":[-85.617147,41.9389616],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:19Z","tags":{}},"n2199127057":{"id":"n2199127057","loc":[-85.6172136,41.9389614],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:19Z","tags":{}},"n2199127058":{"id":"n2199127058","loc":[-85.6172123,41.9386909],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:19Z","tags":{}},"n2199127059":{"id":"n2199127059","loc":[-85.616736,41.9386922],"version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:19Z","tags":{}},"n2203921041":{"id":"n2203921041","loc":[-85.6173018,41.9346369],"version":"1","changeset":"15379027","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-15T23:24:18Z","tags":{}},"w203983952":{"id":"w203983952","version":"1","changeset":"14894526","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:32:18Z","tags":{"highway":"service"},"nodes":["n2139966627","n1819800319"]},"w209718301":{"id":"w209718301","version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:21Z","tags":{"area":"yes","building":"yes"},"nodes":["n2199127051","n2199127052","n2199127053","n2199127054","n2199127055","n2199127056","n2199127057","n2199127058","n2199127059","n2199127060","n2199127061","n2199127062","n2199127051"]},"w209718304":{"id":"w209718304","version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:21Z","tags":{"area":"yes","building":"yes"},"nodes":["n2199127071","n2199127072","n2199127073","n2199127074","n2199127071"]},"w17964961":{"id":"w17964961","version":"2","changeset":"15379124","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-15T23:38:37Z","tags":{"highway":"residential","name":"Whipple St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Whipple","tiger:name_type":"St","tiger:reviewed":"no","tiger:zip_left":"49093"},"nodes":["n185963099","n185963110"]},"w17964489":{"id":"w17964489","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:29:56Z","tags":{"highway":"residential","name":"Jackson St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Jackson","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15314430","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185958498","n185958500"]},"w203983953":{"id":"w203983953","version":"1","changeset":"14894526","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T11:32:18Z","tags":{"area":"yes","leisure":"park","name":"Marina Park","website":"http://www.threeriversmi.us/?page_id=53"},"nodes":["n1475283994","n1475283979","n1475283998","n2139966629","n2139966625","n1819800319","n2139966623","n2139966622","n2139966621","n2139966630","n1475283994"]},"w17965366":{"id":"w17965366","version":"2","changeset":"15379027","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-15T23:24:18Z","tags":{"highway":"residential","name":"14th St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"14th","tiger:name_type":"St","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n2203921041","n185967054","n185967063","n185967065","n185967068","n185967070","n185967074","n185967075","n185967076","n185967077"]},"w209718306":{"id":"w209718306","version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:21Z","tags":{"area":"yes","building":"yes"},"nodes":["n2199127091","n2199127092","n2199127093","n2199127094","n2199127091"]},"w209718307":{"id":"w209718307","version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:21Z","tags":{"area":"yes","building":"yes"},"nodes":["n2199127095","n2199127096","n2199127097","n2199127098","n2199127095"]},"w209718305":{"id":"w209718305","version":"1","changeset":"15347669","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:38:21Z","tags":{"area":"yes","building":"yes"},"nodes":["n2199127075","n2199127076","n2199127077","n2199127078","n2199127079","n2199127080","n2199127081","n2199127082","n2199127083","n2199127084","n2199127085","n2199127086","n2199127087","n2199127088","n2199127089","n2199127090","n2199127075"]},"n185960199":{"id":"n185960199","loc":[-85.62965,41.95469],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:59:08Z","tags":{}},"n185980737":{"id":"n185980737","loc":[-85.629083,41.953725],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:48Z","tags":{}},"n2114807561":{"id":"n2114807561","loc":[-85.6297681,41.9524688],"version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:15Z","tags":{}},"n2114807597":{"id":"n2114807597","loc":[-85.6296517,41.952563],"version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:15Z","tags":{}},"n185960197":{"id":"n185960197","loc":[-85.629676,41.9537314],"version":"3","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:17Z","tags":{}},"n185978791":{"id":"n185978791","loc":[-85.6244542,41.9547066],"version":"3","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:17Z","tags":{}},"w17967573":{"id":"w17967573","version":"2","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:20Z","tags":{"highway":"residential","name":"E Wheeler St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Wheeler","tiger:name_direction_prefix":"E","tiger:name_type":"St","tiger:reviewed":"no"},"nodes":["n185960195","n2114807561","n185968102","n185967430","n185986157","n185978392"]},"w17966553":{"id":"w17966553","version":"5","changeset":"15473186","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-24T01:52:22Z","tags":{"highway":"residential","name":"East Hoffman Street","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Hoffman","tiger:name_direction_prefix":"E","tiger:name_type":"St","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185971631","n185978784","n185967432","n185968106","n185960199","n185978787","n185978790","n185978791"]},"w17966787":{"id":"w17966787","version":"2","changeset":"15473186","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-24T01:52:23Z","tags":{"highway":"residential","name":"East Cushman Street","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Cushman","tiger:name_direction_prefix":"E","tiger:name_type":"St","tiger:reviewed":"no"},"nodes":["n185980735","n185980737","n185960197","n185968104","n185960792"]},"w17964723":{"id":"w17964723","version":"2","changeset":"15473186","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-24T01:52:22Z","tags":{"highway":"residential","name":"Cushman Street","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Cushman","tiger:name_type":"St","tiger:reviewed":"no"},"nodes":["n185960792","n185960794","n185960796"]},"w17964654":{"id":"w17964654","version":"3","changeset":"15473186","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-24T01:52:22Z","tags":{"highway":"residential","name":"Pine Street","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Pine","tiger:name_type":"St","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185960195","n2114807597","n185960197","n185960199"]},"n1819848862":{"id":"n1819848862","loc":[-85.6346087,41.9545845],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:49Z","tags":{}},"n1819848935":{"id":"n1819848935","loc":[-85.6345948,41.9537717],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:51Z","tags":{}},"n1819848973":{"id":"n1819848973","loc":[-85.6334247,41.9537827],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n1819848997":{"id":"n1819848997","loc":[-85.6334386,41.9545956],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:53Z","tags":{}},"n2189015861":{"id":"n2189015861","loc":[-85.6375906,41.954836],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015865":{"id":"n2189015865","loc":[-85.6383307,41.9548291],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015867":{"id":"n2189015867","loc":[-85.6383337,41.9550072],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015868":{"id":"n2189015868","loc":[-85.6380986,41.9550094],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015869":{"id":"n2189015869","loc":[-85.6381005,41.9551226],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2199109808":{"id":"n2199109808","loc":[-85.6372702,41.9522894],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109810":{"id":"n2199109810","loc":[-85.6372677,41.9521583],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109812":{"id":"n2199109812","loc":[-85.6369505,41.9521617],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109814":{"id":"n2199109814","loc":[-85.636953,41.9522927],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n185952156":{"id":"n185952156","loc":[-85.640983,41.9546557],"version":"3","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:48:03Z","tags":{}},"n185953423":{"id":"n185953423","loc":[-85.641871,41.954652],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:55:56Z","tags":{}},"n185971637":{"id":"n185971637","loc":[-85.641583,41.95465],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:06Z","tags":{}},"n185971639":{"id":"n185971639","loc":[-85.6421344,41.9546444],"version":"3","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:48:03Z","tags":{}},"n185971642":{"id":"n185971642","loc":[-85.6428264,41.9545612],"version":"3","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:48:03Z","tags":{}},"n185971648":{"id":"n185971648","loc":[-85.6436023,41.9544262],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:55Z","tags":{}},"n185975066":{"id":"n185975066","loc":[-85.640532,41.953638],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:06:49Z","tags":{}},"n185975067":{"id":"n185975067","loc":[-85.64079,41.953638],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:06:49Z","tags":{}},"n185982166":{"id":"n185982166","loc":[-85.6399012,41.9523817],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:55Z","tags":{}},"n2189015858":{"id":"n2189015858","loc":[-85.6376104,41.9560138],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015870":{"id":"n2189015870","loc":[-85.6386794,41.9551172],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015871":{"id":"n2189015871","loc":[-85.6386817,41.955256],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015873":{"id":"n2189015873","loc":[-85.6385437,41.9552573],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015876":{"id":"n2189015876","loc":[-85.638555,41.9559278],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015879":{"id":"n2189015879","loc":[-85.6384954,41.9559283],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015882":{"id":"n2189015882","loc":[-85.6384965,41.9559935],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015885":{"id":"n2189015885","loc":[-85.6383533,41.9559949],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015888":{"id":"n2189015888","loc":[-85.638351,41.9558607],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015891":{"id":"n2189015891","loc":[-85.6382178,41.9558619],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015894":{"id":"n2189015894","loc":[-85.6382203,41.956008],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"w208627223":{"id":"w208627223","version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:53Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189015858","n2189015861","n2189015865","n2189015867","n2189015868","n2189015869","n2189015870","n2189015871","n2189015873","n2189015876","n2189015879","n2189015882","n2189015885","n2189015888","n2189015891","n2189015894","n2189015858"]},"w170848328":{"id":"w170848328","version":"2","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:18Z","tags":{"ele":"250","gnis:county_id":"149","gnis:created":"04/14/1980","gnis:feature_id":"1624408","gnis:state_id":"26","leisure":"park","name":"Bowman Park","source":"Bing"},"nodes":["n1819848935","n1819848973","n1819848997","n1819848862","n1819848935"]},"w17965866":{"id":"w17965866","version":"3","changeset":"15473186","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-24T01:52:23Z","tags":{"highway":"residential","name":"West Hoffman Street","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Hoffman","tiger:name_direction_prefix":"W","tiger:name_type":"St","tiger:reviewed":"no"},"nodes":["n185971631","n185971632","n185964359","n185965025","n1475293264","n185952156","n185971637","n185953423","n185971639","n185971642","n185971648"]},"w209717051":{"id":"w209717051","version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:53Z","tags":{"amenity":"place_of_worship","area":"yes","building":"yes","denomination":"baptist","ele":"251","gnis:county_id":"149","gnis:created":"04/30/2008","gnis:feature_id":"2417886","gnis:state_id":"26","name":"Calvary Missionary Baptist Church","religion":"christian"},"nodes":["n2199109808","n2199109810","n2199109812","n2199109814","n2199109808"]},"w17966172":{"id":"w17966172","version":"3","changeset":"15473186","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-24T01:52:23Z","tags":{"highway":"residential","name":"West Cushman Street","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Cushman","tiger:name_direction_prefix":"W","tiger:name_type":"St","tiger:reviewed":"no"},"nodes":["n185960796","n185975064","n185964358","n185965023","n1475293222","n185975066","n185975067"]},"w17966975":{"id":"w17966975","version":"2","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:55:06Z","tags":{"highway":"residential","name":"W Wheeler St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Wheeler","tiger:name_direction_prefix":"W","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312250:15312254","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185978392","n185982163","n185964357","n185965021","n1475293261","n185982166"]},"n185960684":{"id":"n185960684","loc":[-85.622687,41.951885],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:59:21Z","tags":{}},"n185960686":{"id":"n185960686","loc":[-85.622492,41.951901],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:59:21Z","tags":{}},"n185978795":{"id":"n185978795","loc":[-85.6240991,41.954708],"version":"3","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:17Z","tags":{}},"n185978803":{"id":"n185978803","loc":[-85.623348,41.954547],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:34Z","tags":{}},"n185978806":{"id":"n185978806","loc":[-85.623123,41.954502],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:34Z","tags":{}},"n185978808":{"id":"n185978808","loc":[-85.622923,41.954469],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:34Z","tags":{}},"n185978810":{"id":"n185978810","loc":[-85.622787,41.954457],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:35Z","tags":{}},"n185978811":{"id":"n185978811","loc":[-85.622612,41.954458],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:35Z","tags":{}},"n185978813":{"id":"n185978813","loc":[-85.622368,41.954472],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:35Z","tags":{}},"n1819790545":{"id":"n1819790545","loc":[-85.6240295,41.9548949],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:53Z","tags":{}},"n1819790621":{"id":"n1819790621","loc":[-85.6235789,41.954855],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:55Z","tags":{}},"n1819790664":{"id":"n1819790664","loc":[-85.6238363,41.9549507],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790683":{"id":"n1819790683","loc":[-85.6224727,41.9545921],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:57Z","tags":{}},"n1819790730":{"id":"n1819790730","loc":[-85.6227527,41.9545795],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:58Z","tags":{}},"n1819790740":{"id":"n1819790740","loc":[-85.6240402,41.9550784],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:58Z","tags":{}},"n1819790831":{"id":"n1819790831","loc":[-85.624126,41.9549986],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:00Z","tags":{}},"n1819790861":{"id":"n1819790861","loc":[-85.6231712,41.9546872],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:01Z","tags":{}},"n1819790887":{"id":"n1819790887","loc":[-85.6242762,41.955206],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:01Z","tags":{}},"n2168544739":{"id":"n2168544739","loc":[-85.6249102,41.952801],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n2168544740":{"id":"n2168544740","loc":[-85.6251859,41.9527564],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n2168544741":{"id":"n2168544741","loc":[-85.6255515,41.9527921],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n2168544742":{"id":"n2168544742","loc":[-85.626001,41.9529481],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n2168544743":{"id":"n2168544743","loc":[-85.6265284,41.9529838],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n2168544744":{"id":"n2168544744","loc":[-85.626942,41.9528857],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n2168544745":{"id":"n2168544745","loc":[-85.6270918,41.9526851],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n2168544746":{"id":"n2168544746","loc":[-85.6272117,41.95244],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n2168544747":{"id":"n2168544747","loc":[-85.6271578,41.952226],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n2168544748":{"id":"n2168544748","loc":[-85.6270019,41.9519719],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n2168544749":{"id":"n2168544749","loc":[-85.6268221,41.9518382],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n2168544750":{"id":"n2168544750","loc":[-85.6265284,41.951807],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n2168544751":{"id":"n2168544751","loc":[-85.6256534,41.9518516],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n2168544752":{"id":"n2168544752","loc":[-85.6253477,41.9518338],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n2168544753":{"id":"n2168544753","loc":[-85.6251139,41.9517669],"version":"1","changeset":"15132216","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-23T08:37:01Z","tags":{}},"n185955747":{"id":"n185955747","loc":[-85.620674,41.954709],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:56:55Z","tags":{}},"n185960688":{"id":"n185960688","loc":[-85.621032,41.951913],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:59:21Z","tags":{}},"n185972054":{"id":"n185972054","loc":[-85.6186728,41.9547335],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:04Z","tags":{}},"n185978814":{"id":"n185978814","loc":[-85.6201708,41.9547403],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:05Z","tags":{}},"n1819790532":{"id":"n1819790532","loc":[-85.6244908,41.9555731],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:53Z","tags":{}},"n1819790536":{"id":"n1819790536","loc":[-85.6217925,41.9583135],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:53Z","tags":{}},"n1819790538":{"id":"n1819790538","loc":[-85.6233954,41.9600014],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:53Z","tags":{}},"n1819790539":{"id":"n1819790539","loc":[-85.6204611,41.9562117],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:53Z","tags":{}},"n1819790546":{"id":"n1819790546","loc":[-85.6210898,41.9567657],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:53Z","tags":{}},"n1819790548":{"id":"n1819790548","loc":[-85.6202465,41.9562237],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:53Z","tags":{}},"n1819790550":{"id":"n1819790550","loc":[-85.6250165,41.9560677],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:53Z","tags":{}},"n1819790551":{"id":"n1819790551","loc":[-85.6227946,41.9597023],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:53Z","tags":{}},"n1819790553":{"id":"n1819790553","loc":[-85.6215726,41.9584571],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:53Z","tags":{}},"n1819790556":{"id":"n1819790556","loc":[-85.6196306,41.9573002],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:53Z","tags":{}},"n1819790557":{"id":"n1819790557","loc":[-85.6209503,41.9563109],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:53Z","tags":{}},"n1819790558":{"id":"n1819790558","loc":[-85.6196939,41.9574085],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790561":{"id":"n1819790561","loc":[-85.621079,41.957751],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790562":{"id":"n1819790562","loc":[-85.6224255,41.9611417],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790565":{"id":"n1819790565","loc":[-85.6232506,41.9604841],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790566":{"id":"n1819790566","loc":[-85.6190835,41.9562909],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790567":{"id":"n1819790567","loc":[-85.622227,41.9593028],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790569":{"id":"n1819790569","loc":[-85.620976,41.9591039],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790571":{"id":"n1819790571","loc":[-85.6212078,41.9565303],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790572":{"id":"n1819790572","loc":[-85.6235306,41.9595102],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790581":{"id":"n1819790581","loc":[-85.6235563,41.9579351],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790584":{"id":"n1819790584","loc":[-85.6230371,41.9574598],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790586":{"id":"n1819790586","loc":[-85.6211748,41.9564272],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790588":{"id":"n1819790588","loc":[-85.6226508,41.9601086],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790591":{"id":"n1819790591","loc":[-85.6218032,41.9607468],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790593":{"id":"n1819790593","loc":[-85.6207915,41.9618735],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790596":{"id":"n1819790596","loc":[-85.6252955,41.9567858],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790598":{"id":"n1819790598","loc":[-85.6196618,41.9568939],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790600":{"id":"n1819790600","loc":[-85.6224416,41.9587084],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790602":{"id":"n1819790602","loc":[-85.6217442,41.9558641],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790603":{"id":"n1819790603","loc":[-85.6213355,41.9592116],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790604":{"id":"n1819790604","loc":[-85.622801,41.9573042],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790608":{"id":"n1819790608","loc":[-85.6199729,41.9574325],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:55Z","tags":{}},"n1819790610":{"id":"n1819790610","loc":[-85.6195555,41.9557165],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:55Z","tags":{}},"n1819790611":{"id":"n1819790611","loc":[-85.622978,41.9586007],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:55Z","tags":{}},"n1819790613":{"id":"n1819790613","loc":[-85.6253963,41.9562636],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:55Z","tags":{}},"n1819790614":{"id":"n1819790614","loc":[-85.6235252,41.9580342],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:55Z","tags":{}},"n1819790616":{"id":"n1819790616","loc":[-85.6232988,41.9596305],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:55Z","tags":{}},"n1819790617":{"id":"n1819790617","loc":[-85.6226776,41.9598732],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:55Z","tags":{}},"n1819790619":{"id":"n1819790619","loc":[-85.625553,41.9561794],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:55Z","tags":{}},"n1819790620":{"id":"n1819790620","loc":[-85.6235574,41.959231],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:55Z","tags":{}},"n1819790624":{"id":"n1819790624","loc":[-85.6228429,41.9573726],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:55Z","tags":{}},"n1819790626":{"id":"n1819790626","loc":[-85.6193785,41.9556766],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:55Z","tags":{}},"n1819790628":{"id":"n1819790628","loc":[-85.620092,41.9554253],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:55Z","tags":{}},"n1819790630":{"id":"n1819790630","loc":[-85.6226658,41.9604402],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:55Z","tags":{}},"n1819790638":{"id":"n1819790638","loc":[-85.6219964,41.9602561],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:55Z","tags":{}},"n1819790640":{"id":"n1819790640","loc":[-85.6232731,41.9599969],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790643":{"id":"n1819790643","loc":[-85.6247698,41.9568895],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790650":{"id":"n1819790650","loc":[-85.6216412,41.9550149],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790652":{"id":"n1819790652","loc":[-85.6224952,41.9603918],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790656":{"id":"n1819790656","loc":[-85.61918,41.9555649],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790661":{"id":"n1819790661","loc":[-85.6200169,41.955505],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790662":{"id":"n1819790662","loc":[-85.6217389,41.9563149],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790666":{"id":"n1819790666","loc":[-85.6229566,41.9598373],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790667":{"id":"n1819790667","loc":[-85.6209117,41.9609189],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790669":{"id":"n1819790669","loc":[-85.6252311,41.9562353],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790670":{"id":"n1819790670","loc":[-85.6209758,41.961868],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790672":{"id":"n1819790672","loc":[-85.6209557,41.9589078],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790673":{"id":"n1819790673","loc":[-85.6190352,41.9561393],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790675":{"id":"n1819790675","loc":[-85.6236432,41.9586685],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790676":{"id":"n1819790676","loc":[-85.6194901,41.9565389],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790678":{"id":"n1819790678","loc":[-85.6219266,41.9582417],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790680":{"id":"n1819790680","loc":[-85.6208258,41.9557211],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:57Z","tags":{}},"n1819790681":{"id":"n1819790681","loc":[-85.6212024,41.9613212],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:57Z","tags":{}},"n1819790682":{"id":"n1819790682","loc":[-85.624877,41.9559401],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:57Z","tags":{}},"n1819790684":{"id":"n1819790684","loc":[-85.6206499,41.9583693],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:57Z","tags":{}},"n1819790699":{"id":"n1819790699","loc":[-85.6215243,41.956279],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:57Z","tags":{}},"n1819790701":{"id":"n1819790701","loc":[-85.6246625,41.9559321],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:57Z","tags":{}},"n1819790703":{"id":"n1819790703","loc":[-85.6230478,41.9585089],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:57Z","tags":{}},"n1819790708":{"id":"n1819790708","loc":[-85.6211102,41.9575402],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:57Z","tags":{}},"n1819790710":{"id":"n1819790710","loc":[-85.6215082,41.9548468],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:57Z","tags":{}},"n1819790711":{"id":"n1819790711","loc":[-85.6206552,41.9586007],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:57Z","tags":{}},"n1819790713":{"id":"n1819790713","loc":[-85.6215404,41.9549705],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:57Z","tags":{}},"n1819790715":{"id":"n1819790715","loc":[-85.6216906,41.955521],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:57Z","tags":{}},"n1819790717":{"id":"n1819790717","loc":[-85.6215404,41.9547391],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:57Z","tags":{}},"n1819790722":{"id":"n1819790722","loc":[-85.6219964,41.9599131],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:57Z","tags":{}},"n1819790723":{"id":"n1819790723","loc":[-85.622286,41.9606989],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:57Z","tags":{}},"n1819790725":{"id":"n1819790725","loc":[-85.6228439,41.9572005],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:57Z","tags":{}},"n1819790727":{"id":"n1819790727","loc":[-85.6202518,41.9554458],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:58Z","tags":{}},"n1819790728":{"id":"n1819790728","loc":[-85.623434,41.9575276],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:58Z","tags":{}},"n1819790729":{"id":"n1819790729","loc":[-85.6234287,41.9568576],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:58Z","tags":{}},"n1819790732":{"id":"n1819790732","loc":[-85.6229566,41.9571369],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:58Z","tags":{}},"n1819790733":{"id":"n1819790733","loc":[-85.6225543,41.9590275],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:58Z","tags":{}},"n1819790734":{"id":"n1819790734","loc":[-85.6232892,41.9583135],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:58Z","tags":{}},"n1819790736":{"id":"n1819790736","loc":[-85.622977,41.9608551],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:58Z","tags":{}},"n1819790737":{"id":"n1819790737","loc":[-85.624008,41.9569533],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:58Z","tags":{}},"n1819790741":{"id":"n1819790741","loc":[-85.6212775,41.9608545],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:58Z","tags":{}},"n1819790742":{"id":"n1819790742","loc":[-85.6231282,41.9569932],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:58Z","tags":{}},"n1819790743":{"id":"n1819790743","loc":[-85.6224523,41.9591831],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:58Z","tags":{}},"n1819790744":{"id":"n1819790744","loc":[-85.6210951,41.9610819],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:58Z","tags":{}},"n1819790745":{"id":"n1819790745","loc":[-85.6220114,41.960544],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:58Z","tags":{}},"n1819790755":{"id":"n1819790755","loc":[-85.6216369,41.9553854],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:58Z","tags":{}},"n1819790757":{"id":"n1819790757","loc":[-85.6209986,41.9592709],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:58Z","tags":{}},"n1819790758":{"id":"n1819790758","loc":[-85.6200437,41.9563468],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:58Z","tags":{}},"n1819790764":{"id":"n1819790764","loc":[-85.6219363,41.9596823],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790765":{"id":"n1819790765","loc":[-85.6237612,41.9568496],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790769":{"id":"n1819790769","loc":[-85.6212389,41.9593433],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790771":{"id":"n1819790771","loc":[-85.6210726,41.9560123],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790772":{"id":"n1819790772","loc":[-85.6212711,41.9561838],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790776":{"id":"n1819790776","loc":[-85.6234437,41.9577795],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790777":{"id":"n1819790777","loc":[-85.6212502,41.9618599],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790783":{"id":"n1819790783","loc":[-85.6216895,41.9610585],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790784":{"id":"n1819790784","loc":[-85.6200115,41.9556367],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790785":{"id":"n1819790785","loc":[-85.6210576,41.9573002],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790786":{"id":"n1819790786","loc":[-85.621138,41.9576632],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790788":{"id":"n1819790788","loc":[-85.6207733,41.9578946],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790789":{"id":"n1819790789","loc":[-85.6200705,41.9571566],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790790":{"id":"n1819790790","loc":[-85.6245337,41.9558443],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790792":{"id":"n1819790792","loc":[-85.621932,41.9608066],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790793":{"id":"n1819790793","loc":[-85.6233578,41.9581385],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790794":{"id":"n1819790794","loc":[-85.6204557,41.9555136],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790797":{"id":"n1819790797","loc":[-85.6235038,41.9576074],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790800":{"id":"n1819790800","loc":[-85.6214438,41.9607508],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790801":{"id":"n1819790801","loc":[-85.623492,41.9602129],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:00Z","tags":{}},"n1819790802":{"id":"n1819790802","loc":[-85.6216691,41.9546553],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:00Z","tags":{}},"n1819790803":{"id":"n1819790803","loc":[-85.6231057,41.9586851],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:00Z","tags":{}},"n1819790804":{"id":"n1819790804","loc":[-85.6209224,41.9578673],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:00Z","tags":{}},"n1819790813":{"id":"n1819790813","loc":[-85.620092,41.9572962],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:00Z","tags":{}},"n1819790814":{"id":"n1819790814","loc":[-85.6216691,41.9552218],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:00Z","tags":{}},"n1819790816":{"id":"n1819790816","loc":[-85.6216144,41.9609668],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:00Z","tags":{}},"n1819790818":{"id":"n1819790818","loc":[-85.6216906,41.9557324],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:00Z","tags":{}},"n1819790820":{"id":"n1819790820","loc":[-85.6192069,41.9564186],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:00Z","tags":{}},"n1819790823":{"id":"n1819790823","loc":[-85.6211155,41.9566027],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:00Z","tags":{}},"n1819790825":{"id":"n1819790825","loc":[-85.6233106,41.9569294],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:00Z","tags":{}},"n1819790839":{"id":"n1819790839","loc":[-85.625671,41.9564986],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:00Z","tags":{}},"n1819790842":{"id":"n1819790842","loc":[-85.6235252,41.9567379],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:00Z","tags":{}},"n1819790844":{"id":"n1819790844","loc":[-85.6253813,41.9566342],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:00Z","tags":{}},"n1819790847":{"id":"n1819790847","loc":[-85.6200963,41.9567702],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:00Z","tags":{}},"n1819790849":{"id":"n1819790849","loc":[-85.6238031,41.9587449],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:00Z","tags":{}},"n1819790851":{"id":"n1819790851","loc":[-85.6234984,41.9584571],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:00Z","tags":{}},"n1819790856":{"id":"n1819790856","loc":[-85.6242226,41.9570092],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:00Z","tags":{}},"n1819790865":{"id":"n1819790865","loc":[-85.6200265,41.9569458],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:01Z","tags":{}},"n1819790869":{"id":"n1819790869","loc":[-85.6230049,41.9601245],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:01Z","tags":{}},"n1819790871":{"id":"n1819790871","loc":[-85.6190727,41.9558322],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:01Z","tags":{}},"n1819790873":{"id":"n1819790873","loc":[-85.6217442,41.9550104],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:01Z","tags":{}},"n1819790875":{"id":"n1819790875","loc":[-85.6208044,41.9587808],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:01Z","tags":{}},"n1819790879":{"id":"n1819790879","loc":[-85.6198444,41.9574484],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:01Z","tags":{}},"n1819790883":{"id":"n1819790883","loc":[-85.623713,41.9588719],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:01Z","tags":{}},"n1819790885":{"id":"n1819790885","loc":[-85.6223289,41.9605075],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:01Z","tags":{}},"n1819790889":{"id":"n1819790889","loc":[-85.6208044,41.9562437],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:01Z","tags":{}},"n1819790893":{"id":"n1819790893","loc":[-85.6218183,41.9559684],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:01Z","tags":{}},"n1819790906":{"id":"n1819790906","loc":[-85.6214052,41.958697],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:01Z","tags":{}},"n1819790913":{"id":"n1819790913","loc":[-85.6209981,41.9609957],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:01Z","tags":{}},"n1819790917":{"id":"n1819790917","loc":[-85.6216208,41.9604436],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:01Z","tags":{}},"n1819790919":{"id":"n1819790919","loc":[-85.6209406,41.9616373],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:01Z","tags":{}},"n1819790920":{"id":"n1819790920","loc":[-85.6221948,41.9583334],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:01Z","tags":{}},"n1819790922":{"id":"n1819790922","loc":[-85.6216681,41.9615292],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:01Z","tags":{}},"n1819790924":{"id":"n1819790924","loc":[-85.6210147,41.9570489],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:02Z","tags":{}},"n1819790929":{"id":"n1819790929","loc":[-85.6193678,41.955521],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:02Z","tags":{}},"w17964707":{"id":"w17964707","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:31:34Z","tags":{"highway":"residential","name":"11th Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"11th","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15314405","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185960682","n185960684","n185960686","n185960688","n185960690"]},"w201484345":{"id":"w201484345","version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:16Z","tags":{"bridge":"yes","highway":"residential","name":"E Hoffman St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Hoffman","tiger:name_direction_prefix":"E","tiger:name_type":"St","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185978791","n185978795"]},"w201484348":{"id":"w201484348","version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:16Z","tags":{"highway":"residential","name":"E Hoffman St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Hoffman","tiger:name_direction_prefix":"E","tiger:name_type":"St","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185978795","n185978800","n185978803","n185978806","n185978808","n185978810","n185978811","n185978813","n185955747","n185978814","n185972054","n185978817"]},"w170843845":{"id":"w170843845","version":"3","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:23Z","tags":{"ele":"244","gnis:county_id":"149","gnis:created":"04/14/1980","gnis:feature_id":"1624607","gnis:state_id":"26","landuse":"reservoir","name":"Hoffman Pond","natural":"water","source":"Bing"},"nodes":["n1819790732","n1819790742","n1819790825","n1819790729","n1819790842","n1819790765","n1819790737","n1819790856","n1819790643","n1819790596","n1819790844","n1819790839","n1819849190","n1819790619","n1819790613","n1819790669","n1819790550","n1819790682","n1819790701","n1819790790","n1819790532","n1819790887","n1819790740","n1819790831","n1819790545","n1819790664","n1819790621","n1819790861","n1819790730","n1819790683","n1819790802","n1819790717","n1819790710","n1819790713","n1819790650","n1819790873","n1819790814","n1819790755","n1819790715","n1819790818","n1819790602","n1819790893","n1819790662","n1819790699","n1819790772","n1819790771","n1819790680","n1819790794","n1819790727","n1819790628","n1819790661","n1819790784","n1819790610","n1819790626","n1819790929","n1819790656","n1819790871","n1819790673","n1819790566","n1819790820","n1819790676","n1819790598","n1819790556","n1819790558","n1819790879","n1819790608","n1819790813","n1819790789","n1819790865","n1819790847","n1819790758","n1819790548","n1819790539","n1819790889","n1819790557","n1819790586","n1819790571","n1819790823","n1819790546","n1819790924","n1819790785","n1819790708","n1819790786","n1819790561","n1819790804","n1819790788","n1819790684","n1819790711","n1819790875","n1819790672","n1819790569","n1819790757","n1819790769","n1819790603","n1819790906","n1819790553","n1819790536","n1819790678","n1819790920","n1819790600","n1819790733","n1819790743","n1819790567","n1819790764","n1819790722","n1819790638","n1819790917","n1819790800","n1819790741","n1819790667","n1819790913","n1819790744","n1819790816","n1819790591","n1819790745","n1819790885","n1819790652","n1819790588","n1819790617","n1819790551","n1819790666","n1819790869","n1819790630","n1819790723","n1819790792","n1819790783","n1819790681","n1819790919","n1819790593","n1819790670","n1819790777","n1819790922","n1819790562","n1819790736","n1819790565","n1819790801","n1819790538","n1819790640","n1819790616","n1819790572","n1819790620","n1819790883","n1819790849","n1819790675","n1819790851","n1819790803","n1819790611","n1819790703","n1819790734","n1819790793","n1819790614","n1819790581","n1819790776","n1819790797","n1819790728","n1819790584","n1819790624","n1819790604","n1819790725","n1819790732"]},"w206805240":{"id":"w206805240","version":"2","changeset":"15306846","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-09T19:50:50Z","tags":{"waterway":"river"},"nodes":["n2168544738","n2168544739","n2168544740","n2168544741","n2168544742","n2168544743","n2168544744","n2168544745","n2168544746","n2168544747","n2168544748","n2168544749","n2168544750","n2168544751","n2168544752","n2168544753","n1819848944"]},"n394490429":{"id":"n394490429","loc":[-85.643883,41.954365],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:29Z","tags":{}},"n185953421":{"id":"n185953421","loc":[-85.641876,41.954946],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:55:56Z","tags":{}},"n185953417":{"id":"n185953417","loc":[-85.6418306,41.9551597],"version":"3","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:55Z","tags":{}},"n185977233":{"id":"n185977233","loc":[-85.642987,41.95486],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:07:49Z","tags":{}},"n185977232":{"id":"n185977232","loc":[-85.642894,41.9547842],"version":"3","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:48:03Z","tags":{}},"n1475293244":{"id":"n1475293244","loc":[-85.63974,41.9521543],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:51Z","tags":{}},"n1819848890":{"id":"n1819848890","loc":[-85.6410004,41.9552822],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:50Z","tags":{}},"n1819848965":{"id":"n1819848965","loc":[-85.6409795,41.9553892],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:52Z","tags":{}},"n2189015846":{"id":"n2189015846","loc":[-85.6420457,41.9549528],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015849":{"id":"n2189015849","loc":[-85.6425867,41.9551392],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015852":{"id":"n2189015852","loc":[-85.6426877,41.9549771],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2199109816":{"id":"n2199109816","loc":[-85.6399215,41.9540925],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109818":{"id":"n2199109818","loc":[-85.6399182,41.9538236],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109820":{"id":"n2199109820","loc":[-85.6402201,41.9538216],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109822":{"id":"n2199109822","loc":[-85.640222,41.9539771],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109825":{"id":"n2199109825","loc":[-85.6402904,41.9539766],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109827":{"id":"n2199109827","loc":[-85.6402918,41.95409],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109829":{"id":"n2199109829","loc":[-85.6395845,41.9544626],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109831":{"id":"n2199109831","loc":[-85.6395792,41.9540671],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109833":{"id":"n2199109833","loc":[-85.6397173,41.9540661],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109835":{"id":"n2199109835","loc":[-85.6397226,41.9544616],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109837":{"id":"n2199109837","loc":[-85.6399641,41.9545058],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109839":{"id":"n2199109839","loc":[-85.6399637,41.9541859],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109841":{"id":"n2199109841","loc":[-85.6401098,41.9541858],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109843":{"id":"n2199109843","loc":[-85.64011,41.9543272],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109845":{"id":"n2199109845","loc":[-85.6400783,41.9543273],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109847":{"id":"n2199109847","loc":[-85.6400785,41.9545058],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109853":{"id":"n2199109853","loc":[-85.6396184,41.9554049],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{}},"n2199109855":{"id":"n2199109855","loc":[-85.6396825,41.9553713],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{}},"n185949745":{"id":"n185949745","loc":[-85.6442727,41.9553112],"version":"3","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:48:03Z","tags":{}},"n185949748":{"id":"n185949748","loc":[-85.6448804,41.9555238],"version":"3","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:55Z","tags":{}},"n185949755":{"id":"n185949755","loc":[-85.6420011,41.9603536],"version":"3","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:54Z","tags":{}},"n185949763":{"id":"n185949763","loc":[-85.6408843,41.9555822],"version":"3","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:48:03Z","tags":{}},"n185949765":{"id":"n185949765","loc":[-85.6414548,41.9557751],"version":"3","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:48:03Z","tags":{}},"n185952158":{"id":"n185952158","loc":[-85.640066,41.956854],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:55:10Z","tags":{}},"n185952160":{"id":"n185952160","loc":[-85.639848,41.957229],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:55:10Z","tags":{}},"n185952161":{"id":"n185952161","loc":[-85.6396089,41.9576192],"version":"3","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:55Z","tags":{}},"n185952163":{"id":"n185952163","loc":[-85.63892,41.957957],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:55:10Z","tags":{}},"n185953413":{"id":"n185953413","loc":[-85.64162,41.955475],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:55:56Z","tags":{}},"n185971651":{"id":"n185971651","loc":[-85.6440766,41.9543462],"version":"3","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:55Z","tags":{}},"n185977234":{"id":"n185977234","loc":[-85.645044,41.955581],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:07:49Z","tags":{}},"n394490395":{"id":"n394490395","loc":[-85.657336,41.936762],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:28Z","tags":{}},"n394490396":{"id":"n394490396","loc":[-85.653896,41.936978],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:28Z","tags":{}},"n394490397":{"id":"n394490397","loc":[-85.653732,41.937386],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:28Z","tags":{}},"n394490398":{"id":"n394490398","loc":[-85.65182,41.937378],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:28Z","tags":{}},"n394490399":{"id":"n394490399","loc":[-85.651843,41.938445],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:28Z","tags":{}},"n394490400":{"id":"n394490400","loc":[-85.652536,41.938447],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:28Z","tags":{}},"n394490401":{"id":"n394490401","loc":[-85.652533,41.938901],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:28Z","tags":{}},"n394490402":{"id":"n394490402","loc":[-85.652084,41.9389],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:28Z","tags":{}},"n394490403":{"id":"n394490403","loc":[-85.6521,41.939627],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:28Z","tags":{}},"n394490404":{"id":"n394490404","loc":[-85.652301,41.939628],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:28Z","tags":{}},"n394490405":{"id":"n394490405","loc":[-85.652302,41.939755],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:28Z","tags":{}},"n394490406":{"id":"n394490406","loc":[-85.652783,41.939747],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:28Z","tags":{}},"n394490407":{"id":"n394490407","loc":[-85.652835,41.94112],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:28Z","tags":{}},"n394490408":{"id":"n394490408","loc":[-85.651968,41.941123],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:28Z","tags":{}},"n394490409":{"id":"n394490409","loc":[-85.651983,41.941969],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:28Z","tags":{}},"n394490410":{"id":"n394490410","loc":[-85.652908,41.941961],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:28Z","tags":{}},"n394490411":{"id":"n394490411","loc":[-85.65292,41.94278],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:28Z","tags":{}},"n394490412":{"id":"n394490412","loc":[-85.651698,41.942816],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:28Z","tags":{}},"n394490413":{"id":"n394490413","loc":[-85.651509,41.942823],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:28Z","tags":{}},"n394490414":{"id":"n394490414","loc":[-85.651272,41.942837],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:28Z","tags":{}},"n394490415":{"id":"n394490415","loc":[-85.651272,41.943325],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:28Z","tags":{}},"n394490416":{"id":"n394490416","loc":[-85.65122,41.944053],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:28Z","tags":{}},"n394490417":{"id":"n394490417","loc":[-85.651193,41.944449],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:28Z","tags":{}},"n394490418":{"id":"n394490418","loc":[-85.651088,41.944969],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:28Z","tags":{}},"n394490419":{"id":"n394490419","loc":[-85.650949,41.945554],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:28Z","tags":{}},"n394490420":{"id":"n394490420","loc":[-85.650907,41.945719],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:28Z","tags":{}},"n394490421":{"id":"n394490421","loc":[-85.650808,41.946016],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:29Z","tags":{}},"n394490422":{"id":"n394490422","loc":[-85.650712,41.946516],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:29Z","tags":{}},"n394490423":{"id":"n394490423","loc":[-85.650493,41.947166],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:29Z","tags":{}},"n394490424":{"id":"n394490424","loc":[-85.650626,41.947213],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:29Z","tags":{}},"n394490425":{"id":"n394490425","loc":[-85.650201,41.948109],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:29Z","tags":{}},"n394490426":{"id":"n394490426","loc":[-85.649868,41.948797],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:29Z","tags":{}},"n394490427":{"id":"n394490427","loc":[-85.649669,41.949161],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:29Z","tags":{}},"n394490428":{"id":"n394490428","loc":[-85.64659,41.954067],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:29Z","tags":{}},"n394490430":{"id":"n394490430","loc":[-85.644034,41.95444],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:29Z","tags":{}},"n394490431":{"id":"n394490431","loc":[-85.644248,41.954507],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:29Z","tags":{}},"n394490432":{"id":"n394490432","loc":[-85.64491,41.954481],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:29Z","tags":{}},"n394490433":{"id":"n394490433","loc":[-85.645213,41.954433],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:29Z","tags":{}},"n394490434":{"id":"n394490434","loc":[-85.645426,41.954477],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:29Z","tags":{}},"n394490435":{"id":"n394490435","loc":[-85.6458,41.954704],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:29Z","tags":{}},"n394490436":{"id":"n394490436","loc":[-85.64605,41.954804],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:29Z","tags":{}},"n394490437":{"id":"n394490437","loc":[-85.646125,41.954817],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490438":{"id":"n394490438","loc":[-85.646002,41.954997],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490439":{"id":"n394490439","loc":[-85.645764,41.955366],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490440":{"id":"n394490440","loc":[-85.645525,41.955734],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490441":{"id":"n394490441","loc":[-85.64443,41.957424],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490442":{"id":"n394490442","loc":[-85.641712,41.961723],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490443":{"id":"n394490443","loc":[-85.640747,41.963246],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490444":{"id":"n394490444","loc":[-85.637803,41.967894],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490445":{"id":"n394490445","loc":[-85.637673,41.967861],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490446":{"id":"n394490446","loc":[-85.636637,41.969275],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490447":{"id":"n394490447","loc":[-85.634923,41.969269],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490448":{"id":"n394490448","loc":[-85.634893,41.968537],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490449":{"id":"n394490449","loc":[-85.634544,41.96927],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490450":{"id":"n394490450","loc":[-85.630835,41.969274],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490451":{"id":"n394490451","loc":[-85.630834,41.968348],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490452":{"id":"n394490452","loc":[-85.630857,41.968179],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490453":{"id":"n394490453","loc":[-85.630924,41.968044],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490454":{"id":"n394490454","loc":[-85.631004,41.967925],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490455":{"id":"n394490455","loc":[-85.631143,41.967811],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490456":{"id":"n394490456","loc":[-85.631311,41.967736],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490457":{"id":"n394490457","loc":[-85.631595,41.967693],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490458":{"id":"n394490458","loc":[-85.63325,41.967702],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490459":{"id":"n394490459","loc":[-85.633247,41.967021],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490460":{"id":"n394490460","loc":[-85.634858,41.967021],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490461":{"id":"n394490461","loc":[-85.634865,41.967711],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490462":{"id":"n394490462","loc":[-85.634884,41.968231],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490463":{"id":"n394490463","loc":[-85.636559,41.963867],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490464":{"id":"n394490464","loc":[-85.634832,41.963866],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490465":{"id":"n394490465","loc":[-85.63481,41.961899],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490466":{"id":"n394490466","loc":[-85.637219,41.961842],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490467":{"id":"n394490467","loc":[-85.637837,41.960019],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490468":{"id":"n394490468","loc":[-85.637459,41.960022],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490469":{"id":"n394490469","loc":[-85.635295,41.959987],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490470":{"id":"n394490470","loc":[-85.634783,41.959979],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490471":{"id":"n394490471","loc":[-85.634776,41.959834],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490472":{"id":"n394490472","loc":[-85.634767,41.959009],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490473":{"id":"n394490473","loc":[-85.634763,41.958292],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490474":{"id":"n394490474","loc":[-85.633346,41.958287],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490475":{"id":"n394490475","loc":[-85.632128,41.9583],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:30Z","tags":{}},"n394490476":{"id":"n394490476","loc":[-85.631414,41.958318],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490477":{"id":"n394490477","loc":[-85.63137,41.959033],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490478":{"id":"n394490478","loc":[-85.631325,41.959753],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490479":{"id":"n394490479","loc":[-85.631494,41.95977],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490480":{"id":"n394490480","loc":[-85.631456,41.960673],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490481":{"id":"n394490481","loc":[-85.631421,41.961494],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490482":{"id":"n394490482","loc":[-85.631404,41.961887],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490483":{"id":"n394490483","loc":[-85.631401,41.961968],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490484":{"id":"n394490484","loc":[-85.630962,41.961967],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490485":{"id":"n394490485","loc":[-85.6299,41.961973],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490486":{"id":"n394490486","loc":[-85.624929,41.962002],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490487":{"id":"n394490487","loc":[-85.623333,41.961987],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490488":{"id":"n394490488","loc":[-85.621894,41.963956],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490489":{"id":"n394490489","loc":[-85.62131,41.963727],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490490":{"id":"n394490490","loc":[-85.621216,41.963868],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490491":{"id":"n394490491","loc":[-85.620356,41.965119],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490492":{"id":"n394490492","loc":[-85.620848,41.965341],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490493":{"id":"n394490493","loc":[-85.620684,41.965558],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490494":{"id":"n394490494","loc":[-85.620621,41.965658],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490495":{"id":"n394490495","loc":[-85.618165,41.965759],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490496":{"id":"n394490496","loc":[-85.618071,41.965759],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490497":{"id":"n394490497","loc":[-85.617986,41.965759],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490498":{"id":"n394490498","loc":[-85.605673,41.965764],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490499":{"id":"n394490499","loc":[-85.605668,41.963548],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490500":{"id":"n394490500","loc":[-85.605664,41.962094],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490501":{"id":"n394490501","loc":[-85.595828,41.962159],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490502":{"id":"n394490502","loc":[-85.587869,41.962169],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490503":{"id":"n394490503","loc":[-85.586289,41.962179],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490504":{"id":"n394490504","loc":[-85.583774,41.962178],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490505":{"id":"n394490505","loc":[-85.583774,41.961789],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490506":{"id":"n394490506","loc":[-85.581303,41.961783],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490507":{"id":"n394490507","loc":[-85.581304,41.961616],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490508":{"id":"n394490508","loc":[-85.581292,41.961616],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490509":{"id":"n394490509","loc":[-85.581247,41.959244],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490510":{"id":"n394490510","loc":[-85.581245,41.958394],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490511":{"id":"n394490511","loc":[-85.581276,41.958372],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:31Z","tags":{}},"n394490512":{"id":"n394490512","loc":[-85.581302,41.958353],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490513":{"id":"n394490513","loc":[-85.581376,41.9583],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490514":{"id":"n394490514","loc":[-85.582256,41.957663],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490515":{"id":"n394490515","loc":[-85.585299,41.955483],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490516":{"id":"n394490516","loc":[-85.585588,41.955331],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490517":{"id":"n394490517","loc":[-85.586053,41.955163],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490518":{"id":"n394490518","loc":[-85.58632,41.955076],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490519":{"id":"n394490519","loc":[-85.586478,41.955025],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490520":{"id":"n394490520","loc":[-85.58692,41.954947],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490521":{"id":"n394490521","loc":[-85.587327,41.954914],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490522":{"id":"n394490522","loc":[-85.587345,41.954913],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490523":{"id":"n394490523","loc":[-85.587358,41.954913],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490524":{"id":"n394490524","loc":[-85.58963,41.954877],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490525":{"id":"n394490525","loc":[-85.591077,41.954865],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490526":{"id":"n394490526","loc":[-85.594824,41.954843],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490527":{"id":"n394490527","loc":[-85.594804,41.95331],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490528":{"id":"n394490528","loc":[-85.599336,41.95331],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490529":{"id":"n394490529","loc":[-85.599336,41.954825],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490530":{"id":"n394490530","loc":[-85.597828,41.954839],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490531":{"id":"n394490531","loc":[-85.597833,41.95614],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490532":{"id":"n394490532","loc":[-85.596586,41.956151],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490533":{"id":"n394490533","loc":[-85.596586,41.956394],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490534":{"id":"n394490534","loc":[-85.595933,41.956394],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490535":{"id":"n394490535","loc":[-85.595933,41.958176],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490536":{"id":"n394490536","loc":[-85.597635,41.958179],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490537":{"id":"n394490537","loc":[-85.597717,41.958177],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490538":{"id":"n394490538","loc":[-85.601671,41.958194],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490539":{"id":"n394490539","loc":[-85.605619,41.958194],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490540":{"id":"n394490540","loc":[-85.608054,41.958187],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:32Z","tags":{}},"n394490542":{"id":"n394490542","loc":[-85.6080762,41.9547864],"version":"2","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:47:47Z","tags":{}},"n394490545":{"id":"n394490545","loc":[-85.6104354,41.9548263],"version":"2","changeset":"12747630","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-16T08:22:38Z","tags":{}},"n394490546":{"id":"n394490546","loc":[-85.610274,41.951106],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490547":{"id":"n394490547","loc":[-85.610278,41.950829],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490548":{"id":"n394490548","loc":[-85.610309,41.948377],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490549":{"id":"n394490549","loc":[-85.610314,41.947986],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490550":{"id":"n394490550","loc":[-85.610464,41.947985],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490551":{"id":"n394490551","loc":[-85.610447,41.947468],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490552":{"id":"n394490552","loc":[-85.612469,41.947471],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490553":{"id":"n394490553","loc":[-85.612494,41.945576],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490554":{"id":"n394490554","loc":[-85.610292,41.94558],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490555":{"id":"n394490555","loc":[-85.608412,41.945625],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490556":{"id":"n394490556","loc":[-85.608412,41.943036],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490557":{"id":"n394490557","loc":[-85.608702,41.943087],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490558":{"id":"n394490558","loc":[-85.609196,41.943224],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490559":{"id":"n394490559","loc":[-85.609571,41.943263],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490560":{"id":"n394490560","loc":[-85.610116,41.943295],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490561":{"id":"n394490561","loc":[-85.610273,41.943275],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490562":{"id":"n394490562","loc":[-85.611339,41.943075],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490563":{"id":"n394490563","loc":[-85.611575,41.942997],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490564":{"id":"n394490564","loc":[-85.611847,41.942849],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490565":{"id":"n394490565","loc":[-85.612164,41.942568],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490566":{"id":"n394490566","loc":[-85.612341,41.942529],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490567":{"id":"n394490567","loc":[-85.612562,41.942524],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490568":{"id":"n394490568","loc":[-85.612768,41.942546],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490569":{"id":"n394490569","loc":[-85.612938,41.942633],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490570":{"id":"n394490570","loc":[-85.6131,41.942782],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490571":{"id":"n394490571","loc":[-85.613299,41.942919],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490572":{"id":"n394490572","loc":[-85.613498,41.942996],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490573":{"id":"n394490573","loc":[-85.614698,41.942842],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490574":{"id":"n394490574","loc":[-85.615288,41.942698],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490575":{"id":"n394490575","loc":[-85.616054,41.942693],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490576":{"id":"n394490576","loc":[-85.61603,41.942175],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490577":{"id":"n394490577","loc":[-85.616004,41.941741],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490578":{"id":"n394490578","loc":[-85.615994,41.940156],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:33Z","tags":{}},"n394490579":{"id":"n394490579","loc":[-85.615144,41.940159],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490580":{"id":"n394490580","loc":[-85.614915,41.940161],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490582":{"id":"n394490582","loc":[-85.614875,41.938532],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490583":{"id":"n394490583","loc":[-85.616167,41.938787],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490585":{"id":"n394490585","loc":[-85.616176,41.938589],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490586":{"id":"n394490586","loc":[-85.614537,41.938282],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490588":{"id":"n394490588","loc":[-85.610141,41.937459],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490589":{"id":"n394490589","loc":[-85.610172,41.937298],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490590":{"id":"n394490590","loc":[-85.609918,41.935495],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490592":{"id":"n394490592","loc":[-85.610092,41.935451],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490594":{"id":"n394490594","loc":[-85.610681,41.935247],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490595":{"id":"n394490595","loc":[-85.611446,41.934955],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490596":{"id":"n394490596","loc":[-85.612057,41.934696],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490598":{"id":"n394490598","loc":[-85.613256,41.934084],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490599":{"id":"n394490599","loc":[-85.613948,41.933682],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490601":{"id":"n394490601","loc":[-85.61436,41.933417],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490602":{"id":"n394490602","loc":[-85.614638,41.933212],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490604":{"id":"n394490604","loc":[-85.615249,41.9332],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490605":{"id":"n394490605","loc":[-85.618218,41.933223],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490607":{"id":"n394490607","loc":[-85.618241,41.933479],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490608":{"id":"n394490608","loc":[-85.618257,41.93365],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490609":{"id":"n394490609","loc":[-85.618298,41.935067],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490611":{"id":"n394490611","loc":[-85.619791,41.935067],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490612":{"id":"n394490612","loc":[-85.619794,41.933301],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490613":{"id":"n394490613","loc":[-85.619795,41.932692],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490614":{"id":"n394490614","loc":[-85.619729,41.929517],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490615":{"id":"n394490615","loc":[-85.619801,41.929305],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490616":{"id":"n394490616","loc":[-85.619809,41.927391],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490617":{"id":"n394490617","loc":[-85.620883,41.927378],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490618":{"id":"n394490618","loc":[-85.620988,41.927368],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490619":{"id":"n394490619","loc":[-85.621076,41.927368],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490620":{"id":"n394490620","loc":[-85.621156,41.927376],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490621":{"id":"n394490621","loc":[-85.621685,41.92737],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490622":{"id":"n394490622","loc":[-85.624716,41.927359],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490623":{"id":"n394490623","loc":[-85.625308,41.92737],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:34Z","tags":{}},"n394490624":{"id":"n394490624","loc":[-85.625655,41.927377],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:35Z","tags":{}},"n394490625":{"id":"n394490625","loc":[-85.625093,41.925591],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:35Z","tags":{}},"n394490626":{"id":"n394490626","loc":[-85.625174,41.92559],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:35Z","tags":{}},"n394490627":{"id":"n394490627","loc":[-85.625249,41.925597],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:35Z","tags":{}},"n394490628":{"id":"n394490628","loc":[-85.625532,41.925604],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:35Z","tags":{}},"n394490629":{"id":"n394490629","loc":[-85.625761,41.925597],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:35Z","tags":{}},"n394490630":{"id":"n394490630","loc":[-85.625955,41.926153],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:35Z","tags":{}},"n394490631":{"id":"n394490631","loc":[-85.626209,41.926155],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:35Z","tags":{}},"n394490632":{"id":"n394490632","loc":[-85.627757,41.926151],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:35Z","tags":{}},"n394490633":{"id":"n394490633","loc":[-85.627825,41.926298],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:35Z","tags":{}},"n394490634":{"id":"n394490634","loc":[-85.627994,41.926315],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:35Z","tags":{}},"n394490635":{"id":"n394490635","loc":[-85.628049,41.927196],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:35Z","tags":{}},"n394490636":{"id":"n394490636","loc":[-85.62949,41.927221],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:35Z","tags":{}},"n394490637":{"id":"n394490637","loc":[-85.629602,41.927277],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:35Z","tags":{}},"n394490638":{"id":"n394490638","loc":[-85.6297102,41.9273279],"version":"2","changeset":"12805153","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-08-21T08:30:02Z","tags":{}},"n394490639":{"id":"n394490639","loc":[-85.630958,41.927398],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:06:35Z","tags":{}},"n394490699":{"id":"n394490699","loc":[-85.632741,41.927388],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:55Z","tags":{}},"n394490700":{"id":"n394490700","loc":[-85.632997,41.927391],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:55Z","tags":{}},"n394490701":{"id":"n394490701","loc":[-85.633149,41.927393],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:55Z","tags":{}},"n394490702":{"id":"n394490702","loc":[-85.633334,41.927393],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:55Z","tags":{}},"n394490703":{"id":"n394490703","loc":[-85.633468,41.927561],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:55Z","tags":{}},"n394490704":{"id":"n394490704","loc":[-85.633563,41.927755],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:55Z","tags":{}},"n394490705":{"id":"n394490705","loc":[-85.633662,41.928192],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:55Z","tags":{}},"n394490706":{"id":"n394490706","loc":[-85.633679,41.928807],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:55Z","tags":{}},"n394490707":{"id":"n394490707","loc":[-85.633687,41.929107],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:55Z","tags":{}},"n394490708":{"id":"n394490708","loc":[-85.633927,41.929109],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:55Z","tags":{}},"n394490709":{"id":"n394490709","loc":[-85.634126,41.929111],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:55Z","tags":{}},"n394490710":{"id":"n394490710","loc":[-85.634207,41.92911],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:55Z","tags":{}},"n394490711":{"id":"n394490711","loc":[-85.634323,41.929111],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:55Z","tags":{}},"n394490712":{"id":"n394490712","loc":[-85.636712,41.929128],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:55Z","tags":{}},"n394490713":{"id":"n394490713","loc":[-85.63808,41.9291],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:55Z","tags":{}},"n394490714":{"id":"n394490714","loc":[-85.639213,41.929088],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:55Z","tags":{}},"n394490715":{"id":"n394490715","loc":[-85.639189,41.92852],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:55Z","tags":{}},"n394490716":{"id":"n394490716","loc":[-85.639204,41.925488],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:55Z","tags":{}},"n394490717":{"id":"n394490717","loc":[-85.644204,41.925452],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:55Z","tags":{}},"n394490718":{"id":"n394490718","loc":[-85.651425,41.925406],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:56Z","tags":{}},"n394490719":{"id":"n394490719","loc":[-85.651449,41.926321],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:56Z","tags":{}},"n394490720":{"id":"n394490720","loc":[-85.651451,41.926969],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:56Z","tags":{}},"n394490721":{"id":"n394490721","loc":[-85.651458,41.928052],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:56Z","tags":{}},"n394490722":{"id":"n394490722","loc":[-85.651446,41.928892],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:56Z","tags":{}},"n394490723":{"id":"n394490723","loc":[-85.651456,41.929447],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:56Z","tags":{}},"n394490724":{"id":"n394490724","loc":[-85.651707,41.929454],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:56Z","tags":{}},"n394490725":{"id":"n394490725","loc":[-85.652369,41.929473],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:56Z","tags":{}},"n394490726":{"id":"n394490726","loc":[-85.6525,41.929452],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:56Z","tags":{}},"n394490727":{"id":"n394490727","loc":[-85.654066,41.92946],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:56Z","tags":{}},"n394490728":{"id":"n394490728","loc":[-85.654816,41.92946],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:56Z","tags":{}},"n394490729":{"id":"n394490729","loc":[-85.654816,41.930337],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:56Z","tags":{}},"n394490730":{"id":"n394490730","loc":[-85.654587,41.930337],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:56Z","tags":{}},"n394490731":{"id":"n394490731","loc":[-85.654548,41.931072],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:56Z","tags":{}},"n394490732":{"id":"n394490732","loc":[-85.654538,41.931701],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:56Z","tags":{}},"n394490733":{"id":"n394490733","loc":[-85.654898,41.931689],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:56Z","tags":{}},"n394490734":{"id":"n394490734","loc":[-85.654898,41.932505],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:56Z","tags":{}},"n394490735":{"id":"n394490735","loc":[-85.654854,41.932514],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:56Z","tags":{}},"n394490736":{"id":"n394490736","loc":[-85.655497,41.932499],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:56Z","tags":{}},"n394490737":{"id":"n394490737","loc":[-85.656405,41.932493],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:56Z","tags":{}},"n394490738":{"id":"n394490738","loc":[-85.656422,41.933416],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:56Z","tags":{}},"n394490739":{"id":"n394490739","loc":[-85.657322,41.933438],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:56Z","tags":{}},"n1475293233":{"id":"n1475293233","loc":[-85.6385522,41.9585167],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:50Z","tags":{}},"n1475293242":{"id":"n1475293242","loc":[-85.64609,41.9540815],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:51Z","tags":{}},"n1475293249":{"id":"n1475293249","loc":[-85.6358079,41.9692721],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:51Z","tags":{}},"n1475293256":{"id":"n1475293256","loc":[-85.6387369,41.9581583],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:51Z","tags":{}},"n1475293259":{"id":"n1475293259","loc":[-85.6455882,41.9541138],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:52Z","tags":{}},"n1475293266":{"id":"n1475293266","loc":[-85.6451008,41.9541821],"version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:52Z","tags":{}},"n1819800253":{"id":"n1819800253","loc":[-85.6134286,41.9429692],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:03:23Z","tags":{}},"n2114807558":{"id":"n2114807558","loc":[-85.6365609,41.963866],"version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:15Z","tags":{"railway":"level_crossing"}},"n2189015728":{"id":"n2189015728","loc":[-85.6383956,41.9590576],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015838":{"id":"n2189015838","loc":[-85.6435144,41.9563705],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015842":{"id":"n2189015842","loc":[-85.6415782,41.9557035],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015855":{"id":"n2189015855","loc":[-85.6440829,41.9554577],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2199109849":{"id":"n2199109849","loc":[-85.6393434,41.9565591],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109851":{"id":"n2199109851","loc":[-85.6393208,41.9565002],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:51Z","tags":{}},"n2199109857":{"id":"n2199109857","loc":[-85.6401986,41.955545],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{}},"n2199109859":{"id":"n2199109859","loc":[-85.6402362,41.955587],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{}},"n2199109861":{"id":"n2199109861","loc":[-85.6395958,41.9565675],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{}},"n2199109863":{"id":"n2199109863","loc":[-85.639528,41.9566011],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{}},"w209717053":{"id":"w209717053","version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:53Z","tags":{"area":"yes","building":"yes"},"nodes":["n2199109829","n2199109831","n2199109833","n2199109835","n2199109829"]},"w17966415":{"id":"w17966415","version":"2","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:55Z","tags":{"access":"private","highway":"service","name":"Manufacturing Way","tiger:cfcc":"A74","tiger:county":"St. Joseph, MI","tiger:name_base":"Manufacturing","tiger:name_type":"Way","tiger:reviewed":"no"},"nodes":["n185971642","n185977232","n185977233","n185949745","n185949748","n185977234"]},"w209717054":{"id":"w209717054","version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:53Z","tags":{"area":"yes","building":"yes"},"nodes":["n2199109837","n2199109839","n2199109841","n2199109843","n2199109845","n2199109847","n2199109837"]},"w208627214":{"id":"w208627214","version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:53Z","tags":{"highway":"service","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:reviewed":"no"},"nodes":["n185949755","n2189015728","n1475293233","n1475293256","n185952163","n185952161","n185952160","n185952158","n185949763","n1819848965","n1819848890","n185952156"]},"w17963817":{"id":"w17963817","version":"2","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:55Z","tags":{"access":"private","highway":"service","tiger:cfcc":"A74","tiger:county":"St. Joseph, MI","tiger:reviewed":"no"},"nodes":["n185949765","n185953413","n185953417","n185953421","n185953423"]},"w34369809":{"id":"w34369809","version":"7","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:19Z","tags":{"admin_level":"8","boundary":"administrative","landuse":"residential","source":"TIGER/Line® 2008 Place Shapefiles (http://www.census.gov/geo/www/tiger/)"},"nodes":["n394490395","n394490396","n394490397","n394490398","n394490399","n394490400","n394490401","n394490402","n394490403","n394490404","n394490405","n394490406","n394490407","n394490408","n394490409","n394490410","n394490411","n394490412","n394490413","n394490414","n394490415","n394490416","n394490417","n394490418","n394490419","n394490420","n394490421","n394490422","n394490423","n394490424","n394490425","n394490426","n394490427","n394490428","n1475293242","n1475293259","n1475293266","n394490429","n394490430","n394490431","n394490432","n394490433","n394490434","n394490435","n394490436","n394490437","n394490438","n394490439","n394490440","n394490441","n394490442","n394490443","n394490444","n394490445","n394490446","n1475293249","n394490447","n394490448","n394490449","n394490450","n394490451","n394490452","n394490453","n394490454","n394490455","n394490456","n394490457","n394490458","n394490459","n394490460","n394490461","n394490462","n2114807558","n394490463","n1475293226","n394490464","n394490465","n394490466","n394490467","n394490468","n394490469","n394490470","n394490471","n394490472","n394490473","n394490474","n394490475","n394490476","n394490477","n394490478","n394490479","n394490480","n394490481","n394490482","n394490483","n394490484","n394490485","n394490486","n394490487","n394490488","n394490489","n394490490","n394490491","n394490492","n394490493","n394490494","n394490495","n394490496","n394490497","n394490498","n394490499","n394490500","n394490501","n394490502","n394490503","n394490504","n394490505","n394490506","n394490507","n394490508","n394490509","n394490510","n394490511","n394490512","n394490513","n394490514","n394490515","n394490516","n394490517","n394490518","n394490519","n394490520","n394490521","n394490522","n394490523","n394490524","n394490525","n394490526","n394490527","n394490528","n394490529","n394490530","n394490531","n394490532","n394490533","n394490534","n394490535","n394490536","n394490537","n394490538","n394490539","n394490540","n394490542","n394490545","n394490546","n394490547","n394490548","n394490549","n394490550","n394490551","n394490552","n394490553","n394490554","n394490555","n394490556","n394490557","n394490558","n394490559","n394490560","n394490561","n394490562","n394490563","n394490564","n394490565","n394490566","n394490567","n394490568","n394490569","n394490570","n394490571","n1819800253","n394490572","n394490573","n394490574","n394490575","n394490576","n394490577","n394490578","n394490579","n394490580","n394490582","n394490583","n394490585","n394490586","n394490588","n394490589","n394490590","n394490592","n394490594","n394490595","n394490596","n394490598","n394490599","n394490601","n394490602","n394490604","n394490605","n394490607","n394490608","n394490609","n394490611","n394490612","n394490613","n394490614","n394490615","n394490616","n394490617","n394490618","n394490619","n394490620","n394490621","n394490622","n394490623","n394490624","n394490625","n394490626","n394490627","n394490628","n394490629","n394490630","n394490631","n394490632","n394490633","n394490634","n394490635","n394490636","n394490637","n394490638","n394490639","n394490699","n394490700","n394490701","n394490702","n394490703","n394490704","n394490705","n394490706","n394490707","n394490708","n394490709","n394490710","n394490711","n394490712","n394490713","n394490714","n394490715","n394490716","n394490717","n394490718","n394490719","n394490720","n394490721","n394490722","n394490723","n394490724","n394490725","n394490726","n394490727","n394490728","n394490729","n394490730","n394490731","n394490732","n394490733","n394490734","n394490735","n394490736","n394490737","n394490738","n394490739","n394490395"]},"w208627221":{"id":"w208627221","version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:53Z","tags":{"amenity":"parking","area":"yes"},"nodes":["n2189015838","n2189015842","n2189015846","n2189015849","n2189015852","n2189015855","n2189015838"]},"w209717052":{"id":"w209717052","version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:53Z","tags":{"area":"yes","building":"yes"},"nodes":["n2199109816","n2199109818","n2199109820","n2199109822","n2199109825","n2199109827","n2199109816"]},"w134151784":{"id":"w134151784","version":"1","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:54:52Z","tags":{"bridge":"yes","highway":"residential","name":"W Hoffman St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Hoffman","tiger:name_direction_prefix":"W","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312195:15312958:15312207:15313273:15328372:15328373","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185971648","n185971651"]},"w209717055":{"id":"w209717055","version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:53Z","tags":{"area":"yes","landuse":"basin"},"nodes":["n2199109849","n2199109851","n2199109853","n2199109855","n2199109857","n2199109859","n2199109861","n2199109863","n2199109849"]},"w17967763":{"id":"w17967763","version":"2","changeset":"9619138","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2011-10-21T19:55:04Z","tags":{"highway":"residential","name":"Rock River Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Rock River","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312230:15312252:15335064:15333550","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093"},"nodes":["n1475293244","n185982166","n185975067","n185971637"]},"r134949":{"id":"r134949","version":"2","changeset":"14979874","user":"malenki","uid":"39504","visible":"true","timestamp":"2013-02-10T12:18:08Z","tags":{"admin_level":"8","border_type":"city","boundary":"administrative","is_in":"USA, Michigan","is_in:country":"USA","is_in:country_code":"US","is_in:iso_3166_2":"US:MI","is_in:state":"Michigan","is_in:state_code":"MI","name":"Three Rivers","place":"city","source":"TIGER/Line® 2008 Place Shapefiles (http://www.census.gov/geo/www/tiger/)","tiger:CLASSFP":"C5","tiger:CPI":"Y","tiger:FUNCSTAT":"A","tiger:LSAD":"25","tiger:MTFCC":"G4110","tiger:NAME":"Three Rivers","tiger:NAMELSAD":"Three Rivers city","tiger:PCICBSA":"N","tiger:PCINECTA":"N","tiger:PLACEFP":"79760","tiger:PLACENS":"01627164","tiger:PLCIDFP":"2679760","tiger:STATEFP":"26","type":"boundary","wikipedia":"en:Three Rivers, Michigan"},"members":[{"id":"w34369809","type":"way","role":"outer"},{"id":"w34369821","type":"way","role":"outer"},{"id":"w34369822","type":"way","role":"outer"},{"id":"w34369823","type":"way","role":"outer"},{"id":"w34369824","type":"way","role":"outer"},{"id":"w34369825","type":"way","role":"outer"},{"id":"w34369826","type":"way","role":"outer"},{"id":"w34369810","type":"way","role":"inner"},{"id":"w34369811","type":"way","role":"inner"},{"id":"w34369812","type":"way","role":"inner"},{"id":"w34367079","type":"way","role":"inner"},{"id":"w34369814","type":"way","role":"inner"},{"id":"w34367080","type":"way","role":"inner"},{"id":"w34369815","type":"way","role":"inner"},{"id":"w34369820","type":"way","role":"inner"}]},"n1819848881":{"id":"n1819848881","loc":[-85.638562,41.9569965],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:49Z","tags":{}},"n1819848947":{"id":"n1819848947","loc":[-85.6384348,41.9576565],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:51Z","tags":{}},"n1819849044":{"id":"n1819849044","loc":[-85.6385749,41.9573345],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:54Z","tags":{}},"n2114807547":{"id":"n2114807547","loc":[-85.6384626,41.9583756],"version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:15Z","tags":{}},"n2114807564":{"id":"n2114807564","loc":[-85.638535,41.9581283],"version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:15Z","tags":{}},"n2189015691":{"id":"n2189015691","loc":[-85.6435584,41.9565243],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:49Z","tags":{}},"n2189015696":{"id":"n2189015696","loc":[-85.6435805,41.9566049],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015722":{"id":"n2189015722","loc":[-85.6435035,41.9567438],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015744":{"id":"n2189015744","loc":[-85.6437991,41.9569582],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015747":{"id":"n2189015747","loc":[-85.6433042,41.9567742],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015750":{"id":"n2189015750","loc":[-85.6433827,41.9566844],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015753":{"id":"n2189015753","loc":[-85.6430447,41.9565588],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015756":{"id":"n2189015756","loc":[-85.6431111,41.956451],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015759":{"id":"n2189015759","loc":[-85.6420247,41.956083],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015760":{"id":"n2189015760","loc":[-85.6419945,41.9561369],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015764":{"id":"n2189015764","loc":[-85.6413729,41.9558945],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015766":{"id":"n2189015766","loc":[-85.6412884,41.9560606],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015770":{"id":"n2189015770","loc":[-85.6411798,41.9560112],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015771":{"id":"n2189015771","loc":[-85.6410651,41.9562132],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015774":{"id":"n2189015774","loc":[-85.6409504,41.9561728],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015778":{"id":"n2189015778","loc":[-85.6407996,41.9564241],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015781":{"id":"n2189015781","loc":[-85.6406889,41.9563892],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015785":{"id":"n2189015785","loc":[-85.6404857,41.9567024],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015789":{"id":"n2189015789","loc":[-85.6406909,41.9567877],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015793":{"id":"n2189015793","loc":[-85.6405642,41.9570165],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015796":{"id":"n2189015796","loc":[-85.6415359,41.9573711],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015800":{"id":"n2189015800","loc":[-85.6411738,41.9579501],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015804":{"id":"n2189015804","loc":[-85.6411119,41.957921],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015808":{"id":"n2189015808","loc":[-85.6403186,41.9591751],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015909":{"id":"n2189015909","loc":[-85.6389293,41.9564636],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015926":{"id":"n2189015926","loc":[-85.6385431,41.9564617],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015929":{"id":"n2189015929","loc":[-85.6385457,41.9561823],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015932":{"id":"n2189015932","loc":[-85.6389319,41.9561843],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2199109865":{"id":"n2199109865","loc":[-85.6400768,41.956776],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{}},"n2199109867":{"id":"n2199109867","loc":[-85.639902,41.9567153],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{}},"n2199109869":{"id":"n2199109869","loc":[-85.640004,41.956553],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{}},"n2199109871":{"id":"n2199109871","loc":[-85.6401788,41.9566137],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{}},"n2199109873":{"id":"n2199109873","loc":[-85.6399316,41.9564506],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{"man_made":"water_tower"}},"n2199109876":{"id":"n2199109876","loc":[-85.6397689,41.9572354],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{}},"n2199109878":{"id":"n2199109878","loc":[-85.6399229,41.9569826],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{}},"n2199109880":{"id":"n2199109880","loc":[-85.639706,41.9569095],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{}},"n2199109882":{"id":"n2199109882","loc":[-85.639552,41.9571623],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{}},"n2199109884":{"id":"n2199109884","loc":[-85.6391028,41.9569517],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{}},"n2199109886":{"id":"n2199109886","loc":[-85.6392876,41.956646],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{}},"n2199109888":{"id":"n2199109888","loc":[-85.639484,41.9567117],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{}},"n2199109889":{"id":"n2199109889","loc":[-85.6394322,41.9567973],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{}},"n2199109890":{"id":"n2199109890","loc":[-85.6393718,41.9567771],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{}},"n2199109891":{"id":"n2199109891","loc":[-85.6392387,41.9569972],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{}},"n1819848900":{"id":"n1819848900","loc":[-85.638281,41.9576578],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:50Z","tags":{}},"n1819848978":{"id":"n1819848978","loc":[-85.6377186,41.9580867],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:53Z","tags":{}},"n1819849039":{"id":"n1819849039","loc":[-85.6384217,41.9573405],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:54Z","tags":{}},"n1819849050":{"id":"n1819849050","loc":[-85.6377011,41.9570042],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:55Z","tags":{}},"n1819849088":{"id":"n1819849088","loc":[-85.6382879,41.9580817],"version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:47:56Z","tags":{}},"n2114807549":{"id":"n2114807549","loc":[-85.6362551,41.96473],"version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:15Z","tags":{}},"n2114807587":{"id":"n2114807587","loc":[-85.6368694,41.9629829],"version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:15Z","tags":{}},"n2189015725":{"id":"n2189015725","loc":[-85.644156,41.9569753],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015741":{"id":"n2189015741","loc":[-85.6419825,41.9597632],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"w208627217":{"id":"w208627217","version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:53Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189015741","n2189015744","n2189015747","n2189015750","n2189015753","n2189015756","n2189015759","n2189015760","n2189015764","n2189015766","n2189015770","n2189015771","n2189015774","n2189015778","n2189015781","n2189015785","n2189015789","n2189015793","n2189015796","n2189015800","n2189015804","n2189015808","n2189015741"]},"w208627212":{"id":"w208627212","version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:53Z","tags":{"highway":"service"},"nodes":["n2189015691","n2189015696","n2189015722","n2189015725"]},"w209717057":{"id":"w209717057","version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:53Z","tags":{"area":"yes","building":"yes"},"nodes":["n2199109876","n2199109878","n2199109880","n2199109882","n2199109876"]},"w209717056":{"id":"w209717056","version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:53Z","tags":{"area":"yes","building":"yes"},"nodes":["n2199109865","n2199109867","n2199109869","n2199109871","n2199109865"]},"w208627231":{"id":"w208627231","version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:54Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189015909","n2189015926","n2189015929","n2189015932","n2189015909"]},"w170848326":{"id":"w170848326","version":"1","changeset":"12170158","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T07:48:00Z","tags":{"building":"yes","source":"Bing"},"nodes":["n1819848881","n1819849050","n1819848978","n1819849088","n1819848900","n1819848947","n1819849039","n1819849044","n1819848881"]},"w17963182":{"id":"w17963182","version":"2","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:55Z","tags":{"highway":"service","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:reviewed":"no"},"nodes":["n185949763","n185949765","n2189015691","n185949745"]},"w201484340":{"id":"w201484340","version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:16Z","tags":{"railway":"rail","service":"siding","source":"Bing"},"nodes":["n2114807565","n2114807564","n2114807547","n2114807587","n2114807558","n2114807549","n2114807593"]},"w209717058":{"id":"w209717058","version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:53Z","tags":{"area":"yes","building":"yes"},"nodes":["n2199109884","n2199109886","n2199109888","n2199109889","n2199109890","n2199109891","n2199109884"]},"n185954650":{"id":"n185954650","loc":[-85.627331,41.957439],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:56:31Z","tags":{}},"n185966949":{"id":"n185966949","loc":[-85.626868,41.957314],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:50Z","tags":{}},"n185989335":{"id":"n185989335","loc":[-85.62529,41.958568],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:27Z","tags":{}},"n185989337":{"id":"n185989337","loc":[-85.624962,41.958453],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:27Z","tags":{}},"n185989339":{"id":"n185989339","loc":[-85.624832,41.958399],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:27Z","tags":{}},"n185989340":{"id":"n185989340","loc":[-85.624707,41.958325],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:27Z","tags":{}},"n185989342":{"id":"n185989342","loc":[-85.624636,41.958251],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:27Z","tags":{}},"n185989345":{"id":"n185989345","loc":[-85.624578,41.95818],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:27Z","tags":{}},"n185989347":{"id":"n185989347","loc":[-85.624533,41.958099],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:27Z","tags":{}},"n185989349":{"id":"n185989349","loc":[-85.624507,41.957985],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:27Z","tags":{}},"n185989351":{"id":"n185989351","loc":[-85.624495,41.957807],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:27Z","tags":{}},"n185989353":{"id":"n185989353","loc":[-85.624514,41.957663],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:27Z","tags":{}},"n185989354":{"id":"n185989354","loc":[-85.624577,41.957593],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:27Z","tags":{}},"n185989356":{"id":"n185989356","loc":[-85.624685,41.95754],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:27Z","tags":{}},"n185989357":{"id":"n185989357","loc":[-85.624802,41.957523],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:28Z","tags":{}},"n185989359":{"id":"n185989359","loc":[-85.624996,41.957524],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:28Z","tags":{}},"n185989361":{"id":"n185989361","loc":[-85.625409,41.957515],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:28Z","tags":{}},"n185989364":{"id":"n185989364","loc":[-85.625634,41.957496],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:28Z","tags":{}},"n185989367":{"id":"n185989367","loc":[-85.625832,41.957453],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:28Z","tags":{}},"n185989368":{"id":"n185989368","loc":[-85.626044,41.957394],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:14:28Z","tags":{}},"n354031352":{"id":"n354031352","loc":[-85.6252778,41.9586111],"version":"3","changeset":"3908860","user":"Geogast","uid":"51045","visible":"true","timestamp":"2010-02-18T13:28:26Z","tags":{"amenity":"place_of_worship","denomination":"baptist","ele":"250","gnis:county_id":"149","gnis:created":"04/30/2008","gnis:feature_id":"2417873","gnis:state_id":"26","name":"First Baptist Church","religion":"christian"}},"n2199109892":{"id":"n2199109892","loc":[-85.6261578,41.9589963],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{}},"n2199109893":{"id":"n2199109893","loc":[-85.6263191,41.9586865],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{}},"n2199109894":{"id":"n2199109894","loc":[-85.6261186,41.9586288],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{}},"n2199109895":{"id":"n2199109895","loc":[-85.6260644,41.9587329],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{}},"n2199109896":{"id":"n2199109896","loc":[-85.6261547,41.9587589],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{}},"n2199109898":{"id":"n2199109898","loc":[-85.6260476,41.9589646],"version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:52Z","tags":{}},"n185966951":{"id":"n185966951","loc":[-85.628404,41.957438],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:50Z","tags":{}},"w17965351":{"id":"w17965351","version":"2","changeset":"15473186","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-24T01:52:20Z","tags":{"highway":"residential","name":"Flower Street","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Flower","tiger:name_type":"St","tiger:reviewed":"no"},"nodes":["n185966948","n185966949","n185954650","n185966951","n185966953","n185966955","n185966957"]},"w17967809":{"id":"w17967809","version":"2","changeset":"15473186","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-24T01:52:21Z","tags":{"highway":"residential","name":"Azaleamum Drive","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Azaleamum","tiger:name_type":"Dr","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185982197","n185989335","n185989337","n185989339","n185989340","n185989342","n185989345","n185989347","n185989349","n185989351","n185989353","n185989354","n185989356","n185989357","n185989359","n185989361","n185989364","n185989367","n185989368","n185982196"]},"w209717059":{"id":"w209717059","version":"1","changeset":"15347594","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-13T05:16:53Z","tags":{"area":"yes","building":"yes"},"nodes":["n2199109892","n2199109893","n2199109894","n2199109895","n2199109896","n2199109898","n2199109892"]},"n185961390":{"id":"n185961390","loc":[-85.63137,41.959033],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:59:39Z","tags":{}},"n185961393":{"id":"n185961393","loc":[-85.634315,41.959017],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:59:39Z","tags":{}},"w17966214":{"id":"w17966214","version":"2","changeset":"15473186","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-24T01:52:22Z","tags":{"highway":"residential","name":"East Adams Street","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Adams","tiger:name_direction_prefix":"E","tiger:name_type":"St","tiger:reviewed":"no","tiger:zip_left":"49093"},"nodes":["n185975351","n185967434","n185968108"]},"w17964793":{"id":"w17964793","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:32:05Z","tags":{"highway":"residential","name":"Morris Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Morris","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312148:15328241:15328242","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185961389","n185961390","n185961391","n185961393","n185961396"]},"n185952166":{"id":"n185952166","loc":[-85.638174,41.95831],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:55:11Z","tags":{}},"n2114807552":{"id":"n2114807552","loc":[-85.6383526,41.9593788],"version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:15Z","tags":{}},"n2114807591":{"id":"n2114807591","loc":[-85.6383741,41.9593968],"version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:15Z","tags":{}},"n2189015731":{"id":"n2189015731","loc":[-85.6368404,41.9592785],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015734":{"id":"n2189015734","loc":[-85.6368404,41.9585918],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015737":{"id":"n2189015737","loc":[-85.6376009,41.9585918],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015738":{"id":"n2189015738","loc":[-85.6376009,41.9592785],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:50Z","tags":{}},"n2189015897":{"id":"n2189015897","loc":[-85.6376839,41.9566137],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015900":{"id":"n2189015900","loc":[-85.6376831,41.9564865],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015903":{"id":"n2189015903","loc":[-85.6381161,41.9564851],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015906":{"id":"n2189015906","loc":[-85.6381168,41.9566122],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015937":{"id":"n2189015937","loc":[-85.6364789,41.9590634],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015940":{"id":"n2189015940","loc":[-85.6361137,41.9590672],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015943":{"id":"n2189015943","loc":[-85.6361169,41.9594033],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015945":{"id":"n2189015945","loc":[-85.6363456,41.9594021],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015952":{"id":"n2189015952","loc":[-85.636112,41.958892],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015955":{"id":"n2189015955","loc":[-85.6364757,41.9588894],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015957":{"id":"n2189015957","loc":[-85.6364729,41.9586747],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015958":{"id":"n2189015958","loc":[-85.6361103,41.9586765],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015959":{"id":"n2189015959","loc":[-85.6364719,41.9585562],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015960":{"id":"n2189015960","loc":[-85.6361093,41.958558],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015961":{"id":"n2189015961","loc":[-85.6355494,41.9586403],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015962":{"id":"n2189015962","loc":[-85.635549,41.9584711],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015963":{"id":"n2189015963","loc":[-85.6351831,41.9584715],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015964":{"id":"n2189015964","loc":[-85.6351834,41.9586408],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015966":{"id":"n2189015966","loc":[-85.6359579,41.9586359],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015968":{"id":"n2189015968","loc":[-85.6359561,41.9585465],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015971":{"id":"n2189015971","loc":[-85.6355476,41.9585509],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015974":{"id":"n2189015974","loc":[-85.6359516,41.9592934],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015977":{"id":"n2189015977","loc":[-85.635949,41.9586697],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015980":{"id":"n2189015980","loc":[-85.6351329,41.9586716],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015983":{"id":"n2189015983","loc":[-85.6351318,41.9583949],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015986":{"id":"n2189015986","loc":[-85.6349148,41.9583954],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015989":{"id":"n2189015989","loc":[-85.6349186,41.9592958],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015995":{"id":"n2189015995","loc":[-85.6360173,41.9593286],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015998":{"id":"n2189015998","loc":[-85.6360278,41.9583079],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2114807550":{"id":"n2114807550","loc":[-85.6383392,41.9595404],"version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:15Z","tags":{}},"n2114807551":{"id":"n2114807551","loc":[-85.6375855,41.9616107],"version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:15Z","tags":{}},"n2114807559":{"id":"n2114807559","loc":[-85.6373978,41.9621273],"version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:15Z","tags":{}},"n2114807562":{"id":"n2114807562","loc":[-85.6373361,41.9622609],"version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:15Z","tags":{}},"n2114807563":{"id":"n2114807563","loc":[-85.6376472,41.9613953],"version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:15Z","tags":{}},"n2114807574":{"id":"n2114807574","loc":[-85.636974,41.9627695],"version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:15Z","tags":{}},"n2114807589":{"id":"n2114807589","loc":[-85.6383017,41.9595005],"version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:15Z","tags":{}},"n2114807592":{"id":"n2114807592","loc":[-85.6377169,41.9613494],"version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:15Z","tags":{}},"n2114807595":{"id":"n2114807595","loc":[-85.6371081,41.962574],"version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:15Z","tags":{}},"n2189015934":{"id":"n2189015934","loc":[-85.6364855,41.9595098],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"n2189015949":{"id":"n2189015949","loc":[-85.6363466,41.9595105],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:51Z","tags":{}},"w208627244":{"id":"w208627244","version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:54Z","tags":{"highway":"service"},"nodes":["n2189015992","n2189015995","n2189015998"]},"w208627240":{"id":"w208627240","version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:54Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189015961","n2189015971","n2189015962","n2189015963","n2189015964","n2189015961"]},"w17967437":{"id":"w17967437","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:51:44Z","tags":{"highway":"residential","name":"Lyman St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Lyman","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313234","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185964361","n185984024"]},"w208627237":{"id":"w208627237","version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:54Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189015955","n2189015957","n2189015958","n2189015952","n2189015955"]},"w17967465":{"id":"w17967465","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:51:57Z","tags":{"highway":"residential","name":"W Adams St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Adams","tiger:name_direction_prefix":"W","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312177","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185978394","n185984022","n185964360"]},"w208627228":{"id":"w208627228","version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:54Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189015897","n2189015900","n2189015903","n2189015906","n2189015897"]},"w201484351":{"id":"w201484351","version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:17Z","tags":{"railway":"rail","service":"siding","source":"Bing"},"nodes":["n2114807587","n2114807574","n2114807595","n2114807562","n2114807559","n2114807551","n2114807563","n2114807589","n2114807552"]},"w208627239":{"id":"w208627239","version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:54Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189015957","n2189015959","n2189015960","n2189015958","n2189015957"]},"w208627233":{"id":"w208627233","version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:54Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189015934","n2189015937","n2189015940","n2189015943","n2189015945","n2189015949","n2189015934"]},"w208627241":{"id":"w208627241","version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:54Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189015961","n2189015966","n2189015968","n2189015971","n2189015961"]},"w17967970":{"id":"w17967970","version":"1","changeset":"402580","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:55:20Z","tags":{"highway":"residential","name":"Adams St","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Adams","tiger:name_type":"St","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312180","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185975351","n185978394"]},"w208627235":{"id":"w208627235","version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:54Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189015940","n2189015952","n2189015955","n2189015937","n2189015940"]},"w17965468":{"id":"w17965468","version":"2","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:56Z","tags":{"highway":"residential","name":"Armstrong Blvd","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Armstrong","tiger:name_type":"Blvd","tiger:reviewed":"no"},"nodes":["n185967917","n2189015998","n185967918","n185964362","n185952166"]},"w201484346":{"id":"w201484346","version":"1","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:16Z","tags":{"railway":"rail","service":"siding","source":"Bing"},"nodes":["n2114807551","n2114807592","n2114807550","n2114807591"]},"w208627242":{"id":"w208627242","version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:54Z","tags":{"amenity":"parking","area":"yes"},"nodes":["n2189015974","n2189015977","n2189015980","n2189015983","n2189015986","n2189015989","n2189015974"]},"w208627216":{"id":"w208627216","version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:53Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189015731","n2189015734","n2189015737","n2189015738","n2189015731"]},"n185984309":{"id":"n185984309","loc":[-85.631421,41.961494],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:11:55Z","tags":{}},"n185987987":{"id":"n185987987","loc":[-85.631456,41.960673],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:13:29Z","tags":{}},"n185965397":{"id":"n185965397","loc":[-85.634603,41.959838],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:52Z","tags":{}},"w17965196":{"id":"w17965196","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:35:10Z","tags":{"highway":"residential","name":"Burke Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Burke","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15312145","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185965395","n185965397","n185965399"]},"w17967215":{"id":"w17967215","version":"2","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:56Z","tags":{"highway":"residential","name":"Kellogg Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Kellogg","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185968114","n185984309","n185967440","n185978402"]},"w17967597":{"id":"w17967597","version":"2","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:20Z","tags":{"highway":"residential","name":"Barnard Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Barnard","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185968112","n185987987","n185967438","n185978399"]},"n394490857":{"id":"n394490857","loc":[-85.633952,41.960664],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:08:00Z","tags":{}},"n394490858":{"id":"n394490858","loc":[-85.633938,41.960227],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:08:00Z","tags":{}},"n394490859":{"id":"n394490859","loc":[-85.634794,41.960212],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:08:01Z","tags":{}},"n394490860":{"id":"n394490860","loc":[-85.634815,41.960662],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:08:01Z","tags":{}},"n394490861":{"id":"n394490861","loc":[-85.634103,41.961268],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:08:01Z","tags":{}},"n394490862":{"id":"n394490862","loc":[-85.634103,41.961001],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:08:01Z","tags":{}},"n394490863":{"id":"n394490863","loc":[-85.634504,41.961003],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:08:01Z","tags":{}},"n394490864":{"id":"n394490864","loc":[-85.634561,41.961269],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:08:01Z","tags":{}},"n1057629869":{"id":"n1057629869","loc":[-85.6382599,41.9612134],"version":"1","changeset":"6740055","user":"42429","uid":"42429","visible":"true","timestamp":"2010-12-22T21:14:10Z","tags":{}},"n1057629937":{"id":"n1057629937","loc":[-85.6380035,41.9616137],"version":"1","changeset":"6740055","user":"42429","uid":"42429","visible":"true","timestamp":"2010-12-22T21:14:11Z","tags":{}},"n2189016014":{"id":"n2189016014","loc":[-85.6360365,41.9626496],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:52Z","tags":{}},"n2189016017":{"id":"n2189016017","loc":[-85.6360374,41.9623228],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:52Z","tags":{}},"n2189016020":{"id":"n2189016020","loc":[-85.6367557,41.9623239],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:52Z","tags":{}},"n2189016022":{"id":"n2189016022","loc":[-85.6367566,41.9619919],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:52Z","tags":{}},"n2189016025":{"id":"n2189016025","loc":[-85.6351794,41.9619893],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:52Z","tags":{}},"n2189016028":{"id":"n2189016028","loc":[-85.6351788,41.9622011],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:52Z","tags":{}},"n2189016031":{"id":"n2189016031","loc":[-85.6350855,41.9622009],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:52Z","tags":{}},"n2189016034":{"id":"n2189016034","loc":[-85.6350845,41.962527],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:52Z","tags":{}},"n2189016037":{"id":"n2189016037","loc":[-85.6352732,41.9625273],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:52Z","tags":{}},"n2189016039":{"id":"n2189016039","loc":[-85.6352738,41.9623178],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:52Z","tags":{}},"n2189016042":{"id":"n2189016042","loc":[-85.6357712,41.9623186],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:52Z","tags":{}},"n2189016044":{"id":"n2189016044","loc":[-85.6357702,41.9626492],"version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:52Z","tags":{}},"n1057629880":{"id":"n1057629880","loc":[-85.638817,41.9619017],"version":"1","changeset":"6740055","user":"42429","uid":"42429","visible":"true","timestamp":"2010-12-22T21:14:10Z","tags":{}},"n1057629923":{"id":"n1057629923","loc":[-85.6390733,41.9615014],"version":"1","changeset":"6740055","user":"42429","uid":"42429","visible":"true","timestamp":"2010-12-22T21:14:11Z","tags":{}},"w91092312":{"id":"w91092312","version":"1","changeset":"6740055","user":"42429","uid":"42429","visible":"true","timestamp":"2010-12-22T21:14:12Z","tags":{"power":"station"},"nodes":["n1057629923","n1057629869","n1057629937","n1057629880","n1057629923"]},"w34369826":{"id":"w34369826","version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:08:01Z","tags":{"admin_level":"8","boundary":"administrative","created_by":"polyshp2osm-multipoly","source":"TIGER/Line® 2008 Place Shapefiles (http://www.census.gov/geo/www/tiger/)"},"nodes":["n394490861","n394490862","n394490863","n394490864","n394490861"]},"w34369825":{"id":"w34369825","version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:08:01Z","tags":{"admin_level":"8","boundary":"administrative","created_by":"polyshp2osm-multipoly","source":"TIGER/Line® 2008 Place Shapefiles (http://www.census.gov/geo/www/tiger/)"},"nodes":["n394490857","n394490858","n394490859","n394490860","n394490857"]},"w208627248":{"id":"w208627248","version":"1","changeset":"15276188","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-06T21:42:54Z","tags":{"area":"yes","building":"yes"},"nodes":["n2189016014","n2189016017","n2189016020","n2189016022","n2189016025","n2189016028","n2189016031","n2189016034","n2189016037","n2189016039","n2189016042","n2189016044","n2189016014"]},"n394490766":{"id":"n394490766","loc":[-85.616777,41.955642],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:58Z","tags":{}},"n394490768":{"id":"n394490768","loc":[-85.617239,41.955644],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:58Z","tags":{}},"n394490792":{"id":"n394490792","loc":[-85.619034,41.95543],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:58Z","tags":{}},"n185972055":{"id":"n185972055","loc":[-85.6185905,41.9568211],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:04Z","tags":{}},"n185972057":{"id":"n185972057","loc":[-85.6186688,41.9570086],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:04Z","tags":{}},"n185972059":{"id":"n185972059","loc":[-85.6186924,41.9581453],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:04Z","tags":{}},"n185972060":{"id":"n185972060","loc":[-85.6187082,41.9588211],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:04Z","tags":{"highway":"turning_circle","source":"Bing"}},"n1819790724":{"id":"n1819790724","loc":[-85.6182155,41.9555703],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:57Z","tags":{}},"n1819790735":{"id":"n1819790735","loc":[-85.6184059,41.9566188],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:58Z","tags":{}},"n1819790799":{"id":"n1819790799","loc":[-85.6182372,41.9563771],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790896":{"id":"n1819790896","loc":[-85.6181431,41.9557227],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:01Z","tags":{}},"n185971405":{"id":"n185971405","loc":[-85.6186766,41.9577468],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:04Z","tags":{}},"n185971565":{"id":"n185971565","loc":[-85.6181613,41.9560879],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:04Z","tags":{}},"n185967985":{"id":"n185967985","loc":[-85.6186798,41.9585791],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:04Z","tags":{}},"n185955753":{"id":"n185955753","loc":[-85.620773,41.9555854],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:04Z","tags":{}},"n185955755":{"id":"n185955755","loc":[-85.6212652,41.9559891],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:04Z","tags":{}},"n185955748":{"id":"n185955748","loc":[-85.620722,41.954858],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:56:55Z","tags":{}},"n185955751":{"id":"n185955751","loc":[-85.6206912,41.955367],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:04Z","tags":{}},"n185967987":{"id":"n185967987","loc":[-85.6159351,41.9585809],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:04Z","tags":{}},"n185971407":{"id":"n185971407","loc":[-85.6159142,41.9577578],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:04Z","tags":{}},"n185971570":{"id":"n185971570","loc":[-85.6162248,41.95603],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:04Z","tags":{}},"n185971572":{"id":"n185971572","loc":[-85.6160402,41.9560749],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:04Z","tags":{}},"n185971574":{"id":"n185971574","loc":[-85.61593,41.956201],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:04Z","tags":{}},"n185981301":{"id":"n185981301","loc":[-85.6158973,41.9581601],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:05Z","tags":{}},"n394490762":{"id":"n394490762","loc":[-85.617193,41.954706],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:58Z","tags":{}},"n394490764":{"id":"n394490764","loc":[-85.616773,41.954737],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:58Z","tags":{}},"n394490787":{"id":"n394490787","loc":[-85.618972,41.954737],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:58Z","tags":{}},"n394490790":{"id":"n394490790","loc":[-85.619046,41.954929],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:58Z","tags":{}},"n394490794":{"id":"n394490794","loc":[-85.619922,41.955296],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:58Z","tags":{}},"n394490796":{"id":"n394490796","loc":[-85.61991,41.95501],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:58Z","tags":{}},"n394490798":{"id":"n394490798","loc":[-85.619974,41.954751],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:58Z","tags":{}},"n1819790677":{"id":"n1819790677","loc":[-85.6187031,41.9550522],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790787":{"id":"n1819790787","loc":[-85.6186436,41.9552022],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790828":{"id":"n1819790828","loc":[-85.6185127,41.9553393],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:00Z","tags":{}},"w17966857":{"id":"w17966857","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:47:55Z","tags":{"access":"private","highway":"service","name":"Sable River Rd","tiger:cfcc":"A74","tiger:county":"St. Joseph, MI","tiger:name_base":"Sable River","tiger:name_type":"Rd","tiger:reviewed":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15326128","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185972059","n185981301"]},"w34369814":{"id":"w34369814","version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:58Z","tags":{"admin_level":"8","boundary":"administrative","created_by":"polyshp2osm-multipoly","source":"TIGER/Line® 2008 Place Shapefiles (http://www.census.gov/geo/www/tiger/)"},"nodes":["n394490787","n394490790","n394490792","n394490794","n394490796","n394490798","n394490787"]},"w17964176":{"id":"w17964176","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:27:42Z","tags":{"highway":"residential","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15314404","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185955747","n185955748","n185955751","n185955753","n185955755"]},"w17965838":{"id":"w17965838","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:40:09Z","tags":{"access":"private","highway":"service","name":"Pine River Rd","tiger:cfcc":"A74","tiger:county":"St. Joseph, MI","tiger:name_base":"Pine River","tiger:name_type":"Rd","tiger:reviewed":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15326123","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185971405","n185971407"]},"w17965476":{"id":"w17965476","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:37:16Z","tags":{"access":"private","highway":"service","name":"Raisin River Rd","tiger:cfcc":"A74","tiger:county":"St. Joseph, MI","tiger:name_base":"Raisin River","tiger:name_type":"Rd","tiger:reviewed":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15326112","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185967985","n185967987"]},"w17965913":{"id":"w17965913","version":"2","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:06Z","tags":{"access":"private","highway":"service","name":"Shiawassee River Rd","tiger:cfcc":"A74","tiger:county":"St. Joseph, MI","tiger:name_base":"Shiawassee River","tiger:name_type":"Rd","tiger:reviewed":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15326124:15326125:15326111:15326113:15326119","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185972054","n1819790677","n1819790787","n1819790828","n1819790724","n1819790896","n185971565","n1819790799","n1819790735","n185972055","n185972057","n185971405","n185972059","n185967985","n185972060"]},"w34369811":{"id":"w34369811","version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:58Z","tags":{"admin_level":"8","boundary":"administrative","created_by":"polyshp2osm-multipoly","source":"TIGER/Line® 2008 Place Shapefiles (http://www.census.gov/geo/www/tiger/)"},"nodes":["n394490762","n394490764","n394490766","n394490768","n394490762"]},"w17965854":{"id":"w17965854","version":"2","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:06Z","tags":{"access":"private","highway":"service","name":"Sturgeon River Rd","tiger:cfcc":"A74","tiger:county":"St. Joseph, MI","tiger:name_base":"Sturgeon River","tiger:name_type":"Rd","tiger:reviewed":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15326117","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185971565","n185971570","n185971572","n185971574"]},"n2139795769":{"id":"n2139795769","loc":[-85.6250804,41.9608796],"version":"1","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:47:55Z","tags":{}},"n2139795770":{"id":"n2139795770","loc":[-85.6250315,41.9613684],"version":"1","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:47:55Z","tags":{}},"n2139795771":{"id":"n2139795771","loc":[-85.6249671,41.9614362],"version":"1","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:47:55Z","tags":{}},"n2139795772":{"id":"n2139795772","loc":[-85.6249698,41.961522],"version":"1","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:47:55Z","tags":{}},"n2139795773":{"id":"n2139795773","loc":[-85.6250798,41.9615838],"version":"1","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:47:55Z","tags":{}},"n2139795774":{"id":"n2139795774","loc":[-85.6252273,41.9615639],"version":"1","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:47:56Z","tags":{}},"n2139795775":{"id":"n2139795775","loc":[-85.6252863,41.9614622],"version":"1","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:47:56Z","tags":{}},"n2139795776":{"id":"n2139795776","loc":[-85.6252273,41.9613764],"version":"1","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:47:56Z","tags":{}},"n2139795777":{"id":"n2139795777","loc":[-85.6251227,41.9613525],"version":"1","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:47:56Z","tags":{}},"n2139795778":{"id":"n2139795778","loc":[-85.6249564,41.9612527],"version":"1","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:47:56Z","tags":{}},"n2139795779":{"id":"n2139795779","loc":[-85.6249846,41.9610254],"version":"1","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:47:56Z","tags":{}},"n2139795780":{"id":"n2139795780","loc":[-85.6266725,41.9599647],"version":"1","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:47:56Z","tags":{}},"n2139795781":{"id":"n2139795781","loc":[-85.6259162,41.9599711],"version":"1","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:47:56Z","tags":{}},"n2139795782":{"id":"n2139795782","loc":[-85.6257185,41.960019],"version":"1","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:47:56Z","tags":{}},"n2139795783":{"id":"n2139795783","loc":[-85.6255509,41.9601213],"version":"1","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:47:56Z","tags":{}},"n185963539":{"id":"n185963539","loc":[-85.615718,41.983893],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:00:58Z","tags":{}},"n185964418":{"id":"n185964418","loc":[-85.616626,42.049512],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:23Z","tags":{}},"n185966614":{"id":"n185966614","loc":[-85.615514,41.976603],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:41Z","tags":{}},"n185966635":{"id":"n185966635","loc":[-85.616118,42.013017],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:42Z","tags":{}},"n185969040":{"id":"n185969040","loc":[-85.615632,41.972357],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:03:45Z","tags":{}},"n185969070":{"id":"n185969070","loc":[-85.619145,41.967648],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:03:46Z","tags":{}},"n185972156":{"id":"n185972156","loc":[-85.621894,41.963956],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:18Z","tags":{}},"n185972157":{"id":"n185972157","loc":[-85.621806,41.964077],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:18Z","tags":{}},"n185972158":{"id":"n185972158","loc":[-85.620848,41.965341],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:18Z","tags":{}},"n185972159":{"id":"n185972159","loc":[-85.620684,41.965558],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:18Z","tags":{}},"n185972160":{"id":"n185972160","loc":[-85.620621,41.965658],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:18Z","tags":{}},"n185972161":{"id":"n185972161","loc":[-85.617844,41.969359],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:18Z","tags":{}},"n185972162":{"id":"n185972162","loc":[-85.616843,41.97068],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:18Z","tags":{}},"n185972164":{"id":"n185972164","loc":[-85.616714,41.970839],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:18Z","tags":{}},"n185972166":{"id":"n185972166","loc":[-85.615879,41.971969],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:18Z","tags":{}},"n185972168":{"id":"n185972168","loc":[-85.615748,41.972159],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:18Z","tags":{}},"n185972170":{"id":"n185972170","loc":[-85.615589,41.972502],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:18Z","tags":{}},"n185972172":{"id":"n185972172","loc":[-85.615542,41.972733],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:18Z","tags":{}},"n185972175":{"id":"n185972175","loc":[-85.615524,41.972947],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:18Z","tags":{}},"n185972177":{"id":"n185972177","loc":[-85.615512,41.973715],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:18Z","tags":{}},"n185972179":{"id":"n185972179","loc":[-85.615513,41.976496],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:18Z","tags":{}},"n185972180":{"id":"n185972180","loc":[-85.615538,41.977246],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:19Z","tags":{}},"n185972181":{"id":"n185972181","loc":[-85.61558,41.982139],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:19Z","tags":{}},"n185972184":{"id":"n185972184","loc":[-85.61557,41.983317],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:19Z","tags":{}},"n185972186":{"id":"n185972186","loc":[-85.615591,41.983463],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:19Z","tags":{}},"n185972188":{"id":"n185972188","loc":[-85.615763,41.984146],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:19Z","tags":{}},"n185972190":{"id":"n185972190","loc":[-85.615814,41.98435],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:19Z","tags":{}},"n185972192":{"id":"n185972192","loc":[-85.615965,41.998453],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:19Z","tags":{}},"n185972194":{"id":"n185972194","loc":[-85.615982,42.001237],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:19Z","tags":{}},"n185972195":{"id":"n185972195","loc":[-85.616055,42.00555],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:19Z","tags":{}},"n185972197":{"id":"n185972197","loc":[-85.616134,42.014887],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:19Z","tags":{}},"n185972199":{"id":"n185972199","loc":[-85.616177,42.018465],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:19Z","tags":{}},"n185972201":{"id":"n185972201","loc":[-85.616298,42.027627],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:19Z","tags":{}},"n185972203":{"id":"n185972203","loc":[-85.616513,42.042212],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:05:19Z","tags":{}},"w203968015":{"id":"w203968015","version":"1","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:47:58Z","tags":{"highway":"residential"},"nodes":["n2139795768","n2139795769"]},"w17965932":{"id":"w17965932","version":"2","changeset":"14531170","user":"bot-mode","uid":"451693","visible":"true","timestamp":"2013-01-04T21:15:18Z","tags":{"highway":"residential","name":"Buckhorn Road","name_1":"County Highway 122","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Buckhorn","tiger:name_base_1":"County Highway 122","tiger:name_type":"Rd","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185972155","n185972156","n185972157","n185972158","n185972159","n185972160","n185969070","n185972161","n185972162","n185972164","n185972166","n185972168","n185969040","n185972170","n185972172","n185972175","n185972177","n185972179","n185966614","n185972180","n185972181","n185972184","n185972186","n185963539","n185972188","n185972190","n185972192","n185972194","n185972195","n185966635","n185972197","n185972199","n185972201","n185972203","n185964418"]},"w203968016":{"id":"w203968016","version":"1","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:47:58Z","tags":{"highway":"residential","name":"New Jersey Court"},"nodes":["n2139795770","n2139795771","n2139795772","n2139795773","n2139795774","n2139795775","n2139795776","n2139795777","n2139795770","n2139795778","n2139795779","n2139795769"]},"w203968017":{"id":"w203968017","version":"1","changeset":"14892219","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-03T07:47:58Z","tags":{"highway":"residential","name":"Oklahoma Drive"},"nodes":["n2139795780","n2139795781","n2139795782","n2139795783","n2139795769"]},"n1819790528":{"id":"n1819790528","loc":[-85.6184827,41.960025],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:53Z","tags":{}},"n1819790530":{"id":"n1819790530","loc":[-85.6168626,41.9605834],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:53Z","tags":{}},"n1819790534":{"id":"n1819790534","loc":[-85.6197379,41.9617163],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:53Z","tags":{}},"n1819790541":{"id":"n1819790541","loc":[-85.6198881,41.9620833],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:53Z","tags":{}},"n1819790543":{"id":"n1819790543","loc":[-85.619695,41.9619397],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:53Z","tags":{}},"n1819790547":{"id":"n1819790547","loc":[-85.6190298,41.9609504],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:53Z","tags":{}},"n1819790555":{"id":"n1819790555","loc":[-85.6180471,41.9609788],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:53Z","tags":{}},"n1819790559":{"id":"n1819790559","loc":[-85.6203817,41.9605436],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790583":{"id":"n1819790583","loc":[-85.6201564,41.9603282],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790590":{"id":"n1819790590","loc":[-85.617045,41.9598894],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790609":{"id":"n1819790609","loc":[-85.6177638,41.9598495],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:55Z","tags":{}},"n1819790618":{"id":"n1819790618","loc":[-85.6195234,41.9610143],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:55Z","tags":{}},"n1819790642":{"id":"n1819790642","loc":[-85.6181179,41.9627933],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790659":{"id":"n1819790659","loc":[-85.6174634,41.962897],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790665":{"id":"n1819790665","loc":[-85.6170343,41.9630885],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790674":{"id":"n1819790674","loc":[-85.6194697,41.9601925],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790685":{"id":"n1819790685","loc":[-85.6207722,41.9610665],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:57Z","tags":{}},"n1819790687":{"id":"n1819790687","loc":[-85.6202315,41.9622109],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:57Z","tags":{}},"n1819790697":{"id":"n1819790697","loc":[-85.6184505,41.9624662],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:57Z","tags":{}},"n1819790726":{"id":"n1819790726","loc":[-85.6178926,41.9628492],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:57Z","tags":{}},"n1819790738":{"id":"n1819790738","loc":[-85.6173347,41.9598016],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:58Z","tags":{}},"n1819790762":{"id":"n1819790762","loc":[-85.6186221,41.9609105],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:58Z","tags":{}},"n1819790774":{"id":"n1819790774","loc":[-85.6175922,41.9608308],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790781":{"id":"n1819790781","loc":[-85.6167768,41.9633198],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790796":{"id":"n1819790796","loc":[-85.619856,41.961461],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790811":{"id":"n1819790811","loc":[-85.6208215,41.9620195],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:00Z","tags":{}},"n1819790833":{"id":"n1819790833","loc":[-85.618311,41.9612536],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:00Z","tags":{}},"n1819790854":{"id":"n1819790854","loc":[-85.6183646,41.9626417],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:00Z","tags":{}},"n1819790863":{"id":"n1819790863","loc":[-85.6204997,41.9608547],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:01Z","tags":{}},"n1819790867":{"id":"n1819790867","loc":[-85.6184934,41.9621391],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:01Z","tags":{}},"n1819790877":{"id":"n1819790877","loc":[-85.6206928,41.9621152],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:01Z","tags":{}},"n1819790881":{"id":"n1819790881","loc":[-85.6170879,41.960735],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:01Z","tags":{}},"n1819790891":{"id":"n1819790891","loc":[-85.6168304,41.9601207],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:01Z","tags":{}},"n1819790898":{"id":"n1819790898","loc":[-85.619813,41.9612297],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:01Z","tags":{}},"n1819790909":{"id":"n1819790909","loc":[-85.6167982,41.960376],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:01Z","tags":{}},"n1819790912":{"id":"n1819790912","loc":[-85.6205855,41.9610462],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:01Z","tags":{}},"n1819790544":{"id":"n1819790544","loc":[-85.612968,41.9707781],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:53Z","tags":{}},"n1819790549":{"id":"n1819790549","loc":[-85.614395,41.9697172],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:53Z","tags":{}},"n1819790552":{"id":"n1819790552","loc":[-85.6180535,41.9655536],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:53Z","tags":{}},"n1819790554":{"id":"n1819790554","loc":[-85.6111227,41.9703713],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:53Z","tags":{}},"n1819790560":{"id":"n1819790560","loc":[-85.6112729,41.9701958],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790563":{"id":"n1819790563","loc":[-85.6137512,41.9689917],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790564":{"id":"n1819790564","loc":[-85.6181072,41.9659205],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790595":{"id":"n1819790595","loc":[-85.6170021,41.9666863],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790605":{"id":"n1819790605","loc":[-85.6168948,41.9644527],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790606":{"id":"n1819790606","loc":[-85.6128071,41.9701081],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790607":{"id":"n1819790607","loc":[-85.6129251,41.9704032],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:54Z","tags":{}},"n1819790612":{"id":"n1819790612","loc":[-85.6177638,41.9663912],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:55Z","tags":{}},"n1819790615":{"id":"n1819790615","loc":[-85.6152533,41.9670373],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:55Z","tags":{}},"n1819790622":{"id":"n1819790622","loc":[-85.6146739,41.9673804],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:55Z","tags":{}},"n1819790623":{"id":"n1819790623","loc":[-85.6180428,41.9661838],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:55Z","tags":{}},"n1819790625":{"id":"n1819790625","loc":[-85.6172918,41.9646202],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:55Z","tags":{}},"n1819790645":{"id":"n1819790645","loc":[-85.6178067,41.965043],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790647":{"id":"n1819790647","loc":[-85.6143306,41.9712488],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790649":{"id":"n1819790649","loc":[-85.6147383,41.9707702],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790654":{"id":"n1819790654","loc":[-85.6157361,41.9668459],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790657":{"id":"n1819790657","loc":[-85.6145666,41.9710733],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790668":{"id":"n1819790668","loc":[-85.6166909,41.9642692],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790671":{"id":"n1819790671","loc":[-85.6141482,41.9696538],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790679":{"id":"n1819790679","loc":[-85.6148349,41.9705388],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:56Z","tags":{}},"n1819790686":{"id":"n1819790686","loc":[-85.6139551,41.9695501],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:57Z","tags":{}},"n1819790696":{"id":"n1819790696","loc":[-85.6119703,41.9699087],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:57Z","tags":{}},"n1819790704":{"id":"n1819790704","loc":[-85.6140731,41.9684174],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:57Z","tags":{}},"n1819790706":{"id":"n1819790706","loc":[-85.6124745,41.9699246],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:57Z","tags":{}},"n1819790718":{"id":"n1819790718","loc":[-85.6165407,41.9636868],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:57Z","tags":{}},"n1819790720":{"id":"n1819790720","loc":[-85.61388,41.9687365],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:57Z","tags":{}},"n1819790731":{"id":"n1819790731","loc":[-85.6165193,41.9639421],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:58Z","tags":{}},"n1819790739":{"id":"n1819790739","loc":[-85.6146739,41.9699964],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:58Z","tags":{}},"n1819790753":{"id":"n1819790753","loc":[-85.6173883,41.9665747],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:58Z","tags":{}},"n1819790760":{"id":"n1819790760","loc":[-85.6133221,41.9712089],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:58Z","tags":{}},"n1819790767":{"id":"n1819790767","loc":[-85.6116698,41.9699246],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790779":{"id":"n1819790779","loc":[-85.6130753,41.9710573],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790791":{"id":"n1819790791","loc":[-85.6137083,41.9692869],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790795":{"id":"n1819790795","loc":[-85.6141482,41.9679627],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790798":{"id":"n1819790798","loc":[-85.6137727,41.9694305],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:58:59Z","tags":{}},"n1819790836":{"id":"n1819790836","loc":[-85.6143842,41.9676037],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:00Z","tags":{}},"n1819790915":{"id":"n1819790915","loc":[-85.6148456,41.9702756],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:01Z","tags":{}},"n1819790926":{"id":"n1819790926","loc":[-85.6138371,41.9713525],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:02Z","tags":{}},"n1819790927":{"id":"n1819790927","loc":[-85.6141053,41.9713525],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:02Z","tags":{}},"n1819790931":{"id":"n1819790931","loc":[-85.6162832,41.966814],"version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:02Z","tags":{}},"n1821014625":{"id":"n1821014625","loc":[-85.5960611,41.9808498],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:40Z","tags":{}},"n1821014627":{"id":"n1821014627","loc":[-85.5565843,42.010982],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:40Z","tags":{}},"n1821014629":{"id":"n1821014629","loc":[-85.5971541,41.9805808],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:40Z","tags":{}},"n1821014632":{"id":"n1821014632","loc":[-85.6061837,41.9725907],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:40Z","tags":{}},"n1821014633":{"id":"n1821014633","loc":[-85.5247773,42.025766],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:40Z","tags":{}},"n1821014635":{"id":"n1821014635","loc":[-85.5908938,41.9902384],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:40Z","tags":{}},"n1821014636":{"id":"n1821014636","loc":[-85.5917682,41.9860637],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:40Z","tags":{}},"n1821014637":{"id":"n1821014637","loc":[-85.5456556,42.0166797],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:40Z","tags":{}},"n1821014638":{"id":"n1821014638","loc":[-85.5795749,42.0032352],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:40Z","tags":{}},"n1821014639":{"id":"n1821014639","loc":[-85.6103988,41.9723456],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:40Z","tags":{}},"n1821014642":{"id":"n1821014642","loc":[-85.5818816,42.0022466],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:40Z","tags":{}},"n1821014643":{"id":"n1821014643","loc":[-85.5570604,42.0091586],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:41Z","tags":{}},"n1821014644":{"id":"n1821014644","loc":[-85.5952886,41.9803792],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:41Z","tags":{}},"n1821014645":{"id":"n1821014645","loc":[-85.5780366,42.0040343],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:41Z","tags":{}},"n1821014646":{"id":"n1821014646","loc":[-85.6050505,41.9751971],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:41Z","tags":{}},"n1821014647":{"id":"n1821014647","loc":[-85.5854435,41.9946162],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:41Z","tags":{}},"n1821014648":{"id":"n1821014648","loc":[-85.5452278,42.0168768],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:41Z","tags":{}},"n1821014649":{"id":"n1821014649","loc":[-85.6023254,41.9780166],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:41Z","tags":{}},"n1821014651":{"id":"n1821014651","loc":[-85.5761899,42.0046783],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:41Z","tags":{}},"n1821014653":{"id":"n1821014653","loc":[-85.5897351,41.9876707],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:41Z","tags":{}},"n1821014657":{"id":"n1821014657","loc":[-85.5963601,41.9808998],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:41Z","tags":{}},"n1821014658":{"id":"n1821014658","loc":[-85.5892952,41.9951983],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:41Z","tags":{}},"n1821014660":{"id":"n1821014660","loc":[-85.5778328,42.0037194],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:41Z","tags":{}},"n1821014661":{"id":"n1821014661","loc":[-85.5541475,42.0125705],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:41Z","tags":{}},"n1821014663":{"id":"n1821014663","loc":[-85.5914047,41.9856469],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:41Z","tags":{}},"n1821014664":{"id":"n1821014664","loc":[-85.6101681,41.9727723],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:41Z","tags":{}},"n1821014665":{"id":"n1821014665","loc":[-85.5910172,41.9854696],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:41Z","tags":{}},"n1821014666":{"id":"n1821014666","loc":[-85.5398688,42.0187699],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:41Z","tags":{}},"n1821014667":{"id":"n1821014667","loc":[-85.5218752,42.0282884],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:41Z","tags":{}},"n1821014668":{"id":"n1821014668","loc":[-85.5159582,42.0329384],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:41Z","tags":{}},"n1821014669":{"id":"n1821014669","loc":[-85.5898102,41.9847319],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:41Z","tags":{}},"n1821014670":{"id":"n1821014670","loc":[-85.5734809,42.0066235],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:41Z","tags":{}},"n1821014671":{"id":"n1821014671","loc":[-85.5922939,41.980852],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:41Z","tags":{}},"n1821014672":{"id":"n1821014672","loc":[-85.6023629,41.9781163],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:41Z","tags":{}},"n1821014674":{"id":"n1821014674","loc":[-85.5409953,42.0191724],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:42Z","tags":{}},"n1821014676":{"id":"n1821014676","loc":[-85.584435,41.9949909],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:42Z","tags":{}},"n1821014677":{"id":"n1821014677","loc":[-85.5972399,41.9783835],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:42Z","tags":{}},"n1821014678":{"id":"n1821014678","loc":[-85.5616738,42.0071337],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:42Z","tags":{}},"n1821014681":{"id":"n1821014681","loc":[-85.5202994,42.0310755],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:42Z","tags":{}},"n1821014682":{"id":"n1821014682","loc":[-85.5915912,41.9857767],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:42Z","tags":{}},"n1821014684":{"id":"n1821014684","loc":[-85.6022288,41.977897],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:42Z","tags":{}},"n1821014687":{"id":"n1821014687","loc":[-85.5933024,41.9846362],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:42Z","tags":{}},"n1821014688":{"id":"n1821014688","loc":[-85.5846871,41.9956169],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:42Z","tags":{}},"n1821014689":{"id":"n1821014689","loc":[-85.5898209,41.99037],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:42Z","tags":{}},"n1821014691":{"id":"n1821014691","loc":[-85.5448939,42.0149261],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:42Z","tags":{}},"n1821014692":{"id":"n1821014692","loc":[-85.5977763,41.9786348],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:42Z","tags":{}},"n1821014694":{"id":"n1821014694","loc":[-85.5767706,42.0034523],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:42Z","tags":{}},"n1821014695":{"id":"n1821014695","loc":[-85.6103559,41.9726766],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:43Z","tags":{}},"n1821014697":{"id":"n1821014697","loc":[-85.5922134,41.9809876],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:43Z","tags":{}},"n1821014698":{"id":"n1821014698","loc":[-85.5935277,41.9831728],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:43Z","tags":{}},"n1821014700":{"id":"n1821014700","loc":[-85.5674674,42.0078273],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:43Z","tags":{}},"n1821014703":{"id":"n1821014703","loc":[-85.6021,41.9778053],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:43Z","tags":{}},"n1821014704":{"id":"n1821014704","loc":[-85.5756763,42.0053737],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:43Z","tags":{}},"n1821014705":{"id":"n1821014705","loc":[-85.5887695,41.9895207],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:43Z","tags":{}},"n1821014707":{"id":"n1821014707","loc":[-85.6061073,41.9746866],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:43Z","tags":{}},"n1821014708":{"id":"n1821014708","loc":[-85.6033446,41.9751692],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:43Z","tags":{}},"n1821014710":{"id":"n1821014710","loc":[-85.5180986,42.0322332],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:43Z","tags":{}},"n1821014711":{"id":"n1821014711","loc":[-85.543365,42.0163569],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:43Z","tags":{}},"n1821014712":{"id":"n1821014712","loc":[-85.6030656,41.9753646],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:43Z","tags":{}},"n1821014713":{"id":"n1821014713","loc":[-85.6104417,41.9704792],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:43Z","tags":{}},"n1821014714":{"id":"n1821014714","loc":[-85.5205716,42.030998],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:43Z","tags":{}},"n1821014716":{"id":"n1821014716","loc":[-85.516382,42.032536],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:43Z","tags":{}},"n1821014717":{"id":"n1821014717","loc":[-85.5932863,41.9820882],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:43Z","tags":{}},"n1821014718":{"id":"n1821014718","loc":[-85.5361928,42.0194974],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:43Z","tags":{}},"n1821014720":{"id":"n1821014720","loc":[-85.6011613,41.9773586],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:43Z","tags":{}},"n1821014721":{"id":"n1821014721","loc":[-85.554287,42.0109124],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:43Z","tags":{}},"n1821014722":{"id":"n1821014722","loc":[-85.5577524,42.0103425],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:43Z","tags":{}},"n1821014725":{"id":"n1821014725","loc":[-85.5867256,41.9921004],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:44Z","tags":{}},"n1821014726":{"id":"n1821014726","loc":[-85.5856045,41.9968807],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:44Z","tags":{}},"n1821014727":{"id":"n1821014727","loc":[-85.5545445,42.0106454],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:44Z","tags":{}},"n1821014728":{"id":"n1821014728","loc":[-85.5923797,41.9842534],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:44Z","tags":{}},"n1821014729":{"id":"n1821014729","loc":[-85.5696346,42.0081462],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:44Z","tags":{}},"n1821014730":{"id":"n1821014730","loc":[-85.5998322,41.9786884],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:44Z","tags":{}},"n1821014735":{"id":"n1821014735","loc":[-85.5337426,42.0218266],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:44Z","tags":{}},"n1821014736":{"id":"n1821014736","loc":[-85.5847944,41.994672],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:44Z","tags":{}},"n1821014740":{"id":"n1821014740","loc":[-85.5315271,42.0238669],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:44Z","tags":{}},"n1821014741":{"id":"n1821014741","loc":[-85.5248846,42.027085],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:44Z","tags":{}},"n1821014742":{"id":"n1821014742","loc":[-85.5853376,41.997018],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:44Z","tags":{}},"n1821014743":{"id":"n1821014743","loc":[-85.5894883,41.988811],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:44Z","tags":{}},"n1821014745":{"id":"n1821014745","loc":[-85.6095311,41.9726226],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:44Z","tags":{}},"n1821014746":{"id":"n1821014746","loc":[-85.5531511,42.0133416],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:44Z","tags":{}},"n1821014747":{"id":"n1821014747","loc":[-85.5735882,42.007058],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:44Z","tags":{}},"n1821014749":{"id":"n1821014749","loc":[-85.5428554,42.0164366],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:44Z","tags":{}},"n1821014751":{"id":"n1821014751","loc":[-85.5395255,42.0186304],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:44Z","tags":{}},"n1821014752":{"id":"n1821014752","loc":[-85.571378,42.0083176],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:45Z","tags":{}},"n1821014754":{"id":"n1821014754","loc":[-85.5541918,42.0113925],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:45Z","tags":{}},"n1821014755":{"id":"n1821014755","loc":[-85.5278029,42.0250806],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:45Z","tags":{}},"n1821014756":{"id":"n1821014756","loc":[-85.5936725,41.9827102],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:45Z","tags":{}},"n1821014757":{"id":"n1821014757","loc":[-85.5176266,42.0346677],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:45Z","tags":{}},"n1821014758":{"id":"n1821014758","loc":[-85.6096692,41.9714245],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:45Z","tags":{}},"n1821014759":{"id":"n1821014759","loc":[-85.5770321,42.0034266],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:45Z","tags":{}},"n1821014761":{"id":"n1821014761","loc":[-85.5988921,41.9779369],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:45Z","tags":{}},"n1821014762":{"id":"n1821014762","loc":[-85.5811788,42.0024499],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:45Z","tags":{}},"n1821014763":{"id":"n1821014763","loc":[-85.5154003,42.0381101],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:45Z","tags":{}},"n1821014764":{"id":"n1821014764","loc":[-85.5155827,42.0374089],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:45Z","tags":{}},"n1821014765":{"id":"n1821014765","loc":[-85.5891249,41.9884978],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:45Z","tags":{}},"n1821014766":{"id":"n1821014766","loc":[-85.5313863,42.0238293],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:45Z","tags":{}},"n1821014768":{"id":"n1821014768","loc":[-85.593297,41.9833363],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:45Z","tags":{}},"n1821014769":{"id":"n1821014769","loc":[-85.5849446,41.9957245],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:45Z","tags":{}},"n1821014770":{"id":"n1821014770","loc":[-85.5537774,42.0130847],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:45Z","tags":{}},"n1821014771":{"id":"n1821014771","loc":[-85.6111766,41.9706069],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:45Z","tags":{}},"n1821014772":{"id":"n1821014772","loc":[-85.5585477,42.008989],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:45Z","tags":{}},"n1821014774":{"id":"n1821014774","loc":[-85.5928142,41.9852623],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:46Z","tags":{}},"n1821014777":{"id":"n1821014777","loc":[-85.5891933,41.9882608],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:46Z","tags":{}},"n1821014778":{"id":"n1821014778","loc":[-85.5926909,41.9817532],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:46Z","tags":{}},"n1821014779":{"id":"n1821014779","loc":[-85.5260272,42.0252201],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:46Z","tags":{}},"n1821014781":{"id":"n1821014781","loc":[-85.5894615,41.9950468],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:46Z","tags":{}},"n1821014782":{"id":"n1821014782","loc":[-85.5461063,42.0143242],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:46Z","tags":{}},"n1821014783":{"id":"n1821014783","loc":[-85.5711527,42.0085886],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:46Z","tags":{}},"n1821014784":{"id":"n1821014784","loc":[-85.5329379,42.0218624],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:46Z","tags":{}},"n1821014786":{"id":"n1821014786","loc":[-85.583047,42.0020252],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:46Z","tags":{}},"n1821014787":{"id":"n1821014787","loc":[-85.5758962,42.0054095],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:46Z","tags":{}},"n1821014788":{"id":"n1821014788","loc":[-85.5626354,42.0077733],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:46Z","tags":{}},"n1821014789":{"id":"n1821014789","loc":[-85.6029852,41.9755999],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:46Z","tags":{}},"n1821014790":{"id":"n1821014790","loc":[-85.5892362,41.9886755],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:46Z","tags":{}},"n1821014791":{"id":"n1821014791","loc":[-85.5157597,42.0372017],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:46Z","tags":{}},"n1821014793":{"id":"n1821014793","loc":[-85.6054582,41.9751094],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:46Z","tags":{}},"n1821014794":{"id":"n1821014794","loc":[-85.5986936,41.9778412],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:46Z","tags":{}},"n1821014795":{"id":"n1821014795","loc":[-85.5880775,41.98976],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:46Z","tags":{}},"n1821014796":{"id":"n1821014796","loc":[-85.5858727,41.9963624],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:46Z","tags":{}},"n1821014798":{"id":"n1821014798","loc":[-85.5792543,42.0035958],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:46Z","tags":{}},"n1821014799":{"id":"n1821014799","loc":[-85.5921665,41.9838326],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:46Z","tags":{}},"n1821014801":{"id":"n1821014801","loc":[-85.599214,41.9782599],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:47Z","tags":{}},"n1821014802":{"id":"n1821014802","loc":[-85.5571905,42.0090967],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:47Z","tags":{}},"n1821014803":{"id":"n1821014803","loc":[-85.5426891,42.0173612],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:47Z","tags":{}},"n1821014804":{"id":"n1821014804","loc":[-85.5889626,41.9896404],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:47Z","tags":{}},"n1821014805":{"id":"n1821014805","loc":[-85.5491264,42.0141648],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:47Z","tags":{}},"n1821014806":{"id":"n1821014806","loc":[-85.5618897,42.0072631],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:47Z","tags":{}},"n1821014808":{"id":"n1821014808","loc":[-85.5573501,42.0109802],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:47Z","tags":{}},"n1821014809":{"id":"n1821014809","loc":[-85.5983463,41.9778031],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:47Z","tags":{}},"n1821014810":{"id":"n1821014810","loc":[-85.5885173,41.9895128],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:47Z","tags":{}},"n1821014811":{"id":"n1821014811","loc":[-85.6084998,41.9721143],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:47Z","tags":{}},"n1821014812":{"id":"n1821014812","loc":[-85.5737598,42.0056389],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:47Z","tags":{}},"n1821014814":{"id":"n1821014814","loc":[-85.5542173,42.0118132],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:47Z","tags":{}},"n1821014816":{"id":"n1821014816","loc":[-85.5277868,42.024451],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:47Z","tags":{}},"n1821014817":{"id":"n1821014817","loc":[-85.5403999,42.0191724],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:47Z","tags":{}},"n1821014819":{"id":"n1821014819","loc":[-85.5983879,41.9791452],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:47Z","tags":{}},"n1821014820":{"id":"n1821014820","loc":[-85.5891302,41.9897578],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:47Z","tags":{}},"n1821014822":{"id":"n1821014822","loc":[-85.5930731,41.9805108],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:47Z","tags":{}},"n1821014824":{"id":"n1821014824","loc":[-85.515395,42.0378471],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:47Z","tags":{}},"n1821014825":{"id":"n1821014825","loc":[-85.5352755,42.0205136],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:47Z","tags":{}},"n1821014826":{"id":"n1821014826","loc":[-85.5502744,42.0133398],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:47Z","tags":{}},"n1821014828":{"id":"n1821014828","loc":[-85.5701295,42.0088256],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:48Z","tags":{}},"n1821014830":{"id":"n1821014830","loc":[-85.5888929,41.9953099],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:48Z","tags":{}},"n1821014832":{"id":"n1821014832","loc":[-85.5880077,41.9901547],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:48Z","tags":{}},"n1821014833":{"id":"n1821014833","loc":[-85.5451192,42.0157072],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:48Z","tags":{}},"n1821014834":{"id":"n1821014834","loc":[-85.6096478,41.9711932],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:48Z","tags":{}},"n1821014835":{"id":"n1821014835","loc":[-85.5806424,42.0026532],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:48Z","tags":{}},"n1821014836":{"id":"n1821014836","loc":[-85.5911674,41.9868732],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:48Z","tags":{}},"n1821014838":{"id":"n1821014838","loc":[-85.5930302,41.9836571],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:48Z","tags":{}},"n1821014839":{"id":"n1821014839","loc":[-85.588925,41.9938148],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:48Z","tags":{}},"n1821014840":{"id":"n1821014840","loc":[-85.6111874,41.9705311],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:48Z","tags":{}},"n1821014841":{"id":"n1821014841","loc":[-85.5680843,42.0075842],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:48Z","tags":{}},"n1821014842":{"id":"n1821014842","loc":[-85.6012793,41.9775062],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:48Z","tags":{}},"n1821014843":{"id":"n1821014843","loc":[-85.5855562,41.9989777],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:48Z","tags":{}},"n1821014844":{"id":"n1821014844","loc":[-85.5506137,42.0131662],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:48Z","tags":{}},"n1821014845":{"id":"n1821014845","loc":[-85.5270049,42.025457],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:48Z","tags":{}},"n1821014846":{"id":"n1821014846","loc":[-85.5257054,42.025244],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:48Z","tags":{}},"n1821014847":{"id":"n1821014847","loc":[-85.6011184,41.9771832],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:48Z","tags":{}},"n1821014848":{"id":"n1821014848","loc":[-85.515534,42.0389234],"version":"2","changeset":"15306911","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-09T19:57:21Z","tags":{}},"n1821014850":{"id":"n1821014850","loc":[-85.5847032,42.0010347],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:48Z","tags":{}},"n1821014853":{"id":"n1821014853","loc":[-85.5361499,42.019063],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:49Z","tags":{}},"n1821014854":{"id":"n1821014854","loc":[-85.5439176,42.0165721],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:49Z","tags":{}},"n1821014855":{"id":"n1821014855","loc":[-85.5838825,42.0017284],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:49Z","tags":{}},"n1821014857":{"id":"n1821014857","loc":[-85.5542173,42.0122317],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:49Z","tags":{}},"n1821014859":{"id":"n1821014859","loc":[-85.5708201,42.0089195],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:49Z","tags":{}},"n1821014860":{"id":"n1821014860","loc":[-85.5844833,41.9954415],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:49Z","tags":{}},"n1821014862":{"id":"n1821014862","loc":[-85.5223204,42.0295396],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:49Z","tags":{}},"n1821014863":{"id":"n1821014863","loc":[-85.5777898,42.0035918],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:49Z","tags":{}},"n1821014864":{"id":"n1821014864","loc":[-85.591044,41.9898078],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:49Z","tags":{}},"n1821014865":{"id":"n1821014865","loc":[-85.5973204,41.980182],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:49Z","tags":{}},"n1821014866":{"id":"n1821014866","loc":[-85.5699578,42.0085825],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:49Z","tags":{}},"n1821014867":{"id":"n1821014867","loc":[-85.5210598,42.0305278],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:49Z","tags":{}},"n1821014868":{"id":"n1821014868","loc":[-85.5929108,41.9819008],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:49Z","tags":{}},"n1821014869":{"id":"n1821014869","loc":[-85.5279799,42.0242995],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:49Z","tags":{}},"n1821014870":{"id":"n1821014870","loc":[-85.5196114,42.0320539],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:49Z","tags":{}},"n1821014871":{"id":"n1821014871","loc":[-85.5785449,42.0040883],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:49Z","tags":{}},"n1821014872":{"id":"n1821014872","loc":[-85.588292,41.9895766],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:49Z","tags":{}},"n1821014873":{"id":"n1821014873","loc":[-85.5160172,42.0331775],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:49Z","tags":{}},"n1821014874":{"id":"n1821014874","loc":[-85.5688849,42.0077016],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:49Z","tags":{}},"n1821014876":{"id":"n1821014876","loc":[-85.5857976,41.9996036],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:50Z","tags":{}},"n1821014879":{"id":"n1821014879","loc":[-85.5990906,41.9780765],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:50Z","tags":{}},"n1821014881":{"id":"n1821014881","loc":[-85.5483647,42.0144279],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:50Z","tags":{}},"n1821014883":{"id":"n1821014883","loc":[-85.5691209,42.0077972],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:50Z","tags":{}},"n1821014885":{"id":"n1821014885","loc":[-85.6076844,41.9721103],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:50Z","tags":{}},"n1821014886":{"id":"n1821014886","loc":[-85.6015489,41.9766147],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:50Z","tags":{}},"n1821014887":{"id":"n1821014887","loc":[-85.574822,42.0052802],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:50Z","tags":{}},"n1821014888":{"id":"n1821014888","loc":[-85.5880024,41.9899593],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:50Z","tags":{}},"n1821014890":{"id":"n1821014890","loc":[-85.5909421,41.9893772],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:50Z","tags":{}},"n1821014892":{"id":"n1821014892","loc":[-85.5497326,42.0138141],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:50Z","tags":{}},"n1821014893":{"id":"n1821014893","loc":[-85.5167106,42.0357811],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:50Z","tags":{}},"n1821014895":{"id":"n1821014895","loc":[-85.5844404,41.9952501],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:50Z","tags":{}},"n1821014896":{"id":"n1821014896","loc":[-85.5362465,42.0192662],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:50Z","tags":{}},"n1821014898":{"id":"n1821014898","loc":[-85.5906095,41.9889147],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:50Z","tags":{}},"n1821014899":{"id":"n1821014899","loc":[-85.5590667,42.0089354],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:50Z","tags":{}},"n1821014900":{"id":"n1821014900","loc":[-85.5921598,41.9844209],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:50Z","tags":{}},"n1821014902":{"id":"n1821014902","loc":[-85.5778971,42.0039266],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:50Z","tags":{}},"n1821014903":{"id":"n1821014903","loc":[-85.603012,41.9761981],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:51Z","tags":{}},"n1821014904":{"id":"n1821014904","loc":[-85.6108977,41.9706787],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:51Z","tags":{}},"n1821014905":{"id":"n1821014905","loc":[-85.5685738,42.0076139],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:51Z","tags":{}},"n1821014906":{"id":"n1821014906","loc":[-85.5392787,42.0186304],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:51Z","tags":{}},"n1821014907":{"id":"n1821014907","loc":[-85.5227885,42.0274972],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:51Z","tags":{}},"n1821014908":{"id":"n1821014908","loc":[-85.5857547,41.9961431],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:51Z","tags":{}},"n1821014910":{"id":"n1821014910","loc":[-85.5610354,42.0072812],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:51Z","tags":{}},"n1821014911":{"id":"n1821014911","loc":[-85.5209632,42.0308705],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:51Z","tags":{}},"n1821014912":{"id":"n1821014912","loc":[-85.5709757,42.0087959],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:51Z","tags":{}},"n1821014913":{"id":"n1821014913","loc":[-85.59231,41.9839344],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:51Z","tags":{}},"n1821014914":{"id":"n1821014914","loc":[-85.5375245,42.0185865],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:51Z","tags":{}},"n1821014916":{"id":"n1821014916","loc":[-85.5901548,41.9839841],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:51Z","tags":{}},"n1821014917":{"id":"n1821014917","loc":[-85.5611213,42.0086405],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:51Z","tags":{}},"n1821014918":{"id":"n1821014918","loc":[-85.5360426,42.0198122],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:51Z","tags":{}},"n1821014919":{"id":"n1821014919","loc":[-85.5862817,41.9948691],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:51Z","tags":{}},"n1821014921":{"id":"n1821014921","loc":[-85.5469807,42.0144438],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:51Z","tags":{}},"n1821014922":{"id":"n1821014922","loc":[-85.5761309,42.0053838],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:51Z","tags":{}},"n1821014924":{"id":"n1821014924","loc":[-85.516264,42.0332971],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:51Z","tags":{}},"n1821014925":{"id":"n1821014925","loc":[-85.5277224,42.0246661],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:51Z","tags":{}},"n1821014926":{"id":"n1821014926","loc":[-85.5980016,41.9798231],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:51Z","tags":{}},"n1821014928":{"id":"n1821014928","loc":[-85.5924548,41.9806965],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:51Z","tags":{}},"n1821014930":{"id":"n1821014930","loc":[-85.5899121,41.985023],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:52Z","tags":{}},"n1821014931":{"id":"n1821014931","loc":[-85.5706015,42.0089492],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:52Z","tags":{}},"n1821014932":{"id":"n1821014932","loc":[-85.515926,42.033046],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:52Z","tags":{}},"n1821014933":{"id":"n1821014933","loc":[-85.5982377,41.9796796],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:52Z","tags":{}},"n1821014936":{"id":"n1821014936","loc":[-85.5475721,42.0145253],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:52Z","tags":{}},"n1821014938":{"id":"n1821014938","loc":[-85.5895701,41.9902323],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:52Z","tags":{}},"n1821014939":{"id":"n1821014939","loc":[-85.6030495,41.9759947],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:52Z","tags":{}},"n1821014942":{"id":"n1821014942","loc":[-85.6094721,41.9724989],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:52Z","tags":{}},"n1821014944":{"id":"n1821014944","loc":[-85.5921973,41.9811112],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:52Z","tags":{}},"n1821014945":{"id":"n1821014945","loc":[-85.5223526,42.0291332],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:52Z","tags":{}},"n1821014946":{"id":"n1821014946","loc":[-85.5965103,41.9808998],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:52Z","tags":{}},"n1821014948":{"id":"n1821014948","loc":[-85.517766,42.0349227],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:52Z","tags":{}},"n1821014950":{"id":"n1821014950","loc":[-85.5889894,41.990996],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:52Z","tags":{}},"n1821014951":{"id":"n1821014951","loc":[-85.5601932,42.0092902],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:52Z","tags":{}},"n1821014954":{"id":"n1821014954","loc":[-85.6028135,41.9764055],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:53Z","tags":{}},"n1821014955":{"id":"n1821014955","loc":[-85.5520621,42.0130666],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:53Z","tags":{}},"n1821014956":{"id":"n1821014956","loc":[-85.593002,41.9839344],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:53Z","tags":{}},"n1821014957":{"id":"n1821014957","loc":[-85.515926,42.0369666],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:53Z","tags":{}},"n1821014960":{"id":"n1821014960","loc":[-85.5761255,42.003877],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:53Z","tags":{}},"n1821014961":{"id":"n1821014961","loc":[-85.5716355,42.007911],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:53Z","tags":{}},"n1821014962":{"id":"n1821014962","loc":[-85.5575378,42.0109045],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:53Z","tags":{}},"n1821014963":{"id":"n1821014963","loc":[-85.5735667,42.0068188],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:53Z","tags":{}},"n1821014964":{"id":"n1821014964","loc":[-85.5915214,41.9865861],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:53Z","tags":{}},"n1821014965":{"id":"n1821014965","loc":[-85.5866344,41.9923157],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:53Z","tags":{}},"n1821014967":{"id":"n1821014967","loc":[-85.5283138,42.0242256],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:53Z","tags":{}},"n1821014968":{"id":"n1821014968","loc":[-85.5177875,42.0355801],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:53Z","tags":{}},"n1821014969":{"id":"n1821014969","loc":[-85.548071,42.0144934],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:53Z","tags":{}},"n1821014972":{"id":"n1821014972","loc":[-85.5611159,42.0088557],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:53Z","tags":{}},"n1821014973":{"id":"n1821014973","loc":[-85.541686,42.0188757],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:53Z","tags":{}},"n1821014974":{"id":"n1821014974","loc":[-85.5917628,41.9862631],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:53Z","tags":{}},"n1821014975":{"id":"n1821014975","loc":[-85.5854864,41.9959478],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:53Z","tags":{}},"n1821014977":{"id":"n1821014977","loc":[-85.609102,41.9722317],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:53Z","tags":{}},"n1821014980":{"id":"n1821014980","loc":[-85.5761202,42.0042438],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:54Z","tags":{}},"n1821014982":{"id":"n1821014982","loc":[-85.5465944,42.0143601],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:54Z","tags":{}},"n1821014983":{"id":"n1821014983","loc":[-85.5173261,42.0342732],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:54Z","tags":{}},"n1821014984":{"id":"n1821014984","loc":[-85.5897297,41.9888509],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:54Z","tags":{}},"n1821014985":{"id":"n1821014985","loc":[-85.5856688,41.999181],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:54Z","tags":{}},"n1821014986":{"id":"n1821014986","loc":[-85.5344011,42.0217251],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:54Z","tags":{}},"n1821014987":{"id":"n1821014987","loc":[-85.601467,41.9768203],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:54Z","tags":{}},"n1821014988":{"id":"n1821014988","loc":[-85.5457254,42.0165123],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:54Z","tags":{}},"n1821014989":{"id":"n1821014989","loc":[-85.6023482,41.9784332],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:54Z","tags":{}},"n1821014991":{"id":"n1821014991","loc":[-85.5361606,42.01823],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:54Z","tags":{}},"n1821014992":{"id":"n1821014992","loc":[-85.5178465,42.0351139],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:54Z","tags":{}},"n1821014995":{"id":"n1821014995","loc":[-85.5634293,42.0078092],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:54Z","tags":{}},"n1821014996":{"id":"n1821014996","loc":[-85.573497,42.0072015],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:54Z","tags":{}},"n1821014997":{"id":"n1821014997","loc":[-85.5976328,41.9799725],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:54Z","tags":{}},"n1821014998":{"id":"n1821014998","loc":[-85.5210651,42.0303166],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:54Z","tags":{}},"n1821015003":{"id":"n1821015003","loc":[-85.5222131,42.0288064],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:54Z","tags":{}},"n1821015004":{"id":"n1821015004","loc":[-85.5897941,41.984405],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:54Z","tags":{}},"n1821015005":{"id":"n1821015005","loc":[-85.5975725,41.9776099],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:54Z","tags":{}},"n1821015006":{"id":"n1821015006","loc":[-85.5765708,42.0034903],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:54Z","tags":{}},"n1821015007":{"id":"n1821015007","loc":[-85.5250187,42.026559],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:55Z","tags":{}},"n1821015009":{"id":"n1821015009","loc":[-85.5426998,42.0166279],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:55Z","tags":{}},"n1821015010":{"id":"n1821015010","loc":[-85.5957606,41.9806584],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:55Z","tags":{}},"n1821015011":{"id":"n1821015011","loc":[-85.5262753,42.0252497],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:55Z","tags":{}},"n1821015012":{"id":"n1821015012","loc":[-85.5266455,42.0253374],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:55Z","tags":{}},"n1821015014":{"id":"n1821015014","loc":[-85.5515632,42.0130187],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:55Z","tags":{}},"n1821015015":{"id":"n1821015015","loc":[-85.6024058,41.9765212],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:55Z","tags":{}},"n1821015017":{"id":"n1821015017","loc":[-85.5175032,42.0357156],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:55Z","tags":{}},"n1821015018":{"id":"n1821015018","loc":[-85.5302718,42.0236039],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:55Z","tags":{}},"n1821015019":{"id":"n1821015019","loc":[-85.6024005,41.9782759],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:55Z","tags":{}},"n1821015020":{"id":"n1821015020","loc":[-85.5907758,41.9890821],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:55Z","tags":{}},"n1821015021":{"id":"n1821015021","loc":[-85.6019445,41.9777215],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:55Z","tags":{}},"n1821015022":{"id":"n1821015022","loc":[-85.5942854,41.9800881],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:55Z","tags":{}},"n1821015024":{"id":"n1821015024","loc":[-85.5325826,42.0222711],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:55Z","tags":{}},"n1821015029":{"id":"n1821015029","loc":[-85.555093,42.0105316],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:56Z","tags":{}},"n1821015033":{"id":"n1821015033","loc":[-85.5249704,42.0270372],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:56Z","tags":{}},"n1821015034":{"id":"n1821015034","loc":[-85.5243965,42.0272205],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:56Z","tags":{}},"n1821015038":{"id":"n1821015038","loc":[-85.5413426,42.0190749],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:56Z","tags":{}},"n1821015039":{"id":"n1821015039","loc":[-85.5920431,41.9848175],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:56Z","tags":{}},"n1821015041":{"id":"n1821015041","loc":[-85.5577685,42.0106015],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:56Z","tags":{}},"n1821015042":{"id":"n1821015042","loc":[-85.5453606,42.0158866],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:56Z","tags":{}},"n1821015045":{"id":"n1821015045","loc":[-85.5333228,42.0217889],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:56Z","tags":{}},"n1821015046":{"id":"n1821015046","loc":[-85.5426891,42.0175924],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:56Z","tags":{}},"n1821015048":{"id":"n1821015048","loc":[-85.5886836,41.9936474],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:56Z","tags":{}},"n1821015050":{"id":"n1821015050","loc":[-85.6001152,41.9786467],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:56Z","tags":{}},"n1821015051":{"id":"n1821015051","loc":[-85.6094064,41.9723655],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:56Z","tags":{}},"n1821015053":{"id":"n1821015053","loc":[-85.605721,41.9749738],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:56Z","tags":{}},"n1821015055":{"id":"n1821015055","loc":[-85.6106791,41.9705048],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:56Z","tags":{}},"n1821015057":{"id":"n1821015057","loc":[-85.5210437,42.0307071],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:56Z","tags":{}},"n1821015059":{"id":"n1821015059","loc":[-85.5995694,41.9786725],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:56Z","tags":{}},"n1821015060":{"id":"n1821015060","loc":[-85.5371638,42.0182938],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:57Z","tags":{}},"n1821015062":{"id":"n1821015062","loc":[-85.6111766,41.9704593],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:57Z","tags":{}},"n1821015065":{"id":"n1821015065","loc":[-85.577704,42.0034921],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:57Z","tags":{}},"n1821015067":{"id":"n1821015067","loc":[-85.5570067,42.0093699],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:57Z","tags":{}},"n1821015068":{"id":"n1821015068","loc":[-85.5920364,41.9845525],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:57Z","tags":{}},"n1821015069":{"id":"n1821015069","loc":[-85.5252065,42.0253954],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:57Z","tags":{}},"n1821015072":{"id":"n1821015072","loc":[-85.5664159,42.0088517],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:57Z","tags":{}},"n1821015073":{"id":"n1821015073","loc":[-85.5880399,41.991905],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:57Z","tags":{}},"n1821015075":{"id":"n1821015075","loc":[-85.6099871,41.9727861],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:57Z","tags":{}},"n1821015076":{"id":"n1821015076","loc":[-85.5319603,42.0231478],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:57Z","tags":{}},"n1821015078":{"id":"n1821015078","loc":[-85.6036088,41.9751112],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:57Z","tags":{}},"n1821015080":{"id":"n1821015080","loc":[-85.5983128,41.9789179],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:57Z","tags":{}},"n1821015082":{"id":"n1821015082","loc":[-85.5614069,42.0071395],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:57Z","tags":{}},"n1821015083":{"id":"n1821015083","loc":[-85.60968,41.9709738],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:57Z","tags":{}},"n1821015086":{"id":"n1821015086","loc":[-85.5914195,41.9837351],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:57Z","tags":{}},"n1821015087":{"id":"n1821015087","loc":[-85.5895473,41.9948036],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:57Z","tags":{}},"n1821015090":{"id":"n1821015090","loc":[-85.5929913,41.9851905],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:57Z","tags":{}},"n1821015093":{"id":"n1821015093","loc":[-85.5907396,41.9838485],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:58Z","tags":{}},"n1821015095":{"id":"n1821015095","loc":[-85.5893864,41.9880176],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:58Z","tags":{}},"n1821015096":{"id":"n1821015096","loc":[-85.5788024,42.0039807],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:58Z","tags":{}},"n1821015097":{"id":"n1821015097","loc":[-85.5630592,42.0078411],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:58Z","tags":{}},"n1821015098":{"id":"n1821015098","loc":[-85.5350609,42.0211274],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:58Z","tags":{}},"n1821015099":{"id":"n1821015099","loc":[-85.5967195,41.9808679],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:58Z","tags":{}},"n1821015100":{"id":"n1821015100","loc":[-85.5666734,42.0088119],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:58Z","tags":{}},"n1821015101":{"id":"n1821015101","loc":[-85.564694,42.0077675],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:58Z","tags":{}},"n1821015103":{"id":"n1821015103","loc":[-85.6066544,41.9726527],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:58Z","tags":{}},"n1821015104":{"id":"n1821015104","loc":[-85.6011827,41.9769838],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:58Z","tags":{}},"n1821015105":{"id":"n1821015105","loc":[-85.5972131,41.9776697],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:58Z","tags":{}},"n1821015106":{"id":"n1821015106","loc":[-85.5880828,41.9903341],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:58Z","tags":{}},"n1821015107":{"id":"n1821015107","loc":[-85.5510268,42.0130626],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:58Z","tags":{}},"n1821015108":{"id":"n1821015108","loc":[-85.6102164,41.970543],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:58Z","tags":{}},"n1821015109":{"id":"n1821015109","loc":[-85.5905344,41.9853899],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:58Z","tags":{}},"n1821015111":{"id":"n1821015111","loc":[-85.5888821,41.9913429],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:58Z","tags":{}},"n1821015112":{"id":"n1821015112","loc":[-85.606295,41.9741921],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:59Z","tags":{}},"n1821015114":{"id":"n1821015114","loc":[-85.5969556,41.9807443],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:59Z","tags":{}},"n1821015115":{"id":"n1821015115","loc":[-85.5882223,41.9934081],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:59Z","tags":{}},"n1821015116":{"id":"n1821015116","loc":[-85.6104471,41.9724971],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:59Z","tags":{}},"n1821015118":{"id":"n1821015118","loc":[-85.5406091,42.0192162],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:59Z","tags":{}},"n1821015120":{"id":"n1821015120","loc":[-85.589955,41.9888429],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:59Z","tags":{}},"n1821015121":{"id":"n1821015121","loc":[-85.5598821,42.0092304],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:59Z","tags":{}},"n1821015122":{"id":"n1821015122","loc":[-85.545598,42.0144097],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:59Z","tags":{}},"n1821015123":{"id":"n1821015123","loc":[-85.5649528,42.0079965],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:59Z","tags":{}},"n1821015125":{"id":"n1821015125","loc":[-85.5883993,41.9917814],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:59Z","tags":{}},"n1821015126":{"id":"n1821015126","loc":[-85.5295785,42.0239967],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:59Z","tags":{}},"n1821015129":{"id":"n1821015129","loc":[-85.5648723,42.0078809],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:59Z","tags":{}},"n1821015132":{"id":"n1821015132","loc":[-85.564989,42.0081103],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:59Z","tags":{}},"n1821015133":{"id":"n1821015133","loc":[-85.5946127,41.9800841],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:59Z","tags":{}},"n1821015134":{"id":"n1821015134","loc":[-85.583448,42.0019078],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:59Z","tags":{}},"n1821015135":{"id":"n1821015135","loc":[-85.5905934,41.9871842],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:59Z","tags":{}},"n1821015137":{"id":"n1821015137","loc":[-85.610608,41.9704752],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:25:59Z","tags":{}},"n1821015138":{"id":"n1821015138","loc":[-85.5752257,42.0052939],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:00Z","tags":{}},"n1821015139":{"id":"n1821015139","loc":[-85.5893864,41.9943491],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:00Z","tags":{}},"n1821015140":{"id":"n1821015140","loc":[-85.5426247,42.0169866],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:00Z","tags":{}},"n1821015141":{"id":"n1821015141","loc":[-85.562001,42.0074526],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:00Z","tags":{}},"n1821015142":{"id":"n1821015142","loc":[-85.5212046,42.0301094],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:00Z","tags":{}},"n1821015143":{"id":"n1821015143","loc":[-85.602214,41.9784531],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:00Z","tags":{}},"n1821015144":{"id":"n1821015144","loc":[-85.5858687,41.9948293],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:00Z","tags":{}},"n1821015145":{"id":"n1821015145","loc":[-85.5608477,42.0074805],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:00Z","tags":{}},"n1821015146":{"id":"n1821015146","loc":[-85.5651607,42.0083614],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:00Z","tags":{}},"n1821015147":{"id":"n1821015147","loc":[-85.5288288,42.0242495],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:00Z","tags":{}},"n1821015149":{"id":"n1821015149","loc":[-85.5450334,42.0146989],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:00Z","tags":{}},"n1821015151":{"id":"n1821015151","loc":[-85.5578275,42.0092304],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:00Z","tags":{}},"n1821015154":{"id":"n1821015154","loc":[-85.6056634,41.9724511],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:00Z","tags":{}},"n1821015155":{"id":"n1821015155","loc":[-85.5902179,41.9852742],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:00Z","tags":{}},"n1821015156":{"id":"n1821015156","loc":[-85.5156256,42.0387157],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:00Z","tags":{}},"n1821015157":{"id":"n1821015157","loc":[-85.5734433,42.0059459],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:00Z","tags":{}},"n1821015158":{"id":"n1821015158","loc":[-85.6050773,41.9731273],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:00Z","tags":{}},"n1821015160":{"id":"n1821015160","loc":[-85.5223419,42.0275233],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:00Z","tags":{}},"n1821015163":{"id":"n1821015163","loc":[-85.6053562,41.972525],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:00Z","tags":{}},"n1821015164":{"id":"n1821015164","loc":[-85.5850412,41.9946082],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:00Z","tags":{}},"n1821015165":{"id":"n1821015165","loc":[-85.5359031,42.0186326],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:01Z","tags":{}},"n1821015166":{"id":"n1821015166","loc":[-85.5608745,42.0077635],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:01Z","tags":{}},"n1821015169":{"id":"n1821015169","loc":[-85.572876,42.0073189],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:01Z","tags":{}},"n1821015171":{"id":"n1821015171","loc":[-85.5875424,41.9919188],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:01Z","tags":{}},"n1821015172":{"id":"n1821015172","loc":[-85.5240116,42.0272581],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:01Z","tags":{}},"n1821015173":{"id":"n1821015173","loc":[-85.5318369,42.0236818],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:01Z","tags":{}},"n1821015174":{"id":"n1821015174","loc":[-85.566888,42.0086923],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:01Z","tags":{}},"n1821015175":{"id":"n1821015175","loc":[-85.5931522,41.9850669],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:01Z","tags":{}},"n1821015176":{"id":"n1821015176","loc":[-85.5604842,42.0093199],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:01Z","tags":{}},"n1821015177":{"id":"n1821015177","loc":[-85.5868168,41.9927543],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:01Z","tags":{}},"n1821015178":{"id":"n1821015178","loc":[-85.6052275,41.9732549],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:01Z","tags":{}},"n1821015179":{"id":"n1821015179","loc":[-85.5910118,41.9900431],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:01Z","tags":{}},"n1821015182":{"id":"n1821015182","loc":[-85.5610032,42.0082897],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:01Z","tags":{}},"n1821015183":{"id":"n1821015183","loc":[-85.5425443,42.0179431],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:01Z","tags":{}},"n1821015184":{"id":"n1821015184","loc":[-85.5843277,42.0014055],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:01Z","tags":{}},"n1821015186":{"id":"n1821015186","loc":[-85.5733307,42.0063564],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:01Z","tags":{}},"n1821015188":{"id":"n1821015188","loc":[-85.5277385,42.0248694],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:01Z","tags":{}},"n1821015189":{"id":"n1821015189","loc":[-85.5558427,42.0108168],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:01Z","tags":{}},"n1821015190":{"id":"n1821015190","loc":[-85.5650587,42.0082618],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:02Z","tags":{}},"n1821015191":{"id":"n1821015191","loc":[-85.5660351,42.0088278],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:02Z","tags":{}},"n1821015192":{"id":"n1821015192","loc":[-85.5849768,41.9980049],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:02Z","tags":{}},"n1821015194":{"id":"n1821015194","loc":[-85.5359139,42.0188199],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:02Z","tags":{}},"n1821015195":{"id":"n1821015195","loc":[-85.593238,41.9849194],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:02Z","tags":{}},"n1821015197":{"id":"n1821015197","loc":[-85.5850841,41.9983239],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:02Z","tags":{}},"n1821015199":{"id":"n1821015199","loc":[-85.5983396,41.9794283],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:02Z","tags":{}},"n1821015204":{"id":"n1821015204","loc":[-85.5452801,42.0145355],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:02Z","tags":{}},"n1821015205":{"id":"n1821015205","loc":[-85.5340685,42.0218407],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:02Z","tags":{}},"n1821015207":{"id":"n1821015207","loc":[-85.5773272,42.0034186],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:02Z","tags":{}},"n1821015209":{"id":"n1821015209","loc":[-85.5535212,42.0132419],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:02Z","tags":{}},"n1821015211":{"id":"n1821015211","loc":[-85.6107703,41.9706045],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:02Z","tags":{}},"n1821015212":{"id":"n1821015212","loc":[-85.6030066,41.9758193],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:03Z","tags":{}},"n1821015213":{"id":"n1821015213","loc":[-85.5359943,42.0184213],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:03Z","tags":{}},"n1821015214":{"id":"n1821015214","loc":[-85.5922993,41.9813305],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:03Z","tags":{}},"n1821015215":{"id":"n1821015215","loc":[-85.5672689,42.0080465],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:03Z","tags":{}},"n1821015217":{"id":"n1821015217","loc":[-85.5160494,42.0365682],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:03Z","tags":{}},"n1821015218":{"id":"n1821015218","loc":[-85.5401142,42.0190351],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:03Z","tags":{}},"n1821015219":{"id":"n1821015219","loc":[-85.5607632,42.0092282],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:03Z","tags":{}},"n1821015220":{"id":"n1821015220","loc":[-85.5866197,41.9947894],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:03Z","tags":{}},"n1821015221":{"id":"n1821015221","loc":[-85.6017889,41.9765132],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:03Z","tags":{}},"n1821015222":{"id":"n1821015222","loc":[-85.5595978,42.009059],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:03Z","tags":{}},"n1821015226":{"id":"n1821015226","loc":[-85.5871494,41.9929018],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:03Z","tags":{}},"n1821015227":{"id":"n1821015227","loc":[-85.5857708,41.9998866],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:03Z","tags":{}},"n1821015228":{"id":"n1821015228","loc":[-85.5317135,42.0238094],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:03Z","tags":{}},"n1821015231":{"id":"n1821015231","loc":[-85.5733521,42.0061372],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:03Z","tags":{}},"n1821015233":{"id":"n1821015233","loc":[-85.5855991,42.0001936],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:03Z","tags":{}},"n1821015234":{"id":"n1821015234","loc":[-85.5213924,42.029962],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:03Z","tags":{}},"n1821015235":{"id":"n1821015235","loc":[-85.6052221,41.9726567],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:03Z","tags":{}},"n1821015236":{"id":"n1821015236","loc":[-85.5763723,42.0035422],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:03Z","tags":{}},"n1821015237":{"id":"n1821015237","loc":[-85.5858512,41.9966215],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:03Z","tags":{}},"n1821015238":{"id":"n1821015238","loc":[-85.567061,42.008439],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:03Z","tags":{}},"n1821015239":{"id":"n1821015239","loc":[-85.5250563,42.0269057],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:04Z","tags":{}},"n1821015240":{"id":"n1821015240","loc":[-85.5347551,42.0214263],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:04Z","tags":{}},"n1821015241":{"id":"n1821015241","loc":[-85.6098463,41.9707066],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:04Z","tags":{}},"n1821015242":{"id":"n1821015242","loc":[-85.5676927,42.0076519],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:04Z","tags":{}},"n1821015243":{"id":"n1821015243","loc":[-85.516775,42.0322669],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:04Z","tags":{}},"n1821015244":{"id":"n1821015244","loc":[-85.5762275,42.0036538],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:04Z","tags":{}},"n1821015245":{"id":"n1821015245","loc":[-85.5583639,42.0090949],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:04Z","tags":{}},"n1821015246":{"id":"n1821015246","loc":[-85.5554041,42.0106432],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:04Z","tags":{}},"n1821015247":{"id":"n1821015247","loc":[-85.5973364,41.9776099],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:04Z","tags":{}},"n1821015248":{"id":"n1821015248","loc":[-85.6098945,41.9717513],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:04Z","tags":{}},"n1821015249":{"id":"n1821015249","loc":[-85.6045315,41.9751511],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:04Z","tags":{}},"n1821015250":{"id":"n1821015250","loc":[-85.5579938,42.0092264],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:04Z","tags":{}},"n1821015253":{"id":"n1821015253","loc":[-85.6058873,41.9724652],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:04Z","tags":{}},"n1821015254":{"id":"n1821015254","loc":[-85.5869456,41.9947517],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:04Z","tags":{}},"n1821015255":{"id":"n1821015255","loc":[-85.5936565,41.9823713],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:04Z","tags":{}},"n1821015256":{"id":"n1821015256","loc":[-85.5218269,42.0278102],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:04Z","tags":{}},"n1821015258":{"id":"n1821015258","loc":[-85.5887802,41.9905534],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:04Z","tags":{}},"n1821015259":{"id":"n1821015259","loc":[-85.5901924,41.9904515],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:04Z","tags":{}},"n1821015263":{"id":"n1821015263","loc":[-85.5249222,42.0255787],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:04Z","tags":{}},"n1821015265":{"id":"n1821015265","loc":[-85.5175206,42.0321672],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:04Z","tags":{}},"n1821015266":{"id":"n1821015266","loc":[-85.5275722,42.0254034],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:04Z","tags":{}},"n1821015267":{"id":"n1821015267","loc":[-85.6016226,41.9765451],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:04Z","tags":{}},"n1821015269":{"id":"n1821015269","loc":[-85.5569316,42.011032],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:05Z","tags":{}},"n1821015271":{"id":"n1821015271","loc":[-85.6010714,41.9785209],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:05Z","tags":{}},"n1821015272":{"id":"n1821015272","loc":[-85.6050666,41.9729917],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:05Z","tags":{}},"n1821015273":{"id":"n1821015273","loc":[-85.5891235,41.99529],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:05Z","tags":{}},"n1821015274":{"id":"n1821015274","loc":[-85.515454,42.0376439],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:05Z","tags":{}},"n1821015276":{"id":"n1821015276","loc":[-85.5776021,42.0034443],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:05Z","tags":{}},"n1821015277":{"id":"n1821015277","loc":[-85.6041707,41.9751453],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:05Z","tags":{}},"n1821015278":{"id":"n1821015278","loc":[-85.5444701,42.0167435],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:05Z","tags":{}},"n1821015280":{"id":"n1821015280","loc":[-85.5923274,41.9852202],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:05Z","tags":{}},"n1821015283":{"id":"n1821015283","loc":[-85.5893649,41.9900271],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:05Z","tags":{}},"n1821015284":{"id":"n1821015284","loc":[-85.5933453,41.9804412],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:05Z","tags":{}},"n1821015285":{"id":"n1821015285","loc":[-85.5247237,42.026017],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:05Z","tags":{}},"n1821015286":{"id":"n1821015286","loc":[-85.5286182,42.0242477],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:05Z","tags":{}},"n1821015287":{"id":"n1821015287","loc":[-85.5904003,41.9888549],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:05Z","tags":{}},"n1821015288":{"id":"n1821015288","loc":[-85.6062146,41.9739369],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:06Z","tags":{}},"n1821015290":{"id":"n1821015290","loc":[-85.5762596,42.0052602],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:06Z","tags":{}},"n1821015292":{"id":"n1821015292","loc":[-85.5849715,41.9975465],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:06Z","tags":{}},"n1821015293":{"id":"n1821015293","loc":[-85.585229,42.0006241],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:06Z","tags":{}},"n1821015294":{"id":"n1821015294","loc":[-85.5926922,41.9805946],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:06Z","tags":{}},"n1821015295":{"id":"n1821015295","loc":[-85.5703387,42.0089133],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:06Z","tags":{}},"n1821015299":{"id":"n1821015299","loc":[-85.5789955,42.0038611],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:06Z","tags":{}},"n1821015301":{"id":"n1821015301","loc":[-85.6072888,41.9721918],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:06Z","tags":{}},"n1821015302":{"id":"n1821015302","loc":[-85.5356349,42.0200992],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:06Z","tags":{}},"n1821015304":{"id":"n1821015304","loc":[-85.5891772,41.994066],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:06Z","tags":{}},"n1821015306":{"id":"n1821015306","loc":[-85.606295,41.9744952],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:06Z","tags":{}},"n1821015307":{"id":"n1821015307","loc":[-85.538871,42.0186583],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:06Z","tags":{}},"n1821015308":{"id":"n1821015308","loc":[-85.587997,41.994971],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:06Z","tags":{}},"n1821015311":{"id":"n1821015311","loc":[-85.606869,41.9725809],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:06Z","tags":{}},"n1821015312":{"id":"n1821015312","loc":[-85.5171974,42.0339943],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:07Z","tags":{}},"n1821015314":{"id":"n1821015314","loc":[-85.5327435,42.0220479],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:07Z","tags":{}},"n1821015315":{"id":"n1821015315","loc":[-85.5383439,42.0187282],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:07Z","tags":{}},"n1821015316":{"id":"n1821015316","loc":[-85.5248095,42.0263119],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:07Z","tags":{}},"n1821015318":{"id":"n1821015318","loc":[-85.5732502,42.0073051],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:07Z","tags":{}},"n1821015319":{"id":"n1821015319","loc":[-85.5924226,41.9852663],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:07Z","tags":{}},"n1821015321":{"id":"n1821015321","loc":[-85.5179001,42.0353052],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:07Z","tags":{}},"n1821015322":{"id":"n1821015322","loc":[-85.5456771,42.0162413],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:07Z","tags":{}},"n1821015323":{"id":"n1821015323","loc":[-85.5936618,41.9829096],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:07Z","tags":{}},"n1821015325":{"id":"n1821015325","loc":[-85.5656931,42.0086582],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:07Z","tags":{}},"n1821015326":{"id":"n1821015326","loc":[-85.5448456,42.0150975],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:07Z","tags":{}},"n1821015327":{"id":"n1821015327","loc":[-85.5220039,42.027615],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:07Z","tags":{}},"n1821015329":{"id":"n1821015329","loc":[-85.517884,42.0354885],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:07Z","tags":{}},"n1821015330":{"id":"n1821015330","loc":[-85.5576666,42.0101671],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:07Z","tags":{}},"n1821015332":{"id":"n1821015332","loc":[-85.5368754,42.0181402],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:07Z","tags":{}},"n1821015333":{"id":"n1821015333","loc":[-85.5367078,42.0181145],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:07Z","tags":{}},"n1821015334":{"id":"n1821015334","loc":[-85.5903909,41.9904316],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:07Z","tags":{}},"n1821015335":{"id":"n1821015335","loc":[-85.5430767,42.0163587],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:07Z","tags":{}},"n1821015336":{"id":"n1821015336","loc":[-85.5277492,42.0252878],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:07Z","tags":{}},"n1821015337":{"id":"n1821015337","loc":[-85.5312146,42.0236898],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:07Z","tags":{}},"n1821015338":{"id":"n1821015338","loc":[-85.5886568,41.991614],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:08Z","tags":{}},"n1821015339":{"id":"n1821015339","loc":[-85.5782498,42.0040883],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:08Z","tags":{}},"n1821015341":{"id":"n1821015341","loc":[-85.562233,42.0076457],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:08Z","tags":{}},"n1821015342":{"id":"n1821015342","loc":[-85.588626,41.9952479],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:08Z","tags":{}},"n1821015343":{"id":"n1821015343","loc":[-85.5762865,42.005033],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:08Z","tags":{}},"n1821015344":{"id":"n1821015344","loc":[-85.5850841,41.9971478],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:08Z","tags":{}},"n1821015346":{"id":"n1821015346","loc":[-85.5643144,42.0076936],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:08Z","tags":{}},"n1821015347":{"id":"n1821015347","loc":[-85.5164893,42.0359467],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:08Z","tags":{}},"n1821015348":{"id":"n1821015348","loc":[-85.5906846,41.9903541],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:08Z","tags":{}},"n1821015349":{"id":"n1821015349","loc":[-85.557688,42.0107769],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:08Z","tags":{}},"n1821015350":{"id":"n1821015350","loc":[-85.5363698,42.0181424],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:08Z","tags":{}},"n1821015351":{"id":"n1821015351","loc":[-85.5939636,41.9801918],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:08Z","tags":{}},"n1821015352":{"id":"n1821015352","loc":[-85.5524041,42.0131644],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:08Z","tags":{}},"n1821015354":{"id":"n1821015354","loc":[-85.5308606,42.0236221],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:08Z","tags":{}},"n1821015355":{"id":"n1821015355","loc":[-85.5877449,41.9932367],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:08Z","tags":{}},"n1821015356":{"id":"n1821015356","loc":[-85.519885,42.0318586],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:08Z","tags":{}},"n1821015357":{"id":"n1821015357","loc":[-85.5454035,42.0168431],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:08Z","tags":{}},"n1821015358":{"id":"n1821015358","loc":[-85.5970629,41.9781881],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:08Z","tags":{}},"n1821015359":{"id":"n1821015359","loc":[-85.5932541,41.9844767],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:08Z","tags":{}},"n1821015360":{"id":"n1821015360","loc":[-85.5970736,41.9778252],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:08Z","tags":{}},"n1821015361":{"id":"n1821015361","loc":[-85.537031,42.0181601],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:08Z","tags":{}},"n1821015362":{"id":"n1821015362","loc":[-85.5548355,42.0105156],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:08Z","tags":{}},"n1821015363":{"id":"n1821015363","loc":[-85.5168648,42.0336158],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:08Z","tags":{}},"n1821015365":{"id":"n1821015365","loc":[-85.5870435,41.9919507],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:09Z","tags":{}},"n1821015366":{"id":"n1821015366","loc":[-85.5719681,42.0075443],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:09Z","tags":{}},"n1821015367":{"id":"n1821015367","loc":[-85.5969985,41.9780446],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:09Z","tags":{}},"n1821015368":{"id":"n1821015368","loc":[-85.5926761,41.98528],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:09Z","tags":{}},"n1821015369":{"id":"n1821015369","loc":[-85.5224009,42.0293444],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:09Z","tags":{}},"n1821015371":{"id":"n1821015371","loc":[-85.518737,42.0322651],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:09Z","tags":{}},"n1821015372":{"id":"n1821015372","loc":[-85.6064573,41.9726465],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:09Z","tags":{}},"n1821015373":{"id":"n1821015373","loc":[-85.5201103,42.0313088],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:09Z","tags":{}},"n1821015375":{"id":"n1821015375","loc":[-85.5378182,42.0186844],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:09Z","tags":{}},"n1821015376":{"id":"n1821015376","loc":[-85.6109741,41.9706882],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:09Z","tags":{}},"n1821015377":{"id":"n1821015377","loc":[-85.5993333,41.9785488],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:09Z","tags":{}},"n1821015378":{"id":"n1821015378","loc":[-85.5889787,41.9907368],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:09Z","tags":{}},"n1821015380":{"id":"n1821015380","loc":[-85.6060161,41.9737375],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:09Z","tags":{}},"n1821015381":{"id":"n1821015381","loc":[-85.5743016,42.0053679],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:09Z","tags":{}},"n1821015382":{"id":"n1821015382","loc":[-85.6014724,41.9776099],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:09Z","tags":{}},"n1821015383":{"id":"n1821015383","loc":[-85.5574426,42.0091644],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:09Z","tags":{}},"n1821015385":{"id":"n1821015385","loc":[-85.5208613,42.0309302],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:10Z","tags":{}},"n1821015386":{"id":"n1821015386","loc":[-85.5919023,41.9837789],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:10Z","tags":{}},"n1821015387":{"id":"n1821015387","loc":[-85.5455484,42.0160221],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:10Z","tags":{}},"n1821015392":{"id":"n1821015392","loc":[-85.5801757,42.0028964],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:10Z","tags":{}},"n1821015395":{"id":"n1821015395","loc":[-85.5493785,42.0139974],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:10Z","tags":{}},"n1821015396":{"id":"n1821015396","loc":[-85.5449475,42.015488],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:10Z","tags":{}},"n1821015398":{"id":"n1821015398","loc":[-85.611123,41.9706627],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:10Z","tags":{}},"n1821015400":{"id":"n1821015400","loc":[-85.5935706,41.9822477],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:10Z","tags":{}},"n1821015401":{"id":"n1821015401","loc":[-85.5724254,42.0073508],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:10Z","tags":{}},"n1821015403":{"id":"n1821015403","loc":[-85.5486812,42.0143442],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:10Z","tags":{}},"n1821015404":{"id":"n1821015404","loc":[-85.5161835,42.0327711],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:11Z","tags":{}},"n1821015406":{"id":"n1821015406","loc":[-85.5921705,41.9851107],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:11Z","tags":{}},"n1821015407":{"id":"n1821015407","loc":[-85.531912,42.0234069],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:11Z","tags":{}},"n1821015410":{"id":"n1821015410","loc":[-85.5292566,42.024176],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:11Z","tags":{}},"n1821015411":{"id":"n1821015411","loc":[-85.5845316,41.9948315],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:11Z","tags":{}},"n1821015413":{"id":"n1821015413","loc":[-85.5217947,42.0280413],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:11Z","tags":{}},"n1821015414":{"id":"n1821015414","loc":[-85.5527367,42.013272],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:11Z","tags":{}},"n1821015415":{"id":"n1821015415","loc":[-85.5191179,42.0321973],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:11Z","tags":{}},"n1821015416":{"id":"n1821015416","loc":[-85.5540241,42.0128655],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:11Z","tags":{}},"n1821015418":{"id":"n1821015418","loc":[-85.5272892,42.0254849],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:11Z","tags":{}},"n1821015419":{"id":"n1821015419","loc":[-85.5449744,42.016867],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:11Z","tags":{}},"n1821015420":{"id":"n1821015420","loc":[-85.5852665,41.9986787],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:11Z","tags":{}},"n1821015421":{"id":"n1821015421","loc":[-85.6102701,41.972186],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:11Z","tags":{}},"n1821015423":{"id":"n1821015423","loc":[-85.6026365,41.9764972],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:11Z","tags":{}},"n1821015427":{"id":"n1821015427","loc":[-85.5898692,41.9841498],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:11Z","tags":{}},"n1821015429":{"id":"n1821015429","loc":[-85.5422546,42.0183855],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:12Z","tags":{}},"n1821015430":{"id":"n1821015430","loc":[-85.5866505,41.9925549],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:12Z","tags":{}},"n1821015431":{"id":"n1821015431","loc":[-85.5234376,42.0273577],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:12Z","tags":{}},"n1821015432":{"id":"n1821015432","loc":[-85.6096746,41.9727284],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:12Z","tags":{}},"n1821015433":{"id":"n1821015433","loc":[-85.5824891,42.0021567],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:12Z","tags":{}},"n1821015434":{"id":"n1821015434","loc":[-85.5923905,41.9841139],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:12Z","tags":{}},"n1821015435":{"id":"n1821015435","loc":[-85.5874565,41.9948014],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:12Z","tags":{}},"n1821015437":{"id":"n1821015437","loc":[-85.6055279,41.9734423],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:12Z","tags":{}},"n1821015438":{"id":"n1821015438","loc":[-85.5299379,42.0237376],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:12Z","tags":{}},"n1821015439":{"id":"n1821015439","loc":[-85.5155022,42.0383651],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:12Z","tags":{}},"n1821015442":{"id":"n1821015442","loc":[-85.527422,42.0254711],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:12Z","tags":{}},"n1821015443":{"id":"n1821015443","loc":[-85.5920699,41.9849291],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:12Z","tags":{}},"n1821015444":{"id":"n1821015444","loc":[-85.5639711,42.0077494],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:12Z","tags":{}},"n1821015445":{"id":"n1821015445","loc":[-85.5162586,42.0361777],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:12Z","tags":{}},"n1821015446":{"id":"n1821015446","loc":[-85.5220039,42.029695],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:12Z","tags":{}},"n1821015448":{"id":"n1821015448","loc":[-85.5176641,42.0356956],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:12Z","tags":{}},"n1821015449":{"id":"n1821015449","loc":[-85.5930556,41.9841577],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:12Z","tags":{}},"n1821015451":{"id":"n1821015451","loc":[-85.5320783,42.0228848],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:12Z","tags":{}},"n1821015452":{"id":"n1821015452","loc":[-85.5170096,42.0357235],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:12Z","tags":{}},"n1821015453":{"id":"n1821015453","loc":[-85.5571355,42.009613],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:12Z","tags":{}},"n1821015454":{"id":"n1821015454","loc":[-85.5609979,42.009059],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:12Z","tags":{}},"n1821015455":{"id":"n1821015455","loc":[-85.6097336,41.9708342],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:12Z","tags":{}},"n1821015456":{"id":"n1821015456","loc":[-85.5884476,41.9904218],"version":"1","changeset":"12181249","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-11T02:26:12Z","tags":{}},"w170843846":{"id":"w170843846","version":"1","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:03Z","tags":{"source":"Bing","waterway":"river"},"nodes":["n1819790555","n1819790762","n1819790547","n1819790618","n1819790898","n1819790796","n1819790534","n1819790543","n1819790541","n1819790687","n1819790877","n1819790811","n1819790670"]},"w209083541":{"id":"w209083541","version":"1","changeset":"15306846","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-03-09T19:50:46Z","tags":{"name":"Portage River","source":"Bing","waterway":"river"},"nodes":["n1821014848","n1821015156","n1821015439","n1821014763","n1821014824","n1821015274","n1821014764","n1821014791","n1821014957","n1821015217","n1821015445","n1821015347","n1821014893","n1821015452","n1821015017","n1821015448","n1821014968","n1821015329","n1821015321","n1821014992","n1821014948","n1821014757","n1821014983","n1821015312","n1821015363","n1821014924","n1821014873","n1821014932","n1821014668","n1821015404","n1821014716","n1821015243","n1821015265","n1821014710","n1821015371","n1821015415","n1821014870","n1821015356","n1821015373","n1821014681","n1821014714","n1821015385","n1821014911","n1821015057","n1821014867","n1821014998","n1821015142","n1821015234","n1821015446","n1821014862","n1821015369","n1821014945","n1821015003","n1821014667","n1821015413","n1821015256","n1821015327","n1821015160","n1821014907","n1821015431","n1821015172","n1821015034","n1821014741","n1821015033","n1821015239","n1821015007","n1821015316","n1821015285","n1821014633","n1821015263","n1821015069","n1821014846","n1821014779","n1821015011","n1821015012","n1821014845","n1821015418","n1821015442","n1821015266","n1821015336","n1821014755","n1821015188","n1821014925","n1821014816","n1821014869","n1821014967","n1821015286","n1821015147","n1821015410","n1821015126","n1821015438","n1821015018","n1821015354","n1821015337","n1821014766","n1821014740","n1821015228","n1821015173","n1821015407","n1821015076","n1821015451","n1821015024","n1821015314","n1821014784","n1821015045","n1821014735","n1821015205","n1821014986","n1821015240","n1821015098","n1821014825","n1821015302","n1821014918","n1821014718","n1821014896","n1821014853","n1821015194","n1821015165","n1821015213","n1821014991","n1821015350","n1821015333","n1821015332","n1821015361","n1821015060","n1821014914","n1821015375","n1821015315","n1821015307","n1821014906","n1821014751","n1821014666","n1821015218","n1821014817","n1821015118","n1821014674","n1821015038","n1821014973","n1821015429","n1821015183","n1821015046","n1821014803","n1821015140","n1821015009","n1821014749","n1821015335","n1821014711","n1821014854","n1821015278","n1821015419","n1821014648","n1821015357","n1821014637","n1821014988","n1821015322","n1821015387","n1821015042","n1821014833","n1821015396","n1821015326","n1821014691","n1821015149","n1821015204","n1821015122","n1821014782","n1821014982","n1821014921","n1821014936","n1821014969","n1821014881","n1821015403","n1821014805","n1821015395","n1821014892","n1821014826","n1821014844","n1821015107","n1821015014","n1821014955","n1821015352","n1821015414","n1821014746","n1821015209","n1821014770","n1821015416","n1821014661","n1821014857","n1821014814","n1821014754","n1821014721","n1821014727","n1821015362","n1821015029","n1821015246","n1821015189","n1821014627","n1821015269","n1821014808","n1821014962","n1821015349","n1821015041","n1821014722","n1821015330","n1821015453","n1821015067","n1821014643","n1821014802","n1821015383","n1821015151","n1821015250","n1821015245","n1821014772","n1821014899","n1821015222","n1821015121","n1821014951","n1821015176","n1821015219","n1821015454","n1821014972","n1821014917","n1821015182","n1821015166","n1821015145","n1821014910","n1821015082","n1821014678","n1821014806","n1821015141","n1821015341","n1821014788","n1821015097","n1821014995","n1821015444","n1821015346","n1821015101","n1821015129","n1821015123","n1821015132","n1821015190","n1821015146","n1821015325","n1821015191","n1821015072","n1821015100","n1821015174","n1821015238","n1821015215","n1821014700","n1821015242","n1821014841","n1821014905","n1821014874","n1821014883","n1821014729","n1821014866","n1821014828","n1821015295","n1821014931","n1821014859","n1821014912","n1821014783","n1821014752","n1821014961","n1821015366","n1821015401","n1821015169","n1821015318","n1821014996","n1821014747","n1821014963","n1821014670","n1821015186","n1821015231","n1821015157","n1821014812","n1821015381","n1821014887","n1821015138","n1821014704","n1821014787","n1821014922","n1821015290","n1821015343","n1821014651","n1821014980","n1821014960","n1821015244","n1821015236","n1821015006","n1821014694","n1821014759","n1821015207","n1821015276","n1821015065","n1821014863","n1821014660","n1821014902","n1821014645","n1821015339","n1821014871","n1821015096","n1821015299","n1821014798","n1821014638","n1821015392","n1821014835","n1821014762","n1821014642","n1821015433","n1821014786","n1821015134","n1821014855","n1821015184","n1821014850","n1821015293","n1821015233","n1821015227","n1821014876","n1821014985","n1821014843","n1821015420","n1821015197","n1821015192","n1821015292","n1821015344","n1821014742","n1821014726","n1821015237","n1821014796","n1821014908","n1821014975","n1821014769","n1821014688","n1821014860","n1821014895","n1821014676","n1821015411","n1821014736","n1821015164","n1821014647","n1821015144","n1821014919","n1821015220","n1821015254","n1821015435","n1821015308","n1821015342","n1821014830","n1821015273","n1821014658","n1821014781","n1821015087","n1821015139","n1821015304","n1821014839","n1821015048","n1821015115","n1821015355","n1821015226","n1821015177","n1821015430","n1821014965","n1821014725","n1821015365","n1821015171","n1821015073","n1821015125","n1821015338","n1821015111","n1821014950","n1821015378","n1821015258","n1821015456","n1821015106","n1821014832","n1821014888","n1821014795","n1821014872","n1821014810","n1821014705","n1821014804","n1821014820","n1821015283","n1821014938","n1821014689","n1821015259","n1821015334","n1821015348","n1821014635","n1821015179","n1821014864","n1821014890","n1821015020","n1821014898","n1821015287","n1821015120","n1821014984","n1821014743","n1821014790","n1821014765","n1821014777","n1821015095","n1821014653","n1821015135","n1821014836","n1821014964","n1821014974","n1821014636","n1821014682","n1821014663","n1821014665","n1821015109","n1821015155","n1821014930","n1821014669","n1821015004","n1821015427","n1821014916","n1821015093","n1821015086","n1821015386","n1821014799","n1821014913","n1821015434","n1821014728","n1821014900","n1821015068","n1821015039","n1821015443","n1821015406","n1821015280","n1821015319","n1821015368","n1821014774","n1821015090","n1821015175","n1821015195","n1821014687","n1821015359","n1821015449","n1821014956","n1821014838","n1821014768","n1821014698","n1821015323","n1821014756","n1821015255","n1821015400","n1821014717","n1821014868","n1821014778","n1821015214","n1821014944","n1821014697","n1821014671","n1821014928","n1821015294","n1821014822","n1821015284","n1821015351","n1821015022","n1821015133","n1821014644","n1821015010","n1821014625","n1821014657","n1821014946","n1821015099","n1821015114","n1821014629","n1821014865","n1821014997","n1821014926","n1821014933","n1821015199","n1821014819","n1821015080","n1821014692","n1821014677","n1821015358","n1821015367","n1821015360","n1821015105","n1821015247","n1821015005","n1821014809","n1821014794","n1821014761","n1821014879","n1821014801","n1821015377","n1821015059","n1821014730","n1821015050","n1821015271","n1821015143","n1821014989","n1821015019","n1821014672","n1821014649","n1821014684","n1821014703","n1821015021","n1821015382","n1821014842","n1821014720","n1821014847","n1821015104","n1821014987","n1821014886","n1821015267","n1821015221","n1821015015","n1821015423","n1821014954","n1821014903","n1821014939","n1821015212","n1821014789","n1821014712","n1821014708","n1821015078","n1821015277","n1821015249","n1821014646","n1821014793","n1821015053","n1821014707","n1821015306","n1821015112","n1821015288","n1821015380","n1821015437","n1821015178","n1821015158","n1821015272","n1821015235","n1821015163","n1821015154","n1821015253","n1821014632","n1821015372","n1821015103","n1821015311","n1821015301","n1821014885","n1821014811","n1821014977","n1821015051","n1821014942","n1821014745","n1821015432","n1821015075","n1821014664","n1821014695","n1821015116","n1821014639","n1821015421","n1821015248","n1821014758","n1821014834","n1821015083","n1821015455","n1821015241","n1821015108","n1821014713","n1821015137","n1821015055","n1821015211","n1821014904","n1821015376","n1821015398","n1821014771","n1821014840","n1821015062","n1819790554","n1819790560","n1819790767","n1819790696","n1819790706","n1819790606","n1819790607","n1819790544","n1819790779","n1819790760","n1819790926","n1819790927","n1819790647","n1819790657","n1819790649","n1819790679","n1819790915","n1819790739","n1819790549","n1819790671","n1819790686","n1819790798","n1819790791","n1819790563","n1819790720","n1819790704","n1819790795","n1819790836","n1819790622","n1819790615","n1819790654","n1819790931","n1819790595","n1819790753","n1819790612","n1819790623","n1819790564","n1819790552","n1819790645","n1819790625","n1819790605","n1819790668","n1819790731","n1819790718","n1819790781","n1819790665","n1819790659","n1819790726","n1819790642","n1819790854","n1819790697","n1819790867","n1819790833","n1819790555","n1819790774","n1819790881","n1819790530","n1819790909","n1819790891","n1819790590","n1819790738","n1819790609","n1819790528","n1819790674","n1819790583","n1819790559","n1819790863","n1819790912","n1819790685","n1819790913"]},"n185955128":{"id":"n185955128","loc":[-85.6189367,41.9519432],"version":"3","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:14Z","tags":{}},"n185948818":{"id":"n185948818","loc":[-85.616755,41.952231],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:53:44Z","tags":{}},"n185978819":{"id":"n185978819","loc":[-85.616773,41.954737],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:35Z","tags":{}},"n185978821":{"id":"n185978821","loc":[-85.616699,41.954742],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:35Z","tags":{}},"n2138420714":{"id":"n2138420714","loc":[-85.6176304,41.9515154],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:12Z","tags":{}},"n2138420715":{"id":"n2138420715","loc":[-85.6177355,41.9515717],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:12Z","tags":{}},"n2138420716":{"id":"n2138420716","loc":[-85.6192901,41.951573],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:12Z","tags":{}},"n2138420718":{"id":"n2138420718","loc":[-85.6171481,41.9513579],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:12Z","tags":{}},"n2138420719":{"id":"n2138420719","loc":[-85.6165981,41.9519199],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:12Z","tags":{}},"n2138420720":{"id":"n2138420720","loc":[-85.6165719,41.9519922],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:12Z","tags":{}},"n2138420721":{"id":"n2138420721","loc":[-85.6165832,41.9520757],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:12Z","tags":{}},"n2138420722":{"id":"n2138420722","loc":[-85.6166355,41.9521453],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:12Z","tags":{}},"n2138420723":{"id":"n2138420723","loc":[-85.6169161,41.9522788],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:12Z","tags":{}},"n2138420724":{"id":"n2138420724","loc":[-85.6170882,41.9522538],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:12Z","tags":{}},"n2138420725":{"id":"n2138420725","loc":[-85.6189204,41.9514674],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:12Z","tags":{}},"n2138420726":{"id":"n2138420726","loc":[-85.6180346,41.9514735],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:12Z","tags":{}},"n2138420727":{"id":"n2138420727","loc":[-85.6180362,41.9515719],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:12Z","tags":{}},"n2138420728":{"id":"n2138420728","loc":[-85.6189204,41.9515727],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:12Z","tags":{}},"n2138420744":{"id":"n2138420744","loc":[-85.618919,41.9519571],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:12Z","tags":{}},"n2138420745":{"id":"n2138420745","loc":[-85.6194575,41.9522374],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:12Z","tags":{}},"n2138420746":{"id":"n2138420746","loc":[-85.6181777,41.9536179],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:12Z","tags":{}},"n2138420747":{"id":"n2138420747","loc":[-85.6176582,41.9533658],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:12Z","tags":{}},"n2138420748":{"id":"n2138420748","loc":[-85.6179871,41.9530242],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:12Z","tags":{}},"n2138420749":{"id":"n2138420749","loc":[-85.618429,41.9532476],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:12Z","tags":{}},"n2138420750":{"id":"n2138420750","loc":[-85.6185538,41.9531194],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:12Z","tags":{}},"n2138420751":{"id":"n2138420751","loc":[-85.6180765,41.9528677],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:12Z","tags":{}},"n2138420752":{"id":"n2138420752","loc":[-85.6180394,41.9528855],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:12Z","tags":{}},"n2138420753":{"id":"n2138420753","loc":[-85.6193752,41.9521695],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:12Z","tags":{}},"n2138420754":{"id":"n2138420754","loc":[-85.6181374,41.9535376],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:12Z","tags":{}},"n2138420755":{"id":"n2138420755","loc":[-85.6179898,41.9535545],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:12Z","tags":{}},"n2138420756":{"id":"n2138420756","loc":[-85.6177286,41.9534228],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:12Z","tags":{}},"n2138420757":{"id":"n2138420757","loc":[-85.6181011,41.9530292],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:13Z","tags":{}},"n2138420759":{"id":"n2138420759","loc":[-85.6185158,41.9531194],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:13Z","tags":{}},"n2138420760":{"id":"n2138420760","loc":[-85.6191318,41.9520425],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:13Z","tags":{}},"n2138420761":{"id":"n2138420761","loc":[-85.6182348,41.9529815],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:13Z","tags":{}},"n2138420762":{"id":"n2138420762","loc":[-85.6184853,41.9524248],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:13Z","tags":{}},"n2138420763":{"id":"n2138420763","loc":[-85.6186764,41.9525193],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:13Z","tags":{}},"n2138420764":{"id":"n2138420764","loc":[-85.6189421,41.9526483],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:13Z","tags":{}},"n2138420765":{"id":"n2138420765","loc":[-85.6182875,41.9531222],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:13Z","tags":{}},"n2138420766":{"id":"n2138420766","loc":[-85.6179141,41.9535163],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:13Z","tags":{}},"n2138420767":{"id":"n2138420767","loc":[-85.6178363,41.9535735],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:13Z","tags":{}},"n185948824":{"id":"n185948824","loc":[-85.6165667,41.9529715],"version":"3","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:14Z","tags":{}},"n2138420758":{"id":"n2138420758","loc":[-85.6184408,41.953201],"version":"2","changeset":"14970854","user":"oldtopos","uid":"169004","visible":"true","timestamp":"2013-02-09T18:25:47Z","tags":{}},"n2138422349":{"id":"n2138422349","loc":[-85.6175136,41.9533346],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:27Z","tags":{}},"n2138422350":{"id":"n2138422350","loc":[-85.6171867,41.9531679],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:27Z","tags":{}},"n2138422351":{"id":"n2138422351","loc":[-85.61722,41.9531305],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:27Z","tags":{}},"n2138422352":{"id":"n2138422352","loc":[-85.6171889,41.9531158],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:27Z","tags":{}},"n2138422353":{"id":"n2138422353","loc":[-85.6171733,41.9531284],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:27Z","tags":{}},"n2138422354":{"id":"n2138422354","loc":[-85.616765,41.9529207],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:27Z","tags":{}},"n2138422355":{"id":"n2138422355","loc":[-85.6167565,41.9529355],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:27Z","tags":{}},"n2138422356":{"id":"n2138422356","loc":[-85.6164772,41.9527911],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:27Z","tags":{}},"n2138422357":{"id":"n2138422357","loc":[-85.6168227,41.9524261],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:27Z","tags":{}},"n2138422358":{"id":"n2138422358","loc":[-85.6171913,41.9526158],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:27Z","tags":{}},"n2138422359":{"id":"n2138422359","loc":[-85.6172403,41.9525589],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:27Z","tags":{}},"n2138422360":{"id":"n2138422360","loc":[-85.6172097,41.952542],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:27Z","tags":{}},"n2138422361":{"id":"n2138422361","loc":[-85.6173948,41.9523512],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:27Z","tags":{}},"n2138422362":{"id":"n2138422362","loc":[-85.6174256,41.9523678],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:27Z","tags":{}},"n2138422363":{"id":"n2138422363","loc":[-85.6174831,41.9523086],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:27Z","tags":{}},"n2138422364":{"id":"n2138422364","loc":[-85.6173316,41.9522289],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:28Z","tags":{}},"n2138422365":{"id":"n2138422365","loc":[-85.6174507,41.9521024],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:28Z","tags":{}},"n2138422366":{"id":"n2138422366","loc":[-85.6174773,41.9521155],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:28Z","tags":{}},"n2138422367":{"id":"n2138422367","loc":[-85.6176577,41.9519232],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:28Z","tags":{}},"n2138422368":{"id":"n2138422368","loc":[-85.6176336,41.9519105],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:28Z","tags":{}},"n2138422369":{"id":"n2138422369","loc":[-85.617747,41.9517861],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:28Z","tags":{}},"n2138422370":{"id":"n2138422370","loc":[-85.6182675,41.9520559],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:28Z","tags":{}},"n2138422371":{"id":"n2138422371","loc":[-85.6182105,41.9521219],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:28Z","tags":{}},"n2138422372":{"id":"n2138422372","loc":[-85.6183863,41.9522203],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:28Z","tags":{}},"n2138422373":{"id":"n2138422373","loc":[-85.6180984,41.9525266],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:28Z","tags":{}},"n2138422374":{"id":"n2138422374","loc":[-85.6179159,41.9524295],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:28Z","tags":{}},"n2138422375":{"id":"n2138422375","loc":[-85.617854,41.9524979],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:28Z","tags":{}},"n2138422376":{"id":"n2138422376","loc":[-85.6177686,41.9524531],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:28Z","tags":{}},"n2138422377":{"id":"n2138422377","loc":[-85.6174716,41.9527765],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:28Z","tags":{}},"n2138422378":{"id":"n2138422378","loc":[-85.6178545,41.9529756],"version":"1","changeset":"14878856","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:12:28Z","tags":{}},"n2138425424":{"id":"n2138425424","loc":[-85.6171736,41.9536385],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:40Z","tags":{}},"n2138425425":{"id":"n2138425425","loc":[-85.6180159,41.9535782],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:40Z","tags":{}},"n2138425426":{"id":"n2138425426","loc":[-85.6181068,41.9536282],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:40Z","tags":{}},"n2138425427":{"id":"n2138425427","loc":[-85.6180673,41.9542678],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:40Z","tags":{}},"n2138425428":{"id":"n2138425428","loc":[-85.6178636,41.9542634],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:40Z","tags":{}},"n2138425429":{"id":"n2138425429","loc":[-85.6176204,41.9542046],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:40Z","tags":{}},"n2138425430":{"id":"n2138425430","loc":[-85.6174366,41.9541031],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:40Z","tags":{}},"n2138425431":{"id":"n2138425431","loc":[-85.6172942,41.9539781],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:40Z","tags":{}},"n2138425432":{"id":"n2138425432","loc":[-85.6172171,41.9538399],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:40Z","tags":{}},"n2138425433":{"id":"n2138425433","loc":[-85.6168138,41.9543266],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:40Z","tags":{}},"n2138425434":{"id":"n2138425434","loc":[-85.6167779,41.9538098],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:40Z","tags":{}},"n2138425435":{"id":"n2138425435","loc":[-85.6165849,41.9537073],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:40Z","tags":{}},"n2138425441":{"id":"n2138425441","loc":[-85.616458,41.9543184],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:41Z","tags":{}},"n2138425442":{"id":"n2138425442","loc":[-85.6166428,41.954345],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:41Z","tags":{}},"n2138425445":{"id":"n2138425445","loc":[-85.6181332,41.9514117],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:41Z","tags":{}},"n2138425446":{"id":"n2138425446","loc":[-85.6183263,41.9514111],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:41Z","tags":{}},"n2138425447":{"id":"n2138425447","loc":[-85.6185033,41.9514102],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:41Z","tags":{}},"n2138425449":{"id":"n2138425449","loc":[-85.6186809,41.9514093],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:41Z","tags":{}},"n2138425451":{"id":"n2138425451","loc":[-85.6188681,41.9514082],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:41Z","tags":{}},"n2138436008":{"id":"n2138436008","loc":[-85.6170474,41.9513604],"version":"1","changeset":"14878954","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:47:02Z","tags":{}},"n2138436009":{"id":"n2138436009","loc":[-85.6164937,41.9519586],"version":"1","changeset":"14878954","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:47:02Z","tags":{}},"n2138436010":{"id":"n2138436010","loc":[-85.616497,41.9520725],"version":"1","changeset":"14878954","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:47:02Z","tags":{}},"n2138436011":{"id":"n2138436011","loc":[-85.6165654,41.9521645],"version":"1","changeset":"14878954","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:47:02Z","tags":{}},"n2138436012":{"id":"n2138436012","loc":[-85.6166631,41.9522178],"version":"1","changeset":"14878954","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:47:02Z","tags":{}},"n2138436013":{"id":"n2138436013","loc":[-85.6167327,41.9522554],"version":"1","changeset":"14878954","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:47:02Z","tags":{}},"n2138436014":{"id":"n2138436014","loc":[-85.6172383,41.9525125],"version":"1","changeset":"14878954","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:47:02Z","tags":{}},"n2138439319":{"id":"n2138439319","loc":[-85.6170432,41.9524057],"version":"1","changeset":"14878967","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:54:18Z","tags":{}},"n2138439320":{"id":"n2138439320","loc":[-85.617691,41.9517107],"version":"1","changeset":"14878967","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:54:18Z","tags":{}},"n2138439321":{"id":"n2138439321","loc":[-85.6177727,41.9516794],"version":"1","changeset":"14878967","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:54:18Z","tags":{}},"n2138439322":{"id":"n2138439322","loc":[-85.619085,41.9516811],"version":"1","changeset":"14878967","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:54:18Z","tags":{}},"n2138439323":{"id":"n2138439323","loc":[-85.6179432,41.952895],"version":"1","changeset":"14878967","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:54:18Z","tags":{}},"n2138439324":{"id":"n2138439324","loc":[-85.6180389,41.9529384],"version":"1","changeset":"14878967","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:54:18Z","tags":{}},"n2138439325":{"id":"n2138439325","loc":[-85.6176303,41.9533604],"version":"1","changeset":"14878967","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:54:18Z","tags":{}},"n2138439326":{"id":"n2138439326","loc":[-85.6175538,41.9534396],"version":"1","changeset":"14878967","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:54:18Z","tags":{}},"n2138439327":{"id":"n2138439327","loc":[-85.6173806,41.9523658],"version":"1","changeset":"14878967","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:54:18Z","tags":{}},"n2138439328":{"id":"n2138439328","loc":[-85.6171841,41.9522542],"version":"1","changeset":"14878967","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:54:18Z","tags":{}},"n2138439329":{"id":"n2138439329","loc":[-85.6172077,41.9524958],"version":"1","changeset":"14878967","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:54:18Z","tags":{}},"n2138439330":{"id":"n2138439330","loc":[-85.6171235,41.9525809],"version":"1","changeset":"14878967","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:54:18Z","tags":{}},"n2138439331":{"id":"n2138439331","loc":[-85.6180938,41.9527349],"version":"1","changeset":"14878967","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:54:18Z","tags":{}},"n2138439332":{"id":"n2138439332","loc":[-85.6177023,41.9525253],"version":"1","changeset":"14878967","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:54:18Z","tags":{}},"n2138439333":{"id":"n2138439333","loc":[-85.6175543,41.9526865],"version":"1","changeset":"14878967","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:54:18Z","tags":{}},"n2138439334":{"id":"n2138439334","loc":[-85.6179589,41.9528783],"version":"1","changeset":"14878967","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:54:18Z","tags":{}},"n185948820":{"id":"n185948820","loc":[-85.6163249,41.952701],"version":"3","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:14Z","tags":{}},"n185948822":{"id":"n185948822","loc":[-85.6163757,41.952855],"version":"3","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:14Z","tags":{}},"n185955123":{"id":"n185955123","loc":[-85.6198103,41.9510408],"version":"3","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:14Z","tags":{}},"n185958839":{"id":"n185958839","loc":[-85.611651,41.954761],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:34Z","tags":{}},"n185965033":{"id":"n185965033","loc":[-85.614195,41.954754],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:42Z","tags":{}},"n185976502":{"id":"n185976502","loc":[-85.617375,41.947559],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:07:32Z","tags":{}},"n185976504":{"id":"n185976504","loc":[-85.6174164,41.9510804],"version":"3","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:14Z","tags":{}},"n185978828":{"id":"n185978828","loc":[-85.613542,41.954756],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:36Z","tags":{}},"n185978830":{"id":"n185978830","loc":[-85.610373,41.954774],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:08:36Z","tags":{}},"n2138420713":{"id":"n2138420713","loc":[-85.6174641,41.9506942],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:11Z","tags":{}},"n2138420717":{"id":"n2138420717","loc":[-85.6173027,41.9512895],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:12Z","tags":{}},"n2138420768":{"id":"n2138420768","loc":[-85.61745,41.9501974],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:13Z","tags":{}},"n2138420773":{"id":"n2138420773","loc":[-85.6174135,41.9489136],"version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:13Z","tags":{}},"n2138425436":{"id":"n2138425436","loc":[-85.6159148,41.9538036],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:40Z","tags":{}},"n2138425437":{"id":"n2138425437","loc":[-85.6159534,41.9539677],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:41Z","tags":{}},"n2138425438":{"id":"n2138425438","loc":[-85.6160306,41.9540846],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:41Z","tags":{}},"n2138425439":{"id":"n2138425439","loc":[-85.6161354,41.954181],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:41Z","tags":{}},"n2138425440":{"id":"n2138425440","loc":[-85.6162733,41.954263],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:41Z","tags":{}},"n2138425443":{"id":"n2138425443","loc":[-85.6183273,41.9510826],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:41Z","tags":{}},"n2138425444":{"id":"n2138425444","loc":[-85.6181354,41.9510835],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:41Z","tags":{}},"n2138425448":{"id":"n2138425448","loc":[-85.6185033,41.9510816],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:41Z","tags":{}},"n2138425450":{"id":"n2138425450","loc":[-85.6186816,41.9510808],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:41Z","tags":{}},"n2138425452":{"id":"n2138425452","loc":[-85.6188641,41.9510818],"version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:41Z","tags":{}},"n2138435984":{"id":"n2138435984","loc":[-85.6167607,41.9501009],"version":"2","changeset":"14970854","user":"oldtopos","uid":"169004","visible":"true","timestamp":"2013-02-09T18:25:47Z","tags":{}},"n2138436000":{"id":"n2138436000","loc":[-85.6173169,41.947558],"version":"1","changeset":"14878954","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:47:01Z","tags":{}},"n2138436001":{"id":"n2138436001","loc":[-85.6173362,41.948883],"version":"1","changeset":"14878954","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:47:01Z","tags":{}},"n2138436002":{"id":"n2138436002","loc":[-85.6167791,41.9492952],"version":"1","changeset":"14878954","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:47:01Z","tags":{}},"n2138436003":{"id":"n2138436003","loc":[-85.6167543,41.949349],"version":"1","changeset":"14878954","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:47:01Z","tags":{}},"n2138436004":{"id":"n2138436004","loc":[-85.6167648,41.9509125],"version":"1","changeset":"14878954","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:47:01Z","tags":{}},"n2138436005":{"id":"n2138436005","loc":[-85.6168832,41.9510412],"version":"1","changeset":"14878954","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:47:01Z","tags":{}},"n2138436006":{"id":"n2138436006","loc":[-85.6170045,41.9511417],"version":"1","changeset":"14878954","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:47:01Z","tags":{}},"n2138436007":{"id":"n2138436007","loc":[-85.6170624,41.9512483],"version":"1","changeset":"14878954","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:47:02Z","tags":{}},"n2138436017":{"id":"n2138436017","loc":[-85.6168094,41.9492729],"version":"1","changeset":"14878954","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:47:02Z","tags":{}},"n2138436021":{"id":"n2138436021","loc":[-85.6167553,41.9494886],"version":"1","changeset":"14878954","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:47:02Z","tags":{}},"n2138436023":{"id":"n2138436023","loc":[-85.6167585,41.9499707],"version":"1","changeset":"14878954","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:47:02Z","tags":{}},"n2138436025":{"id":"n2138436025","loc":[-85.6167567,41.9497018],"version":"1","changeset":"14878954","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:47:02Z","tags":{}},"w203838284":{"id":"w203838284","version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:42Z","tags":{"area":"yes","leisure":"pitch","sport":"baseball"},"nodes":["n2138425424","n2138425425","n2138425426","n2138425427","n2138425428","n2138425429","n2138425430","n2138425431","n2138425432","n2138425424"]},"w203837928":{"id":"w203837928","version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:13Z","tags":{"highway":"service"},"nodes":["n2138420717","n2138420718","n2138420719","n2138420720","n2138420721","n2138420722","n185948818","n2138420723","n2138420724","n2138420715"]},"w203839364":{"id":"w203839364","version":"1","changeset":"14878967","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:54:18Z","tags":{"highway":"footway"},"nodes":["n2138439331","n2138439332"]},"w203837932":{"id":"w203837932","version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:13Z","tags":{"amenity":"parking","area":"yes"},"nodes":["n2138420744","n2138420745","n2138420746","n2138420747","n2138420748","n2138420749","n2138420750","n2138420751","n2138420744"]},"w203839362":{"id":"w203839362","version":"1","changeset":"14878967","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:54:18Z","tags":{"highway":"footway"},"nodes":["n2138439327","n2138439328"]},"w203839363":{"id":"w203839363","version":"1","changeset":"14878967","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:54:18Z","tags":{"highway":"footway"},"nodes":["n2138439329","n2138439330"]},"w203837933":{"id":"w203837933","version":"2","changeset":"14970854","user":"oldtopos","uid":"169004","visible":"true","timestamp":"2013-02-09T18:25:42Z","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n185955128","n2138420760","n2138420753","n2138420764","n2138420759","n2138420758","n2138420754","n2138420755","n2138420766","n2138420756"]},"w203837936":{"id":"w203837936","version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:14Z","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2138420765","n2138420766"]},"w17966364":{"id":"w17966364","version":"2","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:14Z","tags":{"access":"private","highway":"service","name":"Collins Dr","tiger:cfcc":"A74","tiger:county":"St. Joseph, MI","tiger:name_base":"Collins","tiger:name_type":"Dr","tiger:reviewed":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313686","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185961362","n185976502","n2138420773","n2138420768","n2138420713","n185976504","n2138420717","n2138420714","n2138420715","n2138420727","n2138420728","n2138420716"]},"w203838040":{"id":"w203838040","version":"3","changeset":"14878967","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:54:19Z","tags":{"amenity":"school","area":"yes","building":"yes","name":"Three Rivers Middle School"},"nodes":["n2138422349","n2138422350","n2138422351","n2138422352","n2138422353","n2138422354","n2138422355","n2138422356","n2138422357","n2138439330","n2138422358","n2138422359","n2138422360","n2138436014","n2138439327","n2138422361","n2138422362","n2138422363","n2138422364","n2138422365","n2138422366","n2138422367","n2138422368","n2138422369","n2138422370","n2138422371","n2138422372","n2138422373","n2138422374","n2138422375","n2138422376","n2138439332","n2138439333","n2138422377","n2138422378","n2138422349"]},"w17964049":{"id":"w17964049","version":"3","changeset":"14970854","user":"oldtopos","uid":"169004","visible":"true","timestamp":"2013-02-09T18:25:46Z","tags":{"highway":"service","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15335181","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185955120","n185955123","n2138420716","n185955128","n2138420762","n2138420752","n2138420761","n2138420759"]},"w41074899":{"id":"w41074899","version":"4","changeset":"14676554","user":"bbmiller","uid":"451048","visible":"true","timestamp":"2013-01-16T20:05:18Z","tags":{"highway":"secondary","name":"E Hoffman St","ref":"M 60","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Hoffman","tiger:name_direction_prefix":"E","tiger:name_type":"St","tiger:reviewed":"no","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185978817","n185978819","n185978821","n185965033","n185978828","n185958839","n185978830"]},"w203839365":{"id":"w203839365","version":"1","changeset":"14878967","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:54:18Z","tags":{"highway":"footway"},"nodes":["n2138439333","n2138439334"]},"w203837935":{"id":"w203837935","version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:14Z","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2138420762","n2138420763","n2138420764"]},"w203838287":{"id":"w203838287","version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:42Z","tags":{"area":"yes","leisure":"pitch","sport":"tennis"},"nodes":["n2138425446","n2138425447","n2138425448","n2138425443","n2138425446"]},"w203837934":{"id":"w203837934","version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:14Z","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2138420760","n2138420763","n2138420761"]},"w203838289":{"id":"w203838289","version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:42Z","tags":{"area":"yes","leisure":"pitch","sport":"tennis"},"nodes":["n2138425449","n2138425451","n2138425452","n2138425450","n2138425449"]},"w17963047":{"id":"w17963047","version":"4","changeset":"14878967","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:54:19Z","tags":{"highway":"service","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15331535","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185948818","n2138436013","n185948820","n185948822","n185948824","n2138439326","n2138420767","n2138420766"]},"w203839091":{"id":"w203839091","version":"3","changeset":"14970854","user":"oldtopos","uid":"169004","visible":"true","timestamp":"2013-02-09T18:25:44Z","tags":{"highway":"footway"},"nodes":["n185976502","n2138436000","n2138436001","n2138436017","n2138436002","n2138436003","n2138436021","n2138436025","n2138436023","n2138435984","n2138436004","n2138436005","n2138436006","n2138436007","n2138436008","n2138436009","n2138436010","n2138436011","n2138436012","n2138436013","n2138439319","n2138439329","n2138436014"]},"w204830797":{"id":"w204830797","version":"1","changeset":"14970854","user":"oldtopos","uid":"169004","visible":"true","timestamp":"2013-02-09T18:25:37Z","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2138420756","n2138420757","n2138420765","n2138420758"]},"w203838288":{"id":"w203838288","version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:42Z","tags":{"area":"yes","leisure":"pitch","sport":"tennis"},"nodes":["n2138425447","n2138425449","n2138425450","n2138425448","n2138425447"]},"w203838285":{"id":"w203838285","version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:42Z","tags":{"area":"yes","leisure":"pitch","sport":"baseball"},"nodes":["n2138425433","n2138425434","n2138425435","n2138425436","n2138425437","n2138425438","n2138425439","n2138425440","n2138425441","n2138425442","n2138425433"]},"w203838286":{"id":"w203838286","version":"1","changeset":"14878914","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:33:42Z","tags":{"area":"yes","leisure":"pitch","sport":"tennis"},"nodes":["n2138425443","n2138425444","n2138425445","n2138425446","n2138425443"]},"w203837929":{"id":"w203837929","version":"1","changeset":"14878832","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:00:13Z","tags":{"amenity":"parking","area":"yes"},"nodes":["n2138420725","n2138420726","n2138420727","n2138420728","n2138420725"]},"w203839361":{"id":"w203839361","version":"1","changeset":"14878967","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T04:54:18Z","tags":{"highway":"footway"},"nodes":["n2138439319","n2138439328","n2138439320","n2138439321","n2138439322","n2138439331","n2138439334","n2138439323","n2138439324","n2138439325","n2138439326"]},"n394381698":{"id":"n394381698","loc":[-85.614471,41.954755],"version":"1","changeset":"1160198","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T04:27:13Z","tags":{}},"n394381699":{"id":"n394381699","loc":[-85.6152,41.954744],"version":"1","changeset":"1160198","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T04:27:13Z","tags":{}},"n394381700":{"id":"n394381700","loc":[-85.615201,41.954081],"version":"1","changeset":"1160198","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T04:27:13Z","tags":{}},"n394381701":{"id":"n394381701","loc":[-85.614426,41.954042],"version":"1","changeset":"1160198","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T04:27:13Z","tags":{}},"n394381702":{"id":"n394381702","loc":[-85.616319,41.954749],"version":"1","changeset":"1160198","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T04:27:13Z","tags":{}},"n394381704":{"id":"n394381704","loc":[-85.616152,41.954752],"version":"1","changeset":"1160198","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T04:27:13Z","tags":{}},"n394381706":{"id":"n394381706","loc":[-85.615201,41.95483],"version":"1","changeset":"1160198","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T04:27:13Z","tags":{}},"n394490775":{"id":"n394490775","loc":[-85.613971,41.954839],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:58Z","tags":{}},"n394490782":{"id":"n394490782","loc":[-85.614372,41.954841],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:58Z","tags":{}},"n185958835":{"id":"n185958835","loc":[-85.611615,41.953704],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:34Z","tags":{}},"n185958837":{"id":"n185958837","loc":[-85.611636,41.953938],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:34Z","tags":{}},"n185958842":{"id":"n185958842","loc":[-85.611187,41.951686],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:34Z","tags":{}},"n185958844":{"id":"n185958844","loc":[-85.611087,41.951741],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:34Z","tags":{}},"n185958845":{"id":"n185958845","loc":[-85.611034,41.951852],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:34Z","tags":{}},"n185958847":{"id":"n185958847","loc":[-85.611016,41.95196],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:34Z","tags":{}},"n185958849":{"id":"n185958849","loc":[-85.610989,41.95328],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:34Z","tags":{}},"n185958851":{"id":"n185958851","loc":[-85.611021,41.953484],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:34Z","tags":{}},"n185958852":{"id":"n185958852","loc":[-85.611091,41.953603],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:34Z","tags":{}},"n185958853":{"id":"n185958853","loc":[-85.6112,41.953661],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:34Z","tags":{}},"n185958855":{"id":"n185958855","loc":[-85.611364,41.953686],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:58:34Z","tags":{}},"n185965031":{"id":"n185965031","loc":[-85.614204,41.953696],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:42Z","tags":{}},"n185965032":{"id":"n185965032","loc":[-85.6142,41.953978],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:42Z","tags":{}},"n185965062":{"id":"n185965062","loc":[-85.614617,41.951639],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:43Z","tags":{}},"n185965064":{"id":"n185965064","loc":[-85.61463,41.951852],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:43Z","tags":{}},"n185965066":{"id":"n185965066","loc":[-85.614642,41.953436],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:43Z","tags":{}},"n185965068":{"id":"n185965068","loc":[-85.6146,41.953551],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:43Z","tags":{}},"n185965071":{"id":"n185965071","loc":[-85.614487,41.95363],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:43Z","tags":{}},"n185965073":{"id":"n185965073","loc":[-85.614354,41.953672],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:01:43Z","tags":{}},"n185966288":{"id":"n185966288","loc":[-85.61179,41.953695],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:33Z","tags":{}},"n185966290":{"id":"n185966290","loc":[-85.612232,41.953685],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:33Z","tags":{}},"n185966293":{"id":"n185966293","loc":[-85.613438,41.953677],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:33Z","tags":{}},"n185966349":{"id":"n185966349","loc":[-85.611323,41.951653],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:34Z","tags":{}},"n185966351":{"id":"n185966351","loc":[-85.611892,41.951642],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:34Z","tags":{}},"n185966352":{"id":"n185966352","loc":[-85.612216,41.951641],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:34Z","tags":{}},"n185966353":{"id":"n185966353","loc":[-85.613111,41.951639],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:34Z","tags":{}},"n185966354":{"id":"n185966354","loc":[-85.613396,41.95164],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:34Z","tags":{}},"n185966355":{"id":"n185966355","loc":[-85.614221,41.95164],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:02:34Z","tags":{}},"n185973839":{"id":"n185973839","loc":[-85.61341,41.951919],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:06:03Z","tags":{}},"n185973840":{"id":"n185973840","loc":[-85.613438,41.953308],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:06:03Z","tags":{}},"n185980222":{"id":"n185980222","loc":[-85.613781,41.955164],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:33Z","tags":{}},"n185980223":{"id":"n185980223","loc":[-85.613815,41.955237],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:33Z","tags":{}},"n185980225":{"id":"n185980225","loc":[-85.613837,41.955316],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:33Z","tags":{}},"n185990345":{"id":"n185990345","loc":[-85.612211,41.951977],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:15:01Z","tags":{}},"n185955743":{"id":"n185955743","loc":[-85.613873,41.95635],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:56:55Z","tags":{}},"n185980227":{"id":"n185980227","loc":[-85.613851,41.955415],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:33Z","tags":{}},"n185980229":{"id":"n185980229","loc":[-85.613918,41.957134],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T05:09:33Z","tags":{}},"n394381703":{"id":"n394381703","loc":[-85.616287,41.955674],"version":"1","changeset":"1160198","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T04:27:13Z","tags":{}},"n394381705":{"id":"n394381705","loc":[-85.615164,41.955676],"version":"1","changeset":"1160198","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T04:27:13Z","tags":{}},"n394490777":{"id":"n394490777","loc":[-85.613973,41.955979],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:58Z","tags":{}},"n394490780":{"id":"n394490780","loc":[-85.614364,41.955987],"version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:58Z","tags":{}},"w17965307":{"id":"w17965307","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:35:58Z","tags":{"highway":"residential","name":"Bates Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Bates","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313640:15313641","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185958842","n185966349","n185966351","n185966352","n185966353","n185966354","n185966355","n185965062"]},"w17967957":{"id":"w17967957","version":"1","changeset":"402580","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:55:16Z","tags":{"highway":"residential","name":"Krum Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Krum","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313643","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185966352","n185990345","n185966290"]},"w17964508":{"id":"w17964508","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:30:11Z","tags":{"highway":"residential","name":"Blossom Dr","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Blossom","tiger:name_type":"Dr","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15324628","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185958842","n185958844","n185958845","n185958847","n185958849","n185958851","n185958852","n185958853","n185958855","n185958835"]},"w17964507":{"id":"w17964507","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:30:10Z","tags":{"highway":"residential","name":"Blossom Dr","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Blossom","tiger:name_type":"Dr","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313629","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185958835","n185958837","n185958839"]},"w34367080":{"id":"w34367080","version":"1","changeset":"1160198","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T04:27:13Z","tags":{"admin_level":"8","boundary":"administrative","created_by":"polyshp2osm-multipoly","source":"TIGER/Line® 2008 Place Shapefiles (http://www.census.gov/geo/www/tiger/)"},"nodes":["n394381699","n394381706","n394381705","n394381703","n394381702","n394381704","n394381699"]},"w17965302":{"id":"w17965302","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:35:55Z","tags":{"highway":"residential","name":"Clausen Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Clausen","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313630:15313631:15313632","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185958835","n185966288","n185966290","n185966293","n185965031"]},"w17965156":{"id":"w17965156","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:34:54Z","tags":{"highway":"residential","name":"Orchard Dr","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Orchard","tiger:name_type":"Dr","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15327962","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185965062","n185965064","n185965066","n185965068","n185965071","n185965073","n185965031"]},"w34369812":{"id":"w34369812","version":"1","changeset":"1160580","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T06:07:58Z","tags":{"admin_level":"8","boundary":"administrative","created_by":"polyshp2osm-multipoly","source":"TIGER/Line® 2008 Place Shapefiles (http://www.census.gov/geo/www/tiger/)"},"nodes":["n394490775","n394490777","n394490780","n394490782","n394490775"]},"w17965151":{"id":"w17965151","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:34:52Z","tags":{"highway":"residential","name":"Orchard Dr","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Orchard","tiger:name_type":"Dr","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313628","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185965031","n185965032","n185965033"]},"w17966756":{"id":"w17966756","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:47:10Z","tags":{"access":"private","highway":"service","name":"Lockport Dr","tiger:cfcc":"A74","tiger:county":"St. Joseph, MI","tiger:name_base":"Lockport","tiger:name_type":"Dr","tiger:reviewed":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313621:15314402","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185978828","n185980222","n185980223","n185980225","n185980227","n185955743","n185980229"]},"w17966056":{"id":"w17966056","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:41:57Z","tags":{"highway":"residential","name":"Angell Ave","tiger:cfcc":"A41","tiger:county":"St. Joseph, MI","tiger:name_base":"Angell","tiger:name_type":"Ave","tiger:reviewed":"no","tiger:separated":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15313639","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185966354","n185973839","n185973840","n185966293"]},"w34367079":{"id":"w34367079","version":"1","changeset":"1160198","user":"TIGERcnl","uid":"120146","visible":"true","timestamp":"2009-05-12T04:27:13Z","tags":{"admin_level":"8","boundary":"administrative","created_by":"polyshp2osm-multipoly","source":"TIGER/Line® 2008 Place Shapefiles (http://www.census.gov/geo/www/tiger/)"},"nodes":["n394381700","n394381701","n394381698","n394381699","n394381700"]},"n185955744":{"id":"n185955744","loc":[-85.611753,41.956208],"version":"2","changeset":"2196690","user":"woodpeck_fixbot","uid":"147510","visible":"true","timestamp":"2009-08-19T04:56:55Z","tags":{}},"n185988932":{"id":"n185988932","loc":[-85.6159,41.956336],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:04Z","tags":{}},"n185988934":{"id":"n185988934","loc":[-85.6159158,41.9590646],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:04Z","tags":{}},"n185988935":{"id":"n185988935","loc":[-85.6157358,41.959364],"version":"3","changeset":"12169723","user":"Tom Layo","uid":"280679","visible":"true","timestamp":"2012-07-10T06:59:04Z","tags":{"highway":"turning_circle","source":"Bing"}},"n2138447007":{"id":"n2138447007","loc":[-85.6130784,41.9590689],"version":"1","changeset":"14878989","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:02:39Z","tags":{}},"n2138447008":{"id":"n2138447008","loc":[-85.6133328,41.9593805],"version":"1","changeset":"14878989","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:02:39Z","tags":{}},"n2138447003":{"id":"n2138447003","loc":[-85.610238,41.9547745],"version":"1","changeset":"14878989","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:02:39Z","tags":{}},"n2138447004":{"id":"n2138447004","loc":[-85.6102652,41.9566041],"version":"1","changeset":"14878989","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:02:39Z","tags":{}},"n2138447005":{"id":"n2138447005","loc":[-85.610325,41.9568823],"version":"1","changeset":"14878989","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:02:39Z","tags":{}},"n2138447006":{"id":"n2138447006","loc":[-85.6105644,41.9571383],"version":"1","changeset":"14878989","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:02:39Z","tags":{}},"n2138447009":{"id":"n2138447009","loc":[-85.6135946,41.959948],"version":"1","changeset":"14878989","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:02:39Z","tags":{}},"n2138447010":{"id":"n2138447010","loc":[-85.6136071,41.9629372],"version":"1","changeset":"14878989","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:02:39Z","tags":{}},"n2138447011":{"id":"n2138447011","loc":[-85.6134392,41.9633182],"version":"1","changeset":"14878989","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:02:39Z","tags":{}},"n2138447012":{"id":"n2138447012","loc":[-85.6130151,41.9636073],"version":"1","changeset":"14878989","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:02:39Z","tags":{}},"n2138447013":{"id":"n2138447013","loc":[-85.6122729,41.9637125],"version":"1","changeset":"14878989","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:02:39Z","tags":{}},"n2138447014":{"id":"n2138447014","loc":[-85.6056682,41.963752],"version":"1","changeset":"14878989","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:02:39Z","tags":{}},"w17964174":{"id":"w17964174","version":"1","changeset":"402341","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:27:41Z","tags":{"access":"private","highway":"service","tiger:cfcc":"A74","tiger:county":"St. Joseph, MI","tiger:reviewed":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15314401","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7"},"nodes":["n185955743","n185955744"]},"w17967743":{"id":"w17967743","version":"1","changeset":"402580","user":"DaveHansenTiger","uid":"7168","visible":"true","timestamp":"2007-12-23T20:54:06Z","tags":{"access":"private","highway":"service","name":"Manistee River Rd","tiger:cfcc":"A74","tiger:county":"St. Joseph, MI","tiger:name_base":"Manistee River","tiger:name_type":"Rd","tiger:reviewed":"no","tiger:source":"tiger_import_dch_v0.6_20070813","tiger:tlid":"15326121:15326126:15326127:15326116","tiger:upload_uuid":"bulk_upload.pl-b79f893a-0be1-4a5f-a183-6aea114c9af7","tiger:zip_left":"49093","tiger:zip_right":"49093"},"nodes":["n185971574","n185988932","n185971407","n185981301","n185967987","n185988934","n185988935"]},"w203839666":{"id":"w203839666","version":"1","changeset":"14878989","user":"ansis","uid":"1193517","visible":"true","timestamp":"2013-02-02T05:02:39Z","tags":{"highway":"residential","name":"Hov Aire Drive"},"nodes":["n2138447003","n2138447004","n2138447005","n2138447006","n2138447007","n2138447008","n2138447009","n2138447010","n2138447011","n2138447012","n2138447013","n2138447014"]}}';iD.data = { - "deprecated": [ - { - "old": { - "barrier": "wire_fence" - }, - "replace": { - "barrier": "fence", - "fence_type": "chain" - } - }, - { - "old": { - "barrier": "wood_fence" - }, - "replace": { - "barrier": "fence", - "fence_type": "wood" - } - }, - { - "old": { - "highway": "ford" - }, - "replace": { - "ford": "yes" - } - }, - { - "old": { - "highway": "stile" - }, - "replace": { - "barrier": "stile" - } - }, - { - "old": { - "highway": "incline" - }, - "replace": { - "highway": "road", - "incline": "up" + if (!_.isEqual(entity.tags, tags)) { + if (coalesceChanges) { + context.overwrite(iD.actions.ChangeTags(id, tags), annotation); + } else { + context.perform(iD.actions.ChangeTags(id, tags), annotation); } - }, - { - "old": { - "highway": "incline_steep" - }, - "replace": { - "highway": "road", - "incline": "up" - } - }, - { - "old": { - "highway": "unsurfaced" - }, - "replace": { - "highway": "road", - "incline": "unpaved" + } + + coalesceChanges = !!onInput; + } + + entityEditor.modified = function(_) { + if (!arguments.length) return modified; + modified = _; + d3.selectAll('button.preset-close use') + .attr('xlink:href', (modified ? '#icon-apply' : '#icon-close')); + }; + + entityEditor.state = function(_) { + if (!arguments.length) return state; + state = _; + return entityEditor; + }; + + entityEditor.entityID = function(_) { + if (!arguments.length) return id; + id = _; + base = context.graph(); + entityEditor.preset(context.presets().match(context.entity(id), base)); + entityEditor.modified(false); + coalesceChanges = false; + return entityEditor; + }; + + entityEditor.preset = function(_) { + if (!arguments.length) return preset; + if (_ !== preset) { + preset = _; + reference = iD.ui.TagReference(preset.reference(context.geometry(id)), context) + .showing(false); + } + return entityEditor; + }; + + return d3.rebind(entityEditor, dispatch, 'on'); +}; +iD.ui.FeatureInfo = function(context) { + function update(selection) { + var features = context.features(), + stats = features.stats(), + count = 0, + hiddenList = _.compact(_.map(features.hidden(), function(k) { + if (stats[k]) { + count += stats[k]; + return String(stats[k]) + ' ' + t('feature.' + k + '.description'); + } + })); + + selection.html(''); + + if (hiddenList.length) { + var tooltip = bootstrap.tooltip() + .placement('top') + .html(true) + .title(function() { + return iD.ui.tooltipHtml(hiddenList.join('
    ')); + }); + + var warning = selection.append('a') + .attr('href', '#') + .attr('tabindex', -1) + .html(t('feature_info.hidden_warning', { count: count })) + .call(tooltip) + .on('click', function() { + tooltip.hide(warning); + // open map data panel? + d3.event.preventDefault(); + }); + } + + selection + .classed('hide', !hiddenList.length); + } + + return function(selection) { + update(selection); + + context.features().on('change.feature_info', function() { + update(selection); + }); + }; +}; +iD.ui.FeatureList = function(context) { + var geocodeResults; + + function featureList(selection) { + var header = selection.append('div') + .attr('class', 'header fillL cf'); + + header.append('h3') + .text(t('inspector.feature_list')); + + function keypress() { + var q = search.property('value'), + items = list.selectAll('.feature-list-item'); + if (d3.event.keyCode === 13 && q.length && items.size()) { + click(items.datum()); } - }, - { - "old": { - "landuse": "wood" - }, - "replace": { - "landuse": "forest", - "natural": "wood" + } + + function inputevent() { + geocodeResults = undefined; + drawList(); + } + + var searchWrap = selection.append('div') + .attr('class', 'search-header'); + + var search = searchWrap.append('input') + .attr('placeholder', t('inspector.search')) + .attr('type', 'search') + .on('keypress', keypress) + .on('input', inputevent); + + searchWrap + .call(iD.svg.Icon('#icon-search', 'pre-text')); + + var listWrap = selection.append('div') + .attr('class', 'inspector-body'); + + var list = listWrap.append('div') + .attr('class', 'feature-list cf'); + + context + .on('exit.feature-list', clearSearch); + context.map() + .on('drawn.feature-list', mapDrawn); + + function clearSearch() { + search.property('value', ''); + drawList(); + } + + function mapDrawn(e) { + if (e.full) { + drawList(); } - }, - { - "old": { - "natural": "marsh" - }, - "replace": { - "natural": "wetland", - "wetland": "marsh" + } + + function features() { + var entities = {}, + result = [], + graph = context.graph(), + q = search.property('value').toLowerCase(); + + if (!q) return result; + + var idMatch = q.match(/^([nwr])([0-9]+)$/); + + if (idMatch) { + result.push({ + id: idMatch[0], + geometry: idMatch[1] === 'n' ? 'point' : idMatch[1] === 'w' ? 'line' : 'relation', + type: idMatch[1] === 'n' ? t('inspector.node') : idMatch[1] === 'w' ? t('inspector.way') : t('inspector.relation'), + name: idMatch[2] + }); } - }, - { - "old": { - "shop": "organic" - }, - "replace": { - "shop": "supermarket", - "organic": "only" + + var locationMatch = sexagesimal.pair(q.toUpperCase()) || q.match(/^(-?\d+\.?\d*)\s+(-?\d+\.?\d*)$/); + + if (locationMatch) { + var loc = [parseFloat(locationMatch[0]), parseFloat(locationMatch[1])]; + result.push({ + id: -1, + geometry: 'point', + type: t('inspector.location'), + name: loc[0].toFixed(6) + ', ' + loc[1].toFixed(6), + location: loc + }); } - }, - { - "old": { - "power_source": "*" - }, - "replace": { - "generator:source": "$1" + + function addEntity(entity) { + if (entity.id in entities || result.length > 200) + return; + + entities[entity.id] = true; + + var name = iD.util.displayName(entity) || ''; + if (name.toLowerCase().indexOf(q) >= 0) { + result.push({ + id: entity.id, + entity: entity, + geometry: context.geometry(entity.id), + type: context.presets().match(entity, graph).name(), + name: name + }); + } + + graph.parentRelations(entity).forEach(function(parent) { + addEntity(parent); + }); } - }, - { - "old": { - "power_rating": "*" - }, - "replace": { - "generator:output": "$1" + + var visible = context.surface().selectAll('.point, .line, .area')[0]; + for (var i = 0; i < visible.length && result.length <= 200; i++) { + addEntity(visible[i].__data__); } + + (geocodeResults || []).forEach(function(d) { + // https://github.com/openstreetmap/iD/issues/1890 + if (d.osm_type && d.osm_id) { + result.push({ + id: iD.Entity.id.fromOSM(d.osm_type, d.osm_id), + geometry: d.osm_type === 'relation' ? 'relation' : d.osm_type === 'way' ? 'line' : 'point', + type: d.type !== 'yes' ? (d.type.charAt(0).toUpperCase() + d.type.slice(1)).replace('_', ' ') + : (d.class.charAt(0).toUpperCase() + d.class.slice(1)).replace('_', ' '), + name: d.display_name, + extent: new iD.geo.Extent( + [parseFloat(d.boundingbox[3]), parseFloat(d.boundingbox[0])], + [parseFloat(d.boundingbox[2]), parseFloat(d.boundingbox[1])]) + }); + } + }); + + return result; } - ], - "discarded": [ - "created_by", - "odbl", - "odbl:note", - "tiger:upload_uuid", - "tiger:tlid", - "tiger:source", - "tiger:separated", - "geobase:datasetName", - "geobase:uuid", - "sub_sea:type", - "KSJ2:ADS", - "KSJ2:ARE", - "KSJ2:AdminArea", - "KSJ2:COP_label", - "KSJ2:DFD", - "KSJ2:INT", - "KSJ2:INT_label", - "KSJ2:LOC", - "KSJ2:LPN", - "KSJ2:OPC", - "KSJ2:PubFacAdmin", - "KSJ2:RAC", - "KSJ2:RAC_label", - "KSJ2:RIC", - "KSJ2:RIN", - "KSJ2:WSC", - "KSJ2:coordinate", - "KSJ2:curve_id", - "KSJ2:curve_type", - "KSJ2:filename", - "KSJ2:lake_id", - "KSJ2:lat", - "KSJ2:long", - "KSJ2:river_id", - "yh:LINE_NAME", - "yh:LINE_NUM", - "yh:STRUCTURE", - "yh:TOTYUMONO", - "yh:TYPE", - "yh:WIDTH_RANK", - "SK53_bulk:load" - ], - "imagery": [ - { - "name": "7th Series (OS7)", - "type": "tms", - "template": "http://ooc.openstreetmap.org/os7/{zoom}/{x}/{y}.jpg", - "polygon": [ - [ - [ - -9, - 49.8 - ], - [ - -9, - 61.1 - ], - [ - 1.9, - 61.1 - ], - [ - 1.9, - 49.8 - ], - [ - -9, - 49.8 - ] - ] - ] - }, - { - "name": "AGRI black-and-white 2.5m", - "type": "tms", - "template": "http://agri.openstreetmap.org/{zoom}/{x}/{y}.png", - "polygon": [ - [ - [ - 112.28778, - -28.784589 - ], - [ - 112.71488, - -31.13894 - ], - [ - 114.11263, - -34.178287 - ], - [ - 113.60788, - -37.39012 - ], - [ - 117.17992, - -37.451794 - ], - [ - 119.31538, - -37.42096 - ], - [ - 121.72262, - -36.708394 - ], - [ - 123.81925, - -35.76893 - ], - [ - 125.9547, - -34.3066 - ], - [ - 127.97368, - -33.727398 - ], - [ - 130.07031, - -33.24166 - ], - [ - 130.10913, - -33.888704 - ], - [ - 131.00214, - -34.049705 - ], - [ - 131.0798, - -34.72257 - ], - [ - 132.28342, - -35.39 - ], - [ - 134.18591, - -35.61126 - ], - [ - 133.8753, - -37.1119 - ], - [ - 134.8459, - -37.6365 - ], - [ - 139.7769, - -37.82075 - ], - [ - 139.93223, - -39.4283 - ], - [ - 141.6017, - -39.8767 - ], - [ - 142.3783, - -39.368294 - ], - [ - 142.3783, - -40.64702 - ], - [ - 142.49478, - -42.074874 - ], - [ - 144.009, - -44.060127 - ], - [ - 147.23161, - -44.03222 - ], - [ - 149.05645, - -42.534313 - ], - [ - 149.52237, - -40.99959 - ], - [ - 149.9494, - -40.852921 - ], - [ - 150.8036, - -38.09627 - ], - [ - 151.81313, - -38.12682 - ], - [ - 156.20052, - -22.667706 - ], - [ - 156.20052, - -20.10109 - ], - [ - 156.62761, - -17.417627 - ], - [ - 155.26869, - -17.19521 - ], - [ - 154.14272, - -19.51662 - ], - [ - 153.5215, - -18.34139 - ], - [ - 153.05558, - -16.5636 - ], - [ - 152.78379, - -15.256768 - ], - [ - 152.27905, - -13.4135 - ], - [ - 151.3472, - -12.391767 - ], - [ - 149.48354, - -12.05024 - ], - [ - 146.9598, - -9.992408 - ], - [ - 135.9719, - -9.992408 - ], - [ - 130.3032, - -10.33636 - ], - [ - 128.09016, - -12.164136 - ], - [ - 125.91588, - -12.315912 - ], - [ - 124.3239, - -11.860326 - ], - [ - 122.03323, - -11.974295 - ], - [ - 118.26706, - -16.9353 - ], - [ - 115.93747, - -19.11357 - ], - [ - 114.0738, - -21.11863 - ], - [ - 113.49141, - -22.596033 - ], - [ - 112.28778, - -28.784589 - ] - ] - ], - "terms_text": "AGRI" - }, - { - "name": "Bing aerial imagery", - "type": "bing", - "description": "Satellite and aerial imagery.", - "template": "http://www.bing.com/maps/", - "scaleExtent": [ - 0, - 22 - ], - "id": "Bing", - "default": true - }, - { - "name": "British Columbia Mosaic", - "type": "tms", - "template": "http://{switch:a,b,c,d}.imagery.paulnorman.ca/tiles/bc_mosaic/{zoom}/{x}/{y}.png", - "scaleExtent": [ - 9, - 20 - ], - "polygon": [ - [ - [ - -123.3176032, - 49.3272567 - ], - [ - -123.4405258, - 49.3268222 - ], - [ - -123.440717, - 49.3384429 - ], - [ - -123.4398375, - 49.3430357 - ], - [ - -123.4401258, - 49.3435398 - ], - [ - -123.4401106, - 49.3439946 - ], - [ - -123.4406265, - 49.3444493 - ], - [ - -123.4404747, - 49.3455762 - ], - [ - -123.4397768, - 49.3460606 - ], - [ - -123.4389726, - 49.3461298 - ], - [ - -123.4372904, - 49.3567236 - ], - [ - -123.4374774, - 49.3710843 - ], - [ - -123.4335292, - 49.3709446 - ], - [ - -123.4330357, - 49.373725 - ], - [ - -123.4332717, - 49.3751221 - ], - [ - -123.4322847, - 49.3761001 - ], - [ - -123.4317482, - 49.3791736 - ], - [ - -123.4314264, - 49.3795927 - ], - [ - -123.4307826, - 49.3823866 - ], - [ - -123.4313405, - 49.3827358 - ], - [ - -123.4312118, - 49.3838533 - ], - [ - -123.4300415, - 49.3845883 - ], - [ - -123.4189858, - 49.3847087 - ], - [ - -123.4192235, - 49.4135198 - ], - [ - -123.3972532, - 49.4135691 - ], - [ - -123.3972758, - 49.4243473 - ], - [ - -123.4006929, - 49.4243314 - ], - [ - -123.4007741, - 49.5703491 - ], - [ - -123.4000812, - 49.570345 - ], - [ - -123.4010761, - 49.5933838 - ], - [ - -123.3760399, - 49.5932848 - ], - [ - -123.3769811, - 49.6756063 - ], - [ - -123.3507288, - 49.6756396 - ], - [ - -123.3507969, - 49.7086751 - ], - [ - -123.332887, - 49.708722 - ], - [ - -123.3327888, - 49.7256288 - ], - [ - -123.3007111, - 49.7255625 - ], - [ - -123.3009164, - 49.7375384 - ], - [ - -123.2885986, - 49.737638 - ], - [ - -123.2887823, - 49.8249207 - ], - [ - -123.2997955, - 49.8249207 - ], - [ - -123.3011721, - 49.8497814 - ], - [ - -123.3218218, - 49.850669 - ], - [ - -123.3273284, - 49.8577696 - ], - [ - -123.3276726, - 49.9758852 - ], - [ - -123.3008279, - 49.9752212 - ], - [ - -123.3007204, - 50.0997002 - ], - [ - -123.2501716, - 50.100735 - ], - [ - -123.25091, - 50.2754901 - ], - [ - -123.0224338, - 50.2755598 - ], - [ - -123.0224879, - 50.3254853 - ], - [ - -123.0009318, - 50.3254689 - ], - [ - -123.0007778, - 50.3423899 - ], - [ - -122.9775023, - 50.3423408 - ], - [ - -122.9774766, - 50.3504306 - ], - [ - -122.9508137, - 50.3504961 - ], - [ - -122.950795, - 50.3711984 - ], - [ - -122.9325221, - 50.3711521 - ], - [ - -122.9321048, - 50.399793 - ], - [ - -122.8874234, - 50.3999748 - ], - [ - -122.8873385, - 50.4256108 - ], - [ - -122.6620152, - 50.4256959 - ], - [ - -122.6623083, - 50.3994506 - ], - [ - -122.5990316, - 50.3992413 - ], - [ - -122.5988274, - 50.3755206 - ], - [ - -122.5724832, - 50.3753706 - ], - [ - -122.5735621, - 50.2493891 - ], - [ - -122.5990415, - 50.2494643 - ], - [ - -122.5991504, - 50.2265663 - ], - [ - -122.6185016, - 50.2266359 - ], - [ - -122.6185741, - 50.2244081 - ], - [ - -122.6490609, - 50.2245126 - ], - [ - -122.6492181, - 50.1993528 - ], - [ - -122.7308575, - 50.1993758 - ], - [ - -122.7311583, - 50.1244287 - ], - [ - -122.7490352, - 50.1245109 - ], - [ - -122.7490541, - 50.0903032 - ], - [ - -122.7687806, - 50.0903435 - ], - [ - -122.7689801, - 49.9494546 - ], - [ - -122.999047, - 49.9494706 - ], - [ - -122.9991199, - 49.8754553 - ], - [ - -122.9775894, - 49.8754553 - ], - [ - -122.9778145, - 49.6995098 - ], - [ - -122.9992362, - 49.6994781 - ], - [ - -122.9992524, - 49.6516526 - ], - [ - -123.0221525, - 49.6516526 - ], - [ - -123.0221162, - 49.5995096 - ], - [ - -123.0491898, - 49.5994625 - ], - [ - -123.0491898, - 49.5940523 - ], - [ - -123.0664647, - 49.5940405 - ], - [ - -123.0663594, - 49.5451868 - ], - [ - -123.0699906, - 49.5451202 - ], - [ - -123.0699008, - 49.5413153 - ], - [ - -123.0706835, - 49.5392837 - ], - [ - -123.0708888, - 49.5379931 - ], - [ - -123.0711454, - 49.5368773 - ], - [ - -123.0711069, - 49.5358115 - ], - [ - -123.0713764, - 49.532822 - ], - [ - -123.0716458, - 49.5321141 - ], - [ - -123.07171, - 49.5313896 - ], - [ - -123.0720308, - 49.5304153 - ], - [ - -123.0739554, - 49.5303486 - ], - [ - -123.0748023, - 49.5294992 - ], - [ - -123.0748151, - 49.5288079 - ], - [ - -123.0743403, - 49.5280584 - ], - [ - -123.073532, - 49.5274588 - ], - [ - -123.0733652, - 49.5270423 - ], - [ - -123.0732882, - 49.5255932 - ], - [ - -123.0737116, - 49.5249602 - ], - [ - -123.0736218, - 49.5244938 - ], - [ - -123.0992583, - 49.5244854 - ], - [ - -123.0991649, - 49.4754502 - ], - [ - -123.071052, - 49.4755252 - ], - [ - -123.071088, - 49.4663034 - ], - [ - -123.0739204, - 49.4663054 - ], - [ - -123.07422, - 49.4505028 - ], - [ - -123.0746319, - 49.4500858 - ], - [ - -123.074651, - 49.449329 - ], - [ - -123.0745999, - 49.449018 - ], - [ - -123.0744619, - 49.4486927 - ], - [ - -123.0743336, - 49.4479899 - ], - [ - -123.0742427, - 49.4477688 - ], - [ - -123.0743061, - 49.4447473 - ], - [ - -123.0747103, - 49.4447556 - ], - [ - -123.0746384, - 49.4377306 - ], - [ - -122.9996506, - 49.4377363 - ], - [ - -122.9996506, - 49.4369214 - ], - [ - -122.8606163, - 49.4415314 - ], - [ - -122.8102616, - 49.4423972 - ], - [ - -122.8098984, - 49.3766739 - ], - [ - -122.4036093, - 49.3766617 - ], - [ - -122.4036341, - 49.3771944 - ], - [ - -122.264739, - 49.3773028 - ], - [ - -122.263542, - 49.2360088 - ], - [ - -122.2155742, - 49.236139 - ], - [ - -122.0580956, - 49.235878 - ], - [ - -121.9538274, - 49.2966525 - ], - [ - -121.9400911, - 49.3045389 - ], - [ - -121.9235761, - 49.3142257 - ], - [ - -121.8990871, - 49.3225436 - ], - [ - -121.8883447, - 49.3259752 - ], - [ - -121.8552982, - 49.3363575 - ], - [ - -121.832697, - 49.3441519 - ], - [ - -121.7671336, - 49.3654361 - ], - [ - -121.6736683, - 49.3654589 - ], - [ - -121.6404153, - 49.3743775 - ], - [ - -121.5961976, - 49.3860493 - ], - [ - -121.5861178, - 49.3879193 - ], - [ - -121.5213684, - 49.3994649 - ], - [ - -121.5117375, - 49.4038378 - ], - [ - -121.4679302, - 49.4229024 - ], - [ - -121.4416803, - 49.4345607 - ], - [ - -121.422429, - 49.4345788 - ], - [ - -121.3462885, - 49.3932312 - ], - [ - -121.3480144, - 49.3412388 - ], - [ - -121.5135035, - 49.320577 - ], - [ - -121.6031683, - 49.2771727 - ], - [ - -121.6584065, - 49.1856125 - ], - [ - -121.679953, - 49.1654109 - ], - [ - -121.7815793, - 49.0702559 - ], - [ - -121.8076228, - 49.0622471 - ], - [ - -121.9393997, - 49.0636219 - ], - [ - -121.9725524, - 49.0424179 - ], - [ - -121.9921394, - 49.0332869 - ], - [ - -122.0035289, - 49.0273413 - ], - [ - -122.0178564, - 49.0241067 - ], - [ - -122.1108634, - 48.9992786 - ], - [ - -122.1493067, - 48.9995305 - ], - [ - -122.1492705, - 48.9991498 - ], - [ - -122.1991447, - 48.9996019 - ], - [ - -122.199181, - 48.9991974 - ], - [ - -122.234365, - 48.9994829 - ], - [ - -122.234365, - 49.000173 - ], - [ - -122.3994722, - 49.0012385 - ], - [ - -122.4521338, - 49.0016326 - ], - [ - -122.4521338, - 49.000883 - ], - [ - -122.4584089, - 49.0009306 - ], - [ - -122.4584814, - 48.9993124 - ], - [ - -122.4992458, - 48.9995022 - ], - [ - -122.4992458, - 48.9992906 - ], - [ - -122.5492618, - 48.9995107 - ], - [ - -122.5492564, - 48.9993206 - ], - [ - -122.6580785, - 48.9994212 - ], - [ - -122.6581061, - 48.9954007 - ], - [ - -122.7067604, - 48.9955344 - ], - [ - -122.7519761, - 48.9956392 - ], - [ - -122.7922063, - 48.9957204 - ], - [ - -122.7921907, - 48.9994331 - ], - [ - -123.0350417, - 48.9995724 - ], - [ - -123.0350437, - 49.0000958 - ], - [ - -123.0397091, - 49.0000536 - ], - [ - -123.0397444, - 49.0001812 - ], - [ - -123.0485506, - 49.0001348 - ], - [ - -123.0485329, - 49.0004712 - ], - [ - -123.0557122, - 49.000448 - ], - [ - -123.0556324, - 49.0002284 - ], - [ - -123.0641365, - 49.0001293 - ], - [ - -123.064158, - 48.9999421 - ], - [ - -123.074899, - 48.9996928 - ], - [ - -123.0750717, - 49.0006218 - ], - [ - -123.0899573, - 49.0003726 - ], - [ - -123.109229, - 48.9999421 - ], - [ - -123.1271193, - 49.0003046 - ], - [ - -123.1359953, - 48.9998741 - ], - [ - -123.1362716, - 49.0005765 - ], - [ - -123.153851, - 48.9998061 - ], - [ - -123.1540533, - 49.0006806 - ], - [ - -123.1710015, - 49.0001274 - ], - [ - -123.2000916, - 48.9996849 - ], - [ - -123.2003446, - 49.0497785 - ], - [ - -123.2108845, - 49.0497232 - ], - [ - -123.2112218, - 49.051989 - ], - [ - -123.2070479, - 49.0520857 - ], - [ - -123.2078911, - 49.0607884 - ], - [ - -123.2191688, - 49.0600978 - ], - [ - -123.218958, - 49.0612719 - ], - [ - -123.2251766, - 49.0612719 - ], - [ - -123.2253874, - 49.0622388 - ], - [ - -123.2297088, - 49.0620316 - ], - [ - -123.2298142, - 49.068592 - ], - [ - -123.2331869, - 49.0687301 - ], - [ - -123.2335031, - 49.0705945 - ], - [ - -123.249313, - 49.0702493 - ], - [ - -123.2497346, - 49.0802606 - ], - [ - -123.2751358, - 49.0803986 - ], - [ - -123.2751358, - 49.0870947 - ], - [ - -123.299483, - 49.0873018 - ], - [ - -123.29944, - 49.080253 - ], - [ - -123.3254508, - 49.0803944 - ], - [ - -123.3254353, - 49.1154662 - ], - [ - -123.2750966, - 49.1503341 - ], - [ - -123.275181, - 49.1873267 - ], - [ - -123.2788067, - 49.1871063 - ], - [ - -123.278891, - 49.1910741 - ], - [ - -123.3004767, - 49.1910741 - ], - [ - -123.3004186, - 49.2622933 - ], - [ - -123.3126185, - 49.2622416 - ], - [ - -123.3125958, - 49.2714948 - ], - [ - -123.3154251, - 49.2714727 - ], - [ - -123.3156628, - 49.2818906 - ], - [ - -123.3174735, - 49.2818832 - ], - [ - -123.3174961, - 49.2918488 - ], - [ - -123.3190353, - 49.2918488 - ], - [ - -123.3190692, - 49.298602 - ], - [ - -123.3202349, - 49.2985651 - ], - [ - -123.3202786, - 49.3019749 - ], - [ - -123.3222679, - 49.3019605 - ], - [ - -123.3223943, - 49.3118263 - ], - [ - -123.3254002, - 49.3118086 - ], - [ - -123.3253898, - 49.3201721 - ], - [ - -123.3192695, - 49.3201957 - ], - [ - -123.3192242, - 49.3246748 - ], - [ - -123.3179437, - 49.3246596 - ], - [ - -123.3179861, - 49.3254065 - ] - ] - ], - "terms_url": "http://imagery.paulnorman.ca/tiles/about.html", - "terms_text": "Copyright Province of British Columbia, City of Surrey" - }, - { - "name": "Cambodia, Laos, Thailand, Vietnam bilingual", - "type": "tms", - "template": "http://{switch:a,b,c,d}.tile.osm-tools.org/osm_then/{zoom}/{x}/{y}.png", - "scaleExtent": [ - 0, - 19 - ], - "polygon": [ - [ - [ - 97.3, - 5.6 - ], - [ - 97.3, - 23.4 - ], - [ - 109.6, - 23.4 - ], - [ - 109.6, - 5.6 - ], - [ - 97.3, - 5.6 - ] - ] - ], - "terms_url": "http://www.osm-tools.org/", - "terms_text": "© osm-tools.org & OpenStreetMap contributors, CC-BY-SA" - }, - { - "name": "Freemap.sk Car", - "type": "tms", - "template": "http://t{switch:1,2,3,4}.freemap.sk/A/{zoom}/{x}/{y}.jpeg", - "scaleExtent": [ - 8, - 16 - ], - "polygon": [ - [ - [ - 19.83682, - 49.25529 - ], - [ - 19.80075, - 49.42385 - ], - [ - 19.60437, - 49.48058 - ], - [ - 19.49179, - 49.63961 - ], - [ - 19.21831, - 49.52604 - ], - [ - 19.16778, - 49.42521 - ], - [ - 19.00308, - 49.42236 - ], - [ - 18.97611, - 49.5308 - ], - [ - 18.54685, - 49.51425 - ], - [ - 18.31432, - 49.33818 - ], - [ - 18.15913, - 49.2961 - ], - [ - 18.05564, - 49.11134 - ], - [ - 17.56396, - 48.84938 - ], - [ - 17.17929, - 48.88816 - ], - [ - 17.058, - 48.81105 - ], - [ - 16.90426, - 48.61947 - ], - [ - 16.79685, - 48.38561 - ], - [ - 17.06762, - 48.01116 - ], - [ - 17.32787, - 47.97749 - ], - [ - 17.51699, - 47.82535 - ], - [ - 17.74776, - 47.73093 - ], - [ - 18.29515, - 47.72075 - ], - [ - 18.67959, - 47.75541 - ], - [ - 18.89755, - 47.81203 - ], - [ - 18.79463, - 47.88245 - ], - [ - 18.84318, - 48.04046 - ], - [ - 19.46212, - 48.05333 - ], - [ - 19.62064, - 48.22938 - ], - [ - 19.89585, - 48.09387 - ], - [ - 20.33766, - 48.2643 - ], - [ - 20.55395, - 48.52358 - ], - [ - 20.82335, - 48.55714 - ], - [ - 21.10271, - 48.47096 - ], - [ - 21.45863, - 48.55513 - ], - [ - 21.74536, - 48.31435 - ], - [ - 22.15293, - 48.37179 - ], - [ - 22.61255, - 49.08914 - ], - [ - 22.09997, - 49.23814 - ], - [ - 21.9686, - 49.36363 - ], - [ - 21.6244, - 49.46989 - ], - [ - 21.06873, - 49.46402 - ], - [ - 20.94336, - 49.31088 - ], - [ - 20.73052, - 49.44006 - ], - [ - 20.22804, - 49.41714 - ], - [ - 20.05234, - 49.23052 - ], - [ - 19.83682, - 49.25529 - ] - ] - ], - "terms_text": "Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved." - }, - { - "name": "Freemap.sk Cyclo", - "type": "tms", - "template": "http://t{switch:1,2,3,4}.freemap.sk/C/{zoom}/{x}/{y}.jpeg", - "scaleExtent": [ - 8, - 16 - ], - "polygon": [ - [ - [ - 19.83682, - 49.25529 - ], - [ - 19.80075, - 49.42385 - ], - [ - 19.60437, - 49.48058 - ], - [ - 19.49179, - 49.63961 - ], - [ - 19.21831, - 49.52604 - ], - [ - 19.16778, - 49.42521 - ], - [ - 19.00308, - 49.42236 - ], - [ - 18.97611, - 49.5308 - ], - [ - 18.54685, - 49.51425 - ], - [ - 18.31432, - 49.33818 - ], - [ - 18.15913, - 49.2961 - ], - [ - 18.05564, - 49.11134 - ], - [ - 17.56396, - 48.84938 - ], - [ - 17.17929, - 48.88816 - ], - [ - 17.058, - 48.81105 - ], - [ - 16.90426, - 48.61947 - ], - [ - 16.79685, - 48.38561 - ], - [ - 17.06762, - 48.01116 - ], - [ - 17.32787, - 47.97749 - ], - [ - 17.51699, - 47.82535 - ], - [ - 17.74776, - 47.73093 - ], - [ - 18.29515, - 47.72075 - ], - [ - 18.67959, - 47.75541 - ], - [ - 18.89755, - 47.81203 - ], - [ - 18.79463, - 47.88245 - ], - [ - 18.84318, - 48.04046 - ], - [ - 19.46212, - 48.05333 - ], - [ - 19.62064, - 48.22938 - ], - [ - 19.89585, - 48.09387 - ], - [ - 20.33766, - 48.2643 - ], - [ - 20.55395, - 48.52358 - ], - [ - 20.82335, - 48.55714 - ], - [ - 21.10271, - 48.47096 - ], - [ - 21.45863, - 48.55513 - ], - [ - 21.74536, - 48.31435 - ], - [ - 22.15293, - 48.37179 - ], - [ - 22.61255, - 49.08914 - ], - [ - 22.09997, - 49.23814 - ], - [ - 21.9686, - 49.36363 - ], - [ - 21.6244, - 49.46989 - ], - [ - 21.06873, - 49.46402 - ], - [ - 20.94336, - 49.31088 - ], - [ - 20.73052, - 49.44006 - ], - [ - 20.22804, - 49.41714 - ], - [ - 20.05234, - 49.23052 - ], - [ - 19.83682, - 49.25529 - ] - ] - ], - "terms_text": "Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved." - }, - { - "name": "Freemap.sk Hiking", - "type": "tms", - "template": "http://t{switch:1,2,3,4}.freemap.sk/T/{zoom}/{x}/{y}.jpeg", - "scaleExtent": [ - 8, - 16 - ], - "polygon": [ - [ - [ - 19.83682, - 49.25529 - ], - [ - 19.80075, - 49.42385 - ], - [ - 19.60437, - 49.48058 - ], - [ - 19.49179, - 49.63961 - ], - [ - 19.21831, - 49.52604 - ], - [ - 19.16778, - 49.42521 - ], - [ - 19.00308, - 49.42236 - ], - [ - 18.97611, - 49.5308 - ], - [ - 18.54685, - 49.51425 - ], - [ - 18.31432, - 49.33818 - ], - [ - 18.15913, - 49.2961 - ], - [ - 18.05564, - 49.11134 - ], - [ - 17.56396, - 48.84938 - ], - [ - 17.17929, - 48.88816 - ], - [ - 17.058, - 48.81105 - ], - [ - 16.90426, - 48.61947 - ], - [ - 16.79685, - 48.38561 - ], - [ - 17.06762, - 48.01116 - ], - [ - 17.32787, - 47.97749 - ], - [ - 17.51699, - 47.82535 - ], - [ - 17.74776, - 47.73093 - ], - [ - 18.29515, - 47.72075 - ], - [ - 18.67959, - 47.75541 - ], - [ - 18.89755, - 47.81203 - ], - [ - 18.79463, - 47.88245 - ], - [ - 18.84318, - 48.04046 - ], - [ - 19.46212, - 48.05333 - ], - [ - 19.62064, - 48.22938 - ], - [ - 19.89585, - 48.09387 - ], - [ - 20.33766, - 48.2643 - ], - [ - 20.55395, - 48.52358 - ], - [ - 20.82335, - 48.55714 - ], - [ - 21.10271, - 48.47096 - ], - [ - 21.45863, - 48.55513 - ], - [ - 21.74536, - 48.31435 - ], - [ - 22.15293, - 48.37179 - ], - [ - 22.61255, - 49.08914 - ], - [ - 22.09997, - 49.23814 - ], - [ - 21.9686, - 49.36363 - ], - [ - 21.6244, - 49.46989 - ], - [ - 21.06873, - 49.46402 - ], - [ - 20.94336, - 49.31088 - ], - [ - 20.73052, - 49.44006 - ], - [ - 20.22804, - 49.41714 - ], - [ - 20.05234, - 49.23052 - ], - [ - 19.83682, - 49.25529 - ] - ] - ], - "terms_text": "Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved." - }, - { - "name": "Freemap.sk Ski", - "type": "tms", - "template": "http://t{switch:1,2,3,4}.freemap.sk/K/{zoom}/{x}/{y}.jpeg", - "scaleExtent": [ - 8, - 16 - ], - "polygon": [ - [ - [ - 19.83682, - 49.25529 - ], - [ - 19.80075, - 49.42385 - ], - [ - 19.60437, - 49.48058 - ], - [ - 19.49179, - 49.63961 - ], - [ - 19.21831, - 49.52604 - ], - [ - 19.16778, - 49.42521 - ], - [ - 19.00308, - 49.42236 - ], - [ - 18.97611, - 49.5308 - ], - [ - 18.54685, - 49.51425 - ], - [ - 18.31432, - 49.33818 - ], - [ - 18.15913, - 49.2961 - ], - [ - 18.05564, - 49.11134 - ], - [ - 17.56396, - 48.84938 - ], - [ - 17.17929, - 48.88816 - ], - [ - 17.058, - 48.81105 - ], - [ - 16.90426, - 48.61947 - ], - [ - 16.79685, - 48.38561 - ], - [ - 17.06762, - 48.01116 - ], - [ - 17.32787, - 47.97749 - ], - [ - 17.51699, - 47.82535 - ], - [ - 17.74776, - 47.73093 - ], - [ - 18.29515, - 47.72075 - ], - [ - 18.67959, - 47.75541 - ], - [ - 18.89755, - 47.81203 - ], - [ - 18.79463, - 47.88245 - ], - [ - 18.84318, - 48.04046 - ], - [ - 19.46212, - 48.05333 - ], - [ - 19.62064, - 48.22938 - ], - [ - 19.89585, - 48.09387 - ], - [ - 20.33766, - 48.2643 - ], - [ - 20.55395, - 48.52358 - ], - [ - 20.82335, - 48.55714 - ], - [ - 21.10271, - 48.47096 - ], - [ - 21.45863, - 48.55513 - ], - [ - 21.74536, - 48.31435 - ], - [ - 22.15293, - 48.37179 - ], - [ - 22.61255, - 49.08914 - ], - [ - 22.09997, - 49.23814 - ], - [ - 21.9686, - 49.36363 - ], - [ - 21.6244, - 49.46989 - ], - [ - 21.06873, - 49.46402 - ], - [ - 20.94336, - 49.31088 - ], - [ - 20.73052, - 49.44006 - ], - [ - 20.22804, - 49.41714 - ], - [ - 20.05234, - 49.23052 - ], - [ - 19.83682, - 49.25529 - ] - ] - ], - "terms_text": "Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved." - }, - { - "name": "Fugro (Denmark)", - "type": "tms", - "template": "http://{switch:a,b,c}.tile.openstreetmap.dk/fugro2005/{zoom}/{x}/{y}.png", - "scaleExtent": [ - 0, - 19 - ], - "polygon": [ - [ - [ - 8.3743941, - 54.9551655 - ], - [ - 8.3683809, - 55.4042149 - ], - [ - 8.2103997, - 55.4039795 - ], - [ - 8.2087314, - 55.4937345 - ], - [ - 8.0502655, - 55.4924731 - ], - [ - 8.0185123, - 56.7501399 - ], - [ - 8.1819161, - 56.7509948 - ], - [ - 8.1763274, - 57.0208898 - ], - [ - 8.3413329, - 57.0219872 - ], - [ - 8.3392467, - 57.1119574 - ], - [ - 8.5054433, - 57.1123212 - ], - [ - 8.5033923, - 57.2020499 - ], - [ - 9.3316304, - 57.2027636 - ], - [ - 9.3319079, - 57.2924835 - ], - [ - 9.4978864, - 57.2919578 - ], - [ - 9.4988593, - 57.3820608 - ], - [ - 9.6649749, - 57.3811615 - ], - [ - 9.6687295, - 57.5605591 - ], - [ - 9.8351961, - 57.5596265 - ], - [ - 9.8374896, - 57.6493322 - ], - [ - 10.1725726, - 57.6462818 - ], - [ - 10.1754245, - 57.7367768 - ], - [ - 10.5118282, - 57.7330269 - ], - [ - 10.5152095, - 57.8228945 - ], - [ - 10.6834853, - 57.8207722 - ], - [ - 10.6751613, - 57.6412021 - ], - [ - 10.5077045, - 57.6433097 - ], - [ - 10.5039992, - 57.5535088 - ], - [ - 10.671038, - 57.5514113 - ], - [ - 10.6507805, - 57.1024538 - ], - [ - 10.4857673, - 57.1045138 - ], - [ - 10.4786236, - 56.9249051 - ], - [ - 10.3143981, - 56.9267573 - ], - [ - 10.3112341, - 56.8369269 - ], - [ - 10.4750295, - 56.83509 - ], - [ - 10.4649016, - 56.5656681 - ], - [ - 10.9524239, - 56.5589761 - ], - [ - 10.9479249, - 56.4692243 - ], - [ - 11.1099335, - 56.4664675 - ], - [ - 11.1052639, - 56.376833 - ], - [ - 10.9429901, - 56.3795284 - ], - [ - 10.9341235, - 56.1994768 - ], - [ - 10.7719685, - 56.2020244 - ], - [ - 10.7694751, - 56.1120103 - ], - [ - 10.6079695, - 56.1150259 - ], - [ - 10.4466742, - 56.116717 - ], - [ - 10.2865948, - 56.118675 - ], - [ - 10.2831527, - 56.0281851 - ], - [ - 10.4439274, - 56.0270388 - ], - [ - 10.4417713, - 55.7579243 - ], - [ - 10.4334961, - 55.6693533 - ], - [ - 10.743814, - 55.6646861 - ], - [ - 10.743814, - 55.5712253 - ], - [ - 10.8969041, - 55.5712253 - ], - [ - 10.9051793, - 55.3953852 - ], - [ - 11.0613726, - 55.3812841 - ], - [ - 11.0593038, - 55.1124061 - ], - [ - 11.0458567, - 55.0318621 - ], - [ - 11.2030844, - 55.0247474 - ], - [ - 11.2030844, - 55.117139 - ], - [ - 11.0593038, - 55.1124061 - ], - [ - 11.0613726, - 55.3812841 - ], - [ - 11.0789572, - 55.5712253 - ], - [ - 10.8969041, - 55.5712253 - ], - [ - 10.9258671, - 55.6670198 - ], - [ - 10.743814, - 55.6646861 - ], - [ - 10.7562267, - 55.7579243 - ], - [ - 10.4417713, - 55.7579243 - ], - [ - 10.4439274, - 56.0270388 - ], - [ - 10.4466742, - 56.116717 - ], - [ - 10.6079695, - 56.1150259 - ], - [ - 10.6052053, - 56.0247462 - ], - [ - 10.9258671, - 56.0201215 - ], - [ - 10.9197132, - 55.9309388 - ], - [ - 11.0802782, - 55.92792 - ], - [ - 11.0858066, - 56.0178284 - ], - [ - 11.7265047, - 56.005058 - ], - [ - 11.7319981, - 56.0952142 - ], - [ - 12.0540333, - 56.0871256 - ], - [ - 12.0608477, - 56.1762576 - ], - [ - 12.7023469, - 56.1594405 - ], - [ - 12.6611131, - 55.7114318 - ], - [ - 12.9792318, - 55.7014026 - ], - [ - 12.9612912, - 55.5217294 - ], - [ - 12.3268659, - 55.5412096 - ], - [ - 12.3206071, - 55.4513655 - ], - [ - 12.4778226, - 55.447067 - ], - [ - 12.4702432, - 55.3570479 - ], - [ - 12.6269738, - 55.3523837 - ], - [ - 12.6200898, - 55.2632576 - ], - [ - 12.4627339, - 55.26722 - ], - [ - 12.4552949, - 55.1778223 - ], - [ - 12.2987046, - 55.1822303 - ], - [ - 12.2897344, - 55.0923641 - ], - [ - 12.6048608, - 55.0832904 - ], - [ - 12.5872011, - 54.9036285 - ], - [ - 12.2766618, - 54.9119031 - ], - [ - 12.2610181, - 54.7331602 - ], - [ - 12.1070691, - 54.7378161 - ], - [ - 12.0858621, - 54.4681655 - ], - [ - 11.7794953, - 54.4753579 - ], - [ - 11.7837381, - 54.5654783 - ], - [ - 11.1658525, - 54.5782155 - ], - [ - 11.1706443, - 54.6686508 - ], - [ - 10.8617173, - 54.6733956 - ], - [ - 10.8651245, - 54.7634667 - ], - [ - 10.7713646, - 54.7643888 - ], - [ - 10.7707276, - 54.7372807 - ], - [ - 10.7551428, - 54.7375776 - ], - [ - 10.7544039, - 54.7195666 - ], - [ - 10.7389074, - 54.7197588 - ], - [ - 10.7384368, - 54.7108482 - ], - [ - 10.7074486, - 54.7113045 - ], - [ - 10.7041094, - 54.6756741 - ], - [ - 10.5510973, - 54.6781698 - ], - [ - 10.5547184, - 54.7670245 - ], - [ - 10.2423994, - 54.7705935 - ], - [ - 10.2459845, - 54.8604673 - ], - [ - 10.0902268, - 54.8622134 - ], - [ - 10.0873731, - 54.7723851 - ], - [ - 9.1555798, - 54.7769557 - ], - [ - 9.1562752, - 54.8675369 - ], - [ - 8.5321973, - 54.8663765 - ], - [ - 8.531432, - 54.95516 - ] - ], - [ - [ - 11.4577738, - 56.819554 - ], - [ - 11.7849181, - 56.8127385 - ], - [ - 11.7716715, - 56.6332796 - ], - [ - 11.4459621, - 56.6401087 - ] - ], - [ - [ - 11.3274736, - 57.3612962 - ], - [ - 11.3161808, - 57.1818004 - ], - [ - 11.1508692, - 57.1847276 - ], - [ - 11.1456628, - 57.094962 - ], - [ - 10.8157703, - 57.1001693 - ], - [ - 10.8290599, - 57.3695272 - ] - ], - [ - [ - 11.5843266, - 56.2777928 - ], - [ - 11.5782882, - 56.1880397 - ], - [ - 11.7392309, - 56.1845765 - ], - [ - 11.7456428, - 56.2743186 - ] - ], - [ - [ - 14.6825922, - 55.3639405 - ], - [ - 14.8395247, - 55.3565231 - ], - [ - 14.8263755, - 55.2671261 - ], - [ - 15.1393406, - 55.2517359 - ], - [ - 15.1532015, - 55.3410836 - ], - [ - 15.309925, - 55.3330556 - ], - [ - 15.295719, - 55.2437356 - ], - [ - 15.1393406, - 55.2517359 - ], - [ - 15.1255631, - 55.1623802 - ], - [ - 15.2815819, - 55.1544167 - ], - [ - 15.2535578, - 54.9757646 - ], - [ - 14.6317464, - 55.0062496 - ] - ] - ], - "terms_url": "http://wiki.openstreetmap.org/wiki/Fugro", - "terms_text": "Fugro Aerial Mapping" - }, - { - "name": "Geoimage.at MaxRes", - "type": "tms", - "template": "http://geoimage.openstreetmap.at/4d80de696cd562a63ce463a58a61488d/{zoom}/{x}/{y}.jpg", - "polygon": [ - [ - [ - 16.5073284, - 46.9929304 - ], - [ - 16.283417, - 46.9929304 - ], - [ - 16.135839, - 46.8713046 - ], - [ - 15.9831722, - 46.8190947 - ], - [ - 16.0493278, - 46.655175 - ], - [ - 15.8610387, - 46.7180116 - ], - [ - 15.7592608, - 46.6900933 - ], - [ - 15.5607938, - 46.6796202 - ], - [ - 15.5760605, - 46.6342132 - ], - [ - 15.4793715, - 46.6027553 - ], - [ - 15.4335715, - 46.6516819 - ], - [ - 15.2249267, - 46.6342132 - ], - [ - 15.0468154, - 46.6481886 - ], - [ - 14.9908376, - 46.5887681 - ], - [ - 14.9603042, - 46.6237293 - ], - [ - 14.8534374, - 46.6027553 - ], - [ - 14.8330818, - 46.5012666 - ], - [ - 14.7516595, - 46.4977636 - ], - [ - 14.6804149, - 46.4381781 - ], - [ - 14.6142593, - 46.4381781 - ], - [ - 14.578637, - 46.3785275 - ], - [ - 14.4412369, - 46.4311638 - ], - [ - 14.1613476, - 46.4276563 - ], - [ - 14.1257253, - 46.4767409 - ], - [ - 14.0188585, - 46.4767409 - ], - [ - 13.9119917, - 46.5257813 - ], - [ - 13.8254805, - 46.5047694 - ], - [ - 13.4438134, - 46.560783 - ], - [ - 13.3064132, - 46.5502848 - ], - [ - 13.1283019, - 46.5887681 - ], - [ - 12.8433237, - 46.6132433 - ], - [ - 12.7262791, - 46.6412014 - ], - [ - 12.5125455, - 46.6656529 - ], - [ - 12.3598787, - 46.7040543 - ], - [ - 12.3649676, - 46.7703197 - ], - [ - 12.2886341, - 46.7772902 - ], - [ - 12.2733674, - 46.8852187 - ], - [ - 12.2072118, - 46.8747835 - ], - [ - 12.1308784, - 46.9026062 - ], - [ - 12.1156117, - 46.9998721 - ], - [ - 12.2530119, - 47.0657733 - ], - [ - 12.2123007, - 47.0934969 - ], - [ - 11.9833004, - 47.0449712 - ], - [ - 11.7339445, - 46.9616816 - ], - [ - 11.6321666, - 47.010283 - ], - [ - 11.5405665, - 46.9755722 - ], - [ - 11.4998553, - 47.0068129 - ], - [ - 11.418433, - 46.9651546 - ], - [ - 11.2555884, - 46.9755722 - ], - [ - 11.1130993, - 46.913036 - ], - [ - 11.0418548, - 46.7633482 - ], - [ - 10.8891879, - 46.7598621 - ], - [ - 10.7416099, - 46.7842599 - ], - [ - 10.7059877, - 46.8643462 - ], - [ - 10.5787653, - 46.8399847 - ], - [ - 10.4566318, - 46.8504267 - ], - [ - 10.4769874, - 46.9269392 - ], - [ - 10.3853873, - 46.9894592 - ], - [ - 10.2327204, - 46.8643462 - ], - [ - 10.1207647, - 46.8330223 - ], - [ - 9.8663199, - 46.9408389 - ], - [ - 9.9019422, - 47.0033426 - ], - [ - 9.6831197, - 47.0588402 - ], - [ - 9.6118752, - 47.0380354 - ], - [ - 9.6322307, - 47.128131 - ], - [ - 9.5813418, - 47.1662025 - ], - [ - 9.5406306, - 47.2664422 - ], - [ - 9.6067863, - 47.3492559 - ], - [ - 9.6729419, - 47.369939 - ], - [ - 9.6424085, - 47.4457079 - ], - [ - 9.5660751, - 47.4801122 - ], - [ - 9.7136531, - 47.5282405 - ], - [ - 9.7848976, - 47.5969187 - ], - [ - 9.8357866, - 47.5454185 - ], - [ - 9.9477423, - 47.538548 - ], - [ - 10.0902313, - 47.4491493 - ], - [ - 10.1105869, - 47.3664924 - ], - [ - 10.2428982, - 47.3871688 - ], - [ - 10.1869203, - 47.2698953 - ], - [ - 10.3243205, - 47.2975125 - ], - [ - 10.4820763, - 47.4491493 - ], - [ - 10.4311873, - 47.4869904 - ], - [ - 10.4413651, - 47.5900549 - ], - [ - 10.4871652, - 47.5522881 - ], - [ - 10.5482319, - 47.5351124 - ], - [ - 10.5991209, - 47.5660246 - ], - [ - 10.7568766, - 47.5316766 - ], - [ - 10.8891879, - 47.5454185 - ], - [ - 10.9400769, - 47.4869904 - ], - [ - 10.9960547, - 47.3906141 - ], - [ - 11.2352328, - 47.4422662 - ], - [ - 11.2810328, - 47.3975039 - ], - [ - 11.4235219, - 47.5144941 - ], - [ - 11.5761888, - 47.5076195 - ], - [ - 11.6067221, - 47.5900549 - ], - [ - 11.8357224, - 47.5866227 - ], - [ - 12.003656, - 47.6243647 - ], - [ - 12.2072118, - 47.6037815 - ], - [ - 12.1614117, - 47.6963421 - ], - [ - 12.2581008, - 47.7442718 - ], - [ - 12.2530119, - 47.6792136 - ], - [ - 12.4311232, - 47.7100408 - ], - [ - 12.4921899, - 47.631224 - ], - [ - 12.5685234, - 47.6277944 - ], - [ - 12.6295901, - 47.6894913 - ], - [ - 12.7720792, - 47.6689338 - ], - [ - 12.8331459, - 47.5419833 - ], - [ - 12.975635, - 47.4732332 - ], - [ - 13.0417906, - 47.4938677 - ], - [ - 13.0367017, - 47.5557226 - ], - [ - 13.0977685, - 47.6415112 - ], - [ - 13.0316128, - 47.7100408 - ], - [ - 12.9043905, - 47.7203125 - ], - [ - 13.0061684, - 47.84683 - ], - [ - 12.9451016, - 47.9355501 - ], - [ - 12.8636793, - 47.9594103 - ], - [ - 12.8636793, - 48.0036929 - ], - [ - 12.7517236, - 48.0989418 - ], - [ - 12.8738571, - 48.2109733 - ], - [ - 12.9603683, - 48.2109733 - ], - [ - 13.0417906, - 48.2652035 - ], - [ - 13.1842797, - 48.2990682 - ], - [ - 13.2606131, - 48.2922971 - ], - [ - 13.3980133, - 48.3565867 - ], - [ - 13.4438134, - 48.417418 - ], - [ - 13.4387245, - 48.5523383 - ], - [ - 13.509969, - 48.5860123 - ], - [ - 13.6117469, - 48.5725454 - ], - [ - 13.7287915, - 48.5118999 - ], - [ - 13.7847694, - 48.5725454 - ], - [ - 13.8203916, - 48.6263915 - ], - [ - 13.7949471, - 48.7171267 - ], - [ - 13.850925, - 48.7741724 - ], - [ - 14.0595697, - 48.6633774 - ], - [ - 14.0137696, - 48.6331182 - ], - [ - 14.0748364, - 48.5927444 - ], - [ - 14.2173255, - 48.5961101 - ], - [ - 14.3649034, - 48.5489696 - ], - [ - 14.4666813, - 48.6499311 - ], - [ - 14.5582815, - 48.5961101 - ], - [ - 14.5989926, - 48.6263915 - ], - [ - 14.7211261, - 48.5759124 - ], - [ - 14.7211261, - 48.6868997 - ], - [ - 14.822904, - 48.7271983 - ], - [ - 14.8178151, - 48.777526 - ], - [ - 14.9647227, - 48.7851754 - ], - [ - 14.9893637, - 49.0126611 - ], - [ - 15.1485933, - 48.9950306 - ], - [ - 15.1943934, - 48.9315502 - ], - [ - 15.3063491, - 48.9850128 - ], - [ - 15.3928603, - 48.9850128 - ], - [ - 15.4844604, - 48.9282069 - ], - [ - 15.749083, - 48.8545973 - ], - [ - 15.8406831, - 48.8880697 - ], - [ - 16.0086166, - 48.7808794 - ], - [ - 16.2070835, - 48.7339115 - ], - [ - 16.3953727, - 48.7372678 - ], - [ - 16.4920617, - 48.8110498 - ], - [ - 16.6905286, - 48.7741724 - ], - [ - 16.7057953, - 48.7339115 - ], - [ - 16.8991733, - 48.713769 - ], - [ - 16.9755067, - 48.515271 - ], - [ - 16.8482844, - 48.4511817 - ], - [ - 16.8533733, - 48.3464411 - ], - [ - 16.9551512, - 48.2516513 - ], - [ - 16.9907734, - 48.1498955 - ], - [ - 17.0925513, - 48.1397088 - ], - [ - 17.0823736, - 48.0241182 - ], - [ - 17.1739737, - 48.0207146 - ], - [ - 17.0823736, - 47.8741447 - ], - [ - 16.9856845, - 47.8673174 - ], - [ - 17.0823736, - 47.8092489 - ], - [ - 17.0925513, - 47.7031919 - ], - [ - 16.7414176, - 47.6792136 - ], - [ - 16.7057953, - 47.7511153 - ], - [ - 16.5378617, - 47.7545368 - ], - [ - 16.5480395, - 47.7066164 - ], - [ - 16.4208172, - 47.6689338 - ], - [ - 16.573484, - 47.6175045 - ], - [ - 16.670173, - 47.631224 - ], - [ - 16.7108842, - 47.538548 - ], - [ - 16.6599952, - 47.4491493 - ], - [ - 16.5429506, - 47.3940591 - ], - [ - 16.4615283, - 47.3940591 - ], - [ - 16.4920617, - 47.276801 - ], - [ - 16.425906, - 47.1973317 - ], - [ - 16.4717061, - 47.1489007 - ], - [ - 16.5480395, - 47.1489007 - ], - [ - 16.476795, - 47.0796369 - ], - [ - 16.527684, - 47.0588402 - ] - ] - ], - "terms_text": "geoimage.at", - "id": "geoimage.at" - }, - { - "name": "Imagerie Drone (Haiti)", - "type": "tms", - "template": "http://wms.openstreetmap.fr/tms/1.0.0/iomhaiti/{zoom}/{x}/{y}", - "polygon": [ - [ - [ - -72.1547401, - 19.6878969 - ], - [ - -72.162234, - 19.689011 - ], - [ - -72.164995, - 19.6932445 - ], - [ - -72.1657838, - 19.6979977 - ], - [ - -72.161603, - 19.7035677 - ], - [ - -72.1487449, - 19.7028993 - ], - [ - -72.1477194, - 19.7026765 - ], - [ - -72.1485082, - 19.7001514 - ], - [ - -72.1436963, - 19.7011169 - ], - [ - -72.1410143, - 19.7000029 - ], - [ - -72.139476, - 19.6973664 - ], - [ - -72.1382533, - 19.6927617 - ], - [ - -72.1386872, - 19.6923161 - ], - [ - -72.1380561, - 19.6896423 - ], - [ - -72.1385294, - 19.6894938 - ], - [ - -72.1388055, - 19.6901251 - ], - [ - -72.1388844, - 19.6876741 - ], - [ - -72.1378195, - 19.6872656 - ], - [ - -72.13778, - 19.6850003 - ], - [ - -72.1369517, - 19.6855945 - ], - [ - -72.136794, - 19.6840719 - ], - [ - -72.135729, - 19.6835148 - ], - [ - -72.1355713, - 19.6740817 - ], - [ - -72.1366362, - 19.6708133 - ], - [ - -72.1487843, - 19.6710733 - ], - [ - -72.1534779, - 19.6763843 - ], - [ - -72.1530835, - 19.6769414 - ], - [ - -72.1533251, - 19.6769768 - ], - [ - -72.1532807, - 19.6796525 - ], - [ - -72.1523834, - 19.6797175 - ], - [ - -72.1522749, - 19.6803488 - ], - [ - -72.1519101, - 19.6803395 - ], - [ - -72.1518608, - 19.6805067 - ], - [ - -72.1528173, - 19.6806552 - ], - [ - -72.1522299, - 19.6833011 - ], - [ - -72.1507801, - 19.6831499 - ], - [ - -72.1504457, - 19.6847862 - ], - [ - -72.1508591, - 19.6843492 - ], - [ - -72.1530087, - 19.6849898 - ], - [ - -72.1546258, - 19.6854354 - ], - [ - -72.1543103, - 19.6870694 - ], - [ - -72.1547244, - 19.6868466 - ], - [ - -72.1548501, - 19.6877564 - ], - [ - -72.1545814, - 19.6877982 - ] - ], - [ - [ - -72.1310601, - 19.6718929 - ], - [ - -72.1259842, - 19.6772765 - ], - [ - -72.1255379, - 19.6776179 - ], - [ - -72.1216891, - 19.6776442 - ], - [ - -72.1149677, - 19.672602 - ], - [ - -72.1152745, - 19.6687152 - ], - [ - -72.1198205, - 19.6627535 - ], - [ - -72.1227768, - 19.6625696 - ], - [ - -72.1248965, - 19.662701 - ], - [ - -72.1285779, - 19.6645394 - ], - [ - -72.1308091, - 19.6661677 - ], - [ - -72.1316737, - 19.668794 - ], - [ - -72.1315621, - 19.671 - ] - ], - [ - [ - -71.845795, - 19.6709758 - ], - [ - -71.8429354, - 19.6759525 - ], - [ - -71.8410027, - 19.6759525 - ], - [ - -71.8380249, - 19.6755254 - ], - [ - -71.8378671, - 19.6745041 - ], - [ - -71.8390504, - 19.6743927 - ], - [ - -71.8390109, - 19.6741141 - ], - [ - -71.8398392, - 19.673947 - ], - [ - -71.8389123, - 19.6736127 - ], - [ - -71.8380249, - 19.67209 - ], - [ - -71.8380052, - 19.6726285 - ], - [ - -71.8376699, - 19.6727214 - ], - [ - -71.8376305, - 19.672545 - ], - [ - -71.8354414, - 19.6732135 - ], - [ - -71.835333, - 19.6729999 - ], - [ - -71.8331242, - 19.6734642 - ], - [ - -71.8326706, - 19.6716815 - ], - [ - -71.8321579, - 19.67209 - ], - [ - -71.8307183, - 19.6694902 - ], - [ - -71.8306009, - 19.6697594 - ], - [ - -71.8302174, - 19.6698907 - ], - [ - -71.8291833, - 19.6672095 - ], - [ - -71.8290749, - 19.6672095 - ], - [ - -71.8289122, - 19.6667916 - ], - [ - -71.8289516, - 19.6666199 - ], - [ - -71.8288333, - 19.6663506 - ], - [ - -71.8285572, - 19.6664759 - ], - [ - -71.8288678, - 19.6672466 - ], - [ - -71.8287593, - 19.6674138 - ], - [ - -71.8277979, - 19.6678177 - ], - [ - -71.8277112, - 19.6678586 - ], - [ - -71.8278263, - 19.6679637 - ], - [ - -71.8271831, - 19.6681212 - ], - [ - -71.8271761, - 19.6680917 - ], - [ - -71.8264405, - 19.6683921 - ], - [ - -71.8264074, - 19.6683231 - ], - [ - -71.8261954, - 19.6684253 - ], - [ - -71.8261806, - 19.6683556 - ], - [ - -71.8258946, - 19.6684206 - ], - [ - -71.8258897, - 19.6686574 - ], - [ - -71.8251551, - 19.6687549 - ], - [ - -71.8254509, - 19.6691588 - ], - [ - -71.8229332, - 19.6695739 - ], - [ - -71.822713, - 19.6696658 - ], - [ - -71.8227688, - 19.6697577 - ], - [ - -71.8201751, - 19.6709855 - ], - [ - -71.8198474, - 19.6704537 - ], - [ - -71.8197985, - 19.6706014 - ], - [ - -71.8194674, - 19.6707557 - ], - [ - -71.8182472, - 19.6713433 - ], - [ - -71.8181426, - 19.6711431 - ], - [ - -71.8175813, - 19.6714254 - ], - [ - -71.816959, - 19.6707672 - ], - [ - -71.8176388, - 19.6718965 - ], - [ - -71.8171403, - 19.6720376 - ], - [ - -71.8158225, - 19.6718045 - ], - [ - -71.8138354, - 19.6711874 - ], - [ - -71.8123259, - 19.6706982 - ], - [ - -71.8121759, - 19.6704258 - ], - [ - -71.8124304, - 19.6701467 - ], - [ - -71.8119184, - 19.6700141 - ], - [ - -71.8118765, - 19.6705828 - ], - [ - -71.811169, - 19.6703483 - ], - [ - -71.8095938, - 19.6698516 - ], - [ - -71.8077992, - 19.6692829 - ], - [ - -71.8056028, - 19.668612 - ], - [ - -71.8051443, - 19.6668942 - ], - [ - -71.8051196, - 19.6652322 - ], - [ - -71.8052315, - 19.661979 - ], - [ - -71.8065603, - 19.6523921 - ], - [ - -71.8073412, - 19.6482946 - ], - [ - -71.8099686, - 19.6468292 - ], - [ - -71.8147517, - 19.6454502 - ], - [ - -71.8147726, - 19.6455619 - ], - [ - -71.8150027, - 19.6455093 - ], - [ - -71.8149469, - 19.6453846 - ], - [ - -71.8159928, - 19.6450234 - ], - [ - -71.8158882, - 19.6448855 - ], - [ - -71.8165854, - 19.6446097 - ], - [ - -71.8190119, - 19.643802 - ], - [ - -71.8211524, - 19.643454 - ], - [ - -71.8221564, - 19.6433292 - ], - [ - -71.8269046, - 19.643211 - ], - [ - -71.8280481, - 19.6432241 - ], - [ - -71.8304466, - 19.6440778 - ], - [ - -71.8306419, - 19.6448592 - ], - [ - -71.8295263, - 19.6450365 - ], - [ - -71.8296064, - 19.6456111 - ], - [ - -71.8299411, - 19.6455651 - ], - [ - -71.8303699, - 19.6451744 - ], - [ - -71.830471, - 19.6453452 - ], - [ - -71.8308092, - 19.6451974 - ], - [ - -71.8310184, - 19.6451088 - ], - [ - -71.8312519, - 19.6458541 - ], - [ - -71.8311125, - 19.6458245 - ], - [ - -71.831367, - 19.6465862 - ], - [ - -71.8328939, - 19.646189 - ], - [ - -71.8344566, - 19.6457062 - ], - [ - -71.8344664, - 19.6463052 - ], - [ - -71.834215, - 19.6461938 - ], - [ - -71.8342002, - 19.6465513 - ], - [ - -71.8346702, - 19.6463 - ], - [ - -71.8349118, - 19.6463905 - ], - [ - -71.8347984, - 19.6462187 - ], - [ - -71.8354393, - 19.6458496 - ], - [ - -71.8355034, - 19.6458032 - ], - [ - -71.8364747, - 19.6461328 - ], - [ - -71.8376382, - 19.6472658 - ], - [ - -71.8379143, - 19.647888 - ], - [ - -71.8390483, - 19.6508039 - ], - [ - -71.8456942, - 19.6696203 - ] - ], - [ - [ - -72.098878, - 18.54843 - ], - [ - -72.096993, - 18.5501994 - ], - [ - -72.0972888, - 18.5503209 - ], - [ - -72.0968451, - 18.5503489 - ], - [ - -72.0955632, - 18.551854 - ], - [ - -72.0956428, - 18.5526742 - ], - [ - -72.0959914, - 18.5533748 - ], - [ - -72.0962145, - 18.553203 - ], - [ - -72.0962842, - 18.5535665 - ], - [ - -72.0964446, - 18.5535533 - ], - [ - -72.0965352, - 18.5539764 - ], - [ - -72.0965056, - 18.554173 - ], - [ - -72.0966085, - 18.5541747 - ], - [ - -72.0965178, - 18.5542127 - ], - [ - -72.0968769, - 18.5546588 - ], - [ - -72.0979018, - 18.5552141 - ], - [ - -72.1006211, - 18.5555875 - ], - [ - -72.1014926, - 18.5556206 - ], - [ - -72.1024339, - 18.5555016 - ], - [ - -72.103417, - 18.5543515 - ], - [ - -72.1034798, - 18.5516215 - ], - [ - -72.1030789, - 18.5516149 - ], - [ - -72.1033752, - 18.5515224 - ], - [ - -72.1035042, - 18.5515224 - ], - [ - -72.1035239, - 18.5502417 - ], - [ - -72.1028701, - 18.5503062 - ], - [ - -72.1029015, - 18.55025 - ], - [ - -72.1028457, - 18.5501773 - ], - [ - -72.1035081, - 18.5500252 - ], - [ - -72.103491, - 18.5497396 - ], - [ - -72.1035181, - 18.5497361 - ], - [ - -72.1035398, - 18.5489039 - ], - [ - -72.1034317, - 18.5487056 - ], - [ - -72.102717, - 18.5481437 - ], - [ - -72.1025601, - 18.5481536 - ], - [ - -72.10229, - 18.5482751 - ], - [ - -72.1022891, - 18.5482569 - ], - [ - -72.1025201, - 18.5481396 - ], - [ - -72.1023388, - 18.5481321 - ], - [ - -72.0999082, - 18.5480901 - ], - [ - -72.09907, - 18.5483799 - ] - ], - [ - [ - -72.2542503, - 18.568262 - ], - [ - -72.2560252, - 18.5717765 - ], - [ - -72.2557886, - 18.5748049 - ], - [ - -72.2535009, - 18.5755526 - ], - [ - -72.2522782, - 18.5755526 - ], - [ - -72.2499906, - 18.5740945 - ], - [ - -72.2473874, - 18.5698323 - ], - [ - -72.2460069, - 18.566729 - ], - [ - -72.2458492, - 18.5629527 - ], - [ - -72.2479396, - 18.5625414 - ], - [ - -72.2501483, - 18.5628031 - ], - [ - -72.2519232, - 18.5650839 - ] - ], - [ - [ - -72.303145, - 18.5332749 - ], - [ - -72.3031275, - 18.5331799 - ], - [ - -72.3048311, - 18.5311081 - ], - [ - -72.3097397, - 18.5311081 - ], - [ - -72.3164332, - 18.5324302 - ], - [ - -72.3234056, - 18.5366083 - ], - [ - -72.3261388, - 18.5387765 - ], - [ - -72.3261946, - 18.5426371 - ], - [ - -72.3170468, - 18.5540596 - ], - [ - -72.3130864, - 18.5540596 - ], - [ - -72.2987511, - 18.5453342 - ], - [ - -72.2988627, - 18.5407333 - ], - [ - -72.2962969, - 18.5404689 - ], - [ - -72.2954602, - 18.5395169 - ], - [ - -72.2961853, - 18.5338582 - ], - [ - -72.2971893, - 18.5332235 - ], - [ - -72.3007034, - 18.5332764 - ], - [ - -72.3022652, - 18.5342284 - ], - [ - -72.3028486, - 18.5335189 - ], - [ - -72.303104, - 18.5333361 - ], - [ - -72.303181, - 18.5334007 - ], - [ - -72.3035793, - 18.5335614 - ], - [ - -72.3030793, - 18.5346463 - ], - [ - -72.303715, - 18.5339873 - ], - [ - -72.3045286, - 18.5344052 - ], - [ - -72.3044015, - 18.5345097 - ], - [ - -72.3062747, - 18.5352571 - ], - [ - -72.3063107, - 18.5352741 - ], - [ - -72.3061219, - 18.5357628 - ], - [ - -72.3061219, - 18.5358196 - ], - [ - -72.30637, - 18.5358928 - ], - [ - -72.3062726, - 18.5354869 - ], - [ - -72.3066688, - 18.5350891 - ], - [ - -72.3061963, - 18.5349706 - ], - [ - -72.3058869, - 18.5349385 - ], - [ - -72.3055373, - 18.5346833 - ], - [ - -72.3054864, - 18.534613 - ], - [ - -72.3055585, - 18.5345065 - ], - [ - -72.3046749, - 18.5342293 - ], - [ - -72.3047617, - 18.5338817 - ], - [ - -72.3043252, - 18.5337511 - ], - [ - -72.3042595, - 18.5336346 - ] - ], - [ - [ - -72.2981405, - 18.477502 - ], - [ - -72.2935652, - 18.4948587 - ], - [ - -72.2922242, - 18.4964297 - ], - [ - -72.2931708, - 18.4972526 - ], - [ - -72.2892266, - 18.5057058 - ], - [ - -72.2878067, - 18.5080996 - ], - [ - -72.2850458, - 18.5119893 - ], - [ - -72.2840203, - 18.5113161 - ], - [ - -72.2808649, - 18.515879 - ], - [ - -72.2773151, - 18.5175994 - ], - [ - -72.2723454, - 18.5175246 - ], - [ - -72.2662714, - 18.5144578 - ], - [ - -72.2665869, - 18.5066783 - ], - [ - -72.2692643, - 18.5046154 - ], - [ - -72.2661965, - 18.5029756 - ], - [ - -72.2688181, - 18.4965222 - ], - [ - -72.2691528, - 18.4959403 - ], - [ - -72.2702684, - 18.4961519 - ], - [ - -72.2702684, - 18.4955964 - ], - [ - -72.2690691, - 18.49557 - ], - [ - -72.2692922, - 18.4937714 - ], - [ - -72.2736988, - 18.4859951 - ], - [ - -72.2746749, - 18.4850429 - ], - [ - -72.2751769, - 18.483403 - ], - [ - -72.2765435, - 18.4813398 - ], - [ - -72.2773523, - 18.4814985 - ], - [ - -72.2783006, - 18.4809694 - ], - [ - -72.2778544, - 18.4807049 - ], - [ - -72.2771013, - 18.480123 - ], - [ - -72.2789978, - 18.4775836 - ], - [ - -72.279723, - 18.4772927 - ], - [ - -72.2806433, - 18.4776365 - ], - [ - -72.2813685, - 18.4771604 - ], - [ - -72.2808386, - 18.4769752 - ], - [ - -72.2812848, - 18.4758378 - ], - [ - -72.2823167, - 18.4751765 - ], - [ - -72.2851615, - 18.4750971 - ], - [ - -72.2849941, - 18.4763668 - ], - [ - -72.2854404, - 18.4769752 - ], - [ - -72.286277, - 18.4756262 - ], - [ - -72.2869325, - 18.4754675 - ], - [ - -72.2865978, - 18.4751897 - ], - [ - -72.2865978, - 18.4750046 - ], - [ - -72.2909765, - 18.4747268 - ], - [ - -72.2946579, - 18.4749384 - ], - [ - -72.2973911, - 18.476843 - ] - ], - [ - [ - -72.3466657, - 18.5222375 - ], - [ - -72.346833, - 18.5244325 - ], - [ - -72.3475303, - 18.5277645 - ], - [ - -72.3455501, - 18.5291131 - ], - [ - -72.3403069, - 18.5292189 - ], - [ - -72.3383267, - 18.5280289 - ], - [ - -72.3369043, - 18.530118 - ], - [ - -72.3338086, - 18.5296684 - ], - [ - -72.3289279, - 18.5270769 - ], - [ - -72.328649, - 18.5253316 - ], - [ - -72.3292068, - 18.5232689 - ], - [ - -72.330406, - 18.5220524 - ], - [ - -72.3321631, - 18.5221847 - ], - [ - -72.3322467, - 18.5191963 - ], - [ - -72.3369183, - 18.5183633 - ], - [ - -72.3382012, - 18.5184691 - ], - [ - -72.3381454, - 18.5181782 - ], - [ - -72.3411993, - 18.5177947 - ], - [ - -72.3454943, - 18.5171997 - ], - [ - -72.3492595, - 18.517279 - ], - [ - -72.3504308, - 18.5188922 - ], - [ - -72.3503472, - 18.5206112 - ], - [ - -72.3496778, - 18.5220392 - ] - ], - [ - [ - -72.3303078, - 18.5486462 - ], - [ - -72.3429687, - 18.5508149 - ], - [ - -72.3433236, - 18.5530585 - ], - [ - -72.3413121, - 18.5614341 - ], - [ - -72.3390639, - 18.5613593 - ], - [ - -72.3384723, - 18.5638271 - ], - [ - -72.3375257, - 18.5654348 - ], - [ - -72.3348436, - 18.5650609 - ], - [ - -72.3311755, - 18.5638271 - ], - [ - -72.3312149, - 18.5616211 - ], - [ - -72.3232082, - 18.5606863 - ], - [ - -72.3212361, - 18.559602 - ], - [ - -72.3208023, - 18.5587046 - ], - [ - -72.3208811, - 18.557882 - ], - [ - -72.3259493, - 18.5580274 - ], - [ - -72.3266186, - 18.5581993 - ], - [ - -72.3259214, - 18.5577498 - ], - [ - -72.3250986, - 18.5573797 - ], - [ - -72.3233767, - 18.552263 - ], - [ - -72.3245994, - 18.5478507 - ], - [ - -72.3288986, - 18.5483742 - ], - [ - -72.329979, - 18.5489548 - ] - ], - [ - [ - -72.3231383, - 18.5269828 - ], - [ - -72.3223434, - 18.528067 - ], - [ - -72.3209629, - 18.5279745 - ], - [ - -72.3207816, - 18.5271282 - ], - [ - -72.3208513, - 18.5253697 - ], - [ - -72.3214649, - 18.5249598 - ], - [ - -72.3225666, - 18.5248937 - ], - [ - -72.3228454, - 18.52533 - ], - [ - -72.3232359, - 18.5264804 - ] - ], - [ - [ - -72.2160832, - 18.6457752 - ], - [ - -72.2159649, - 18.6553795 - ], - [ - -72.2030279, - 18.6558279 - ], - [ - -72.1947057, - 18.6553421 - ], - [ - -72.1922208, - 18.6545573 - ], - [ - -72.1920631, - 18.6521283 - ], - [ - -72.193483, - 18.6477559 - ], - [ - -72.201253, - 18.6385249 - ], - [ - -72.2069327, - 18.6388239 - ], - [ - -72.2120996, - 18.6424117 - ], - [ - -72.2118068, - 18.6430591 - ], - [ - -72.2121693, - 18.6426892 - ], - [ - -72.2127968, - 18.6427552 - ], - [ - -72.2134662, - 18.6431252 - ], - [ - -72.2135638, - 18.6437462 - ], - [ - -72.2154176, - 18.6443947 - ], - [ - -72.2158909, - 18.6450301 - ] - ], - [ - [ - -72.2867654, - 18.6482017 - ], - [ - -72.2900977, - 18.6527446 - ], - [ - -72.28981, - 18.6536532 - ], - [ - -72.2900738, - 18.6542664 - ], - [ - -72.290721, - 18.6537667 - ], - [ - -72.2910327, - 18.6544709 - ], - [ - -72.2912485, - 18.654221 - ], - [ - -72.29168, - 18.6558905 - ], - [ - -72.2912245, - 18.656606 - ], - [ - -72.2922673, - 18.65597 - ], - [ - -72.2926869, - 18.6567536 - ], - [ - -72.2930705, - 18.6567309 - ], - [ - -72.2941253, - 18.6581846 - ], - [ - -72.2960192, - 18.6608421 - ], - [ - -72.2959713, - 18.6619096 - ], - [ - -72.2932862, - 18.664567 - ], - [ - -72.2906731, - 18.6659979 - ], - [ - -72.2895943, - 18.6661342 - ], - [ - -72.2895943, - 18.6665657 - ], - [ - -72.2877004, - 18.6664749 - ], - [ - -72.2875805, - 18.6676559 - ], - [ - -72.2831214, - 18.6697227 - ], - [ - -72.2796453, - 18.6696546 - ], - [ - -72.2784311, - 18.6690787 - ], - [ - -72.2783972, - 18.6687736 - ], - [ - -72.277736, - 18.6691671 - ], - [ - -72.2774394, - 18.669143 - ], - [ - -72.2770071, - 18.6683159 - ], - [ - -72.2765575, - 18.6681125 - ], - [ - -72.2765385, - 18.6680583 - ], - [ - -72.2752319, - 18.6685239 - ], - [ - -72.2749292, - 18.6674649 - ], - [ - -72.2746416, - 18.6674309 - ], - [ - -72.2734668, - 18.6682145 - ], - [ - -72.2732271, - 18.6682712 - ], - [ - -72.2726757, - 18.6671583 - ], - [ - -72.2719147, - 18.6674288 - ], - [ - -72.2718808, - 18.6673405 - ], - [ - -72.2688149, - 18.6681868 - ], - [ - -72.2688269, - 18.6671761 - ], - [ - -72.2690786, - 18.6668241 - ], - [ - -72.2688149, - 18.66679 - ], - [ - -72.2681077, - 18.6670739 - ], - [ - -72.2676282, - 18.6673805 - ], - [ - -72.2675563, - 18.6666878 - ], - [ - -72.266861, - 18.666949 - ], - [ - -72.2655904, - 18.6673578 - ], - [ - -72.2654466, - 18.6670058 - ], - [ - -72.2647514, - 18.6674146 - ], - [ - -72.2629893, - 18.6681868 - ], - [ - -72.2628455, - 18.6681754 - ], - [ - -72.2626537, - 18.6676076 - ], - [ - -72.2623001, - 18.6677098 - ], - [ - -72.2624799, - 18.6679199 - ], - [ - -72.2624799, - 18.6682322 - ], - [ - -72.262306, - 18.6682606 - ], - [ - -72.2620963, - 18.6679654 - ], - [ - -72.2622761, - 18.6689193 - ], - [ - -72.2601484, - 18.6688966 - ], - [ - -72.2542749, - 18.6687944 - ], - [ - -72.2505388, - 18.6683476 - ], - [ - -72.2504371, - 18.669536 - ], - [ - -72.2477926, - 18.6698893 - ], - [ - -72.2415204, - 18.669793 - ], - [ - -72.2414187, - 18.6741933 - ], - [ - -72.2389167, - 18.6739759 - ], - [ - -72.2387249, - 18.6734649 - ], - [ - -72.2383653, - 18.6733059 - ], - [ - -72.2387009, - 18.6739532 - ], - [ - -72.2375502, - 18.6738964 - ], - [ - -72.2374183, - 18.6735103 - ], - [ - -72.237742, - 18.67334 - ], - [ - -72.2375142, - 18.6732605 - ], - [ - -72.236843, - 18.6734876 - ], - [ - -72.2364354, - 18.6724088 - ], - [ - -72.2355124, - 18.6726019 - ], - [ - -72.2354045, - 18.6724202 - ], - [ - -72.2353027, - 18.6729028 - ], - [ - -72.2345475, - 18.6726871 - ], - [ - -72.2343077, - 18.6724599 - ], - [ - -72.2342358, - 18.6734706 - ], - [ - -72.2334087, - 18.6734592 - ], - [ - -72.2332889, - 18.6733003 - ], - [ - -72.2327375, - 18.6732889 - ], - [ - -72.2327135, - 18.6735047 - ], - [ - -72.227703, - 18.6725281 - ], - [ - -72.2265283, - 18.6716537 - ], - [ - -72.226804, - 18.6715742 - ], - [ - -72.2274993, - 18.6715855 - ], - [ - -72.2274873, - 18.6714493 - ], - [ - -72.2272899, - 18.6714623 - ], - [ - -72.2272814, - 18.6712977 - ], - [ - -72.2272094, - 18.671358 - ], - [ - -72.2261785, - 18.6713693 - ], - [ - -72.2256032, - 18.670881 - ], - [ - -72.2255073, - 18.6694502 - ], - [ - -72.2261066, - 18.6696886 - ], - [ - -72.2261785, - 18.6695949 - ], - [ - -72.2259837, - 18.6695495 - ], - [ - -72.225777, - 18.6691379 - ], - [ - -72.2253335, - 18.6694643 - ], - [ - -72.2249739, - 18.66947 - ], - [ - -72.2245783, - 18.6678802 - ], - [ - -72.2235525, - 18.6677046 - ], - [ - -72.2235907, - 18.6675921 - ], - [ - -72.2224634, - 18.6676283 - ], - [ - -72.2223659, - 18.667022 - ], - [ - -72.2223277, - 18.6670943 - ], - [ - -72.2219209, - 18.667026 - ], - [ - -72.2208105, - 18.6669015 - ], - [ - -72.220809, - 18.6665325 - ], - [ - -72.2208705, - 18.6663593 - ], - [ - -72.2206023, - 18.6668107 - ], - [ - -72.2203895, - 18.6666361 - ], - [ - -72.2184341, - 18.6650535 - ], - [ - -72.21829, - 18.6640979 - ], - [ - -72.2183493, - 18.6608376 - ], - [ - -72.2187223, - 18.6606541 - ], - [ - -72.2186894, - 18.660603 - ], - [ - -72.2187253, - 18.6604525 - ], - [ - -72.2189771, - 18.6603247 - ], - [ - -72.2187823, - 18.6601998 - ], - [ - -72.2186984, - 18.6602367 - ], - [ - -72.2185815, - 18.6600352 - ], - [ - -72.2186085, - 18.6600039 - ], - [ - -72.2187823, - 18.6601345 - ], - [ - -72.218995, - 18.6600181 - ], - [ - -72.2189111, - 18.6599131 - ], - [ - -72.2189681, - 18.6597938 - ], - [ - -72.2183807, - 18.6595837 - ], - [ - -72.2184728, - 18.6539662 - ], - [ - -72.2201001, - 18.6511554 - ], - [ - -72.225796, - 18.6469472 - ], - [ - -72.2283048, - 18.6457265 - ], - [ - -72.2379335, - 18.645855 - ], - [ - -72.237764, - 18.6446985 - ], - [ - -72.2400355, - 18.6432529 - ], - [ - -72.2455958, - 18.6433493 - ], - [ - -72.2482742, - 18.6450358 - ], - [ - -72.2487488, - 18.6436705 - ], - [ - -72.2511067, - 18.6429775 - ], - [ - -72.2512385, - 18.6433409 - ], - [ - -72.2512625, - 18.6431592 - ], - [ - -72.2514843, - 18.6431365 - ], - [ - -72.2513284, - 18.6429718 - ], - [ - -72.2533602, - 18.6423471 - ], - [ - -72.253516, - 18.6426765 - ], - [ - -72.2539535, - 18.6425402 - ], - [ - -72.2541453, - 18.642932 - ], - [ - -72.2543851, - 18.6428696 - ], - [ - -72.2543791, - 18.6427503 - ], - [ - -72.2564168, - 18.6423244 - ], - [ - -72.2566925, - 18.6431365 - ], - [ - -72.2568783, - 18.6428582 - ], - [ - -72.2568184, - 18.6425288 - ], - [ - -72.258843, - 18.6420991 - ], - [ - -72.258885, - 18.6422467 - ], - [ - -72.2592626, - 18.6422297 - ], - [ - -72.2596461, - 18.6424057 - ], - [ - -72.2592206, - 18.6406907 - ], - [ - -72.2599545, - 18.6404815 - ], - [ - -72.2601156, - 18.6406341 - ], - [ - -72.2601156, - 18.6399393 - ], - [ - -72.2615268, - 18.6394669 - ], - [ - -72.2626056, - 18.6391034 - ], - [ - -72.2654465, - 18.6387286 - ], - [ - -72.2719433, - 18.6386832 - ], - [ - -72.272201, - 18.6388649 - ], - [ - -72.2730341, - 18.6394158 - ], - [ - -72.273166, - 18.6412558 - ], - [ - -72.2738732, - 18.6410286 - ], - [ - -72.2742208, - 18.6416079 - ], - [ - -72.2752187, - 18.6416987 - ], - [ - -72.2754524, - 18.6415738 - ], - [ - -72.2755513, - 18.6416874 - ], - [ - -72.2755394, - 18.6417527 - ], - [ - -72.2764713, - 18.6418634 - ], - [ - -72.276753, - 18.6418975 - ], - [ - -72.2762953, - 18.6426002 - ], - [ - -72.2774226, - 18.6429978 - ], - [ - -72.277982, - 18.6427247 - ], - [ - -72.2785796, - 18.6431303 - ], - [ - -72.2785669, - 18.6432307 - ], - [ - -72.2789017, - 18.6433471 - ], - [ - -72.279851, - 18.6439655 - ], - [ - -72.2858703, - 18.6469651 - ] - ], - [ - [ - -72.5557247, - 18.5305893 - ], - [ - -72.5555866, - 18.5367036 - ], - [ - -72.554995, - 18.537975 - ], - [ - -72.5488026, - 18.537919 - ], - [ - -72.5486646, - 18.5372832 - ], - [ - -72.548842, - 18.5306267 - ], - [ - -72.5493745, - 18.5301031 - ], - [ - -72.555133, - 18.5301218 - ] - ], - [ - [ - -72.6235278, - 18.5079877 - ], - [ - -72.6234441, - 18.5095217 - ], - [ - -72.6226074, - 18.5104341 - ], - [ - -72.6204878, - 18.511849 - ], - [ - -72.6183403, - 18.5107514 - ], - [ - -72.6162207, - 18.5083183 - ], - [ - -72.6162625, - 18.506467 - ], - [ - -72.618661, - 18.5044438 - ], - [ - -72.6204041, - 18.5044967 - ], - [ - -72.6228305, - 18.506996 - ] - ] - ] - }, - { - "name": "Ireland Bartholomew Quarter-Inch 1940", - "type": "tms", - "template": "http://geo.nls.uk/maps/ireland/bartholomew/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 5, - 13 - ], - "polygon": [ - [ - [ - -8.8312773, - 55.3963337 - ], - [ - -7.3221271, - 55.398605 - ], - [ - -7.2891331, - 55.4333162 - ], - [ - -7.2368042, - 55.4530757 - ], - [ - -7.18881, - 55.4497995 - ], - [ - -7.1528144, - 55.3968384 - ], - [ - -6.90561, - 55.394903 - ], - [ - -6.9047153, - 55.3842114 - ], - [ - -5.8485282, - 55.3922956 - ], - [ - -5.8378629, - 55.248676 - ], - [ - -5.3614762, - 55.2507024 - ], - [ - -5.3899172, - 53.8466464 - ], - [ - -5.8734141, - 53.8487436 - ], - [ - -5.8983, - 52.8256258 - ], - [ - -6.0191742, - 52.8256258 - ], - [ - -6.0262844, - 51.7712367 - ], - [ - -8.1131422, - 51.7712367 - ], - [ - -8.1273627, - 51.3268839 - ], - [ - -10.6052842, - 51.3091083 - ], - [ - -10.6271879, - 52.0328254 - ], - [ - -10.6469845, - 52.0322454 - ], - [ - -10.6469845, - 52.0440365 - ], - [ - -10.6271879, - 52.0448095 - ], - [ - -10.6290733, - 52.0745627 - ], - [ - -10.6699234, - 52.0743695 - ], - [ - -10.6702376, - 52.0876941 - ], - [ - -10.6312729, - 52.0898179 - ], - [ - -10.6393128, - 52.4147202 - ], - [ - -10.3137689, - 52.4185533 - ], - [ - -10.3166401, - 53.3341342 - ], - [ - -10.3699669, - 53.3330727 - ], - [ - -10.385965, - 54.3534472 - ], - [ - -8.8163777, - 54.3586265 - ], - [ - -8.8173427, - 54.6595721 - ], - [ - -8.8413398, - 54.6616284 - ], - [ - -8.8422286, - 54.6929749 - ], - [ - -8.8315632, - 54.7145436 - ], - [ - -8.8151208, - 54.7145436 - ] - ] - ], - "terms_url": "http://geo.nls.uk/maps/", - "terms_text": "National Library of Scotland Historic Maps" - }, - { - "name": "Ireland British War Office One-Inch 1941-43 GSGS 4136", - "type": "tms", - "template": "http://geo.nls.uk/maps/ireland/gsgs4136/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 5, - 15 - ], - "polygon": [ - [ - [ - -10.0847426, - 51.4147902 - ], - [ - -10.0906535, - 51.5064103 - ], - [ - -10.4564222, - 51.5003961 - ], - [ - -10.5005905, - 52.3043019 - ], - [ - -10.0837522, - 52.312741 - ], - [ - -10.0840973, - 52.3404698 - ], - [ - -10.055802, - 52.3408915 - ], - [ - -10.0768509, - 52.7628238 - ], - [ - -9.7780248, - 52.7684611 - ], - [ - -9.7818205, - 52.8577261 - ], - [ - -9.6337877, - 52.8596012 - ], - [ - -9.6449626, - 53.1294502 - ], - [ - -10.0919663, - 53.1227152 - ], - [ - -10.1051422, - 53.3912913 - ], - [ - -10.4052593, - 53.3866349 - ], - [ - -10.4530828, - 54.193502 - ], - [ - -10.2998523, - 54.1974988 - ], - [ - -10.3149801, - 54.4669592 - ], - [ - -8.9276095, - 54.4853897 - ], - [ - -8.9339534, - 54.7546562 - ], - [ - -8.7773069, - 54.755501 - ], - [ - -8.7826749, - 55.0252208 - ], - [ - -8.9402974, - 55.0238221 - ], - [ - -8.9451773, - 55.2934155 - ], - [ - -7.528039, - 55.2970274 - ], - [ - -7.525599, - 55.3874955 - ], - [ - -7.0541955, - 55.3841691 - ], - [ - -7.0556595, - 55.2939712 - ], - [ - -6.3241545, - 55.2859128 - ], - [ - -6.3217146, - 55.3253556 - ], - [ - -6.1035807, - 55.3223016 - ], - [ - -6.1045566, - 55.2828557 - ], - [ - -5.7985836, - 55.2772968 - ], - [ - -5.8117595, - 55.0087135 - ], - [ - -5.656577, - 55.0056351 - ], - [ - -5.6721928, - 54.7355021 - ], - [ - -5.3618278, - 54.729585 - ], - [ - -5.3964755, - 54.1917889 - ], - [ - -5.855679, - 54.2017807 - ], - [ - -5.9220464, - 52.8524504 - ], - [ - -6.070885, - 52.8551025 - ], - [ - -6.1030927, - 52.1373337 - ], - [ - -6.8331336, - 52.1463183 - ], - [ - -6.8355736, - 52.0578908 - ], - [ - -7.5641506, - 52.0617913 - ], - [ - -7.5661026, - 51.7921593 - ], - [ - -8.147305, - 51.792763 - ], - [ - -8.146329, - 51.7033331 - ], - [ - -8.2912636, - 51.7027283 - ], - [ - -8.2897996, - 51.5227274 - ], - [ - -9.1174397, - 51.516958 - ], - [ - -9.1179277, - 51.4625685 - ], - [ - -9.3692452, - 51.4616564 - ], - [ - -9.3672933, - 51.4254613 - ] - ] - ], - "terms_url": "http://geo.nls.uk/maps/", - "terms_text": "National Library of Scotland Historic Maps" - }, - { - "name": "Ireland EEA CORINE 2006", - "type": "tms", - "template": "http://a.tile.openstreetmap.ie/tiles/corine/{zoom}/{x}/{y}.png", - "scaleExtent": [ - 5, - 16 - ], - "polygon": [ - [ - [ - -5.842956, - 53.8627976 - ], - [ - -5.8341575, - 53.7633541 - ], - [ - -5.6267647, - 53.5383692 - ], - [ - -5.9648778, - 52.1631197 - ], - [ - -6.0453211, - 52.0527275 - ], - [ - -6.1823261, - 51.9699475 - ], - [ - -6.3960035, - 51.9234618 - ], - [ - -6.5945978, - 51.883911 - ], - [ - -7.2481994, - 51.9056295 - ], - [ - -7.341212, - 51.8148076 - ], - [ - -8.1971787, - 51.5037019 - ], - [ - -8.3191005, - 51.4167737 - ], - [ - -9.4478202, - 51.1991221 - ], - [ - -9.9015706, - 51.2266802 - ], - [ - -10.472215, - 51.4050139 - ], - [ - -10.8857437, - 51.6770619 - ], - [ - -11.035318, - 52.0620016 - ], - [ - -10.9950963, - 52.1831616 - ], - [ - -10.8178697, - 52.3139827 - ], - [ - -9.8839736, - 52.9032208 - ], - [ - -10.1165049, - 52.9676141 - ], - [ - -10.5514014, - 53.3317027 - ], - [ - -10.6896633, - 53.5854022 - ], - [ - -10.6444139, - 54.0100436 - ], - [ - -10.5501445, - 54.257482 - ], - [ - -10.2824192, - 54.4742405 - ], - [ - -9.8073011, - 54.5705346 - ], - [ - -9.196435, - 54.5486695 - ], - [ - -9.2253443, - 54.7000264 - ], - [ - -8.8985435, - 55.1363582 - ], - [ - -8.0476045, - 55.4711977 - ], - [ - -7.4367384, - 55.6191092 - ], - [ - -7.2205471, - 55.6205288 - ], - [ - -6.8258723, - 55.5608644 - ], - [ - -6.0679458, - 55.3727567 - ], - [ - -5.5639184, - 55.0759594 - ], - [ - -5.0649187, - 54.4640142 - ], - [ - -5.2572284, - 54.1582424 - ] - ] - ], - "terms_url": "http://www.eea.europa.eu/data-and-maps/data/clc-2006-vector-data-version-1", - "terms_text": "EEA Corine 2006" - }, - { - "name": "Ireland EEA GMES Urban Atlas", - "type": "tms", - "template": "http://a.tile.openstreetmap.ie/tiles/urbanatlas/{zoom}/{x}/{y}.png", - "scaleExtent": [ - 5, - 17 - ], - "polygon": [ - [ - [ - -9.2759602, - 52.7993666 - ], - [ - -9.215509, - 52.8276933 - ], - [ - -9.1086618, - 52.9128016 - ], - [ - -9.0196831, - 52.8837107 - ], - [ - -8.8760649, - 52.8978445 - ], - [ - -8.8001797, - 52.8833558 - ], - [ - -8.7665597, - 52.9065354 - ], - [ - -8.5938079, - 52.9238592 - ], - [ - -8.5241972, - 52.8869724 - ], - [ - -8.4956786, - 52.9105906 - ], - [ - -8.3506448, - 52.9238592 - ], - [ - -8.2718204, - 52.9492401 - ], - [ - -8.2249679, - 52.8991338 - ], - [ - -8.1564001, - 52.9149986 - ], - [ - -8.0881237, - 52.7630417 - ], - [ - -8.1360092, - 52.7239783 - ], - [ - -8.1570652, - 52.6766443 - ], - [ - -8.2059695, - 52.6185385 - ], - [ - -8.2025734, - 52.5954396 - ], - [ - -8.2231242, - 52.5599691 - ], - [ - -8.2236294, - 52.5095371 - ], - [ - -8.2976651, - 52.5025088 - ], - [ - -8.3295888, - 52.4721087 - ], - [ - -8.3589695, - 52.4986072 - ], - [ - -8.3737385, - 52.4764529 - ], - [ - -8.432326, - 52.4342609 - ], - [ - -8.4754569, - 52.4216289 - ], - [ - -8.5017727, - 52.3870011 - ], - [ - -8.5476205, - 52.3681351 - ], - [ - -8.6444103, - 52.3376422 - ], - [ - -8.6841451, - 52.3660614 - ], - [ - -8.8154099, - 52.3721014 - ], - [ - -8.8614233, - 52.3521652 - ], - [ - -8.9074451, - 52.3824674 - ], - [ - -8.9388551, - 52.3789166 - ], - [ - -8.9782502, - 52.4093811 - ], - [ - -9.0298715, - 52.4104169 - ], - [ - -9.1059449, - 52.420981 - ], - [ - -9.1084962, - 52.4415071 - ], - [ - -9.140702, - 52.4650891 - ], - [ - -9.1315765, - 52.5136207 - ], - [ - -9.1739699, - 52.5620573 - ], - [ - -9.1426235, - 52.589645 - ], - [ - -9.1542382, - 52.610216 - ], - [ - -9.1426231, - 52.6387401 - ], - [ - -9.1776844, - 52.6447573 - ], - [ - -9.2012184, - 52.6526248 - ], - [ - -9.2036198, - 52.6686468 - ], - [ - -9.2238348, - 52.6706578 - ], - [ - -9.2161072, - 52.6919412 - ], - [ - -9.1882395, - 52.7057242 - ], - [ - -9.2750099, - 52.7350292 - ], - [ - -9.2601152, - 52.7616711 - ] - ], - [ - [ - -7.307313219981238, - 53.81625879275365 - ], - [ - -7.245858447032101, - 53.78300449111207 - ], - [ - -7.15144468970801, - 53.81179938127503 - ], - [ - -7.086900011973722, - 53.784424420834 - ], - [ - -7.0347149533800435, - 53.77996162275688 - ], - [ - -6.975320116954343, - 53.788481098127924 - ], - [ - -6.928628222423156, - 53.81443454540607 - ], - [ - -6.992829577403537, - 53.86609081229548 - ], - [ - -6.975320116954343, - 53.87945028968944 - ], - [ - -6.949914233165313, - 53.87094929783329 - ], - [ - -6.9375546140247035, - 53.87540241385127 - ], - [ - -6.936867968516893, - 53.896649390754646 - ], - [ - -6.897042529063821, - 53.889770599553906 - ], - [ - -6.867516772227924, - 53.880259817835736 - ], - [ - -6.851037280040446, - 53.88450958346468 - ], - [ - -6.842454211192801, - 53.89786317755242 - ], - [ - -6.812928454356904, - 53.90069520963246 - ], - [ - -6.79850889869286, - 53.89280549994937 - ], - [ - -6.789925829845217, - 53.89462633440526 - ], - [ - -6.791985766368652, - 53.904538374710896 - ], - [ - -6.778939501720231, - 53.918087767078354 - ], - [ - -6.77001311011868, - 53.91505470292794 - ], - [ - -6.75868345923979, - 53.921727153244476 - ], - [ - -6.744263903575747, - 53.916065748791254 - ], - [ - -6.727441088634364, - 53.92334455637637 - ], - [ - -6.713021532970319, - 53.90777445003927 - ], - [ - -6.684182421642232, - 53.90292024303218 - ], - [ - -6.623757616954815, - 53.88187882710815 - ], - [ - -6.590455309825955, - 53.857789593974296 - ], - [ - -6.591141955333765, - 53.835509894663346 - ], - [ - -6.574319140392382, - 53.82254170362619 - ], - [ - -6.571572558361136, - 53.804703885117576 - ], - [ - -6.5533764524041285, - 53.79983770791046 - ], - [ - -6.541360156017425, - 53.78300449111207 - ], - [ - -6.511491076427622, - 53.76900546961285 - ], - [ - -6.472695605236269, - 53.77326653566421 - ], - [ - -6.443513171154276, - 53.76393220797015 - ], - [ - -6.44728972144724, - 53.75114486961979 - ], - [ - -6.4775021237909485, - 53.728199094666586 - ], - [ - -6.459649340587848, - 53.71682309412751 - ], - [ - -6.435616747814443, - 53.72230833571077 - ], - [ - -6.4198239011347775, - 53.72921465935537 - ], - [ - -6.4009411496699595, - 53.72169889975152 - ], - [ - -6.375878588634836, - 53.718042098526006 - ], - [ - -6.359055773693453, - 53.708695495259434 - ], - [ - -6.340173022228636, - 53.708085862042424 - ], - [ - -6.329873339611461, - 53.71296268045594 - ], - [ - -6.325753466564592, - 53.72210519137233 - ], - [ - -6.2938244504513525, - 53.72576163932632 - ], - [ - -6.265328661877173, - 53.7363229253304 - ], - [ - -6.240952746349864, - 53.734292114843086 - ], - [ - -6.180871264416349, - 53.632015710147016 - ], - [ - -6.092793818322125, - 53.588038288422446 - ], - [ - -5.985734079608837, - 53.49383447350347 - ], - [ - -6.0887447432153685, - 53.27174268379562 - ], - [ - -6.033272979232964, - 53.1191110041494 - ], - [ - -5.984663357119282, - 52.9651254915577 - ], - [ - -6.122679104189409, - 52.73207538466633 - ], - [ - -6.185163845400262, - 52.73706461957944 - ], - [ - -6.1899703639549415, - 52.76075568810044 - ], - [ - -6.319059719423517, - 52.782357357522855 - ], - [ - -6.393904079774976, - 52.7790347214105 - ], - [ - -6.465315212587381, - 52.6946379192593 - ], - [ - -6.534666408876349, - 52.673409093161446 - ], - [ - -6.612257351259057, - 52.69255711803012 - ], - [ - -6.6692489284074155, - 52.74745702505679 - ], - [ - -6.671308864930852, - 52.76948072949997 - ], - [ - -6.720747341493285, - 52.7748810695361 - ], - [ - -6.71456753192298, - 52.80311808637125 - ], - [ - -6.658949245790243, - 52.84709806982182 - ], - [ - -6.582044948915348, - 52.81349473557279 - ], - [ - -6.547712673524768, - 52.83133677935633 - ], - [ - -6.531233181337292, - 52.87404491274922 - ], - [ - -6.617750515321548, - 52.87528820923615 - ], - [ - -6.728987087587023, - 52.90635903963372 - ], - [ - -6.780485500672891, - 52.859122574848655 - ], - [ - -6.870436062196207, - 52.85165948109425 - ], - [ - -6.938413967469552, - 52.86658438536895 - ], - [ - -6.965879787782016, - 52.89766145203082 - ], - [ - -6.987852444031986, - 52.969260966642985 - ], - [ - -7.039350857117853, - 52.9560260536776 - ], - [ - -7.109388698914634, - 53.007288776633686 - ], - [ - -7.068876613953752, - 53.058078015357786 - ], - [ - -7.088789333680287, - 53.11869890949892 - ], - [ - -7.119688381531809, - 53.15000684568904 - ], - [ - -7.105955471375577, - 53.16112391039828 - ], - [ - -7.127928127625547, - 53.17223809655703 - ], - [ - -7.180113186219227, - 53.182526443342745 - ], - [ - -7.160887112000503, - 53.19898266621498 - ], - [ - -7.057890285828767, - 53.19898266621498 - ], - [ - -7.048963894227218, - 53.217077217179636 - ], - [ - -7.0915359157115345, - 53.235575105358386 - ], - [ - -7.0434707301647235, - 53.25735126035676 - ], - [ - -7.05102383075065, - 53.29717703664696 - ], - [ - -6.996778835633536, - 53.31112780504489 - ], - [ - -7.044157375672535, - 53.33368557548294 - ], - [ - -7.105955471375576, - 53.371801590024276 - ], - [ - -7.22050647653913, - 53.432465115081854 - ], - [ - -7.149441429887032, - 53.45731709817442 - ], - [ - -7.099891489102085, - 53.463915962572514 - ], - [ - -7.0744645458045445, - 53.48370640260363 - ], - [ - -7.079028356140001, - 53.504650927752664 - ], - [ - -7.047733656696876, - 53.515119311359335 - ], - [ - -7.029478415355053, - 53.54147267392419 - ], - [ - -7.054253385747527, - 53.56471202500164 - ], - [ - -7.009267255298033, - 53.58561652973758 - ], - [ - -6.992641946218873, - 53.602642188744426 - ], - [ - -6.989056095241016, - 53.62739453790707 - ], - [ - -6.9717788132567895, - 53.63686620586593 - ], - [ - -6.9633031654909425, - 53.650973114934644 - ], - [ - -6.9871001765258205, - 53.66623418009986 - ], - [ - -6.999813648174589, - 53.67086935885432 - ], - [ - -7.008289295940436, - 53.65908728051006 - ], - [ - -7.044473792171549, - 53.65367801032349 - ], - [ - -7.066640870943764, - 53.63918547390694 - ], - [ - -7.101847407817279, - 53.65870092708686 - ], - [ - -7.120754622064167, - 53.672993645380515 - ], - [ - -7.137379931143327, - 53.66893809633893 - ], - [ - -7.160850955725672, - 53.683034277255075 - ], - [ - -7.174216400279507, - 53.686316272406906 - ], - [ - -7.196057492599188, - 53.69017711570491 - ], - [ - -7.210726882963154, - 53.69480966037566 - ], - [ - -7.247237365646801, - 53.71661437518035 - ], - [ - -7.239413690786019, - 53.73223735177976 - ], - [ - -7.260276823748104, - 53.74361339729716 - ], - [ - -7.2814659431627184, - 53.75922634307083 - ], - [ - -7.289615604476034, - 53.77271433845693 - ], - [ - -7.3238441819919515, - 53.78465723043301 - ], - [ - -7.337209626545788, - 53.78658318504567 - ], - [ - -7.351227044004687, - 53.80141007448381 - ], - [ - -7.307313219981238, - 53.81625879275365 - ] - ], - [ - [ - -5.685433013282673, - 54.77854496390836 - ], - [ - -5.696867084279401, - 54.73050346921268 - ], - [ - -5.8223689524230124, - 54.70033215177621 - ], - [ - -5.878760568989772, - 54.649492182564074 - ], - [ - -5.743404719024681, - 54.68128223623249 - ], - [ - -5.581196917402638, - 54.68781619319656 - ], - [ - -5.571488953592992, - 54.67074450064368 - ], - [ - -5.582915011231644, - 54.66440901595977 - ], - [ - -5.58291501123164, - 54.65085746679818 - ], - [ - -5.6086481910584185, - 54.63997082553691 - ], - [ - -5.6354970593650116, - 54.61551371292451 - ], - [ - -5.728732824433139, - 54.6184944610979 - ], - [ - -5.822612969913913, - 54.49193018941315 - ], - [ - -5.896754545381575, - 54.44975600798866 - ], - [ - -5.936834914186871, - 54.38213187386197 - ], - [ - -6.0187561190025445, - 54.36974944197913 - ], - [ - -6.059257912638059, - 54.38280030737259 - ], - [ - -6.101784280694663, - 54.41510088826871 - ], - [ - -6.1740201072375225, - 54.43476829635816 - ], - [ - -6.216261364689026, - 54.42827259213158 - ], - [ - -6.264329002478664, - 54.487825014814625 - ], - [ - -6.249277519938476, - 54.49741303545491 - ], - [ - -6.288340515296785, - 54.53143435197413 - ], - [ - -6.283750270272458, - 54.54447449434036 - ], - [ - -6.321445027854273, - 54.58928767713928 - ], - [ - -6.264329002478664, - 54.604982769755765 - ], - [ - -6.240052417736423, - 54.59541999854735 - ], - [ - -6.098762694536575, - 54.631690374598676 - ], - [ - -6.051950538018501, - 54.61314575326238 - ], - [ - -6.031509408441251, - 54.620921248201434 - ], - [ - -6.002995140908084, - 54.65571636730639 - ], - [ - -6.0647754758974335, - 54.6634355452454 - ], - [ - -6.059920158948984, - 54.704134188139534 - ], - [ - -6.047781866577864, - 54.71395188569398 - ], - [ - -6.120611620804591, - 54.801644524994515 - ], - [ - -6.002141887262449, - 54.80836072138932 - ], - [ - -5.984662746248036, - 54.78652900156178 - ], - [ - -5.685433013282673, - 54.77854496390836 - ] - ], - [ - [ - -9.128658300749114, - 53.24759266864586 - ], - [ - -9.024510568479629, - 53.26744820137083 - ], - [ - -9.016360907166316, - 53.26364619217274 - ], - [ - -9.001854510028616, - 53.26588844362053 - ], - [ - -8.9951717877517, - 53.259258838409615 - ], - [ - -8.973493688658284, - 53.262378780650025 - ], - [ - -8.95230456924367, - 53.271444820907114 - ], - [ - -8.956705386352859, - 53.281580911863244 - ], - [ - -8.961106203462048, - 53.28119110665652 - ], - [ - -8.960780217009516, - 53.28908396911955 - ], - [ - -8.954260487958864, - 53.28927883616923 - ], - [ - -8.95230456924367, - 53.30155366854246 - ], - [ - -8.963714095082308, - 53.303793931840495 - ], - [ - -8.9811543702928, - 53.294734752711804 - ], - [ - -8.985718180628256, - 53.30174847871221 - ], - [ - -9.019946758144176, - 53.30768976199425 - ], - [ - -9.00837423907927, - 53.31596722087059 - ], - [ - -9.01880580556031, - 53.31625933715475 - ], - [ - -9.045862681120513, - 53.31275380979257 - ], - [ - -9.06444390891487, - 53.32122500810515 - ], - [ - -9.080906224767762, - 53.307397587062724 - ], - [ - -9.08106921799403, - 53.303404329274585 - ], - [ - -9.09019683866494, - 53.30574189135002 - ], - [ - -9.095901601584261, - 53.298826232852214 - ], - [ - -9.10128037805105, - 53.3008718259498 - ], - [ - -9.115623781962478, - 53.28450433758295 - ], - [ - -9.121491538108067, - 53.2832375443259 - ], - [ - -9.13273807072044, - 53.28557621023763 - ], - [ - -9.144636576237877, - 53.27865728614638 - ], - [ - -9.13876882009229, - 53.26345120822951 - ], - [ - -9.128658300749114, - 53.24759266864586 - ] - ], - [ - [ - -8.595266214281438, - 51.69264788483154 - ], - [ - -8.55819409885298, - 51.69306638852667 - ], - [ - -8.566697711835303, - 51.682644706464686 - ], - [ - -8.579130708100188, - 51.67349700898941 - ], - [ - -8.544554623426079, - 51.66520531197343 - ], - [ - -8.494765061495364, - 51.667778759675976 - ], - [ - -8.30113898732036, - 51.7235009029955 - ], - [ - -8.268406960495541, - 51.784858633837544 - ], - [ - -8.154536388302146, - 51.7814362126791 - ], - [ - -8.115350159004825, - 51.809093351533164 - ], - [ - -8.068326683848039, - 51.870050153657075 - ], - [ - -8.10059769621054, - 51.89964422561186 - ], - [ - -8.08123508879304, - 51.918414974037226 - ], - [ - -8.09183842142643, - 51.95337589170907 - ], - [ - -8.124570448251253, - 51.95479649105758 - ], - [ - -8.132407694110718, - 51.970988142592034 - ], - [ - -8.099675667285895, - 51.978371865876596 - ], - [ - -8.144394070131078, - 52.02151390085561 - ], - [ - -8.159607547387685, - 52.064330945363764 - ], - [ - -8.140705954432507, - 52.07254939152303 - ], - [ - -8.165600735397863, - 52.09294727054506 - ], - [ - -8.18726841512697, - 52.0835993998731 - ], - [ - -8.2093971093184, - 52.10512489114057 - ], - [ - -8.207092037006792, - 52.12494181389489 - ], - [ - -8.227837687811258, - 52.143052434929714 - ], - [ - -8.222766528725723, - 52.16454923557058 - ], - [ - -8.30298304516965, - 52.1829264222872 - ], - [ - -8.427456949996438, - 52.17783811526099 - ], - [ - -8.46710419375608, - 52.169921813849676 - ], - [ - -8.509978538751975, - 52.18405707812542 - ], - [ - -8.530263175094117, - 52.16511480067495 - ], - [ - -8.574981577939297, - 52.18066502436804 - ], - [ - -8.587889982884295, - 52.16963906274442 - ], - [ - -8.642289689438227, - 52.18829678149147 - ], - [ - -8.719279104645906, - 52.15804472022032 - ], - [ - -8.698533453841442, - 52.13541291452849 - ], - [ - -8.740946784375014, - 52.10823956240069 - ], - [ - -8.77460084012448, - 52.05951253229793 - ], - [ - -8.803183736788409, - 52.03768144571248 - ], - [ - -8.86818677597573, - 52.03286015807593 - ], - [ - -8.870491848287335, - 52.01839317543363 - ], - [ - -8.844214023935015, - 51.991148511559096 - ], - [ - -8.79811257770287, - 51.964455373040394 - ], - [ - -8.782899100446263, - 51.931777239822054 - ], - [ - -8.835915763613228, - 51.9292188160068 - ], - [ - -8.838681850387156, - 51.90277322850554 - ], - [ - -8.802261707863764, - 51.89367006943167 - ], - [ - -8.792580404155013, - 51.85695425263326 - ], - [ - -8.765841565340368, - 51.82476769939557 - ], - [ - -8.758926348405547, - 51.80054140901511 - ], - [ - -8.79811257770287, - 51.78628456602828 - ], - [ - -8.832227647914657, - 51.79626482935233 - ], - [ - -8.836837792537873, - 51.77687258059678 - ], - [ - -8.885705325543944, - 51.746055989869106 - ], - [ - -8.859888515653944, - 51.72435763090916 - ], - [ - -8.807332866949299, - 51.71093369500414 - ], - [ - -8.678248817499297, - 51.693505197270746 - ], - [ - -8.60540853245251, - 51.67835695335278 - ], - [ - -8.595266214281438, - 51.69264788483154 - ] - ], - [ - [ - -7.138279151048154, - 55.06131559970097 - ], - [ - -7.117994514706011, - 54.99631329558348 - ], - [ - -7.070049010624583, - 54.98784996056705 - ], - [ - -7.076503213097081, - 54.93332450204895 - ], - [ - -7.025791622241725, - 54.91159959910791 - ], - [ - -7.007351043748867, - 54.87872502112528 - ], - [ - -7.024869593317081, - 54.8511320998998 - ], - [ - -6.990754523105296, - 54.81661438893913 - ], - [ - -7.051608432131725, - 54.80598761598125 - ], - [ - -7.115228427932084, - 54.80651902101645 - ], - [ - -7.170550163410654, - 54.84847793920564 - ], - [ - -7.199133060074584, - 54.84316909395457 - ], - [ - -7.222183783190655, - 54.85803210052931 - ], - [ - -7.2111194360949415, - 54.862808332627324 - ], - [ - -7.212041465019584, - 54.882438010878076 - ], - [ - -7.279349576518514, - 54.880846771447125 - ], - [ - -7.273817402970655, - 54.91530955931841 - ], - [ - -7.3033223285592275, - 54.915839525718205 - ], - [ - -7.363254208661015, - 54.90894941815292 - ], - [ - -7.385382902852443, - 54.91636948513913 - ], - [ - -7.391837105324943, - 54.93438395336098 - ], - [ - -7.429640291235302, - 54.95291983389722 - ], - [ - -7.420420001988872, - 54.99208185118366 - ], - [ - -7.410277683817801, - 55.03437621938347 - ], - [ - -7.3577220351131585, - 55.057619110599035 - ], - [ - -7.265519142648871, - 55.07557028899173 - ], - [ - -7.138279151048154, - 55.06131559970097 - ] - ], - [ - [ - -7.190498776293322, - 52.26144368927652 - ], - [ - -7.156844720543858, - 52.28443443581867 - ], - [ - -7.132871968503143, - 52.27343421670601 - ], - [ - -7.113278853854483, - 52.26779201951648 - ], - [ - -7.098295883829036, - 52.27230583471742 - ], - [ - -7.089767116276089, - 52.25509445009032 - ], - [ - -7.07109603055207, - 52.259186286149074 - ], - [ - -7.033984366335195, - 52.257352061495865 - ], - [ - -7.027530163862696, - 52.250720000975015 - ], - [ - -7.034675888028678, - 52.247756419376 - ], - [ - -7.031218279561267, - 52.24013487190721 - ], - [ - -7.034214873566356, - 52.23222966213934 - ], - [ - -7.050580886978767, - 52.2296884028405 - ], - [ - -7.062567262999124, - 52.21980434486687 - ], - [ - -7.076858711331088, - 52.216132562953725 - ], - [ - -7.084926464421715, - 52.22065163604718 - ], - [ - -7.084465449959392, - 52.22785295843095 - ], - [ - -7.101292477834124, - 52.221498911062525 - ], - [ - -7.105211100763858, - 52.21726237433474 - ], - [ - -7.111665303236357, - 52.21796849185403 - ], - [ - -7.107977187537785, - 52.21104805609072 - ], - [ - -7.117773744862115, - 52.20928246619701 - ], - [ - -7.129760120882472, - 52.21690931136535 - ], - [ - -7.14497359813908, - 52.21782726924826 - ], - [ - -7.150505771686938, - 52.22375823207553 - ], - [ - -7.158112510315241, - 52.22262858593765 - ], - [ - -7.158804032008724, - 52.22700580464912 - ], - [ - -7.158573524777563, - 52.23180612902503 - ], - [ - -7.167563306792832, - 52.23985256723076 - ], - [ - -7.16733279956167, - 52.244580933687786 - ], - [ - -7.172519212262786, - 52.24676851484933 - ], - [ - -7.177590371348324, - 52.25114335361416 - ], - [ - -7.190498776293322, - 52.26144368927652 - ] - ] - ], - "terms_url": "http://www.eea.europa.eu/data-and-maps/data/urban-atlas", - "terms_text": "EEA GMES Urban Atlas" - }, - { - "name": "Kanton Aargau 25cm (AGIS 2011)", - "type": "tms", - "template": "http://tiles.poole.ch/AGIS/OF2011/{zoom}/{x}/{y}.png", - "scaleExtent": [ - 14, - 19 - ], - "polygon": [ - [ - [ - 7.7, - 47.12 - ], - [ - 7.7, - 47.63 - ], - [ - 8.5, - 47.63 - ], - [ - 8.5, - 47.12 - ], - [ - 7.7, - 47.12 - ] - ] - ], - "terms_text": "AGIS OF2011" - }, - { - "name": "Katastrálna mapa Slovenska (KaPor, 2010-04)", - "type": "tms", - "template": "http://www.freemap.sk/tms/kapor2/{zoom}/{x}/{y}.jpg", - "polygon": [ - [ - [ - 19.83682, - 49.25529 - ], - [ - 19.80075, - 49.42385 - ], - [ - 19.60437, - 49.48058 - ], - [ - 19.49179, - 49.63961 - ], - [ - 19.21831, - 49.52604 - ], - [ - 19.16778, - 49.42521 - ], - [ - 19.00308, - 49.42236 - ], - [ - 18.97611, - 49.5308 - ], - [ - 18.54685, - 49.51425 - ], - [ - 18.31432, - 49.33818 - ], - [ - 18.15913, - 49.2961 - ], - [ - 18.05564, - 49.11134 - ], - [ - 17.56396, - 48.84938 - ], - [ - 17.17929, - 48.88816 - ], - [ - 17.058, - 48.81105 - ], - [ - 16.90426, - 48.61947 - ], - [ - 16.79685, - 48.38561 - ], - [ - 17.06762, - 48.01116 - ], - [ - 17.32787, - 47.97749 - ], - [ - 17.51699, - 47.82535 - ], - [ - 17.74776, - 47.73093 - ], - [ - 18.29515, - 47.72075 - ], - [ - 18.67959, - 47.75541 - ], - [ - 18.89755, - 47.81203 - ], - [ - 18.79463, - 47.88245 - ], - [ - 18.84318, - 48.04046 - ], - [ - 19.46212, - 48.05333 - ], - [ - 19.62064, - 48.22938 - ], - [ - 19.89585, - 48.09387 - ], - [ - 20.33766, - 48.2643 - ], - [ - 20.55395, - 48.52358 - ], - [ - 20.82335, - 48.55714 - ], - [ - 21.10271, - 48.47096 - ], - [ - 21.45863, - 48.55513 - ], - [ - 21.74536, - 48.31435 - ], - [ - 22.15293, - 48.37179 - ], - [ - 22.61255, - 49.08914 - ], - [ - 22.09997, - 49.23814 - ], - [ - 21.9686, - 49.36363 - ], - [ - 21.6244, - 49.46989 - ], - [ - 21.06873, - 49.46402 - ], - [ - 20.94336, - 49.31088 - ], - [ - 20.73052, - 49.44006 - ], - [ - 20.22804, - 49.41714 - ], - [ - 20.05234, - 49.23052 - ], - [ - 19.83682, - 49.25529 - ] - ] - ], - "terms_url": "http://wiki.freemap.sk/KatasterPortal", - "terms_text": "Permisssion by UGKK" - }, - { - "name": "Katastrálna mapa Slovenska (KaPor, 2011-05)", - "type": "tms", - "template": "http://www.freemap.sk/tms/kapor2_201105/{zoom}/{x}/{y}.jpg", - "polygon": [ - [ - [ - 19.83682, - 49.25529 - ], - [ - 19.80075, - 49.42385 - ], - [ - 19.60437, - 49.48058 - ], - [ - 19.49179, - 49.63961 - ], - [ - 19.21831, - 49.52604 - ], - [ - 19.16778, - 49.42521 - ], - [ - 19.00308, - 49.42236 - ], - [ - 18.97611, - 49.5308 - ], - [ - 18.54685, - 49.51425 - ], - [ - 18.31432, - 49.33818 - ], - [ - 18.15913, - 49.2961 - ], - [ - 18.05564, - 49.11134 - ], - [ - 17.56396, - 48.84938 - ], - [ - 17.17929, - 48.88816 - ], - [ - 17.058, - 48.81105 - ], - [ - 16.90426, - 48.61947 - ], - [ - 16.79685, - 48.38561 - ], - [ - 17.06762, - 48.01116 - ], - [ - 17.32787, - 47.97749 - ], - [ - 17.51699, - 47.82535 - ], - [ - 17.74776, - 47.73093 - ], - [ - 18.29515, - 47.72075 - ], - [ - 18.67959, - 47.75541 - ], - [ - 18.89755, - 47.81203 - ], - [ - 18.79463, - 47.88245 - ], - [ - 18.84318, - 48.04046 - ], - [ - 19.46212, - 48.05333 - ], - [ - 19.62064, - 48.22938 - ], - [ - 19.89585, - 48.09387 - ], - [ - 20.33766, - 48.2643 - ], - [ - 20.55395, - 48.52358 - ], - [ - 20.82335, - 48.55714 - ], - [ - 21.10271, - 48.47096 - ], - [ - 21.45863, - 48.55513 - ], - [ - 21.74536, - 48.31435 - ], - [ - 22.15293, - 48.37179 - ], - [ - 22.61255, - 49.08914 - ], - [ - 22.09997, - 49.23814 - ], - [ - 21.9686, - 49.36363 - ], - [ - 21.6244, - 49.46989 - ], - [ - 21.06873, - 49.46402 - ], - [ - 20.94336, - 49.31088 - ], - [ - 20.73052, - 49.44006 - ], - [ - 20.22804, - 49.41714 - ], - [ - 20.05234, - 49.23052 - ], - [ - 19.83682, - 49.25529 - ] - ] - ], - "terms_url": "http://wiki.freemap.sk/KatasterPortal", - "terms_text": "Permisssion by UGKK" - }, - { - "name": "Kelowna 2012", - "type": "tms", - "description": "High quality aerial imagery taken for the City of Kelowna", - "template": "http://{switch:a,b,c,d}.tile.paulnorman.ca/kelowna2012/{zoom}/{x}/{y}.png", - "scaleExtent": [ - 9, - 20 - ], - "polygon": [ - [ - [ - -119.5867318, - 49.7928087 - ], - [ - -119.5465655, - 49.7928097 - ], - [ - -119.5465661, - 49.8013837 - ], - [ - -119.5343374, - 49.8013841 - ], - [ - -119.5343376, - 49.8047321 - ], - [ - -119.5296211, - 49.8047322 - ], - [ - -119.5296216, - 49.8119555 - ], - [ - -119.5104463, - 49.811956 - ], - [ - -119.5115683, - 49.8744325 - ], - [ - -119.5108946, - 49.8744904 - ], - [ - -119.5114111, - 49.8843312 - ], - [ - -119.5114115, - 49.9221763 - ], - [ - -119.49386, - 49.9223477 - ], - [ - -119.4940505, - 49.9313031 - ], - [ - -119.4803936, - 49.9317529 - ], - [ - -119.4804572, - 49.9407474 - ], - [ - -119.4666732, - 49.9409927 - ], - [ - -119.4692775, - 49.9913717 - ], - [ - -119.4551337, - 49.9916078 - ], - [ - -119.4556736, - 50.0121242 - ], - [ - -119.4416673, - 50.0123895 - ], - [ - -119.4417308, - 50.0136345 - ], - [ - -119.4221492, - 50.0140377 - ], - [ - -119.4221042, - 50.0119306 - ], - [ - -119.4121303, - 50.012165 - ], - [ - -119.4126082, - 50.0216913 - ], - [ - -119.4123387, - 50.0216913 - ], - [ - -119.4124772, - 50.0250773 - ], - [ - -119.4120917, - 50.0250821 - ], - [ - -119.4121954, - 50.0270769 - ], - [ - -119.4126083, - 50.0270718 - ], - [ - -119.4128328, - 50.0321946 - ], - [ - -119.3936313, - 50.0326418 - ], - [ - -119.393529, - 50.0307781 - ], - [ - -119.3795727, - 50.0310116 - ], - [ - -119.3795377, - 50.0287584 - ], - [ - -119.3735764, - 50.0288621 - ], - [ - -119.371544, - 49.9793618 - ], - [ - -119.3573506, - 49.9793618 - ], - [ - -119.3548353, - 49.9256081 - ], - [ - -119.3268079, - 49.9257238 - ], - [ - -119.3256573, - 49.8804068 - ], - [ - -119.3138893, - 49.8806528 - ], - [ - -119.3137097, - 49.8771651 - ], - [ - -119.3132156, - 49.877223 - ], - [ - -119.3131482, - 49.8749652 - ], - [ - -119.312452, - 49.8749073 - ], - [ - -119.3122275, - 49.87236 - ], - [ - -119.3117558, - 49.872331 - ], - [ - -119.3115986, - 49.8696098 - ], - [ - -119.3112169, - 49.8694217 - ], - [ - -119.3109199, - 49.8632417 - ], - [ - -119.3103721, - 49.8632724 - ], - [ - -119.3095139, - 49.8512388 - ], - [ - -119.3106368, - 49.8512316 - ], - [ - -119.3103859, - 49.8462564 - ], - [ - -119.3245344, - 49.8459957 - ], - [ - -119.3246018, - 49.8450689 - ], - [ - -119.3367018, - 49.844875 - ], - [ - -119.3367467, - 49.8435136 - ], - [ - -119.337937, - 49.8434702 - ], - [ - -119.3378023, - 49.8382055 - ], - [ - -119.3383637, - 49.8381041 - ], - [ - -119.3383749, - 49.8351202 - ], - [ - -119.3390936, - 49.8351058 - ], - [ - -119.3388016, - 49.8321217 - ], - [ - -119.3391497, - 49.8320565 - ], - [ - -119.3391722, - 49.8293331 - ], - [ - -119.3394641, - 49.8293331 - ], - [ - -119.3395879, - 49.8267878 - ], - [ - -119.3500053, - 49.8265829 - ], - [ - -119.3493701, - 49.8180588 - ], - [ - -119.4046964, - 49.8163785 - ], - [ - -119.4045694, - 49.8099022 - ], - [ - -119.4101592, - 49.8099022 - ], - [ - -119.4102862, - 49.8072787 - ], - [ - -119.4319467, - 49.8069098 - ], - [ - -119.4322643, - 49.7907965 - ], - [ - -119.4459847, - 49.7905504 - ], - [ - -119.445286, - 49.7820201 - ], - [ - -119.4967376, - 49.7811587 - ], - [ - -119.4966105, - 49.7784927 - ], - [ - -119.5418371, - 49.7775082 - ], - [ - -119.5415892, - 49.7718277 - ], - [ - -119.5560296, - 49.7714941 - ], - [ - -119.5561194, - 49.7718422 - ], - [ - -119.5715704, - 49.7715086 - ], - [ - -119.5716153, - 49.7717262 - ], - [ - -119.5819235, - 49.7714941 - ], - [ - -119.5820133, - 49.7717697 - ], - [ - -119.5922991, - 49.7715231 - ], - [ - -119.592344, - 49.7718132 - ], - [ - -119.6003839, - 49.7715957 - ], - [ - -119.6011924, - 49.7839081 - ], - [ - -119.5864365, - 49.7843863 - ] - ] - ], - "id": "kelowna_2012", - "default": true - }, - { - "name": "Kelowna Roads overlay", - "type": "tms", - "template": "http://{switch:a,b,c,d}.tile.paulnorman.ca/kelowna_overlay/{zoom}/{x}/{y}.png", - "scaleExtent": [ - 9, - 20 - ], - "polygon": [ - [ - [ - -119.5867318, - 49.7928087 - ], - [ - -119.5465655, - 49.7928097 - ], - [ - -119.5465661, - 49.8013837 - ], - [ - -119.5343374, - 49.8013841 - ], - [ - -119.5343376, - 49.8047321 - ], - [ - -119.5296211, - 49.8047322 - ], - [ - -119.5296216, - 49.8119555 - ], - [ - -119.5104463, - 49.811956 - ], - [ - -119.5115683, - 49.8744325 - ], - [ - -119.5108946, - 49.8744904 - ], - [ - -119.5114111, - 49.8843312 - ], - [ - -119.5114115, - 49.9221763 - ], - [ - -119.49386, - 49.9223477 - ], - [ - -119.4940505, - 49.9313031 - ], - [ - -119.4803936, - 49.9317529 - ], - [ - -119.4804572, - 49.9407474 - ], - [ - -119.4666732, - 49.9409927 - ], - [ - -119.4692775, - 49.9913717 - ], - [ - -119.4551337, - 49.9916078 - ], - [ - -119.4556736, - 50.0121242 - ], - [ - -119.4416673, - 50.0123895 - ], - [ - -119.4417308, - 50.0136345 - ], - [ - -119.4221492, - 50.0140377 - ], - [ - -119.4221042, - 50.0119306 - ], - [ - -119.4121303, - 50.012165 - ], - [ - -119.4126082, - 50.0216913 - ], - [ - -119.4123387, - 50.0216913 - ], - [ - -119.4124772, - 50.0250773 - ], - [ - -119.4120917, - 50.0250821 - ], - [ - -119.4121954, - 50.0270769 - ], - [ - -119.4126083, - 50.0270718 - ], - [ - -119.4128328, - 50.0321946 - ], - [ - -119.3936313, - 50.0326418 - ], - [ - -119.393529, - 50.0307781 - ], - [ - -119.3795727, - 50.0310116 - ], - [ - -119.3795377, - 50.0287584 - ], - [ - -119.3735764, - 50.0288621 - ], - [ - -119.371544, - 49.9793618 - ], - [ - -119.3573506, - 49.9793618 - ], - [ - -119.3548353, - 49.9256081 - ], - [ - -119.3268079, - 49.9257238 - ], - [ - -119.3256573, - 49.8804068 - ], - [ - -119.3138893, - 49.8806528 - ], - [ - -119.3137097, - 49.8771651 - ], - [ - -119.3132156, - 49.877223 - ], - [ - -119.3131482, - 49.8749652 - ], - [ - -119.312452, - 49.8749073 - ], - [ - -119.3122275, - 49.87236 - ], - [ - -119.3117558, - 49.872331 - ], - [ - -119.3115986, - 49.8696098 - ], - [ - -119.3112169, - 49.8694217 - ], - [ - -119.3109199, - 49.8632417 - ], - [ - -119.3103721, - 49.8632724 - ], - [ - -119.3095139, - 49.8512388 - ], - [ - -119.3106368, - 49.8512316 - ], - [ - -119.3103859, - 49.8462564 - ], - [ - -119.3245344, - 49.8459957 - ], - [ - -119.3246018, - 49.8450689 - ], - [ - -119.3367018, - 49.844875 - ], - [ - -119.3367467, - 49.8435136 - ], - [ - -119.337937, - 49.8434702 - ], - [ - -119.3378023, - 49.8382055 - ], - [ - -119.3383637, - 49.8381041 - ], - [ - -119.3383749, - 49.8351202 - ], - [ - -119.3390936, - 49.8351058 - ], - [ - -119.3388016, - 49.8321217 - ], - [ - -119.3391497, - 49.8320565 - ], - [ - -119.3391722, - 49.8293331 - ], - [ - -119.3394641, - 49.8293331 - ], - [ - -119.3395879, - 49.8267878 - ], - [ - -119.3500053, - 49.8265829 - ], - [ - -119.3493701, - 49.8180588 - ], - [ - -119.4046964, - 49.8163785 - ], - [ - -119.4045694, - 49.8099022 - ], - [ - -119.4101592, - 49.8099022 - ], - [ - -119.4102862, - 49.8072787 - ], - [ - -119.4319467, - 49.8069098 - ], - [ - -119.4322643, - 49.7907965 - ], - [ - -119.4459847, - 49.7905504 - ], - [ - -119.445286, - 49.7820201 - ], - [ - -119.4967376, - 49.7811587 - ], - [ - -119.4966105, - 49.7784927 - ], - [ - -119.5418371, - 49.7775082 - ], - [ - -119.5415892, - 49.7718277 - ], - [ - -119.5560296, - 49.7714941 - ], - [ - -119.5561194, - 49.7718422 - ], - [ - -119.5715704, - 49.7715086 - ], - [ - -119.5716153, - 49.7717262 - ], - [ - -119.5819235, - 49.7714941 - ], - [ - -119.5820133, - 49.7717697 - ], - [ - -119.5922991, - 49.7715231 - ], - [ - -119.592344, - 49.7718132 - ], - [ - -119.6003839, - 49.7715957 - ], - [ - -119.6011924, - 49.7839081 - ], - [ - -119.5864365, - 49.7843863 - ] - ] - ], - "id": "kelowna_roads", - "overlay": true - }, - { - "name": "Landsat 233055", - "type": "tms", - "description": "Recent Landsat imagery", - "template": "http://{switch:a,b,c,d}.tile.paulnorman.ca/landsat_233055/{zoom}/{x}/{y}.png", - "scaleExtent": [ - 5, - 14 - ], - "polygon": [ - [ - [ - -60.8550011, - 6.1765004 - ], - [ - -60.4762612, - 7.9188291 - ], - [ - -62.161689, - 8.2778675 - ], - [ - -62.5322549, - 6.5375488 - ] - ] - ], - "id": "landsat_233055" - }, - { - "name": "Latest southwest British Columbia Landsat", - "type": "tms", - "description": "Recent lower-resolution landwsat imagery for southwest British Columbia", - "template": "http://{switch:a,b,c,d}.tile.paulnorman.ca/landsat_047026/{zoom}/{x}/{y}.png", - "scaleExtent": [ - 5, - 13 - ], - "polygon": [ - [ - [ - -121.9355512, - 47.7820648 - ], - [ - -121.5720582, - 48.6410125 - ], - [ - -121.2015461, - 49.4846247 - ], - [ - -121.8375516, - 49.6023246 - ], - [ - -122.4767046, - 49.7161735 - ], - [ - -123.118912, - 49.8268824 - ], - [ - -123.760228, - 49.9335836 - ], - [ - -124.0887706, - 49.0870469 - ], - [ - -124.4128889, - 48.2252567 - ], - [ - -123.792772, - 48.1197334 - ], - [ - -123.1727942, - 48.0109592 - ], - [ - -122.553553, - 47.8982299 - ] - ] - ], - "id": "landsat_047026" - }, - { - "name": "Lithuania - NŽT ORT10LT", - "type": "tms", - "template": "http://mapproxy.openmap.lt/ort10lt/g/{z}/{x}/{y}.jpeg", - "scaleExtent": [ - 4, - 18 - ], - "polygon": [ - [ - [ - 21.4926054, - 56.3592046 - ], - [ - 21.8134688, - 56.4097144 - ], - [ - 21.9728753, - 56.4567587 - ], - [ - 22.2158294, - 56.4604404 - ], - [ - 22.2183922, - 56.4162361 - ], - [ - 23.3511527, - 56.4267251 - ], - [ - 23.3521778, - 56.3824815 - ], - [ - 23.9179035, - 56.383305 - ], - [ - 23.9176231, - 56.3392908 - ], - [ - 24.5649817, - 56.3382169 - ], - [ - 24.564933, - 56.3828587 - ], - [ - 24.6475683, - 56.4277798 - ], - [ - 24.8099394, - 56.470646 - ], - [ - 24.9733979, - 56.4698452 - ], - [ - 25.1299701, - 56.2890356 - ], - [ - 25.127433, - 56.1990144 - ], - [ - 25.6921076, - 56.1933684 - ], - [ - 26.0839005, - 56.0067879 - ], - [ - 26.4673573, - 55.7304232 - ], - [ - 26.5463565, - 55.7132705 - ], - [ - 26.5154447, - 55.2345969 - ], - [ - 25.7874641, - 54.8425656 - ], - [ - 25.7675259, - 54.6350898 - ], - [ - 25.6165253, - 54.4404007 - ], - [ - 24.4566043, - 53.9577649 - ], - [ - 23.6164786, - 53.9575517 - ], - [ - 23.5632006, - 54.048085 - ], - [ - 22.8462074, - 54.3563682 - ], - [ - 22.831944, - 54.9414849 - ], - [ - 22.4306085, - 55.1159913 - ], - [ - 21.9605898, - 55.1107144 - ], - [ - 21.7253241, - 55.1496885 - ], - [ - 21.5628422, - 55.2362913 - ], - [ - 21.2209638, - 55.2742668 - ], - [ - 21.1630444, - 55.2803979 - ], - [ - 20.9277788, - 55.3101641 - ], - [ - 20.9257285, - 55.3588507 - ], - [ - 20.9980451, - 55.4514157 - ], - [ - 21.0282249, - 56.0796297 - ] - ] - ], - "terms_url": "http://www.geoportal.lt", - "terms_text": "NŽT ORT10LT" - }, - { - "name": "Locator Overlay", - "type": "tms", - "description": "Shows major features to help orient you.", - "template": "http://{switch:a,b,c}.tiles.mapbox.com/v3/openstreetmap.map-btyhiati/{zoom}/{x}/{y}.png", - "scaleExtent": [ - 0, - 16 - ], - "terms_url": "http://www.mapbox.com/about/maps/", - "terms_text": "Terms & Feedback", - "default": true, - "overlay": true - }, - { - "name": "MapBox Satellite", - "type": "tms", - "description": "Satellite and aerial imagery.", - "template": "http://{switch:a,b,c}.tiles.mapbox.com/v3/openstreetmap.map-4wvf9l0l/{zoom}/{x}/{y}.png", - "scaleExtent": [ - 0, - 16 - ], - "terms_url": "http://www.mapbox.com/about/maps/", - "terms_text": "Terms & Feedback", - "default": true - }, - { - "name": "MapQuest Open Aerial", - "type": "tms", - "template": "http://oatile{switch:1,2,3,4}.mqcdn.com/tiles/1.0.0/sat/{zoom}/{x}/{y}.png", - "default": true - }, - { - "name": "NLS - Bartholomew Half Inch, 1897-1907", - "type": "tms", - "template": "http://geo.nls.uk/mapdata2/bartholomew/great_britain/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 0, - 15 - ], - "polygon": [ - [ - [ - -9, - 49.8 - ], - [ - -9, - 61.1 - ], - [ - 1.9, - 61.1 - ], - [ - 1.9, - 49.8 - ], - [ - -9, - 49.8 - ] - ] - ], - "terms_url": "http://geo.nls.uk/maps/", - "terms_text": "National Library of Scotland Historic Maps" - }, - { - "name": "NLS - OS 1-inch 7th Series 1955-61", - "type": "tms", - "template": "http://geo.nls.uk/mapdata2/os/seventh/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 5, - 16 - ], - "polygon": [ - [ - [ - -6.4585407, - 49.9044128 - ], - [ - -6.3872009, - 49.9841116 - ], - [ - -6.2296827, - 49.9896159 - ], - [ - -6.2171269, - 49.8680087 - ], - [ - -6.4551164, - 49.8591793 - ] - ], - [ - [ - -1.4495137, - 60.8634056 - ], - [ - -0.7167114, - 60.8545122 - ], - [ - -0.7349744, - 60.4359756 - ], - [ - -0.6938826, - 60.4168218 - ], - [ - -0.7258429, - 60.3942735 - ], - [ - -0.7395401, - 60.0484714 - ], - [ - -0.9267357, - 60.0461918 - ], - [ - -0.9381501, - 59.8266157 - ], - [ - -1.4586452, - 59.831205 - ], - [ - -1.4455187, - 60.0535999 - ], - [ - -1.463211, - 60.0535999 - ], - [ - -1.4643524, - 60.0630002 - ], - [ - -1.5716475, - 60.0638546 - ], - [ - -1.5693646, - 60.1790005 - ], - [ - -1.643558, - 60.1807033 - ], - [ - -1.643558, - 60.1892162 - ], - [ - -1.8216221, - 60.1894999 - ], - [ - -1.8204807, - 60.3615507 - ], - [ - -1.8415973, - 60.3697345 - ], - [ - -1.8216221, - 60.3832755 - ], - [ - -1.8179852, - 60.5934321 - ], - [ - -1.453168, - 60.5934321 - ] - ], - [ - [ - -4.9089213, - 54.4242078 - ], - [ - -4.282598, - 54.4429861 - ], - [ - -4.2535417, - 54.029769 - ], - [ - -4.8766366, - 54.0221831 - ] - ], - [ - [ - -5.8667408, - 59.1444603 - ], - [ - -5.7759966, - 59.1470945 - ], - [ - -5.7720016, - 59.1014052 - ], - [ - -5.8621751, - 59.0990605 - ] - ], - [ - [ - -1.7065887, - 59.5703599 - ], - [ - -1.5579165, - 59.5693481 - ], - [ - -1.5564897, - 59.4965695 - ], - [ - -1.7054472, - 59.4975834 - ] - ], - [ - [ - -7.6865827, - 58.2940975 - ], - [ - -7.5330594, - 58.3006957 - ], - [ - -7.5256401, - 58.2646905 - ], - [ - -7.6797341, - 58.2577853 - ] - ], - [ - [ - -4.5338281, - 59.0359871 - ], - [ - -4.481322, - 59.0371616 - ], - [ - -4.4796099, - 59.0186583 - ], - [ - -4.5332574, - 59.0180707 - ] - ], - [ - [ - -8.6710698, - 57.8769896 - ], - [ - -8.4673234, - 57.8897332 - ], - [ - -8.4467775, - 57.7907 - ], - [ - -8.6510947, - 57.7779213 - ] - ], - [ - [ - -5.2395519, - 50.3530581 - ], - [ - -5.7920073, - 50.3384899 - ], - [ - -5.760047, - 49.9317027 - ], - [ - -4.6551363, - 49.9581461 - ], - [ - -4.677965, - 50.2860073 - ], - [ - -4.244219, - 50.2801723 - ], - [ - -4.2487848, - 50.2042525 - ], - [ - -3.3812929, - 50.2042525 - ], - [ - -3.4223846, - 50.5188201 - ], - [ - -3.1164796, - 50.5246258 - ], - [ - -3.1210453, - 50.6579592 - ], - [ - -2.6736357, - 50.6619495 - ], - [ - -2.5953453, - 50.6394325 - ], - [ - -2.5905026, - 50.5728419 - ], - [ - -2.4791203, - 50.5733545 - ], - [ - -2.4758919, - 50.5066704 - ], - [ - -2.3967943, - 50.5056438 - ], - [ - -2.401637, - 50.5723293 - ], - [ - -1.0400296, - 50.5718167 - ], - [ - -1.0335726, - 50.7059289 - ], - [ - -0.549302, - 50.7038843 - ], - [ - -0.5460736, - 50.7886618 - ], - [ - -0.0924734, - 50.7856002 - ], - [ - -0.0876307, - 50.7181949 - ], - [ - 0.4789659, - 50.7120623 - ], - [ - 0.487037, - 50.8182467 - ], - [ - 0.9761503, - 50.8049868 - ], - [ - 0.9922927, - 51.0126311 - ], - [ - 1.4491213, - 51.0004424 - ], - [ - 1.4781775, - 51.4090372 - ], - [ - 1.0229632, - 51.4271576 - ], - [ - 1.035877, - 51.7640881 - ], - [ - 1.6105448, - 51.7500992 - ], - [ - 1.646058, - 52.1560003 - ], - [ - 1.7267698, - 52.1540195 - ], - [ - 1.749369, - 52.4481811 - ], - [ - 1.7870672, - 52.4811624 - ], - [ - 1.759102, - 52.522505 - ], - [ - 1.7933451, - 52.9602749 - ], - [ - 0.3798147, - 52.9958468 - ], - [ - 0.3895238, - 53.2511239 - ], - [ - 0.3478614, - 53.2511239 - ], - [ - 0.3238912, - 53.282186 - ], - [ - 0.3461492, - 53.6538501 - ], - [ - 0.128487, - 53.6575466 - ], - [ - 0.116582, - 53.6674703 - ], - [ - 0.1350586, - 54.0655731 - ], - [ - -0.0609831, - 54.065908 - ], - [ - -0.0414249, - 54.4709448 - ], - [ - -0.5662701, - 54.4771794 - ], - [ - -0.5592078, - 54.6565127 - ], - [ - -1.1665638, - 54.6623485 - ], - [ - -1.1637389, - 54.842611 - ], - [ - -1.3316194, - 54.843909 - ], - [ - -1.3257065, - 55.2470842 - ], - [ - -1.529453, - 55.2487108 - ], - [ - -1.524178, - 55.6540122 - ], - [ - -1.7638798, - 55.6540122 - ], - [ - -1.7733693, - 55.9719116 - ], - [ - -2.1607858, - 55.9682981 - ], - [ - -2.1543289, - 56.0621387 - ], - [ - -2.4578051, - 56.0585337 - ], - [ - -2.4190635, - 56.641717 - ], - [ - -2.0962164, - 56.641717 - ], - [ - -2.0833025, - 57.0021322 - ], - [ - -1.9283359, - 57.0126802 - ], - [ - -1.9180966, - 57.3590895 - ], - [ - -1.7502161, - 57.3625721 - ], - [ - -1.7695869, - 57.7608634 - ], - [ - -3.6937554, - 57.7574187 - ], - [ - -3.7066693, - 57.9806386 - ], - [ - -3.5969013, - 57.9772149 - ], - [ - -3.6033582, - 58.1207277 - ], - [ - -3.0222335, - 58.1309566 - ], - [ - -3.0286905, - 58.5410788 - ], - [ - -2.8478961, - 58.530968 - ], - [ - -2.86081, - 58.8430508 - ], - [ - -2.679624, - 58.8414991 - ], - [ - -2.6841897, - 58.885175 - ], - [ - -2.6339665, - 58.9052239 - ], - [ - -2.679624, - 58.9335083 - ], - [ - -2.6887555, - 59.0229231 - ], - [ - -2.3668703, - 59.0229231 - ], - [ - -2.3702946, - 59.2652861 - ], - [ - -2.3429001, - 59.2821989 - ], - [ - -2.3714361, - 59.2996861 - ], - [ - -2.3737189, - 59.3707083 - ], - [ - -2.3429001, - 59.385825 - ], - [ - -2.3725775, - 59.400354 - ], - [ - -2.3714361, - 59.4259098 - ], - [ - -3.0734196, - 59.4230067 - ], - [ - -3.0711368, - 59.3433649 - ], - [ - -3.103097, - 59.3311405 - ], - [ - -3.0745611, - 59.3136695 - ], - [ - -3.0722782, - 59.232603 - ], - [ - -3.3850319, - 59.1484167 - ], - [ - -3.3747589, - 58.9352753 - ], - [ - -3.5653789, - 58.9323303 - ], - [ - -3.554829, - 58.69759 - ], - [ - -5.2808579, - 58.6667732 - ], - [ - -5.2534159, - 58.3514125 - ], - [ - -5.5068508, - 58.3437887 - ], - [ - -5.4761804, - 58.0323557 - ], - [ - -5.8974958, - 58.0212436 - ], - [ - -5.8522972, - 57.6171758 - ], - [ - -6.1396311, - 57.6137174 - ], - [ - -6.1541592, - 57.7423183 - ], - [ - -6.2913692, - 57.7380102 - ], - [ - -6.3365678, - 58.1398784 - ], - [ - -6.1121891, - 58.1466944 - ], - [ - -6.1473778, - 58.5106285 - ], - [ - -6.2934817, - 58.5416182 - ], - [ - -6.8413713, - 58.2977321 - ], - [ - -7.0057382, - 58.2929331 - ], - [ - -7.1016189, - 58.2064403 - ], - [ - -7.2573132, - 58.1793148 - ], - [ - -7.2531092, - 58.1004928 - ], - [ - -7.4070698, - 58.0905566 - ], - [ - -7.391347, - 57.7911354 - ], - [ - -7.790991, - 57.7733151 - ], - [ - -7.7624215, - 57.5444165 - ], - [ - -7.698501, - 57.1453194 - ], - [ - -7.7943817, - 57.1304547 - ], - [ - -7.716764, - 56.7368628 - ], - [ - -7.0122067, - 56.7654359 - ], - [ - -6.979922, - 56.5453858 - ], - [ - -7.0638622, - 56.5453858 - ], - [ - -7.0444914, - 56.3562587 - ], - [ - -6.500676, - 56.3812917 - ], - [ - -6.4491433, - 55.9793649 - ], - [ - -6.563287, - 55.9691456 - ], - [ - -6.5393742, - 55.7030135 - ], - [ - -6.5595521, - 55.6907321 - ], - [ - -6.5345315, - 55.6761713 - ], - [ - -6.5216176, - 55.5704434 - ], - [ - -5.8912587, - 55.5923416 - ], - [ - -5.8560127, - 55.2320733 - ], - [ - -5.2293639, - 55.2515958 - ], - [ - -5.1837064, - 54.6254139 - ], - [ - -3.6655956, - 54.6518373 - ], - [ - -3.6496155, - 54.4320023 - ], - [ - -3.5400375, - 54.4306744 - ], - [ - -3.530906, - 54.0290181 - ], - [ - -3.0697656, - 54.030359 - ], - [ - -3.0675737, - 53.8221388 - ], - [ - -3.0804876, - 53.7739911 - ], - [ - -3.0619239, - 53.7477488 - ], - [ - -3.0611168, - 53.6737049 - ], - [ - -3.2144691, - 53.6708361 - ], - [ - -3.2057699, - 53.4226163 - ], - [ - -3.2799632, - 53.355224 - ], - [ - -3.2896655, - 53.3608441 - ], - [ - -3.3327547, - 53.364931 - ], - [ - -3.3761293, - 53.3540318 - ], - [ - -4.0888976, - 53.3433102 - ], - [ - -4.0945474, - 53.4612036 - ], - [ - -4.697412, - 53.4448624 - ], - [ - -4.6882805, - 53.3318598 - ], - [ - -4.7202407, - 53.2895771 - ], - [ - -4.6837148, - 53.2486184 - ], - [ - -4.6768661, - 53.1542644 - ], - [ - -4.8480816, - 53.1446807 - ], - [ - -4.8178336, - 52.7440299 - ], - [ - -4.2545751, - 52.7558939 - ], - [ - -4.228876, - 52.254876 - ], - [ - -4.2607571, - 52.2536408 - ], - [ - -4.2724603, - 52.2432637 - ], - [ - -4.8136263, - 52.230095 - ], - [ - -4.8079191, - 52.1138892 - ], - [ - -5.3889104, - 52.0991668 - ], - [ - -5.3717888, - 51.9129667 - ], - [ - -5.4208706, - 51.9101502 - ], - [ - -5.414022, - 51.8453218 - ], - [ - -5.3683645, - 51.8474373 - ], - [ - -5.3466772, - 51.5595332 - ], - [ - -4.773676, - 51.5758518 - ], - [ - -4.7656859, - 51.4885146 - ], - [ - -4.1915432, - 51.4970427 - ], - [ - -4.1869775, - 51.4344663 - ], - [ - -3.6151177, - 51.4444274 - ], - [ - -3.6105519, - 51.3746543 - ], - [ - -3.1494115, - 51.3789292 - ], - [ - -3.1494115, - 51.2919281 - ], - [ - -4.3038735, - 51.2745907 - ], - [ - -4.2861169, - 51.0508721 - ], - [ - -4.8543277, - 51.0366633 - ], - [ - -4.8372201, - 50.7212787 - ], - [ - -5.2618345, - 50.7082694 - ] - ], - [ - [ - -2.1502671, - 60.171318 - ], - [ - -2.0030218, - 60.1696146 - ], - [ - -2.0013096, - 60.0997023 - ], - [ - -2.148555, - 60.1011247 - ] - ], - [ - [ - -6.2086011, - 59.1163488 - ], - [ - -6.1229934, - 59.1166418 - ], - [ - -6.121852, - 59.0714985 - ], - [ - -6.2097426, - 59.0714985 - ] - ], - [ - [ - -4.4159559, - 59.0889036 - ], - [ - -4.4212022, - 59.0770848 - ], - [ - -4.3971904, - 59.0779143 - ], - [ - -4.3913388, - 59.0897328 - ] - ] - ], - "terms_url": "http://geo.nls.uk/maps/", - "terms_text": "National Library of Scotland Historic Maps" - }, - { - "name": "NLS - OS 1:25k 1st Series 1937-61", - "type": "tms", - "template": "http://geo.nls.uk/mapdata2/os/25000/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 5, - 16 - ], - "polygon": [ - [ - [ - -4.7157244, - 54.6796556 - ], - [ - -4.6850662, - 54.6800268 - ], - [ - -4.6835779, - 54.6623245 - ], - [ - -4.7148782, - 54.6615818 - ] - ], - [ - [ - -3.7085748, - 58.3371151 - ], - [ - -3.5405937, - 58.3380684 - ], - [ - -3.5315137, - 58.1608002 - ], - [ - -3.3608086, - 58.1622372 - ], - [ - -3.3653486, - 58.252173 - ], - [ - -3.1610473, - 58.2536063 - ], - [ - -3.1610473, - 58.3261509 - ], - [ - -3.0275704, - 58.3271045 - ], - [ - -3.0366505, - 58.6139001 - ], - [ - -3.0021463, - 58.614373 - ], - [ - -3.0030543, - 58.7036341 - ], - [ - -3.4180129, - 58.7003322 - ], - [ - -3.4171049, - 58.6290293 - ], - [ - -3.7240109, - 58.6266658 - ], - [ - -3.7231029, - 58.606806 - ], - [ - -4.2361262, - 58.5992374 - ], - [ - -4.2334022, - 58.5092347 - ], - [ - -3.88836, - 58.5144516 - ], - [ - -3.8829119, - 58.4261327 - ], - [ - -3.7158389, - 58.4270836 - ] - ], - [ - [ - -6.46676, - 49.9943621 - ], - [ - -6.1889102, - 50.004868 - ], - [ - -6.1789222, - 49.8967815 - ], - [ - -6.3169391, - 49.8915171 - ], - [ - -6.312399, - 49.8200979 - ], - [ - -6.4504159, - 49.8159968 - ] - ], - [ - [ - -5.6453263, - 50.2029809 - ], - [ - -5.7801329, - 50.2014076 - ], - [ - -5.7637888, - 50.0197267 - ], - [ - -5.3479221, - 50.0290604 - ], - [ - -5.3388421, - 49.9414854 - ], - [ - -5.024672, - 49.9473287 - ], - [ - -5.0355681, - 50.0383923 - ], - [ - -5.0010639, - 50.0453901 - ], - [ - -4.9974319, - 50.1304478 - ], - [ - -4.855783, - 50.13394 - ], - [ - -4.861231, - 50.206057 - ], - [ - -4.6546085, - 50.2140172 - ], - [ - -4.6558926, - 50.3018616 - ], - [ - -4.5184924, - 50.3026818 - ], - [ - -4.51464, - 50.325642 - ], - [ - -4.2488284, - 50.3264618 - ], - [ - -4.2488284, - 50.3100631 - ], - [ - -4.10886, - 50.3141633 - ], - [ - -4.1062917, - 50.2411267 - ], - [ - -3.9648088, - 50.2432047 - ], - [ - -3.9640778, - 50.2254158 - ], - [ - -3.8522287, - 50.2273626 - ], - [ - -3.8503757, - 50.1552563 - ], - [ - -3.6921809, - 50.1572487 - ], - [ - -3.5414602, - 50.1602198 - ], - [ - -3.5465781, - 50.3226814 - ], - [ - -3.4068012, - 50.3241013 - ], - [ - -3.4165761, - 50.5892711 - ], - [ - -3.2746691, - 50.5962721 - ], - [ - -3.2749172, - 50.6106323 - ], - [ - -2.9971742, - 50.613972 - ], - [ - -2.9896008, - 50.688537 - ], - [ - -2.7120266, - 50.690565 - ], - [ - -2.710908, - 50.6195964 - ], - [ - -2.5695473, - 50.6157538 - ], - [ - -2.5651019, - 50.5134083 - ], - [ - -2.4014463, - 50.513379 - ], - [ - -2.3940583, - 50.6160348 - ], - [ - -2.2894123, - 50.6147436 - ], - [ - -2.2876184, - 50.6008549 - ], - [ - -2.1477855, - 50.6048506 - ], - [ - -2.1451013, - 50.5325437 - ], - [ - -1.9335117, - 50.5347477 - ], - [ - -1.9362139, - 50.6170445 - ], - [ - -1.8573025, - 50.6228094 - ], - [ - -1.8554865, - 50.709139 - ], - [ - -1.6066929, - 50.709139 - ], - [ - -1.6085089, - 50.6239615 - ], - [ - -1.4450678, - 50.6228094 - ], - [ - -1.4432518, - 50.5317039 - ], - [ - -1.1545059, - 50.5293951 - ], - [ - -1.1472419, - 50.6170485 - ], - [ - -1.011041, - 50.6205051 - ], - [ - -1.011041, - 50.7056889 - ], - [ - -0.704135, - 50.7045388 - ], - [ - -0.700503, - 50.7769401 - ], - [ - -0.5860943, - 50.7723465 - ], - [ - -0.5879103, - 50.7907181 - ], - [ - -0.0149586, - 50.7798108 - ], - [ - -0.0185906, - 50.7625836 - ], - [ - 0.0967261, - 50.7620093 - ], - [ - 0.0921861, - 50.6913106 - ], - [ - 0.3046595, - 50.6890096 - ], - [ - 0.3101075, - 50.7757917 - ], - [ - 0.5511831, - 50.7726336 - ], - [ - 0.5529991, - 50.8432096 - ], - [ - 0.695556, - 50.8403428 - ], - [ - 0.696464, - 50.8592608 - ], - [ - 0.9852099, - 50.8523824 - ], - [ - 0.9906579, - 50.9417226 - ], - [ - 1.0160821, - 50.9411504 - ], - [ - 1.0215301, - 51.0303204 - ], - [ - 1.2812198, - 51.0240383 - ], - [ - 1.2848518, - 51.0948044 - ], - [ - 1.4277848, - 51.0948044 - ], - [ - 1.4386809, - 51.2882859 - ], - [ - 1.4713691, - 51.2871502 - ], - [ - 1.4804492, - 51.3994534 - ], - [ - 1.1590151, - 51.4073836 - ], - [ - 1.1590151, - 51.3869889 - ], - [ - 1.0191822, - 51.3903886 - ], - [ - 1.0228142, - 51.4798247 - ], - [ - 0.8793493, - 51.4843484 - ], - [ - 0.8829813, - 51.5566675 - ], - [ - 1.0264462, - 51.5544092 - ], - [ - 1.0373423, - 51.7493319 - ], - [ - 1.2607117, - 51.7482076 - ], - [ - 1.2661598, - 51.8279642 - ], - [ - 1.3351682, - 51.8335756 - ], - [ - 1.3478803, - 51.9199021 - ], - [ - 1.4840812, - 51.9199021 - ], - [ - 1.4986093, - 52.0038271 - ], - [ - 1.6438902, - 52.0027092 - ], - [ - 1.6656823, - 52.270221 - ], - [ - 1.7310588, - 52.270221 - ], - [ - 1.7528509, - 52.4465637 - ], - [ - 1.8254914, - 52.4476705 - ], - [ - 1.8345714, - 52.624408 - ], - [ - 1.7690346, - 52.6291402 - ], - [ - 1.7741711, - 52.717904 - ], - [ - 1.6996925, - 52.721793 - ], - [ - 1.706113, - 52.8103687 - ], - [ - 1.559724, - 52.8165777 - ], - [ - 1.5648605, - 52.9034116 - ], - [ - 1.4184715, - 52.9103818 - ], - [ - 1.4223238, - 52.9281894 - ], - [ - 1.3439928, - 52.9289635 - ], - [ - 1.3491293, - 53.0001194 - ], - [ - 0.4515789, - 53.022589 - ], - [ - 0.4497629, - 52.9351139 - ], - [ - 0.3789384, - 52.9351139 - ], - [ - 0.3716744, - 52.846365 - ], - [ - 0.2227614, - 52.8496552 - ], - [ - 0.2336575, - 52.9329248 - ], - [ - 0.3062979, - 52.9351139 - ], - [ - 0.308114, - 53.022589 - ], - [ - 0.3807544, - 53.0236813 - ], - [ - 0.3993708, - 53.2933729 - ], - [ - 0.3248922, - 53.2987454 - ], - [ - 0.3274604, - 53.3853782 - ], - [ - 0.2504136, - 53.38691 - ], - [ - 0.2581183, - 53.4748924 - ], - [ - 0.1862079, - 53.4779494 - ], - [ - 0.1913443, - 53.6548777 - ], - [ - 0.1502527, - 53.6594436 - ], - [ - 0.1528209, - 53.7666003 - ], - [ - 0.0012954, - 53.7734308 - ], - [ - 0.0025796, - 53.8424326 - ], - [ - -0.0282392, - 53.841675 - ], - [ - -0.0226575, - 53.9311501 - ], - [ - -0.1406983, - 53.9322193 - ], - [ - -0.1416063, - 54.0219323 - ], - [ - -0.1706625, - 54.0235326 - ], - [ - -0.1679384, - 54.0949482 - ], - [ - -0.0126694, - 54.0912206 - ], - [ - -0.0099454, - 54.1811226 - ], - [ - -0.1615824, - 54.1837795 - ], - [ - -0.1606744, - 54.2029038 - ], - [ - -0.2405789, - 54.2034349 - ], - [ - -0.2378549, - 54.2936234 - ], - [ - -0.3894919, - 54.2941533 - ], - [ - -0.3857497, - 54.3837321 - ], - [ - -0.461638, - 54.3856364 - ], - [ - -0.4571122, - 54.4939066 - ], - [ - -0.6105651, - 54.4965434 - ], - [ - -0.6096571, - 54.5676704 - ], - [ - -0.7667421, - 54.569776 - ], - [ - -0.7640181, - 54.5887213 - ], - [ - -0.9192871, - 54.5908258 - ], - [ - -0.9148116, - 54.6608348 - ], - [ - -1.1485204, - 54.6634343 - ], - [ - -1.1472363, - 54.7528316 - ], - [ - -1.2268514, - 54.7532021 - ], - [ - -1.2265398, - 54.8429879 - ], - [ - -1.2991803, - 54.8435107 - ], - [ - -1.2991803, - 54.9333391 - ], - [ - -1.3454886, - 54.9354258 - ], - [ - -1.3436726, - 55.0234878 - ], - [ - -1.3772688, - 55.0255698 - ], - [ - -1.3754528, - 55.1310877 - ], - [ - -1.4997441, - 55.1315727 - ], - [ - -1.4969272, - 55.2928323 - ], - [ - -1.5296721, - 55.2942946 - ], - [ - -1.5258198, - 55.6523803 - ], - [ - -1.7659492, - 55.6545537 - ], - [ - -1.7620968, - 55.7435626 - ], - [ - -1.9688392, - 55.7435626 - ], - [ - -1.9698023, - 55.8334505 - ], - [ - -2.0019051, - 55.8336308 - ], - [ - -2.0015841, - 55.9235526 - ], - [ - -2.1604851, - 55.9240613 - ], - [ - -2.1613931, - 55.9413549 - ], - [ - -2.3202942, - 55.9408463 - ], - [ - -2.3212022, - 56.0145126 - ], - [ - -2.5627317, - 56.0124824 - ], - [ - -2.5645477, - 56.1022207 - ], - [ - -2.9658863, - 56.0991822 - ], - [ - -2.9667943, - 56.1710304 - ], - [ - -2.4828272, - 56.1755797 - ], - [ - -2.4882752, - 56.2856078 - ], - [ - -2.5645477, - 56.2835918 - ], - [ - -2.5681798, - 56.3742075 - ], - [ - -2.7261728, - 56.3732019 - ], - [ - -2.7316208, - 56.4425301 - ], - [ - -2.6190281, - 56.4425301 - ], - [ - -2.6153961, - 56.5317671 - ], - [ - -2.453771, - 56.5347715 - ], - [ - -2.4534686, - 56.6420248 - ], - [ - -2.4062523, - 56.6440218 - ], - [ - -2.3953562, - 56.7297964 - ], - [ - -2.2936596, - 56.7337811 - ], - [ - -2.2972916, - 56.807423 - ], - [ - -2.1629067, - 56.8113995 - ], - [ - -2.1592747, - 56.9958425 - ], - [ - -1.9922016, - 57.0017771 - ], - [ - -2.0067297, - 57.2737477 - ], - [ - -1.9195612, - 57.2757112 - ], - [ - -1.9304572, - 57.3482876 - ], - [ - -1.8106005, - 57.3443682 - ], - [ - -1.7997044, - 57.4402728 - ], - [ - -1.6616875, - 57.4285429 - ], - [ - -1.6689516, - 57.5398256 - ], - [ - -1.7452241, - 57.5398256 - ], - [ - -1.7524881, - 57.6313302 - ], - [ - -1.8287606, - 57.6332746 - ], - [ - -1.8287606, - 57.7187255 - ], - [ - -3.1768526, - 57.7171219 - ], - [ - -3.1794208, - 57.734264 - ], - [ - -3.5134082, - 57.7292105 - ], - [ - -3.5129542, - 57.7112683 - ], - [ - -3.7635638, - 57.7076303 - ], - [ - -3.7598539, - 57.635713 - ], - [ - -3.8420372, - 57.6343382 - ], - [ - -3.8458895, - 57.6178365 - ], - [ - -3.9794374, - 57.6157733 - ], - [ - -3.9794374, - 57.686544 - ], - [ - -3.8150708, - 57.689976 - ], - [ - -3.817639, - 57.7968899 - ], - [ - -3.6853753, - 57.7989429 - ], - [ - -3.6892276, - 57.8891567 - ], - [ - -3.9383458, - 57.8877915 - ], - [ - -3.9421981, - 57.9750592 - ], - [ - -3.6943641, - 57.9784638 - ], - [ - -3.6969323, - 58.0695865 - ], - [ - -4.0372226, - 58.0641528 - ], - [ - -4.0346543, - 57.9730163 - ], - [ - -4.2003051, - 57.9702923 - ], - [ - -4.1832772, - 57.7012869 - ], - [ - -4.518752, - 57.6951111 - ], - [ - -4.5122925, - 57.6050682 - ], - [ - -4.6789116, - 57.6016628 - ], - [ - -4.666022, - 57.4218334 - ], - [ - -3.6677696, - 57.4394729 - ], - [ - -3.671282, - 57.5295384 - ], - [ - -3.3384979, - 57.5331943 - ], - [ - -3.3330498, - 57.4438859 - ], - [ - -2.8336466, - 57.4485275 - ], - [ - -2.8236396, - 56.9992706 - ], - [ - -2.3305398, - 57.0006693 - ], - [ - -2.3298977, - 56.9113932 - ], - [ - -2.6579889, - 56.9092901 - ], - [ - -2.6559637, - 56.8198406 - ], - [ - -2.8216747, - 56.8188467 - ], - [ - -2.8184967, - 56.7295397 - ], - [ - -3.1449248, - 56.7265508 - ], - [ - -3.1435628, - 56.6362749 - ], - [ - -3.4679089, - 56.6350265 - ], - [ - -3.474265, - 56.7238108 - ], - [ - -3.8011471, - 56.7188284 - ], - [ - -3.785711, - 56.4493026 - ], - [ - -3.946428, - 56.4457896 - ], - [ - -3.9428873, - 56.2659777 - ], - [ - -4.423146, - 56.2588459 - ], - [ - -4.4141572, - 56.0815506 - ], - [ - -4.8944159, - 56.0708008 - ], - [ - -4.8791072, - 55.8896994 - ], - [ - -5.1994158, - 55.8821374 - ], - [ - -5.1852906, - 55.7023791 - ], - [ - -5.0273445, - 55.7067203 - ], - [ - -5.0222081, - 55.6879046 - ], - [ - -4.897649, - 55.6907999 - ], - [ - -4.8880181, - 55.6002822 - ], - [ - -4.7339244, - 55.6046348 - ], - [ - -4.7275038, - 55.5342082 - ], - [ - -4.773732, - 55.5334815 - ], - [ - -4.7685955, - 55.4447227 - ], - [ - -4.8494947, - 55.4418092 - ], - [ - -4.8405059, - 55.3506535 - ], - [ - -4.8700405, - 55.3513836 - ], - [ - -4.8649041, - 55.2629462 - ], - [ - -4.9920314, - 55.2592875 - ], - [ - -4.9907473, - 55.1691779 - ], - [ - -5.0600894, - 55.1655105 - ], - [ - -5.0575212, - 55.0751884 - ], - [ - -5.2141831, - 55.0722477 - ], - [ - -5.1991766, - 54.8020337 - ], - [ - -5.0466316, - 54.8062205 - ], - [ - -5.0502636, - 54.7244996 - ], - [ - -4.9703591, - 54.7203043 - ], - [ - -4.9776232, - 54.6215905 - ], - [ - -4.796022, - 54.6342056 - ], - [ - -4.796022, - 54.7307917 - ], - [ - -4.8977186, - 54.7265971 - ], - [ - -4.9086147, - 54.8145928 - ], - [ - -4.8069181, - 54.8166856 - ], - [ - -4.8105501, - 54.7915648 - ], - [ - -4.6943253, - 54.7978465 - ], - [ - -4.6761652, - 54.7244996 - ], - [ - -4.5744686, - 54.7244996 - ], - [ - -4.5599405, - 54.6426135 - ], - [ - -4.3093309, - 54.6384098 - ], - [ - -4.3333262, - 54.8229889 - ], - [ - -4.2626999, - 54.8274274 - ], - [ - -4.2549952, - 54.7348587 - ], - [ - -3.8338058, - 54.7400481 - ], - [ - -3.836374, - 54.8141105 - ], - [ - -3.7118149, - 54.8133706 - ], - [ - -3.7143831, - 54.8318654 - ], - [ - -3.5346072, - 54.8355633 - ], - [ - -3.5271039, - 54.9066228 - ], - [ - -3.4808758, - 54.9084684 - ], - [ - -3.4776655, - 54.7457328 - ], - [ - -3.5874573, - 54.744621 - ], - [ - -3.5836049, - 54.6546166 - ], - [ - -3.7107322, - 54.6531308 - ], - [ - -3.6991752, - 54.4550407 - ], - [ - -3.5746161, - 54.4572801 - ], - [ - -3.5759002, - 54.3863042 - ], - [ - -3.539945, - 54.3855564 - ], - [ - -3.5386609, - 54.297224 - ], - [ - -3.46033, - 54.2957252 - ], - [ - -3.4590458, - 54.2079507 - ], - [ - -3.3807149, - 54.2102037 - ], - [ - -3.381999, - 54.1169788 - ], - [ - -3.302878, - 54.1160656 - ], - [ - -3.300154, - 54.0276224 - ], - [ - -3.1013007, - 54.0292224 - ], - [ - -3.093596, - 53.6062158 - ], - [ - -3.2065981, - 53.6016441 - ], - [ - -3.2091663, - 53.4917753 - ], - [ - -3.2451215, - 53.4887193 - ], - [ - -3.2348486, - 53.4045934 - ], - [ - -3.5276266, - 53.3999999 - ], - [ - -3.5343966, - 53.328481 - ], - [ - -3.6488053, - 53.3252272 - ], - [ - -3.6527308, - 53.3057716 - ], - [ - -3.7271873, - 53.3046865 - ], - [ - -3.7315003, - 53.3945257 - ], - [ - -3.9108315, - 53.3912769 - ], - [ - -3.9071995, - 53.3023804 - ], - [ - -3.9521457, - 53.3015665 - ], - [ - -3.9566724, - 53.3912183 - ], - [ - -4.1081979, - 53.3889209 - ], - [ - -4.1081979, - 53.4072967 - ], - [ - -4.2622916, - 53.4065312 - ], - [ - -4.2635757, - 53.4753707 - ], - [ - -4.638537, - 53.4677274 - ], - [ - -4.6346847, - 53.3812621 - ], - [ - -4.7091633, - 53.3774321 - ], - [ - -4.7001745, - 53.1954965 - ], - [ - -4.5499332, - 53.1962658 - ], - [ - -4.5435126, - 53.1092488 - ], - [ - -4.3919871, - 53.1100196 - ], - [ - -4.3855666, - 53.0236002 - ], - [ - -4.6115707, - 53.0205105 - ], - [ - -4.603866, - 52.9284932 - ], - [ - -4.7566756, - 52.9261709 - ], - [ - -4.7476868, - 52.8370555 - ], - [ - -4.8208813, - 52.8331768 - ], - [ - -4.8208813, - 52.7446476 - ], - [ - -4.3701572, - 52.7539749 - ], - [ - -4.3765778, - 52.8401583 - ], - [ - -4.2314728, - 52.8455875 - ], - [ - -4.2237682, - 52.7586379 - ], - [ - -4.1056297, - 52.7570836 - ], - [ - -4.1015192, - 52.6714874 - ], - [ - -4.1487355, - 52.6703862 - ], - [ - -4.1305754, - 52.4008596 - ], - [ - -4.1995838, - 52.3986435 - ], - [ - -4.2050319, - 52.3110195 - ], - [ - -4.3466808, - 52.303247 - ], - [ - -4.3484968, - 52.2365693 - ], - [ - -4.4901457, - 52.2332328 - ], - [ - -4.4883297, - 52.2098702 - ], - [ - -4.6572188, - 52.2098702 - ], - [ - -4.6590348, - 52.1385939 - ], - [ - -4.7788916, - 52.13525 - ], - [ - -4.7807076, - 52.1162967 - ], - [ - -4.9259885, - 52.1140663 - ], - [ - -4.9187245, - 52.0392855 - ], - [ - -5.2365265, - 52.0314653 - ], - [ - -5.2347105, - 51.9442339 - ], - [ - -5.3473032, - 51.9408755 - ], - [ - -5.3473032, - 51.9195995 - ], - [ - -5.4925842, - 51.9162392 - ], - [ - -5.4853201, - 51.8265386 - ], - [ - -5.1983903, - 51.8321501 - ], - [ - -5.1893102, - 51.7625177 - ], - [ - -5.335825, - 51.7589528 - ], - [ - -5.3281204, - 51.6686495 - ], - [ - -5.1836575, - 51.6730296 - ], - [ - -5.1836575, - 51.6539134 - ], - [ - -5.0674452, - 51.6578966 - ], - [ - -5.0603825, - 51.5677905 - ], - [ - -4.5974594, - 51.5809588 - ], - [ - -4.60388, - 51.6726314 - ], - [ - -4.345773, - 51.6726314 - ], - [ - -4.3355001, - 51.4962964 - ], - [ - -3.9528341, - 51.5106841 - ], - [ - -3.9425611, - 51.5905333 - ], - [ - -3.8809237, - 51.5953198 - ], - [ - -3.8706508, - 51.5074872 - ], - [ - -3.7679216, - 51.4978952 - ], - [ - -3.7550805, - 51.4242895 - ], - [ - -3.5855774, - 51.41468 - ], - [ - -3.5778727, - 51.3329177 - ], - [ - -3.0796364, - 51.3329177 - ], - [ - -3.0770682, - 51.2494018 - ], - [ - -3.7216935, - 51.2381477 - ], - [ - -3.7216935, - 51.2558315 - ], - [ - -3.8706508, - 51.2558315 - ], - [ - -3.8680825, - 51.2365398 - ], - [ - -4.2944084, - 51.2252825 - ], - [ - -4.289272, - 51.0496352 - ], - [ - -4.5692089, - 51.0431767 - ], - [ - -4.5624122, - 50.9497388 - ], - [ - -4.5905604, - 50.9520269 - ], - [ - -4.5896524, - 50.8627065 - ], - [ - -4.6296046, - 50.8592677 - ], - [ - -4.6226411, - 50.7691513 - ], - [ - -4.6952816, - 50.7680028 - ], - [ - -4.6934655, - 50.6967379 - ], - [ - -4.8342064, - 50.6938621 - ], - [ - -4.8296664, - 50.6046231 - ], - [ - -4.9676833, - 50.6000126 - ], - [ - -4.9685913, - 50.5821427 - ], - [ - -5.1084242, - 50.5786832 - ], - [ - -5.1029762, - 50.4892254 - ], - [ - -5.1311244, - 50.48807 - ], - [ - -5.1274923, - 50.4163798 - ], - [ - -5.2664172, - 50.4117509 - ], - [ - -5.2609692, - 50.3034214 - ], - [ - -5.5124868, - 50.2976214 - ], - [ - -5.5061308, - 50.2256428 - ], - [ - -5.6468717, - 50.2209953 - ] - ], - [ - [ - -5.1336607, - 55.2630226 - ], - [ - -5.1021999, - 55.2639372 - ], - [ - -5.0999527, - 55.2458239 - ], - [ - -5.1322161, - 55.2446343 - ] - ], - [ - [ - -5.6431878, - 55.5095745 - ], - [ - -5.4861028, - 55.5126594 - ], - [ - -5.4715747, - 55.3348829 - ], - [ - -5.6277517, - 55.3302345 - ] - ], - [ - [ - -4.7213517, - 51.2180246 - ], - [ - -4.5804201, - 51.2212417 - ], - [ - -4.5746416, - 51.1306736 - ], - [ - -4.7174993, - 51.1280545 - ] - ], - [ - [ - -5.1608796, - 55.4153626 - ], - [ - -5.0045387, - 55.4190069 - ], - [ - -5.0184798, - 55.6153521 - ], - [ - -5.1755648, - 55.6138137 - ] - ] - ], - "terms_url": "http://geo.nls.uk/maps/", - "terms_text": "National Library of Scotland Historic Maps" - }, - { - "name": "NLS - OS 6-inch Scotland 1842-82", - "type": "tms", - "template": "http://geo.nls.uk/maps/os/six_inch/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 5, - 16 - ], - "polygon": [ - [ - [ - -5.2112173, - 54.8018593 - ], - [ - -5.0642752, - 54.8026508 - ], - [ - -5.0560354, - 54.6305176 - ], - [ - -4.3158316, - 54.6297227 - ], - [ - -4.3117117, - 54.7448258 - ], - [ - -3.8530325, - 54.7464112 - ], - [ - -3.8530325, - 54.8034424 - ], - [ - -3.5522818, - 54.8034424 - ], - [ - -3.5522818, - 54.8374644 - ], - [ - -3.468511, - 54.8406277 - ], - [ - -3.4657644, - 54.8983158 - ], - [ - -3.3847403, - 54.8991055 - ], - [ - -3.3888601, - 54.9559214 - ], - [ - -3.0920786, - 54.9539468 - ], - [ - -3.0392359, - 54.9923274 - ], - [ - -3.0212713, - 55.0493881 - ], - [ - -2.9591232, - 55.0463283 - ], - [ - -2.9202807, - 55.0666294 - ], - [ - -2.7857081, - 55.068652 - ], - [ - -2.7852225, - 55.0914426 - ], - [ - -2.7337562, - 55.0922761 - ], - [ - -2.737616, - 55.151204 - ], - [ - -2.7648395, - 55.1510672 - ], - [ - -2.7013114, - 55.1722505 - ], - [ - -2.6635459, - 55.2192808 - ], - [ - -2.6460364, - 55.2188891 - ], - [ - -2.629042, - 55.2233933 - ], - [ - -2.6317886, - 55.2287781 - ], - [ - -2.6235488, - 55.2446345 - ], - [ - -2.6197723, - 55.2454663 - ], - [ - -2.6099017, - 55.2454174 - ], - [ - -2.6099876, - 55.2486466 - ], - [ - -2.6408121, - 55.2590039 - ], - [ - -2.6247896, - 55.2615631 - ], - [ - -2.6045186, - 55.2823081 - ], - [ - -2.5693176, - 55.296132 - ], - [ - -2.5479542, - 55.3121617 - ], - [ - -2.5091116, - 55.3234891 - ], - [ - -2.4780376, - 55.3494471 - ], - [ - -2.4421083, - 55.3533118 - ], - [ - -2.4052079, - 55.3439256 - ], - [ - -2.3726772, - 55.3447539 - ], - [ - -2.3221819, - 55.3687665 - ], - [ - -2.3241241, - 55.3999337 - ], - [ - -2.2576062, - 55.425015 - ], - [ - -2.1985547, - 55.4273529 - ], - [ - -2.1484296, - 55.4717466 - ], - [ - -2.1944348, - 55.484199 - ], - [ - -2.2040479, - 55.529306 - ], - [ - -2.2960584, - 55.6379722 - ], - [ - -2.2177808, - 55.6379722 - ], - [ - -2.1059266, - 55.7452498 - ], - [ - -1.9716874, - 55.7462161 - ], - [ - -1.9697453, - 55.9190951 - ], - [ - -2.1201694, - 55.9207115 - ], - [ - -2.1242893, - 55.9776133 - ], - [ - -2.3440159, - 55.9783817 - ], - [ - -2.3440159, - 56.0390349 - ], - [ - -2.5046909, - 56.0413363 - ], - [ - -2.500571, - 56.1003588 - ], - [ - -2.8823459, - 56.0957629 - ], - [ - -2.8823459, - 56.1722898 - ], - [ - -2.4126804, - 56.1692316 - ], - [ - -2.4181736, - 56.2334017 - ], - [ - -2.5857151, - 56.2303484 - ], - [ - -2.5719822, - 56.3416356 - ], - [ - -2.7257908, - 56.3462022 - ], - [ - -2.7312839, - 56.4343808 - ], - [ - -2.6928318, - 56.4343808 - ], - [ - -2.6928318, - 56.4859769 - ], - [ - -2.5307834, - 56.4935587 - ], - [ - -2.5307834, - 56.570806 - ], - [ - -2.5302878, - 56.6047947 - ], - [ - -2.3732428, - 56.6044452 - ], - [ - -2.3684363, - 56.7398824 - ], - [ - -2.3292975, - 56.7398824 - ], - [ - -2.3292975, - 56.7888065 - ], - [ - -2.3145346, - 56.7891826 - ], - [ - -2.3148779, - 56.7967036 - ], - [ - -2.171369, - 56.7967036 - ], - [ - -2.1703979, - 56.9710595 - ], - [ - -2.0101725, - 56.9694716 - ], - [ - -2.0101725, - 57.0846832 - ], - [ - -2.0817687, - 57.085349 - ], - [ - -2.0488097, - 57.1259963 - ], - [ - -2.0409133, - 57.126369 - ], - [ - -2.0383434, - 57.2411129 - ], - [ - -1.878118, - 57.2421638 - ], - [ - -1.8771469, - 57.2978175 - ], - [ - -1.9868771, - 57.2983422 - ], - [ - -1.9082209, - 57.3560063 - ], - [ - -1.8752048, - 57.3560063 - ], - [ - -1.8761758, - 57.3769527 - ], - [ - -1.8120857, - 57.4120111 - ], - [ - -1.7120661, - 57.4120111 - ], - [ - -1.7034646, - 57.6441388 - ], - [ - -1.8666032, - 57.6451781 - ], - [ - -1.8646611, - 57.7033351 - ], - [ - -3.1204292, - 57.7064705 - ], - [ - -3.1218025, - 57.7504652 - ], - [ - -3.4445259, - 57.7526635 - ], - [ - -3.4472724, - 57.7138067 - ], - [ - -3.5145637, - 57.7094052 - ], - [ - -3.5118171, - 57.6939956 - ], - [ - -3.7645027, - 57.6917938 - ], - [ - -3.7672492, - 57.6344975 - ], - [ - -3.842378, - 57.6288312 - ], - [ - -3.8438346, - 57.5965825 - ], - [ - -3.9414265, - 57.5916386 - ], - [ - -3.9404554, - 57.6537782 - ], - [ - -3.8894746, - 57.6529989 - ], - [ - -3.8826772, - 57.7676408 - ], - [ - -3.7224517, - 57.766087 - ], - [ - -3.7195385, - 57.8819201 - ], - [ - -3.9146888, - 57.8853352 - ], - [ - -3.916062, - 57.9546243 - ], - [ - -3.745774, - 57.9538956 - ], - [ - -3.7471473, - 58.0688409 - ], - [ - -3.5837256, - 58.0695672 - ], - [ - -3.5837256, - 58.1116689 - ], - [ - -3.4560096, - 58.1138452 - ], - [ - -3.4544646, - 58.228503 - ], - [ - -3.4379851, - 58.2283222 - ], - [ - -3.4243233, - 58.2427725 - ], - [ - -3.412307, - 58.2438567 - ], - [ - -3.3735115, - 58.2695057 - ], - [ - -3.3063919, - 58.2862038 - ], - [ - -3.1229154, - 58.2859395 - ], - [ - -3.123602, - 58.3443661 - ], - [ - -2.9574338, - 58.3447264 - ], - [ - -2.951254, - 58.6422011 - ], - [ - -2.8812162, - 58.6429157 - ], - [ - -2.8851004, - 58.8112825 - ], - [ - -2.7180775, - 58.8142997 - ], - [ - -2.7161354, - 58.8715749 - ], - [ - -2.556881, - 58.8775984 - ], - [ - -2.5544533, - 58.9923453 - ], - [ - -2.5567617, - 59.0483775 - ], - [ - -2.391893, - 59.0485996 - ], - [ - -2.3918002, - 59.1106996 - ], - [ - -2.4733695, - 59.1106996 - ], - [ - -2.5591563, - 59.1783028 - ], - [ - -2.5630406, - 59.2210646 - ], - [ - -2.3921334, - 59.224046 - ], - [ - -2.3911409, - 59.2740075 - ], - [ - -2.3639512, - 59.2745036 - ], - [ - -2.3658933, - 59.285417 - ], - [ - -2.3911409, - 59.284921 - ], - [ - -2.3911409, - 59.3379505 - ], - [ - -2.2221759, - 59.3381981 - ], - [ - -2.2233897, - 59.395965 - ], - [ - -2.3758467, - 59.396583 - ], - [ - -2.3899271, - 59.4026383 - ], - [ - -2.4008516, - 59.3962122 - ], - [ - -2.5637882, - 59.3952604 - ], - [ - -2.5637882, - 59.3385811 - ], - [ - -2.7320164, - 59.3375306 - ], - [ - -2.7333896, - 59.3952604 - ], - [ - -3.0726511, - 59.3931174 - ], - [ - -3.0703404, - 59.3354759 - ], - [ - -3.0753186, - 59.3355634 - ], - [ - -3.0749753, - 59.3292593 - ], - [ - -3.0698254, - 59.3289091 - ], - [ - -3.069801, - 59.2196159 - ], - [ - -3.2363384, - 59.2166341 - ], - [ - -3.2336751, - 59.1606496 - ], - [ - -3.4032766, - 59.1588895 - ], - [ - -3.394086, - 58.9279316 - ], - [ - -3.5664497, - 58.9259268 - ], - [ - -3.5611089, - 58.8679885 - ], - [ - -3.392508, - 58.8699339 - ], - [ - -3.3894734, - 58.8698711 - ], - [ - -3.3891093, - 58.8684905 - ], - [ - -3.3912942, - 58.868616 - ], - [ - -3.3884161, - 58.7543084 - ], - [ - -3.2238208, - 58.7555677 - ], - [ - -3.2189655, - 58.691289 - ], - [ - -3.4634113, - 58.6905753 - ], - [ - -3.4551716, - 58.6341518 - ], - [ - -3.787508, - 58.6341518 - ], - [ - -3.7861347, - 58.5769211 - ], - [ - -3.9028645, - 58.5733411 - ], - [ - -3.9028645, - 58.6477304 - ], - [ - -4.0690327, - 58.6491594 - ], - [ - -4.0690327, - 58.5912376 - ], - [ - -4.7364521, - 58.5933845 - ], - [ - -4.7364521, - 58.6505884 - ], - [ - -5.0715351, - 58.6520173 - ], - [ - -5.0654779, - 58.5325854 - ], - [ - -5.2332047, - 58.5316087 - ], - [ - -5.2283494, - 58.4719947 - ], - [ - -5.2424298, - 58.4719947 - ], - [ - -5.2366034, - 58.4089731 - ], - [ - -5.2283494, - 58.4094818 - ], - [ - -5.2210664, - 58.3005859 - ], - [ - -5.5657939, - 58.2959933 - ], - [ - -5.5580254, - 58.2372573 - ], - [ - -5.4146722, - 58.2401326 - ], - [ - -5.4141866, - 58.2267768 - ], - [ - -5.3885749, - 58.2272242 - ], - [ - -5.382714, - 58.1198615 - ], - [ - -5.51043, - 58.1191362 - ], - [ - -5.5114011, - 58.006214 - ], - [ - -5.6745397, - 58.0041559 - ], - [ - -5.6716266, - 57.9449366 - ], - [ - -5.6716266, - 57.8887166 - ], - [ - -5.8347652, - 57.8856193 - ], - [ - -5.8277052, - 57.5988958 - ], - [ - -6.0384259, - 57.5986357 - ], - [ - -6.0389115, - 57.6459559 - ], - [ - -6.1981658, - 57.6456961 - ], - [ - -6.2076123, - 57.7600132 - ], - [ - -6.537067, - 57.7544033 - ], - [ - -6.5312406, - 57.6402392 - ], - [ - -6.7002056, - 57.6360809 - ], - [ - -6.6807844, - 57.5236293 - ], - [ - -6.8516915, - 57.5152857 - ], - [ - -6.8361545, - 57.3385811 - ], - [ - -6.6730158, - 57.3438213 - ], - [ - -6.674958, - 57.2850883 - ], - [ - -6.5098772, - 57.2850883 - ], - [ - -6.4982244, - 57.1757637 - ], - [ - -6.3506228, - 57.1820797 - ], - [ - -6.3312015, - 57.1251969 - ], - [ - -6.1797156, - 57.1230884 - ], - [ - -6.1719471, - 57.0682265 - ], - [ - -6.4593819, - 57.059779 - ], - [ - -6.4564687, - 57.1093806 - ], - [ - -6.6671895, - 57.1062165 - ], - [ - -6.6730158, - 57.002708 - ], - [ - -6.5021087, - 57.0048233 - ], - [ - -6.4836097, - 56.8917522 - ], - [ - -6.3266104, - 56.8894062 - ], - [ - -6.3156645, - 56.7799312 - ], - [ - -6.2146739, - 56.775675 - ], - [ - -6.2146739, - 56.7234965 - ], - [ - -6.6866107, - 56.7224309 - ], - [ - -6.6769001, - 56.6114413 - ], - [ - -6.8419809, - 56.607166 - ], - [ - -6.8400387, - 56.5483307 - ], - [ - -7.1546633, - 56.5461895 - ], - [ - -7.1488369, - 56.4872592 - ], - [ - -6.9915246, - 56.490476 - ], - [ - -6.9876404, - 56.4325329 - ], - [ - -6.6827265, - 56.4314591 - ], - [ - -6.6769001, - 56.5472601 - ], - [ - -6.5292985, - 56.5504717 - ], - [ - -6.5234721, - 56.4379018 - ], - [ - -6.3661598, - 56.4368281 - ], - [ - -6.3642177, - 56.3766524 - ], - [ - -6.5273563, - 56.3712749 - ], - [ - -6.5171745, - 56.2428427 - ], - [ - -6.4869621, - 56.247421 - ], - [ - -6.4869621, - 56.1893882 - ], - [ - -6.3001945, - 56.1985572 - ], - [ - -6.3029411, - 56.2581017 - ], - [ - -5.9019401, - 56.256576 - ], - [ - -5.8964469, - 56.0960466 - ], - [ - -6.0282829, - 56.0883855 - ], - [ - -6.0392692, - 56.1557502 - ], - [ - -6.3853385, - 56.1542205 - ], - [ - -6.3606193, - 55.96099 - ], - [ - -6.2123039, - 55.9640647 - ], - [ - -6.2047508, - 55.9202269 - ], - [ - -6.5185478, - 55.9129158 - ], - [ - -6.5061881, - 55.7501763 - ], - [ - -6.6764762, - 55.7409005 - ], - [ - -6.6599967, - 55.6263176 - ], - [ - -6.3551261, - 55.6232161 - ], - [ - -6.3578727, - 55.5689002 - ], - [ - -6.0392692, - 55.5720059 - ], - [ - -6.0310294, - 55.6247669 - ], - [ - -5.7398917, - 55.6309694 - ], - [ - -5.7371452, - 55.4569279 - ], - [ - -5.8964469, - 55.4600426 - ], - [ - -5.8964469, - 55.2789864 - ], - [ - -5.4350211, - 55.2821151 - ], - [ - -5.4405143, - 55.4506979 - ], - [ - -5.2867057, - 55.4569279 - ], - [ - -5.3086784, - 55.4070602 - ], - [ - -4.9735954, - 55.4008223 - ], - [ - -4.9845817, - 55.2038242 - ], - [ - -5.1493766, - 55.2038242 - ], - [ - -5.1411369, - 55.037337 - ], - [ - -5.2152946, - 55.0341891 - ] - ], - [ - [ - -2.1646559, - 60.1622059 - ], - [ - -1.9930299, - 60.1609801 - ], - [ - -1.9946862, - 60.1035151 - ], - [ - -2.1663122, - 60.104743 - ] - ], - [ - [ - -1.5360658, - 59.8570831 - ], - [ - -1.3653566, - 59.8559841 - ], - [ - -1.366847, - 59.7975565 - ], - [ - -1.190628, - 59.7964199 - ], - [ - -1.1862046, - 59.9695391 - ], - [ - -1.0078652, - 59.9683948 - ], - [ - -1.0041233, - 60.114145 - ], - [ - -0.8360832, - 60.1130715 - ], - [ - -0.834574, - 60.1716772 - ], - [ - -1.0074262, - 60.1727795 - ], - [ - -1.0052165, - 60.2583924 - ], - [ - -0.8299659, - 60.2572778 - ], - [ - -0.826979, - 60.3726551 - ], - [ - -0.6507514, - 60.3715381 - ], - [ - -0.6477198, - 60.4882292 - ], - [ - -0.9984896, - 60.4904445 - ], - [ - -0.9970279, - 60.546555 - ], - [ - -0.6425288, - 60.5443201 - ], - [ - -0.6394896, - 60.6606792 - ], - [ - -0.8148133, - 60.6617806 - ], - [ - -0.8132987, - 60.7196112 - ], - [ - -0.6383298, - 60.7185141 - ], - [ - -0.635467, - 60.8275393 - ], - [ - -0.797568, - 60.8285523 - ], - [ - -0.9941426, - 60.8297807 - ], - [ - -0.9954966, - 60.7782667 - ], - [ - -1.1670282, - 60.7793403 - ], - [ - -1.1700357, - 60.6646181 - ], - [ - -1.5222599, - 60.6668304 - ], - [ - -1.5237866, - 60.6084426 - ], - [ - -1.6975673, - 60.609536 - ], - [ - -1.7021271, - 60.4345249 - ], - [ - -1.5260578, - 60.4334111 - ], - [ - -1.5275203, - 60.3770719 - ], - [ - -1.8751127, - 60.3792746 - ], - [ - -1.8781372, - 60.2624647 - ], - [ - -1.7019645, - 60.2613443 - ], - [ - -1.7049134, - 60.1470532 - ], - [ - -1.528659, - 60.1459283 - ] - ], - [ - [ - -0.9847667, - 60.8943762 - ], - [ - -0.9860347, - 60.8361105 - ], - [ - -0.8078362, - 60.8351904 - ], - [ - -0.8065683, - 60.8934578 - ] - ], - [ - [ - -7.7696901, - 56.8788231 - ], - [ - -7.7614504, - 56.7608274 - ], - [ - -7.6009049, - 56.7641903 - ], - [ - -7.5972473, - 56.819332 - ], - [ - -7.4479894, - 56.8203948 - ], - [ - -7.4489319, - 56.8794098 - ], - [ - -7.2841369, - 56.8794098 - ], - [ - -7.2813904, - 57.0471152 - ], - [ - -7.1303283, - 57.0515969 - ], - [ - -7.1330749, - 57.511801 - ], - [ - -6.96828, - 57.5147514 - ], - [ - -6.9765198, - 57.6854668 - ], - [ - -6.8062317, - 57.6913392 - ], - [ - -6.8089782, - 57.8041985 - ], - [ - -6.6496765, - 57.8071252 - ], - [ - -6.6441833, - 57.8612267 - ], - [ - -6.3200866, - 57.8626878 - ], - [ - -6.3200866, - 58.1551617 - ], - [ - -6.1607849, - 58.1522633 - ], - [ - -6.1552917, - 58.20874 - ], - [ - -5.9850036, - 58.2101869 - ], - [ - -5.9904968, - 58.2680163 - ], - [ - -6.1497986, - 58.2665717 - ], - [ - -6.1415588, - 58.5557514 - ], - [ - -6.3173401, - 58.5557514 - ], - [ - -6.3091003, - 58.4983923 - ], - [ - -6.4876282, - 58.4955218 - ], - [ - -6.4876282, - 58.4423768 - ], - [ - -6.6606628, - 58.4395018 - ], - [ - -6.6469299, - 58.3819525 - ], - [ - -6.8117248, - 58.3805125 - ], - [ - -6.8117248, - 58.3286357 - ], - [ - -6.9792663, - 58.3286357 - ], - [ - -6.9710266, - 58.2694608 - ], - [ - -7.1413147, - 58.2680163 - ], - [ - -7.1403816, - 58.0358742 - ], - [ - -7.3020636, - 58.0351031 - ], - [ - -7.3030347, - 57.9774797 - ], - [ - -7.1379539, - 57.9777372 - ], - [ - -7.1413526, - 57.9202792 - ], - [ - -7.1398961, - 57.8640206 - ], - [ - -7.3020636, - 57.862471 - ], - [ - -7.298484, - 57.7442293 - ], - [ - -7.4509193, - 57.7456951 - ], - [ - -7.4550392, - 57.6899522 - ], - [ - -7.6186131, - 57.6906048 - ], - [ - -7.6198341, - 57.7456951 - ], - [ - -7.7901222, - 57.7442293 - ], - [ - -7.7873756, - 57.6855477 - ], - [ - -7.6222332, - 57.6853817 - ], - [ - -7.6173779, - 57.5712602 - ], - [ - -7.788285, - 57.5709998 - ], - [ - -7.7892561, - 57.512109 - ], - [ - -7.7038025, - 57.5115874 - ], - [ - -7.6999183, - 57.4546902 - ], - [ - -7.5367796, - 57.4552126 - ], - [ - -7.5348375, - 57.5126306 - ], - [ - -7.4581235, - 57.5131521 - ], - [ - -7.4552103, - 57.2824165 - ], - [ - -7.6115515, - 57.2845158 - ], - [ - -7.6144647, - 57.2272651 - ], - [ - -7.451326, - 57.2256881 - ], - [ - -7.451326, - 57.1103873 - ], - [ - -7.6164068, - 57.1088053 - ], - [ - -7.603783, - 56.8792358 - ] - ], - [ - [ - -1.7106618, - 59.5626284 - ], - [ - -1.5417509, - 59.562215 - ], - [ - -1.5423082, - 59.5037224 - ], - [ - -1.7112191, - 59.5041365 - ] - ] - ], - "terms_url": "http://geo.nls.uk/maps/", - "terms_text": "National Library of Scotland Historic Maps" - }, - { - "name": "New & Misaligned TIGER Roads", - "type": "tms", - "description": "At zoom level 16+, public domain map data from the US Census. At lower zooms, only changes since 2006 minus changes already incorporated into OpenStreetMap", - "template": "http://{switch:a,b,c}.tiles.mapbox.com/v3/enf.y5c4ygb9,enf.ho20a3n1,enf.game1617/{zoom}/{x}/{y}.png", - "scaleExtent": [ - 0, - 22 - ], - "polygon": [ - [ - [ - -124.7617886, - 48.4130148 - ], - [ - -124.6059492, - 45.90245 - ], - [ - -124.9934269, - 40.0557614 - ], - [ - -122.5369737, - 36.8566086 - ], - [ - -119.9775867, - 33.0064099 - ], - [ - -117.675935, - 32.4630223 - ], - [ - -114.8612307, - 32.4799891 - ], - [ - -111.0089311, - 31.336015 - ], - [ - -108.1992687, - 31.3260016 - ], - [ - -108.1871123, - 31.7755116 - ], - [ - -106.5307225, - 31.7820947 - ], - [ - -106.4842052, - 31.7464455 - ], - [ - -106.429317, - 31.7520583 - ], - [ - -106.2868855, - 31.5613291 - ], - [ - -106.205248, - 31.446704 - ], - [ - -105.0205259, - 30.5360988 - ], - [ - -104.5881916, - 29.6997856 - ], - [ - -103.2518856, - 28.8908685 - ], - [ - -102.7173632, - 29.3920567 - ], - [ - -102.1513983, - 29.7475702 - ], - [ - -101.2552871, - 29.4810523 - ], - [ - -100.0062436, - 28.0082173 - ], - [ - -99.2351068, - 26.4475962 - ], - [ - -98.0109067, - 25.9928035 - ], - [ - -97.435024, - 25.8266009 - ], - [ - -96.9555259, - 25.9821589 - ], - [ - -96.8061741, - 27.7978168 - ], - [ - -95.5563349, - 28.5876066 - ], - [ - -93.7405308, - 29.4742093 - ], - [ - -90.9028456, - 28.8564513 - ], - [ - -88.0156706, - 28.9944338 - ], - [ - -88.0162494, - 30.0038862 - ], - [ - -86.0277506, - 30.0047454 - ], - [ - -84.0187909, - 28.9961781 - ], - [ - -81.9971976, - 25.9826768 - ], - [ - -81.9966618, - 25.0134917 - ], - [ - -84.0165592, - 25.0125783 - ], - [ - -84.0160068, - 24.0052745 - ], - [ - -80.0199985, - 24.007096 - ], - [ - -79.8901116, - 26.8550713 - ], - [ - -80.0245309, - 32.0161282 - ], - [ - -75.4147385, - 35.0531894 - ], - [ - -74.0211163, - 39.5727927 - ], - [ - -72.002019, - 40.9912464 - ], - [ - -69.8797398, - 40.9920457 - ], - [ - -69.8489304, - 43.2619916 - ], - [ - -66.9452845, - 44.7104937 - ], - [ - -67.7596632, - 47.0990024 - ], - [ - -69.2505131, - 47.5122328 - ], - [ - -70.4614886, - 46.2176574 - ], - [ - -71.412273, - 45.254878 - ], - [ - -72.0222508, - 45.0059846 - ], - [ - -75.0798841, - 44.9802854 - ], - [ - -76.9023061, - 43.8024568 - ], - [ - -78.7623935, - 43.6249578 - ], - [ - -79.15798, - 43.4462589 - ], - [ - -79.0060087, - 42.8005317 - ], - [ - -82.662475, - 41.6889458 - ], - [ - -82.1761642, - 43.588535 - ], - [ - -83.2813977, - 46.138853 - ], - [ - -87.5064535, - 48.0142702 - ], - [ - -88.3492194, - 48.2963271 - ], - [ - -89.4353148, - 47.9837822 - ], - [ - -93.9981078, - 49.0067142 - ], - [ - -95.1105379, - 49.412004 - ], - [ - -96.0131199, - 49.0060547 - ], - [ - -123.3228926, - 49.0042878 - ], - [ - -123.2275233, - 48.1849927 - ] - ], - [ - [ - -160.5787616, - 22.5062947 - ], - [ - -160.5782192, - 21.4984647 - ], - [ - -158.7470604, - 21.2439843 - ], - [ - -157.5083185, - 20.995803 - ], - [ - -155.9961942, - 18.7790194 - ], - [ - -154.6217803, - 18.7586966 - ], - [ - -154.6890176, - 19.8805722 - ], - [ - -156.2927622, - 21.2225888 - ], - [ - -157.5047384, - 21.9984962 - ], - [ - -159.0093692, - 22.5070181 - ] - ], - [ - [ - -167.1571546, - 68.721974 - ], - [ - -164.8553982, - 67.0255078 - ], - [ - -168.002195, - 66.0017503 - ], - [ - -169.0087448, - 66.001546 - ], - [ - -169.0075381, - 64.9987675 - ], - [ - -172.5143281, - 63.8767267 - ], - [ - -173.8197023, - 59.74014 - ], - [ - -162.5018149, - 58.0005815 - ], - [ - -160.0159024, - 58.0012389 - ], - [ - -160.0149725, - 57.000035 - ], - [ - -160.5054788, - 56.9999017 - ], - [ - -165.8092575, - 54.824847 - ], - [ - -178.000097, - 52.2446469 - ], - [ - -177.9992996, - 51.2554252 - ], - [ - -171.4689067, - 51.8215329 - ], - [ - -162.40251, - 53.956664 - ], - [ - -159.0075717, - 55.002502 - ], - [ - -158.0190709, - 55.0027849 - ], - [ - -151.9963213, - 55.9991902 - ], - [ - -151.500341, - 57.9987853 - ], - [ - -151.5012894, - 58.9919816 - ], - [ - -138.5159989, - 58.9953194 - ], - [ - -138.5150471, - 57.9986434 - ], - [ - -133.9948193, - 54.0031685 - ], - [ - -130.0044418, - 54.0043387 - ], - [ - -130.0070826, - 57.0000507 - ], - [ - -131.975877, - 56.9995156 - ], - [ - -135.1229873, - 59.756601 - ], - [ - -138.0071813, - 59.991805 - ], - [ - -139.1715881, - 60.4127229 - ], - [ - -140.9874011, - 61.0118551 - ], - [ - -140.9683975, - 69.9535069 - ], - [ - -156.176891, - 71.5633329 - ], - [ - -160.413634, - 70.7397728 - ], - [ - -163.0218273, - 69.9707435 - ], - [ - -164.9717003, - 68.994689 - ] - ] - ], - "overlay": true - }, - { - "name": "OS 1:25k historic (OSM)", - "type": "tms", - "template": "http://ooc.openstreetmap.org/os1/{zoom}/{x}/{y}.jpg", - "scaleExtent": [ - 6, - 17 - ], - "polygon": [ - [ - [ - -9, - 49.8 - ], - [ - -9, - 61.1 - ], - [ - 1.9, - 61.1 - ], - [ - 1.9, - 49.8 - ], - [ - -9, - 49.8 - ] - ] - ] - }, - { - "name": "OS New Popular Edition historic", - "type": "tms", - "template": "http://ooc.openstreetmap.org/npe/{zoom}/{x}/{y}.png", - "polygon": [ - [ - [ - -5.8, - 49.8 - ], - [ - -5.8, - 55.8 - ], - [ - 1.9, - 55.8 - ], - [ - 1.9, - 49.8 - ], - [ - -5.8, - 49.8 - ] - ] - ] - }, - { - "name": "OS OpenData Locator", - "type": "tms", - "template": "http://tiles.itoworld.com/os_locator/{zoom}/{x}/{y}.png", - "polygon": [ - [ - [ - -9, - 49.8 - ], - [ - -9, - 61.1 - ], - [ - 1.9, - 61.1 - ], - [ - 1.9, - 49.8 - ], - [ - -9, - 49.8 - ] - ] - ], - "overlay": true - }, - { - "name": "OS OpenData StreetView", - "type": "tms", - "template": "http://os.openstreetmap.org/sv/{zoom}/{x}/{y}.png", - "scaleExtent": [ - 1, - 18 - ], - "polygon": [ - [ - [ - -5.8292886, - 50.0229734 - ], - [ - -5.8292886, - 50.254819 - ], - [ - -5.373356, - 50.254819 - ], - [ - -5.373356, - 50.3530588 - ], - [ - -5.1756021, - 50.3530588 - ], - [ - -5.1756021, - 50.5925406 - ], - [ - -4.9970743, - 50.5925406 - ], - [ - -4.9970743, - 50.6935617 - ], - [ - -4.7965738, - 50.6935617 - ], - [ - -4.7965738, - 50.7822112 - ], - [ - -4.6949503, - 50.7822112 - ], - [ - -4.6949503, - 50.9607371 - ], - [ - -4.6043131, - 50.9607371 - ], - [ - -4.6043131, - 51.0692066 - ], - [ - -4.3792215, - 51.0692066 - ], - [ - -4.3792215, - 51.2521782 - ], - [ - -3.9039346, - 51.2521782 - ], - [ - -3.9039346, - 51.2916998 - ], - [ - -3.7171671, - 51.2916998 - ], - [ - -3.7171671, - 51.2453014 - ], - [ - -3.1486246, - 51.2453014 - ], - [ - -3.1486246, - 51.362067 - ], - [ - -3.7446329, - 51.362067 - ], - [ - -3.7446329, - 51.4340386 - ], - [ - -3.8297769, - 51.4340386 - ], - [ - -3.8297769, - 51.5298246 - ], - [ - -4.0852091, - 51.5298246 - ], - [ - -4.0852091, - 51.4939284 - ], - [ - -4.3792215, - 51.4939284 - ], - [ - -4.3792215, - 51.5427168 - ], - [ - -5.1444195, - 51.5427168 - ], - [ - -5.1444195, - 51.6296003 - ], - [ - -5.7387103, - 51.6296003 - ], - [ - -5.7387103, - 51.774037 - ], - [ - -5.5095393, - 51.774037 - ], - [ - -5.5095393, - 51.9802596 - ], - [ - -5.198799, - 51.9802596 - ], - [ - -5.198799, - 52.0973358 - ], - [ - -4.8880588, - 52.0973358 - ], - [ - -4.8880588, - 52.1831557 - ], - [ - -4.4957492, - 52.1831557 - ], - [ - -4.4957492, - 52.2925739 - ], - [ - -4.3015365, - 52.2925739 - ], - [ - -4.3015365, - 52.3685318 - ], - [ - -4.1811246, - 52.3685318 - ], - [ - -4.1811246, - 52.7933685 - ], - [ - -4.4413696, - 52.7933685 - ], - [ - -4.4413696, - 52.7369614 - ], - [ - -4.8569847, - 52.7369614 - ], - [ - -4.8569847, - 52.9317255 - ], - [ - -4.7288044, - 52.9317255 - ], - [ - -4.7288044, - 53.5038599 - ], - [ - -4.1578191, - 53.5038599 - ], - [ - -4.1578191, - 53.4113498 - ], - [ - -3.3110518, - 53.4113498 - ], - [ - -3.3110518, - 53.5038599 - ], - [ - -3.2333667, - 53.5038599 - ], - [ - -3.2333667, - 54.0159169 - ], - [ - -3.3926211, - 54.0159169 - ], - [ - -3.3926211, - 54.1980953 - ], - [ - -3.559644, - 54.1980953 - ], - [ - -3.559644, - 54.433732 - ], - [ - -3.7188984, - 54.433732 - ], - [ - -3.7188984, - 54.721897 - ], - [ - -4.3015365, - 54.721897 - ], - [ - -4.3015365, - 54.6140739 - ], - [ - -5.0473132, - 54.6140739 - ], - [ - -5.0473132, - 54.7532915 - ], - [ - -5.2298731, - 54.7532915 - ], - [ - -5.2298731, - 55.2190799 - ], - [ - -5.6532567, - 55.2190799 - ], - [ - -5.6532567, - 55.250088 - ], - [ - -5.8979647, - 55.250088 - ], - [ - -5.8979647, - 55.4822462 - ], - [ - -6.5933212, - 55.4822462 - ], - [ - -6.5933212, - 56.3013441 - ], - [ - -7.1727691, - 56.3013441 - ], - [ - -7.1727691, - 56.5601822 - ], - [ - -6.8171722, - 56.5601822 - ], - [ - -6.8171722, - 56.6991713 - ], - [ - -6.5315276, - 56.6991713 - ], - [ - -6.5315276, - 56.9066964 - ], - [ - -6.811679, - 56.9066964 - ], - [ - -6.811679, - 57.3716613 - ], - [ - -6.8721038, - 57.3716613 - ], - [ - -6.8721038, - 57.5518893 - ], - [ - -7.0973235, - 57.5518893 - ], - [ - -7.0973235, - 57.2411085 - ], - [ - -7.1742278, - 57.2411085 - ], - [ - -7.1742278, - 56.9066964 - ], - [ - -7.3719817, - 56.9066964 - ], - [ - -7.3719817, - 56.8075885 - ], - [ - -7.5202972, - 56.8075885 - ], - [ - -7.5202972, - 56.7142479 - ], - [ - -7.8306806, - 56.7142479 - ], - [ - -7.8306806, - 56.8994605 - ], - [ - -7.6494061, - 56.8994605 - ], - [ - -7.6494061, - 57.4739617 - ], - [ - -7.8306806, - 57.4739617 - ], - [ - -7.8306806, - 57.7915584 - ], - [ - -7.4736249, - 57.7915584 - ], - [ - -7.4736249, - 58.086063 - ], - [ - -7.1879804, - 58.086063 - ], - [ - -7.1879804, - 58.367197 - ], - [ - -6.8034589, - 58.367197 - ], - [ - -6.8034589, - 58.4155786 - ], - [ - -6.638664, - 58.4155786 - ], - [ - -6.638664, - 58.4673277 - ], - [ - -6.5178143, - 58.4673277 - ], - [ - -6.5178143, - 58.5625632 - ], - [ - -6.0536224, - 58.5625632 - ], - [ - -6.0536224, - 58.1568843 - ], - [ - -6.1470062, - 58.1568843 - ], - [ - -6.1470062, - 58.1105865 - ], - [ - -6.2799798, - 58.1105865 - ], - [ - -6.2799798, - 57.7122664 - ], - [ - -6.1591302, - 57.7122664 - ], - [ - -6.1591302, - 57.6667563 - ], - [ - -5.9339104, - 57.6667563 - ], - [ - -5.9339104, - 57.8892524 - ], - [ - -5.80643, - 57.8892524 - ], - [ - -5.80643, - 57.9621767 - ], - [ - -5.6141692, - 57.9621767 - ], - [ - -5.6141692, - 58.0911236 - ], - [ - -5.490819, - 58.0911236 - ], - [ - -5.490819, - 58.3733281 - ], - [ - -5.3199118, - 58.3733281 - ], - [ - -5.3199118, - 58.75015 - ], - [ - -3.5719977, - 58.75015 - ], - [ - -3.5719977, - 59.2091788 - ], - [ - -3.1944501, - 59.2091788 - ], - [ - -3.1944501, - 59.4759216 - ], - [ - -2.243583, - 59.4759216 - ], - [ - -2.243583, - 59.1388749 - ], - [ - -2.4611012, - 59.1388749 - ], - [ - -2.4611012, - 58.8185938 - ], - [ - -2.7407675, - 58.8185938 - ], - [ - -2.7407675, - 58.5804743 - ], - [ - -2.9116746, - 58.5804743 - ], - [ - -2.9116746, - 58.1157523 - ], - [ - -3.4865441, - 58.1157523 - ], - [ - -3.4865441, - 57.740386 - ], - [ - -1.7153245, - 57.740386 - ], - [ - -1.7153245, - 57.2225558 - ], - [ - -1.9794538, - 57.2225558 - ], - [ - -1.9794538, - 56.8760742 - ], - [ - -2.1658979, - 56.8760742 - ], - [ - -2.1658979, - 56.6333186 - ], - [ - -2.3601106, - 56.6333186 - ], - [ - -2.3601106, - 56.0477521 - ], - [ - -1.9794538, - 56.0477521 - ], - [ - -1.9794538, - 55.8650949 - ], - [ - -1.4745008, - 55.8650949 - ], - [ - -1.4745008, - 55.2499926 - ], - [ - -1.3221997, - 55.2499926 - ], - [ - -1.3221997, - 54.8221737 - ], - [ - -1.0550014, - 54.8221737 - ], - [ - -1.0550014, - 54.6746628 - ], - [ - -0.6618765, - 54.6746628 - ], - [ - -0.6618765, - 54.5527463 - ], - [ - -0.3247617, - 54.5527463 - ], - [ - -0.3247617, - 54.2865195 - ], - [ - 0.0092841, - 54.2865195 - ], - [ - 0.0092841, - 53.7938518 - ], - [ - 0.2081962, - 53.7938518 - ], - [ - 0.2081962, - 53.5217726 - ], - [ - 0.4163548, - 53.5217726 - ], - [ - 0.4163548, - 53.0298851 - ], - [ - 1.4273388, - 53.0298851 - ], - [ - 1.4273388, - 52.92021 - ], - [ - 1.8333912, - 52.92021 - ], - [ - 1.8333912, - 52.042488 - ], - [ - 1.5235504, - 52.042488 - ], - [ - 1.5235504, - 51.8261335 - ], - [ - 1.2697049, - 51.8261335 - ], - [ - 1.2697049, - 51.6967453 - ], - [ - 1.116651, - 51.6967453 - ], - [ - 1.116651, - 51.440346 - ], - [ - 1.5235504, - 51.440346 - ], - [ - 1.5235504, - 51.3331831 - ], - [ - 1.4507565, - 51.3331831 - ], - [ - 1.4507565, - 51.0207553 - ], - [ - 1.0699883, - 51.0207553 - ], - [ - 1.0699883, - 50.9008416 - ], - [ - 0.7788126, - 50.9008416 - ], - [ - 0.7788126, - 50.729843 - ], - [ - -0.7255952, - 50.729843 - ], - [ - -0.7255952, - 50.7038437 - ], - [ - -1.0074383, - 50.7038437 - ], - [ - -1.0074383, - 50.5736307 - ], - [ - -2.3625252, - 50.5736307 - ], - [ - -2.3625252, - 50.4846421 - ], - [ - -2.4987805, - 50.4846421 - ], - [ - -2.4987805, - 50.5736307 - ], - [ - -3.4096378, - 50.5736307 - ], - [ - -3.4096378, - 50.2057837 - ], - [ - -3.6922446, - 50.2057837 - ], - [ - -3.6922446, - 50.1347737 - ], - [ - -5.005468, - 50.1347737 - ], - [ - -5.005468, - 49.9474456 - ], - [ - -5.2839506, - 49.9474456 - ], - [ - -5.2839506, - 50.0229734 - ] - ], - [ - [ - -6.4580707, - 49.8673563 - ], - [ - -6.4580707, - 49.9499935 - ], - [ - -6.3978807, - 49.9499935 - ], - [ - -6.3978807, - 50.0053797 - ], - [ - -6.1799606, - 50.0053797 - ], - [ - -6.1799606, - 49.9168614 - ], - [ - -6.2540201, - 49.9168614 - ], - [ - -6.2540201, - 49.8673563 - ] - ], - [ - [ - -5.8343165, - 49.932156 - ], - [ - -5.8343165, - 49.9754641 - ], - [ - -5.7683254, - 49.9754641 - ], - [ - -5.7683254, - 49.932156 - ] - ], - [ - [ - -1.9483797, - 60.6885737 - ], - [ - -1.9483797, - 60.3058841 - ], - [ - -1.7543149, - 60.3058841 - ], - [ - -1.7543149, - 60.1284428 - ], - [ - -1.5754914, - 60.1284428 - ], - [ - -1.5754914, - 59.797917 - ], - [ - -1.0316959, - 59.797917 - ], - [ - -1.0316959, - 60.0354518 - ], - [ - -0.6626918, - 60.0354518 - ], - [ - -0.6626918, - 60.9103862 - ], - [ - -1.1034395, - 60.9103862 - ], - [ - -1.1034395, - 60.8040022 - ], - [ - -1.3506319, - 60.8040022 - ], - [ - -1.3506319, - 60.6885737 - ] - ], - [ - [ - -2.203381, - 60.1968568 - ], - [ - -2.203381, - 60.0929443 - ], - [ - -1.9864011, - 60.0929443 - ], - [ - -1.9864011, - 60.1968568 - ] - ], - [ - [ - -1.7543149, - 59.5698289 - ], - [ - -1.7543149, - 59.4639383 - ], - [ - -1.5373349, - 59.4639383 - ], - [ - -1.5373349, - 59.5698289 - ] - ], - [ - [ - -4.5585981, - 59.1370518 - ], - [ - -4.5585981, - 58.9569099 - ], - [ - -4.2867004, - 58.9569099 - ], - [ - -4.2867004, - 59.1370518 - ] - ], - [ - [ - -6.2787732, - 59.2025744 - ], - [ - -6.2787732, - 59.0227769 - ], - [ - -5.6650612, - 59.0227769 - ], - [ - -5.6650612, - 59.2025744 - ] - ], - [ - [ - -8.7163482, - 57.9440556 - ], - [ - -8.7163482, - 57.7305936 - ], - [ - -8.3592926, - 57.7305936 - ], - [ - -8.3592926, - 57.9440556 - ] - ], - [ - [ - -7.6077005, - 50.4021026 - ], - [ - -7.6077005, - 50.2688657 - ], - [ - -7.3907205, - 50.2688657 - ], - [ - -7.3907205, - 50.4021026 - ] - ], - [ - [ - -7.7304303, - 58.3579902 - ], - [ - -7.7304303, - 58.248313 - ], - [ - -7.5134503, - 58.248313 - ], - [ - -7.5134503, - 58.3579902 - ] - ] - ] - }, - { - "name": "OS Scottish Popular historic", - "type": "tms", - "template": "http://ooc.openstreetmap.org/npescotland/tiles/{zoom}/{x}/{y}.jpg", - "scaleExtent": [ - 6, - 15 - ], - "polygon": [ - [ - [ - -7.8, - 54.5 - ], - [ - -7.8, - 61.1 - ], - [ - -1.1, - 61.1 - ], - [ - -1.1, - 54.5 - ], - [ - -7.8, - 54.5 - ] - ] - ] - }, - { - "name": "OS Town Plans, Aberdeen 1866-1867 (NLS)", - "type": "tms", - "description": "Detailed town plan of Aberdeen 1866-1867, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/aberdeen/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -2.14039404, - 57.11218789 - ], - [ - -2.14064752, - 57.17894161 - ], - [ - -2.04501987, - 57.17901252 - ], - [ - -2.04493842, - 57.11225862 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/aberdeen.html", - "terms_text": "National Library of Scotland - Aberdeen 1866-1867" - }, - { - "name": "OS Town Plans, Airdrie 1858 (NLS)", - "type": "tms", - "description": "Detailed town plan of Airdrie 1858, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/airdrie/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.99291738, - 55.86408041 - ], - [ - -3.99338933, - 55.87329115 - ], - [ - -3.9691085, - 55.87368212 - ], - [ - -3.9686423, - 55.86447124 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/airdrie.html", - "terms_text": "National Library of Scotland - Airdrie 1858" - }, - { - "name": "OS Town Plans, Alexandria 1859 (NLS)", - "type": "tms", - "description": "Detailed town plan of Alexandria 1859, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/alexandria/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -4.58973571, - 55.97536707 - ], - [ - -4.59104461, - 55.99493153 - ], - [ - -4.55985072, - 55.99558348 - ], - [ - -4.55855754, - 55.97601855 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/alexandria.html", - "terms_text": "National Library of Scotland - Alexandria 1859" - }, - { - "name": "OS Town Plans, Alloa 1861-1862 (NLS)", - "type": "tms", - "description": "Detailed town plan of Alloa 1861-1862, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/alloa/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.81166061, - 56.09864363 - ], - [ - -3.81274448, - 56.12169929 - ], - [ - -3.7804609, - 56.12216898 - ], - [ - -3.77939631, - 56.09911292 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/alloa.html", - "terms_text": "National Library of Scotland - Alloa 1861-1862" - }, - { - "name": "OS Town Plans, Annan 1859 (NLS)", - "type": "tms", - "description": "Detailed town plan of Annan 1859, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/annan/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.27921439, - 54.98252155 - ], - [ - -3.27960062, - 54.9946601 - ], - [ - -3.24866331, - 54.99498165 - ], - [ - -3.24828642, - 54.98284297 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/annan.html", - "terms_text": "National Library of Scotland - Annan 1859" - }, - { - "name": "OS Town Plans, Arbroath 1858 (NLS)", - "type": "tms", - "description": "Detailed town plan of Arbroath 1858, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/arbroath/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -2.60716469, - 56.53995105 - ], - [ - -2.60764981, - 56.57022426 - ], - [ - -2.56498708, - 56.57042549 - ], - [ - -2.564536, - 56.54015206 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/arbroath.html", - "terms_text": "National Library of Scotland - Arbroath 1858" - }, - { - "name": "OS Town Plans, Ayr 1855 (NLS)", - "type": "tms", - "description": "Detailed town plan of Ayr 1855, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/ayr/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -4.66768105, - 55.43748864 - ], - [ - -4.67080057, - 55.48363961 - ], - [ - -4.60609844, - 55.48503484 - ], - [ - -4.60305426, - 55.43888149 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/ayr.html", - "terms_text": "National Library of Scotland - Ayr 1855" - }, - { - "name": "OS Town Plans, Berwick-upon-Tweed 1852 (NLS)", - "type": "tms", - "description": "Detailed town plan of Berwick-upon-Tweed 1852, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/berwick/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -2.02117487, - 55.75577627 - ], - [ - -2.02118763, - 55.77904118 - ], - [ - -1.98976956, - 55.77904265 - ], - [ - -1.9897755, - 55.75577774 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/berwick.html", - "terms_text": "National Library of Scotland - Berwick-upon-Tweed 1852" - }, - { - "name": "OS Town Plans, Brechin 1862 (NLS)", - "type": "tms", - "description": "Detailed town plan of Brechin 1862, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/brechin/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -2.67480248, - 56.71456775 - ], - [ - -2.67521172, - 56.73739937 - ], - [ - -2.64319679, - 56.73756872 - ], - [ - -2.64280695, - 56.71473694 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/brechin.html", - "terms_text": "National Library of Scotland - Brechin 1862" - }, - { - "name": "OS Town Plans, Burntisland 1894 (NLS)", - "type": "tms", - "description": "Detailed town plan of Burntisland 1894, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/burntisland/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.24879624, - 56.04240046 - ], - [ - -3.2495182, - 56.06472996 - ], - [ - -3.21830572, - 56.06504207 - ], - [ - -3.21760179, - 56.0427123 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/burntisland.html", - "terms_text": "National Library of Scotland - Burntisland 1894" - }, - { - "name": "OS Town Plans, Campbelton 1865 (NLS)", - "type": "tms", - "description": "Detailed town plan of Campbelton 1865, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/campbeltown/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -5.62345307, - 55.40255998 - ], - [ - -5.62631353, - 55.43375303 - ], - [ - -5.58276654, - 55.43503753 - ], - [ - -5.57994024, - 55.40384299 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/campbelton.html", - "terms_text": "National Library of Scotland - Campbelton 1865" - }, - { - "name": "OS Town Plans, Coatbridge 1858 (NLS)", - "type": "tms", - "description": "Detailed town plan of Coatbridge 1858, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/coatbridge/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -4.05035921, - 55.84648689 - ], - [ - -4.05157062, - 55.86947193 - ], - [ - -4.01953905, - 55.87000186 - ], - [ - -4.01834651, - 55.84701638 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/coatbridge.html", - "terms_text": "National Library of Scotland - Coatbridge 1858" - }, - { - "name": "OS Town Plans, Cupar 1854 (NLS)", - "type": "tms", - "description": "Detailed town plan of Cupar 1854, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/cupar1854/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.04765872, - 56.28653177 - ], - [ - -3.04890965, - 56.332192 - ], - [ - -2.98498515, - 56.33271677 - ], - [ - -2.98381041, - 56.28705563 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/cupar_1.html", - "terms_text": "National Library of Scotland - Cupar 1854" - }, - { - "name": "OS Town Plans, Cupar 1893-1894 (NLS)", - "type": "tms", - "description": "Detailed town plan of Cupar 1893-1894, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/cupar1893/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.0327697, - 56.30243657 - ], - [ - -3.03338443, - 56.32520139 - ], - [ - -3.00146629, - 56.32546356 - ], - [ - -3.00087054, - 56.30269852 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/cupar_2.html", - "terms_text": "National Library of Scotland - Cupar 1893-1894" - }, - { - "name": "OS Town Plans, Dalkeith 1852 (NLS)", - "type": "tms", - "description": "Detailed town plan of Dalkeith 1852, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/dalkeith1852/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.07862465, - 55.88900264 - ], - [ - -3.0790381, - 55.90389729 - ], - [ - -3.05835611, - 55.90407681 - ], - [ - -3.05795059, - 55.88918206 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/dalkeith_1.html", - "terms_text": "National Library of Scotland - Dalkeith 1852" - }, - { - "name": "OS Town Plans, Dalkeith 1893 (NLS)", - "type": "tms", - "description": "Detailed town plan of Dalkeith 1893, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/dalkeith1893/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.08600192, - 55.87936087 - ], - [ - -3.08658588, - 55.90025926 - ], - [ - -3.0436473, - 55.90063074 - ], - [ - -3.04308639, - 55.87973206 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/dalkeith_2.html", - "terms_text": "National Library of Scotland - Dalkeith 1893" - }, - { - "name": "OS Town Plans, Dumbarton 1859 (NLS)", - "type": "tms", - "description": "Detailed town plan of Dumbarton 1859, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/dumbarton/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -4.58559982, - 55.92742578 - ], - [ - -4.58714245, - 55.95056014 - ], - [ - -4.55463269, - 55.95123882 - ], - [ - -4.55310939, - 55.92810387 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/dumbarton.html", - "terms_text": "National Library of Scotland - Dumbarton 1859" - }, - { - "name": "OS Town Plans, Dumfries 1850 (NLS)", - "type": "tms", - "description": "Detailed town plan of Dumfries 1850, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/dumfries1850/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.63928076, - 55.03715991 - ], - [ - -3.64116352, - 55.08319002 - ], - [ - -3.57823183, - 55.08402202 - ], - [ - -3.57642118, - 55.0379905 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/dumfries_1.html", - "terms_text": "National Library of Scotland - Dumfries 1850" - }, - { - "name": "OS Town Plans, Dumfries 1893 (NLS)", - "type": "tms", - "description": "Detailed town plan of Dumfries 1893, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/dumfries1893/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.63179081, - 55.04150111 - ], - [ - -3.63330662, - 55.07873429 - ], - [ - -3.58259012, - 55.07940411 - ], - [ - -3.58112132, - 55.04217001 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/dumfries_2.html", - "terms_text": "National Library of Scotland - Dumfries 1893" - }, - { - "name": "OS Town Plans, Dundee 1857-1858 (NLS)", - "type": "tms", - "description": "Detailed town plan of Dundee 1857-1858, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/dundee1857/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.02584468, - 56.44879161 - ], - [ - -3.02656969, - 56.47566815 - ], - [ - -2.94710317, - 56.47629984 - ], - [ - -2.94643424, - 56.44942266 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/dundee_1.html", - "terms_text": "National Library of Scotland - Dundee 1857-1858" - }, - { - "name": "OS Town Plans, Dundee 1870-1872 (NLS)", - "type": "tms", - "description": "Detailed town plan of Dundee 1870-1872, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/dundee1870/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.03399945, - 56.448497 - ], - [ - -3.03497463, - 56.48435238 - ], - [ - -2.92352705, - 56.48523137 - ], - [ - -2.92265681, - 56.4493748 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/dundee_2.html", - "terms_text": "National Library of Scotland - Dundee 1870-1872" - }, - { - "name": "OS Town Plans, Dunfermline 1854 (NLS)", - "type": "tms", - "description": "Detailed town plan of Dunfermline 1854, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/dunfermline1854/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.49045481, - 56.0605979 - ], - [ - -3.49116489, - 56.07898822 - ], - [ - -3.44374075, - 56.07955208 - ], - [ - -3.44305323, - 56.06116138 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/dunfermline_1.html", - "terms_text": "National Library of Scotland - Dunfermline 1854" - }, - { - "name": "OS Town Plans, Dunfermline 1894 (NLS)", - "type": "tms", - "description": "Detailed town plan of Dunfermline 1894, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/dunfermline1893/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.48284159, - 56.05198219 - ], - [ - -3.48399434, - 56.08198924 - ], - [ - -3.44209721, - 56.08248587 - ], - [ - -3.44097697, - 56.05247826 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/dunfermline_2.html", - "terms_text": "National Library of Scotland - Dunfermline 1894" - }, - { - "name": "OS Town Plans, Edinburgh 1849-1851 (NLS)", - "type": "tms", - "description": "Detailed town plan of Edinburgh 1849-1851, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/edinburgh1849/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.2361048, - 55.921366 - ], - [ - -3.23836397, - 55.99217223 - ], - [ - -3.14197035, - 55.99310288 - ], - [ - -3.13988689, - 55.92229419 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/edinburgh1056_1.html", - "terms_text": "National Library of Scotland - Edinburgh 1849-1851" - }, - { - "name": "OS Town Plans, Edinburgh 1876-1877 (NLS)", - "type": "tms", - "description": "Detailed town plan of Edinburgh 1876-1877, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/edinburgh1876/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.24740498, - 55.92116518 - ], - [ - -3.24989581, - 55.99850896 - ], - [ - -3.13061127, - 55.99966059 - ], - [ - -3.12835798, - 55.92231348 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/edinburgh1056_2.html", - "terms_text": "National Library of Scotland - Edinburgh 1876-1877" - }, - { - "name": "OS Town Plans, Edinburgh 1893-1894 (NLS)", - "type": "tms", - "description": "Detailed town plan of Edinburgh 1893-1894, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/edinburgh1893/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.26111081, - 55.89555387 - ], - [ - -3.26450423, - 55.9997912 - ], - [ - -3.11970824, - 56.00119128 - ], - [ - -3.1167031, - 55.89694851 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/edinburgh500.html", - "terms_text": "National Library of Scotland - Edinburgh 1893-1894" - }, - { - "name": "OS Town Plans, Elgin 1868 (NLS)", - "type": "tms", - "description": "Detailed town plan of Elgin 1868, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/elgin/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.33665196, - 57.62879017 - ], - [ - -3.33776583, - 57.65907381 - ], - [ - -3.29380859, - 57.65953111 - ], - [ - -3.29273129, - 57.62924695 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/elgin.html", - "terms_text": "National Library of Scotland - Elgin 1868" - }, - { - "name": "OS Town Plans, Falkirk 1858-1859 (NLS)", - "type": "tms", - "description": "Detailed town plan of Falkirk 1858-1859, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/falkirk/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.79587441, - 55.99343101 - ], - [ - -3.79697783, - 56.01720281 - ], - [ - -3.76648151, - 56.01764348 - ], - [ - -3.76539679, - 55.99387129 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/falkirk.html", - "terms_text": "National Library of Scotland - Falkirk 1858-1859" - }, - { - "name": "OS Town Plans, Forfar 1860-1861 (NLS)", - "type": "tms", - "description": "Detailed town plan of Forfar 1860-1861, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/forfar/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -2.90326183, - 56.6289471 - ], - [ - -2.90378797, - 56.65095013 - ], - [ - -2.87228457, - 56.65117489 - ], - [ - -2.87177676, - 56.62917168 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/forfar.html", - "terms_text": "National Library of Scotland - Forfar 1860-1861" - }, - { - "name": "OS Town Plans, Forres 1868 (NLS)", - "type": "tms", - "description": "Detailed town plan of Forres 1868, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/forres/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.63516795, - 57.58887872 - ], - [ - -3.63647637, - 57.618002 - ], - [ - -3.57751453, - 57.61875171 - ], - [ - -3.5762532, - 57.58962759 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/forres.html", - "terms_text": "National Library of Scotland - Forres 1868" - }, - { - "name": "OS Town Plans, Galashiels 1858 (NLS)", - "type": "tms", - "description": "Detailed town plan of Galashiels 1858, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/galashiels/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -2.82918609, - 55.59586303 - ], - [ - -2.82981273, - 55.62554026 - ], - [ - -2.78895254, - 55.62580992 - ], - [ - -2.78835674, - 55.59613239 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/galashiels.html", - "terms_text": "National Library of Scotland - Galashiels 1858" - }, - { - "name": "OS Town Plans, Girvan 1857 (NLS)", - "type": "tms", - "description": "Detailed town plan of Girvan 1857, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/girvan/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -4.87424251, - 55.22679729 - ], - [ - -4.87587895, - 55.24945946 - ], - [ - -4.84447382, - 55.25019598 - ], - [ - -4.84285519, - 55.22753318 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/girvan.html", - "terms_text": "National Library of Scotland - Girvan 1857" - }, - { - "name": "OS Town Plans, Glasgow 1857-1858 (NLS)", - "type": "tms", - "description": "Detailed town plan of Glasgow 1857-1858, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/glasgow1857/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -4.31575491, - 55.82072009 - ], - [ - -4.319683, - 55.88667625 - ], - [ - -4.1771319, - 55.88928081 - ], - [ - -4.1734447, - 55.82331825 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/glasgow_1.html", - "terms_text": "National Library of Scotland - Glasgow 1857-1858" - }, - { - "name": "OS Town Plans, Glasgow 1892-1894 (NLS)", - "type": "tms", - "description": "Detailed town plan of Glasgow 1892-1894, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/glasgow1894/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -4.3465357, - 55.81456228 - ], - [ - -4.35157646, - 55.89806268 - ], - [ - -4.17788765, - 55.9012587 - ], - [ - -4.17321842, - 55.81774834 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/glasgow_2.html", - "terms_text": "National Library of Scotland - Glasgow 1892-1894" - }, - { - "name": "OS Town Plans, Greenock 1857 (NLS)", - "type": "tms", - "description": "Detailed town plan of Greenock 1857, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/greenock/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -4.78108857, - 55.92617865 - ], - [ - -4.78382957, - 55.96437481 - ], - [ - -4.7302257, - 55.96557475 - ], - [ - -4.72753731, - 55.92737687 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/greenock.html", - "terms_text": "National Library of Scotland - Greenock 1857" - }, - { - "name": "OS Town Plans, Haddington 1853 (NLS)", - "type": "tms", - "description": "Detailed town plan of Haddington 1853, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/haddington1853/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -2.78855542, - 55.9451862 - ], - [ - -2.78888196, - 55.96124194 - ], - [ - -2.76674325, - 55.9613817 - ], - [ - -2.76642588, - 55.94532587 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/haddington_1.html", - "terms_text": "National Library of Scotland - Haddington 1853" - }, - { - "name": "OS Town Plans, Haddington 1893 (NLS)", - "type": "tms", - "description": "Detailed town plan of Haddington 1893, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/haddington1893/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -2.80152293, - 55.93428734 - ], - [ - -2.80214693, - 55.96447189 - ], - [ - -2.76038069, - 55.9647367 - ], - [ - -2.75978916, - 55.93455185 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/haddington_2.html", - "terms_text": "National Library of Scotland - Haddington 1893" - }, - { - "name": "OS Town Plans, Hamilton 1858 (NLS)", - "type": "tms", - "description": "Detailed town plan of Hamilton 1858, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/hamilton/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -4.06721642, - 55.74877265 - ], - [ - -4.06924047, - 55.78698508 - ], - [ - -4.01679233, - 55.78785698 - ], - [ - -4.01481949, - 55.74964331 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/hamilton.html", - "terms_text": "National Library of Scotland - Hamilton 1858" - }, - { - "name": "OS Town Plans, Hawick 1857-1858 (NLS)", - "type": "tms", - "description": "Detailed town plan of Hawick 1857-1858, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/hawick/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -2.80130149, - 55.4102516 - ], - [ - -2.80176329, - 55.43304638 - ], - [ - -2.7708832, - 55.43324489 - ], - [ - -2.77043917, - 55.41044995 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/hawick.html", - "terms_text": "National Library of Scotland - Hawick 1857-1858" - }, - { - "name": "OS Town Plans, Inverness 1867-1868 (NLS)", - "type": "tms", - "description": "Detailed town plan of Inverness 1867-1868, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/inverness/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -4.25481758, - 57.45916363 - ], - [ - -4.25752308, - 57.50302387 - ], - [ - -4.19713638, - 57.50409032 - ], - [ - -4.1945031, - 57.46022829 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/inverness.html", - "terms_text": "National Library of Scotland - Inverness 1867-1868" - }, - { - "name": "OS Town Plans, Irvine 1859 (NLS)", - "type": "tms", - "description": "Detailed town plan of Irvine 1859, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/irvine/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -4.67540402, - 55.60649957 - ], - [ - -4.67643252, - 55.62159024 - ], - [ - -4.65537888, - 55.62204812 - ], - [ - -4.65435844, - 55.60695719 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/irvine.html", - "terms_text": "National Library of Scotland - Irvine 1859" - }, - { - "name": "OS Town Plans, Jedburgh 1858 (NLS)", - "type": "tms", - "description": "Detailed town plan of Jedburgh 1858, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/jedburgh/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -2.56332521, - 55.47105448 - ], - [ - -2.56355503, - 55.48715562 - ], - [ - -2.54168193, - 55.48725438 - ], - [ - -2.54146103, - 55.47115318 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/jedburgh.html", - "terms_text": "National Library of Scotland - Jedburgh 1858" - }, - { - "name": "OS Town Plans, Kelso 1857 (NLS)", - "type": "tms", - "description": "Detailed town plan of Kelso 1857, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/kelso/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -2.44924544, - 55.58390848 - ], - [ - -2.44949757, - 55.6059582 - ], - [ - -2.41902085, - 55.60606617 - ], - [ - -2.41878581, - 55.58401636 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/kelso.html", - "terms_text": "National Library of Scotland - Kelso 1857" - }, - { - "name": "OS Town Plans, Kilmarnock 1857-1859 (NLS)", - "type": "tms", - "description": "Detailed town plan of Kilmarnock 1857-1859, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/kilmarnock/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -4.51746876, - 55.58950933 - ], - [ - -4.5194347, - 55.62017114 - ], - [ - -4.47675652, - 55.62104083 - ], - [ - -4.4748238, - 55.59037802 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/kilmarnock.html", - "terms_text": "National Library of Scotland - Kilmarnock 1857-1859" - }, - { - "name": "OS Town Plans, Kirkcaldy 1855 (NLS)", - "type": "tms", - "description": "Detailed town plan of Kirkcaldy 1855, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/kirkcaldy1855/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.17455285, - 56.09518942 - ], - [ - -3.17554995, - 56.12790251 - ], - [ - -3.12991402, - 56.12832843 - ], - [ - -3.12895559, - 56.09561481 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/kirkcaldy_1.html", - "terms_text": "National Library of Scotland - Kirkcaldy 1855" - }, - { - "name": "OS Town Plans, Kirkcaldy 1894 (NLS)", - "type": "tms", - "description": "Detailed town plan of Kirkcaldy 1894, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/kirkcaldy1894/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.17460426, - 56.09513375 - ], - [ - -3.17560428, - 56.12794116 - ], - [ - -3.12989512, - 56.12836777 - ], - [ - -3.12893395, - 56.09555983 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/kirkcaldy_2.html", - "terms_text": "National Library of Scotland - Kirkcaldy 1894" - }, - { - "name": "OS Town Plans, Kirkcudbright 1850 (NLS)", - "type": "tms", - "description": "Detailed town plan of Kirkcudbright 1850, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/kirkcudbright1850/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -4.06154334, - 54.82586314 - ], - [ - -4.0623081, - 54.84086061 - ], - [ - -4.0420219, - 54.84120364 - ], - [ - -4.04126464, - 54.82620598 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/kirkcudbright_1.html", - "terms_text": "National Library of Scotland - Kirkcudbright 1850" - }, - { - "name": "OS Town Plans, Kirkcudbright 1893 (NLS)", - "type": "tms", - "description": "Detailed town plan of Kirkcudbright 1893, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/kirkcudbright1893/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -4.06001868, - 54.82720122 - ], - [ - -4.06079036, - 54.84234455 - ], - [ - -4.04025067, - 54.84269158 - ], - [ - -4.03948667, - 54.82754805 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/kirkcudbright_2.html", - "terms_text": "National Library of Scotland - Kirkcudbright 1893" - }, - { - "name": "OS Town Plans, Kirkintilloch 1859 (NLS)", - "type": "tms", - "description": "Detailed town plan of Kirkintilloch 1859, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/kirkintilloch/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -4.16664222, - 55.93124287 - ], - [ - -4.16748402, - 55.94631265 - ], - [ - -4.14637318, - 55.94668235 - ], - [ - -4.14553956, - 55.93161237 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/kirkintilloch.html", - "terms_text": "National Library of Scotland - Kirkintilloch 1859" - }, - { - "name": "OS Town Plans, Kirriemuir 1861 (NLS)", - "type": "tms", - "description": "Detailed town plan of Kirriemuir 1861, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/kirriemuir/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.01255744, - 56.65896044 - ], - [ - -3.01302683, - 56.67645382 - ], - [ - -2.98815879, - 56.67665366 - ], - [ - -2.98770092, - 56.65916014 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/kirriemuir.html", - "terms_text": "National Library of Scotland - Kirriemuir 1861" - }, - { - "name": "OS Town Plans, Lanark 1858 (NLS)", - "type": "tms", - "description": "Detailed town plan of Lanark 1858, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/lanark/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.78642584, - 55.66308804 - ], - [ - -3.78710605, - 55.67800854 - ], - [ - -3.76632876, - 55.67830935 - ], - [ - -3.76565645, - 55.66338868 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/lanark.html", - "terms_text": "National Library of Scotland - Lanark 1858" - }, - { - "name": "OS Town Plans, Linlithgow 1856 (NLS)", - "type": "tms", - "description": "Detailed town plan of Linlithgow 1856, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/linlithgow/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.61908334, - 55.95549561 - ], - [ - -3.62033259, - 55.98538615 - ], - [ - -3.57838447, - 55.98593047 - ], - [ - -3.57716753, - 55.95603932 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/linlithgow.html", - "terms_text": "National Library of Scotland - Linlithgow 1856" - }, - { - "name": "OS Town Plans, Mayole 1856-1857 (NLS)", - "type": "tms", - "description": "Detailed town plan of Mayole 1856-1857, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/maybole/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -4.69086378, - 55.34340178 - ], - [ - -4.6918884, - 55.35849731 - ], - [ - -4.67089656, - 55.35895813 - ], - [ - -4.6698799, - 55.34386234 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/maybole.html", - "terms_text": "National Library of Scotland - Mayole 1856-1857" - }, - { - "name": "OS Town Plans, Montrose 1861-1862 (NLS)", - "type": "tms", - "description": "Detailed town plan of Montrose 1861-1862, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/montrose/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -2.4859324, - 56.69645192 - ], - [ - -2.4862257, - 56.71918799 - ], - [ - -2.45405417, - 56.71930941 - ], - [ - -2.45378027, - 56.69657324 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/montrose.html", - "terms_text": "National Library of Scotland - Montrose 1861-1862" - }, - { - "name": "OS Town Plans, Musselburgh 1853 (NLS)", - "type": "tms", - "description": "Detailed town plan of Musselburgh 1853, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/musselburgh1853/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.07888558, - 55.93371953 - ], - [ - -3.07954151, - 55.95729781 - ], - [ - -3.03240684, - 55.95770177 - ], - [ - -3.03177952, - 55.93412313 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/musselburgh_1.html", - "terms_text": "National Library of Scotland - Musselburgh 1853" - }, - { - "name": "OS Town Plans, Musselburgh 1893 (NLS)", - "type": "tms", - "description": "Detailed town plan of Musselburgh 1893, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/musselburgh1893/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.07017621, - 55.92694102 - ], - [ - -3.07078961, - 55.94917624 - ], - [ - -3.03988228, - 55.94944099 - ], - [ - -3.03928658, - 55.92720556 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/musselburgh_2.html", - "terms_text": "National Library of Scotland - Musselburgh 1893" - }, - { - "name": "OS Town Plans, Nairn 1867-1868 (NLS)", - "type": "tms", - "description": "Detailed town plan of Nairn 1867-1868, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/nairn/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.88433907, - 57.57899149 - ], - [ - -3.88509905, - 57.5936822 - ], - [ - -3.85931017, - 57.59406441 - ], - [ - -3.85856057, - 57.57937348 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/nairn.html", - "terms_text": "National Library of Scotland - Nairn 1867-1868" - }, - { - "name": "OS Town Plans, Oban 1867-1868 (NLS)", - "type": "tms", - "description": "Detailed town plan of Oban 1867-1868, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/oban/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -5.49548449, - 56.39080407 - ], - [ - -5.49836627, - 56.42219039 - ], - [ - -5.45383984, - 56.42343933 - ], - [ - -5.45099456, - 56.39205153 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/oban.html", - "terms_text": "National Library of Scotland - Oban 1867-1868" - }, - { - "name": "OS Town Plans, Peebles 1856 (NLS)", - "type": "tms", - "description": "Detailed town plan of Peebles 1856, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/peebles/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.20921287, - 55.63635834 - ], - [ - -3.20990288, - 55.65873817 - ], - [ - -3.17896372, - 55.65903935 - ], - [ - -3.17829135, - 55.63665927 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/peebles.html", - "terms_text": "National Library of Scotland - Peebles 1856" - }, - { - "name": "OS Town Plans, Perth 1860 (NLS)", - "type": "tms", - "description": "Detailed town plan of Perth 1860, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/perth/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.45302495, - 56.37794226 - ], - [ - -3.45416664, - 56.40789908 - ], - [ - -3.41187528, - 56.40838777 - ], - [ - -3.41076676, - 56.3784304 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/perth.html", - "terms_text": "National Library of Scotland - Perth 1860" - }, - { - "name": "OS Town Plans, Peterhead 1868 (NLS)", - "type": "tms", - "description": "Detailed town plan of Peterhead 1868, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/peterhead/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -1.80513747, - 57.48046916 - ], - [ - -1.80494005, - 57.51755411 - ], - [ - -1.75135366, - 57.51746003 - ], - [ - -1.75160539, - 57.48037522 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/peterhead", - "terms_text": "National Library of Scotland - Peterhead 1868" - }, - { - "name": "OS Town Plans, Port Glasgow 1856-1857 (NLS)", - "type": "tms", - "description": "Detailed town plan of Port Glasgow 1856-1857, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/portglasgow/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -4.70063209, - 55.91995983 - ], - [ - -4.70222026, - 55.9427679 - ], - [ - -4.67084958, - 55.94345237 - ], - [ - -4.6692798, - 55.92064372 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/port-glasgow.html", - "terms_text": "National Library of Scotland - Port Glasgow 1856-1857" - }, - { - "name": "OS Town Plans, Portobello 1893-1894 (NLS)", - "type": "tms", - "description": "Detailed town plan of Portobello 1893-1894, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/portobello/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.12437919, - 55.93846889 - ], - [ - -3.1250234, - 55.96068605 - ], - [ - -3.09394827, - 55.96096586 - ], - [ - -3.09332184, - 55.93874847 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/portobello.html", - "terms_text": "National Library of Scotland - Portobello 1893-1894" - }, - { - "name": "OS Town Plans, Rothesay 1862-1863 (NLS)", - "type": "tms", - "description": "Detailed town plan of Rothesay 1862-1863, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/rothesay/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -5.06449893, - 55.82864114 - ], - [ - -5.06569719, - 55.84385927 - ], - [ - -5.04413114, - 55.84439519 - ], - [ - -5.04294127, - 55.82917676 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/rothesay.html", - "terms_text": "National Library of Scotland - Rothesay 1862-1863" - }, - { - "name": "OS Town Plans, Selkirk 1865 (NLS)", - "type": "tms", - "description": "Detailed town plan of Selkirk 1865, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/selkirk/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -2.85998582, - 55.53499576 - ], - [ - -2.86063259, - 55.56459732 - ], - [ - -2.82003242, - 55.56487574 - ], - [ - -2.81941615, - 55.53527387 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/selkirk.html", - "terms_text": "National Library of Scotland - Selkirk 1865" - }, - { - "name": "OS Town Plans, St Andrews 1854 (NLS)", - "type": "tms", - "description": "Detailed town plan of St Andrews 1854, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/standrews1854/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -2.81342686, - 56.32097352 - ], - [ - -2.81405804, - 56.3506222 - ], - [ - -2.77243712, - 56.35088865 - ], - [ - -2.77183819, - 56.32123967 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/st-andrews_1.html", - "terms_text": "National Library of Scotland - St Andrews 1854" - }, - { - "name": "OS Town Plans, St Andrews 1893 (NLS)", - "type": "tms", - "description": "Detailed town plan of St Andrews 1893, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/standrews1893/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -2.81545583, - 56.31861733 - ], - [ - -2.81609919, - 56.3487653 - ], - [ - -2.77387785, - 56.34903619 - ], - [ - -2.77326775, - 56.31888792 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/st-andrews_2.html", - "terms_text": "National Library of Scotland - St Andrews 1893" - }, - { - "name": "OS Town Plans, Stirling 1858 (NLS)", - "type": "tms", - "description": "Detailed town plan of Stirling 1858, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/stirling/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.95768489, - 56.10754239 - ], - [ - -3.95882978, - 56.13007142 - ], - [ - -3.92711024, - 56.13057046 - ], - [ - -3.92598386, - 56.10804101 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/stirling.html", - "terms_text": "National Library of Scotland - Stirling 1858" - }, - { - "name": "OS Town Plans, Stonehaven 1864 (NLS)", - "type": "tms", - "description": "Detailed town plan of Stonehaven 1864, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/stonehaven/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -2.220167, - 56.9565098 - ], - [ - -2.2202543, - 56.97129283 - ], - [ - -2.19924399, - 56.9713281 - ], - [ - -2.19916501, - 56.95654504 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/stonehaven.html", - "terms_text": "National Library of Scotland - Stonehaven 1864" - }, - { - "name": "OS Town Plans, Stranraer 1847 (NLS)", - "type": "tms", - "description": "Detailed town plan of Stranraer 1847, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/stranraer1847/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -5.04859743, - 54.8822997 - ], - [ - -5.0508954, - 54.91268061 - ], - [ - -5.0095373, - 54.91371278 - ], - [ - -5.00727037, - 54.88333071 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/stranraer_1.html", - "terms_text": "National Library of Scotland - Stranraer 1847" - }, - { - "name": "OS Town Plans, Stranraer 1863-1877 (NLS)", - "type": "tms", - "description": "Detailed town plan of Stranraer 1863-1877, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/stranraer1867/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -5.04877289, - 54.88228699 - ], - [ - -5.05107324, - 54.9126976 - ], - [ - -5.00947337, - 54.91373582 - ], - [ - -5.00720427, - 54.88332405 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/stranraer_1a.html", - "terms_text": "National Library of Scotland - Stranraer 1863-1877" - }, - { - "name": "OS Town Plans, Stranraer 1893 (NLS)", - "type": "tms", - "description": "Detailed town plan of Stranraer 1893, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/stranraer1893/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -5.04418424, - 54.89773858 - ], - [ - -5.04511026, - 54.90999885 - ], - [ - -5.0140499, - 54.91077389 - ], - [ - -5.0131333, - 54.89851327 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/stranraer_2.html", - "terms_text": "National Library of Scotland - Stranraer 1893" - }, - { - "name": "OS Town Plans, Strathaven 1858 (NLS)", - "type": "tms", - "description": "Detailed town plan of Strathaven 1858, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/strathaven/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -4.06914872, - 55.67242091 - ], - [ - -4.06954357, - 55.67989707 - ], - [ - -4.05917487, - 55.6800715 - ], - [ - -4.05878199, - 55.67259529 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/strathaven.html", - "terms_text": "National Library of Scotland - Strathaven 1858" - }, - { - "name": "OS Town Plans, Wick 1872 (NLS)", - "type": "tms", - "description": "Detailed town plan of Wick 1872, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/wick/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -3.11470001, - 58.41344839 - ], - [ - -3.11588837, - 58.45101446 - ], - [ - -3.05949843, - 58.45149284 - ], - [ - -3.05837008, - 58.41392606 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/wick.html", - "terms_text": "National Library of Scotland - Wick 1872" - }, - { - "name": "OS Town Plans, Wigtown 1848 (NLS)", - "type": "tms", - "description": "Detailed town plan of Wigtown 1848, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/wigtown1848/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -4.45235587, - 54.8572296 - ], - [ - -4.45327284, - 54.87232603 - ], - [ - -4.43254469, - 54.87274317 - ], - [ - -4.43163545, - 54.85764651 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/wigtown_1.html", - "terms_text": "National Library of Scotland - Wigtown 1848" - }, - { - "name": "OS Town Plans, Wigtown 1894 (NLS)", - "type": "tms", - "description": "Detailed town plan of Wigtown 1894, courtesy of National Library of Scotland.", - "template": "http://geo.nls.uk/maps/towns/wigtown1894/{zoom}/{x}/{-y}.png", - "scaleExtent": [ - 13, - 20 - ], - "polygon": [ - [ - [ - -4.45233361, - 54.85721131 - ], - [ - -4.45325423, - 54.87236807 - ], - [ - -4.43257837, - 54.87278416 - ], - [ - -4.43166549, - 54.85762716 - ] - ] - ], - "terms_url": "http://maps.nls.uk/townplans/wigtown_2.html", - "terms_text": "National Library of Scotland - Wigtown 1894" - }, - { - "name": "OpenPT Map (overlay)", - "type": "tms", - "template": "http://openptmap.de/tiles/{zoom}/{x}/{y}.png", - "scaleExtent": [ - 5, - 16 - ], - "polygon": [ - [ - [ - 6.4901072, - 53.665658 - ], - [ - 8.5665347, - 53.9848257 - ], - [ - 8.1339457, - 54.709715 - ], - [ - 8.317796, - 55.0952362 - ], - [ - 10.1887438, - 54.7783834 - ], - [ - 10.6321475, - 54.4778841 - ], - [ - 11.2702164, - 54.6221504 - ], - [ - 11.681176, - 54.3709243 - ], - [ - 12.0272473, - 54.3898199 - ], - [ - 13.3250145, - 54.8531617 - ], - [ - 13.9198245, - 54.6972173 - ], - [ - 14.2118221, - 54.1308273 - ], - [ - 14.493005, - 53.2665063 - ], - [ - 14.1577485, - 52.8766495 - ], - [ - 14.7525584, - 52.5819369 - ], - [ - 15.0986297, - 51.0171541 - ], - [ - 14.9364088, - 50.8399279 - ], - [ - 14.730929, - 50.7920977 - ], - [ - 14.4389313, - 50.8808862 - ], - [ - 12.9573138, - 50.3939044 - ], - [ - 12.51391, - 50.3939044 - ], - [ - 12.3084302, - 50.1173237 - ], - [ - 12.6112425, - 49.9088337 - ], - [ - 12.394948, - 49.7344006 - ], - [ - 12.7734634, - 49.4047626 - ], - [ - 14.1469337, - 48.6031036 - ], - [ - 14.6768553, - 48.6531391 - ], - [ - 15.0661855, - 49.0445497 - ], - [ - 16.2666202, - 48.7459305 - ], - [ - 16.4937294, - 48.8741286 - ], - [ - 16.904689, - 48.7173975 - ], - [ - 16.9371332, - 48.5315383 - ], - [ - 16.8384693, - 48.3823161 - ], - [ - 17.2017097, - 48.010204 - ], - [ - 17.1214145, - 47.6997605 - ], - [ - 16.777292, - 47.6585709 - ], - [ - 16.6090543, - 47.7460598 - ], - [ - 16.410228, - 47.6637214 - ], - [ - 16.7352326, - 47.6147714 - ], - [ - 16.5555242, - 47.3589738 - ], - [ - 16.4790525, - 46.9768539 - ], - [ - 16.0355168, - 46.8096295 - ], - [ - 16.0508112, - 46.6366332 - ], - [ - 14.9572663, - 46.6313822 - ], - [ - 14.574908, - 46.3892866 - ], - [ - 12.3954655, - 46.6891149 - ], - [ - 12.1507562, - 47.0550608 - ], - [ - 11.1183887, - 46.9142058 - ], - [ - 11.0342699, - 46.7729797 - ], - [ - 10.4836739, - 46.8462544 - ], - [ - 10.4607324, - 46.5472973 - ], - [ - 10.1013156, - 46.5735879 - ], - [ - 10.2007287, - 46.1831867 - ], - [ - 9.8948421, - 46.3629068 - ], - [ - 9.5966026, - 46.2889758 - ], - [ - 9.2983631, - 46.505206 - ], - [ - 9.2830687, - 46.2572605 - ], - [ - 9.0536537, - 45.7953255 - ], - [ - 8.4265861, - 46.2466846 - ], - [ - 8.4418804, - 46.4736161 - ], - [ - 7.8759901, - 45.9284607 - ], - [ - 7.0959791, - 45.8645956 - ], - [ - 6.7747981, - 46.1620044 - ], - [ - 6.8206811, - 46.4051083 - ], - [ - 6.5453831, - 46.4578142 - ], - [ - 6.3312624, - 46.3840116 - ], - [ - 6.3847926, - 46.2466846 - ], - [ - 5.8953739, - 46.0878021 - ], - [ - 6.1171418, - 46.3681838 - ], - [ - 6.0942003, - 46.5998657 - ], - [ - 6.4383228, - 46.7782169 - ], - [ - 6.4306756, - 46.9298747 - ], - [ - 7.0806847, - 47.3460216 - ], - [ - 6.8436226, - 47.3719227 - ], - [ - 6.9965659, - 47.5012373 - ], - [ - 7.1800979, - 47.5064033 - ], - [ - 7.2336281, - 47.439206 - ], - [ - 7.4553959, - 47.4805683 - ], - [ - 7.7842241, - 48.645735 - ], - [ - 8.1971711, - 49.0282701 - ], - [ - 7.6006921, - 49.0382974 - ], - [ - 7.4477487, - 49.1634679 - ], - [ - 7.2030394, - 49.1034255 - ], - [ - 6.6677378, - 49.1634679 - ], - [ - 6.6371491, - 49.3331933 - ], - [ - 6.3542039, - 49.4576194 - ], - [ - 6.5453831, - 49.8043366 - ], - [ - 6.2471436, - 49.873384 - ], - [ - 6.0789059, - 50.1534883 - ], - [ - 6.3618511, - 50.3685934 - ], - [ - 6.0865531, - 50.7039632 - ], - [ - 5.8800796, - 51.0513752 - ], - [ - 6.1247889, - 51.1618085 - ], - [ - 6.1936134, - 51.491527 - ], - [ - 5.9641984, - 51.7526501 - ], - [ - 6.0253758, - 51.8897286 - ], - [ - 6.4536171, - 51.8661241 - ], - [ - 6.8436226, - 51.9557552 - ], - [ - 6.6906793, - 52.0499105 - ], - [ - 7.0042131, - 52.2282603 - ], - [ - 7.0195074, - 52.4525245 - ], - [ - 6.6983264, - 52.4665032 - ], - [ - 6.6906793, - 52.6524628 - ], - [ - 7.0348017, - 52.6385432 - ], - [ - 7.0730376, - 52.8330151 - ], - [ - 7.2183337, - 52.9852064 - ], - [ - 7.1953922, - 53.3428087 - ], - [ - 7.0042131, - 53.3291098 - ] - ] - ], - "terms_url": "http://openstreetmap.org/", - "terms_text": "© OpenStreetMap contributors, CC-BY-SA" - }, - { - "name": "OpenStreetMap (Mapnik)", - "type": "tms", - "description": "The default OpenStreetMap layer.", - "template": "http://tile.openstreetmap.org/{zoom}/{x}/{y}.png", - "scaleExtent": [ - 0, - 18 - ], - "terms_url": "http://openstreetmap.org/", - "terms_text": "© OpenStreetMap contributors, CC-BY-SA", - "default": true - }, - { - "name": "OpenStreetMap GPS traces", - "type": "tms", - "description": "Public GPS traces uploaded to OpenStreetMap.", - "template": "http://{switch:a,b,c}.gps-tile.openstreetmap.org/lines/{zoom}/{x}/{y}.png", - "scaleExtent": [ - 0, - 20 - ], - "terms_url": "http://www.openstreetmap.org/copyright", - "terms_text": "© OpenStreetMap contributors", - "terms_html": "© OpenStreetMap contributors. North: South: East: West: ", - "overlay": true - }, - { - "name": "Pangasinán/Bulacan (Phillipines HiRes)", - "type": "tms", - "template": "http://gravitystorm.dev.openstreetmap.org/imagery/philippines/{zoom}/{x}/{y}.png", - "scaleExtent": [ - 12, - 19 - ], - "polygon": [ - [ - [ - 120.336593, - 15.985768 - ], - [ - 120.445995, - 15.984 - ], - [ - 120.446134, - 15.974459 - ], - [ - 120.476464, - 15.974592 - ], - [ - 120.594247, - 15.946832 - ], - [ - 120.598064, - 16.090795 - ], - [ - 120.596537, - 16.197999 - ], - [ - 120.368537, - 16.218527 - ], - [ - 120.347576, - 16.042308 - ], - [ - 120.336593, - 15.985768 - ] - ], - [ - [ - 120.8268, - 15.3658 - ], - [ - 121.2684, - 15.2602 - ], - [ - 121.2699, - 14.7025 - ], - [ - 120.695, - 14.8423 - ] - ] - ] - }, - { - "name": "Slovakia EEA CORINE 2006", - "type": "tms", - "template": "http://www.freemap.sk/tms/clc/{zoom}/{x}/{y}.png", - "polygon": [ - [ - [ - 19.83682, - 49.25529 - ], - [ - 19.80075, - 49.42385 - ], - [ - 19.60437, - 49.48058 - ], - [ - 19.49179, - 49.63961 - ], - [ - 19.21831, - 49.52604 - ], - [ - 19.16778, - 49.42521 - ], - [ - 19.00308, - 49.42236 - ], - [ - 18.97611, - 49.5308 - ], - [ - 18.54685, - 49.51425 - ], - [ - 18.31432, - 49.33818 - ], - [ - 18.15913, - 49.2961 - ], - [ - 18.05564, - 49.11134 - ], - [ - 17.56396, - 48.84938 - ], - [ - 17.17929, - 48.88816 - ], - [ - 17.058, - 48.81105 - ], - [ - 16.90426, - 48.61947 - ], - [ - 16.79685, - 48.38561 - ], - [ - 17.06762, - 48.01116 - ], - [ - 17.32787, - 47.97749 - ], - [ - 17.51699, - 47.82535 - ], - [ - 17.74776, - 47.73093 - ], - [ - 18.29515, - 47.72075 - ], - [ - 18.67959, - 47.75541 - ], - [ - 18.89755, - 47.81203 - ], - [ - 18.79463, - 47.88245 - ], - [ - 18.84318, - 48.04046 - ], - [ - 19.46212, - 48.05333 - ], - [ - 19.62064, - 48.22938 - ], - [ - 19.89585, - 48.09387 - ], - [ - 20.33766, - 48.2643 - ], - [ - 20.55395, - 48.52358 - ], - [ - 20.82335, - 48.55714 - ], - [ - 21.10271, - 48.47096 - ], - [ - 21.45863, - 48.55513 - ], - [ - 21.74536, - 48.31435 - ], - [ - 22.15293, - 48.37179 - ], - [ - 22.61255, - 49.08914 - ], - [ - 22.09997, - 49.23814 - ], - [ - 21.9686, - 49.36363 - ], - [ - 21.6244, - 49.46989 - ], - [ - 21.06873, - 49.46402 - ], - [ - 20.94336, - 49.31088 - ], - [ - 20.73052, - 49.44006 - ], - [ - 20.22804, - 49.41714 - ], - [ - 20.05234, - 49.23052 - ], - [ - 19.83682, - 49.25529 - ] - ] - ], - "terms_url": "http://www.eea.europa.eu/data-and-maps/data/clc-2006-vector-data-version-1", - "terms_text": "EEA Corine 2006" - }, - { - "name": "Slovakia EEA GMES Urban Atlas", - "type": "tms", - "template": "http://www.freemap.sk/tms/urbanatlas/{zoom}/{x}/{y}.png", - "polygon": [ - [ - [ - 19.83682, - 49.25529 - ], - [ - 19.80075, - 49.42385 - ], - [ - 19.60437, - 49.48058 - ], - [ - 19.49179, - 49.63961 - ], - [ - 19.21831, - 49.52604 - ], - [ - 19.16778, - 49.42521 - ], - [ - 19.00308, - 49.42236 - ], - [ - 18.97611, - 49.5308 - ], - [ - 18.54685, - 49.51425 - ], - [ - 18.31432, - 49.33818 - ], - [ - 18.15913, - 49.2961 - ], - [ - 18.05564, - 49.11134 - ], - [ - 17.56396, - 48.84938 - ], - [ - 17.17929, - 48.88816 - ], - [ - 17.058, - 48.81105 - ], - [ - 16.90426, - 48.61947 - ], - [ - 16.79685, - 48.38561 - ], - [ - 17.06762, - 48.01116 - ], - [ - 17.32787, - 47.97749 - ], - [ - 17.51699, - 47.82535 - ], - [ - 17.74776, - 47.73093 - ], - [ - 18.29515, - 47.72075 - ], - [ - 18.67959, - 47.75541 - ], - [ - 18.89755, - 47.81203 - ], - [ - 18.79463, - 47.88245 - ], - [ - 18.84318, - 48.04046 - ], - [ - 19.46212, - 48.05333 - ], - [ - 19.62064, - 48.22938 - ], - [ - 19.89585, - 48.09387 - ], - [ - 20.33766, - 48.2643 - ], - [ - 20.55395, - 48.52358 - ], - [ - 20.82335, - 48.55714 - ], - [ - 21.10271, - 48.47096 - ], - [ - 21.45863, - 48.55513 - ], - [ - 21.74536, - 48.31435 - ], - [ - 22.15293, - 48.37179 - ], - [ - 22.61255, - 49.08914 - ], - [ - 22.09997, - 49.23814 - ], - [ - 21.9686, - 49.36363 - ], - [ - 21.6244, - 49.46989 - ], - [ - 21.06873, - 49.46402 - ], - [ - 20.94336, - 49.31088 - ], - [ - 20.73052, - 49.44006 - ], - [ - 20.22804, - 49.41714 - ], - [ - 20.05234, - 49.23052 - ], - [ - 19.83682, - 49.25529 - ] - ] - ], - "terms_url": "http://www.eea.europa.eu/data-and-maps/data/urban-atlas", - "terms_text": "EEA GMES Urban Atlas" - }, - { - "name": "Slovakia Historic Maps", - "type": "tms", - "template": "http://tms.freemap.sk/historicke/{zoom}/{x}/{y}.png", - "scaleExtent": [ - 0, - 12 - ], - "polygon": [ - [ - [ - 16.8196949, - 47.4927236 - ], - [ - 16.8196949, - 49.5030322 - ], - [ - 22.8388318, - 49.5030322 - ], - [ - 22.8388318, - 47.4927236 - ], - [ - 16.8196949, - 47.4927236 - ] - ] - ] - }, - { - "name": "South Africa CD:NGI Aerial", - "type": "tms", - "template": "http://{switch:a,b,c}.aerial.openstreetmap.org.za/ngi-aerial/{zoom}/{x}/{y}.jpg", - "scaleExtent": [ - 1, - 22 - ], - "polygon": [ - [ - [ - 17.8396817, - -32.7983384 - ], - [ - 17.8893509, - -32.6972835 - ], - [ - 18.00364, - -32.6982187 - ], - [ - 18.0991679, - -32.7485251 - ], - [ - 18.2898747, - -32.5526645 - ], - [ - 18.2930182, - -32.0487089 - ], - [ - 18.105455, - -31.6454966 - ], - [ - 17.8529257, - -31.3443951 - ], - [ - 17.5480046, - -30.902171 - ], - [ - 17.4044506, - -30.6374731 - ], - [ - 17.2493704, - -30.3991663 - ], - [ - 16.9936977, - -29.6543552 - ], - [ - 16.7987996, - -29.19437 - ], - [ - 16.5494139, - -28.8415949 - ], - [ - 16.4498691, - -28.691876 - ], - [ - 16.4491046, - -28.5515766 - ], - [ - 16.6002551, - -28.4825663 - ], - [ - 16.7514057, - -28.4486958 - ], - [ - 16.7462192, - -28.2458973 - ], - [ - 16.8855148, - -28.04729 - ], - [ - 16.9929502, - -28.0244005 - ], - [ - 17.0529659, - -28.0257086 - ], - [ - 17.1007562, - -28.0338839 - ], - [ - 17.2011527, - -28.0930546 - ], - [ - 17.2026346, - -28.2328424 - ], - [ - 17.2474611, - -28.2338215 - ], - [ - 17.2507953, - -28.198892 - ], - [ - 17.3511919, - -28.1975861 - ], - [ - 17.3515624, - -28.2442655 - ], - [ - 17.4015754, - -28.2452446 - ], - [ - 17.4149122, - -28.3489751 - ], - [ - 17.4008345, - -28.547997 - ], - [ - 17.4526999, - -28.5489733 - ], - [ - 17.4512071, - -28.6495106 - ], - [ - 17.4983599, - -28.6872054 - ], - [ - 17.6028204, - -28.6830048 - ], - [ - 17.6499732, - -28.6967928 - ], - [ - 17.6525928, - -28.7381457 - ], - [ - 17.801386, - -28.7381457 - ], - [ - 17.9994276, - -28.7560602 - ], - [ - 18.0002748, - -28.7956172 - ], - [ - 18.1574507, - -28.8718055 - ], - [ - 18.5063811, - -28.8718055 - ], - [ - 18.6153564, - -28.8295875 - ], - [ - 18.9087513, - -28.8277516 - ], - [ - 19.1046973, - -28.9488548 - ], - [ - 19.1969071, - -28.9378513 - ], - [ - 19.243012, - -28.8516164 - ], - [ - 19.2314858, - -28.802963 - ], - [ - 19.2587296, - -28.7009928 - ], - [ - 19.4431493, - -28.6973163 - ], - [ - 19.5500289, - -28.4958332 - ], - [ - 19.6967264, - -28.4939914 - ], - [ - 19.698822, - -28.4479358 - ], - [ - 19.8507587, - -28.4433291 - ], - [ - 19.8497109, - -28.4027818 - ], - [ - 19.9953605, - -28.399095 - ], - [ - 19.9893671, - -24.7497859 - ], - [ - 20.2916682, - -24.9192346 - ], - [ - 20.4724562, - -25.1501701 - ], - [ - 20.6532441, - -25.4529449 - ], - [ - 20.733265, - -25.6801957 - ], - [ - 20.8281046, - -25.8963498 - ], - [ - 20.8429232, - -26.215851 - ], - [ - 20.6502804, - -26.4840868 - ], - [ - 20.6532441, - -26.8204869 - ], - [ - 21.0889134, - -26.846933 - ], - [ - 21.6727695, - -26.8389998 - ], - [ - 21.7765003, - -26.6696268 - ], - [ - 21.9721069, - -26.6431395 - ], - [ - 22.2803355, - -26.3274702 - ], - [ - 22.5707817, - -26.1333967 - ], - [ - 22.7752795, - -25.6775246 - ], - [ - 23.0005235, - -25.2761948 - ], - [ - 23.4658301, - -25.2735148 - ], - [ - 23.883717, - -25.597366 - ], - [ - 24.2364017, - -25.613402 - ], - [ - 24.603905, - -25.7896563 - ], - [ - 25.110704, - -25.7389432 - ], - [ - 25.5078447, - -25.6855376 - ], - [ - 25.6441766, - -25.4823781 - ], - [ - 25.8419267, - -24.7805437 - ], - [ - 25.846641, - -24.7538456 - ], - [ - 26.3928487, - -24.6332894 - ], - [ - 26.4739066, - -24.5653312 - ], - [ - 26.5089966, - -24.4842437 - ], - [ - 26.5861946, - -24.4075775 - ], - [ - 26.7300635, - -24.3014458 - ], - [ - 26.8567384, - -24.2499463 - ], - [ - 26.8574402, - -24.1026901 - ], - [ - 26.9215471, - -23.8990957 - ], - [ - 26.931831, - -23.8461891 - ], - [ - 26.9714827, - -23.6994344 - ], - [ - 27.0006074, - -23.6367644 - ], - [ - 27.0578041, - -23.6052574 - ], - [ - 27.1360547, - -23.5203437 - ], - [ - 27.3339623, - -23.3973792 - ], - [ - 27.5144057, - -23.3593929 - ], - [ - 27.5958145, - -23.2085465 - ], - [ - 27.8098634, - -23.0994957 - ], - [ - 27.8828506, - -23.0620496 - ], - [ - 27.9382928, - -22.9496487 - ], - [ - 28.0407556, - -22.8255118 - ], - [ - 28.2056786, - -22.6552861 - ], - [ - 28.3397223, - -22.5639374 - ], - [ - 28.4906093, - -22.560697 - ], - [ - 28.6108769, - -22.5400248 - ], - [ - 28.828175, - -22.4550173 - ], - [ - 28.9285324, - -22.4232328 - ], - [ - 28.9594116, - -22.3090081 - ], - [ - 29.0162574, - -22.208335 - ], - [ - 29.2324117, - -22.1693453 - ], - [ - 29.3531213, - -22.1842926 - ], - [ - 29.6548952, - -22.1186426 - ], - [ - 29.7777102, - -22.1361956 - ], - [ - 29.9292989, - -22.1849425 - ], - [ - 30.1166795, - -22.2830348 - ], - [ - 30.2563377, - -22.2914767 - ], - [ - 30.3033582, - -22.3395204 - ], - [ - 30.5061784, - -22.3057617 - ], - [ - 30.8374279, - -22.284983 - ], - [ - 31.0058599, - -22.3077095 - ], - [ - 31.1834152, - -22.3232913 - ], - [ - 31.2930586, - -22.3674647 - ], - [ - 31.5680579, - -23.1903385 - ], - [ - 31.5568311, - -23.4430809 - ], - [ - 31.6931122, - -23.6175209 - ], - [ - 31.7119696, - -23.741136 - ], - [ - 31.7774743, - -23.8800628 - ], - [ - 31.8886337, - -23.9481098 - ], - [ - 31.9144386, - -24.1746736 - ], - [ - 31.9948307, - -24.3040878 - ], - [ - 32.0166656, - -24.4405988 - ], - [ - 32.0077331, - -24.6536578 - ], - [ - 32.019643, - -24.9140701 - ], - [ - 32.035523, - -25.0849767 - ], - [ - 32.019643, - -25.3821442 - ], - [ - 31.9928457, - -25.4493771 - ], - [ - 31.9997931, - -25.5165725 - ], - [ - 32.0057481, - -25.6078978 - ], - [ - 32.0057481, - -25.6624806 - ], - [ - 31.9362735, - -25.8403721 - ], - [ - 31.9809357, - -25.9546537 - ], - [ - 31.8687838, - -26.0037251 - ], - [ - 31.4162062, - -25.7277683 - ], - [ - 31.3229117, - -25.7438611 - ], - [ - 31.2504595, - -25.8296526 - ], - [ - 31.1393001, - -25.9162746 - ], - [ - 31.1164727, - -25.9912361 - ], - [ - 30.9656135, - -26.2665756 - ], - [ - 30.8921689, - -26.3279703 - ], - [ - 30.8534616, - -26.4035568 - ], - [ - 30.8226943, - -26.4488849 - ], - [ - 30.8022583, - -26.5240694 - ], - [ - 30.8038369, - -26.8082089 - ], - [ - 30.9020939, - -26.7807451 - ], - [ - 30.9100338, - -26.8489495 - ], - [ - 30.9824859, - -26.9082627 - ], - [ - 30.976531, - -27.0029222 - ], - [ - 31.0034434, - -27.0441587 - ], - [ - 31.1543322, - -27.1980416 - ], - [ - 31.5015607, - -27.311117 - ], - [ - 31.9700183, - -27.311117 - ], - [ - 31.9700183, - -27.120472 - ], - [ - 31.9769658, - -27.050664 - ], - [ - 32.0002464, - -26.7983892 - ], - [ - 32.1069826, - -26.7984645 - ], - [ - 32.3114546, - -26.8479493 - ], - [ - 32.899986, - -26.8516059 - ], - [ - 32.886091, - -26.9816971 - ], - [ - 32.709427, - -27.4785436 - ], - [ - 32.6240724, - -27.7775144 - ], - [ - 32.5813951, - -28.07479 - ], - [ - 32.5387178, - -28.2288046 - ], - [ - 32.4275584, - -28.5021568 - ], - [ - 32.3640388, - -28.5945699 - ], - [ - 32.0702603, - -28.8469827 - ], - [ - 31.9878832, - -28.9069497 - ], - [ - 31.7764818, - -28.969487 - ], - [ - 31.4638459, - -29.2859343 - ], - [ - 31.359634, - -29.3854348 - ], - [ - 31.1680825, - -29.6307408 - ], - [ - 31.064863, - -29.7893535 - ], - [ - 31.0534493, - -29.8470469 - ], - [ - 31.0669933, - -29.8640319 - ], - [ - 31.0455459, - -29.9502017 - ], - [ - 30.9518556, - -30.0033946 - ], - [ - 30.8651833, - -30.1024093 - ], - [ - 30.7244725, - -30.392502 - ], - [ - 30.3556256, - -30.9308873 - ], - [ - 30.0972364, - -31.2458274 - ], - [ - 29.8673136, - -31.4304296 - ], - [ - 29.7409393, - -31.5014699 - ], - [ - 29.481312, - -31.6978686 - ], - [ - 28.8943171, - -32.2898903 - ], - [ - 28.5497137, - -32.5894641 - ], - [ - 28.1436499, - -32.8320732 - ], - [ - 28.0748735, - -32.941689 - ], - [ - 27.8450942, - -33.082869 - ], - [ - 27.3757956, - -33.3860685 - ], - [ - 26.8805407, - -33.6458951 - ], - [ - 26.5916871, - -33.7480756 - ], - [ - 26.4527308, - -33.7935795 - ], - [ - 26.206754, - -33.7548943 - ], - [ - 26.0077897, - -33.7223961 - ], - [ - 25.8055494, - -33.7524272 - ], - [ - 25.7511073, - -33.8006512 - ], - [ - 25.6529079, - -33.8543597 - ], - [ - 25.6529079, - -33.9469768 - ], - [ - 25.7195789, - -34.0040115 - ], - [ - 25.7202807, - -34.0511235 - ], - [ - 25.5508915, - -34.063151 - ], - [ - 25.3504571, - -34.0502627 - ], - [ - 25.2810609, - -34.0020322 - ], - [ - 25.0476316, - -33.9994588 - ], - [ - 24.954724, - -34.0043594 - ], - [ - 24.9496586, - -34.1010363 - ], - [ - 24.8770358, - -34.1506456 - ], - [ - 24.8762914, - -34.2005281 - ], - [ - 24.8532574, - -34.2189562 - ], - [ - 24.7645287, - -34.2017946 - ], - [ - 24.5001356, - -34.2003254 - ], - [ - 24.3486733, - -34.1163824 - ], - [ - 24.1988819, - -34.1019039 - ], - [ - 23.9963377, - -34.0514443 - ], - [ - 23.8017509, - -34.0524332 - ], - [ - 23.7493589, - -34.0111855 - ], - [ - 23.4973536, - -34.009014 - ], - [ - 23.4155191, - -34.0434586 - ], - [ - 23.4154284, - -34.1140433 - ], - [ - 22.9000853, - -34.0993009 - ], - [ - 22.8412418, - -34.0547911 - ], - [ - 22.6470321, - -34.0502627 - ], - [ - 22.6459843, - -34.0072768 - ], - [ - 22.570016, - -34.0064081 - ], - [ - 22.5050499, - -34.0645866 - ], - [ - 22.2519968, - -34.0645866 - ], - [ - 22.2221334, - -34.1014701 - ], - [ - 22.1621197, - -34.1057019 - ], - [ - 22.1712431, - -34.1521766 - ], - [ - 22.1576913, - -34.2180897 - ], - [ - 22.0015632, - -34.2172232 - ], - [ - 21.9496952, - -34.3220009 - ], - [ - 21.8611528, - -34.4007145 - ], - [ - 21.5614708, - -34.4020114 - ], - [ - 21.5468011, - -34.3661242 - ], - [ - 21.501744, - -34.3669892 - ], - [ - 21.5006961, - -34.4020114 - ], - [ - 21.4194886, - -34.4465247 - ], - [ - 21.1978706, - -34.4478208 - ], - [ - 21.0988193, - -34.3991325 - ], - [ - 21.0033746, - -34.3753872 - ], - [ - 20.893192, - -34.3997115 - ], - [ - 20.8976647, - -34.4854003 - ], - [ - 20.7446802, - -34.4828092 - ], - [ - 20.5042011, - -34.486264 - ], - [ - 20.2527197, - -34.701477 - ], - [ - 20.0803502, - -34.8361855 - ], - [ - 19.9923317, - -34.8379056 - ], - [ - 19.899074, - -34.8275845 - ], - [ - 19.8938348, - -34.7936018 - ], - [ - 19.5972963, - -34.7961833 - ], - [ - 19.3929677, - -34.642015 - ], - [ - 19.2877095, - -34.6404784 - ], - [ - 19.2861377, - -34.5986563 - ], - [ - 19.3474363, - -34.5244458 - ], - [ - 19.3285256, - -34.4534372 - ], - [ - 19.098001, - -34.449981 - ], - [ - 19.0725583, - -34.3802371 - ], - [ - 19.0023531, - -34.3525593 - ], - [ - 18.9520568, - -34.3949373 - ], - [ - 18.7975006, - -34.3936403 - ], - [ - 18.7984174, - -34.1016376 - ], - [ - 18.501748, - -34.1015292 - ], - [ - 18.4999545, - -34.3616945 - ], - [ - 18.4477325, - -34.3620007 - ], - [ - 18.4479944, - -34.3522691 - ], - [ - 18.3974362, - -34.3514041 - ], - [ - 18.3971742, - -34.3022959 - ], - [ - 18.3565705, - -34.3005647 - ], - [ - 18.3479258, - -34.2020436 - ], - [ - 18.2972095, - -34.1950274 - ], - [ - 18.2951139, - -33.9937138 - ], - [ - 18.3374474, - -33.9914079 - ], - [ - 18.3476638, - -33.8492427 - ], - [ - 18.3479258, - -33.781555 - ], - [ - 18.4124718, - -33.7448849 - ], - [ - 18.3615477, - -33.6501624 - ], - [ - 18.2992013, - -33.585591 - ], - [ - 18.2166839, - -33.448872 - ], - [ - 18.1389858, - -33.3974083 - ], - [ - 17.9473472, - -33.1602647 - ], - [ - 17.8855247, - -33.0575732 - ], - [ - 17.8485884, - -32.9668505 - ], - [ - 17.8396817, - -32.8507302 - ] - ] - ] - }, - { - "name": "South Tyrol Orthofoto 2011", - "type": "tms", - "template": "http://sdi.provincia.bz.it/geoserver/gwc/service/tms/1.0.0/WMTS_OF2011_APB-PAB@GoogleMapsCompatible@png8/{z}/{x}/{-y}.png", - "polygon": [ - [ - [ - 10.373383, - 46.213553 - ], - [ - 10.373383, - 47.098175 - ], - [ - 12.482758, - 47.098175 - ], - [ - 12.482758, - 46.213553 - ], - [ - 10.373383, - 46.213553 - ] - ] - ], - "id": "sdi.provinz.bz.it-WMTS_OF2011_APB-PAB" - }, - { - "name": "South Tyrol Topomap", - "type": "tms", - "template": "http://sdi.provincia.bz.it/geoserver/gwc/service/tms/1.0.0/WMTS_TOPOMAP_APB-PAB@GoogleMapsCompatible@png8/{z}/{x}/{-y}.png", - "polygon": [ - [ - [ - 10.373383, - 46.213553 - ], - [ - 10.373383, - 47.098175 - ], - [ - 12.482758, - 47.098175 - ], - [ - 12.482758, - 46.213553 - ], - [ - 10.373383, - 46.213553 - ] - ] - ], - "id": "sdi.provinz.bz.it-WMTS_TOPOMAP_APB-PAB" - }, - { - "name": "Stadt Uster Orthophoto 2008 10cm", - "type": "tms", - "template": "http://mapproxy.sosm.ch:8080/tiles/uster/EPSG900913/{zoom}/{x}/{y}.png?origin=nw", - "polygon": [ - [ - [ - 8.6, - 47.31 - ], - [ - 8.6, - 47.39 - ], - [ - 8.77, - 47.39 - ], - [ - 8.77, - 47.31 - ], - [ - 8.6, - 47.31 - ] - ] - ], - "terms_text": "Stadt Uster Vermessung Orthophoto 2008" - }, - { - "name": "Stevns (Denmark)", - "type": "tms", - "template": "http://{switch:a,b,c}.tile.openstreetmap.dk/stevns/2009/{zoom}/{x}/{y}.png", - "scaleExtent": [ - 0, - 20 - ], - "polygon": [ - [ - [ - 12.0913942, - 55.3491574 - ], - [ - 12.0943104, - 55.3842256 - ], - [ - 12.1573875, - 55.3833103 - ], - [ - 12.1587287, - 55.4013326 - ], - [ - 12.1903468, - 55.400558 - ], - [ - 12.1931411, - 55.4364665 - ], - [ - 12.2564251, - 55.4347995 - ], - [ - 12.2547073, - 55.4168882 - ], - [ - 12.3822489, - 55.4134349 - ], - [ - 12.3795942, - 55.3954143 - ], - [ - 12.4109213, - 55.3946958 - ], - [ - 12.409403, - 55.3766417 - ], - [ - 12.4407807, - 55.375779 - ], - [ - 12.4394142, - 55.3578314 - ], - [ - 12.4707413, - 55.3569971 - ], - [ - 12.4629475, - 55.2672214 - ], - [ - 12.4315633, - 55.2681491 - ], - [ - 12.430045, - 55.2502103 - ], - [ - 12.3672011, - 55.2519673 - ], - [ - 12.3656858, - 55.2340267 - ], - [ - 12.2714604, - 55.2366031 - ], - [ - 12.2744467, - 55.272476 - ], - [ - 12.2115654, - 55.2741475 - ], - [ - 12.2130078, - 55.2920322 - ], - [ - 12.1815665, - 55.2928638 - ], - [ - 12.183141, - 55.3107091 - ], - [ - 12.2144897, - 55.3100981 - ], - [ - 12.2159927, - 55.3279764 - ], - [ - 12.1214458, - 55.3303379 - ], - [ - 12.1229489, - 55.3483291 - ] - ] - ], - "terms_text": "Stevns Kommune" - }, - { - "name": "Surrey Air Survey", - "type": "tms", - "template": "http://gravitystorm.dev.openstreetmap.org/surrey/{zoom}/{x}/{y}.png", - "scaleExtent": [ - 8, - 19 - ], - "polygon": [ - [ - [ - -0.752478, - 51.0821941 - ], - [ - -0.7595183, - 51.0856254 - ], - [ - -0.8014342, - 51.1457917 - ], - [ - -0.8398864, - 51.1440686 - ], - [ - -0.8357665, - 51.1802397 - ], - [ - -0.8529549, - 51.2011266 - ], - [ - -0.8522683, - 51.2096231 - ], - [ - -0.8495217, - 51.217903 - ], - [ - -0.8266907, - 51.2403696 - ], - [ - -0.8120995, - 51.2469248 - ], - [ - -0.7736474, - 51.2459577 - ], - [ - -0.7544213, - 51.2381127 - ], - [ - -0.754078, - 51.233921 - ], - [ - -0.7446366, - 51.2333836 - ], - [ - -0.7430693, - 51.2847178 - ], - [ - -0.751503, - 51.3069524 - ], - [ - -0.7664376, - 51.3121032 - ], - [ - -0.7820588, - 51.3270157 - ], - [ - -0.7815438, - 51.3388135 - ], - [ - -0.7374268, - 51.3720456 - ], - [ - -0.7192307, - 51.3769748 - ], - [ - -0.6795769, - 51.3847961 - ], - [ - -0.6807786, - 51.3901523 - ], - [ - -0.6531411, - 51.3917591 - ], - [ - -0.6301385, - 51.3905808 - ], - [ - -0.6291085, - 51.3970074 - ], - [ - -0.6234437, - 51.3977572 - ], - [ - -0.613144, - 51.4295552 - ], - [ - -0.6002471, - 51.4459121 - ], - [ - -0.5867081, - 51.4445365 - ], - [ - -0.5762368, - 51.453202 - ], - [ - -0.5626755, - 51.4523462 - ], - [ - -0.547741, - 51.4469972 - ], - [ - -0.5372697, - 51.4448575 - ], - [ - -0.537098, - 51.4526671 - ], - [ - -0.5439644, - 51.4545926 - ], - [ - -0.5405312, - 51.4698865 - ], - [ - -0.5309182, - 51.4760881 - ], - [ - -0.5091172, - 51.4744843 - ], - [ - -0.5086022, - 51.4695657 - ], - [ - -0.4900628, - 51.4682825 - ], - [ - -0.4526406, - 51.4606894 - ], - [ - -0.4486924, - 51.4429316 - ], - [ - -0.4414826, - 51.4418616 - ], - [ - -0.4418259, - 51.4369394 - ], - [ - -0.4112702, - 51.4380095 - ], - [ - -0.4014855, - 51.4279498 - ], - [ - -0.3807145, - 51.4262372 - ], - [ - -0.3805428, - 51.4161749 - ], - [ - -0.3491288, - 51.4138195 - ], - [ - -0.3274994, - 51.4037544 - ], - [ - -0.3039818, - 51.3990424 - ], - [ - -0.3019219, - 51.3754747 - ], - [ - -0.309475, - 51.369688 - ], - [ - -0.3111916, - 51.3529669 - ], - [ - -0.2955704, - 51.3541462 - ], - [ - -0.2923089, - 51.3673303 - ], - [ - -0.2850991, - 51.3680805 - ], - [ - -0.2787476, - 51.3771891 - ], - [ - -0.2655297, - 51.3837247 - ], - [ - -0.2411538, - 51.3847961 - ], - [ - -0.2123147, - 51.3628288 - ], - [ - -0.2107697, - 51.3498578 - ], - [ - -0.190857, - 51.3502867 - ], - [ - -0.1542931, - 51.3338802 - ], - [ - -0.1496583, - 51.3057719 - ], - [ - -0.1074296, - 51.2966491 - ], - [ - -0.0887185, - 51.3099571 - ], - [ - -0.0878602, - 51.3220811 - ], - [ - -0.0652009, - 51.3215448 - ], - [ - -0.0641709, - 51.3264793 - ], - [ - -0.0519829, - 51.3263721 - ], - [ - -0.0528412, - 51.334631 - ], - [ - -0.0330779, - 51.3430876 - ], - [ - 0.0019187, - 51.3376339 - ], - [ - 0.0118751, - 51.3281956 - ], - [ - 0.013935, - 51.2994398 - ], - [ - 0.0202865, - 51.2994398 - ], - [ - 0.0240631, - 51.3072743 - ], - [ - 0.0331611, - 51.3086694 - ], - [ - 0.0455207, - 51.30545 - ], - [ - 0.0523872, - 51.2877392 - ], - [ - 0.0616569, - 51.2577764 - ], - [ - 0.0640602, - 51.2415518 - ], - [ - 0.0462074, - 51.2126342 - ], - [ - 0.0407142, - 51.2109136 - ], - [ - 0.0448341, - 51.1989753 - ], - [ - 0.0494689, - 51.1997283 - ], - [ - 0.0558204, - 51.1944573 - ], - [ - 0.0611419, - 51.1790713 - ], - [ - 0.0623435, - 51.1542061 - ], - [ - 0.0577087, - 51.1417146 - ], - [ - 0.0204582, - 51.1365447 - ], - [ - -0.0446015, - 51.1336364 - ], - [ - -0.1566964, - 51.1352522 - ], - [ - -0.1572114, - 51.1290043 - ], - [ - -0.2287942, - 51.1183379 - ], - [ - -0.2473336, - 51.1183379 - ], - [ - -0.2500802, - 51.1211394 - ], - [ - -0.299347, - 51.1137042 - ], - [ - -0.3221779, - 51.1119799 - ], - [ - -0.3223496, - 51.1058367 - ], - [ - -0.3596001, - 51.1019563 - ], - [ - -0.3589135, - 51.1113333 - ], - [ - -0.3863793, - 51.1117644 - ], - [ - -0.3869014, - 51.1062516 - ], - [ - -0.4281001, - 51.0947174 - ], - [ - -0.4856784, - 51.0951554 - ], - [ - -0.487135, - 51.0872266 - ], - [ - -0.5297404, - 51.0865404 - ], - [ - -0.5302259, - 51.0789914 - ], - [ - -0.61046, - 51.076551 - ], - [ - -0.6099745, - 51.080669 - ], - [ - -0.6577994, - 51.0792202 - ], - [ - -0.6582849, - 51.0743394 - ], - [ - -0.6836539, - 51.0707547 - ], - [ - -0.6997979, - 51.070831 - ], - [ - -0.7296581, - 51.0744919 - ] - ] - ] - }, - { - "name": "Toulouse - Orthophotoplan 2007", - "type": "tms", - "template": "http://wms.openstreetmap.fr/tms/1.0.0/toulouse_ortho2007/{zoom}/{x}/{y}", - "scaleExtent": [ - 0, - 22 - ], - "polygon": [ - [ - [ - 1.1919978, - 43.6328791 - ], - [ - 1.2015377, - 43.6329729 - ], - [ - 1.2011107, - 43.6554932 - ], - [ - 1.2227985, - 43.6557029 - ], - [ - 1.2226231, - 43.6653353 - ], - [ - 1.2275341, - 43.6653849 - ], - [ - 1.2275417, - 43.6656387 - ], - [ - 1.2337568, - 43.6656883 - ], - [ - 1.2337644, - 43.6650153 - ], - [ - 1.2351218, - 43.6650319 - ], - [ - 1.2350913, - 43.6670729 - ], - [ - 1.2443566, - 43.6671556 - ], - [ - 1.2441584, - 43.6743925 - ], - [ - 1.2493973, - 43.6744256 - ], - [ - 1.2493973, - 43.6746628 - ], - [ - 1.2555666, - 43.6747234 - ], - [ - 1.2555742, - 43.6744532 - ], - [ - 1.2569545, - 43.6744697 - ], - [ - 1.2568782, - 43.678529 - ], - [ - 1.2874873, - 43.6788257 - ], - [ - 1.2870803, - 43.7013229 - ], - [ - 1.3088219, - 43.7014632 - ], - [ - 1.3086493, - 43.7127673 - ], - [ - 1.3303262, - 43.7129544 - ], - [ - 1.3300242, - 43.7305221 - ], - [ - 1.3367106, - 43.7305845 - ], - [ - 1.3367322, - 43.7312235 - ], - [ - 1.3734338, - 43.7310456 - ], - [ - 1.3735848, - 43.7245772 - ], - [ - 1.4604504, - 43.7252947 - ], - [ - 1.4607783, - 43.7028034 - ], - [ - 1.4824875, - 43.7029516 - ], - [ - 1.4829828, - 43.6692071 - ], - [ - 1.5046832, - 43.6693616 - ], - [ - 1.5048383, - 43.6581174 - ], - [ - 1.5265475, - 43.6582656 - ], - [ - 1.5266945, - 43.6470298 - ], - [ - 1.548368, - 43.6471633 - ], - [ - 1.5485357, - 43.6359385 - ], - [ - 1.5702172, - 43.636082 - ], - [ - 1.5705123, - 43.6135777 - ], - [ - 1.5488166, - 43.6134276 - ], - [ - 1.549097, - 43.5909479 - ], - [ - 1.5707695, - 43.5910694 - ], - [ - 1.5709373, - 43.5798341 - ], - [ - 1.5793714, - 43.5798894 - ], - [ - 1.5794782, - 43.5737682 - ], - [ - 1.5809119, - 43.5737792 - ], - [ - 1.5810859, - 43.5573794 - ], - [ - 1.5712334, - 43.5573131 - ], - [ - 1.5716504, - 43.5235497 - ], - [ - 1.3984804, - 43.5222618 - ], - [ - 1.3986509, - 43.5110113 - ], - [ - 1.3120959, - 43.5102543 - ], - [ - 1.3118968, - 43.5215192 - ], - [ - 1.2902569, - 43.5213126 - ], - [ - 1.2898637, - 43.5438168 - ], - [ - 1.311517, - 43.5440133 - ], - [ - 1.3113271, - 43.5552596 - ], - [ - 1.3036924, - 43.5551924 - ], - [ - 1.3036117, - 43.5595099 - ], - [ - 1.2955449, - 43.5594317 - ], - [ - 1.2955449, - 43.5595489 - ], - [ - 1.2895595, - 43.5594473 - ], - [ - 1.2892899, - 43.5775366 - ], - [ - 1.2675698, - 43.5773647 - ], - [ - 1.2673973, - 43.5886141 - ], - [ - 1.25355, - 43.5885047 - ], - [ - 1.2533774, - 43.5956282 - ], - [ - 1.2518029, - 43.5956282 - ], - [ - 1.2518029, - 43.5949409 - ], - [ - 1.2350437, - 43.5947847 - ], - [ - 1.2350437, - 43.5945972 - ], - [ - 1.2239572, - 43.5945972 - ], - [ - 1.2239357, - 43.5994708 - ], - [ - 1.2139708, - 43.599299 - ], - [ - 1.2138845, - 43.6046408 - ], - [ - 1.2020647, - 43.6044846 - ], - [ - 1.2019464, - 43.61048 - ], - [ - 1.1924294, - 43.6103695 - ] - ] - ], - "terms_url": "https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData", - "terms_text": "ToulouseMetropole" - }, - { - "name": "Toulouse - Orthophotoplan 2011", - "type": "tms", - "template": "http://wms.openstreetmap.fr/tms/1.0.0/toulouse_ortho2011/{zoom}/{x}/{y}", - "scaleExtent": [ - 0, - 22 - ], - "polygon": [ - [ - [ - 1.1135067, - 43.6867566 - ], - [ - 1.1351836, - 43.6870842 - ], - [ - 1.1348907, - 43.6983471 - ], - [ - 1.1782867, - 43.6990338 - ], - [ - 1.1779903, - 43.7102786 - ], - [ - 1.1996591, - 43.7106144 - ], - [ - 1.1993387, - 43.7218722 - ], - [ - 1.2427356, - 43.7225269 - ], - [ - 1.2424336, - 43.7337491 - ], - [ - 1.2641536, - 43.734092 - ], - [ - 1.2638301, - 43.7453588 - ], - [ - 1.2855285, - 43.7456548 - ], - [ - 1.2852481, - 43.756935 - ], - [ - 1.306925, - 43.757231 - ], - [ - 1.3066446, - 43.7684779 - ], - [ - 1.3283431, - 43.7687894 - ], - [ - 1.3280842, - 43.780034 - ], - [ - 1.4367275, - 43.7815757 - ], - [ - 1.4373098, - 43.7591004 - ], - [ - 1.4590083, - 43.7593653 - ], - [ - 1.4593318, - 43.7481479 - ], - [ - 1.4810303, - 43.7483972 - ], - [ - 1.4813322, - 43.7371777 - ], - [ - 1.5030307, - 43.7374115 - ], - [ - 1.5035915, - 43.7149664 - ], - [ - 1.5253115, - 43.7151846 - ], - [ - 1.5256135, - 43.7040057 - ], - [ - 1.5472688, - 43.7042552 - ], - [ - 1.5475708, - 43.6930431 - ], - [ - 1.5692045, - 43.6932926 - ], - [ - 1.5695712, - 43.6820316 - ], - [ - 1.5912049, - 43.6822656 - ], - [ - 1.5917441, - 43.6597998 - ], - [ - 1.613421, - 43.6600339 - ], - [ - 1.613723, - 43.6488291 - ], - [ - 1.6353783, - 43.6490788 - ], - [ - 1.6384146, - 43.5140731 - ], - [ - 1.2921649, - 43.5094658 - ], - [ - 1.2918629, - 43.5206966 - ], - [ - 1.2702076, - 43.5203994 - ], - [ - 1.2698841, - 43.5316437 - ], - [ - 1.2482288, - 43.531331 - ], - [ - 1.2476048, - 43.5537788 - ], - [ - 1.2259628, - 43.5534914 - ], - [ - 1.2256819, - 43.564716 - ], - [ - 1.2039835, - 43.564419 - ], - [ - 1.2033148, - 43.5869049 - ], - [ - 1.1816164, - 43.5865611 - ], - [ - 1.1810237, - 43.6090368 - ], - [ - 1.1592821, - 43.6086932 - ], - [ - 1.1589585, - 43.6199523 - ], - [ - 1.1372601, - 43.6196244 - ], - [ - 1.1365933, - 43.642094 - ], - [ - 1.1149055, - 43.6417629 - ] - ] - ], - "terms_url": "https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData", - "terms_text": "ToulouseMetropole" - }, - { - "name": "Tours - Orthophotos 2008", - "type": "tms", - "template": "http://tms.mapspot.ge/tms/2/nonstandard/{zoom}/{x}/{y}.jpeg", - "polygon": [ - [ - [ - 0.5457462, - 47.465264 - ], - [ - 0.54585, - 47.4608163 - ], - [ - 0.5392188, - 47.4606983 - ], - [ - 0.5393484, - 47.456243 - ], - [ - 0.5327959, - 47.4561003 - ], - [ - 0.5329011, - 47.451565 - ], - [ - 0.52619, - 47.4514013 - ], - [ - 0.5265854, - 47.4424884 - ], - [ - 0.5000941, - 47.4420739 - ], - [ - 0.5002357, - 47.4375835 - ], - [ - 0.4936014, - 47.4374324 - ], - [ - 0.4937, - 47.4329285 - ], - [ - 0.4606141, - 47.4324593 - ], - [ - 0.4607248, - 47.4279827 - ], - [ - 0.4541016, - 47.4278125 - ], - [ - 0.454932, - 47.4053921 - ], - [ - 0.4615431, - 47.4054476 - ], - [ - 0.4619097, - 47.3964924 - ], - [ - 0.4684346, - 47.3966005 - ], - [ - 0.4691319, - 47.3786415 - ], - [ - 0.4757125, - 47.3787609 - ], - [ - 0.4762116, - 47.3652018 - ], - [ - 0.4828297, - 47.3653499 - ], - [ - 0.4832223, - 47.3518574 - ], - [ - 0.5097927, - 47.3522592 - ], - [ - 0.5095688, - 47.3567713 - ], - [ - 0.5227698, - 47.3569785 - ], - [ - 0.5226429, - 47.3614867 - ], - [ - 0.5490721, - 47.3618878 - ], - [ - 0.5489087, - 47.3663307 - ], - [ - 0.5555159, - 47.3664985 - ], - [ - 0.5559105, - 47.3575522 - ], - [ - 0.6152789, - 47.358407 - ], - [ - 0.6152963, - 47.362893 - ], - [ - 0.6285093, - 47.3630936 - ], - [ - 0.6288256, - 47.353987 - ], - [ - 0.6155012, - 47.3538823 - ], - [ - 0.6157682, - 47.3493424 - ], - [ - 0.6090956, - 47.3492991 - ], - [ - 0.6094735, - 47.3402962 - ], - [ - 0.6160477, - 47.3404448 - ], - [ - 0.616083, - 47.3369074 - ], - [ - 0.77497, - 47.3388218 - ], - [ - 0.7745786, - 47.351628 - ], - [ - 0.7680363, - 47.3515901 - ], - [ - 0.767589, - 47.3605298 - ], - [ - 0.7742443, - 47.3606238 - ], - [ - 0.7733465, - 47.3921266 - ], - [ - 0.7667434, - 47.3920195 - ], - [ - 0.7664411, - 47.4010837 - ], - [ - 0.7730647, - 47.4011115 - ], - [ - 0.7728868, - 47.4101297 - ], - [ - 0.7661849, - 47.4100226 - ], - [ - 0.7660267, - 47.4145044 - ], - [ - 0.7527613, - 47.4143038 - ], - [ - 0.7529788, - 47.4098086 - ], - [ - 0.7462373, - 47.4097016 - ], - [ - 0.7459424, - 47.4232208 - ], - [ - 0.7392324, - 47.4231451 - ], - [ - 0.738869, - 47.4366116 - ], - [ - 0.7323267, - 47.4365171 - ], - [ - 0.7321869, - 47.4410556 - ], - [ - 0.7255048, - 47.44098 - ], - [ - 0.7254209, - 47.4453479 - ], - [ - 0.7318793, - 47.4454803 - ], - [ - 0.7318514, - 47.4501126 - ], - [ - 0.7384496, - 47.450226 - ], - [ - 0.7383098, - 47.454631 - ], - [ - 0.7449359, - 47.4547444 - ], - [ - 0.7443209, - 47.4771985 - ], - [ - 0.7310685, - 47.4769717 - ], - [ - 0.7309008, - 47.4815445 - ], - [ - 0.7176205, - 47.4812611 - ], - [ - 0.7177883, - 47.4768394 - ], - [ - 0.69777, - 47.4764993 - ], - [ - 0.6980496, - 47.4719827 - ], - [ - 0.6914514, - 47.4718882 - ], - [ - 0.6917309, - 47.4630241 - ], - [ - 0.6851048, - 47.4629295 - ], - [ - 0.684937, - 47.4673524 - ], - [ - 0.678255, - 47.4673335 - ], - [ - 0.6779754, - 47.4762158 - ], - [ - 0.6714051, - 47.4761592 - ], - [ - 0.6710417, - 47.4881952 - ], - [ - 0.6577334, - 47.4879685 - ], - [ - 0.6578173, - 47.48504 - ], - [ - 0.6511911, - 47.4848322 - ], - [ - 0.6514707, - 47.4758568 - ], - [ - 0.6448166, - 47.4757245 - ], - [ - 0.6449284, - 47.4712646 - ], - [ - 0.6117976, - 47.4707543 - ], - [ - 0.6118815, - 47.4663129 - ], - [ - 0.6052833, - 47.4661239 - ], - [ - 0.6054231, - 47.4616631 - ], - [ - 0.5988808, - 47.4615497 - ], - [ - 0.5990206, - 47.4570886 - ], - [ - 0.572488, - 47.4566916 - ], - [ - 0.5721805, - 47.4656513 - ] - ] - ], - "terms_url": "http://wiki.openstreetmap.org/wiki/Tours/Orthophoto", - "terms_text": "Orthophoto Tour(s) Plus 2008" - }, - { - "name": "Tours - Orthophotos 2008-2010", - "type": "tms", - "template": "http://wms.openstreetmap.fr/tms/1.0.0/tours/{zoom}/{x}/{y}", - "scaleExtent": [ - 0, - 20 - ], - "polygon": [ - [ - [ - 0.5457462, - 47.465264 - ], - [ - 0.54585, - 47.4608163 - ], - [ - 0.5392188, - 47.4606983 - ], - [ - 0.5393484, - 47.456243 - ], - [ - 0.5327959, - 47.4561003 - ], - [ - 0.5329011, - 47.451565 - ], - [ - 0.52619, - 47.4514013 - ], - [ - 0.5265854, - 47.4424884 - ], - [ - 0.5000941, - 47.4420739 - ], - [ - 0.5002357, - 47.4375835 - ], - [ - 0.4936014, - 47.4374324 - ], - [ - 0.4937, - 47.4329285 - ], - [ - 0.4606141, - 47.4324593 - ], - [ - 0.4607248, - 47.4279827 - ], - [ - 0.4541016, - 47.4278125 - ], - [ - 0.454932, - 47.4053921 - ], - [ - 0.4615431, - 47.4054476 - ], - [ - 0.4619097, - 47.3964924 - ], - [ - 0.4684346, - 47.3966005 - ], - [ - 0.4691319, - 47.3786415 - ], - [ - 0.4757125, - 47.3787609 - ], - [ - 0.4762116, - 47.3652018 - ], - [ - 0.4828297, - 47.3653499 - ], - [ - 0.4829611, - 47.3608321 - ], - [ - 0.4763543, - 47.360743 - ], - [ - 0.476654, - 47.3517263 - ], - [ - 0.4700497, - 47.3516186 - ], - [ - 0.4701971, - 47.3471313 - ], - [ - 0.4637503, - 47.3470104 - ], - [ - 0.4571425, - 47.3424146 - ], - [ - 0.4572922, - 47.3379061 - ], - [ - 0.4506741, - 47.3378081 - ], - [ - 0.4508379, - 47.3333051 - ], - [ - 0.4442212, - 47.3332032 - ], - [ - 0.4443809, - 47.328711 - ], - [ - 0.4311392, - 47.3284977 - ], - [ - 0.4316262, - 47.3150004 - ], - [ - 0.4382432, - 47.3151136 - ], - [ - 0.4383815, - 47.3106174 - ], - [ - 0.4714487, - 47.3111374 - ], - [ - 0.4713096, - 47.3156565 - ], - [ - 0.477888, - 47.3157542 - ], - [ - 0.4780733, - 47.3112802 - ], - [ - 0.4846826, - 47.3113639 - ], - [ - 0.4848576, - 47.3068686 - ], - [ - 0.4914359, - 47.3069803 - ], - [ - 0.491745, - 47.2979733 - ], - [ - 0.4851578, - 47.2978722 - ], - [ - 0.4854269, - 47.2888744 - ], - [ - 0.4788485, - 47.2887697 - ], - [ - 0.4791574, - 47.2797818 - ], - [ - 0.4857769, - 47.2799005 - ], - [ - 0.4859107, - 47.2753885 - ], - [ - 0.492539, - 47.2755029 - ], - [ - 0.4926669, - 47.2710127 - ], - [ - 0.4992986, - 47.2711066 - ], - [ - 0.4994296, - 47.2666116 - ], - [ - 0.5192658, - 47.2669245 - ], - [ - 0.5194225, - 47.2624231 - ], - [ - 0.5260186, - 47.2625205 - ], - [ - 0.5258735, - 47.2670183 - ], - [ - 0.5456972, - 47.2673383 - ], - [ - 0.5455537, - 47.2718283 - ], - [ - 0.5587737, - 47.2720366 - ], - [ - 0.5586259, - 47.2765185 - ], - [ - 0.5652252, - 47.2766278 - ], - [ - 0.5650848, - 47.2811206 - ], - [ - 0.5716753, - 47.2812285 - ], - [ - 0.5715223, - 47.2857217 - ], - [ - 0.5781436, - 47.2858299 - ], - [ - 0.5779914, - 47.2903294 - ], - [ - 0.5846023, - 47.2904263 - ], - [ - 0.5843076, - 47.2994231 - ], - [ - 0.597499, - 47.2996094 - ], - [ - 0.5976637, - 47.2951375 - ], - [ - 0.6571596, - 47.2960036 - ], - [ - 0.6572988, - 47.2915091 - ], - [ - 0.6705019, - 47.2917186 - ], - [ - 0.6703475, - 47.2962082 - ], - [ - 0.6836175, - 47.2963688 - ], - [ - 0.6834322, - 47.3008929 - ], - [ - 0.690062, - 47.3009558 - ], - [ - 0.6899241, - 47.3054703 - ], - [ - 0.7362019, - 47.3061157 - ], - [ - 0.7360848, - 47.3106063 - ], - [ - 0.7559022, - 47.3108935 - ], - [ - 0.7557718, - 47.315392 - ], - [ - 0.7623755, - 47.3154716 - ], - [ - 0.7622314, - 47.3199941 - ], - [ - 0.7754911, - 47.3201546 - ], - [ - 0.77497, - 47.3388218 - ], - [ - 0.7745786, - 47.351628 - ], - [ - 0.7680363, - 47.3515901 - ], - [ - 0.767589, - 47.3605298 - ], - [ - 0.7742443, - 47.3606238 - ], - [ - 0.7733465, - 47.3921266 - ], - [ - 0.7667434, - 47.3920195 - ], - [ - 0.7664411, - 47.4010837 - ], - [ - 0.7730647, - 47.4011115 - ], - [ - 0.7728868, - 47.4101297 - ], - [ - 0.7661849, - 47.4100226 - ], - [ - 0.7660267, - 47.4145044 - ], - [ - 0.7527613, - 47.4143038 - ], - [ - 0.7529788, - 47.4098086 - ], - [ - 0.7462373, - 47.4097016 - ], - [ - 0.7459424, - 47.4232208 - ], - [ - 0.7392324, - 47.4231451 - ], - [ - 0.738869, - 47.4366116 - ], - [ - 0.7323267, - 47.4365171 - ], - [ - 0.7321869, - 47.4410556 - ], - [ - 0.7255048, - 47.44098 - ], - [ - 0.7254209, - 47.4453479 - ], - [ - 0.7318793, - 47.4454803 - ], - [ - 0.7318514, - 47.4501126 - ], - [ - 0.7384496, - 47.450226 - ], - [ - 0.7383098, - 47.454631 - ], - [ - 0.7449359, - 47.4547444 - ], - [ - 0.7443209, - 47.4771985 - ], - [ - 0.7310685, - 47.4769717 - ], - [ - 0.7309008, - 47.4815445 - ], - [ - 0.7176205, - 47.4812611 - ], - [ - 0.7177883, - 47.4768394 - ], - [ - 0.69777, - 47.4764993 - ], - [ - 0.6980496, - 47.4719827 - ], - [ - 0.6914514, - 47.4718882 - ], - [ - 0.6917309, - 47.4630241 - ], - [ - 0.6851048, - 47.4629295 - ], - [ - 0.684937, - 47.4673524 - ], - [ - 0.678255, - 47.4673335 - ], - [ - 0.6779754, - 47.4762158 - ], - [ - 0.6714051, - 47.4761592 - ], - [ - 0.6710417, - 47.4881952 - ], - [ - 0.6577334, - 47.4879685 - ], - [ - 0.6578173, - 47.48504 - ], - [ - 0.6511911, - 47.4848322 - ], - [ - 0.6514707, - 47.4758568 - ], - [ - 0.6448166, - 47.4757245 - ], - [ - 0.6449284, - 47.4712646 - ], - [ - 0.6117976, - 47.4707543 - ], - [ - 0.6118815, - 47.4663129 - ], - [ - 0.6052833, - 47.4661239 - ], - [ - 0.6054231, - 47.4616631 - ], - [ - 0.5988808, - 47.4615497 - ], - [ - 0.5990206, - 47.4570886 - ], - [ - 0.572488, - 47.4566916 - ], - [ - 0.5721805, - 47.4656513 - ] - ] - ], - "terms_url": "http://wiki.openstreetmap.org/wiki/Tours/Orthophoto", - "terms_text": "Orthophoto Tour(s) Plus 2008" - }, - { - "name": "USGS Large Scale Imagery", - "type": "tms", - "template": "http://{switch:a,b,c}.tile.openstreetmap.us/usgs_large_scale/{zoom}/{x}/{y}.jpg", - "scaleExtent": [ - 12, - 20 - ], - "polygon": [ - [ - [ - -123.2549305, - 48.7529029 - ], - [ - -123.2549305, - 48.5592263 - ], - [ - -123.192224, - 48.5592263 - ], - [ - -123.192224, - 48.4348366 - ], - [ - -122.9419646, - 48.4348366 - ], - [ - -122.9419646, - 48.3720812 - ], - [ - -122.8806229, - 48.3720812 - ], - [ - -122.8806229, - 48.3094763 - ], - [ - -122.8167566, - 48.3094763 - ], - [ - -122.8167566, - 48.1904587 - ], - [ - -123.0041133, - 48.1904587 - ], - [ - -123.0041133, - 48.1275918 - ], - [ - -123.058416, - 48.1275918 - ], - [ - -123.058416, - 48.190514 - ], - [ - -123.254113, - 48.190514 - ], - [ - -123.254113, - 48.1274982 - ], - [ - -123.3706593, - 48.1274982 - ], - [ - -123.3706593, - 48.1908403 - ], - [ - -124.0582632, - 48.1908403 - ], - [ - -124.0582632, - 48.253442 - ], - [ - -124.1815163, - 48.253442 - ], - [ - -124.1815163, - 48.3164666 - ], - [ - -124.4319117, - 48.3164666 - ], - [ - -124.4319117, - 48.3782613 - ], - [ - -124.5564618, - 48.3782613 - ], - [ - -124.5564618, - 48.4408305 - ], - [ - -124.7555107, - 48.4408305 - ], - [ - -124.7555107, - 48.1914986 - ], - [ - -124.8185282, - 48.1914986 - ], - [ - -124.8185282, - 48.1228381 - ], - [ - -124.7552951, - 48.1228381 - ], - [ - -124.7552951, - 47.5535253 - ], - [ - -124.3812108, - 47.5535253 - ], - [ - -124.3812108, - 47.1218696 - ], - [ - -124.1928897, - 47.1218696 - ], - [ - -124.1928897, - 43.7569431 - ], - [ - -124.4443382, - 43.7569431 - ], - [ - -124.4443382, - 43.1425556 - ], - [ - -124.6398855, - 43.1425556 - ], - [ - -124.6398855, - 42.6194503 - ], - [ - -124.4438525, - 42.6194503 - ], - [ - -124.4438525, - 39.8080662 - ], - [ - -123.8815685, - 39.8080662 - ], - [ - -123.8815685, - 39.1102825 - ], - [ - -123.75805, - 39.1102825 - ], - [ - -123.75805, - 38.4968799 - ], - [ - -123.2702803, - 38.4968799 - ], - [ - -123.2702803, - 37.9331905 - ], - [ - -122.8148084, - 37.9331905 - ], - [ - -122.8148084, - 37.8019606 - ], - [ - -122.5664316, - 37.8019606 - ], - [ - -122.5664316, - 36.9319611 - ], - [ - -121.8784026, - 36.9319611 - ], - [ - -121.8784026, - 36.6897596 - ], - [ - -122.0034748, - 36.6897596 - ], - [ - -122.0034748, - 36.4341056 - ], - [ - -121.9414159, - 36.4341056 - ], - [ - -121.9414159, - 35.9297636 - ], - [ - -121.5040977, - 35.9297636 - ], - [ - -121.5040977, - 35.8100273 - ], - [ - -121.3790276, - 35.8100273 - ], - [ - -121.3790276, - 35.4239164 - ], - [ - -120.9426515, - 35.4239164 - ], - [ - -120.9426515, - 35.1849683 - ], - [ - -120.8171978, - 35.1849683 - ], - [ - -120.8171978, - 35.1219894 - ], - [ - -120.6918447, - 35.1219894 - ], - [ - -120.6918447, - 34.4966794 - ], - [ - -120.5045898, - 34.4966794 - ], - [ - -120.5045898, - 34.4339651 - ], - [ - -120.0078775, - 34.4339651 - ], - [ - -120.0078775, - 34.3682626 - ], - [ - -119.5283517, - 34.3682626 - ], - [ - -119.5283517, - 34.0576434 - ], - [ - -119.0060985, - 34.0576434 - ], - [ - -119.0060985, - 33.9975267 - ], - [ - -118.5046259, - 33.9975267 - ], - [ - -118.5046259, - 33.8694631 - ], - [ - -118.4413209, - 33.8694631 - ], - [ - -118.4413209, - 33.6865253 - ], - [ - -118.066912, - 33.6865253 - ], - [ - -118.066912, - 33.3063832 - ], - [ - -117.5030045, - 33.3063832 - ], - [ - -117.5030045, - 33.0500337 - ], - [ - -117.3188195, - 33.0500337 - ], - [ - -117.3188195, - 32.6205888 - ], - [ - -117.1917023, - 32.6205888 - ], - [ - -117.1917023, - 32.4974566 - ], - [ - -116.746496, - 32.4974566 - ], - [ - -116.746496, - 32.5609161 - ], - [ - -115.9970138, - 32.5609161 - ], - [ - -115.9970138, - 32.6264942 - ], - [ - -114.8808125, - 32.6264942 - ], - [ - -114.8808125, - 32.4340796 - ], - [ - -114.6294474, - 32.4340796 - ], - [ - -114.6294474, - 32.3731636 - ], - [ - -114.4447437, - 32.3731636 - ], - [ - -114.4447437, - 32.3075418 - ], - [ - -114.2557628, - 32.3075418 - ], - [ - -114.2557628, - 32.2444561 - ], - [ - -114.0680274, - 32.2444561 - ], - [ - -114.0680274, - 32.1829113 - ], - [ - -113.8166499, - 32.1829113 - ], - [ - -113.8166499, - 32.1207622 - ], - [ - -113.6307421, - 32.1207622 - ], - [ - -113.6307421, - 32.0565099 - ], - [ - -113.4417495, - 32.0565099 - ], - [ - -113.4417495, - 31.9984372 - ], - [ - -113.2546027, - 31.9984372 - ], - [ - -113.2546027, - 31.9325434 - ], - [ - -113.068072, - 31.9325434 - ], - [ - -113.068072, - 31.8718062 - ], - [ - -112.8161105, - 31.8718062 - ], - [ - -112.8161105, - 31.8104171 - ], - [ - -112.6308756, - 31.8104171 - ], - [ - -112.6308756, - 31.7464723 - ], - [ - -112.4418918, - 31.7464723 - ], - [ - -112.4418918, - 31.6856001 - ], - [ - -112.257192, - 31.6856001 - ], - [ - -112.257192, - 31.6210352 - ], - [ - -112.0033787, - 31.6210352 - ], - [ - -112.0033787, - 31.559584 - ], - [ - -111.815619, - 31.559584 - ], - [ - -111.815619, - 31.4970238 - ], - [ - -111.6278586, - 31.4970238 - ], - [ - -111.6278586, - 31.4339867 - ], - [ - -111.4418978, - 31.4339867 - ], - [ - -111.4418978, - 31.3733859 - ], - [ - -111.2559708, - 31.3733859 - ], - [ - -111.2559708, - 31.3113225 - ], - [ - -108.1845822, - 31.3113225 - ], - [ - -108.1845822, - 31.7459502 - ], - [ - -106.5065055, - 31.7459502 - ], - [ - -106.5065055, - 31.6842308 - ], - [ - -106.3797265, - 31.6842308 - ], - [ - -106.3797265, - 31.621752 - ], - [ - -106.317434, - 31.621752 - ], - [ - -106.317434, - 31.4968167 - ], - [ - -106.2551769, - 31.4968167 - ], - [ - -106.2551769, - 31.4344889 - ], - [ - -106.1924698, - 31.4344889 - ], - [ - -106.1924698, - 31.3721296 - ], - [ - -106.0039212, - 31.3721296 - ], - [ - -106.0039212, - 31.309328 - ], - [ - -105.9416582, - 31.309328 - ], - [ - -105.9416582, - 31.2457547 - ], - [ - -105.8798174, - 31.2457547 - ], - [ - -105.8798174, - 31.1836194 - ], - [ - -105.8162349, - 31.1836194 - ], - [ - -105.8162349, - 31.1207155 - ], - [ - -105.6921198, - 31.1207155 - ], - [ - -105.6921198, - 31.0584835 - ], - [ - -105.6302881, - 31.0584835 - ], - [ - -105.6302881, - 30.9328271 - ], - [ - -105.5044418, - 30.9328271 - ], - [ - -105.5044418, - 30.8715864 - ], - [ - -105.4412973, - 30.8715864 - ], - [ - -105.4412973, - 30.808463 - ], - [ - -105.3781497, - 30.808463 - ], - [ - -105.3781497, - 30.7471828 - ], - [ - -105.1904658, - 30.7471828 - ], - [ - -105.1904658, - 30.6843231 - ], - [ - -105.1286244, - 30.6843231 - ], - [ - -105.1286244, - 30.6199737 - ], - [ - -105.0036504, - 30.6199737 - ], - [ - -105.0036504, - 30.5589058 - ], - [ - -104.9417962, - 30.5589058 - ], - [ - -104.9417962, - 30.4963236 - ], - [ - -104.8782018, - 30.4963236 - ], - [ - -104.8782018, - 30.3098261 - ], - [ - -104.8155257, - 30.3098261 - ], - [ - -104.8155257, - 30.2478305 - ], - [ - -104.7536079, - 30.2478305 - ], - [ - -104.7536079, - 29.9353916 - ], - [ - -104.690949, - 29.9353916 - ], - [ - -104.690949, - 29.8090156 - ], - [ - -104.6291301, - 29.8090156 - ], - [ - -104.6291301, - 29.6843577 - ], - [ - -104.5659869, - 29.6843577 - ], - [ - -104.5659869, - 29.6223459 - ], - [ - -104.5037188, - 29.6223459 - ], - [ - -104.5037188, - 29.5595436 - ], - [ - -104.4410072, - 29.5595436 - ], - [ - -104.4410072, - 29.4974832 - ], - [ - -104.2537551, - 29.4974832 - ], - [ - -104.2537551, - 29.3716718 - ], - [ - -104.1291984, - 29.3716718 - ], - [ - -104.1291984, - 29.3091621 - ], - [ - -104.0688737, - 29.3091621 - ], - [ - -104.0688737, - 29.2467276 - ], - [ - -103.8187309, - 29.2467276 - ], - [ - -103.8187309, - 29.1843076 - ], - [ - -103.755736, - 29.1843076 - ], - [ - -103.755736, - 29.1223174 - ], - [ - -103.5667542, - 29.1223174 - ], - [ - -103.5667542, - 29.0598119 - ], - [ - -103.5049819, - 29.0598119 - ], - [ - -103.5049819, - 28.9967506 - ], - [ - -103.3165753, - 28.9967506 - ], - [ - -103.3165753, - 28.9346923 - ], - [ - -103.0597572, - 28.9346923 - ], - [ - -103.0597572, - 29.0592965 - ], - [ - -102.9979694, - 29.0592965 - ], - [ - -102.9979694, - 29.1212855 - ], - [ - -102.9331397, - 29.1212855 - ], - [ - -102.9331397, - 29.1848575 - ], - [ - -102.8095989, - 29.1848575 - ], - [ - -102.8095989, - 29.2526154 - ], - [ - -102.8701345, - 29.2526154 - ], - [ - -102.8701345, - 29.308096 - ], - [ - -102.8096681, - 29.308096 - ], - [ - -102.8096681, - 29.3715484 - ], - [ - -102.7475655, - 29.3715484 - ], - [ - -102.7475655, - 29.5581899 - ], - [ - -102.684554, - 29.5581899 - ], - [ - -102.684554, - 29.6847655 - ], - [ - -102.4967764, - 29.6847655 - ], - [ - -102.4967764, - 29.7457694 - ], - [ - -102.3086647, - 29.7457694 - ], - [ - -102.3086647, - 29.8086627 - ], - [ - -102.1909323, - 29.8086627 - ], - [ - -102.1909323, - 29.7460097 - ], - [ - -101.5049914, - 29.7460097 - ], - [ - -101.5049914, - 29.6846777 - ], - [ - -101.3805796, - 29.6846777 - ], - [ - -101.3805796, - 29.5594459 - ], - [ - -101.3175057, - 29.5594459 - ], - [ - -101.3175057, - 29.4958934 - ], - [ - -101.1910075, - 29.4958934 - ], - [ - -101.1910075, - 29.4326115 - ], - [ - -101.067501, - 29.4326115 - ], - [ - -101.067501, - 29.308808 - ], - [ - -100.9418897, - 29.308808 - ], - [ - -100.9418897, - 29.2456231 - ], - [ - -100.8167271, - 29.2456231 - ], - [ - -100.8167271, - 29.1190449 - ], - [ - -100.7522672, - 29.1190449 - ], - [ - -100.7522672, - 29.0578214 - ], - [ - -100.6925358, - 29.0578214 - ], - [ - -100.6925358, - 28.8720431 - ], - [ - -100.6290158, - 28.8720431 - ], - [ - -100.6290158, - 28.8095363 - ], - [ - -100.5679901, - 28.8095363 - ], - [ - -100.5679901, - 28.622554 - ], - [ - -100.5040411, - 28.622554 - ], - [ - -100.5040411, - 28.5583804 - ], - [ - -100.4421832, - 28.5583804 - ], - [ - -100.4421832, - 28.4968266 - ], - [ - -100.379434, - 28.4968266 - ], - [ - -100.379434, - 28.3092865 - ], - [ - -100.3171942, - 28.3092865 - ], - [ - -100.3171942, - 28.1835681 - ], - [ - -100.254483, - 28.1835681 - ], - [ - -100.254483, - 28.1213885 - ], - [ - -100.1282282, - 28.1213885 - ], - [ - -100.1282282, - 28.059215 - ], - [ - -100.0659537, - 28.059215 - ], - [ - -100.0659537, - 27.9966087 - ], - [ - -100.0023855, - 27.9966087 - ], - [ - -100.0023855, - 27.9332152 - ], - [ - -99.9426497, - 27.9332152 - ], - [ - -99.9426497, - 27.7454658 - ], - [ - -99.816851, - 27.7454658 - ], - [ - -99.816851, - 27.6834301 - ], - [ - -99.7541346, - 27.6834301 - ], - [ - -99.7541346, - 27.6221543 - ], - [ - -99.6291629, - 27.6221543 - ], - [ - -99.6291629, - 27.5588977 - ], - [ - -99.5672838, - 27.5588977 - ], - [ - -99.5672838, - 27.4353752 - ], - [ - -99.5041798, - 27.4353752 - ], - [ - -99.5041798, - 27.3774021 - ], - [ - -99.5671796, - 27.3774021 - ], - [ - -99.5671796, - 27.2463726 - ], - [ - -99.504975, - 27.2463726 - ], - [ - -99.504975, - 26.9965649 - ], - [ - -99.4427427, - 26.9965649 - ], - [ - -99.4427427, - 26.872803 - ], - [ - -99.3800633, - 26.872803 - ], - [ - -99.3800633, - 26.8068179 - ], - [ - -99.3190684, - 26.8068179 - ], - [ - -99.3190684, - 26.7473614 - ], - [ - -99.2537541, - 26.7473614 - ], - [ - -99.2537541, - 26.6210068 - ], - [ - -99.1910617, - 26.6210068 - ], - [ - -99.1910617, - 26.4956737 - ], - [ - -99.1300639, - 26.4956737 - ], - [ - -99.1300639, - 26.3713808 - ], - [ - -99.0029473, - 26.3713808 - ], - [ - -99.0029473, - 26.3093836 - ], - [ - -98.816572, - 26.3093836 - ], - [ - -98.816572, - 26.2457762 - ], - [ - -98.6920082, - 26.2457762 - ], - [ - -98.6920082, - 26.1837096 - ], - [ - -98.4440896, - 26.1837096 - ], - [ - -98.4440896, - 26.1217217 - ], - [ - -98.3823181, - 26.1217217 - ], - [ - -98.3823181, - 26.0596488 - ], - [ - -98.2532707, - 26.0596488 - ], - [ - -98.2532707, - 25.9986871 - ], - [ - -98.0109084, - 25.9986871 - ], - [ - -98.0109084, - 25.9932255 - ], - [ - -97.6932319, - 25.9932255 - ], - [ - -97.6932319, - 25.9334103 - ], - [ - -97.6313904, - 25.9334103 - ], - [ - -97.6313904, - 25.8695893 - ], - [ - -97.5046779, - 25.8695893 - ], - [ - -97.5046779, - 25.8073488 - ], - [ - -97.3083401, - 25.8073488 - ], - [ - -97.3083401, - 25.8731159 - ], - [ - -97.2456326, - 25.8731159 - ], - [ - -97.2456326, - 25.9353731 - ], - [ - -97.1138939, - 25.9353731 - ], - [ - -97.1138939, - 27.6809179 - ], - [ - -97.0571035, - 27.6809179 - ], - [ - -97.0571035, - 27.8108242 - ], - [ - -95.5810766, - 27.8108242 - ], - [ - -95.5810766, - 28.7468827 - ], - [ - -94.271041, - 28.7468827 - ], - [ - -94.271041, - 29.5594076 - ], - [ - -92.5029947, - 29.5594076 - ], - [ - -92.5029947, - 29.4974754 - ], - [ - -91.8776216, - 29.4974754 - ], - [ - -91.8776216, - 29.3727013 - ], - [ - -91.378418, - 29.3727013 - ], - [ - -91.378418, - 29.2468326 - ], - [ - -91.3153953, - 29.2468326 - ], - [ - -91.3153953, - 29.1844301 - ], - [ - -91.1294702, - 29.1844301 - ], - [ - -91.1294702, - 29.1232559 - ], - [ - -91.0052632, - 29.1232559 - ], - [ - -91.0052632, - 28.9968437 - ], - [ - -89.4500159, - 28.9968437 - ], - [ - -89.4500159, - 28.8677422 - ], - [ - -88.8104309, - 28.8677422 - ], - [ - -88.8104309, - 30.1841864 - ], - [ - -85.8791527, - 30.1841864 - ], - [ - -85.8791527, - 29.5455038 - ], - [ - -84.8368083, - 29.5455038 - ], - [ - -84.8368083, - 29.6225158 - ], - [ - -84.7482786, - 29.6225158 - ], - [ - -84.7482786, - 29.683624 - ], - [ - -84.685894, - 29.683624 - ], - [ - -84.685894, - 29.7468386 - ], - [ - -83.6296975, - 29.7468386 - ], - [ - -83.6296975, - 29.4324361 - ], - [ - -83.3174937, - 29.4324361 - ], - [ - -83.3174937, - 29.0579442 - ], - [ - -82.879659, - 29.0579442 - ], - [ - -82.879659, - 27.7453529 - ], - [ - -82.8182822, - 27.7453529 - ], - [ - -82.8182822, - 26.9290868 - ], - [ - -82.3796782, - 26.9290868 - ], - [ - -82.3796782, - 26.3694183 - ], - [ - -81.8777106, - 26.3694183 - ], - [ - -81.8777106, - 25.805971 - ], - [ - -81.5036862, - 25.805971 - ], - [ - -81.5036862, - 25.7474753 - ], - [ - -81.4405462, - 25.7474753 - ], - [ - -81.4405462, - 25.6851489 - ], - [ - -81.3155883, - 25.6851489 - ], - [ - -81.3155883, - 25.5600985 - ], - [ - -81.2538534, - 25.5600985 - ], - [ - -81.2538534, - 25.4342361 - ], - [ - -81.1902012, - 25.4342361 - ], - [ - -81.1902012, - 25.1234341 - ], - [ - -81.1288133, - 25.1234341 - ], - [ - -81.1288133, - 25.0619389 - ], - [ - -81.0649231, - 25.0619389 - ], - [ - -81.0649231, - 24.8157807 - ], - [ - -81.6289469, - 24.8157807 - ], - [ - -81.6289469, - 24.7538367 - ], - [ - -81.6907173, - 24.7538367 - ], - [ - -81.6907173, - 24.6899374 - ], - [ - -81.8173189, - 24.6899374 - ], - [ - -81.8173189, - 24.6279161 - ], - [ - -82.1910041, - 24.6279161 - ], - [ - -82.1910041, - 24.496294 - ], - [ - -81.6216596, - 24.496294 - ], - [ - -81.6216596, - 24.559484 - ], - [ - -81.372006, - 24.559484 - ], - [ - -81.372006, - 24.6220687 - ], - [ - -81.0593278, - 24.6220687 - ], - [ - -81.0593278, - 24.684826 - ], - [ - -80.9347147, - 24.684826 - ], - [ - -80.9347147, - 24.7474828 - ], - [ - -80.7471081, - 24.7474828 - ], - [ - -80.7471081, - 24.8100618 - ], - [ - -80.3629898, - 24.8100618 - ], - [ - -80.3629898, - 25.1175858 - ], - [ - -80.122344, - 25.1175858 - ], - [ - -80.122344, - 25.7472357 - ], - [ - -80.0588458, - 25.7472357 - ], - [ - -80.0588458, - 26.3708251 - ], - [ - -79.995837, - 26.3708251 - ], - [ - -79.995837, - 26.9398003 - ], - [ - -80.0587265, - 26.9398003 - ], - [ - -80.0587265, - 27.1277466 - ], - [ - -80.1226251, - 27.1277466 - ], - [ - -80.1226251, - 27.2534279 - ], - [ - -80.1846956, - 27.2534279 - ], - [ - -80.1846956, - 27.3781229 - ], - [ - -80.246175, - 27.3781229 - ], - [ - -80.246175, - 27.5658729 - ], - [ - -80.3094768, - 27.5658729 - ], - [ - -80.3094768, - 27.7530311 - ], - [ - -80.3721485, - 27.7530311 - ], - [ - -80.3721485, - 27.8774451 - ], - [ - -80.4351457, - 27.8774451 - ], - [ - -80.4351457, - 28.0033366 - ], - [ - -80.4966078, - 28.0033366 - ], - [ - -80.4966078, - 28.1277326 - ], - [ - -80.5587159, - 28.1277326 - ], - [ - -80.5587159, - 28.3723509 - ], - [ - -80.4966335, - 28.3723509 - ], - [ - -80.4966335, - 29.5160326 - ], - [ - -81.1213644, - 29.5160326 - ], - [ - -81.1213644, - 31.6846966 - ], - [ - -80.6018723, - 31.6846966 - ], - [ - -80.6018723, - 32.2475309 - ], - [ - -79.4921024, - 32.2475309 - ], - [ - -79.4921024, - 32.9970261 - ], - [ - -79.1116488, - 32.9970261 - ], - [ - -79.1116488, - 33.3729457 - ], - [ - -78.6153621, - 33.3729457 - ], - [ - -78.6153621, - 33.8097638 - ], - [ - -77.9316963, - 33.8097638 - ], - [ - -77.9316963, - 33.8718243 - ], - [ - -77.8692252, - 33.8718243 - ], - [ - -77.8692252, - 34.0552454 - ], - [ - -77.6826392, - 34.0552454 - ], - [ - -77.6826392, - 34.2974598 - ], - [ - -77.2453509, - 34.2974598 - ], - [ - -77.2453509, - 34.5598585 - ], - [ - -76.4973277, - 34.5598585 - ], - [ - -76.4973277, - 34.622796 - ], - [ - -76.4337602, - 34.622796 - ], - [ - -76.4337602, - 34.6849285 - ], - [ - -76.373212, - 34.6849285 - ], - [ - -76.373212, - 34.7467674 - ], - [ - -76.3059364, - 34.7467674 - ], - [ - -76.3059364, - 34.808551 - ], - [ - -76.2468017, - 34.808551 - ], - [ - -76.2468017, - 34.8728418 - ], - [ - -76.1825922, - 34.8728418 - ], - [ - -76.1825922, - 34.9335332 - ], - [ - -76.120814, - 34.9335332 - ], - [ - -76.120814, - 34.9952359 - ], - [ - -75.9979015, - 34.9952359 - ], - [ - -75.9979015, - 35.0578182 - ], - [ - -75.870338, - 35.0578182 - ], - [ - -75.870338, - 35.1219097 - ], - [ - -75.7462194, - 35.1219097 - ], - [ - -75.7462194, - 35.1818911 - ], - [ - -75.4929694, - 35.1818911 - ], - [ - -75.4929694, - 35.3082988 - ], - [ - -75.4325662, - 35.3082988 - ], - [ - -75.4325662, - 35.7542495 - ], - [ - -75.4969907, - 35.7542495 - ], - [ - -75.4969907, - 37.8105602 - ], - [ - -75.3082972, - 37.8105602 - ], - [ - -75.3082972, - 37.8720088 - ], - [ - -75.245601, - 37.8720088 - ], - [ - -75.245601, - 37.9954849 - ], - [ - -75.1828751, - 37.9954849 - ], - [ - -75.1828751, - 38.0585079 - ], - [ - -75.1184793, - 38.0585079 - ], - [ - -75.1184793, - 38.2469091 - ], - [ - -75.0592098, - 38.2469091 - ], - [ - -75.0592098, - 38.3704316 - ], - [ - -74.9948111, - 38.3704316 - ], - [ - -74.9948111, - 38.8718417 - ], - [ - -74.4878252, - 38.8718417 - ], - [ - -74.4878252, - 39.3089428 - ], - [ - -74.1766317, - 39.3089428 - ], - [ - -74.1766317, - 39.6224653 - ], - [ - -74.0567045, - 39.6224653 - ], - [ - -74.0567045, - 39.933178 - ], - [ - -73.9959035, - 39.933178 - ], - [ - -73.9959035, - 40.1854852 - ], - [ - -73.9341593, - 40.1854852 - ], - [ - -73.9341593, - 40.4959486 - ], - [ - -73.8723024, - 40.4959486 - ], - [ - -73.8723024, - 40.5527135 - ], - [ - -71.8074506, - 40.5527135 - ], - [ - -71.8074506, - 41.3088005 - ], - [ - -70.882512, - 41.3088005 - ], - [ - -70.882512, - 41.184978 - ], - [ - -70.7461947, - 41.184978 - ], - [ - -70.7461947, - 41.3091865 - ], - [ - -70.4337553, - 41.3091865 - ], - [ - -70.4337553, - 41.4963885 - ], - [ - -69.9334281, - 41.4963885 - ], - [ - -69.9334281, - 41.6230802 - ], - [ - -69.869857, - 41.6230802 - ], - [ - -69.869857, - 41.8776895 - ], - [ - -69.935791, - 41.8776895 - ], - [ - -69.935791, - 42.0032342 - ], - [ - -69.9975823, - 42.0032342 - ], - [ - -69.9975823, - 42.0650191 - ], - [ - -70.0606103, - 42.0650191 - ], - [ - -70.0606103, - 42.1294348 - ], - [ - -70.5572884, - 42.1294348 - ], - [ - -70.5572884, - 43.2487079 - ], - [ - -70.4974097, - 43.2487079 - ], - [ - -70.4974097, - 43.3092194 - ], - [ - -70.3704249, - 43.3092194 - ], - [ - -70.3704249, - 43.371963 - ], - [ - -70.3085701, - 43.371963 - ], - [ - -70.3085701, - 43.4969879 - ], - [ - -70.183921, - 43.4969879 - ], - [ - -70.183921, - 43.6223531 - ], - [ - -70.057583, - 43.6223531 - ], - [ - -70.057583, - 43.6850173 - ], - [ - -69.7455247, - 43.6850173 - ], - [ - -69.7455247, - 43.7476571 - ], - [ - -69.2472845, - 43.7476571 - ], - [ - -69.2472845, - 43.8107035 - ], - [ - -69.0560701, - 43.8107035 - ], - [ - -69.0560701, - 43.8717247 - ], - [ - -68.9950522, - 43.8717247 - ], - [ - -68.9950522, - 43.9982022 - ], - [ - -68.4963672, - 43.9982022 - ], - [ - -68.4963672, - 44.0597368 - ], - [ - -68.3081038, - 44.0597368 - ], - [ - -68.3081038, - 44.122137 - ], - [ - -68.1851802, - 44.122137 - ], - [ - -68.1851802, - 44.3081382 - ], - [ - -67.9956019, - 44.3081382 - ], - [ - -67.9956019, - 44.3727489 - ], - [ - -67.8103041, - 44.3727489 - ], - [ - -67.8103041, - 44.435178 - ], - [ - -67.4965289, - 44.435178 - ], - [ - -67.4965289, - 44.4968776 - ], - [ - -67.37102, - 44.4968776 - ], - [ - -67.37102, - 44.5600642 - ], - [ - -67.1848753, - 44.5600642 - ], - [ - -67.1848753, - 44.6213345 - ], - [ - -67.1221208, - 44.6213345 - ], - [ - -67.1221208, - 44.6867918 - ], - [ - -67.059365, - 44.6867918 - ], - [ - -67.059365, - 44.7473657 - ], - [ - -66.9311098, - 44.7473657 - ], - [ - -66.9311098, - 44.9406566 - ], - [ - -66.994683, - 44.9406566 - ], - [ - -66.994683, - 45.0024514 - ], - [ - -67.0595847, - 45.0024514 - ], - [ - -67.0595847, - 45.1273377 - ], - [ - -67.1201974, - 45.1273377 - ], - [ - -67.1201974, - 45.1910115 - ], - [ - -67.2469811, - 45.1910115 - ], - [ - -67.2469811, - 45.253442 - ], - [ - -67.3177546, - 45.253442 - ], - [ - -67.3177546, - 45.1898369 - ], - [ - -67.370749, - 45.1898369 - ], - [ - -67.370749, - 45.2534001 - ], - [ - -67.4326888, - 45.2534001 - ], - [ - -67.4326888, - 45.3083409 - ], - [ - -67.3708571, - 45.3083409 - ], - [ - -67.3708571, - 45.4396986 - ], - [ - -67.4305573, - 45.4396986 - ], - [ - -67.4305573, - 45.4950095 - ], - [ - -67.37099, - 45.4950095 - ], - [ - -67.37099, - 45.6264543 - ], - [ - -67.6214982, - 45.6264543 - ], - [ - -67.6214982, - 45.6896133 - ], - [ - -67.683828, - 45.6896133 - ], - [ - -67.683828, - 45.753259 - ], - [ - -67.7462097, - 45.753259 - ], - [ - -67.7462097, - 47.1268165 - ], - [ - -67.8700141, - 47.1268165 - ], - [ - -67.8700141, - 47.1900278 - ], - [ - -67.9323803, - 47.1900278 - ], - [ - -67.9323803, - 47.2539678 - ], - [ - -67.9959387, - 47.2539678 - ], - [ - -67.9959387, - 47.3149737 - ], - [ - -68.1206676, - 47.3149737 - ], - [ - -68.1206676, - 47.3780823 - ], - [ - -68.4423175, - 47.3780823 - ], - [ - -68.4423175, - 47.3166082 - ], - [ - -68.6314305, - 47.3166082 - ], - [ - -68.6314305, - 47.2544676 - ], - [ - -68.9978037, - 47.2544676 - ], - [ - -68.9978037, - 47.439895 - ], - [ - -69.0607223, - 47.439895 - ], - [ - -69.0607223, - 47.5047558 - ], - [ - -69.2538122, - 47.5047558 - ], - [ - -69.2538122, - 47.4398084 - ], - [ - -69.3179284, - 47.4398084 - ], - [ - -69.3179284, - 47.378601 - ], - [ - -69.4438546, - 47.378601 - ], - [ - -69.4438546, - 47.3156274 - ], - [ - -69.5038204, - 47.3156274 - ], - [ - -69.5038204, - 47.2525839 - ], - [ - -69.5667838, - 47.2525839 - ], - [ - -69.5667838, - 47.1910884 - ], - [ - -69.6303478, - 47.1910884 - ], - [ - -69.6303478, - 47.128701 - ], - [ - -69.6933103, - 47.128701 - ], - [ - -69.6933103, - 47.0654307 - ], - [ - -69.7557063, - 47.0654307 - ], - [ - -69.7557063, - 47.0042751 - ], - [ - -69.8180391, - 47.0042751 - ], - [ - -69.8180391, - 46.9415344 - ], - [ - -69.8804023, - 46.9415344 - ], - [ - -69.8804023, - 46.8792519 - ], - [ - -69.9421674, - 46.8792519 - ], - [ - -69.9421674, - 46.8177399 - ], - [ - -70.0063088, - 46.8177399 - ], - [ - -70.0063088, - 46.6920295 - ], - [ - -70.0704265, - 46.6920295 - ], - [ - -70.0704265, - 46.4425926 - ], - [ - -70.1945902, - 46.4425926 - ], - [ - -70.1945902, - 46.3785887 - ], - [ - -70.2562047, - 46.3785887 - ], - [ - -70.2562047, - 46.3152628 - ], - [ - -70.3203651, - 46.3152628 - ], - [ - -70.3203651, - 46.0651209 - ], - [ - -70.3814988, - 46.0651209 - ], - [ - -70.3814988, - 45.93552 - ], - [ - -70.3201618, - 45.93552 - ], - [ - -70.3201618, - 45.879479 - ], - [ - -70.4493131, - 45.879479 - ], - [ - -70.4493131, - 45.7538713 - ], - [ - -70.5070021, - 45.7538713 - ], - [ - -70.5070021, - 45.6916912 - ], - [ - -70.6316642, - 45.6916912 - ], - [ - -70.6316642, - 45.6291619 - ], - [ - -70.7575538, - 45.6291619 - ], - [ - -70.7575538, - 45.4414685 - ], - [ - -70.8809878, - 45.4414685 - ], - [ - -70.8809878, - 45.3780612 - ], - [ - -71.13328, - 45.3780612 - ], - [ - -71.13328, - 45.3151452 - ], - [ - -71.3830282, - 45.3151452 - ], - [ - -71.3830282, - 45.253416 - ], - [ - -71.5076448, - 45.253416 - ], - [ - -71.5076448, - 45.0655726 - ], - [ - -73.9418929, - 45.0655726 - ], - [ - -73.9418929, - 45.0031242 - ], - [ - -74.7469725, - 45.0031242 - ], - [ - -74.7469725, - 45.0649003 - ], - [ - -74.8800964, - 45.0649003 - ], - [ - -74.8800964, - 45.0029023 - ], - [ - -75.0662455, - 45.0029023 - ], - [ - -75.0662455, - 44.9415167 - ], - [ - -75.2539363, - 44.9415167 - ], - [ - -75.2539363, - 44.8776043 - ], - [ - -75.3789648, - 44.8776043 - ], - [ - -75.3789648, - 44.8153462 - ], - [ - -75.4431283, - 44.8153462 - ], - [ - -75.4431283, - 44.7536053 - ], - [ - -75.5666566, - 44.7536053 - ], - [ - -75.5666566, - 44.6909879 - ], - [ - -75.6290205, - 44.6909879 - ], - [ - -75.6290205, - 44.6284958 - ], - [ - -75.7540484, - 44.6284958 - ], - [ - -75.7540484, - 44.566385 - ], - [ - -75.817312, - 44.566385 - ], - [ - -75.817312, - 44.5028932 - ], - [ - -75.8799549, - 44.5028932 - ], - [ - -75.8799549, - 44.3784946 - ], - [ - -76.1300319, - 44.3784946 - ], - [ - -76.1300319, - 44.3159227 - ], - [ - -76.1926961, - 44.3159227 - ], - [ - -76.1926961, - 44.2534378 - ], - [ - -76.3182619, - 44.2534378 - ], - [ - -76.3182619, - 44.1916726 - ], - [ - -76.3792975, - 44.1916726 - ], - [ - -76.3792975, - 44.0653733 - ], - [ - -76.4427584, - 44.0653733 - ], - [ - -76.4427584, - 43.9963825 - ], - [ - -76.317027, - 43.9963825 - ], - [ - -76.317027, - 43.9414581 - ], - [ - -76.5076611, - 43.9414581 - ], - [ - -76.5076611, - 43.8723335 - ], - [ - -76.3829974, - 43.8723335 - ], - [ - -76.3829974, - 43.8091872 - ], - [ - -76.2534102, - 43.8091872 - ], - [ - -76.2534102, - 43.5665222 - ], - [ - -76.5064833, - 43.5665222 - ], - [ - -76.5064833, - 43.5033881 - ], - [ - -76.6331208, - 43.5033881 - ], - [ - -76.6331208, - 43.4432252 - ], - [ - -76.6951085, - 43.4432252 - ], - [ - -76.6951085, - 43.3786858 - ], - [ - -76.8177798, - 43.3786858 - ], - [ - -76.8177798, - 43.318066 - ], - [ - -77.682, - 43.318066 - ], - [ - -77.682, - 43.3789376 - ], - [ - -78.0565883, - 43.3789376 - ], - [ - -78.0565883, - 43.4396918 - ], - [ - -78.4389748, - 43.4396918 - ], - [ - -78.4389748, - 43.3794382 - ], - [ - -78.8803396, - 43.3794382 - ], - [ - -78.8803396, - 43.3149724 - ], - [ - -79.1298858, - 43.3149724 - ], - [ - -79.1298858, - 43.2429286 - ], - [ - -79.0669615, - 43.2429286 - ], - [ - -79.0669615, - 43.1299931 - ], - [ - -79.1298858, - 43.1299931 - ], - [ - -79.1298858, - 43.0577305 - ], - [ - -79.071264, - 43.0577305 - ], - [ - -79.071264, - 42.9294906 - ], - [ - -78.943264, - 42.9294906 - ], - [ - -78.943264, - 42.7542165 - ], - [ - -79.069439, - 42.7542165 - ], - [ - -79.069439, - 42.6941622 - ], - [ - -79.133439, - 42.6941622 - ], - [ - -79.133439, - 42.6296973 - ], - [ - -79.1947499, - 42.6296973 - ], - [ - -79.1947499, - 42.5663538 - ], - [ - -79.3786827, - 42.5663538 - ], - [ - -79.3786827, - 42.5033425 - ], - [ - -79.4442961, - 42.5033425 - ], - [ - -79.4442961, - 42.4410614 - ], - [ - -79.5679936, - 42.4410614 - ], - [ - -79.5679936, - 42.3775264 - ], - [ - -79.6906154, - 42.3775264 - ], - [ - -79.6906154, - 42.3171086 - ], - [ - -79.8164642, - 42.3171086 - ], - [ - -79.8164642, - 42.2534481 - ], - [ - -80.0052373, - 42.2534481 - ], - [ - -80.0052373, - 42.1909188 - ], - [ - -80.1916829, - 42.1909188 - ], - [ - -80.1916829, - 42.1272555 - ], - [ - -80.3167992, - 42.1272555 - ], - [ - -80.3167992, - 42.0669857 - ], - [ - -80.5063234, - 42.0669857 - ], - [ - -80.5063234, - 42.0034331 - ], - [ - -80.6930471, - 42.0034331 - ], - [ - -80.6930471, - 41.9415141 - ], - [ - -80.9440403, - 41.9415141 - ], - [ - -80.9440403, - 41.8781193 - ], - [ - -81.1942729, - 41.8781193 - ], - [ - -81.1942729, - 41.8166455 - ], - [ - -81.3190089, - 41.8166455 - ], - [ - -81.3190089, - 41.7545453 - ], - [ - -81.4418435, - 41.7545453 - ], - [ - -81.4418435, - 41.690965 - ], - [ - -81.5053523, - 41.690965 - ], - [ - -81.5053523, - 41.6301643 - ], - [ - -82.7470081, - 41.6301643 - ], - [ - -82.7470081, - 41.7536942 - ], - [ - -82.8839135, - 41.7536942 - ], - [ - -82.8839135, - 41.5656075 - ], - [ - -82.9957195, - 41.5656075 - ], - [ - -82.9957195, - 41.6270375 - ], - [ - -83.1257796, - 41.6270375 - ], - [ - -83.1257796, - 41.6878411 - ], - [ - -83.2474733, - 41.6878411 - ], - [ - -83.2474733, - 41.7536942 - ], - [ - -83.3737305, - 41.7536942 - ], - [ - -83.3737305, - 41.809276 - ], - [ - -83.3106019, - 41.809276 - ], - [ - -83.3106019, - 41.8716064 - ], - [ - -83.2474733, - 41.8716064 - ], - [ - -83.2474733, - 41.9361393 - ], - [ - -83.1843447, - 41.9361393 - ], - [ - -83.1843447, - 41.9960851 - ], - [ - -83.1207681, - 41.9960851 - ], - [ - -83.1207681, - 42.2464812 - ], - [ - -83.0589194, - 42.2464812 - ], - [ - -83.0589194, - 42.3089555 - ], - [ - -82.8685328, - 42.3089555 - ], - [ - -82.8685328, - 42.3717652 - ], - [ - -82.8072219, - 42.3717652 - ], - [ - -82.8072219, - 42.558553 - ], - [ - -82.7553745, - 42.558553 - ], - [ - -82.7553745, - 42.4954945 - ], - [ - -82.5599041, - 42.4954945 - ], - [ - -82.5599041, - 42.558553 - ], - [ - -82.4967755, - 42.558553 - ], - [ - -82.4967755, - 42.6833607 - ], - [ - -82.4328863, - 42.6833607 - ], - [ - -82.4328863, - 42.9342196 - ], - [ - -82.3700552, - 42.9342196 - ], - [ - -82.3700552, - 43.0648071 - ], - [ - -82.4328863, - 43.0648071 - ], - [ - -82.4328863, - 43.1917566 - ], - [ - -82.4947464, - 43.1917566 - ], - [ - -82.4947464, - 43.5034627 - ], - [ - -82.557133, - 43.5034627 - ], - [ - -82.557133, - 43.8160901 - ], - [ - -82.6197884, - 43.8160901 - ], - [ - -82.6197884, - 43.9422098 - ], - [ - -82.6839499, - 43.9422098 - ], - [ - -82.6839499, - 44.0022641 - ], - [ - -82.7465346, - 44.0022641 - ], - [ - -82.7465346, - 44.0670545 - ], - [ - -82.8708696, - 44.0670545 - ], - [ - -82.8708696, - 44.1291935 - ], - [ - -83.008517, - 44.1291935 - ], - [ - -83.008517, - 44.0664786 - ], - [ - -83.1336086, - 44.0664786 - ], - [ - -83.1336086, - 44.0053949 - ], - [ - -83.2414522, - 44.0053949 - ], - [ - -83.2414522, - 44.9962034 - ], - [ - -83.1806112, - 44.9962034 - ], - [ - -83.1806112, - 45.067302 - ], - [ - -83.2455172, - 45.067302 - ], - [ - -83.2455172, - 45.1287382 - ], - [ - -83.3065878, - 45.1287382 - ], - [ - -83.3065878, - 45.2551509 - ], - [ - -83.3706087, - 45.2551509 - ], - [ - -83.3706087, - 45.3165923 - ], - [ - -83.4325644, - 45.3165923 - ], - [ - -83.4325644, - 45.3792105 - ], - [ - -83.6178415, - 45.3792105 - ], - [ - -83.6178415, - 45.4419665 - ], - [ - -83.8084291, - 45.4419665 - ], - [ - -83.8084291, - 45.5036189 - ], - [ - -84.0550718, - 45.5036189 - ], - [ - -84.0550718, - 45.5647907 - ], - [ - -84.1235181, - 45.5647907 - ], - [ - -84.1235181, - 45.6287845 - ], - [ - -84.1807534, - 45.6287845 - ], - [ - -84.1807534, - 45.6914688 - ], - [ - -84.3111554, - 45.6914688 - ], - [ - -84.3111554, - 45.9337076 - ], - [ - -83.8209974, - 45.9337076 - ], - [ - -83.8209974, - 45.8725113 - ], - [ - -83.4968086, - 45.8725113 - ], - [ - -83.4968086, - 45.9337076 - ], - [ - -83.4338066, - 45.9337076 - ], - [ - -83.4338066, - 46.0016863 - ], - [ - -83.4962697, - 46.0016863 - ], - [ - -83.4962697, - 46.0668178 - ], - [ - -83.5599956, - 46.0668178 - ], - [ - -83.5599956, - 46.1261576 - ], - [ - -83.9954558, - 46.1261576 - ], - [ - -83.9954558, - 46.1931747 - ], - [ - -84.0591816, - 46.1931747 - ], - [ - -84.0591816, - 46.3814972 - ], - [ - -84.1152614, - 46.3814972 - ], - [ - -84.1152614, - 46.4953584 - ], - [ - -84.0591816, - 46.4953584 - ], - [ - -84.0591816, - 46.5682653 - ], - [ - -84.2579545, - 46.5682653 - ], - [ - -84.2579545, - 46.5051232 - ], - [ - -84.3071879, - 46.5051232 - ], - [ - -84.3071879, - 46.5682653 - ], - [ - -84.4415364, - 46.5682653 - ], - [ - -84.4415364, - 46.504525 - ], - [ - -84.9965729, - 46.504525 - ], - [ - -84.9965729, - 46.6842882 - ], - [ - -84.9298158, - 46.6842882 - ], - [ - -84.9298158, - 46.818077 - ], - [ - -85.3165894, - 46.818077 - ], - [ - -85.3165894, - 46.7535825 - ], - [ - -87.5562645, - 46.7535825 - ], - [ - -87.5562645, - 47.4407371 - ], - [ - -87.6825361, - 47.4407371 - ], - [ - -87.6825361, - 47.5035554 - ], - [ - -88.2560738, - 47.5035554 - ], - [ - -88.2560738, - 47.4433716 - ], - [ - -88.4417419, - 47.4433716 - ], - [ - -88.4417419, - 47.3789949 - ], - [ - -88.50683, - 47.3789949 - ], - [ - -88.50683, - 47.3153881 - ], - [ - -88.6312821, - 47.3153881 - ], - [ - -88.6312821, - 47.2539782 - ], - [ - -88.7569636, - 47.2539782 - ], - [ - -88.7569636, - 47.1934682 - ], - [ - -88.8838253, - 47.1934682 - ], - [ - -88.8838253, - 47.1284735 - ], - [ - -88.9434208, - 47.1284735 - ], - [ - -88.9434208, - 47.0662127 - ], - [ - -89.0708726, - 47.0662127 - ], - [ - -89.0708726, - 47.0026826 - ], - [ - -89.2565553, - 47.0026826 - ], - [ - -89.2565553, - 46.9410806 - ], - [ - -90.3677669, - 46.9410806 - ], - [ - -90.3677669, - 47.6844827 - ], - [ - -90.3069978, - 47.6844827 - ], - [ - -90.3069978, - 47.7460174 - ], - [ - -89.994859, - 47.7460174 - ], - [ - -89.994859, - 47.8082719 - ], - [ - -89.8048615, - 47.8082719 - ], - [ - -89.8048615, - 47.8700562 - ], - [ - -89.6797699, - 47.8700562 - ], - [ - -89.6797699, - 47.9339637 - ], - [ - -89.4933757, - 47.9339637 - ], - [ - -89.4933757, - 47.9957956 - ], - [ - -89.4284697, - 47.9957956 - ], - [ - -89.4284697, - 48.0656377 - ], - [ - -89.9932739, - 48.0656377 - ], - [ - -89.9932739, - 48.1282966 - ], - [ - -90.7455933, - 48.1282966 - ], - [ - -90.7455933, - 48.1893056 - ], - [ - -90.8087291, - 48.1893056 - ], - [ - -90.8087291, - 48.2522065 - ], - [ - -91.067763, - 48.2522065 - ], - [ - -91.067763, - 48.1916658 - ], - [ - -91.1946247, - 48.1916658 - ], - [ - -91.1946247, - 48.1279027 - ], - [ - -91.6814196, - 48.1279027 - ], - [ - -91.6814196, - 48.2525994 - ], - [ - -91.9321927, - 48.2525994 - ], - [ - -91.9321927, - 48.3142454 - ], - [ - -91.9929683, - 48.3142454 - ], - [ - -91.9929683, - 48.3780845 - ], - [ - -92.3189383, - 48.3780845 - ], - [ - -92.3189383, - 48.2529081 - ], - [ - -92.3732233, - 48.2529081 - ], - [ - -92.3732233, - 48.3153385 - ], - [ - -92.4322288, - 48.3153385 - ], - [ - -92.4322288, - 48.4411448 - ], - [ - -92.4977248, - 48.4411448 - ], - [ - -92.4977248, - 48.501781 - ], - [ - -92.5679413, - 48.501781 - ], - [ - -92.5679413, - 48.439579 - ], - [ - -92.6210462, - 48.439579 - ], - [ - -92.6210462, - 48.5650783 - ], - [ - -92.8086835, - 48.5650783 - ], - [ - -92.8086835, - 48.6286865 - ], - [ - -92.8086835, - 48.6267365 - ], - [ - -92.933185, - 48.6267365 - ], - [ - -92.933185, - 48.6922145 - ], - [ - -93.0051716, - 48.6922145 - ], - [ - -93.0051716, - 48.6282965 - ], - [ - -93.1225924, - 48.6282965 - ], - [ - -93.1225924, - 48.6922145 - ], - [ - -93.3190806, - 48.6922145 - ], - [ - -93.3190806, - 48.6267365 - ], - [ - -93.5049477, - 48.6267365 - ], - [ - -93.5049477, - 48.5635164 - ], - [ - -93.7474601, - 48.5635164 - ], - [ - -93.7474601, - 48.6267365 - ], - [ - -93.8135461, - 48.6267365 - ], - [ - -93.8135461, - 48.6898775 - ], - [ - -94.2453121, - 48.6898775 - ], - [ - -94.2453121, - 48.7554327 - ], - [ - -94.6183171, - 48.7554327 - ], - [ - -94.6183171, - 48.941036 - ], - [ - -94.6809018, - 48.941036 - ], - [ - -94.6809018, - 49.0029737 - ], - [ - -94.7441532, - 49.0029737 - ], - [ - -94.7441532, - 49.2536079 - ], - [ - -94.8084069, - 49.2536079 - ], - [ - -94.8084069, - 49.3784134 - ], - [ - -95.1192391, - 49.3784134 - ], - [ - -95.1192391, - 49.4425264 - ], - [ - -95.1934341, - 49.4425264 - ], - [ - -95.1934341, - 49.0035292 - ], - [ - -96.87069, - 49.0035292 - ], - [ - -96.87069, - 49.0656063 - ], - [ - -99.0049312, - 49.0656063 - ], - [ - -99.0049312, - 49.0050714 - ], - [ - -109.3699257, - 49.0050714 - ], - [ - -109.3699257, - 49.0668231 - ], - [ - -109.5058746, - 49.0668231 - ], - [ - -109.5058746, - 49.0050714 - ], - [ - -114.1830014, - 49.0050714 - ], - [ - -114.1830014, - 49.0687317 - ], - [ - -114.7578709, - 49.0687317 - ], - [ - -114.7578709, - 49.0050714 - ], - [ - -115.433731, - 49.0050714 - ], - [ - -115.433731, - 49.0671412 - ], - [ - -116.5062706, - 49.0671412 - ], - [ - -116.5062706, - 49.0050714 - ], - [ - -117.3089504, - 49.0050714 - ], - [ - -117.3089504, - 49.0659803 - ], - [ - -119.882945, - 49.0659803 - ], - [ - -119.882945, - 49.0050714 - ], - [ - -120.1208555, - 49.0050714 - ], - [ - -120.1208555, - 49.0678367 - ], - [ - -121.4451636, - 49.0678367 - ], - [ - -121.4451636, - 49.0050714 - ], - [ - -121.9311808, - 49.0050714 - ], - [ - -121.9311808, - 49.0656099 - ], - [ - -122.817484, - 49.0656099 - ], - [ - -122.817484, - 49.0029143 - ], - [ - -122.8795155, - 49.0029143 - ], - [ - -122.8795155, - 48.9347018 - ], - [ - -122.8174629, - 48.9347018 - ], - [ - -122.8174629, - 48.8101998 - ], - [ - -122.7538859, - 48.8101998 - ], - [ - -122.7538859, - 48.7533758 - ], - [ - -122.8712937, - 48.7533758 - ], - [ - -122.8712937, - 48.8153948 - ], - [ - -123.0055391, - 48.8153948 - ], - [ - -123.0055391, - 48.7529529 - ], - [ - -123.1296926, - 48.7529529 - ], - [ - -123.1296926, - 48.6902201 - ], - [ - -123.1838197, - 48.6902201 - ], - [ - -123.1838197, - 48.7529029 - ] - ], - [ - [ - -122.9341743, - 37.7521547 - ], - [ - -122.9347457, - 37.6842013 - ], - [ - -123.0679013, - 37.6849023 - ], - [ - -123.0673747, - 37.7475251 - ], - [ - -123.1292603, - 37.7478506 - ], - [ - -123.1286894, - 37.815685 - ], - [ - -123.0590687, - 37.8153192 - ], - [ - -123.0595947, - 37.7528143 - ] - ], - [ - [ - -71.6299464, - 41.2540893 - ], - [ - -71.4966465, - 41.2541393 - ], - [ - -71.4965596, - 41.122965 - ], - [ - -71.6298594, - 41.1229149 - ] - ], - [ - [ - -70.3184265, - 41.3775196 - ], - [ - -70.3183384, - 41.2448243 - ], - [ - -70.1906612, - 41.2448722 - ], - [ - -70.1906239, - 41.1886019 - ], - [ - -69.9336025, - 41.1886984 - ], - [ - -69.933729, - 41.3791941 - ], - [ - -69.9950664, - 41.3791712 - ], - [ - -69.995109, - 41.443159 - ], - [ - -70.0707828, - 41.4431307 - ], - [ - -70.0706972, - 41.3144915 - ], - [ - -70.2461667, - 41.3144258 - ], - [ - -70.2462087, - 41.3775467 - ] - ], - [ - [ - -68.9403374, - 43.9404062 - ], - [ - -68.6856948, - 43.9404977 - ], - [ - -68.6856475, - 43.8721797 - ], - [ - -68.7465405, - 43.8721577 - ], - [ - -68.7464976, - 43.8102529 - ], - [ - -68.8090782, - 43.8102304 - ], - [ - -68.8090343, - 43.746728 - ], - [ - -68.8773094, - 43.7467034 - ], - [ - -68.8773544, - 43.8117826 - ], - [ - -68.9402483, - 43.8117599 - ] - ], - [ - [ - -123.1291466, - 49.0645144 - ], - [ - -122.9954224, - 49.0645144 - ], - [ - -122.9954224, - 48.9343243 - ], - [ - -123.1291466, - 48.9343243 - ] - ], - [ - [ - -82.9407144, - 24.7535913 - ], - [ - -82.8719398, - 24.7535913 - ], - [ - -82.8719398, - 24.6905653 - ], - [ - -82.7446233, - 24.6905653 - ], - [ - -82.7446233, - 24.6214593 - ], - [ - -82.8088038, - 24.6214593 - ], - [ - -82.8088038, - 24.5594908 - ], - [ - -82.9407144, - 24.5594908 - ] - ] - ] - }, - { - "name": "USGS Topographic Maps", - "type": "tms", - "template": "http://{switch:a,b,c}.tile.openstreetmap.us/usgs_scanned_topos/{zoom}/{x}/{y}.png", - "polygon": [ - [ - [ - -125.990173, - 48.9962416 - ], - [ - -125.989419, - 47.9948396 - ], - [ - -123.9929739, - 47.9955062 - ], - [ - -123.9922429, - 47.0059202 - ], - [ - -125.988688, - 47.0052409 - ], - [ - -125.9879604, - 46.0015618 - ], - [ - -123.9939396, - 46.0022529 - ], - [ - -123.9925238, - 43.9961708 - ], - [ - -124.9931832, - 43.9958116 - ], - [ - -124.9918175, - 41.9942149 - ], - [ - -125.9851789, - 41.9938465 - ], - [ - -125.9838655, - 40.0076111 - ], - [ - -123.9833285, - 40.0083757 - ], - [ - -123.9814115, - 37.002615 - ], - [ - -122.21903, - 37.0033173 - ], - [ - -122.2184144, - 36.011671 - ], - [ - -122.020087, - 36.011751 - ], - [ - -122.0188591, - 33.9961766 - ], - [ - -119.9787757, - 33.9970206 - ], - [ - -119.9775867, - 31.9987658 - ], - [ - -114.0122833, - 32.00129 - ], - [ - -114.0116894, - 30.9862401 - ], - [ - -105.998294, - 30.9896679 - ], - [ - -105.9971419, - 28.9901065 - ], - [ - -102.0210506, - 28.9918418 - ], - [ - -102.0204916, - 28.00733 - ], - [ - -100.0062436, - 28.0082173 - ], - [ - -100.0051143, - 25.991909 - ], - [ - -98.0109067, - 25.9928035 - ], - [ - -98.0103613, - 25.0063461 - ], - [ - -97.0161086, - 25.0067957 - ], - [ - -97.016654, - 25.9932494 - ], - [ - -95.9824825, - 25.9937132 - ], - [ - -95.9835999, - 27.9891175 - ], - [ - -94.0200898, - 27.9899826 - ], - [ - -94.0206586, - 28.9918129 - ], - [ - -88.0156706, - 28.9944338 - ], - [ - -88.0162494, - 30.0038862 - ], - [ - -86.0277506, - 30.0047454 - ], - [ - -86.0271719, - 28.9953016 - ], - [ - -84.0187909, - 28.9961781 - ], - [ - -84.017095, - 25.9817708 - ], - [ - -81.9971976, - 25.9826768 - ], - [ - -81.9966618, - 25.0134917 - ], - [ - -84.0165592, - 25.0125783 - ], - [ - -84.0160068, - 24.0052745 - ], - [ - -80.0199985, - 24.007096 - ], - [ - -80.0245309, - 32.0161282 - ], - [ - -78.0066484, - 32.0169819 - ], - [ - -78.0072238, - 32.9894278 - ], - [ - -77.8807233, - 32.9894807 - ], - [ - -77.8813253, - 33.9955918 - ], - [ - -76.0115411, - 33.9963653 - ], - [ - -76.0121459, - 34.9952552 - ], - [ - -74.0068449, - 34.9960749 - ], - [ - -74.0099997, - 40.0084254 - ], - [ - -72.0013745, - 40.0091931 - ], - [ - -72.002019, - 40.9912464 - ], - [ - -69.8797398, - 40.9920457 - ], - [ - -69.8804173, - 42.00893 - ], - [ - -69.9927682, - 42.0088883 - ], - [ - -69.9934462, - 43.0105166 - ], - [ - -67.9845366, - 43.0112496 - ], - [ - -67.985224, - 44.0103812 - ], - [ - -65.9892568, - 44.0110975 - ], - [ - -65.9921237, - 47.9993584 - ], - [ - -70.006442, - 47.9980181 - ], - [ - -70.005708, - 47.0042007 - ], - [ - -72.023686, - 47.003514 - ], - [ - -72.0222508, - 45.0059846 - ], - [ - -78.0146667, - 45.0038705 - ], - [ - -78.0139662, - 44.0026998 - ], - [ - -80.029686, - 44.0019763 - ], - [ - -80.0290052, - 43.0122994 - ], - [ - -81.995479, - 43.011582 - ], - [ - -81.9982986, - 47.0042713 - ], - [ - -87.505706, - 47.0023972 - ], - [ - -87.5064535, - 48.0142702 - ], - [ - -88.0260889, - 48.0140968 - ], - [ - -88.026838, - 49.0086686 - ], - [ - -93.9981078, - 49.0067142 - ], - [ - -93.9988778, - 50.0086456 - ], - [ - -96.0138899, - 50.0079995 - ], - [ - -96.0131199, - 49.0060547 - ] - ], - [ - [ - -160.5787616, - 22.5062947 - ], - [ - -160.5782192, - 21.4984647 - ], - [ - -159.0030121, - 21.499196 - ], - [ - -159.0027422, - 20.9951068 - ], - [ - -157.5083185, - 20.995803 - ], - [ - -157.5080519, - 20.4960241 - ], - [ - -155.966889, - 20.4967444 - ], - [ - -155.9674267, - 21.5028287 - ], - [ - -157.5044717, - 21.5021151 - ], - [ - -157.5047384, - 21.9984962 - ], - [ - -159.0090946, - 21.9978002 - ], - [ - -159.0093692, - 22.5070181 - ] - ], - [ - [ - -168.006102, - 68.9941463 - ], - [ - -168.0047628, - 68.0107853 - ], - [ - -165.4842481, - 68.0112562 - ], - [ - -165.4829337, - 67.0037303 - ], - [ - -168.0034485, - 67.0032389 - ], - [ - -168.002195, - 66.0017503 - ], - [ - -169.0087448, - 66.001546 - ], - [ - -169.0075381, - 64.9987675 - ], - [ - -168.0009882, - 64.9989798 - ], - [ - -167.9998282, - 63.9982374 - ], - [ - -164.9871288, - 63.9988964 - ], - [ - -164.9860062, - 62.9950845 - ], - [ - -167.9987057, - 62.9944019 - ], - [ - -167.9946035, - 59.0153692 - ], - [ - -162.5027857, - 59.0167799 - ], - [ - -162.5018149, - 58.0005815 - ], - [ - -160.0159024, - 58.0012389 - ], - [ - -160.0149725, - 57.000035 - ], - [ - -160.5054788, - 56.9999017 - ], - [ - -160.5045719, - 55.9968161 - ], - [ - -164.012195, - 55.9958373 - ], - [ - -164.0113186, - 55.00107 - ], - [ - -165.994782, - 55.0005023 - ], - [ - -165.9941266, - 54.2400584 - ], - [ - -168.0002944, - 54.2394734 - ], - [ - -168.0000986, - 54.0094921 - ], - [ - -170.0156134, - 54.0089011 - ], - [ - -170.0147683, - 53.0016446 - ], - [ - -171.9993636, - 53.0010487 - ], - [ - -171.9989488, - 52.4977745 - ], - [ - -176.0083239, - 52.4965566 - ], - [ - -176.0081186, - 52.2452555 - ], - [ - -178.000097, - 52.2446469 - ], - [ - -177.9992996, - 51.2554252 - ], - [ - -176.0073212, - 51.2560472 - ], - [ - -176.0075146, - 51.4980163 - ], - [ - -171.9981395, - 51.4992617 - ], - [ - -171.9985419, - 51.9985373 - ], - [ - -167.9984317, - 51.9997661 - ], - [ - -167.9994645, - 53.2560877 - ], - [ - -165.9932968, - 53.2566866 - ], - [ - -165.9939308, - 54.0100804 - ], - [ - -159.0067205, - 54.0121291 - ], - [ - -159.0075717, - 55.002502 - ], - [ - -158.0190709, - 55.0027849 - ], - [ - -158.0199473, - 55.9975094 - ], - [ - -151.9963213, - 55.9991902 - ], - [ - -151.9981536, - 57.9986536 - ], - [ - -151.500341, - 57.9987853 - ], - [ - -151.5012894, - 58.9919816 - ], - [ - -138.5159989, - 58.9953194 - ], - [ - -138.5150471, - 57.9986434 - ], - [ - -136.6872422, - 57.9991267 - ], - [ - -136.6863158, - 57.0016688 - ], - [ - -135.9973698, - 57.001856 - ], - [ - -135.9964667, - 56.0030544 - ], - [ - -134.6717732, - 56.003424 - ], - [ - -134.6708865, - 54.9969623 - ], - [ - -133.9956734, - 54.9971556 - ], - [ - -133.9948193, - 54.0031685 - ], - [ - -130.0044418, - 54.0043387 - ], - [ - -130.0070826, - 57.0000507 - ], - [ - -131.975877, - 56.9995156 - ], - [ - -131.9787378, - 59.9933094 - ], - [ - -138.0071813, - 59.991805 - ], - [ - -138.0082158, - 61.0125755 - ], - [ - -140.9874011, - 61.0118551 - ], - [ - -140.99984, - 71.0039309 - ], - [ - -154.5023956, - 71.0017377 - ], - [ - -154.5039632, - 71.9983391 - ], - [ - -157.499048, - 71.9978773 - ], - [ - -157.4974758, - 70.9982877 - ], - [ - -163.0233611, - 70.9973899 - ], - [ - -163.0218273, - 69.9707435 - ], - [ - -164.9730896, - 69.97041 - ], - [ - -164.9717003, - 68.994689 - ] - ], - [ - [ - -168.5133204, - 62.8689586 - ], - [ - -168.5144423, - 63.8765677 - ], - [ - -172.0202755, - 63.8757975 - ], - [ - -172.0191536, - 62.8681608 - ] - ], - [ - [ - -170.9947111, - 59.9954089 - ], - [ - -170.995726, - 60.9969787 - ], - [ - -174.0045311, - 60.9962508 - ], - [ - -174.0035162, - 59.9946581 - ] - ], - [ - [ - -156.0717261, - 20.2854602 - ], - [ - -154.7940471, - 20.2860582 - ], - [ - -154.7933145, - 18.9029464 - ], - [ - -156.0709936, - 18.9023432 - ] - ] - ] - }, - { - "name": "Vejmidte (Denmark)", - "type": "tms", - "template": "http://{switch:a,b,c}.tile.openstreetmap.dk/danmark/vejmidte/{zoom}/{x}/{y}.png", - "scaleExtent": [ - 0, - 20 - ], - "polygon": [ - [ - [ - 8.3743941, - 54.9551655 - ], - [ - 8.3683809, - 55.4042149 - ], - [ - 8.2103997, - 55.4039795 - ], - [ - 8.2087314, - 55.4937345 - ], - [ - 8.0502655, - 55.4924731 - ], - [ - 8.0185123, - 56.7501399 - ], - [ - 8.1819161, - 56.7509948 - ], - [ - 8.1763274, - 57.0208898 - ], - [ - 8.3413329, - 57.0219872 - ], - [ - 8.3392467, - 57.1119574 - ], - [ - 8.5054433, - 57.1123212 - ], - [ - 8.5033923, - 57.2020499 - ], - [ - 9.3316304, - 57.2027636 - ], - [ - 9.3319079, - 57.2924835 - ], - [ - 9.4978864, - 57.2919578 - ], - [ - 9.4988593, - 57.3820608 - ], - [ - 9.6649749, - 57.3811615 - ], - [ - 9.6687295, - 57.5605591 - ], - [ - 9.8351961, - 57.5596265 - ], - [ - 9.8374896, - 57.6493322 - ], - [ - 10.1725726, - 57.6462818 - ], - [ - 10.1754245, - 57.7367768 - ], - [ - 10.5118282, - 57.7330269 - ], - [ - 10.5152095, - 57.8228945 - ], - [ - 10.6834853, - 57.8207722 - ], - [ - 10.6751613, - 57.6412021 - ], - [ - 10.5077045, - 57.6433097 - ], - [ - 10.5039992, - 57.5535088 - ], - [ - 10.671038, - 57.5514113 - ], - [ - 10.6507805, - 57.1024538 - ], - [ - 10.4857673, - 57.1045138 - ], - [ - 10.4786236, - 56.9249051 - ], - [ - 10.3143981, - 56.9267573 - ], - [ - 10.3112341, - 56.8369269 - ], - [ - 10.4750295, - 56.83509 - ], - [ - 10.4649016, - 56.5656681 - ], - [ - 10.9524239, - 56.5589761 - ], - [ - 10.9479249, - 56.4692243 - ], - [ - 11.1099335, - 56.4664675 - ], - [ - 11.1052639, - 56.376833 - ], - [ - 10.9429901, - 56.3795284 - ], - [ - 10.9341235, - 56.1994768 - ], - [ - 10.7719685, - 56.2020244 - ], - [ - 10.7694751, - 56.1120103 - ], - [ - 10.6079695, - 56.1150259 - ], - [ - 10.4466742, - 56.116717 - ], - [ - 10.2865948, - 56.118675 - ], - [ - 10.2831527, - 56.0281851 - ], - [ - 10.4439274, - 56.0270388 - ], - [ - 10.4417713, - 55.7579243 - ], - [ - 10.4334961, - 55.6693533 - ], - [ - 10.743814, - 55.6646861 - ], - [ - 10.743814, - 55.5712253 - ], - [ - 10.8969041, - 55.5712253 - ], - [ - 10.9051793, - 55.3953852 - ], - [ - 11.0613726, - 55.3812841 - ], - [ - 11.0593038, - 55.1124061 - ], - [ - 11.0458567, - 55.0318621 - ], - [ - 11.2030844, - 55.0247474 - ], - [ - 11.2030844, - 55.117139 - ], - [ - 11.0593038, - 55.1124061 - ], - [ - 11.0613726, - 55.3812841 - ], - [ - 11.0789572, - 55.5712253 - ], - [ - 10.8969041, - 55.5712253 - ], - [ - 10.9258671, - 55.6670198 - ], - [ - 10.743814, - 55.6646861 - ], - [ - 10.7562267, - 55.7579243 - ], - [ - 10.4417713, - 55.7579243 - ], - [ - 10.4439274, - 56.0270388 - ], - [ - 10.4466742, - 56.116717 - ], - [ - 10.6079695, - 56.1150259 - ], - [ - 10.6052053, - 56.0247462 - ], - [ - 10.9258671, - 56.0201215 - ], - [ - 10.9197132, - 55.9309388 - ], - [ - 11.0802782, - 55.92792 - ], - [ - 11.0858066, - 56.0178284 - ], - [ - 11.7265047, - 56.005058 - ], - [ - 11.7319981, - 56.0952142 - ], - [ - 12.0540333, - 56.0871256 - ], - [ - 12.0608477, - 56.1762576 - ], - [ - 12.7023469, - 56.1594405 - ], - [ - 12.6611131, - 55.7114318 - ], - [ - 12.9792318, - 55.7014026 - ], - [ - 12.9612912, - 55.5217294 - ], - [ - 12.3268659, - 55.5412096 - ], - [ - 12.3206071, - 55.4513655 - ], - [ - 12.4778226, - 55.447067 - ], - [ - 12.4702432, - 55.3570479 - ], - [ - 12.6269738, - 55.3523837 - ], - [ - 12.6200898, - 55.2632576 - ], - [ - 12.4627339, - 55.26722 - ], - [ - 12.4552949, - 55.1778223 - ], - [ - 12.2987046, - 55.1822303 - ], - [ - 12.2897344, - 55.0923641 - ], - [ - 12.6048608, - 55.0832904 - ], - [ - 12.5872011, - 54.9036285 - ], - [ - 12.2766618, - 54.9119031 - ], - [ - 12.2610181, - 54.7331602 - ], - [ - 12.1070691, - 54.7378161 - ], - [ - 12.0858621, - 54.4681655 - ], - [ - 11.7794953, - 54.4753579 - ], - [ - 11.7837381, - 54.5654783 - ], - [ - 11.1658525, - 54.5782155 - ], - [ - 11.1706443, - 54.6686508 - ], - [ - 10.8617173, - 54.6733956 - ], - [ - 10.8651245, - 54.7634667 - ], - [ - 10.7713646, - 54.7643888 - ], - [ - 10.7707276, - 54.7372807 - ], - [ - 10.7551428, - 54.7375776 - ], - [ - 10.7544039, - 54.7195666 - ], - [ - 10.7389074, - 54.7197588 - ], - [ - 10.7384368, - 54.7108482 - ], - [ - 10.7074486, - 54.7113045 - ], - [ - 10.7041094, - 54.6756741 - ], - [ - 10.5510973, - 54.6781698 - ], - [ - 10.5547184, - 54.7670245 - ], - [ - 10.2423994, - 54.7705935 - ], - [ - 10.2459845, - 54.8604673 - ], - [ - 10.0902268, - 54.8622134 - ], - [ - 10.0873731, - 54.7723851 - ], - [ - 9.1555798, - 54.7769557 - ], - [ - 9.1562752, - 54.8675369 - ], - [ - 8.5321973, - 54.8663765 - ], - [ - 8.531432, - 54.95516 - ] - ], - [ - [ - 11.4577738, - 56.819554 - ], - [ - 11.7849181, - 56.8127385 - ], - [ - 11.7716715, - 56.6332796 - ], - [ - 11.4459621, - 56.6401087 - ] - ], - [ - [ - 11.3274736, - 57.3612962 - ], - [ - 11.3161808, - 57.1818004 - ], - [ - 11.1508692, - 57.1847276 - ], - [ - 11.1456628, - 57.094962 - ], - [ - 10.8157703, - 57.1001693 - ], - [ - 10.8290599, - 57.3695272 - ] - ], - [ - [ - 11.5843266, - 56.2777928 - ], - [ - 11.5782882, - 56.1880397 - ], - [ - 11.7392309, - 56.1845765 - ], - [ - 11.7456428, - 56.2743186 - ] - ], - [ - [ - 14.6825922, - 55.3639405 - ], - [ - 14.8395247, - 55.3565231 - ], - [ - 14.8263755, - 55.2671261 - ], - [ - 15.1393406, - 55.2517359 - ], - [ - 15.1532015, - 55.3410836 - ], - [ - 15.309925, - 55.3330556 - ], - [ - 15.295719, - 55.2437356 - ], - [ - 15.1393406, - 55.2517359 - ], - [ - 15.1255631, - 55.1623802 - ], - [ - 15.2815819, - 55.1544167 - ], - [ - 15.2535578, - 54.9757646 - ], - [ - 14.6317464, - 55.0062496 - ] - ] - ], - "terms_url": "http://wiki.openstreetmap.org/wiki/Vejmidte", - "terms_text": "Danish municipalities" - }, - { - "name": "Vienna: Beschriftungen (annotations)", - "type": "tms", - "template": "http://www.wien.gv.at/wmts/beschriftung/normal/google3857/{zoom}/{y}/{x}.png", - "scaleExtent": [ - 0, - 19 - ], - "polygon": [ - [ - [ - 16.17, - 48.1 - ], - [ - 16.17, - 48.33 - ], - [ - 16.58, - 48.33 - ], - [ - 16.58, - 48.1 - ], - [ - 16.17, - 48.1 - ] - ] - ], - "terms_url": "http://data.wien.gv.at/", - "terms_text": "Stadt Wien" - }, - { - "name": "Vienna: Mehrzweckkarte (general purpose)", - "type": "tms", - "template": "http://www.wien.gv.at/wmts/fmzk/pastell/google3857/{zoom}/{y}/{x}.jpeg", - "scaleExtent": [ - 0, - 19 - ], - "polygon": [ - [ - [ - 16.17, - 48.1 - ], - [ - 16.17, - 48.33 - ], - [ - 16.58, - 48.33 - ], - [ - 16.58, - 48.1 - ], - [ - 16.17, - 48.1 - ] - ] - ], - "terms_url": "http://data.wien.gv.at/", - "terms_text": "Stadt Wien" - }, - { - "name": "Vienna: Orthofoto (aerial image)", - "type": "tms", - "template": "http://www.wien.gv.at/wmts/lb/farbe/google3857/{zoom}/{y}/{x}.jpeg", - "scaleExtent": [ - 0, - 19 - ], - "polygon": [ - [ - [ - 16.17, - 48.1 - ], - [ - 16.17, - 48.33 - ], - [ - 16.58, - 48.33 - ], - [ - 16.58, - 48.1 - ], - [ - 16.17, - 48.1 - ] - ] - ], - "terms_url": "http://data.wien.gv.at/", - "terms_text": "Stadt Wien" - }, - { - "name": "basemap.at", - "type": "tms", - "description": "Basemap of Austria, based on goverment data.", - "template": "http://maps.wien.gv.at/basemap/geolandbasemap/normal/google3857/{zoom}/{y}/{x}.jpeg", - "polygon": [ - [ - [ - 16.5073284, - 46.9929304 - ], - [ - 16.283417, - 46.9929304 - ], - [ - 16.135839, - 46.8713046 - ], - [ - 15.9831722, - 46.8190947 - ], - [ - 16.0493278, - 46.655175 - ], - [ - 15.8610387, - 46.7180116 - ], - [ - 15.7592608, - 46.6900933 - ], - [ - 15.5607938, - 46.6796202 - ], - [ - 15.5760605, - 46.6342132 - ], - [ - 15.4793715, - 46.6027553 - ], - [ - 15.4335715, - 46.6516819 - ], - [ - 15.2249267, - 46.6342132 - ], - [ - 15.0468154, - 46.6481886 - ], - [ - 14.9908376, - 46.5887681 - ], - [ - 14.9603042, - 46.6237293 - ], - [ - 14.8534374, - 46.6027553 - ], - [ - 14.8330818, - 46.5012666 - ], - [ - 14.7516595, - 46.4977636 - ], - [ - 14.6804149, - 46.4381781 - ], - [ - 14.6142593, - 46.4381781 - ], - [ - 14.578637, - 46.3785275 - ], - [ - 14.4412369, - 46.4311638 - ], - [ - 14.1613476, - 46.4276563 - ], - [ - 14.1257253, - 46.4767409 - ], - [ - 14.0188585, - 46.4767409 - ], - [ - 13.9119917, - 46.5257813 - ], - [ - 13.8254805, - 46.5047694 - ], - [ - 13.4438134, - 46.560783 - ], - [ - 13.3064132, - 46.5502848 - ], - [ - 13.1283019, - 46.5887681 - ], - [ - 12.8433237, - 46.6132433 - ], - [ - 12.7262791, - 46.6412014 - ], - [ - 12.5125455, - 46.6656529 - ], - [ - 12.3598787, - 46.7040543 - ], - [ - 12.3649676, - 46.7703197 - ], - [ - 12.2886341, - 46.7772902 - ], - [ - 12.2733674, - 46.8852187 - ], - [ - 12.2072118, - 46.8747835 - ], - [ - 12.1308784, - 46.9026062 - ], - [ - 12.1156117, - 46.9998721 - ], - [ - 12.2530119, - 47.0657733 - ], - [ - 12.2123007, - 47.0934969 - ], - [ - 11.9833004, - 47.0449712 - ], - [ - 11.7339445, - 46.9616816 - ], - [ - 11.6321666, - 47.010283 - ], - [ - 11.5405665, - 46.9755722 - ], - [ - 11.4998553, - 47.0068129 - ], - [ - 11.418433, - 46.9651546 - ], - [ - 11.2555884, - 46.9755722 - ], - [ - 11.1130993, - 46.913036 - ], - [ - 11.0418548, - 46.7633482 - ], - [ - 10.8891879, - 46.7598621 - ], - [ - 10.7416099, - 46.7842599 - ], - [ - 10.7059877, - 46.8643462 - ], - [ - 10.5787653, - 46.8399847 - ], - [ - 10.4566318, - 46.8504267 - ], - [ - 10.4769874, - 46.9269392 - ], - [ - 10.3853873, - 46.9894592 - ], - [ - 10.2327204, - 46.8643462 - ], - [ - 10.1207647, - 46.8330223 - ], - [ - 9.8663199, - 46.9408389 - ], - [ - 9.9019422, - 47.0033426 - ], - [ - 9.6831197, - 47.0588402 - ], - [ - 9.6118752, - 47.0380354 - ], - [ - 9.6322307, - 47.128131 - ], - [ - 9.5813418, - 47.1662025 - ], - [ - 9.5406306, - 47.2664422 - ], - [ - 9.6067863, - 47.3492559 - ], - [ - 9.6729419, - 47.369939 - ], - [ - 9.6424085, - 47.4457079 - ], - [ - 9.5660751, - 47.4801122 - ], - [ - 9.7136531, - 47.5282405 - ], - [ - 9.7848976, - 47.5969187 - ], - [ - 9.8357866, - 47.5454185 - ], - [ - 9.9477423, - 47.538548 - ], - [ - 10.0902313, - 47.4491493 - ], - [ - 10.1105869, - 47.3664924 - ], - [ - 10.2428982, - 47.3871688 - ], - [ - 10.1869203, - 47.2698953 - ], - [ - 10.3243205, - 47.2975125 - ], - [ - 10.4820763, - 47.4491493 - ], - [ - 10.4311873, - 47.4869904 - ], - [ - 10.4413651, - 47.5900549 - ], - [ - 10.4871652, - 47.5522881 - ], - [ - 10.5482319, - 47.5351124 - ], - [ - 10.5991209, - 47.5660246 - ], - [ - 10.7568766, - 47.5316766 - ], - [ - 10.8891879, - 47.5454185 - ], - [ - 10.9400769, - 47.4869904 - ], - [ - 10.9960547, - 47.3906141 - ], - [ - 11.2352328, - 47.4422662 - ], - [ - 11.2810328, - 47.3975039 - ], - [ - 11.4235219, - 47.5144941 - ], - [ - 11.5761888, - 47.5076195 - ], - [ - 11.6067221, - 47.5900549 - ], - [ - 11.8357224, - 47.5866227 - ], - [ - 12.003656, - 47.6243647 - ], - [ - 12.2072118, - 47.6037815 - ], - [ - 12.1614117, - 47.6963421 - ], - [ - 12.2581008, - 47.7442718 - ], - [ - 12.2530119, - 47.6792136 - ], - [ - 12.4311232, - 47.7100408 - ], - [ - 12.4921899, - 47.631224 - ], - [ - 12.5685234, - 47.6277944 - ], - [ - 12.6295901, - 47.6894913 - ], - [ - 12.7720792, - 47.6689338 - ], - [ - 12.8331459, - 47.5419833 - ], - [ - 12.975635, - 47.4732332 - ], - [ - 13.0417906, - 47.4938677 - ], - [ - 13.0367017, - 47.5557226 - ], - [ - 13.0977685, - 47.6415112 - ], - [ - 13.0316128, - 47.7100408 - ], - [ - 12.9043905, - 47.7203125 - ], - [ - 13.0061684, - 47.84683 - ], - [ - 12.9451016, - 47.9355501 - ], - [ - 12.8636793, - 47.9594103 - ], - [ - 12.8636793, - 48.0036929 - ], - [ - 12.7517236, - 48.0989418 - ], - [ - 12.8738571, - 48.2109733 - ], - [ - 12.9603683, - 48.2109733 - ], - [ - 13.0417906, - 48.2652035 - ], - [ - 13.1842797, - 48.2990682 - ], - [ - 13.2606131, - 48.2922971 - ], - [ - 13.3980133, - 48.3565867 - ], - [ - 13.4438134, - 48.417418 - ], - [ - 13.4387245, - 48.5523383 - ], - [ - 13.509969, - 48.5860123 - ], - [ - 13.6117469, - 48.5725454 - ], - [ - 13.7287915, - 48.5118999 - ], - [ - 13.7847694, - 48.5725454 - ], - [ - 13.8203916, - 48.6263915 - ], - [ - 13.7949471, - 48.7171267 - ], - [ - 13.850925, - 48.7741724 - ], - [ - 14.0595697, - 48.6633774 - ], - [ - 14.0137696, - 48.6331182 - ], - [ - 14.0748364, - 48.5927444 - ], - [ - 14.2173255, - 48.5961101 - ], - [ - 14.3649034, - 48.5489696 - ], - [ - 14.4666813, - 48.6499311 - ], - [ - 14.5582815, - 48.5961101 - ], - [ - 14.5989926, - 48.6263915 - ], - [ - 14.7211261, - 48.5759124 - ], - [ - 14.7211261, - 48.6868997 - ], - [ - 14.822904, - 48.7271983 - ], - [ - 14.8178151, - 48.777526 - ], - [ - 14.9647227, - 48.7851754 - ], - [ - 14.9893637, - 49.0126611 - ], - [ - 15.1485933, - 48.9950306 - ], - [ - 15.1943934, - 48.9315502 - ], - [ - 15.3063491, - 48.9850128 - ], - [ - 15.3928603, - 48.9850128 - ], - [ - 15.4844604, - 48.9282069 - ], - [ - 15.749083, - 48.8545973 - ], - [ - 15.8406831, - 48.8880697 - ], - [ - 16.0086166, - 48.7808794 - ], - [ - 16.2070835, - 48.7339115 - ], - [ - 16.3953727, - 48.7372678 - ], - [ - 16.4920617, - 48.8110498 - ], - [ - 16.6905286, - 48.7741724 - ], - [ - 16.7057953, - 48.7339115 - ], - [ - 16.8991733, - 48.713769 - ], - [ - 16.9755067, - 48.515271 - ], - [ - 16.8482844, - 48.4511817 - ], - [ - 16.8533733, - 48.3464411 - ], - [ - 16.9551512, - 48.2516513 - ], - [ - 16.9907734, - 48.1498955 - ], - [ - 17.0925513, - 48.1397088 - ], - [ - 17.0823736, - 48.0241182 - ], - [ - 17.1739737, - 48.0207146 - ], - [ - 17.0823736, - 47.8741447 - ], - [ - 16.9856845, - 47.8673174 - ], - [ - 17.0823736, - 47.8092489 - ], - [ - 17.0925513, - 47.7031919 - ], - [ - 16.7414176, - 47.6792136 - ], - [ - 16.7057953, - 47.7511153 - ], - [ - 16.5378617, - 47.7545368 - ], - [ - 16.5480395, - 47.7066164 - ], - [ - 16.4208172, - 47.6689338 - ], - [ - 16.573484, - 47.6175045 - ], - [ - 16.670173, - 47.631224 - ], - [ - 16.7108842, - 47.538548 - ], - [ - 16.6599952, - 47.4491493 - ], - [ - 16.5429506, - 47.3940591 - ], - [ - 16.4615283, - 47.3940591 - ], - [ - 16.4920617, - 47.276801 - ], - [ - 16.425906, - 47.1973317 - ], - [ - 16.4717061, - 47.1489007 - ], - [ - 16.5480395, - 47.1489007 - ], - [ - 16.476795, - 47.0796369 - ], - [ - 16.527684, - 47.0588402 - ] - ] - ], - "terms_text": "basemap.at", - "id": "basemap.at" - } - ], - "wikipedia": [ - [ - "English", - "English", - "en" - ], - [ - "German", - "Deutsch", - "de" - ], - [ - "Dutch", - "Nederlands", - "nl" - ], - [ - "French", - "Français", - "fr" - ], - [ - "Italian", - "Italiano", - "it" - ], - [ - "Russian", - "Русский", - "ru" - ], - [ - "Spanish", - "Español", - "es" - ], - [ - "Polish", - "Polski", - "pl" - ], - [ - "Swedish", - "Svenska", - "sv" - ], - [ - "Japanese", - "日本語", - "ja" - ], - [ - "Portuguese", - "Português", - "pt" - ], - [ - "Chinese", - "中文", - "zh" - ], - [ - "Vietnamese", - "Tiếng Việt", - "vi" - ], - [ - "Ukrainian", - "Українська", - "uk" - ], - [ - "Catalan", - "Català", - "ca" - ], - [ - "Norwegian (Bokmål)", - "Norsk (Bokmål)", - "no" - ], - [ - "Waray-Waray", - "Winaray", - "war" - ], - [ - "Cebuano", - "Sinugboanong Binisaya", - "ceb" - ], - [ - "Finnish", - "Suomi", - "fi" - ], - [ - "Persian", - "فارسی", - "fa" - ], - [ - "Czech", - "Čeština", - "cs" - ], - [ - "Hungarian", - "Magyar", - "hu" - ], - [ - "Korean", - "한국어", - "ko" - ], - [ - "Romanian", - "Română", - "ro" - ], - [ - "Arabic", - "العربية", - "ar" - ], - [ - "Turkish", - "Türkçe", - "tr" - ], - [ - "Indonesian", - "Bahasa Indonesia", - "id" - ], - [ - "Kazakh", - "Қазақша", - "kk" - ], - [ - "Malay", - "Bahasa Melayu", - "ms" - ], - [ - "Serbian", - "Српски / Srpski", - "sr" - ], - [ - "Slovak", - "Slovenčina", - "sk" - ], - [ - "Esperanto", - "Esperanto", - "eo" - ], - [ - "Danish", - "Dansk", - "da" - ], - [ - "Lithuanian", - "Lietuvių", - "lt" - ], - [ - "Basque", - "Euskara", - "eu" - ], - [ - "Bulgarian", - "Български", - "bg" - ], - [ - "Hebrew", - "עברית", - "he" - ], - [ - "Slovenian", - "Slovenščina", - "sl" - ], - [ - "Croatian", - "Hrvatski", - "hr" - ], - [ - "Volapük", - "Volapük", - "vo" - ], - [ - "Estonian", - "Eesti", - "et" - ], - [ - "Hindi", - "हिन्दी", - "hi" - ], - [ - "Uzbek", - "O‘zbek", - "uz" - ], - [ - "Galician", - "Galego", - "gl" - ], - [ - "Norwegian (Nynorsk)", - "Nynorsk", - "nn" - ], - [ - "Simple English", - "Simple English", - "simple" - ], - [ - "Azerbaijani", - "Azərbaycanca", - "az" - ], - [ - "Latin", - "Latina", - "la" - ], - [ - "Greek", - "Ελληνικά", - "el" - ], - [ - "Thai", - "ไทย", - "th" - ], - [ - "Serbo-Croatian", - "Srpskohrvatski / Српскохрватски", - "sh" - ], - [ - "Georgian", - "ქართული", - "ka" - ], - [ - "Occitan", - "Occitan", - "oc" - ], - [ - "Macedonian", - "Македонски", - "mk" - ], - [ - "Newar / Nepal Bhasa", - "नेपाल भाषा", - "new" - ], - [ - "Tagalog", - "Tagalog", - "tl" - ], - [ - "Piedmontese", - "Piemontèis", - "pms" - ], - [ - "Belarusian", - "Беларуская", - "be" - ], - [ - "Haitian", - "Krèyol ayisyen", - "ht" - ], - [ - "Tamil", - "தமிழ்", - "ta" - ], - [ - "Telugu", - "తెలుగు", - "te" - ], - [ - "Belarusian (Taraškievica)", - "Беларуская (тарашкевіца)", - "be-x-old" - ], - [ - "Latvian", - "Latviešu", - "lv" - ], - [ - "Breton", - "Brezhoneg", - "br" - ], - [ - "Malagasy", - "Malagasy", - "mg" - ], - [ - "Albanian", - "Shqip", - "sq" - ], - [ - "Armenian", - "Հայերեն", - "hy" - ], - [ - "Tatar", - "Tatarça / Татарча", - "tt" - ], - [ - "Javanese", - "Basa Jawa", - "jv" - ], - [ - "Welsh", - "Cymraeg", - "cy" - ], - [ - "Marathi", - "मराठी", - "mr" - ], - [ - "Luxembourgish", - "Lëtzebuergesch", - "lb" - ], - [ - "Icelandic", - "Íslenska", - "is" - ], - [ - "Bosnian", - "Bosanski", - "bs" - ], - [ - "Burmese", - "မြန်မာဘာသာ", - "my" - ], - [ - "Yoruba", - "Yorùbá", - "yo" - ], - [ - "Bashkir", - "Башҡорт", - "ba" - ], - [ - "Malayalam", - "മലയാളം", - "ml" - ], - [ - "Aragonese", - "Aragonés", - "an" - ], - [ - "Lombard", - "Lumbaart", - "lmo" - ], - [ - "Afrikaans", - "Afrikaans", - "af" - ], - [ - "West Frisian", - "Frysk", - "fy" - ], - [ - "Western Panjabi", - "شاہ مکھی پنجابی (Shāhmukhī Pañjābī)", - "pnb" - ], - [ - "Bengali", - "বাংলা", - "bn" - ], - [ - "Swahili", - "Kiswahili", - "sw" - ], - [ - "Bishnupriya Manipuri", - "ইমার ঠার/বিষ্ণুপ্রিয়া মণিপুরী", - "bpy" - ], - [ - "Ido", - "Ido", - "io" - ], - [ - "Kirghiz", - "Кыргызча", - "ky" - ], - [ - "Urdu", - "اردو", - "ur" - ], - [ - "Nepali", - "नेपाली", - "ne" - ], - [ - "Sicilian", - "Sicilianu", - "scn" - ], - [ - "Gujarati", - "ગુજરાતી", - "gu" - ], - [ - "Cantonese", - "粵語", - "zh-yue" - ], - [ - "Low Saxon", - "Plattdüütsch", - "nds" - ], - [ - "Kurdish", - "Kurdî / كوردی", - "ku" - ], - [ - "Irish", - "Gaeilge", - "ga" - ], - [ - "Asturian", - "Asturianu", - "ast" - ], - [ - "Quechua", - "Runa Simi", - "qu" - ], - [ - "Sundanese", - "Basa Sunda", - "su" - ], - [ - "Chuvash", - "Чăваш", - "cv" - ], - [ - "Scots", - "Scots", - "sco" - ], - [ - "Interlingua", - "Interlingua", - "ia" - ], - [ - "Alemannic", - "Alemannisch", - "als" - ], - [ - "Buginese", - "Basa Ugi", - "bug" - ], - [ - "Neapolitan", - "Nnapulitano", - "nap" - ], - [ - "Samogitian", - "Žemaitėška", - "bat-smg" - ], - [ - "Kannada", - "ಕನ್ನಡ", - "kn" - ], - [ - "Banyumasan", - "Basa Banyumasan", - "map-bms" - ], - [ - "Walloon", - "Walon", - "wa" - ], - [ - "Amharic", - "አማርኛ", - "am" - ], - [ - "Sorani", - "Soranî / کوردی", - "ckb" - ], - [ - "Scottish Gaelic", - "Gàidhlig", - "gd" - ], - [ - "Fiji Hindi", - "Fiji Hindi", - "hif" - ], - [ - "Min Nan", - "Bân-lâm-gú", - "zh-min-nan" - ], - [ - "Tajik", - "Тоҷикӣ", - "tg" - ], - [ - "Mazandarani", - "مَزِروني", - "mzn" - ], - [ - "Egyptian Arabic", - "مصرى (Maṣrī)", - "arz" - ], - [ - "Yiddish", - "ייִדיש", - "yi" - ], - [ - "Venetian", - "Vèneto", - "vec" - ], - [ - "Mongolian", - "Монгол", - "mn" - ], - [ - "Tarantino", - "Tarandíne", - "roa-tara" - ], - [ - "Sanskrit", - "संस्कृतम्", - "sa" - ], - [ - "Nahuatl", - "Nāhuatl", - "nah" - ], - [ - "Ossetian", - "Иронау", - "os" - ], - [ - "Sakha", - "Саха тыла (Saxa Tyla)", - "sah" - ], - [ - "Kapampangan", - "Kapampangan", - "pam" - ], - [ - "Upper Sorbian", - "Hornjoserbsce", - "hsb" - ], - [ - "Sinhalese", - "සිංහල", - "si" - ], - [ - "Northern Sami", - "Sámegiella", - "se" - ], - [ - "Limburgish", - "Limburgs", - "li" - ], - [ - "Maori", - "Māori", - "mi" - ], - [ - "Bavarian", - "Boarisch", - "bar" - ], - [ - "Corsican", - "Corsu", - "co" - ], - [ - "Ilokano", - "Ilokano", - "ilo" - ], - [ - "Gan", - "贛語", - "gan" - ], - [ - "Tibetan", - "བོད་སྐད", - "bo" - ], - [ - "Gilaki", - "گیلکی", - "glk" - ], - [ - "Faroese", - "Føroyskt", - "fo" - ], - [ - "Rusyn", - "русиньскый язык", - "rue" - ], - [ - "Punjabi", - "ਪੰਜਾਬੀ", - "pa" - ], - [ - "Central_Bicolano", - "Bikol", - "bcl" - ], - [ - "Hill Mari", - "Кырык Мары (Kyryk Mary) ", - "mrj" - ], - [ - "Võro", - "Võro", - "fiu-vro" - ], - [ - "Dutch Low Saxon", - "Nedersaksisch", - "nds-nl" - ], - [ - "Turkmen", - "تركمن / Туркмен", - "tk" - ], - [ - "Pashto", - "پښتو", - "ps" - ], - [ - "West Flemish", - "West-Vlams", - "vls" - ], - [ - "Mingrelian", - "მარგალური (Margaluri)", - "xmf" - ], - [ - "Manx", - "Gaelg", - "gv" - ], - [ - "Zazaki", - "Zazaki", - "diq" - ], - [ - "Pangasinan", - "Pangasinan", - "pag" - ], - [ - "Komi", - "Коми", - "kv" - ], - [ - "Zeelandic", - "Zeêuws", - "zea" - ], - [ - "Divehi", - "ދިވެހިބަސް", - "dv" - ], - [ - "Oriya", - "ଓଡ଼ିଆ", - "or" - ], - [ - "Khmer", - "ភាសាខ្មែរ", - "km" - ], - [ - "Norman", - "Nouormand/Normaund", - "nrm" - ], - [ - "Romansh", - "Rumantsch", - "rm" - ], - [ - "Komi-Permyak", - "Перем Коми (Perem Komi)", - "koi" - ], - [ - "Udmurt", - "Удмурт кыл", - "udm" - ], - [ - "Meadow Mari", - "Олык Марий (Olyk Marij)", - "mhr" - ], - [ - "Ladino", - "Dzhudezmo", - "lad" - ], - [ - "North Frisian", - "Nordfriisk", - "frr" - ], - [ - "Kashubian", - "Kaszëbsczi", - "csb" - ], - [ - "Ligurian", - "Líguru", - "lij" - ], - [ - "Wu", - "吴语", - "wuu" - ], - [ - "Friulian", - "Furlan", - "fur" - ], - [ - "Vepsian", - "Vepsän", - "vep" - ], - [ - "Classical Chinese", - "古文 / 文言文", - "zh-classical" - ], - [ - "Uyghur", - "ئۇيغۇر تىلى", - "ug" - ], - [ - "Saterland Frisian", - "Seeltersk", - "stq" - ], - [ - "Sardinian", - "Sardu", - "sc" - ], - [ - "Aromanian", - "Armãneashce", - "roa-rup" - ], - [ - "Pali", - "पाऴि", - "pi" - ], - [ - "Somali", - "Soomaaliga", - "so" - ], - [ - "Bihari", - "भोजपुरी", - "bh" - ], - [ - "Maltese", - "Malti", - "mt" - ], - [ - "Aymara", - "Aymar", - "ay" - ], - [ - "Ripuarian", - "Ripoarisch", - "ksh" - ], - [ - "Novial", - "Novial", - "nov" - ], - [ - "Anglo-Saxon", - "Englisc", - "ang" - ], - [ - "Cornish", - "Kernewek/Karnuack", - "kw" - ], - [ - "Navajo", - "Diné bizaad", - "nv" - ], - [ - "Picard", - "Picard", - "pcd" - ], - [ - "Hakka", - "Hak-kâ-fa / 客家話", - "hak" - ], - [ - "Guarani", - "Avañe'ẽ", - "gn" - ], - [ - "Extremaduran", - "Estremeñu", - "ext" - ], - [ - "Franco-Provençal/Arpitan", - "Arpitan", - "frp" - ], - [ - "Assamese", - "অসমীয়া", - "as" - ], - [ - "Silesian", - "Ślůnski", - "szl" - ], - [ - "Gagauz", - "Gagauz", - "gag" - ], - [ - "Interlingue", - "Interlingue", - "ie" - ], - [ - "Lingala", - "Lingala", - "ln" - ], - [ - "Emilian-Romagnol", - "Emiliàn e rumagnòl", - "eml" - ], - [ - "Chechen", - "Нохчийн", - "ce" - ], - [ - "Kalmyk", - "Хальмг", - "xal" - ], - [ - "Palatinate German", - "Pfälzisch", - "pfl" - ], - [ - "Hawaiian", - "Hawai`i", - "haw" - ], - [ - "Karachay-Balkar", - "Къарачай-Малкъар (Qarachay-Malqar)", - "krc" - ], - [ - "Pennsylvania German", - "Deitsch", - "pdc" - ], - [ - "Kinyarwanda", - "Ikinyarwanda", - "rw" - ], - [ - "Crimean Tatar", - "Qırımtatarca", - "crh" - ], - [ - "Acehnese", - "Bahsa Acèh", - "ace" - ], - [ - "Tongan", - "faka Tonga", - "to" - ], - [ - "Greenlandic", - "Kalaallisut", - "kl" - ], - [ - "Lower Sorbian", - "Dolnoserbski", - "dsb" - ], - [ - "Aramaic", - "ܐܪܡܝܐ", - "arc" - ], - [ - "Erzya", - "Эрзянь (Erzjanj Kelj)", - "myv" - ], - [ - "Lezgian", - "Лезги чІал (Lezgi č’al)", - "lez" - ], - [ - "Banjar", - "Bahasa Banjar", - "bjn" - ], - [ - "Shona", - "chiShona", - "sn" - ], - [ - "Papiamentu", - "Papiamentu", - "pap" - ], - [ - "Kabyle", - "Taqbaylit", - "kab" - ], - [ - "Tok Pisin", - "Tok Pisin", - "tpi" - ], - [ - "Lak", - "Лакку", - "lbe" - ], - [ - "Buryat (Russia)", - "Буряад", - "bxr" - ], - [ - "Lojban", - "Lojban", - "jbo" - ], - [ - "Wolof", - "Wolof", - "wo" - ], - [ - "Moksha", - "Мокшень (Mokshanj Kälj)", - "mdf" - ], - [ - "Zamboanga Chavacano", - "Chavacano de Zamboanga", - "cbk-zam" - ], - [ - "Avar", - "Авар", - "av" - ], - [ - "Sranan", - "Sranantongo", - "srn" - ], - [ - "Mirandese", - "Mirandés", - "mwl" - ], - [ - "Kabardian Circassian", - "Адыгэбзэ (Adighabze)", - "kbd" - ], - [ - "Tahitian", - "Reo Mā`ohi", - "ty" - ], - [ - "Lao", - "ລາວ", - "lo" - ], - [ - "Abkhazian", - "Аҧсуа", - "ab" - ], - [ - "Tetum", - "Tetun", - "tet" - ], - [ - "Latgalian", - "Latgaļu", - "ltg" - ], - [ - "Nauruan", - "dorerin Naoero", - "na" - ], - [ - "Kongo", - "KiKongo", - "kg" - ], - [ - "Igbo", - "Igbo", - "ig" - ], - [ - "Northern Sotho", - "Sesotho sa Leboa", - "nso" - ], - [ - "Zhuang", - "Cuengh", - "za" - ], - [ - "Karakalpak", - "Qaraqalpaqsha", - "kaa" - ], - [ - "Zulu", - "isiZulu", - "zu" - ], - [ - "Cheyenne", - "Tsetsêhestâhese", - "chy" - ], - [ - "Romani", - "romani - रोमानी", - "rmy" - ], - [ - "Old Church Slavonic", - "Словѣньскъ", - "cu" - ], - [ - "Tswana", - "Setswana", - "tn" - ], - [ - "Cherokee", - "ᏣᎳᎩ", - "chr" - ], - [ - "Bislama", - "Bislama", - "bi" - ], - [ - "Min Dong", - "Mìng-dĕ̤ng-ngṳ̄", - "cdo" - ], - [ - "Gothic", - "𐌲𐌿𐍄𐌹𐍃𐌺", - "got" - ], - [ - "Samoan", - "Gagana Samoa", - "sm" - ], - [ - "Moldovan", - "Молдовеняскэ", - "mo" - ], - [ - "Bambara", - "Bamanankan", - "bm" - ], - [ - "Inuktitut", - "ᐃᓄᒃᑎᑐᑦ", - "iu" - ], - [ - "Norfolk", - "Norfuk", - "pih" - ], - [ - "Pontic", - "Ποντιακά", - "pnt" - ], - [ - "Sindhi", - "سنڌي، سندھی ، सिन्ध", - "sd" - ], - [ - "Swati", - "SiSwati", - "ss" - ], - [ - "Kikuyu", - "Gĩkũyũ", - "ki" - ], - [ - "Ewe", - "Eʋegbe", - "ee" - ], - [ - "Hausa", - "هَوُسَ", - "ha" - ], - [ - "Oromo", - "Oromoo", - "om" - ], - [ - "Fijian", - "Na Vosa Vakaviti", - "fj" - ], - [ - "Tigrinya", - "ትግርኛ", - "ti" - ], - [ - "Tsonga", - "Xitsonga", - "ts" - ], - [ - "Kashmiri", - "कश्मीरी / كشميري", - "ks" - ], - [ - "Venda", - "Tshivenda", - "ve" - ], - [ - "Sango", - "Sängö", - "sg" - ], - [ - "Kirundi", - "Kirundi", - "rn" - ], - [ - "Sesotho", - "Sesotho", - "st" - ], - [ - "Dzongkha", - "ཇོང་ཁ", - "dz" - ], - [ - "Cree", - "Nehiyaw", - "cr" - ], - [ - "Akan", - "Akana", - "ak" - ], - [ - "Tumbuka", - "chiTumbuka", - "tum" - ], - [ - "Luganda", - "Luganda", - "lg" - ], - [ - "Chichewa", - "Chi-Chewa", - "ny" - ], - [ - "Fula", - "Fulfulde", - "ff" - ], - [ - "Inupiak", - "Iñupiak", - "ik" - ], - [ - "Chamorro", - "Chamoru", - "ch" - ], - [ - "Twi", - "Twi", - "tw" - ], - [ - "Xhosa", - "isiXhosa", - "xh" - ], - [ - "Ndonga", - "Oshiwambo", - "ng" - ], - [ - "Sichuan Yi", - "ꆇꉙ", - "ii" - ], - [ - "Choctaw", - "Choctaw", - "cho" - ], - [ - "Marshallese", - "Ebon", - "mh" - ], - [ - "Afar", - "Afar", - "aa" - ], - [ - "Kuanyama", - "Kuanyama", - "kj" - ], - [ - "Hiri Motu", - "Hiri Motu", - "ho" - ], - [ - "Muscogee", - "Muskogee", - "mus" - ], - [ - "Kanuri", - "Kanuri", - "kr" - ], - [ - "Herero", - "Otsiherero", - "hz" - ] - ], - "presets": { - "presets": { - "address": { - "fields": [ - "address" - ], - "geometry": [ - "point" - ], - "tags": { - "addr:housenumber": "*" - }, - "addTags": {}, - "removeTags": {}, - "matchScore": 0.2, - "name": "Address" - }, - "aerialway": { - "fields": [ - "aerialway" - ], - "geometry": [ - "point", - "vertex", - "line" - ], - "tags": { - "aerialway": "*" - }, - "terms": [ - "ski lift", - "funifor", - "funitel" - ], - "name": "Aerialway" - }, - "aerialway/cable_car": { - "geometry": [ - "line" - ], - "terms": [ - "tramway", - "ropeway" - ], - "fields": [ - "aerialway/occupancy", - "aerialway/capacity", - "aerialway/duration", - "aerialway/heating" - ], - "tags": { - "aerialway": "cable_car" - }, - "name": "Cable Car" - }, - "aerialway/chair_lift": { - "geometry": [ - "line" - ], - "fields": [ - "aerialway/occupancy", - "aerialway/capacity", - "aerialway/duration", - "aerialway/bubble", - "aerialway/heating" - ], - "tags": { - "aerialway": "chair_lift" - }, - "name": "Chair Lift" - }, - "aerialway/gondola": { - "geometry": [ - "line" - ], - "fields": [ - "aerialway/occupancy", - "aerialway/capacity", - "aerialway/duration", - "aerialway/bubble", - "aerialway/heating" - ], - "tags": { - "aerialway": "gondola" - }, - "name": "Gondola" - }, - "aerialway/magic_carpet": { - "geometry": [ - "line" - ], - "fields": [ - "aerialway/capacity", - "aerialway/duration", - "aerialway/heating" - ], - "tags": { - "aerialway": "magic_carpet" - }, - "name": "Magic Carpet Lift" - }, - "aerialway/platter": { - "geometry": [ - "line" - ], - "terms": [ - "button lift", - "poma lift" - ], - "fields": [ - "aerialway/capacity", - "aerialway/duration" - ], - "tags": { - "aerialway": "platter" - }, - "name": "Platter Lift" - }, - "aerialway/pylon": { - "geometry": [ - "point", - "vertex" - ], - "fields": [ - "ref" - ], - "tags": { - "aerialway": "pylon" - }, - "name": "Aerialway Pylon" - }, - "aerialway/rope_tow": { - "geometry": [ - "line" - ], - "terms": [ - "handle tow", - "bugel lift" - ], - "fields": [ - "aerialway/capacity", - "aerialway/duration" - ], - "tags": { - "aerialway": "rope_tow" - }, - "name": "Rope Tow Lift" - }, - "aerialway/station": { - "geometry": [ - "point", - "vertex" - ], - "fields": [ - "aerialway/access", - "aerialway/summer/access", - "elevation" - ], - "tags": { - "aerialway": "station" - }, - "name": "Aerialway Station" - }, - "aerialway/t-bar": { - "geometry": [ - "line" - ], - "fields": [ - "aerialway/capacity", - "aerialway/duration" - ], - "tags": { - "aerialway": "t-bar" - }, - "name": "T-bar Lift" - }, - "aeroway": { - "icon": "airport", - "fields": [ - "aeroway" - ], - "geometry": [ - "point", - "vertex", - "line", - "area" - ], - "tags": { - "aeroway": "*" - }, - "name": "Aeroway" - }, - "aeroway/aerodrome": { - "icon": "airport", - "geometry": [ - "point", - "area" - ], - "terms": [ - "airplane", - "airport", - "aerodrome" - ], - "fields": [ - "ref", - "iata", - "icao", - "operator" - ], - "tags": { - "aeroway": "aerodrome" - }, - "name": "Airport" - }, - "aeroway/apron": { - "icon": "airport", - "geometry": [ - "area" - ], - "terms": [ - "ramp" - ], - "fields": [ - "ref", - "surface" - ], - "tags": { - "aeroway": "apron" - }, - "name": "Apron" - }, - "aeroway/gate": { - "icon": "airport", - "geometry": [ - "point" - ], - "fields": [ - "ref" - ], - "tags": { - "aeroway": "gate" - }, - "name": "Airport gate" - }, - "aeroway/hangar": { - "geometry": [ - "area" - ], - "fields": [ - "building_area" - ], - "tags": { - "aeroway": "hangar" - }, - "name": "Hangar" - }, - "aeroway/helipad": { - "icon": "heliport", - "geometry": [ - "point", - "area" - ], - "terms": [ - "helicopter", - "helipad", - "heliport" - ], - "tags": { - "aeroway": "helipad" - }, - "name": "Helipad" - }, - "aeroway/runway": { - "geometry": [ - "line", - "area" - ], - "terms": [ - "landing strip" - ], - "fields": [ - "ref", - "surface" - ], - "tags": { - "aeroway": "runway" - }, - "name": "Runway" - }, - "aeroway/taxiway": { - "geometry": [ - "line" - ], - "fields": [ - "ref", - "surface" - ], - "tags": { - "aeroway": "taxiway" - }, - "name": "Taxiway" - }, - "aeroway/terminal": { - "geometry": [ - "point", - "area" - ], - "terms": [ - "airport", - "aerodrome" - ], - "fields": [ - "operator", - "building_area" - ], - "tags": { - "aeroway": "terminal" - }, - "name": "Airport terminal" - }, - "amenity": { - "fields": [ - "amenity" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "amenity": "*" - }, - "name": "Amenity" - }, - "amenity/arts_centre": { - "name": "Arts Center", - "geometry": [ - "point", - "area" - ], - "terms": [ - "arts", - "arts centre" - ], - "tags": { - "amenity": "arts_centre" - }, - "icon": "theatre", - "fields": [ - "building_area", - "address" - ] - }, - "amenity/atm": { - "icon": "bank", - "fields": [ - "operator" - ], - "geometry": [ - "point", - "vertex" - ], - "tags": { - "amenity": "atm" - }, - "name": "ATM" - }, - "amenity/bank": { - "icon": "bank", - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [ - "coffer", - "countinghouse", - "credit union", - "depository", - "exchequer", - "fund", - "hoard", - "investment firm", - "repository", - "reserve", - "reservoir", - "safe", - "savings", - "stock", - "stockpile", - "store", - "storehouse", - "thrift", - "treasury", - "trust company", - "vault" - ], - "tags": { - "amenity": "bank" - }, - "name": "Bank" - }, - "amenity/bar": { - "icon": "bar", - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "amenity": "bar" - }, - "terms": [], - "name": "Bar" - }, - "amenity/bench": { - "geometry": [ - "point", - "vertex", - "line" - ], - "tags": { - "amenity": "bench" - }, - "fields": [ - "backrest" - ], - "name": "Bench" - }, - "amenity/bicycle_parking": { - "icon": "bicycle", - "fields": [ - "bicycle_parking", - "capacity", - "operator", - "covered", - "access_simple" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "amenity": "bicycle_parking" - }, - "name": "Bicycle Parking" - }, - "amenity/bicycle_rental": { - "icon": "bicycle", - "fields": [ - "capacity", - "network", - "operator" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "amenity": "bicycle_rental" - }, - "name": "Bicycle Rental" - }, - "amenity/boat_rental": { - "geometry": [ - "point", - "area" - ], - "tags": { - "amenity": "boat_rental" - }, - "fields": [ - "operator" - ], - "name": "Boat Rental" - }, - "amenity/cafe": { - "icon": "cafe", - "fields": [ - "cuisine", - "internet_access", - "building_area", - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [ - "coffee", - "tea", - "coffee shop" - ], - "tags": { - "amenity": "cafe" - }, - "name": "Cafe" - }, - "amenity/car_rental": { - "icon": "car", - "geometry": [ - "point", - "area" - ], - "tags": { - "amenity": "car_rental" - }, - "fields": [ - "operator" - ], - "name": "Car Rental" - }, - "amenity/car_sharing": { - "icon": "car", - "geometry": [ - "point", - "area" - ], - "tags": { - "amenity": "car_sharing" - }, - "fields": [ - "operator", - "capacity" - ], - "name": "Car Sharing" - }, - "amenity/car_wash": { - "geometry": [ - "point", - "area" - ], - "tags": { - "amenity": "car_wash" - }, - "fields": [ - "building_area" - ], - "name": "Car Wash" - }, - "amenity/childcare": { - "icon": "school", - "fields": [ - "building_area", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [ - "nursery", - "orphanage", - "playgroup" - ], - "tags": { - "amenity": "childcare" - }, - "name": "Childcare" - }, - "amenity/cinema": { - "icon": "cinema", - "fields": [ - "building_area", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [ - "big screen", - "bijou", - "cine", - "drive-in", - "film", - "flicks", - "motion pictures", - "movie house", - "movie theater", - "moving pictures", - "nabes", - "photoplay", - "picture show", - "pictures", - "playhouse", - "show", - "silver screen" - ], - "tags": { - "amenity": "cinema" - }, - "name": "Cinema" - }, - "amenity/clinic": { - "name": "Clinic", - "geometry": [ - "point", - "area" - ], - "terms": [ - "clinic", - "medical clinic" - ], - "tags": { - "amenity": "clinic" - }, - "icon": "hospital", - "fields": [ - "building_area", - "address", - "opening_hours" - ] - }, - "amenity/clock": { - "geometry": [ - "point", - "vertex" - ], - "tags": { - "amenity": "clock" - }, - "name": "Clock" - }, - "amenity/college": { - "icon": "college", - "fields": [ - "operator", - "address" - ], - "geometry": [ - "point", - "area" - ], - "tags": { - "amenity": "college" - }, - "terms": [], - "name": "College" - }, - "amenity/courthouse": { - "fields": [ - "operator", - "building_area", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "amenity": "courthouse" - }, - "name": "Courthouse" - }, - "amenity/dentist": { - "name": "Dentist", - "geometry": [ - "point", - "area" - ], - "terms": [ - "dentist", - "dentist's office" - ], - "tags": { - "amenity": "dentist" - }, - "icon": "hospital", - "fields": [ - "building_area", - "address", - "opening_hours" - ] - }, - "amenity/doctor": { - "name": "Doctor", - "geometry": [ - "point", - "area" - ], - "terms": [ - "doctor", - "doctor's office" - ], - "tags": { - "amenity": "doctors" - }, - "icon": "hospital", - "fields": [ - "building_area", - "address", - "opening_hours" - ] - }, - "amenity/drinking_water": { - "icon": "water", - "geometry": [ - "point" - ], - "tags": { - "amenity": "drinking_water" - }, - "terms": [ - "water fountain", - "potable water" - ], - "name": "Drinking Water" - }, - "amenity/embassy": { - "geometry": [ - "area", - "point" - ], - "tags": { - "amenity": "embassy" - }, - "fields": [ - "country", - "building_area" - ], - "icon": "embassy", - "name": "Embassy" - }, - "amenity/fast_food": { - "icon": "fast-food", - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "amenity": "fast_food" - }, - "terms": [], - "name": "Fast Food" - }, - "amenity/fire_station": { - "icon": "fire-station", - "fields": [ - "operator", - "building_area", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "amenity": "fire_station" - }, - "terms": [], - "name": "Fire Station" - }, - "amenity/fountain": { - "geometry": [ - "point", - "area" - ], - "tags": { - "amenity": "fountain" - }, - "name": "Fountain" - }, - "amenity/fuel": { - "icon": "fuel", - "fields": [ - "operator", - "address", - "building_area" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [ - "petrol", - "fuel", - "propane", - "diesel", - "lng", - "cng", - "biodiesel" - ], - "tags": { - "amenity": "fuel" - }, - "name": "Gas Station" - }, - "amenity/grave_yard": { - "icon": "cemetery", - "fields": [ - "religion" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "amenity": "grave_yard" - }, - "name": "Graveyard" - }, - "amenity/hospital": { - "icon": "hospital", - "fields": [ - "emergency", - "building_area", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [ - "clinic", - "emergency room", - "health service", - "hospice", - "infirmary", - "institution", - "nursing home", - "rest home", - "sanatorium", - "sanitarium", - "sick bay", - "surgery", - "ward" - ], - "tags": { - "amenity": "hospital" - }, - "name": "Hospital" - }, - "amenity/kindergarten": { - "icon": "school", - "fields": [ - "building_area", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [ - "nursery", - "preschool" - ], - "tags": { - "amenity": "kindergarten" - }, - "name": "Kindergarten" - }, - "amenity/library": { - "icon": "library", - "fields": [ - "operator", - "building_area", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "amenity": "library" - }, - "terms": [], - "name": "Library" - }, - "amenity/marketplace": { - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "amenity": "marketplace" - }, - "fields": [ - "building_area" - ], - "name": "Marketplace" - }, - "amenity/parking": { - "icon": "parking", - "fields": [ - "parking", - "capacity", - "fee", - "access_simple", - "supervised", - "park_ride", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "amenity": "parking" - }, - "terms": [], - "name": "Car Parking" - }, - "amenity/pharmacy": { - "icon": "pharmacy", - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "amenity": "pharmacy" - }, - "terms": [], - "name": "Pharmacy" - }, - "amenity/place_of_worship": { - "icon": "place-of-worship", - "fields": [ - "religion", - "denomination", - "building_area", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [ - "abbey", - "basilica", - "bethel", - "cathedral", - "chancel", - "chantry", - "chapel", - "church", - "fold", - "house of God", - "house of prayer", - "house of worship", - "minster", - "mission", - "mosque", - "oratory", - "parish", - "sacellum", - "sanctuary", - "shrine", - "synagogue", - "tabernacle", - "temple" - ], - "tags": { - "amenity": "place_of_worship" - }, - "name": "Place of Worship" - }, - "amenity/place_of_worship/buddhist": { - "icon": "place-of-worship", - "fields": [ - "denomination", - "building_area", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [ - "stupa", - "vihara", - "monastery", - "temple", - "pagoda", - "zendo", - "dojo" - ], - "tags": { - "amenity": "place_of_worship", - "religion": "buddhist" - }, - "name": "Buddhist Temple" - }, - "amenity/place_of_worship/christian": { - "icon": "religious-christian", - "fields": [ - "denomination", - "building_area", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [ - "christian", - "abbey", - "basilica", - "bethel", - "cathedral", - "chancel", - "chantry", - "chapel", - "church", - "fold", - "house of God", - "house of prayer", - "house of worship", - "minster", - "mission", - "oratory", - "parish", - "sacellum", - "sanctuary", - "shrine", - "tabernacle", - "temple" - ], - "tags": { - "amenity": "place_of_worship", - "religion": "christian" - }, - "name": "Church" - }, - "amenity/place_of_worship/jewish": { - "icon": "religious-jewish", - "fields": [ - "denomination", - "building_area", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [ - "jewish", - "synagogue" - ], - "tags": { - "amenity": "place_of_worship", - "religion": "jewish" - }, - "name": "Synagogue" - }, - "amenity/place_of_worship/muslim": { - "icon": "religious-muslim", - "fields": [ - "denomination", - "building_area", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [ - "muslim", - "mosque" - ], - "tags": { - "amenity": "place_of_worship", - "religion": "muslim" - }, - "name": "Mosque" - }, - "amenity/police": { - "icon": "police", - "fields": [ - "operator", - "building_area", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [ - "badge", - "bear", - "blue", - "bluecoat", - "bobby", - "boy scout", - "bull", - "constable", - "constabulary", - "cop", - "copper", - "corps", - "county mounty", - "detective", - "fed", - "flatfoot", - "force", - "fuzz", - "gendarme", - "gumshoe", - "heat", - "law", - "law enforcement", - "man", - "narc", - "officers", - "patrolman", - "police" - ], - "tags": { - "amenity": "police" - }, - "name": "Police" - }, - "amenity/post_box": { - "icon": "post", - "fields": [ - "operator", - "collection_times" - ], - "geometry": [ - "point", - "vertex" - ], - "tags": { - "amenity": "post_box" - }, - "terms": [ - "letter drop", - "letterbox", - "mail drop", - "mailbox", - "pillar box", - "postbox" - ], - "name": "Mailbox" - }, - "amenity/post_office": { - "icon": "post", - "fields": [ - "operator", - "collection_times", - "building_area" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "amenity": "post_office" - }, - "name": "Post Office" - }, - "amenity/pub": { - "icon": "beer", - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "amenity": "pub" - }, - "terms": [], - "name": "Pub" - }, - "amenity/ranger_station": { - "fields": [ - "building_area", - "opening_hours", - "operator", - "phone" - ], - "geometry": [ - "point", - "area" - ], - "terms": [ - "visitor center", - "visitor centre", - "permit center", - "permit centre", - "backcountry office", - "warden office", - "warden center" - ], - "tags": { - "amenity": "ranger_station" - }, - "name": "Ranger Station" - }, - "amenity/recycling": { - "icon": "recycling", - "fields": [ - "cans", - "glass", - "paper", - "clothes" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [], - "tags": { - "amenity": "recycling" - }, - "name": "Recycling" - }, - "amenity/restaurant": { - "icon": "restaurant", - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [ - "bar", - "cafeteria", - "café", - "canteen", - "chophouse", - "coffee shop", - "diner", - "dining room", - "dive*", - "doughtnut shop", - "drive-in", - "eatery", - "eating house", - "eating place", - "fast-food place", - "fish and chips", - "greasy spoon", - "grill", - "hamburger stand", - "hashery", - "hideaway", - "hotdog stand", - "inn", - "joint*", - "luncheonette", - "lunchroom", - "night club", - "outlet*", - "pizzeria", - "saloon", - "soda fountain", - "watering hole" - ], - "tags": { - "amenity": "restaurant" - }, - "name": "Restaurant" - }, - "amenity/school": { - "icon": "school", - "fields": [ - "operator", - "building_area", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [ - "academy", - "alma mater", - "blackboard", - "college", - "department", - "discipline", - "establishment", - "faculty", - "hall", - "halls of ivy", - "institute", - "institution", - "jail*", - "schoolhouse", - "seminary", - "university" - ], - "tags": { - "amenity": "school" - }, - "name": "School" - }, - "amenity/shelter": { - "fields": [ - "shelter_type" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "amenity": "shelter" - }, - "terms": [ - "lean-to" - ], - "name": "Shelter" - }, - "amenity/social_facility": { - "name": "Social Facility", - "geometry": [ - "point", - "area" - ], - "terms": [], - "tags": { - "amenity": "social_facility" - }, - "fields": [ - "social_facility_for", - "address", - "phone", - "opening_hours", - "wheelchair", - "operator" - ] - }, - "amenity/social_facility/food_bank": { - "name": "Food Bank", - "geometry": [ - "point", - "area" - ], - "terms": [], - "tags": { - "amenity": "social_facility", - "social_facility": "food_bank" - }, - "fields": [ - "social_facility_for", - "address", - "phone", - "opening_hours", - "wheelchair", - "operator" - ] - }, - "amenity/social_facility/group_home": { - "name": "Group Home", - "geometry": [ - "point", - "area" - ], - "terms": [ - "elderly", - "old", - "senior living" - ], - "tags": { - "amenity": "social_facility", - "social_facility": "group_home", - "social_facility_for": "senior" - }, - "fields": [ - "social_facility_for", - "address", - "phone", - "opening_hours", - "wheelchair", - "operator" - ] - }, - "amenity/social_facility/homeless_shelter": { - "name": "Homeless Shelter", - "geometry": [ - "point", - "area" - ], - "terms": [ - "houseless", - "unhoused", - "displaced" - ], - "tags": { - "amenity": "social_facility", - "social_facility": "shelter", - "social_facility:for": "homeless" - }, - "fields": [ - "social_facility_for", - "address", - "phone", - "opening_hours", - "wheelchair", - "operator" - ] - }, - "amenity/studio": { - "name": "Studio", - "geometry": [ - "point", - "area" - ], - "terms": [ - "recording studio", - "studio", - "radio", - "radio studio", - "television", - "television studio" - ], - "tags": { - "amenity": "studio" - }, - "icon": "music", - "fields": [ - "building_area", - "studio_type", - "address" - ] - }, - "amenity/swimming_pool": { - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "amenity": "swimming_pool" - }, - "icon": "swimming", - "searchable": false, - "name": "Swimming Pool" - }, - "amenity/taxi": { - "fields": [ - "operator", - "capacity" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [ - "cab" - ], - "tags": { - "amenity": "taxi" - }, - "name": "Taxi Stand" - }, - "amenity/telephone": { - "icon": "telephone", - "geometry": [ - "point", - "vertex" - ], - "tags": { - "amenity": "telephone" - }, - "terms": [ - "phone" - ], - "name": "Telephone" - }, - "amenity/theatre": { - "icon": "theatre", - "fields": [ - "operator", - "building_area", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [ - "theatre", - "performance", - "play", - "musical" - ], - "tags": { - "amenity": "theatre" - }, - "name": "Theater" - }, - "amenity/toilets": { - "fields": [ - "toilets/disposal", - "operator", - "building_area", - "fee", - "access_simple" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [ - "bathroom", - "restroom", - "outhouse", - "privy", - "head", - "lavatory", - "latrine", - "water closet", - "WC", - "W.C." - ], - "tags": { - "amenity": "toilets" - }, - "icon": "toilets", - "name": "Toilets" - }, - "amenity/townhall": { - "icon": "town-hall", - "fields": [ - "building_area", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [ - "village hall", - "city government", - "courthouse", - "municipal building", - "municipal center", - "municipal centre" - ], - "tags": { - "amenity": "townhall" - }, - "name": "Town Hall" - }, - "amenity/university": { - "icon": "college", - "fields": [ - "operator", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "amenity": "university" - }, - "terms": [ - "college" - ], - "name": "University" - }, - "amenity/vending_machine": { - "fields": [ - "vending", - "operator" - ], - "geometry": [ - "point" - ], - "tags": { - "amenity": "vending_machine" - }, - "name": "Vending Machine" - }, - "amenity/veterinary": { - "fields": [], - "geometry": [ - "point", - "area" - ], - "terms": [ - "pet clinic", - "veterinarian", - "animal hospital", - "pet doctor" - ], - "tags": { - "amenity": "veterinary" - }, - "name": "Veterinary" - }, - "amenity/waste_basket": { - "icon": "waste-basket", - "geometry": [ - "point", - "vertex" - ], - "tags": { - "amenity": "waste_basket" - }, - "terms": [ - "rubbish bin", - "litter bin", - "trash can", - "garbage can" - ], - "name": "Waste Basket" - }, - "area": { - "name": "Area", - "tags": { - "area": "yes" - }, - "geometry": [ - "area" - ], - "matchScore": 0.1 - }, - "barrier": { - "geometry": [ - "point", - "vertex", - "line", - "area" - ], - "tags": { - "barrier": "*" - }, - "fields": [ - "barrier" - ], - "name": "Barrier" - }, - "barrier/block": { - "fields": [ - "access" - ], - "geometry": [ - "point", - "vertex" - ], - "tags": { - "barrier": "block" - }, - "name": "Block" - }, - "barrier/bollard": { - "fields": [ - "access" - ], - "geometry": [ - "point", - "vertex", - "line" - ], - "tags": { - "barrier": "bollard" - }, - "name": "Bollard" - }, - "barrier/cattle_grid": { - "geometry": [ - "vertex" - ], - "tags": { - "barrier": "cattle_grid" - }, - "name": "Cattle Grid" - }, - "barrier/city_wall": { - "geometry": [ - "line", - "area" - ], - "tags": { - "barrier": "city_wall" - }, - "name": "City Wall" - }, - "barrier/cycle_barrier": { - "fields": [ - "access" - ], - "geometry": [ - "vertex" - ], - "tags": { - "barrier": "cycle_barrier" - }, - "name": "Cycle Barrier" - }, - "barrier/ditch": { - "geometry": [ - "line", - "area" - ], - "tags": { - "barrier": "ditch" - }, - "name": "Ditch" - }, - "barrier/entrance": { - "icon": "entrance", - "geometry": [ - "vertex" - ], - "tags": { - "barrier": "entrance" - }, - "name": "Entrance", - "searchable": false - }, - "barrier/fence": { - "geometry": [ - "line", - "area" - ], - "tags": { - "barrier": "fence" - }, - "name": "Fence" - }, - "barrier/gate": { - "fields": [ - "access" - ], - "geometry": [ - "point", - "vertex", - "line" - ], - "tags": { - "barrier": "gate" - }, - "name": "Gate" - }, - "barrier/hedge": { - "geometry": [ - "line", - "area" - ], - "tags": { - "barrier": "hedge" - }, - "name": "Hedge" - }, - "barrier/kissing_gate": { - "fields": [ - "access" - ], - "geometry": [ - "vertex" - ], - "tags": { - "barrier": "kissing_gate" - }, - "name": "Kissing Gate" - }, - "barrier/lift_gate": { - "fields": [ - "access" - ], - "geometry": [ - "point", - "vertex" - ], - "tags": { - "barrier": "lift_gate" - }, - "name": "Lift Gate" - }, - "barrier/retaining_wall": { - "geometry": [ - "line", - "area" - ], - "tags": { - "barrier": "retaining_wall" - }, - "name": "Retaining Wall" - }, - "barrier/stile": { - "fields": [ - "access" - ], - "geometry": [ - "point", - "vertex" - ], - "tags": { - "barrier": "stile" - }, - "name": "Stile" - }, - "barrier/toll_booth": { - "fields": [ - "access" - ], - "geometry": [ - "vertex" - ], - "tags": { - "barrier": "toll_booth" - }, - "name": "Toll Booth" - }, - "barrier/wall": { - "geometry": [ - "line", - "area" - ], - "tags": { - "barrier": "wall" - }, - "name": "Wall" - }, - "boundary/administrative": { - "name": "Administrative Boundary", - "geometry": [ - "line" - ], - "tags": { - "boundary": "administrative" - }, - "fields": [ - "admin_level" - ] - }, - "building": { - "icon": "building", - "fields": [ - "building", - "levels", - "address" - ], - "geometry": [ - "area" - ], - "tags": { - "building": "*" - }, - "terms": [], - "name": "Building" - }, - "building/apartments": { - "icon": "commercial", - "fields": [ - "address", - "levels" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "apartments" - }, - "name": "Apartments" - }, - "building/barn": { - "icon": "building", - "fields": [ - "address", - "levels" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "barn" - }, - "name": "Barn" - }, - "building/bunker": { - "fields": [ - "address", - "levels" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "bunker" - }, - "name": "Bunker", - "searchable": false - }, - "building/cabin": { - "icon": "building", - "fields": [ - "address", - "levels" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "cabin" - }, - "name": "Cabin" - }, - "building/cathedral": { - "icon": "place-of-worship", - "fields": [ - "address", - "levels" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "cathedral" - }, - "name": "Cathedral" - }, - "building/chapel": { - "icon": "place-of-worship", - "fields": [ - "address", - "levels" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "chapel" - }, - "name": "Chapel" - }, - "building/church": { - "icon": "place-of-worship", - "fields": [ - "address", - "levels" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "church" - }, - "name": "Church" - }, - "building/commercial": { - "icon": "commercial", - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "commercial" - }, - "name": "Commercial Building" - }, - "building/construction": { - "icon": "building", - "fields": [ - "address", - "levels" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "construction" - }, - "name": "Building Under Construction" - }, - "building/detached": { - "icon": "building", - "fields": [ - "address", - "levels" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "detached" - }, - "name": "Detached Home" - }, - "building/dormitory": { - "icon": "building", - "fields": [ - "address", - "levels" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "dormitory" - }, - "name": "Dormitory" - }, - "building/entrance": { - "icon": "entrance", - "geometry": [ - "vertex" - ], - "tags": { - "building": "entrance" - }, - "name": "Entrance", - "searchable": false - }, - "building/garage": { - "fields": [ - "capacity" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "garage" - }, - "name": "Garage", - "icon": "warehouse" - }, - "building/garages": { - "icon": "warehouse", - "fields": [ - "capacity" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "garages" - }, - "name": "Garages" - }, - "building/greenhouse": { - "icon": "building", - "fields": [ - "address", - "levels" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "greenhouse" - }, - "name": "Greenhouse" - }, - "building/hospital": { - "icon": "building", - "fields": [ - "address", - "levels" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "hospital" - }, - "name": "Hospital Building" - }, - "building/hotel": { - "icon": "building", - "fields": [ - "address", - "levels" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "hotel" - }, - "name": "Hotel Building" - }, - "building/house": { - "icon": "building", - "fields": [ - "address", - "levels" - ], - "geometry": [ - "point", - "area" - ], - "tags": { - "building": "house" - }, - "name": "House" - }, - "building/hut": { - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "hut" - }, - "name": "Hut" - }, - "building/industrial": { - "icon": "industrial", - "fields": [ - "address", - "levels" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "industrial" - }, - "name": "Industrial Building" - }, - "building/public": { - "icon": "building", - "fields": [ - "address", - "levels" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "public" - }, - "name": "Public Building" - }, - "building/residential": { - "icon": "building", - "fields": [ - "address", - "levels" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "residential" - }, - "name": "Residential Building" - }, - "building/retail": { - "icon": "building", - "fields": [ - "address", - "levels" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "retail" - }, - "name": "Retail Building" - }, - "building/roof": { - "icon": "building", - "fields": [ - "address", - "levels" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "roof" - }, - "name": "Roof" - }, - "building/school": { - "icon": "building", - "fields": [ - "address", - "levels" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "school" - }, - "name": "School Building" - }, - "building/shed": { - "icon": "building", - "fields": [ - "address", - "levels" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "shed" - }, - "name": "Shed" - }, - "building/stable": { - "icon": "building", - "fields": [ - "address", - "levels" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "stable" - }, - "name": "Stable" - }, - "building/static_caravan": { - "icon": "building", - "fields": [ - "address", - "levels" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "static_caravan" - }, - "name": "Static Mobile Home" - }, - "building/terrace": { - "icon": "building", - "fields": [ - "address", - "levels" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "terrace" - }, - "name": "Row Houses" - }, - "building/train_station": { - "icon": "building", - "fields": [ - "address", - "levels" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "train_station" - }, - "name": "Train Station", - "searchable": false - }, - "building/university": { - "icon": "building", - "fields": [ - "address", - "levels" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "university" - }, - "name": "University Building" - }, - "building/warehouse": { - "icon": "building", - "fields": [ - "address", - "levels" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "building": "warehouse" - }, - "name": "Warehouse" - }, - "craft/basket_maker": { - "name": "Basket Maker", - "geometry": [ - "point", - "area" - ], - "terms": [ - "basket", - "basketry", - "basket maker", - "basket weaver" - ], - "tags": { - "craft": "basket_maker" - }, - "icon": "art-gallery", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/beekeeper": { - "name": "Beekeeper", - "geometry": [ - "point", - "area" - ], - "terms": [ - "bees", - "beekeeper", - "bee box" - ], - "tags": { - "craft": "beekeeper" - }, - "icon": "farm", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/blacksmith": { - "name": "Blacksmith", - "geometry": [ - "point", - "area" - ], - "terms": [ - "blacksmith" - ], - "tags": { - "craft": "blacksmith" - }, - "icon": "farm", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/boatbuilder": { - "name": "Boat Builder", - "geometry": [ - "point", - "area" - ], - "terms": [ - "boat builder" - ], - "tags": { - "craft": "boatbuilder" - }, - "icon": "marker-stroked", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/bookbinder": { - "name": "Bookbinder", - "geometry": [ - "point", - "area" - ], - "terms": [ - "bookbinder", - "book repair" - ], - "tags": { - "craft": "bookbinder" - }, - "icon": "library", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/brewery": { - "name": "Brewery", - "geometry": [ - "point", - "area" - ], - "terms": [ - "brewery" - ], - "tags": { - "craft": "brewery" - }, - "icon": "beer", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/carpenter": { - "name": "Carpenter", - "geometry": [ - "point", - "area" - ], - "terms": [ - "carpenter", - "woodworker" - ], - "tags": { - "craft": "carpenter" - }, - "icon": "logging", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/carpet_layer": { - "name": "Carpet Layer", - "geometry": [ - "point", - "area" - ], - "terms": [ - "carpet layer" - ], - "tags": { - "craft": "carpet_layer" - }, - "icon": "square", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/caterer": { - "name": "Caterer", - "geometry": [ - "point", - "area" - ], - "terms": [ - "Caterer", - "Catering" - ], - "tags": { - "craft": "caterer" - }, - "icon": "bakery", - "fields": [ - "cuisine", - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/clockmaker": { - "name": "Clockmaker", - "geometry": [ - "point", - "area" - ], - "terms": [ - "clock", - "clockmaker", - "clock repair" - ], - "tags": { - "craft": "clockmaker" - }, - "icon": "circle-stroked", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/confectionary": { - "name": "Confectionary", - "geometry": [ - "point", - "area" - ], - "terms": [ - "confectionary", - "sweets", - "candy" - ], - "tags": { - "craft": "confectionary" - }, - "icon": "bakery", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/dressmaker": { - "name": "Dressmaker", - "geometry": [ - "point", - "area" - ], - "terms": [ - "dress", - "dressmaker" - ], - "tags": { - "craft": "dressmaker" - }, - "icon": "clothing-store", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/electrician": { - "name": "Electrician", - "geometry": [ - "point", - "area" - ], - "terms": [ - "electrician" - ], - "tags": { - "craft": "electrician" - }, - "icon": "marker-stroked", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/gardener": { - "name": "Gardener", - "geometry": [ - "point", - "area" - ], - "terms": [ - "gardener", - "landscaper", - "grounds keeper" - ], - "tags": { - "craft": "gardener" - }, - "icon": "garden", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/glaziery": { - "name": "Glaziery", - "geometry": [ - "point", - "area" - ], - "terms": [ - "glass", - "glass foundry", - "stained-glass", - "window" - ], - "tags": { - "craft": "glaziery" - }, - "icon": "fire-station", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/handicraft": { - "name": "Handicraft", - "geometry": [ - "point", - "area" - ], - "terms": [ - "handicraft" - ], - "tags": { - "craft": "handicraft" - }, - "icon": "art-gallery", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/hvac": { - "name": "HVAC", - "geometry": [ - "point", - "area" - ], - "terms": [ - "heating", - "ventilating", - "air-conditioning", - "air conditioning" - ], - "tags": { - "craft": "hvac" - }, - "icon": "marker-stroked", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/insulator": { - "name": "Insulator", - "geometry": [ - "point", - "area" - ], - "terms": [ - "insulation", - "insulator" - ], - "tags": { - "craft": "insulation" - }, - "icon": "marker-stroked", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/jeweler": { - "name": "Jeweler", - "geometry": [ - "point", - "area" - ], - "terms": [ - "jeweler", - "gem", - "diamond" - ], - "tags": { - "craft": "jeweler" - }, - "icon": "marker-stroked", - "searchable": false, - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/key_cutter": { - "name": "Key Cutter", - "geometry": [ - "point", - "area" - ], - "terms": [ - "key", - "key cutter" - ], - "tags": { - "craft": "key_cutter" - }, - "icon": "marker-stroked", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/locksmith": { - "name": "Locksmith", - "geometry": [ - "point", - "area" - ], - "terms": [ - "locksmith", - "lock" - ], - "tags": { - "craft": "locksmith" - }, - "icon": "marker-stroked", - "searchable": false, - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/metal_construction": { - "name": "Metal Construction", - "geometry": [ - "point", - "area" - ], - "terms": [ - "metal construction" - ], - "tags": { - "craft": "metal_construction" - }, - "icon": "marker-stroked", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/optician": { - "name": "Optician", - "geometry": [ - "point", - "area" - ], - "terms": [ - "glasses", - "optician" - ], - "tags": { - "craft": "optician" - }, - "icon": "marker-stroked", - "searchable": false, - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/painter": { - "name": "Painter", - "geometry": [ - "point", - "area" - ], - "terms": [ - "painter" - ], - "tags": { - "craft": "painter" - }, - "icon": "art-gallery", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/photographer": { - "name": "Photographer", - "geometry": [ - "point", - "area" - ], - "terms": [ - "photographer" - ], - "tags": { - "craft": "photographer" - }, - "icon": "camera", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/photographic_labratory": { - "name": "Photographic Labratory", - "geometry": [ - "point", - "area" - ], - "terms": [ - "photographic labratory", - "film developer" - ], - "tags": { - "craft": "photographic_labratory" - }, - "icon": "camera", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/plasterer": { - "name": "Plasterer", - "geometry": [ - "point", - "area" - ], - "terms": [ - "plasterer" - ], - "tags": { - "craft": "plasterer" - }, - "icon": "marker-stroked", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/plumber": { - "name": "Plumber", - "geometry": [ - "point", - "area" - ], - "terms": [ - "pumber" - ], - "tags": { - "craft": "plumber" - }, - "icon": "marker-stroked", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/pottery": { - "name": "Pottery", - "geometry": [ - "point", - "area" - ], - "terms": [ - "pottery", - "potter" - ], - "tags": { - "craft": "pottery" - }, - "icon": "art-gallery", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/rigger": { - "name": "Rigger", - "geometry": [ - "point", - "area" - ], - "terms": [ - "rigger" - ], - "tags": { - "craft": "rigger" - }, - "icon": "marker-stroked", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/roofer": { - "name": "Roofer", - "geometry": [ - "point", - "area" - ], - "terms": [ - "roofer" - ], - "tags": { - "craft": "roofer" - }, - "icon": "marker-stroked", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/saddler": { - "name": "Saddler", - "geometry": [ - "point", - "area" - ], - "terms": [ - "saddler" - ], - "tags": { - "craft": "saddler" - }, - "icon": "marker-stroked", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/sailmaker": { - "name": "Sailmaker", - "geometry": [ - "point", - "area" - ], - "terms": [ - "sailmaker" - ], - "tags": { - "craft": "sailmaker" - }, - "icon": "marker-stroked", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/sawmill": { - "name": "Sawmill", - "geometry": [ - "point", - "area" - ], - "terms": [ - "sawmill", - "lumber" - ], - "tags": { - "craft": "sawmill" - }, - "icon": "park", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/scaffolder": { - "name": "Scaffolder", - "geometry": [ - "point", - "area" - ], - "terms": [ - "scaffolder" - ], - "tags": { - "craft": "scaffolder" - }, - "icon": "marker-stroked", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/sculpter": { - "name": "Sculpter", - "geometry": [ - "point", - "area" - ], - "terms": [ - "sculpter" - ], - "tags": { - "craft": "sculpter" - }, - "icon": "art-gallery", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/shoemaker": { - "name": "Shoemaker", - "geometry": [ - "point", - "area" - ], - "terms": [ - "shoe repair", - "shoemaker" - ], - "tags": { - "craft": "shoemaker" - }, - "icon": "marker-stroked", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/stonemason": { - "name": "Stonemason", - "geometry": [ - "point", - "area" - ], - "terms": [ - "stonemason", - "masonry" - ], - "tags": { - "craft": "stonemason" - }, - "icon": "marker-stroked", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/sweep": { - "name": "Chimney Sweep", - "geometry": [ - "point", - "area" - ], - "terms": [ - "sweep", - "chimney sweep" - ], - "tags": { - "craft": "sweep" - }, - "icon": "marker-stroked", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/tailor": { - "name": "Tailor", - "geometry": [ - "point", - "area" - ], - "terms": [ - "tailor", - "clothes" - ], - "tags": { - "craft": "tailor" - }, - "icon": "clothing-store", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/tiler": { - "name": "Tiler", - "geometry": [ - "point", - "area" - ], - "terms": [ - "tiler" - ], - "tags": { - "craft": "tiler" - }, - "icon": "marker-stroked", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/tinsmith": { - "name": "Tinsmith", - "geometry": [ - "point", - "area" - ], - "terms": [ - "tinsmith" - ], - "tags": { - "craft": "tinsmith" - }, - "icon": "marker-stroked", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/upholsterer": { - "name": "Upholsterer", - "geometry": [ - "point", - "area" - ], - "terms": [ - "upholsterer" - ], - "tags": { - "craft": "upholsterer" - }, - "icon": "marker-stroked", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/watchmaker": { - "name": "Watchmaker", - "geometry": [ - "point", - "area" - ], - "terms": [ - "watch", - "watchmaker", - "watch repair" - ], - "tags": { - "craft": "watchmaker" - }, - "icon": "circle-stroked", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "craft/window_construction": { - "name": "Window Construction", - "geometry": [ - "point", - "area" - ], - "terms": [ - "window", - "window maker", - "window construction" - ], - "tags": { - "craft": "window_construction" - }, - "icon": "marker-stroked", - "fields": [ - "building_area", - "address", - "operator", - "opening_hours" - ] - }, - "embankment": { - "geometry": [ - "line" - ], - "tags": { - "embankment": "yes" - }, - "name": "Embankment", - "matchScore": 0.2 - }, - "emergency/ambulance_station": { - "fields": [ - "operator" - ], - "geometry": [ - "area", - "point", - "vertex" - ], - "tags": { - "emergency": "ambulance_station" - }, - "name": "Ambulance Station" - }, - "emergency/fire_hydrant": { - "fields": [ - "fire_hydrant/type" - ], - "geometry": [ - "point", - "vertex" - ], - "tags": { - "emergency": "fire_hydrant" - }, - "name": "Fire Hydrant" - }, - "emergency/phone": { - "icon": "emergency-telephone", - "fields": [ - "operator" - ], - "geometry": [ - "point", - "vertex" - ], - "tags": { - "emergency": "phone" - }, - "name": "Emergency Phone" - }, - "entrance": { - "icon": "entrance", - "geometry": [ - "vertex" - ], - "tags": { - "entrance": "*" - }, - "fields": [ - "entrance", - "access_simple", - "address" - ], - "name": "Entrance" - }, - "footway/crossing": { - "fields": [ - "crossing", - "access", - "surface" - ], - "geometry": [ - "line" - ], - "tags": { - "highway": "footway", - "footway": "crossing" - }, - "terms": [ - "crosswalk", - "zebra crossing" - ], - "name": "Crossing" - }, - "footway/sidewalk": { - "fields": [ - "surface", - "lit", - "access" - ], - "geometry": [ - "line" - ], - "tags": { - "highway": "footway", - "footway": "sidewalk" - }, - "terms": [], - "name": "Sidewalk" - }, - "golf/bunker": { - "icon": "golf", - "geometry": [ - "area" - ], - "tags": { - "golf": "bunker", - "natural": "sand" - }, - "terms": [ - "hazard", - "bunker" - ], - "name": "Sand Trap" - }, - "golf/fairway": { - "icon": "golf", - "geometry": [ - "area" - ], - "tags": { - "golf": "fairway", - "landuse": "grass" - }, - "name": "Fairway" - }, - "golf/green": { - "icon": "golf", - "geometry": [ - "area" - ], - "tags": { - "golf": "green", - "landuse": "grass", - "leisure": "pitch", - "sport": "golf" - }, - "terms": [ - "putting green" - ], - "name": "Putting Green" - }, - "golf/hole": { - "icon": "golf", - "fields": [ - "golf_hole", - "par", - "handicap" - ], - "geometry": [ - "line" - ], - "tags": { - "golf": "hole" - }, - "name": "Golf Hole" - }, - "golf/lateral_water_hazard": { - "icon": "golf", - "geometry": [ - "line", - "area" - ], - "tags": { - "golf": "lateral_water_hazard", - "natural": "water" - }, - "name": "Lateral Water Hazard" - }, - "golf/rough": { - "icon": "golf", - "geometry": [ - "area" - ], - "tags": { - "golf": "rough", - "landuse": "grass" - }, - "name": "Rough" - }, - "golf/tee": { - "icon": "golf", - "geometry": [ - "area" - ], - "tags": { - "golf": "tee", - "landuse": "grass" - }, - "terms": [ - "teeing ground" - ], - "name": "Tee Box" - }, - "golf/water_hazard": { - "icon": "golf", - "geometry": [ - "line", - "area" - ], - "tags": { - "golf": "water_hazard", - "natural": "water" - }, - "name": "Water Hazard" - }, - "highway": { - "fields": [ - "highway" - ], - "geometry": [ - "point", - "vertex", - "line", - "area" - ], - "tags": { - "highway": "*" - }, - "name": "Highway" - }, - "highway/bridleway": { - "fields": [ - "access", - "surface", - "structure" - ], - "icon": "highway-bridleway", - "geometry": [ - "line" - ], - "tags": { - "highway": "bridleway" - }, - "terms": [ - "bridleway", - "equestrian trail", - "horse riding path", - "bridle road", - "horse trail" - ], - "name": "Bridle Path" - }, - "highway/bus_stop": { - "icon": "bus", - "fields": [ - "operator", - "shelter" - ], - "geometry": [ - "point", - "vertex" - ], - "tags": { - "highway": "bus_stop" - }, - "terms": [], - "name": "Bus Stop" - }, - "highway/crossing": { - "fields": [ - "crossing" - ], - "geometry": [ - "vertex" - ], - "tags": { - "highway": "crossing" - }, - "terms": [ - "crosswalk", - "zebra crossing" - ], - "name": "Crossing" - }, - "highway/cycleway": { - "icon": "highway-cycleway", - "fields": [ - "surface", - "lit", - "structure", - "access", - "oneway" - ], - "geometry": [ - "line" - ], - "tags": { - "highway": "cycleway" - }, - "terms": [], - "name": "Cycle Path" - }, - "highway/footway": { - "icon": "highway-footway", - "fields": [ - "structure", - "access", - "surface" - ], - "geometry": [ - "line", - "area" - ], - "terms": [ - "beaten path", - "boulevard", - "clearing", - "course", - "cut*", - "drag*", - "footpath", - "highway", - "lane", - "line", - "orbit", - "passage", - "pathway", - "rail", - "rails", - "road", - "roadway", - "route", - "street", - "thoroughfare", - "trackway", - "trail", - "trajectory", - "walk" - ], - "tags": { - "highway": "footway" - }, - "name": "Foot Path" - }, - "highway/living_street": { - "icon": "highway-living-street", - "fields": [ - "oneway", - "maxspeed", - "structure", - "access", - "surface" - ], - "geometry": [ - "line" - ], - "tags": { - "highway": "living_street" - }, - "name": "Living Street" - }, - "highway/mini_roundabout": { - "geometry": [ - "vertex" - ], - "tags": { - "highway": "mini_roundabout" - }, - "fields": [ - "clock_direction" - ], - "name": "Mini-Roundabout" - }, - "highway/motorway": { - "icon": "highway-motorway", - "fields": [ - "oneway", - "maxspeed", - "structure", - "access", - "lanes", - "surface", - "ref" - ], - "geometry": [ - "line" - ], - "tags": { - "highway": "motorway" - }, - "terms": [], - "name": "Motorway" - }, - "highway/motorway_junction": { - "geometry": [ - "vertex" - ], - "tags": { - "highway": "motorway_junction" - }, - "fields": [ - "ref" - ], - "name": "Motorway Junction" - }, - "highway/motorway_link": { - "icon": "highway-motorway-link", - "fields": [ - "oneway_yes", - "maxspeed", - "structure", - "access", - "surface", - "ref" - ], - "geometry": [ - "line" - ], - "tags": { - "highway": "motorway_link" - }, - "terms": [ - "ramp", - "on ramp", - "off ramp" - ], - "name": "Motorway Link" - }, - "highway/path": { - "icon": "highway-path", - "fields": [ - "structure", - "access", - "sac_scale", - "surface", - "incline", - "trail_visibility", - "ref" - ], - "geometry": [ - "line" - ], - "tags": { - "highway": "path" - }, - "terms": [], - "name": "Path" - }, - "highway/pedestrian": { - "fields": [ - "access", - "oneway", - "surface" - ], - "geometry": [ - "line", - "area" - ], - "tags": { - "highway": "pedestrian" - }, - "terms": [], - "name": "Pedestrian" - }, - "highway/primary": { - "icon": "highway-primary", - "fields": [ - "oneway", - "maxspeed", - "structure", - "access", - "lanes", - "surface", - "ref" - ], - "geometry": [ - "line" - ], - "tags": { - "highway": "primary" - }, - "terms": [], - "name": "Primary Road" - }, - "highway/primary_link": { - "icon": "highway-primary-link", - "fields": [ - "oneway", - "maxspeed", - "structure", - "access", - "surface", - "ref" - ], - "geometry": [ - "line" - ], - "tags": { - "highway": "primary_link" - }, - "terms": [ - "ramp", - "on ramp", - "off ramp" - ], - "name": "Primary Link" - }, - "highway/residential": { - "icon": "highway-residential", - "fields": [ - "oneway", - "maxspeed", - "structure", - "access", - "surface" - ], - "geometry": [ - "line" - ], - "tags": { - "highway": "residential" - }, - "terms": [], - "name": "Residential Road" - }, - "highway/rest_area": { - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "highway": "rest_area" - }, - "terms": [ - "rest stop", - "turnout", - "lay-by" - ], - "name": "Rest Area" - }, - "highway/road": { - "icon": "highway-road", - "fields": [ - "oneway", - "maxspeed", - "structure", - "access", - "surface" - ], - "geometry": [ - "line" - ], - "tags": { - "highway": "road" - }, - "terms": [], - "name": "Unknown Road" - }, - "highway/secondary": { - "icon": "highway-secondary", - "fields": [ - "oneway", - "maxspeed", - "structure", - "access", - "lanes", - "surface", - "ref" - ], - "geometry": [ - "line" - ], - "tags": { - "highway": "secondary" - }, - "terms": [], - "name": "Secondary Road" - }, - "highway/secondary_link": { - "icon": "highway-secondary-link", - "fields": [ - "oneway", - "maxspeed", - "structure", - "access", - "surface", - "ref" - ], - "geometry": [ - "line" - ], - "tags": { - "highway": "secondary_link" - }, - "terms": [ - "ramp", - "on ramp", - "off ramp" - ], - "name": "Secondary Link" - }, - "highway/service": { - "icon": "highway-service", - "fields": [ - "service", - "oneway", - "maxspeed", - "structure", - "access", - "surface" - ], - "geometry": [ - "line" - ], - "tags": { - "highway": "service" - }, - "terms": [], - "name": "Service Road" - }, - "highway/service/alley": { - "icon": "highway-service", - "fields": [ - "oneway", - "access", - "surface" - ], - "geometry": [ - "line" - ], - "tags": { - "highway": "service", - "service": "alley" - }, - "name": "Alley" - }, - "highway/service/drive-through": { - "icon": "highway-service", - "fields": [ - "oneway", - "access", - "surface" - ], - "geometry": [ - "line" - ], - "tags": { - "highway": "service", - "service": "drive-through" - }, - "name": "Drive-Through" - }, - "highway/service/driveway": { - "icon": "highway-service", - "fields": [ - "oneway", - "access", - "surface" - ], - "geometry": [ - "line" - ], - "tags": { - "highway": "service", - "service": "driveway" - }, - "name": "Driveway" - }, - "highway/service/emergency_access": { - "icon": "highway-service", - "fields": [ - "oneway", - "access", - "surface" - ], - "geometry": [ - "line" - ], - "tags": { - "highway": "service", - "service": "emergency_access" - }, - "name": "Emergency Access" - }, - "highway/service/parking_aisle": { - "icon": "highway-service", - "fields": [ - "oneway", - "access", - "surface" - ], - "geometry": [ - "line" - ], - "tags": { - "highway": "service", - "service": "parking_aisle" - }, - "name": "Parking Aisle" - }, - "highway/services": { - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "highway": "services" - }, - "terms": [ - "services", - "travel plaza", - "service station" - ], - "name": "Service Area" - }, - "highway/steps": { - "fields": [ - "access", - "surface" - ], - "icon": "highway-steps", - "geometry": [ - "line" - ], - "tags": { - "highway": "steps" - }, - "terms": [ - "stairs", - "staircase" - ], - "name": "Steps" - }, - "highway/stop": { - "geometry": [ - "vertex" - ], - "tags": { - "highway": "stop" - }, - "terms": [ - "stop sign" - ], - "name": "Stop Sign" - }, - "highway/tertiary": { - "icon": "highway-tertiary", - "fields": [ - "oneway", - "maxspeed", - "structure", - "access", - "lanes", - "surface", - "ref" - ], - "geometry": [ - "line" - ], - "tags": { - "highway": "tertiary" - }, - "terms": [], - "name": "Tertiary Road" - }, - "highway/tertiary_link": { - "icon": "highway-tertiary-link", - "fields": [ - "oneway", - "maxspeed", - "structure", - "access", - "surface", - "ref" - ], - "geometry": [ - "line" - ], - "tags": { - "highway": "tertiary_link" - }, - "terms": [ - "ramp", - "on ramp", - "off ramp" - ], - "name": "Tertiary Link" - }, - "highway/track": { - "icon": "highway-track", - "fields": [ - "tracktype", - "oneway", - "maxspeed", - "structure", - "access", - "surface" - ], - "geometry": [ - "line" - ], - "tags": { - "highway": "track" - }, - "terms": [], - "name": "Track" - }, - "highway/traffic_signals": { - "geometry": [ - "vertex" - ], - "tags": { - "highway": "traffic_signals" - }, - "terms": [ - "light", - "stoplight", - "traffic light" - ], - "name": "Traffic Signals" - }, - "highway/trunk": { - "icon": "highway-trunk", - "fields": [ - "oneway", - "maxspeed", - "structure", - "access", - "lanes", - "surface", - "ref" - ], - "geometry": [ - "line" - ], - "tags": { - "highway": "trunk" - }, - "terms": [], - "name": "Trunk Road" - }, - "highway/trunk_link": { - "icon": "highway-trunk-link", - "fields": [ - "oneway", - "maxspeed", - "structure", - "access", - "surface", - "ref" - ], - "geometry": [ - "line" - ], - "tags": { - "highway": "trunk_link" - }, - "terms": [ - "ramp", - "on ramp", - "off ramp" - ], - "name": "Trunk Link" - }, - "highway/turning_circle": { - "icon": "circle", - "geometry": [ - "vertex" - ], - "tags": { - "highway": "turning_circle" - }, - "terms": [], - "name": "Turning Circle" - }, - "highway/unclassified": { - "icon": "highway-unclassified", - "fields": [ - "oneway", - "maxspeed", - "structure", - "access", - "surface" - ], - "geometry": [ - "line" - ], - "tags": { - "highway": "unclassified" - }, - "terms": [], - "name": "Unclassified Road" - }, - "historic": { - "fields": [ - "historic" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "historic": "*" - }, - "name": "Historic Site" - }, - "historic/archaeological_site": { - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "historic": "archaeological_site" - }, - "name": "Archaeological Site" - }, - "historic/boundary_stone": { - "geometry": [ - "point", - "vertex" - ], - "tags": { - "historic": "boundary_stone" - }, - "name": "Boundary Stone" - }, - "historic/castle": { - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "historic": "castle" - }, - "name": "Castle" - }, - "historic/memorial": { - "icon": "monument", - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "historic": "memorial" - }, - "name": "Memorial" - }, - "historic/monument": { - "icon": "monument", - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "historic": "monument" - }, - "name": "Monument" - }, - "historic/ruins": { - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "historic": "ruins" - }, - "name": "Ruins" - }, - "historic/wayside_cross": { - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "historic": "wayside_cross" - }, - "name": "Wayside Cross" - }, - "historic/wayside_shrine": { - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "historic": "wayside_shrine" - }, - "name": "Wayside Shrine" - }, - "landuse": { - "fields": [ - "landuse" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "landuse": "*" - }, - "name": "Landuse" - }, - "landuse/allotments": { - "geometry": [ - "point", - "area" - ], - "tags": { - "landuse": "allotments" - }, - "terms": [], - "name": "Allotments" - }, - "landuse/basin": { - "geometry": [ - "point", - "area" - ], - "tags": { - "landuse": "basin" - }, - "terms": [], - "name": "Basin" - }, - "landuse/cemetery": { - "icon": "cemetery", - "geometry": [ - "point", - "area" - ], - "tags": { - "landuse": "cemetery" - }, - "terms": [], - "name": "Cemetery" - }, - "landuse/commercial": { - "geometry": [ - "point", - "area" - ], - "tags": { - "landuse": "commercial" - }, - "terms": [], - "name": "Commercial" - }, - "landuse/construction": { - "fields": [ - "construction", - "operator" - ], - "geometry": [ - "point", - "area" - ], - "tags": { - "landuse": "construction" - }, - "terms": [], - "name": "Construction" - }, - "landuse/farm": { - "geometry": [ - "point", - "area" - ], - "tags": { - "landuse": "farm" - }, - "terms": [], - "name": "Farm", - "icon": "farm" - }, - "landuse/farmland": { - "geometry": [ - "point", - "area" - ], - "tags": { - "landuse": "farmland" - }, - "terms": [], - "name": "Farmland", - "icon": "farm", - "searchable": false - }, - "landuse/farmyard": { - "geometry": [ - "point", - "area" - ], - "tags": { - "landuse": "farmyard" - }, - "terms": [], - "name": "Farmyard", - "icon": "farm" - }, - "landuse/forest": { - "fields": [ - "wood" - ], - "icon": "park2", - "geometry": [ - "point", - "area" - ], - "tags": { - "landuse": "forest" - }, - "terms": [], - "name": "Forest" - }, - "landuse/grass": { - "geometry": [ - "point", - "area" - ], - "tags": { - "landuse": "grass" - }, - "terms": [], - "name": "Grass" - }, - "landuse/industrial": { - "icon": "industrial", - "geometry": [ - "point", - "area" - ], - "tags": { - "landuse": "industrial" - }, - "terms": [], - "name": "Industrial" - }, - "landuse/meadow": { - "geometry": [ - "point", - "area" - ], - "tags": { - "landuse": "meadow" - }, - "terms": [], - "name": "Meadow" - }, - "landuse/orchard": { - "icon": "park2", - "geometry": [ - "point", - "area" - ], - "tags": { - "landuse": "orchard" - }, - "terms": [], - "name": "Orchard" - }, - "landuse/quarry": { - "geometry": [ - "point", - "area" - ], - "tags": { - "landuse": "quarry" - }, - "terms": [], - "name": "Quarry" - }, - "landuse/residential": { - "geometry": [ - "point", - "area" - ], - "tags": { - "landuse": "residential" - }, - "terms": [], - "name": "Residential" - }, - "landuse/retail": { - "icon": "shop", - "geometry": [ - "point", - "area" - ], - "tags": { - "landuse": "retail" - }, - "name": "Retail" - }, - "landuse/vineyard": { - "geometry": [ - "point", - "area" - ], - "tags": { - "landuse": "vineyard" - }, - "terms": [], - "name": "Vineyard" - }, - "leisure": { - "fields": [ - "leisure" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "leisure": "*" - }, - "name": "Leisure" - }, - "leisure/common": { - "geometry": [ - "point", - "area" - ], - "terms": [ - "open space" - ], - "tags": { - "leisure": "common" - }, - "name": "Common" - }, - "leisure/dog_park": { - "geometry": [ - "point", - "area" - ], - "terms": [], - "tags": { - "leisure": "dog_park" - }, - "name": "Dog Park", - "icon": "dog-park" - }, - "leisure/garden": { - "icon": "garden", - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "leisure": "garden" - }, - "name": "Garden" - }, - "leisure/golf_course": { - "icon": "golf", - "fields": [ - "operator", - "address" - ], - "geometry": [ - "point", - "area" - ], - "tags": { - "leisure": "golf_course" - }, - "terms": [ - "links" - ], - "name": "Golf Course" - }, - "leisure/marina": { - "icon": "harbor", - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "leisure": "marina" - }, - "name": "Marina" - }, - "leisure/park": { - "icon": "park", - "geometry": [ - "point", - "area" - ], - "terms": [ - "esplanade", - "estate", - "forest", - "garden", - "grass", - "green", - "grounds", - "lawn", - "lot", - "meadow", - "parkland", - "place", - "playground", - "plaza", - "pleasure garden", - "recreation area", - "square", - "tract", - "village green", - "woodland" - ], - "tags": { - "leisure": "park" - }, - "name": "Park" - }, - "leisure/pitch": { - "icon": "pitch", - "fields": [ - "sport", - "surface" - ], - "geometry": [ - "point", - "area" - ], - "tags": { - "leisure": "pitch" - }, - "terms": [], - "name": "Sport Pitch" - }, - "leisure/pitch/american_football": { - "icon": "america-football", - "fields": [ - "surface" - ], - "geometry": [ - "point", - "area" - ], - "tags": { - "leisure": "pitch", - "sport": "american_football" - }, - "terms": [], - "name": "American Football Field" - }, - "leisure/pitch/baseball": { - "icon": "baseball", - "geometry": [ - "point", - "area" - ], - "tags": { - "leisure": "pitch", - "sport": "baseball" - }, - "terms": [], - "name": "Baseball Diamond" - }, - "leisure/pitch/basketball": { - "icon": "basketball", - "fields": [ - "surface" - ], - "geometry": [ - "point", - "area" - ], - "tags": { - "leisure": "pitch", - "sport": "basketball" - }, - "terms": [], - "name": "Basketball Court" - }, - "leisure/pitch/skateboard": { - "icon": "pitch", - "fields": [ - "surface" - ], - "geometry": [ - "point", - "area" - ], - "tags": { - "leisure": "pitch", - "sport": "skateboard" - }, - "terms": [], - "name": "Skate Park" - }, - "leisure/pitch/soccer": { - "icon": "soccer", - "fields": [ - "surface" - ], - "geometry": [ - "point", - "area" - ], - "tags": { - "leisure": "pitch", - "sport": "soccer" - }, - "terms": [], - "name": "Soccer Field" - }, - "leisure/pitch/tennis": { - "icon": "tennis", - "fields": [ - "surface" - ], - "geometry": [ - "point", - "area" - ], - "tags": { - "leisure": "pitch", - "sport": "tennis" - }, - "terms": [], - "name": "Tennis Court" - }, - "leisure/pitch/volleyball": { - "icon": "pitch", - "fields": [ - "surface" - ], - "geometry": [ - "point", - "area" - ], - "tags": { - "leisure": "pitch", - "sport": "volleyball" - }, - "terms": [], - "name": "Volleyball Court" - }, - "leisure/playground": { - "icon": "playground", - "geometry": [ - "point", - "area" - ], - "tags": { - "leisure": "playground" - }, - "name": "Playground", - "terms": [ - "jungle gym", - "play area" - ] - }, - "leisure/slipway": { - "geometry": [ - "point", - "line" - ], - "tags": { - "leisure": "slipway" - }, - "name": "Slipway" - }, - "leisure/sports_center": { - "geometry": [ - "point", - "area" - ], - "tags": { - "leisure": "sports_centre" - }, - "terms": [ - "gym" - ], - "icon": "sports", - "name": "Sports Center" - }, - "leisure/stadium": { - "geometry": [ - "point", - "area" - ], - "tags": { - "leisure": "stadium" - }, - "fields": [ - "sport" - ], - "name": "Stadium" - }, - "leisure/swimming_pool": { - "fields": [ - "access_simple" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "leisure": "swimming_pool" - }, - "icon": "swimming", - "name": "Swimming Pool" - }, - "leisure/track": { - "icon": "pitch", - "fields": [ - "surface" - ], - "geometry": [ - "point", - "line", - "area" - ], - "tags": { - "leisure": "track" - }, - "name": "Race Track" - }, - "line": { - "name": "Line", - "tags": {}, - "geometry": [ - "line" - ], - "matchScore": 0.1 - }, - "man_made": { - "fields": [ - "man_made" - ], - "geometry": [ - "point", - "vertex", - "line", - "area" - ], - "tags": { - "man_made": "*" - }, - "name": "Man Made" - }, - "man_made/breakwater": { - "geometry": [ - "line", - "area" - ], - "tags": { - "man_made": "breakwater" - }, - "name": "Breakwater" - }, - "man_made/cutline": { - "geometry": [ - "line" - ], - "tags": { - "man_made": "cutline" - }, - "name": "Cut line" - }, - "man_made/embankment": { - "geometry": [ - "line" - ], - "tags": { - "man_made": "embankment" - }, - "name": "Embankment", - "searchable": false - }, - "man_made/flagpole": { - "geometry": [ - "point" - ], - "tags": { - "man_made": "flagpole" - }, - "name": "Flagpole", - "icon": "embassy" - }, - "man_made/lighthouse": { - "geometry": [ - "point", - "area" - ], - "tags": { - "man_made": "lighthouse" - }, - "name": "Lighthouse", - "icon": "lighthouse" - }, - "man_made/observation": { - "geometry": [ - "point", - "area" - ], - "terms": [ - "lookout tower", - "fire tower" - ], - "tags": { - "man_made": "tower", - "tower:type": "observation" - }, - "name": "Observation Tower" - }, - "man_made/pier": { - "geometry": [ - "line", - "area" - ], - "tags": { - "man_made": "pier" - }, - "name": "Pier" - }, - "man_made/pipeline": { - "geometry": [ - "line" - ], - "tags": { - "man_made": "pipeline" - }, - "fields": [ - "location", - "operator" - ], - "name": "Pipeline", - "icon": "pipeline" - }, - "man_made/survey_point": { - "icon": "monument", - "geometry": [ - "point", - "vertex" - ], - "tags": { - "man_made": "survey_point" - }, - "fields": [ - "ref" - ], - "name": "Survey Point" - }, - "man_made/tower": { - "geometry": [ - "point", - "area" - ], - "tags": { - "man_made": "tower" - }, - "fields": [ - "towertype" - ], - "name": "Tower" - }, - "man_made/wastewater_plant": { - "icon": "water", - "geometry": [ - "point", - "area" - ], - "tags": { - "man_made": "wastewater_plant" - }, - "name": "Wastewater Plant", - "terms": [ - "sewage works", - "sewage treatment plant", - "water treatment plant", - "reclamation plant" - ] - }, - "man_made/water_tower": { - "icon": "water", - "geometry": [ - "point", - "area" - ], - "tags": { - "man_made": "water_tower" - }, - "name": "Water Tower" - }, - "man_made/water_well": { - "geometry": [ - "point", - "area" - ], - "tags": { - "man_made": "water_well" - }, - "name": "Water well" - }, - "man_made/water_works": { - "icon": "water", - "geometry": [ - "point", - "area" - ], - "tags": { - "man_made": "water_works" - }, - "name": "Water Works" - }, - "military/airfield": { - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "military": "airfield" - }, - "terms": [], - "name": "Airfield", - "icon": "airfield" - }, - "military/barracks": { - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "military": "barracks" - }, - "terms": [], - "name": "Barracks" - }, - "military/bunker": { - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "military": "bunker" - }, - "terms": [], - "name": "Bunker" - }, - "military/range": { - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "military": "range" - }, - "terms": [], - "name": "Military Range" - }, - "natural": { - "fields": [ - "natural" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "natural": "*" - }, - "name": "Natural" - }, - "natural/bay": { - "geometry": [ - "point", - "area" - ], - "terms": [], - "tags": { - "natural": "bay" - }, - "name": "Bay" - }, - "natural/beach": { - "fields": [ - "surface" - ], - "geometry": [ - "point", - "area" - ], - "terms": [], - "tags": { - "natural": "beach" - }, - "name": "Beach" - }, - "natural/cliff": { - "geometry": [ - "point", - "vertex", - "line", - "area" - ], - "terms": [], - "tags": { - "natural": "cliff" - }, - "name": "Cliff" - }, - "natural/coastline": { - "geometry": [ - "line" - ], - "terms": [ - "shore" - ], - "tags": { - "natural": "coastline" - }, - "name": "Coastline" - }, - "natural/fell": { - "geometry": [ - "area" - ], - "terms": [], - "tags": { - "natural": "fell" - }, - "name": "Fell" - }, - "natural/glacier": { - "geometry": [ - "area" - ], - "terms": [], - "tags": { - "natural": "glacier" - }, - "name": "Glacier" - }, - "natural/grassland": { - "geometry": [ - "point", - "area" - ], - "terms": [], - "tags": { - "natural": "grassland" - }, - "name": "Grassland" - }, - "natural/heath": { - "geometry": [ - "area" - ], - "terms": [], - "tags": { - "natural": "heath" - }, - "name": "Heath" - }, - "natural/peak": { - "icon": "triangle", - "fields": [ - "elevation" - ], - "geometry": [ - "point", - "vertex" - ], - "tags": { - "natural": "peak" - }, - "terms": [ - "acme", - "aiguille", - "alp", - "climax", - "crest", - "crown", - "hill", - "mount", - "mountain", - "pinnacle", - "summit", - "tip", - "top" - ], - "name": "Peak" - }, - "natural/scree": { - "geometry": [ - "area" - ], - "tags": { - "natural": "scree" - }, - "terms": [ - "loose rocks" - ], - "name": "Scree" - }, - "natural/scrub": { - "geometry": [ - "area" - ], - "tags": { - "natural": "scrub" - }, - "terms": [], - "name": "Scrub" - }, - "natural/spring": { - "geometry": [ - "point", - "vertex" - ], - "terms": [], - "tags": { - "natural": "spring" - }, - "name": "Spring" - }, - "natural/tree": { - "fields": [ - "tree_type", - "denotation" - ], - "icon": "park", - "geometry": [ - "point", - "vertex" - ], - "terms": [], - "tags": { - "natural": "tree" - }, - "name": "Tree" - }, - "natural/water": { - "fields": [ - "water" - ], - "geometry": [ - "area" - ], - "tags": { - "natural": "water" - }, - "icon": "water", - "name": "Water" - }, - "natural/water/lake": { - "geometry": [ - "area" - ], - "tags": { - "natural": "water", - "water": "lake" - }, - "terms": [ - "lakelet", - "loch", - "mere" - ], - "icon": "water", - "name": "Lake" - }, - "natural/water/pond": { - "geometry": [ - "area" - ], - "tags": { - "natural": "water", - "water": "pond" - }, - "terms": [ - "lakelet", - "millpond", - "tarn", - "pool", - "mere" - ], - "icon": "water", - "name": "Pond" - }, - "natural/water/reservoir": { - "geometry": [ - "area" - ], - "tags": { - "natural": "water", - "water": "reservoir" - }, - "icon": "water", - "name": "Reservoir" - }, - "natural/wetland": { - "icon": "wetland", - "fields": [ - "wetland" - ], - "geometry": [ - "point", - "area" - ], - "tags": { - "natural": "wetland" - }, - "terms": [], - "name": "Wetland" - }, - "natural/wood": { - "fields": [ - "wood" - ], - "icon": "park2", - "geometry": [ - "point", - "area" - ], - "tags": { - "natural": "wood" - }, - "terms": [], - "name": "Wood" - }, - "office": { - "icon": "commercial", - "fields": [ - "office", - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "office": "*" - }, - "terms": [], - "name": "Office" - }, - "office/accountant": { - "icon": "commercial", - "fields": [ - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "office": "accountant" - }, - "terms": [], - "name": "Accountant" - }, - "office/administrative": { - "icon": "commercial", - "fields": [ - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "office": "administrative" - }, - "terms": [], - "name": "Administrative Office" - }, - "office/architect": { - "icon": "commercial", - "fields": [ - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "office": "architect" - }, - "terms": [], - "name": "Architect" - }, - "office/company": { - "icon": "commercial", - "fields": [ - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "office": "company" - }, - "terms": [], - "name": "Company Office" - }, - "office/educational_institution": { - "icon": "commercial", - "fields": [ - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "office": "educational_institution" - }, - "terms": [], - "name": "Educational Institution" - }, - "office/employment_agency": { - "icon": "commercial", - "fields": [ - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "office": "employment_agency" - }, - "terms": [], - "name": "Employment Agency" - }, - "office/estate_agent": { - "icon": "commercial", - "fields": [ - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "office": "estate_agent" - }, - "terms": [], - "name": "Real Estate Office" - }, - "office/financial": { - "icon": "commercial", - "fields": [ - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "office": "financial" - }, - "terms": [], - "name": "Financial Office" - }, - "office/government": { - "icon": "commercial", - "fields": [ - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "office": "government" - }, - "terms": [], - "name": "Government Office" - }, - "office/insurance": { - "icon": "commercial", - "fields": [ - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "office": "insurance" - }, - "terms": [], - "name": "Insurance Office" - }, - "office/it": { - "icon": "commercial", - "fields": [ - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "office": "it" - }, - "terms": [], - "name": "IT Office" - }, - "office/lawyer": { - "icon": "commercial", - "fields": [ - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "office": "lawyer" - }, - "terms": [], - "name": "Law Office" - }, - "office/newspaper": { - "icon": "commercial", - "fields": [ - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "office": "newspaper" - }, - "terms": [], - "name": "Newspaper" - }, - "office/ngo": { - "icon": "commercial", - "fields": [ - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "office": "ngo" - }, - "terms": [], - "name": "NGO Office" - }, - "office/physician": { - "icon": "commercial", - "fields": [ - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "office": "physician" - }, - "terms": [], - "name": "Physician" - }, - "office/political_party": { - "icon": "commercial", - "fields": [ - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "office": "political_party" - }, - "terms": [], - "name": "Political Party" - }, - "office/research": { - "icon": "commercial", - "fields": [ - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "office": "research" - }, - "terms": [], - "name": "Research Office" - }, - "office/telecommunication": { - "icon": "commercial", - "fields": [ - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "office": "telecommunication" - }, - "terms": [], - "name": "Telecom Office" - }, - "office/therapist": { - "icon": "commercial", - "fields": [ - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "office": "therapist" - }, - "terms": [], - "name": "Therapist" - }, - "office/travel_agent": { - "icon": "suitcase", - "fields": [ - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "office": "travel_agent" - }, - "terms": [], - "name": "Travel Agency", - "searchable": false - }, - "piste": { - "icon": "skiing", - "fields": [ - "piste/type", - "piste/difficulty", - "piste/grooming", - "oneway", - "lit" - ], - "geometry": [ - "point", - "line", - "area" - ], - "terms": [ - "ski", - "sled", - "sleigh", - "snowboard", - "nordic", - "downhill", - "snowmobile" - ], - "tags": { - "piste:type": "*" - }, - "name": "Piste/Ski Trail" - }, - "place": { - "fields": [ - "place" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "place": "*" - }, - "name": "Place" - }, - "place/city": { - "icon": "city", - "geometry": [ - "point", - "area" - ], - "tags": { - "place": "city" - }, - "name": "City" - }, - "place/hamlet": { - "icon": "triangle-stroked", - "geometry": [ - "point", - "area" - ], - "tags": { - "place": "hamlet" - }, - "name": "Hamlet" - }, - "place/island": { - "geometry": [ - "point", - "area" - ], - "terms": [ - "archipelago", - "atoll", - "bar", - "cay", - "isle", - "islet", - "key", - "reef" - ], - "tags": { - "place": "island" - }, - "name": "Island" - }, - "place/isolated_dwelling": { - "geometry": [ - "point", - "area" - ], - "tags": { - "place": "isolated_dwelling" - }, - "name": "Isolated Dwelling" - }, - "place/locality": { - "icon": "marker", - "geometry": [ - "point", - "area" - ], - "tags": { - "place": "locality" - }, - "name": "Locality" - }, - "place/town": { - "icon": "town", - "geometry": [ - "point", - "area" - ], - "tags": { - "place": "town" - }, - "name": "Town" - }, - "place/village": { - "icon": "village", - "geometry": [ - "point", - "area" - ], - "tags": { - "place": "village" - }, - "name": "Village" - }, - "point": { - "name": "Point", - "tags": {}, - "geometry": [ - "point" - ], - "matchScore": 0.1 - }, - "power": { - "geometry": [ - "point", - "vertex", - "line", - "area" - ], - "tags": { - "power": "*" - }, - "fields": [ - "power" - ], - "name": "Power" - }, - "power/generator": { - "name": "Power Generator", - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "power": "generator" - }, - "fields": [ - "generator/source", - "generator/method", - "generator/type" - ] - }, - "power/line": { - "geometry": [ - "line" - ], - "tags": { - "power": "line" - }, - "name": "Power Line", - "icon": "power-line" - }, - "power/minor_line": { - "geometry": [ - "line" - ], - "tags": { - "power": "minor_line" - }, - "name": "Minor Power Line", - "icon": "power-line" - }, - "power/pole": { - "geometry": [ - "vertex" - ], - "tags": { - "power": "pole" - }, - "name": "Power Pole" - }, - "power/sub_station": { - "fields": [ - "operator", - "building" - ], - "geometry": [ - "point", - "area" - ], - "tags": { - "power": "sub_station" - }, - "name": "Substation" - }, - "power/tower": { - "geometry": [ - "vertex" - ], - "tags": { - "power": "tower" - }, - "name": "High-Voltage Tower" - }, - "power/transformer": { - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "power": "transformer" - }, - "name": "Transformer" - }, - "public_transport/platform": { - "fields": [ - "ref", - "operator", - "network", - "shelter" - ], - "geometry": [ - "point", - "vertex", - "line", - "area" - ], - "tags": { - "public_transport": "platform" - }, - "name": "Platform" - }, - "public_transport/stop_position": { - "fields": [ - "ref", - "operator", - "network" - ], - "geometry": [ - "vertex" - ], - "tags": { - "public_transport": "stop_position" - }, - "name": "Stop Position" - }, - "railway": { - "fields": [ - "railway" - ], - "geometry": [ - "point", - "vertex", - "line", - "area" - ], - "tags": { - "railway": "*" - }, - "name": "Railway" - }, - "railway/abandoned": { - "icon": "railway-abandoned", - "geometry": [ - "line" - ], - "tags": { - "railway": "abandoned" - }, - "fields": [ - "structure" - ], - "terms": [], - "name": "Abandoned Railway" - }, - "railway/disused": { - "icon": "railway-disused", - "geometry": [ - "line" - ], - "tags": { - "railway": "disused" - }, - "fields": [ - "structure" - ], - "terms": [], - "name": "Disused Railway" - }, - "railway/funicular": { - "geometry": [ - "line" - ], - "terms": [ - "venicular", - "cliff railway", - "cable car", - "cable railway", - "funicular railway" - ], - "fields": [ - "structure", - "gauge" - ], - "tags": { - "railway": "funicular" - }, - "icon": "railway-rail", - "name": "Funicular" - }, - "railway/halt": { - "icon": "rail", - "geometry": [ - "point", - "vertex" - ], - "tags": { - "railway": "halt" - }, - "name": "Railway Halt", - "terms": [ - "break", - "interrupt", - "rest", - "wait", - "interruption" - ] - }, - "railway/level_crossing": { - "icon": "cross", - "geometry": [ - "vertex" - ], - "tags": { - "railway": "level_crossing" - }, - "terms": [ - "crossing", - "railroad crossing", - "railway crossing", - "grade crossing", - "road through railroad", - "train crossing" - ], - "name": "Level Crossing" - }, - "railway/monorail": { - "icon": "railway-monorail", - "geometry": [ - "line" - ], - "tags": { - "railway": "monorail" - }, - "fields": [ - "structure", - "electrified" - ], - "terms": [], - "name": "Monorail" - }, - "railway/narrow_gauge": { - "icon": "railway-rail", - "geometry": [ - "line" - ], - "tags": { - "railway": "narrow_gauge" - }, - "fields": [ - "structure", - "gauge", - "electrified" - ], - "terms": [ - "narrow gauge railway", - "narrow gauge railroad" - ], - "name": "Narrow Gauge Rail" - }, - "railway/platform": { - "geometry": [ - "point", - "vertex", - "line", - "area" - ], - "tags": { - "railway": "platform" - }, - "name": "Railway Platform" - }, - "railway/rail": { - "icon": "railway-rail", - "geometry": [ - "line" - ], - "tags": { - "railway": "rail" - }, - "fields": [ - "structure", - "gauge", - "electrified" - ], - "terms": [], - "name": "Rail" - }, - "railway/station": { - "icon": "rail", - "fields": [ - "building_area" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "railway": "station" - }, - "terms": [ - "train station", - "station" - ], - "name": "Railway Station" - }, - "railway/subway": { - "icon": "railway-subway", - "fields": [ - "structure", - "gauge", - "electrified" - ], - "geometry": [ - "line" - ], - "tags": { - "railway": "subway" - }, - "terms": [], - "name": "Subway" - }, - "railway/subway_entrance": { - "icon": "rail-metro", - "geometry": [ - "point" - ], - "tags": { - "railway": "subway_entrance" - }, - "terms": [], - "name": "Subway Entrance" - }, - "railway/tram": { - "icon": "railway-light-rail", - "geometry": [ - "line" - ], - "tags": { - "railway": "tram" - }, - "fields": [ - "structure", - "gauge", - "electrified" - ], - "terms": [ - "streetcar" - ], - "name": "Tram" - }, - "relation": { - "name": "Relation", - "icon": "relation", - "tags": {}, - "geometry": [ - "relation" - ], - "fields": [ - "relation" - ] - }, - "route/ferry": { - "icon": "ferry", - "geometry": [ - "line" - ], - "tags": { - "route": "ferry" - }, - "name": "Ferry Route" - }, - "shop": { - "icon": "shop", - "fields": [ - "shop", - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "*" - }, - "terms": [], - "name": "Shop" - }, - "shop/alcohol": { - "icon": "alcohol-shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "alcohol" - }, - "terms": [ - "alcohol" - ], - "name": "Liquor Store" - }, - "shop/art": { - "icon": "art-gallery", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [ - "art store", - "art gallery" - ], - "tags": { - "shop": "art" - }, - "name": "Art Shop" - }, - "shop/bakery": { - "icon": "bakery", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "bakery" - }, - "name": "Bakery" - }, - "shop/beauty": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [ - "nail spa", - "spa", - "salon", - "tanning" - ], - "tags": { - "shop": "beauty" - }, - "name": "Beauty Shop" - }, - "shop/beverages": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "beverages" - }, - "name": "Beverage Store" - }, - "shop/bicycle": { - "icon": "bicycle", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "bicycle" - }, - "name": "Bicycle Shop" - }, - "shop/bookmaker": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "bookmaker" - }, - "name": "Bookmaker" - }, - "shop/books": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "books" - }, - "name": "Bookstore" - }, - "shop/boutique": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "boutique" - }, - "name": "Boutique" - }, - "shop/butcher": { - "icon": "slaughterhouse", - "fields": [ - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [], - "tags": { - "shop": "butcher" - }, - "name": "Butcher" - }, - "shop/car": { - "icon": "car", - "fields": [ - "address", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "car" - }, - "name": "Car Dealership" - }, - "shop/car_parts": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "car_parts" - }, - "name": "Car Parts Store" - }, - "shop/car_repair": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "car_repair" - }, - "name": "Car Repair Shop" - }, - "shop/chemist": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "chemist" - }, - "name": "Chemist" - }, - "shop/clothes": { - "icon": "clothing-store", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "clothes" - }, - "name": "Clothing Store" - }, - "shop/computer": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "computer" - }, - "name": "Computer Store" - }, - "shop/confectionery": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "confectionery" - }, - "name": "Confectionery" - }, - "shop/convenience": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "convenience" - }, - "name": "Convenience Store" - }, - "shop/deli": { - "icon": "restaurant", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "deli" - }, - "name": "Deli" - }, - "shop/department_store": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "department_store" - }, - "name": "Department Store" - }, - "shop/doityourself": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "doityourself" - }, - "name": "DIY Store" - }, - "shop/dry_cleaning": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "dry_cleaning" - }, - "name": "Dry Cleaners" - }, - "shop/electronics": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "electronics" - }, - "name": "Electronics Store" - }, - "shop/farm": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "farm" - }, - "terms": [ - "farm shop", - "farm stand" - ], - "name": "Produce Stand" - }, - "shop/fishmonger": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "fishmonger" - }, - "name": "Fishmonger" - }, - "shop/florist": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "florist" - }, - "name": "Florist" - }, - "shop/furniture": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "furniture" - }, - "name": "Furniture Store" - }, - "shop/garden_centre": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [ - "garden centre" - ], - "tags": { - "shop": "garden_centre" - }, - "name": "Garden Center" - }, - "shop/gift": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "gift" - }, - "name": "Gift Shop" - }, - "shop/greengrocer": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "greengrocer" - }, - "name": "Greengrocer" - }, - "shop/hairdresser": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "hairdresser" - }, - "name": "Hairdresser" - }, - "shop/hardware": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "hardware" - }, - "name": "Hardware Store" - }, - "shop/hifi": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "hifi" - }, - "name": "Hifi Store" - }, - "shop/jewelry": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "jewelry" - }, - "name": "Jeweler" - }, - "shop/kiosk": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "kiosk" - }, - "name": "Kiosk" - }, - "shop/laundry": { - "icon": "laundry", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "laundry" - }, - "name": "Laundry" - }, - "shop/locksmith": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [ - "keys" - ], - "tags": { - "shop": "locksmith" - }, - "name": "Locksmith" - }, - "shop/lottery": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "lottery" - }, - "name": "Lottery Shop" - }, - "shop/mall": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "mall" - }, - "name": "Mall" - }, - "shop/mobile_phone": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "mobile_phone" - }, - "name": "Mobile Phone Store" - }, - "shop/motorcycle": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "motorcycle" - }, - "name": "Motorcycle Dealership" - }, - "shop/music": { - "icon": "music", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "music" - }, - "name": "Music Store" - }, - "shop/newsagent": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "newsagent" - }, - "name": "Newsagent" - }, - "shop/optician": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "optician" - }, - "name": "Optician" - }, - "shop/outdoor": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "outdoor" - }, - "name": "Outdoor Store" - }, - "shop/pet": { - "icon": "dog-park", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "pet" - }, - "name": "Pet Store" - }, - "shop/photo": { - "icon": "camera", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "photo" - }, - "name": "Photography Store" - }, - "shop/shoes": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "shoes" - }, - "name": "Shoe Store" - }, - "shop/sports": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "sports" - }, - "name": "Sporting Goods Store" - }, - "shop/stationery": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "stationery" - }, - "name": "Stationery Store" - }, - "shop/supermarket": { - "icon": "grocery", - "fields": [ - "operator", - "building_area", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [ - "bazaar", - "boutique", - "chain", - "co-op", - "cut-rate store", - "discount store", - "five-and-dime", - "flea market", - "galleria", - "grocery store", - "mall", - "mart", - "outlet", - "outlet store", - "shop", - "shopping center", - "shopping centre", - "shopping plaza", - "stand", - "store", - "supermarket", - "thrift shop" - ], - "tags": { - "shop": "supermarket" - }, - "name": "Supermarket" - }, - "shop/toys": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "toys" - }, - "name": "Toy Store" - }, - "shop/travel_agency": { - "icon": "suitcase", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "travel_agency" - }, - "name": "Travel Agency" - }, - "shop/tyres": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "tyres" - }, - "name": "Tire Store" - }, - "shop/vacant": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "vacant" - }, - "name": "Vacant Shop" - }, - "shop/variety_store": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "variety_store" - }, - "name": "Variety Store" - }, - "shop/video": { - "icon": "shop", - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "shop": "video" - }, - "name": "Video Store" - }, - "tourism": { - "fields": [ - "tourism" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "tourism": "*" - }, - "name": "Tourism" - }, - "tourism/alpine_hut": { - "icon": "lodging", - "fields": [ - "operator", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "tourism": "alpine_hut" - }, - "name": "Alpine Hut" - }, - "tourism/artwork": { - "fields": [ - "artwork_type", - "artist" - ], - "icon": "art-gallery", - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "tourism": "artwork" - }, - "terms": [ - "mural", - "sculpture", - "statue" - ], - "name": "Artwork" - }, - "tourism/attraction": { - "icon": "monument", - "fields": [ - "operator", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "tourism": "attraction" - }, - "name": "Tourist Attraction" - }, - "tourism/camp_site": { - "icon": "campsite", - "fields": [ - "operator", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [ - "camping" - ], - "tags": { - "tourism": "camp_site" - }, - "name": "Camp Site" - }, - "tourism/caravan_site": { - "fields": [ - "operator", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "tourism": "caravan_site" - }, - "name": "RV Park" - }, - "tourism/chalet": { - "icon": "lodging", - "fields": [ - "operator", - "building_area", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "tourism": "chalet" - }, - "name": "Chalet" - }, - "tourism/guest_house": { - "icon": "lodging", - "fields": [ - "operator", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "tourism": "guest_house" - }, - "terms": [ - "B&B", - "Bed & Breakfast", - "Bed and Breakfast" - ], - "name": "Guest House" - }, - "tourism/hostel": { - "icon": "lodging", - "fields": [ - "operator", - "building_area", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "tourism": "hostel" - }, - "name": "Hostel" - }, - "tourism/hotel": { - "icon": "lodging", - "fields": [ - "operator", - "building_area", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [], - "tags": { - "tourism": "hotel" - }, - "name": "Hotel" - }, - "tourism/information": { - "fields": [ - "information", - "building_area", - "address", - "operator" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "tourism": "information" - }, - "name": "Information" - }, - "tourism/motel": { - "icon": "lodging", - "fields": [ - "operator", - "building_area", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "tourism": "motel" - }, - "name": "Motel" - }, - "tourism/museum": { - "icon": "museum", - "fields": [ - "operator", - "building_area", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [ - "exhibition", - "exhibits archive", - "foundation", - "gallery", - "hall", - "institution", - "library", - "menagerie", - "repository", - "salon", - "storehouse", - "treasury", - "vault" - ], - "tags": { - "tourism": "museum" - }, - "name": "Museum" - }, - "tourism/picnic_site": { - "fields": [ - "operator", - "building_area", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "terms": [], - "tags": { - "tourism": "picnic_site" - }, - "name": "Picnic Site" - }, - "tourism/theme_park": { - "fields": [ - "operator", - "building_area", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "tourism": "theme_park" - }, - "name": "Theme Park" - }, - "tourism/viewpoint": { - "geometry": [ - "point", - "vertex" - ], - "tags": { - "tourism": "viewpoint" - }, - "name": "Viewpoint" - }, - "tourism/zoo": { - "icon": "zoo", - "fields": [ - "operator", - "address" - ], - "geometry": [ - "point", - "vertex", - "area" - ], - "tags": { - "tourism": "zoo" - }, - "name": "Zoo" - }, - "type/boundary": { - "geometry": [ - "relation" - ], - "tags": { - "type": "boundary" - }, - "name": "Boundary", - "icon": "boundary", - "fields": [ - "boundary" - ] - }, - "type/boundary/administrative": { - "name": "Administrative Boundary", - "geometry": [ - "relation" - ], - "tags": { - "type": "boundary", - "boundary": "administrative" - }, - "fields": [ - "admin_level" - ], - "icon": "boundary" - }, - "type/multipolygon": { - "geometry": [ - "area", - "relation" - ], - "tags": { - "type": "multipolygon" - }, - "removeTags": {}, - "name": "Multipolygon", - "icon": "multipolygon", - "searchable": false, - "matchScore": 0.1 - }, - "type/restriction": { - "geometry": [ - "relation" - ], - "tags": { - "type": "restriction" - }, - "name": "Restriction", - "icon": "restriction", - "fields": [ - "restriction" - ] - }, - "type/route": { - "geometry": [ - "relation" - ], - "tags": { - "type": "route" - }, - "name": "Route", - "icon": "route", - "fields": [ - "route", - "ref" - ] - }, - "type/route/bicycle": { - "geometry": [ - "relation" - ], - "tags": { - "type": "route", - "route": "bicycle" - }, - "name": "Cycle Route", - "icon": "route-bicycle", - "fields": [ - "ref", - "network" - ] - }, - "type/route/bus": { - "geometry": [ - "relation" - ], - "tags": { - "type": "route", - "route": "bus" - }, - "name": "Bus Route", - "icon": "route-bus", - "fields": [ - "ref", - "operator", - "network" - ] - }, - "type/route/detour": { - "geometry": [ - "relation" - ], - "tags": { - "type": "route", - "route": "detour" - }, - "name": "Detour Route", - "icon": "route-detour", - "fields": [ - "ref" - ] - }, - "type/route/ferry": { - "geometry": [ - "relation" - ], - "tags": { - "type": "route", - "route": "ferry" - }, - "name": "Ferry Route", - "icon": "route-ferry", - "fields": [ - "ref", - "operator", - "network" - ] - }, - "type/route/foot": { - "geometry": [ - "relation" - ], - "tags": { - "type": "route", - "route": "foot" - }, - "name": "Foot Route", - "icon": "route-foot", - "fields": [ - "ref", - "operator", - "network" - ] - }, - "type/route/hiking": { - "geometry": [ - "relation" - ], - "tags": { - "type": "route", - "route": "hiking" - }, - "name": "Hiking Route", - "icon": "route-foot", - "fields": [ - "ref", - "operator", - "network" - ] - }, - "type/route/pipeline": { - "geometry": [ - "relation" - ], - "tags": { - "type": "route", - "route": "pipeline" - }, - "name": "Pipeline Route", - "icon": "route-pipeline", - "fields": [ - "ref", - "operator" - ] - }, - "type/route/power": { - "geometry": [ - "relation" - ], - "tags": { - "type": "route", - "route": "power" - }, - "name": "Power Route", - "icon": "route-power", - "fields": [ - "ref", - "operator" - ] - }, - "type/route/road": { - "geometry": [ - "relation" - ], - "tags": { - "type": "route", - "route": "road" - }, - "name": "Road Route", - "icon": "route-road", - "fields": [ - "ref" - ] - }, - "type/route/train": { - "geometry": [ - "relation" - ], - "tags": { - "type": "route", - "route": "train" - }, - "name": "Train Route", - "icon": "route-train", - "fields": [ - "ref", - "operator" - ] - }, - "type/route/tram": { - "geometry": [ - "relation" - ], - "tags": { - "type": "route", - "route": "tram" - }, - "name": "Tram Route", - "icon": "route-tram", - "fields": [ - "ref", - "operator" - ] - }, - "type/route_master": { - "geometry": [ - "relation" - ], - "tags": { - "type": "route_master" - }, - "name": "Route Master", - "icon": "route-master", - "fields": [ - "route_master", - "ref", - "operator", - "network" - ] - }, - "vertex": { - "name": "Other", - "tags": {}, - "geometry": [ - "vertex" - ], - "matchScore": 0.1 - }, - "waterway": { - "fields": [ - "waterway" - ], - "geometry": [ - "point", - "vertex", - "line", - "area" - ], - "tags": { - "waterway": "*" - }, - "name": "Waterway" - }, - "waterway/canal": { - "icon": "waterway-canal", - "geometry": [ - "line" - ], - "tags": { - "waterway": "canal" - }, - "name": "Canal" - }, - "waterway/dam": { - "icon": "dam", - "geometry": [ - "point", - "vertex", - "line", - "area" - ], - "tags": { - "waterway": "dam" - }, - "name": "Dam" - }, - "waterway/ditch": { - "icon": "waterway-ditch", - "fields": [ - "tunnel" - ], - "geometry": [ - "line" - ], - "tags": { - "waterway": "ditch" - }, - "name": "Ditch" - }, - "waterway/drain": { - "icon": "waterway-stream", - "fields": [ - "tunnel" - ], - "geometry": [ - "line" - ], - "tags": { - "waterway": "drain" - }, - "name": "Drain" - }, - "waterway/river": { - "icon": "waterway-river", - "fields": [ - "tunnel" - ], - "geometry": [ - "line" - ], - "terms": [ - "beck", - "branch", - "brook", - "course", - "creek", - "estuary", - "rill", - "rivulet", - "run", - "runnel", - "stream", - "tributary", - "watercourse" - ], - "tags": { - "waterway": "river" - }, - "name": "River" - }, - "waterway/riverbank": { - "icon": "water", - "geometry": [ - "area" - ], - "tags": { - "waterway": "riverbank" - }, - "name": "Riverbank" - }, - "waterway/stream": { - "icon": "waterway-stream", - "fields": [ - "layer", - "tunnel" - ], - "geometry": [ - "line" - ], - "terms": [ - "beck", - "branch", - "brook", - "burn", - "course", - "creek", - "current", - "drift", - "flood", - "flow", - "freshet", - "race", - "rill", - "rindle", - "rivulet", - "run", - "runnel", - "rush", - "spate", - "spritz", - "surge", - "tide", - "torrent", - "tributary", - "watercourse" - ], - "tags": { - "waterway": "stream" - }, - "name": "Stream" - }, - "waterway/weir": { - "icon": "dam", - "geometry": [ - "vertex", - "line" - ], - "tags": { - "waterway": "weir" - }, - "name": "Weir" - }, - "amenity/pub/The Green Man": { - "tags": { - "name": "The Green Man", - "amenity": "pub" - }, - "name": "The Green Man", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/Kings Arms": { - "tags": { - "name": "Kings Arms", - "amenity": "pub" - }, - "name": "Kings Arms", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/Red Lion": { - "tags": { - "name": "Red Lion", - "amenity": "pub" - }, - "name": "Red Lion", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The Ship": { - "tags": { - "name": "The Ship", - "amenity": "pub" - }, - "name": "The Ship", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The White Horse": { - "tags": { - "name": "The White Horse", - "amenity": "pub" - }, - "name": "The White Horse", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The White Hart": { - "tags": { - "name": "The White Hart", - "amenity": "pub" - }, - "name": "The White Hart", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/Royal Oak": { - "tags": { - "name": "Royal Oak", - "amenity": "pub" - }, - "name": "Royal Oak", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The Red Lion": { - "tags": { - "name": "The Red Lion", - "amenity": "pub" - }, - "name": "The Red Lion", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The Kings Arms": { - "tags": { - "name": "The Kings Arms", - "amenity": "pub" - }, - "name": "The Kings Arms", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The Star": { - "tags": { - "name": "The Star", - "amenity": "pub" - }, - "name": "The Star", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The Anchor": { - "tags": { - "name": "The Anchor", - "amenity": "pub" - }, - "name": "The Anchor", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The Cross Keys": { - "tags": { - "name": "The Cross Keys", - "amenity": "pub" - }, - "name": "The Cross Keys", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The Wheatsheaf": { - "tags": { - "name": "The Wheatsheaf", - "amenity": "pub" - }, - "name": "The Wheatsheaf", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The Crown Inn": { - "tags": { - "name": "The Crown Inn", - "amenity": "pub" - }, - "name": "The Crown Inn", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The Kings Head": { - "tags": { - "name": "The Kings Head", - "amenity": "pub" - }, - "name": "The Kings Head", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The Castle": { - "tags": { - "name": "The Castle", - "amenity": "pub" - }, - "name": "The Castle", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The Railway": { - "tags": { - "name": "The Railway", - "amenity": "pub" - }, - "name": "The Railway", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The White Lion": { - "tags": { - "name": "The White Lion", - "amenity": "pub" - }, - "name": "The White Lion", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The Bell": { - "tags": { - "name": "The Bell", - "amenity": "pub" - }, - "name": "The Bell", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The Bull": { - "tags": { - "name": "The Bull", - "amenity": "pub" - }, - "name": "The Bull", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The Plough": { - "tags": { - "name": "The Plough", - "amenity": "pub" - }, - "name": "The Plough", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The George": { - "tags": { - "name": "The George", - "amenity": "pub" - }, - "name": "The George", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The Royal Oak": { - "tags": { - "name": "The Royal Oak", - "amenity": "pub" - }, - "name": "The Royal Oak", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The Fox": { - "tags": { - "name": "The Fox", - "amenity": "pub" - }, - "name": "The Fox", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/Prince of Wales": { - "tags": { - "name": "Prince of Wales", - "amenity": "pub" - }, - "name": "Prince of Wales", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The Rising Sun": { - "tags": { - "name": "The Rising Sun", - "amenity": "pub" - }, - "name": "The Rising Sun", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The Prince of Wales": { - "tags": { - "name": "The Prince of Wales", - "amenity": "pub" - }, - "name": "The Prince of Wales", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The Crown": { - "tags": { - "name": "The Crown", - "amenity": "pub" - }, - "name": "The Crown", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The Chequers": { - "tags": { - "name": "The Chequers", - "amenity": "pub" - }, - "name": "The Chequers", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The Swan": { - "tags": { - "name": "The Swan", - "amenity": "pub" - }, - "name": "The Swan", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/Rose and Crown": { - "tags": { - "name": "Rose and Crown", - "amenity": "pub" - }, - "name": "Rose and Crown", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The Victoria": { - "tags": { - "name": "The Victoria", - "amenity": "pub" - }, - "name": "The Victoria", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/New Inn": { - "tags": { - "name": "New Inn", - "amenity": "pub" - }, - "name": "New Inn", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/Royal Hotel": { - "tags": { - "name": "Royal Hotel", - "amenity": "pub" - }, - "name": "Royal Hotel", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/Cross Keys": { - "tags": { - "name": "Cross Keys", - "amenity": "pub" - }, - "name": "Cross Keys", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The Greyhound": { - "tags": { - "name": "The Greyhound", - "amenity": "pub" - }, - "name": "The Greyhound", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The Black Horse": { - "tags": { - "name": "The Black Horse", - "amenity": "pub" - }, - "name": "The Black Horse", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The New Inn": { - "tags": { - "name": "The New Inn", - "amenity": "pub" - }, - "name": "The New Inn", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/Kings Head": { - "tags": { - "name": "Kings Head", - "amenity": "pub" - }, - "name": "Kings Head", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The Angel": { - "tags": { - "name": "The Angel", - "amenity": "pub" - }, - "name": "The Angel", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The Queens Head": { - "tags": { - "name": "The Queens Head", - "amenity": "pub" - }, - "name": "The Queens Head", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/The Ship Inn": { - "tags": { - "name": "The Ship Inn", - "amenity": "pub" - }, - "name": "The Ship Inn", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/Rose & Crown": { - "tags": { - "name": "Rose & Crown", - "amenity": "pub" - }, - "name": "Rose & Crown", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/Queens Head": { - "tags": { - "name": "Queens Head", - "amenity": "pub" - }, - "name": "Queens Head", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pub/Irish Pub": { - "tags": { - "name": "Irish Pub", - "amenity": "pub" - }, - "name": "Irish Pub", - "icon": "beer", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fuel/76": { - "tags": { - "name": "76", - "amenity": "fuel" - }, - "name": "76", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Neste": { - "tags": { - "name": "Neste", - "amenity": "fuel" - }, - "name": "Neste", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/BP": { - "tags": { - "name": "BP", - "amenity": "fuel" - }, - "name": "BP", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Shell": { - "tags": { - "name": "Shell", - "amenity": "fuel" - }, - "name": "Shell", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Agip": { - "tags": { - "name": "Agip", - "amenity": "fuel" - }, - "name": "Agip", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Migrol": { - "tags": { - "name": "Migrol", - "amenity": "fuel" - }, - "name": "Migrol", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Avia": { - "tags": { - "name": "Avia", - "amenity": "fuel" - }, - "name": "Avia", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Texaco": { - "tags": { - "name": "Texaco", - "amenity": "fuel" - }, - "name": "Texaco", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Total": { - "tags": { - "name": "Total", - "amenity": "fuel" - }, - "name": "Total", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Statoil": { - "tags": { - "name": "Statoil", - "amenity": "fuel" - }, - "name": "Statoil", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Esso": { - "tags": { - "name": "Esso", - "amenity": "fuel" - }, - "name": "Esso", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Jet": { - "tags": { - "name": "Jet", - "amenity": "fuel" - }, - "name": "Jet", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Avanti": { - "tags": { - "name": "Avanti", - "amenity": "fuel" - }, - "name": "Avanti", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Sainsbury's": { - "tags": { - "name": "Sainsbury's", - "amenity": "fuel" - }, - "name": "Sainsbury's", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/OMV": { - "tags": { - "name": "OMV", - "amenity": "fuel" - }, - "name": "OMV", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Aral": { - "tags": { - "name": "Aral", - "amenity": "fuel" - }, - "name": "Aral", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Tesco": { - "tags": { - "name": "Tesco", - "amenity": "fuel" - }, - "name": "Tesco", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/JET": { - "tags": { - "name": "JET", - "amenity": "fuel" - }, - "name": "JET", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Morrisons": { - "tags": { - "name": "Morrisons", - "amenity": "fuel" - }, - "name": "Morrisons", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/United": { - "tags": { - "name": "United", - "amenity": "fuel" - }, - "name": "United", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Canadian Tire": { - "tags": { - "name": "Canadian Tire", - "amenity": "fuel" - }, - "name": "Canadian Tire", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Mobil": { - "tags": { - "name": "Mobil", - "amenity": "fuel" - }, - "name": "Mobil", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Caltex": { - "tags": { - "name": "Caltex", - "amenity": "fuel" - }, - "name": "Caltex", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Sunoco": { - "tags": { - "name": "Sunoco", - "amenity": "fuel" - }, - "name": "Sunoco", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Q8": { - "tags": { - "name": "Q8", - "amenity": "fuel" - }, - "name": "Q8", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/ABC": { - "tags": { - "name": "ABC", - "amenity": "fuel" - }, - "name": "ABC", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Tankstelle": { - "tags": { - "name": "Tankstelle", - "amenity": "fuel" - }, - "name": "Tankstelle", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/ARAL": { - "tags": { - "name": "ARAL", - "amenity": "fuel" - }, - "name": "ARAL", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/CEPSA": { - "tags": { - "name": "CEPSA", - "amenity": "fuel" - }, - "name": "CEPSA", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/BFT": { - "tags": { - "name": "BFT", - "amenity": "fuel" - }, - "name": "BFT", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Petron": { - "tags": { - "name": "Petron", - "amenity": "fuel" - }, - "name": "Petron", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Intermarché": { - "tags": { - "name": "Intermarché", - "amenity": "fuel" - }, - "name": "Intermarché", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Super U": { - "tags": { - "name": "Super U", - "amenity": "fuel" - }, - "name": "Super U", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Auchan": { - "tags": { - "name": "Auchan", - "amenity": "fuel" - }, - "name": "Auchan", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Elf": { - "tags": { - "name": "Elf", - "amenity": "fuel" - }, - "name": "Elf", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Carrefour": { - "tags": { - "name": "Carrefour", - "amenity": "fuel" - }, - "name": "Carrefour", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Station Service E. Leclerc": { - "tags": { - "name": "Station Service E. Leclerc", - "amenity": "fuel" - }, - "name": "Station Service E. Leclerc", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Shell Express": { - "tags": { - "name": "Shell Express", - "amenity": "fuel" - }, - "name": "Shell Express", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Hess": { - "tags": { - "name": "Hess", - "amenity": "fuel" - }, - "name": "Hess", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Flying V": { - "tags": { - "name": "Flying V", - "amenity": "fuel" - }, - "name": "Flying V", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/bft": { - "tags": { - "name": "bft", - "amenity": "fuel" - }, - "name": "bft", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Gulf": { - "tags": { - "name": "Gulf", - "amenity": "fuel" - }, - "name": "Gulf", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/PTT": { - "tags": { - "name": "PTT", - "amenity": "fuel" - }, - "name": "PTT", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/St1": { - "tags": { - "name": "St1", - "amenity": "fuel" - }, - "name": "St1", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Teboil": { - "tags": { - "name": "Teboil", - "amenity": "fuel" - }, - "name": "Teboil", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/HEM": { - "tags": { - "name": "HEM", - "amenity": "fuel" - }, - "name": "HEM", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/GALP": { - "tags": { - "name": "GALP", - "amenity": "fuel" - }, - "name": "GALP", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/OK": { - "tags": { - "name": "OK", - "amenity": "fuel" - }, - "name": "OK", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/ÖMV": { - "tags": { - "name": "ÖMV", - "amenity": "fuel" - }, - "name": "ÖMV", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Tinq": { - "tags": { - "name": "Tinq", - "amenity": "fuel" - }, - "name": "Tinq", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/OKQ8": { - "tags": { - "name": "OKQ8", - "amenity": "fuel" - }, - "name": "OKQ8", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Freie Tankstelle": { - "tags": { - "name": "Freie Tankstelle", - "amenity": "fuel" - }, - "name": "Freie Tankstelle", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Repsol": { - "tags": { - "name": "Repsol", - "amenity": "fuel" - }, - "name": "Repsol", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Westfalen": { - "tags": { - "name": "Westfalen", - "amenity": "fuel" - }, - "name": "Westfalen", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Esso Express": { - "tags": { - "name": "Esso Express", - "amenity": "fuel" - }, - "name": "Esso Express", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Raiffeisenbank": { - "tags": { - "name": "Raiffeisenbank", - "amenity": "fuel" - }, - "name": "Raiffeisenbank", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Tamoil": { - "tags": { - "name": "Tamoil", - "amenity": "fuel" - }, - "name": "Tamoil", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Engen": { - "tags": { - "name": "Engen", - "amenity": "fuel" - }, - "name": "Engen", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Sasol": { - "tags": { - "name": "Sasol", - "amenity": "fuel" - }, - "name": "Sasol", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Topaz": { - "tags": { - "name": "Topaz", - "amenity": "fuel" - }, - "name": "Topaz", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/LPG": { - "tags": { - "name": "LPG", - "amenity": "fuel" - }, - "name": "LPG", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Coop": { - "tags": { - "name": "Coop", - "amenity": "fuel" - }, - "name": "Coop", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Orlen": { - "tags": { - "name": "Orlen", - "amenity": "fuel" - }, - "name": "Orlen", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Oilibya": { - "tags": { - "name": "Oilibya", - "amenity": "fuel" - }, - "name": "Oilibya", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Tango": { - "tags": { - "name": "Tango", - "amenity": "fuel" - }, - "name": "Tango", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Star": { - "tags": { - "name": "Star", - "amenity": "fuel" - }, - "name": "Star", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Петрол": { - "tags": { - "name": "Петрол", - "amenity": "fuel" - }, - "name": "Петрол", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Cepsa": { - "tags": { - "name": "Cepsa", - "amenity": "fuel" - }, - "name": "Cepsa", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/OIL!": { - "tags": { - "name": "OIL!", - "amenity": "fuel" - }, - "name": "OIL!", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Ultramar": { - "tags": { - "name": "Ultramar", - "amenity": "fuel" - }, - "name": "Ultramar", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Irving": { - "tags": { - "name": "Irving", - "amenity": "fuel" - }, - "name": "Irving", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Lukoil": { - "tags": { - "name": "Lukoil", - "amenity": "fuel" - }, - "name": "Lukoil", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Petro-Canada": { - "tags": { - "name": "Petro-Canada", - "amenity": "fuel" - }, - "name": "Petro-Canada", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/7-Eleven": { - "tags": { - "name": "7-Eleven", - "amenity": "fuel" - }, - "name": "7-Eleven", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Agrola": { - "tags": { - "name": "Agrola", - "amenity": "fuel" - }, - "name": "Agrola", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Husky": { - "tags": { - "name": "Husky", - "amenity": "fuel" - }, - "name": "Husky", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Slovnaft": { - "tags": { - "name": "Slovnaft", - "amenity": "fuel" - }, - "name": "Slovnaft", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Sheetz": { - "tags": { - "name": "Sheetz", - "amenity": "fuel" - }, - "name": "Sheetz", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Mol": { - "tags": { - "name": "Mol", - "amenity": "fuel" - }, - "name": "Mol", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Petronas": { - "tags": { - "name": "Petronas", - "amenity": "fuel" - }, - "name": "Petronas", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Газпромнефть": { - "tags": { - "name": "Газпромнефть", - "amenity": "fuel" - }, - "name": "Газпромнефть", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Лукойл": { - "tags": { - "name": "Лукойл", - "amenity": "fuel" - }, - "name": "Лукойл", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Elan": { - "tags": { - "name": "Elan", - "amenity": "fuel" - }, - "name": "Elan", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Роснефть": { - "tags": { - "name": "Роснефть", - "amenity": "fuel" - }, - "name": "Роснефть", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Turmöl": { - "tags": { - "name": "Turmöl", - "amenity": "fuel" - }, - "name": "Turmöl", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Neste A24": { - "tags": { - "name": "Neste A24", - "amenity": "fuel" - }, - "name": "Neste A24", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Marathon": { - "tags": { - "name": "Marathon", - "amenity": "fuel" - }, - "name": "Marathon", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Valero": { - "tags": { - "name": "Valero", - "amenity": "fuel" - }, - "name": "Valero", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Eni": { - "tags": { - "name": "Eni", - "amenity": "fuel" - }, - "name": "Eni", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Chevron": { - "tags": { - "name": "Chevron", - "amenity": "fuel" - }, - "name": "Chevron", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/ТНК": { - "tags": { - "name": "ТНК", - "amenity": "fuel" - }, - "name": "ТНК", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/REPSOL": { - "tags": { - "name": "REPSOL", - "amenity": "fuel" - }, - "name": "REPSOL", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/MOL": { - "tags": { - "name": "MOL", - "amenity": "fuel" - }, - "name": "MOL", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Bliska": { - "tags": { - "name": "Bliska", - "amenity": "fuel" - }, - "name": "Bliska", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Api": { - "tags": { - "name": "Api", - "amenity": "fuel" - }, - "name": "Api", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Arco": { - "tags": { - "name": "Arco", - "amenity": "fuel" - }, - "name": "Arco", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Pemex": { - "tags": { - "name": "Pemex", - "amenity": "fuel" - }, - "name": "Pemex", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Exxon": { - "tags": { - "name": "Exxon", - "amenity": "fuel" - }, - "name": "Exxon", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Coles Express": { - "tags": { - "name": "Coles Express", - "amenity": "fuel" - }, - "name": "Coles Express", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Petrom": { - "tags": { - "name": "Petrom", - "amenity": "fuel" - }, - "name": "Petrom", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/PETRONOR": { - "tags": { - "name": "PETRONOR", - "amenity": "fuel" - }, - "name": "PETRONOR", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Rompetrol": { - "tags": { - "name": "Rompetrol", - "amenity": "fuel" - }, - "name": "Rompetrol", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Lotos": { - "tags": { - "name": "Lotos", - "amenity": "fuel" - }, - "name": "Lotos", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/ОМВ": { - "tags": { - "name": "ОМВ", - "amenity": "fuel" - }, - "name": "ОМВ", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/BR": { - "tags": { - "name": "BR", - "amenity": "fuel" - }, - "name": "BR", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Copec": { - "tags": { - "name": "Copec", - "amenity": "fuel" - }, - "name": "Copec", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Petrobras": { - "tags": { - "name": "Petrobras", - "amenity": "fuel" - }, - "name": "Petrobras", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Liberty": { - "tags": { - "name": "Liberty", - "amenity": "fuel" - }, - "name": "Liberty", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/IP": { - "tags": { - "name": "IP", - "amenity": "fuel" - }, - "name": "IP", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/YPF": { - "tags": { - "name": "YPF", - "amenity": "fuel" - }, - "name": "YPF", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Erg": { - "tags": { - "name": "Erg", - "amenity": "fuel" - }, - "name": "Erg", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Eneos": { - "tags": { - "name": "Eneos", - "amenity": "fuel" - }, - "name": "Eneos", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Citgo": { - "tags": { - "name": "Citgo", - "amenity": "fuel" - }, - "name": "Citgo", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Metano": { - "tags": { - "name": "Metano", - "amenity": "fuel" - }, - "name": "Metano", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Сургутнефтегаз": { - "tags": { - "name": "Сургутнефтегаз", - "amenity": "fuel" - }, - "name": "Сургутнефтегаз", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/EKO": { - "tags": { - "name": "EKO", - "amenity": "fuel" - }, - "name": "EKO", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Eko": { - "tags": { - "name": "Eko", - "amenity": "fuel" - }, - "name": "Eko", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Indipend.": { - "tags": { - "name": "Indipend.", - "amenity": "fuel" - }, - "name": "Indipend.", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/IES": { - "tags": { - "name": "IES", - "amenity": "fuel" - }, - "name": "IES", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/TotalErg": { - "tags": { - "name": "TotalErg", - "amenity": "fuel" - }, - "name": "TotalErg", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Cenex": { - "tags": { - "name": "Cenex", - "amenity": "fuel" - }, - "name": "Cenex", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/ПТК": { - "tags": { - "name": "ПТК", - "amenity": "fuel" - }, - "name": "ПТК", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/HP": { - "tags": { - "name": "HP", - "amenity": "fuel" - }, - "name": "HP", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Phillips 66": { - "tags": { - "name": "Phillips 66", - "amenity": "fuel" - }, - "name": "Phillips 66", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/CARREFOUR": { - "tags": { - "name": "CARREFOUR", - "amenity": "fuel" - }, - "name": "CARREFOUR", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/ERG": { - "tags": { - "name": "ERG", - "amenity": "fuel" - }, - "name": "ERG", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Speedway": { - "tags": { - "name": "Speedway", - "amenity": "fuel" - }, - "name": "Speedway", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Benzina": { - "tags": { - "name": "Benzina", - "amenity": "fuel" - }, - "name": "Benzina", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Татнефть": { - "tags": { - "name": "Татнефть", - "amenity": "fuel" - }, - "name": "Татнефть", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Terpel": { - "tags": { - "name": "Terpel", - "amenity": "fuel" - }, - "name": "Terpel", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/WOG": { - "tags": { - "name": "WOG", - "amenity": "fuel" - }, - "name": "WOG", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Seaoil": { - "tags": { - "name": "Seaoil", - "amenity": "fuel" - }, - "name": "Seaoil", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/АЗС": { - "tags": { - "name": "АЗС", - "amenity": "fuel" - }, - "name": "АЗС", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Kwik Trip": { - "tags": { - "name": "Kwik Trip", - "amenity": "fuel" - }, - "name": "Kwik Trip", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Wawa": { - "tags": { - "name": "Wawa", - "amenity": "fuel" - }, - "name": "Wawa", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Pertamina": { - "tags": { - "name": "Pertamina", - "amenity": "fuel" - }, - "name": "Pertamina", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/COSMO": { - "tags": { - "name": "COSMO", - "amenity": "fuel" - }, - "name": "COSMO", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Z": { - "tags": { - "name": "Z", - "amenity": "fuel" - }, - "name": "Z", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Indian Oil": { - "tags": { - "name": "Indian Oil", - "amenity": "fuel" - }, - "name": "Indian Oil", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/АГЗС": { - "tags": { - "name": "АГЗС", - "amenity": "fuel" - }, - "name": "АГЗС", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/INA": { - "tags": { - "name": "INA", - "amenity": "fuel" - }, - "name": "INA", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/JOMO": { - "tags": { - "name": "JOMO", - "amenity": "fuel" - }, - "name": "JOMO", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Holiday": { - "tags": { - "name": "Holiday", - "amenity": "fuel" - }, - "name": "Holiday", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/IDEMITSU": { - "tags": { - "name": "IDEMITSU", - "amenity": "fuel" - }, - "name": "IDEMITSU", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/ENEOS": { - "tags": { - "name": "ENEOS", - "amenity": "fuel" - }, - "name": "ENEOS", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Stacja paliw": { - "tags": { - "name": "Stacja paliw", - "amenity": "fuel" - }, - "name": "Stacja paliw", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Bharat Petroleum": { - "tags": { - "name": "Bharat Petroleum", - "amenity": "fuel" - }, - "name": "Bharat Petroleum", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/CAMPSA": { - "tags": { - "name": "CAMPSA", - "amenity": "fuel" - }, - "name": "CAMPSA", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Casey's General Store": { - "tags": { - "name": "Casey's General Store", - "amenity": "fuel" - }, - "name": "Casey's General Store", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Kangaroo": { - "tags": { - "name": "Kangaroo", - "amenity": "fuel" - }, - "name": "Kangaroo", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Белоруснефть": { - "tags": { - "name": "Белоруснефть", - "amenity": "fuel" - }, - "name": "Белоруснефть", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/コスモ石油 (COSMO)": { - "tags": { - "name": "コスモ石油 (COSMO)", - "amenity": "fuel" - }, - "name": "コスモ石油 (COSMO)", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/MEROIL": { - "tags": { - "name": "MEROIL", - "amenity": "fuel" - }, - "name": "MEROIL", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/1-2-3": { - "tags": { - "name": "1-2-3", - "amenity": "fuel" - }, - "name": "1-2-3", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Conoco": { - "tags": { - "name": "Conoco", - "amenity": "fuel" - }, - "name": "Conoco", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/出光": { - "tags": { - "name": "出光", - "name:en": "IDEMITSU", - "amenity": "fuel" - }, - "name": "出光", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/НК Альянс": { - "tags": { - "name": "НК Альянс", - "amenity": "fuel" - }, - "name": "НК Альянс", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Sinclair": { - "tags": { - "name": "Sinclair", - "amenity": "fuel" - }, - "name": "Sinclair", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/SPBU": { - "tags": { - "name": "SPBU", - "amenity": "fuel" - }, - "name": "SPBU", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Макпетрол": { - "tags": { - "name": "Макпетрол", - "amenity": "fuel" - }, - "name": "Макпетрол", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Circle K": { - "tags": { - "name": "Circle K", - "amenity": "fuel" - }, - "name": "Circle K", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Posto Ipiranga": { - "tags": { - "name": "Posto Ipiranga", - "amenity": "fuel" - }, - "name": "Posto Ipiranga", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Phoenix": { - "tags": { - "name": "Phoenix", - "amenity": "fuel" - }, - "name": "Phoenix", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Ipiranga": { - "tags": { - "name": "Ipiranga", - "amenity": "fuel" - }, - "name": "Ipiranga", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/OKKO": { - "tags": { - "name": "OKKO", - "amenity": "fuel" - }, - "name": "OKKO", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/ОККО": { - "tags": { - "name": "ОККО", - "amenity": "fuel" - }, - "name": "ОККО", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/บางจาก": { - "tags": { - "name": "บางจาก", - "amenity": "fuel" - }, - "name": "บางจาก", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/QuikTrip": { - "tags": { - "name": "QuikTrip", - "amenity": "fuel" - }, - "name": "QuikTrip", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Stewart's": { - "tags": { - "name": "Stewart's", - "amenity": "fuel" - }, - "name": "Stewart's", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Posto BR": { - "tags": { - "name": "Posto BR", - "amenity": "fuel" - }, - "name": "Posto BR", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/ป ต ท": { - "tags": { - "name": "ป ต ท", - "amenity": "fuel" - }, - "name": "ป ต ท", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/ปตท": { - "tags": { - "name": "ปตท", - "amenity": "fuel" - }, - "name": "ปตท", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/ANP": { - "tags": { - "name": "ANP", - "amenity": "fuel" - }, - "name": "ANP", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Kum & Go": { - "tags": { - "name": "Kum & Go", - "amenity": "fuel" - }, - "name": "Kum & Go", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Sokimex": { - "tags": { - "name": "Sokimex", - "amenity": "fuel" - }, - "name": "Sokimex", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Tela": { - "tags": { - "name": "Tela", - "amenity": "fuel" - }, - "name": "Tela", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Укрнафта": { - "tags": { - "name": "Укрнафта", - "amenity": "fuel" - }, - "name": "Укрнафта", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Татнефтепродукт": { - "tags": { - "name": "Татнефтепродукт", - "amenity": "fuel" - }, - "name": "Татнефтепродукт", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Afriquia": { - "tags": { - "name": "Afriquia", - "amenity": "fuel" - }, - "name": "Afriquia", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/Murphy USA": { - "tags": { - "name": "Murphy USA", - "amenity": "fuel" - }, - "name": "Murphy USA", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/昭和シェル (Showa-shell)": { - "tags": { - "name": "昭和シェル (Showa-shell)", - "amenity": "fuel" - }, - "name": "昭和シェル (Showa-shell)", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fuel/CNG": { - "tags": { - "name": "CNG", - "amenity": "fuel" - }, - "name": "CNG", - "icon": "fuel", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "address", - "building_area" - ], - "suggestion": true - }, - "amenity/fast_food/Quick": { - "tags": { - "name": "Quick", - "amenity": "fast_food" - }, - "name": "Quick", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/McDonald's": { - "tags": { - "name": "McDonald's", - "cuisine": "burger", - "amenity": "fast_food" - }, - "name": "McDonald's", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Burger King": { - "tags": { - "name": "Burger King", - "cuisine": "burger", - "amenity": "fast_food" - }, - "name": "Burger King", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Ali Baba": { - "tags": { - "name": "Ali Baba", - "amenity": "fast_food" - }, - "name": "Ali Baba", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Hungry Jacks": { - "tags": { - "name": "Hungry Jacks", - "cuisine": "burger", - "amenity": "fast_food" - }, - "name": "Hungry Jacks", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Red Rooster": { - "tags": { - "name": "Red Rooster", - "amenity": "fast_food" - }, - "name": "Red Rooster", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/KFC": { - "tags": { - "name": "KFC", - "cuisine": "chicken", - "amenity": "fast_food" - }, - "name": "KFC", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Domino's Pizza": { - "tags": { - "name": "Domino's Pizza", - "cuisine": "pizza", - "amenity": "fast_food" - }, - "name": "Domino's Pizza", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Chowking": { - "tags": { - "name": "Chowking", - "amenity": "fast_food" - }, - "name": "Chowking", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Jollibee": { - "tags": { - "name": "Jollibee", - "amenity": "fast_food" - }, - "name": "Jollibee", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Hesburger": { - "tags": { - "name": "Hesburger", - "amenity": "fast_food" - }, - "name": "Hesburger", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/肯德基": { - "tags": { - "name": "肯德基", - "amenity": "fast_food" - }, - "name": "肯德基", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Wendy's": { - "tags": { - "name": "Wendy's", - "cuisine": "burger", - "amenity": "fast_food" - }, - "name": "Wendy's", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Tim Hortons": { - "tags": { - "name": "Tim Hortons", - "amenity": "fast_food" - }, - "name": "Tim Hortons", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Steers": { - "tags": { - "name": "Steers", - "amenity": "fast_food" - }, - "name": "Steers", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Hardee's": { - "tags": { - "name": "Hardee's", - "cuisine": "burger", - "amenity": "fast_food" - }, - "name": "Hardee's", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Arby's": { - "tags": { - "name": "Arby's", - "amenity": "fast_food" - }, - "name": "Arby's", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/A&W": { - "tags": { - "name": "A&W", - "amenity": "fast_food" - }, - "name": "A&W", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Dairy Queen": { - "tags": { - "name": "Dairy Queen", - "amenity": "fast_food" - }, - "name": "Dairy Queen", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Hallo Pizza": { - "tags": { - "name": "Hallo Pizza", - "amenity": "fast_food" - }, - "name": "Hallo Pizza", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Fish & Chips": { - "tags": { - "name": "Fish & Chips", - "amenity": "fast_food" - }, - "name": "Fish & Chips", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Harvey's": { - "tags": { - "name": "Harvey's", - "amenity": "fast_food" - }, - "name": "Harvey's", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/麥當勞": { - "tags": { - "name": "麥當勞", - "amenity": "fast_food" - }, - "name": "麥當勞", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Pizza Pizza": { - "tags": { - "name": "Pizza Pizza", - "amenity": "fast_food" - }, - "name": "Pizza Pizza", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Kotipizza": { - "tags": { - "name": "Kotipizza", - "amenity": "fast_food" - }, - "name": "Kotipizza", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Jack in the Box": { - "tags": { - "name": "Jack in the Box", - "cuisine": "burger", - "amenity": "fast_food" - }, - "name": "Jack in the Box", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Istanbul": { - "tags": { - "name": "Istanbul", - "amenity": "fast_food" - }, - "name": "Istanbul", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Kochlöffel": { - "tags": { - "name": "Kochlöffel", - "amenity": "fast_food" - }, - "name": "Kochlöffel", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Döner": { - "tags": { - "name": "Döner", - "amenity": "fast_food" - }, - "name": "Döner", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Telepizza": { - "tags": { - "name": "Telepizza", - "amenity": "fast_food" - }, - "name": "Telepizza", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Sibylla": { - "tags": { - "name": "Sibylla", - "amenity": "fast_food" - }, - "name": "Sibylla", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Carl's Jr.": { - "tags": { - "name": "Carl's Jr.", - "cuisine": "burger", - "amenity": "fast_food" - }, - "name": "Carl's Jr.", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Quiznos": { - "tags": { - "name": "Quiznos", - "cuisine": "sandwich", - "amenity": "fast_food" - }, - "name": "Quiznos", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Wimpy": { - "tags": { - "name": "Wimpy", - "amenity": "fast_food" - }, - "name": "Wimpy", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Sonic": { - "tags": { - "name": "Sonic", - "cuisine": "burger", - "amenity": "fast_food" - }, - "name": "Sonic", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Taco Bell": { - "tags": { - "name": "Taco Bell", - "amenity": "fast_food" - }, - "name": "Taco Bell", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Pizza Nova": { - "tags": { - "name": "Pizza Nova", - "amenity": "fast_food" - }, - "name": "Pizza Nova", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Papa John's": { - "tags": { - "name": "Papa John's", - "cuisine": "pizza", - "amenity": "fast_food" - }, - "name": "Papa John's", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Nordsee": { - "tags": { - "name": "Nordsee", - "amenity": "fast_food" - }, - "name": "Nordsee", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Mr. Sub": { - "tags": { - "name": "Mr. Sub", - "amenity": "fast_food" - }, - "name": "Mr. Sub", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Kebab": { - "tags": { - "name": "Kebab", - "amenity": "fast_food" - }, - "name": "Kebab", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Макдоналдс": { - "tags": { - "name": "Макдоналдс", - "name:en": "McDonald's", - "amenity": "fast_food" - }, - "name": "Макдоналдс", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Asia Imbiss": { - "tags": { - "name": "Asia Imbiss", - "amenity": "fast_food" - }, - "name": "Asia Imbiss", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Imbiss": { - "tags": { - "name": "Imbiss", - "amenity": "fast_food" - }, - "name": "Imbiss", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Chipotle": { - "tags": { - "name": "Chipotle", - "cuisine": "mexican", - "amenity": "fast_food" - }, - "name": "Chipotle", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/マクドナルド": { - "tags": { - "name": "マクドナルド", - "name:en": "McDonald's", - "cuisine": "burger", - "amenity": "fast_food" - }, - "name": "マクドナルド", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/In-N-Out Burger": { - "tags": { - "name": "In-N-Out Burger", - "amenity": "fast_food" - }, - "name": "In-N-Out Burger", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Jimmy John's": { - "tags": { - "name": "Jimmy John's", - "amenity": "fast_food" - }, - "name": "Jimmy John's", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Jamba Juice": { - "tags": { - "name": "Jamba Juice", - "amenity": "fast_food" - }, - "name": "Jamba Juice", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Робин Сдобин": { - "tags": { - "name": "Робин Сдобин", - "amenity": "fast_food" - }, - "name": "Робин Сдобин", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Baskin Robbins": { - "tags": { - "name": "Baskin Robbins", - "amenity": "fast_food" - }, - "name": "Baskin Robbins", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/ケンタッキーフライドチキン": { - "tags": { - "name": "ケンタッキーフライドチキン", - "name:en": "KFC", - "cuisine": "chicken", - "amenity": "fast_food" - }, - "name": "ケンタッキーフライドチキン", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/吉野家": { - "tags": { - "name": "吉野家", - "amenity": "fast_food" - }, - "name": "吉野家", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Taco Time": { - "tags": { - "name": "Taco Time", - "amenity": "fast_food" - }, - "name": "Taco Time", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/松屋": { - "tags": { - "name": "松屋", - "name:en": "Matsuya", - "amenity": "fast_food" - }, - "name": "松屋", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Little Caesars": { - "tags": { - "name": "Little Caesars", - "amenity": "fast_food" - }, - "name": "Little Caesars", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/El Pollo Loco": { - "tags": { - "name": "El Pollo Loco", - "amenity": "fast_food" - }, - "name": "El Pollo Loco", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Del Taco": { - "tags": { - "name": "Del Taco", - "amenity": "fast_food" - }, - "name": "Del Taco", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/White Castle": { - "tags": { - "name": "White Castle", - "amenity": "fast_food" - }, - "name": "White Castle", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Boston Market": { - "tags": { - "name": "Boston Market", - "amenity": "fast_food" - }, - "name": "Boston Market", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Chick-fil-A": { - "tags": { - "name": "Chick-fil-A", - "cuisine": "chicken", - "amenity": "fast_food" - }, - "name": "Chick-fil-A", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Panda Express": { - "tags": { - "name": "Panda Express", - "amenity": "fast_food" - }, - "name": "Panda Express", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Whataburger": { - "tags": { - "name": "Whataburger", - "amenity": "fast_food" - }, - "name": "Whataburger", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Taco John's": { - "tags": { - "name": "Taco John's", - "amenity": "fast_food" - }, - "name": "Taco John's", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Теремок": { - "tags": { - "name": "Теремок", - "amenity": "fast_food" - }, - "name": "Теремок", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Culver's": { - "tags": { - "name": "Culver's", - "amenity": "fast_food" - }, - "name": "Culver's", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Five Guys": { - "tags": { - "name": "Five Guys", - "amenity": "fast_food" - }, - "name": "Five Guys", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Church's Chicken": { - "tags": { - "name": "Church's Chicken", - "amenity": "fast_food" - }, - "name": "Church's Chicken", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Popeye's": { - "tags": { - "name": "Popeye's", - "cuisine": "chicken", - "amenity": "fast_food" - }, - "name": "Popeye's", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Long John Silver's": { - "tags": { - "name": "Long John Silver's", - "amenity": "fast_food" - }, - "name": "Long John Silver's", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Pollo Campero": { - "tags": { - "name": "Pollo Campero", - "amenity": "fast_food" - }, - "name": "Pollo Campero", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/すき家": { - "tags": { - "name": "すき家", - "name:en": "SUKIYA", - "amenity": "fast_food" - }, - "name": "すき家", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/モスバーガー": { - "tags": { - "name": "モスバーガー", - "name:en": "MOS BURGER", - "amenity": "fast_food" - }, - "name": "モスバーガー", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/Русский Аппетит": { - "tags": { - "name": "Русский Аппетит", - "amenity": "fast_food" - }, - "name": "Русский Аппетит", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/fast_food/なか卯": { - "tags": { - "name": "なか卯", - "amenity": "fast_food" - }, - "name": "なか卯", - "icon": "fast-food", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/restaurant/Pizza Hut": { - "tags": { - "name": "Pizza Hut", - "amenity": "restaurant" - }, - "name": "Pizza Hut", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Little Chef": { - "tags": { - "name": "Little Chef", - "amenity": "restaurant" - }, - "name": "Little Chef", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Adler": { - "tags": { - "name": "Adler", - "amenity": "restaurant" - }, - "name": "Adler", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Zur Krone": { - "tags": { - "name": "Zur Krone", - "amenity": "restaurant" - }, - "name": "Zur Krone", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Deutsches Haus": { - "tags": { - "name": "Deutsches Haus", - "amenity": "restaurant" - }, - "name": "Deutsches Haus", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Krone": { - "tags": { - "name": "Krone", - "amenity": "restaurant" - }, - "name": "Krone", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Akropolis": { - "tags": { - "name": "Akropolis", - "amenity": "restaurant" - }, - "name": "Akropolis", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Schützenhaus": { - "tags": { - "name": "Schützenhaus", - "amenity": "restaurant" - }, - "name": "Schützenhaus", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/TGI Friday's": { - "tags": { - "name": "TGI Friday's", - "amenity": "restaurant" - }, - "name": "TGI Friday's", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Kreuz": { - "tags": { - "name": "Kreuz", - "amenity": "restaurant" - }, - "name": "Kreuz", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Waldschänke": { - "tags": { - "name": "Waldschänke", - "amenity": "restaurant" - }, - "name": "Waldschänke", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/La Piazza": { - "tags": { - "name": "La Piazza", - "amenity": "restaurant" - }, - "name": "La Piazza", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Lamm": { - "tags": { - "name": "Lamm", - "amenity": "restaurant" - }, - "name": "Lamm", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Zur Sonne": { - "tags": { - "name": "Zur Sonne", - "amenity": "restaurant" - }, - "name": "Zur Sonne", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Zur Linde": { - "tags": { - "name": "Zur Linde", - "amenity": "restaurant" - }, - "name": "Zur Linde", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Poseidon": { - "tags": { - "name": "Poseidon", - "amenity": "restaurant" - }, - "name": "Poseidon", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Shanghai": { - "tags": { - "name": "Shanghai", - "amenity": "restaurant" - }, - "name": "Shanghai", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Red Lobster": { - "tags": { - "name": "Red Lobster", - "amenity": "restaurant" - }, - "name": "Red Lobster", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Zum Löwen": { - "tags": { - "name": "Zum Löwen", - "amenity": "restaurant" - }, - "name": "Zum Löwen", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Swiss Chalet": { - "tags": { - "name": "Swiss Chalet", - "amenity": "restaurant" - }, - "name": "Swiss Chalet", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Olympia": { - "tags": { - "name": "Olympia", - "amenity": "restaurant" - }, - "name": "Olympia", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Wagamama": { - "tags": { - "name": "Wagamama", - "amenity": "restaurant" - }, - "name": "Wagamama", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Frankie & Benny's": { - "tags": { - "name": "Frankie & Benny's", - "amenity": "restaurant" - }, - "name": "Frankie & Benny's", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Hooters": { - "tags": { - "name": "Hooters", - "amenity": "restaurant" - }, - "name": "Hooters", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Sternen": { - "tags": { - "name": "Sternen", - "amenity": "restaurant" - }, - "name": "Sternen", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Hirschen": { - "tags": { - "name": "Hirschen", - "amenity": "restaurant" - }, - "name": "Hirschen", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Denny's": { - "tags": { - "name": "Denny's", - "amenity": "restaurant" - }, - "name": "Denny's", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Athen": { - "tags": { - "name": "Athen", - "amenity": "restaurant" - }, - "name": "Athen", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Sonne": { - "tags": { - "name": "Sonne", - "amenity": "restaurant" - }, - "name": "Sonne", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Hirsch": { - "tags": { - "name": "Hirsch", - "amenity": "restaurant" - }, - "name": "Hirsch", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Ratskeller": { - "tags": { - "name": "Ratskeller", - "amenity": "restaurant" - }, - "name": "Ratskeller", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/La Cantina": { - "tags": { - "name": "La Cantina", - "amenity": "restaurant" - }, - "name": "La Cantina", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Gasthaus Krone": { - "tags": { - "name": "Gasthaus Krone", - "amenity": "restaurant" - }, - "name": "Gasthaus Krone", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/El Greco": { - "tags": { - "name": "El Greco", - "amenity": "restaurant" - }, - "name": "El Greco", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Gasthof zur Post": { - "tags": { - "name": "Gasthof zur Post", - "amenity": "restaurant" - }, - "name": "Gasthof zur Post", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Nando's": { - "tags": { - "name": "Nando's", - "amenity": "restaurant" - }, - "name": "Nando's", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Löwen": { - "tags": { - "name": "Löwen", - "amenity": "restaurant" - }, - "name": "Löwen", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Pizza Express": { - "tags": { - "name": "Pizza Express", - "amenity": "restaurant" - }, - "name": "Pizza Express", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Mandarin": { - "tags": { - "name": "Mandarin", - "amenity": "restaurant" - }, - "name": "Mandarin", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Hong Kong": { - "tags": { - "name": "Hong Kong", - "amenity": "restaurant" - }, - "name": "Hong Kong", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Zizzi": { - "tags": { - "name": "Zizzi", - "amenity": "restaurant" - }, - "name": "Zizzi", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Cracker Barrel": { - "tags": { - "name": "Cracker Barrel", - "amenity": "restaurant" - }, - "name": "Cracker Barrel", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Rhodos": { - "tags": { - "name": "Rhodos", - "amenity": "restaurant" - }, - "name": "Rhodos", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Lindenhof": { - "tags": { - "name": "Lindenhof", - "amenity": "restaurant" - }, - "name": "Lindenhof", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Milano": { - "tags": { - "name": "Milano", - "amenity": "restaurant" - }, - "name": "Milano", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Dolce Vita": { - "tags": { - "name": "Dolce Vita", - "amenity": "restaurant" - }, - "name": "Dolce Vita", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Kirchenwirt": { - "tags": { - "name": "Kirchenwirt", - "amenity": "restaurant" - }, - "name": "Kirchenwirt", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Kantine": { - "tags": { - "name": "Kantine", - "amenity": "restaurant" - }, - "name": "Kantine", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Ochsen": { - "tags": { - "name": "Ochsen", - "amenity": "restaurant" - }, - "name": "Ochsen", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Spur": { - "tags": { - "name": "Spur", - "amenity": "restaurant" - }, - "name": "Spur", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Mykonos": { - "tags": { - "name": "Mykonos", - "amenity": "restaurant" - }, - "name": "Mykonos", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Lotus": { - "tags": { - "name": "Lotus", - "amenity": "restaurant" - }, - "name": "Lotus", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Applebee's": { - "tags": { - "name": "Applebee's", - "amenity": "restaurant" - }, - "name": "Applebee's", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Flunch": { - "tags": { - "name": "Flunch", - "amenity": "restaurant" - }, - "name": "Flunch", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Zur Post": { - "tags": { - "name": "Zur Post", - "amenity": "restaurant" - }, - "name": "Zur Post", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/China Town": { - "tags": { - "name": "China Town", - "amenity": "restaurant" - }, - "name": "China Town", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/La Dolce Vita": { - "tags": { - "name": "La Dolce Vita", - "amenity": "restaurant" - }, - "name": "La Dolce Vita", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Waffle House": { - "tags": { - "name": "Waffle House", - "amenity": "restaurant" - }, - "name": "Waffle House", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Delphi": { - "tags": { - "name": "Delphi", - "amenity": "restaurant" - }, - "name": "Delphi", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Linde": { - "tags": { - "name": "Linde", - "amenity": "restaurant" - }, - "name": "Linde", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Dionysos": { - "tags": { - "name": "Dionysos", - "amenity": "restaurant" - }, - "name": "Dionysos", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Outback Steakhouse": { - "tags": { - "name": "Outback Steakhouse", - "amenity": "restaurant" - }, - "name": "Outback Steakhouse", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Kelsey's": { - "tags": { - "name": "Kelsey's", - "amenity": "restaurant" - }, - "name": "Kelsey's", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Boston Pizza": { - "tags": { - "name": "Boston Pizza", - "amenity": "restaurant" - }, - "name": "Boston Pizza", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Bella Italia": { - "tags": { - "name": "Bella Italia", - "amenity": "restaurant" - }, - "name": "Bella Italia", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Sizzler": { - "tags": { - "name": "Sizzler", - "amenity": "restaurant" - }, - "name": "Sizzler", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Grüner Baum": { - "tags": { - "name": "Grüner Baum", - "amenity": "restaurant" - }, - "name": "Grüner Baum", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Taj Mahal": { - "tags": { - "name": "Taj Mahal", - "amenity": "restaurant" - }, - "name": "Taj Mahal", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Rössli": { - "tags": { - "name": "Rössli", - "amenity": "restaurant" - }, - "name": "Rössli", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Traube": { - "tags": { - "name": "Traube", - "amenity": "restaurant" - }, - "name": "Traube", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Red Robin": { - "tags": { - "name": "Red Robin", - "amenity": "restaurant" - }, - "name": "Red Robin", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Roma": { - "tags": { - "name": "Roma", - "amenity": "restaurant" - }, - "name": "Roma", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/San Marco": { - "tags": { - "name": "San Marco", - "amenity": "restaurant" - }, - "name": "San Marco", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Hellas": { - "tags": { - "name": "Hellas", - "amenity": "restaurant" - }, - "name": "Hellas", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/La Perla": { - "tags": { - "name": "La Perla", - "amenity": "restaurant" - }, - "name": "La Perla", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Vips": { - "tags": { - "name": "Vips", - "amenity": "restaurant" - }, - "name": "Vips", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Panera Bread": { - "tags": { - "name": "Panera Bread", - "amenity": "restaurant" - }, - "name": "Panera Bread", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Da Vinci": { - "tags": { - "name": "Da Vinci", - "amenity": "restaurant" - }, - "name": "Da Vinci", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Hippopotamus": { - "tags": { - "name": "Hippopotamus", - "amenity": "restaurant" - }, - "name": "Hippopotamus", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Prezzo": { - "tags": { - "name": "Prezzo", - "amenity": "restaurant" - }, - "name": "Prezzo", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Courtepaille": { - "tags": { - "name": "Courtepaille", - "amenity": "restaurant" - }, - "name": "Courtepaille", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Hard Rock Cafe": { - "tags": { - "name": "Hard Rock Cafe", - "amenity": "restaurant" - }, - "name": "Hard Rock Cafe", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Panorama": { - "tags": { - "name": "Panorama", - "amenity": "restaurant" - }, - "name": "Panorama", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/デニーズ": { - "tags": { - "name": "デニーズ", - "amenity": "restaurant" - }, - "name": "デニーズ", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Sportheim": { - "tags": { - "name": "Sportheim", - "amenity": "restaurant" - }, - "name": "Sportheim", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/餃子の王将": { - "tags": { - "name": "餃子の王将", - "amenity": "restaurant" - }, - "name": "餃子の王将", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Bären": { - "tags": { - "name": "Bären", - "amenity": "restaurant" - }, - "name": "Bären", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Alte Post": { - "tags": { - "name": "Alte Post", - "amenity": "restaurant" - }, - "name": "Alte Post", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/China Garden": { - "tags": { - "name": "China Garden", - "amenity": "restaurant" - }, - "name": "China Garden", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Vapiano": { - "tags": { - "name": "Vapiano", - "amenity": "restaurant" - }, - "name": "Vapiano", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Mamma Mia": { - "tags": { - "name": "Mamma Mia", - "amenity": "restaurant" - }, - "name": "Mamma Mia", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Schwarzer Adler": { - "tags": { - "name": "Schwarzer Adler", - "amenity": "restaurant" - }, - "name": "Schwarzer Adler", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/IHOP": { - "tags": { - "name": "IHOP", - "amenity": "restaurant" - }, - "name": "IHOP", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Chili's": { - "tags": { - "name": "Chili's", - "amenity": "restaurant" - }, - "name": "Chili's", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Olive Garden": { - "tags": { - "name": "Olive Garden", - "amenity": "restaurant" - }, - "name": "Olive Garden", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Friendly's": { - "tags": { - "name": "Friendly's", - "amenity": "restaurant" - }, - "name": "Friendly's", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Buffalo Grill": { - "tags": { - "name": "Buffalo Grill", - "amenity": "restaurant" - }, - "name": "Buffalo Grill", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Texas Roadhouse": { - "tags": { - "name": "Texas Roadhouse", - "amenity": "restaurant" - }, - "name": "Texas Roadhouse", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/ガスト": { - "tags": { - "name": "ガスト", - "name:en": "Gusto", - "amenity": "restaurant" - }, - "name": "ガスト", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Sakura": { - "tags": { - "name": "Sakura", - "amenity": "restaurant" - }, - "name": "Sakura", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Mensa": { - "tags": { - "name": "Mensa", - "amenity": "restaurant" - }, - "name": "Mensa", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/The Keg": { - "tags": { - "name": "The Keg", - "amenity": "restaurant" - }, - "name": "The Keg", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/サイゼリヤ": { - "tags": { - "name": "サイゼリヤ", - "amenity": "restaurant" - }, - "name": "サイゼリヤ", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/La Strada": { - "tags": { - "name": "La Strada", - "amenity": "restaurant" - }, - "name": "La Strada", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Village Inn": { - "tags": { - "name": "Village Inn", - "amenity": "restaurant" - }, - "name": "Village Inn", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Buffalo Wild Wings": { - "tags": { - "name": "Buffalo Wild Wings", - "amenity": "restaurant" - }, - "name": "Buffalo Wild Wings", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Peking": { - "tags": { - "name": "Peking", - "amenity": "restaurant" - }, - "name": "Peking", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/California Pizza Kitchen": { - "tags": { - "name": "California Pizza Kitchen", - "amenity": "restaurant" - }, - "name": "California Pizza Kitchen", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Якитория": { - "tags": { - "name": "Якитория", - "amenity": "restaurant" - }, - "name": "Якитория", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Golden Corral": { - "tags": { - "name": "Golden Corral", - "amenity": "restaurant" - }, - "name": "Golden Corral", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Perkins": { - "tags": { - "name": "Perkins", - "amenity": "restaurant" - }, - "name": "Perkins", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Ruby Tuesday": { - "tags": { - "name": "Ruby Tuesday", - "amenity": "restaurant" - }, - "name": "Ruby Tuesday", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Shari's": { - "tags": { - "name": "Shari's", - "amenity": "restaurant" - }, - "name": "Shari's", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Bob Evans": { - "tags": { - "name": "Bob Evans", - "amenity": "restaurant" - }, - "name": "Bob Evans", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/바다횟집 (Bada Fish Restaurant)": { - "tags": { - "name": "바다횟집 (Bada Fish Restaurant)", - "amenity": "restaurant" - }, - "name": "바다횟집 (Bada Fish Restaurant)", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Mang Inasal": { - "tags": { - "name": "Mang Inasal", - "amenity": "restaurant" - }, - "name": "Mang Inasal", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Евразия": { - "tags": { - "name": "Евразия", - "amenity": "restaurant" - }, - "name": "Евразия", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/ジョナサン": { - "tags": { - "name": "ジョナサン", - "amenity": "restaurant" - }, - "name": "ジョナサン", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/restaurant/Longhorn Steakhouse": { - "tags": { - "name": "Longhorn Steakhouse", - "amenity": "restaurant" - }, - "name": "Longhorn Steakhouse", - "icon": "restaurant", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "building_area", - "address", - "opening_hours", - "capacity" - ], - "suggestion": true - }, - "amenity/bank/Chase": { - "tags": { - "name": "Chase", - "amenity": "bank" - }, - "name": "Chase", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Commonwealth Bank": { - "tags": { - "name": "Commonwealth Bank", - "amenity": "bank" - }, - "name": "Commonwealth Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Citibank": { - "tags": { - "name": "Citibank", - "amenity": "bank" - }, - "name": "Citibank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/HSBC": { - "tags": { - "name": "HSBC", - "amenity": "bank" - }, - "name": "HSBC", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Barclays": { - "tags": { - "name": "Barclays", - "amenity": "bank" - }, - "name": "Barclays", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Westpac": { - "tags": { - "name": "Westpac", - "amenity": "bank" - }, - "name": "Westpac", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/NAB": { - "tags": { - "name": "NAB", - "amenity": "bank" - }, - "name": "NAB", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/ANZ": { - "tags": { - "name": "ANZ", - "amenity": "bank" - }, - "name": "ANZ", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Lloyds Bank": { - "tags": { - "name": "Lloyds Bank", - "amenity": "bank" - }, - "name": "Lloyds Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Landbank": { - "tags": { - "name": "Landbank", - "amenity": "bank" - }, - "name": "Landbank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Sparkasse": { - "tags": { - "name": "Sparkasse", - "amenity": "bank" - }, - "name": "Sparkasse", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/UCPB": { - "tags": { - "name": "UCPB", - "amenity": "bank" - }, - "name": "UCPB", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/PNB": { - "tags": { - "name": "PNB", - "amenity": "bank" - }, - "name": "PNB", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Metrobank": { - "tags": { - "name": "Metrobank", - "amenity": "bank" - }, - "name": "Metrobank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/BDO": { - "tags": { - "name": "BDO", - "amenity": "bank" - }, - "name": "BDO", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Volksbank": { - "tags": { - "name": "Volksbank", - "amenity": "bank" - }, - "name": "Volksbank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/BPI": { - "tags": { - "name": "BPI", - "amenity": "bank" - }, - "name": "BPI", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Postbank": { - "tags": { - "name": "Postbank", - "amenity": "bank" - }, - "name": "Postbank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/NatWest": { - "tags": { - "name": "NatWest", - "amenity": "bank" - }, - "name": "NatWest", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Yorkshire Bank": { - "tags": { - "name": "Yorkshire Bank", - "amenity": "bank" - }, - "name": "Yorkshire Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/ABSA": { - "tags": { - "name": "ABSA", - "amenity": "bank" - }, - "name": "ABSA", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Standard Bank": { - "tags": { - "name": "Standard Bank", - "amenity": "bank" - }, - "name": "Standard Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/FNB": { - "tags": { - "name": "FNB", - "amenity": "bank" - }, - "name": "FNB", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Deutsche Bank": { - "tags": { - "name": "Deutsche Bank", - "amenity": "bank" - }, - "name": "Deutsche Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/SEB": { - "tags": { - "name": "SEB", - "amenity": "bank" - }, - "name": "SEB", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Commerzbank": { - "tags": { - "name": "Commerzbank", - "amenity": "bank" - }, - "name": "Commerzbank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Targobank": { - "tags": { - "name": "Targobank", - "amenity": "bank" - }, - "name": "Targobank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/ABN AMRO": { - "tags": { - "name": "ABN AMRO", - "amenity": "bank" - }, - "name": "ABN AMRO", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Handelsbanken": { - "tags": { - "name": "Handelsbanken", - "amenity": "bank" - }, - "name": "Handelsbanken", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Swedbank": { - "tags": { - "name": "Swedbank", - "amenity": "bank" - }, - "name": "Swedbank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Kreissparkasse": { - "tags": { - "name": "Kreissparkasse", - "amenity": "bank" - }, - "name": "Kreissparkasse", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/UniCredit Bank": { - "tags": { - "name": "UniCredit Bank", - "amenity": "bank" - }, - "name": "UniCredit Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Monte dei Paschi di Siena": { - "tags": { - "name": "Monte dei Paschi di Siena", - "amenity": "bank" - }, - "name": "Monte dei Paschi di Siena", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Caja Rural": { - "tags": { - "name": "Caja Rural", - "amenity": "bank" - }, - "name": "Caja Rural", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Dresdner Bank": { - "tags": { - "name": "Dresdner Bank", - "amenity": "bank" - }, - "name": "Dresdner Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Sparda-Bank": { - "tags": { - "name": "Sparda-Bank", - "amenity": "bank" - }, - "name": "Sparda-Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/VÚB": { - "tags": { - "name": "VÚB", - "amenity": "bank" - }, - "name": "VÚB", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Slovenská sporiteľňa": { - "tags": { - "name": "Slovenská sporiteľňa", - "amenity": "bank" - }, - "name": "Slovenská sporiteľňa", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Bank of Montreal": { - "tags": { - "name": "Bank of Montreal", - "amenity": "bank" - }, - "name": "Bank of Montreal", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/KBC": { - "tags": { - "name": "KBC", - "amenity": "bank" - }, - "name": "KBC", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Royal Bank of Scotland": { - "tags": { - "name": "Royal Bank of Scotland", - "amenity": "bank" - }, - "name": "Royal Bank of Scotland", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/TSB": { - "tags": { - "name": "TSB", - "amenity": "bank" - }, - "name": "TSB", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/US Bank": { - "tags": { - "name": "US Bank", - "amenity": "bank" - }, - "name": "US Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/HypoVereinsbank": { - "tags": { - "name": "HypoVereinsbank", - "amenity": "bank" - }, - "name": "HypoVereinsbank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Bank Austria": { - "tags": { - "name": "Bank Austria", - "amenity": "bank" - }, - "name": "Bank Austria", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/ING": { - "tags": { - "name": "ING", - "amenity": "bank" - }, - "name": "ING", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Erste Bank": { - "tags": { - "name": "Erste Bank", - "amenity": "bank" - }, - "name": "Erste Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/CIBC": { - "tags": { - "name": "CIBC", - "amenity": "bank" - }, - "name": "CIBC", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Scotiabank": { - "tags": { - "name": "Scotiabank", - "amenity": "bank" - }, - "name": "Scotiabank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Caisse d'Épargne": { - "tags": { - "name": "Caisse d'Épargne", - "amenity": "bank" - }, - "name": "Caisse d'Épargne", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Santander": { - "tags": { - "name": "Santander", - "amenity": "bank" - }, - "name": "Santander", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Bank of Scotland": { - "tags": { - "name": "Bank of Scotland", - "amenity": "bank" - }, - "name": "Bank of Scotland", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/TD Canada Trust": { - "tags": { - "name": "TD Canada Trust", - "amenity": "bank" - }, - "name": "TD Canada Trust", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/BMO": { - "tags": { - "name": "BMO", - "amenity": "bank" - }, - "name": "BMO", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Danske Bank": { - "tags": { - "name": "Danske Bank", - "amenity": "bank" - }, - "name": "Danske Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/OTP": { - "tags": { - "name": "OTP", - "amenity": "bank" - }, - "name": "OTP", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Crédit Agricole": { - "tags": { - "name": "Crédit Agricole", - "amenity": "bank" - }, - "name": "Crédit Agricole", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/LCL": { - "tags": { - "name": "LCL", - "amenity": "bank" - }, - "name": "LCL", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/VR-Bank": { - "tags": { - "name": "VR-Bank", - "amenity": "bank" - }, - "name": "VR-Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/ČSOB": { - "tags": { - "name": "ČSOB", - "amenity": "bank" - }, - "name": "ČSOB", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Česká spořitelna": { - "tags": { - "name": "Česká spořitelna", - "amenity": "bank" - }, - "name": "Česká spořitelna", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/BNP": { - "tags": { - "name": "BNP", - "amenity": "bank" - }, - "name": "BNP", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Royal Bank": { - "tags": { - "name": "Royal Bank", - "amenity": "bank" - }, - "name": "Royal Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Nationwide": { - "tags": { - "name": "Nationwide", - "amenity": "bank" - }, - "name": "Nationwide", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Halifax": { - "tags": { - "name": "Halifax", - "amenity": "bank" - }, - "name": "Halifax", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/BAWAG PSK": { - "tags": { - "name": "BAWAG PSK", - "amenity": "bank" - }, - "name": "BAWAG PSK", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/National Bank": { - "tags": { - "name": "National Bank", - "amenity": "bank" - }, - "name": "National Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Nedbank": { - "tags": { - "name": "Nedbank", - "amenity": "bank" - }, - "name": "Nedbank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/First National Bank": { - "tags": { - "name": "First National Bank", - "amenity": "bank" - }, - "name": "First National Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Nordea": { - "tags": { - "name": "Nordea", - "amenity": "bank" - }, - "name": "Nordea", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Rabobank": { - "tags": { - "name": "Rabobank", - "amenity": "bank" - }, - "name": "Rabobank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Sparkasse KölnBonn": { - "tags": { - "name": "Sparkasse KölnBonn", - "amenity": "bank" - }, - "name": "Sparkasse KölnBonn", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Tatra banka": { - "tags": { - "name": "Tatra banka", - "amenity": "bank" - }, - "name": "Tatra banka", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Berliner Sparkasse": { - "tags": { - "name": "Berliner Sparkasse", - "amenity": "bank" - }, - "name": "Berliner Sparkasse", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Berliner Volksbank": { - "tags": { - "name": "Berliner Volksbank", - "amenity": "bank" - }, - "name": "Berliner Volksbank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Wells Fargo": { - "tags": { - "name": "Wells Fargo", - "amenity": "bank" - }, - "name": "Wells Fargo", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Credit Suisse": { - "tags": { - "name": "Credit Suisse", - "amenity": "bank" - }, - "name": "Credit Suisse", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Société Générale": { - "tags": { - "name": "Société Générale", - "amenity": "bank" - }, - "name": "Société Générale", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Osuuspankki": { - "tags": { - "name": "Osuuspankki", - "amenity": "bank" - }, - "name": "Osuuspankki", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Sparkasse Aachen": { - "tags": { - "name": "Sparkasse Aachen", - "amenity": "bank" - }, - "name": "Sparkasse Aachen", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Hamburger Sparkasse": { - "tags": { - "name": "Hamburger Sparkasse", - "amenity": "bank" - }, - "name": "Hamburger Sparkasse", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Cassa di Risparmio del Veneto": { - "tags": { - "name": "Cassa di Risparmio del Veneto", - "amenity": "bank" - }, - "name": "Cassa di Risparmio del Veneto", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/BNP Paribas": { - "tags": { - "name": "BNP Paribas", - "amenity": "bank" - }, - "name": "BNP Paribas", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Banque Populaire": { - "tags": { - "name": "Banque Populaire", - "amenity": "bank" - }, - "name": "Banque Populaire", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/BNP Paribas Fortis": { - "tags": { - "name": "BNP Paribas Fortis", - "amenity": "bank" - }, - "name": "BNP Paribas Fortis", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Banco Popular": { - "tags": { - "name": "Banco Popular", - "amenity": "bank" - }, - "name": "Banco Popular", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Bancaja": { - "tags": { - "name": "Bancaja", - "amenity": "bank" - }, - "name": "Bancaja", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Banesto": { - "tags": { - "name": "Banesto", - "amenity": "bank" - }, - "name": "Banesto", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/La Caixa": { - "tags": { - "name": "La Caixa", - "amenity": "bank" - }, - "name": "La Caixa", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Santander Consumer Bank": { - "tags": { - "name": "Santander Consumer Bank", - "amenity": "bank" - }, - "name": "Santander Consumer Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/BRD": { - "tags": { - "name": "BRD", - "amenity": "bank" - }, - "name": "BRD", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/BCR": { - "tags": { - "name": "BCR", - "amenity": "bank" - }, - "name": "BCR", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Banca Transilvania": { - "tags": { - "name": "Banca Transilvania", - "amenity": "bank" - }, - "name": "Banca Transilvania", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/BW-Bank": { - "tags": { - "name": "BW-Bank", - "amenity": "bank" - }, - "name": "BW-Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Komerční banka": { - "tags": { - "name": "Komerční banka", - "amenity": "bank" - }, - "name": "Komerční banka", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Banco Pastor": { - "tags": { - "name": "Banco Pastor", - "amenity": "bank" - }, - "name": "Banco Pastor", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Stadtsparkasse": { - "tags": { - "name": "Stadtsparkasse", - "amenity": "bank" - }, - "name": "Stadtsparkasse", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Ulster Bank": { - "tags": { - "name": "Ulster Bank", - "amenity": "bank" - }, - "name": "Ulster Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Sberbank": { - "tags": { - "name": "Sberbank", - "amenity": "bank" - }, - "name": "Sberbank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/CIC": { - "tags": { - "name": "CIC", - "amenity": "bank" - }, - "name": "CIC", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Bancpost": { - "tags": { - "name": "Bancpost", - "amenity": "bank" - }, - "name": "Bancpost", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Caja Madrid": { - "tags": { - "name": "Caja Madrid", - "amenity": "bank" - }, - "name": "Caja Madrid", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Maybank": { - "tags": { - "name": "Maybank", - "amenity": "bank" - }, - "name": "Maybank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/中国银行": { - "tags": { - "name": "中国银行", - "amenity": "bank" - }, - "name": "中国银行", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Unicredit Banca": { - "tags": { - "name": "Unicredit Banca", - "amenity": "bank" - }, - "name": "Unicredit Banca", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Crédit Mutuel": { - "tags": { - "name": "Crédit Mutuel", - "amenity": "bank" - }, - "name": "Crédit Mutuel", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/BBVA": { - "tags": { - "name": "BBVA", - "amenity": "bank" - }, - "name": "BBVA", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Intesa San Paolo": { - "tags": { - "name": "Intesa San Paolo", - "amenity": "bank" - }, - "name": "Intesa San Paolo", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/TD Bank": { - "tags": { - "name": "TD Bank", - "amenity": "bank" - }, - "name": "TD Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Belfius": { - "tags": { - "name": "Belfius", - "amenity": "bank" - }, - "name": "Belfius", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Bank of America": { - "tags": { - "name": "Bank of America", - "amenity": "bank" - }, - "name": "Bank of America", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/RBC": { - "tags": { - "name": "RBC", - "amenity": "bank" - }, - "name": "RBC", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Alpha Bank": { - "tags": { - "name": "Alpha Bank", - "amenity": "bank" - }, - "name": "Alpha Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Сбербанк": { - "tags": { - "name": "Сбербанк", - "amenity": "bank" - }, - "name": "Сбербанк", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Россельхозбанк": { - "tags": { - "name": "Россельхозбанк", - "amenity": "bank" - }, - "name": "Россельхозбанк", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Crédit du Nord": { - "tags": { - "name": "Crédit du Nord", - "amenity": "bank" - }, - "name": "Crédit du Nord", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/BancoEstado": { - "tags": { - "name": "BancoEstado", - "amenity": "bank" - }, - "name": "BancoEstado", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Millennium Bank": { - "tags": { - "name": "Millennium Bank", - "amenity": "bank" - }, - "name": "Millennium Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/State Bank of India": { - "tags": { - "name": "State Bank of India", - "amenity": "bank" - }, - "name": "State Bank of India", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Беларусбанк": { - "tags": { - "name": "Беларусбанк", - "amenity": "bank" - }, - "name": "Беларусбанк", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/ING Bank Śląski": { - "tags": { - "name": "ING Bank Śląski", - "amenity": "bank" - }, - "name": "ING Bank Śląski", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Caixa Geral de Depósitos": { - "tags": { - "name": "Caixa Geral de Depósitos", - "amenity": "bank" - }, - "name": "Caixa Geral de Depósitos", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Kreissparkasse Köln": { - "tags": { - "name": "Kreissparkasse Köln", - "amenity": "bank" - }, - "name": "Kreissparkasse Köln", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Banco BCI": { - "tags": { - "name": "Banco BCI", - "amenity": "bank" - }, - "name": "Banco BCI", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Banco de Chile": { - "tags": { - "name": "Banco de Chile", - "amenity": "bank" - }, - "name": "Banco de Chile", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/ВТБ24": { - "tags": { - "name": "ВТБ24", - "amenity": "bank" - }, - "name": "ВТБ24", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/UBS": { - "tags": { - "name": "UBS", - "amenity": "bank" - }, - "name": "UBS", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/PKO BP": { - "tags": { - "name": "PKO BP", - "amenity": "bank" - }, - "name": "PKO BP", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Chinabank": { - "tags": { - "name": "Chinabank", - "amenity": "bank" - }, - "name": "Chinabank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/PSBank": { - "tags": { - "name": "PSBank", - "amenity": "bank" - }, - "name": "PSBank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Union Bank": { - "tags": { - "name": "Union Bank", - "amenity": "bank" - }, - "name": "Union Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/China Bank": { - "tags": { - "name": "China Bank", - "amenity": "bank" - }, - "name": "China Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/RCBC": { - "tags": { - "name": "RCBC", - "amenity": "bank" - }, - "name": "RCBC", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Unicaja": { - "tags": { - "name": "Unicaja", - "amenity": "bank" - }, - "name": "Unicaja", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/BBK": { - "tags": { - "name": "BBK", - "amenity": "bank" - }, - "name": "BBK", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Ibercaja": { - "tags": { - "name": "Ibercaja", - "amenity": "bank" - }, - "name": "Ibercaja", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/RBS": { - "tags": { - "name": "RBS", - "amenity": "bank" - }, - "name": "RBS", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Commercial Bank of Ceylon PLC": { - "tags": { - "name": "Commercial Bank of Ceylon PLC", - "amenity": "bank" - }, - "name": "Commercial Bank of Ceylon PLC", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Bank of Ireland": { - "tags": { - "name": "Bank of Ireland", - "amenity": "bank" - }, - "name": "Bank of Ireland", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/BNL": { - "tags": { - "name": "BNL", - "amenity": "bank" - }, - "name": "BNL", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Banco Santander": { - "tags": { - "name": "Banco Santander", - "amenity": "bank" - }, - "name": "Banco Santander", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Banco Itaú": { - "tags": { - "name": "Banco Itaú", - "amenity": "bank" - }, - "name": "Banco Itaú", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/AIB": { - "tags": { - "name": "AIB", - "amenity": "bank" - }, - "name": "AIB", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/BZ WBK": { - "tags": { - "name": "BZ WBK", - "amenity": "bank" - }, - "name": "BZ WBK", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Banco do Brasil": { - "tags": { - "name": "Banco do Brasil", - "amenity": "bank" - }, - "name": "Banco do Brasil", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Caixa Econômica Federal": { - "tags": { - "name": "Caixa Econômica Federal", - "amenity": "bank" - }, - "name": "Caixa Econômica Federal", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Fifth Third Bank": { - "tags": { - "name": "Fifth Third Bank", - "amenity": "bank" - }, - "name": "Fifth Third Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Banca Popolare di Vicenza": { - "tags": { - "name": "Banca Popolare di Vicenza", - "amenity": "bank" - }, - "name": "Banca Popolare di Vicenza", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Wachovia": { - "tags": { - "name": "Wachovia", - "amenity": "bank" - }, - "name": "Wachovia", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/OLB": { - "tags": { - "name": "OLB", - "amenity": "bank" - }, - "name": "OLB", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/みずほ銀行": { - "tags": { - "name": "みずほ銀行", - "amenity": "bank" - }, - "name": "みずほ銀行", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/BES": { - "tags": { - "name": "BES", - "amenity": "bank" - }, - "name": "BES", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/ICICI Bank": { - "tags": { - "name": "ICICI Bank", - "amenity": "bank" - }, - "name": "ICICI Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/HDFC Bank": { - "tags": { - "name": "HDFC Bank", - "amenity": "bank" - }, - "name": "HDFC Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/La Banque Postale": { - "tags": { - "name": "La Banque Postale", - "amenity": "bank" - }, - "name": "La Banque Postale", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Pekao SA": { - "tags": { - "name": "Pekao SA", - "amenity": "bank" - }, - "name": "Pekao SA", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Oberbank": { - "tags": { - "name": "Oberbank", - "amenity": "bank" - }, - "name": "Oberbank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Bradesco": { - "tags": { - "name": "Bradesco", - "amenity": "bank" - }, - "name": "Bradesco", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Oldenburgische Landesbank": { - "tags": { - "name": "Oldenburgische Landesbank", - "amenity": "bank" - }, - "name": "Oldenburgische Landesbank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Scotia Bank": { - "tags": { - "name": "Scotia Bank", - "amenity": "bank" - }, - "name": "Scotia Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Bendigo Bank": { - "tags": { - "name": "Bendigo Bank", - "amenity": "bank" - }, - "name": "Bendigo Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Argenta": { - "tags": { - "name": "Argenta", - "amenity": "bank" - }, - "name": "Argenta", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/AXA": { - "tags": { - "name": "AXA", - "amenity": "bank" - }, - "name": "AXA", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Axis Bank": { - "tags": { - "name": "Axis Bank", - "amenity": "bank" - }, - "name": "Axis Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Banco Nación": { - "tags": { - "name": "Banco Nación", - "amenity": "bank" - }, - "name": "Banco Nación", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/GE Money Bank": { - "tags": { - "name": "GE Money Bank", - "amenity": "bank" - }, - "name": "GE Money Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Альфа-Банк": { - "tags": { - "name": "Альфа-Банк", - "amenity": "bank" - }, - "name": "Альфа-Банк", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Белагропромбанк": { - "tags": { - "name": "Белагропромбанк", - "amenity": "bank" - }, - "name": "Белагропромбанк", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Caja Círculo": { - "tags": { - "name": "Caja Círculo", - "amenity": "bank" - }, - "name": "Caja Círculo", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Eurobank": { - "tags": { - "name": "Eurobank", - "amenity": "bank" - }, - "name": "Eurobank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Banca Intesa": { - "tags": { - "name": "Banca Intesa", - "amenity": "bank" - }, - "name": "Banca Intesa", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Canara Bank": { - "tags": { - "name": "Canara Bank", - "amenity": "bank" - }, - "name": "Canara Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Cajamar": { - "tags": { - "name": "Cajamar", - "amenity": "bank" - }, - "name": "Cajamar", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Banamex": { - "tags": { - "name": "Banamex", - "amenity": "bank" - }, - "name": "Banamex", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Crédit Mutuel de Bretagne": { - "tags": { - "name": "Crédit Mutuel de Bretagne", - "amenity": "bank" - }, - "name": "Crédit Mutuel de Bretagne", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Davivienda": { - "tags": { - "name": "Davivienda", - "amenity": "bank" - }, - "name": "Davivienda", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Bank Spółdzielczy": { - "tags": { - "name": "Bank Spółdzielczy", - "amenity": "bank" - }, - "name": "Bank Spółdzielczy", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Credit Agricole": { - "tags": { - "name": "Credit Agricole", - "amenity": "bank" - }, - "name": "Credit Agricole", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Bankinter": { - "tags": { - "name": "Bankinter", - "amenity": "bank" - }, - "name": "Bankinter", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Banque Nationale": { - "tags": { - "name": "Banque Nationale", - "amenity": "bank" - }, - "name": "Banque Nationale", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Bank of the West": { - "tags": { - "name": "Bank of the West", - "amenity": "bank" - }, - "name": "Bank of the West", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Key Bank": { - "tags": { - "name": "Key Bank", - "amenity": "bank" - }, - "name": "Key Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Western Union": { - "tags": { - "name": "Western Union", - "amenity": "bank" - }, - "name": "Western Union", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Citizens Bank": { - "tags": { - "name": "Citizens Bank", - "amenity": "bank" - }, - "name": "Citizens Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/ПриватБанк": { - "tags": { - "name": "ПриватБанк", - "amenity": "bank" - }, - "name": "ПриватБанк", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Security Bank": { - "tags": { - "name": "Security Bank", - "amenity": "bank" - }, - "name": "Security Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Ecobank": { - "tags": { - "name": "Ecobank", - "amenity": "bank" - }, - "name": "Ecobank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Millenium Bank": { - "tags": { - "name": "Millenium Bank", - "amenity": "bank" - }, - "name": "Millenium Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Bankia": { - "tags": { - "name": "Bankia", - "amenity": "bank" - }, - "name": "Bankia", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/三菱東京UFJ銀行": { - "tags": { - "name": "三菱東京UFJ銀行", - "amenity": "bank" - }, - "name": "三菱東京UFJ銀行", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Caixa": { - "tags": { - "name": "Caixa", - "amenity": "bank" - }, - "name": "Caixa", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Banco de Costa Rica": { - "tags": { - "name": "Banco de Costa Rica", - "amenity": "bank" - }, - "name": "Banco de Costa Rica", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/SunTrust Bank": { - "tags": { - "name": "SunTrust Bank", - "amenity": "bank" - }, - "name": "SunTrust Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Itaú": { - "tags": { - "name": "Itaú", - "amenity": "bank" - }, - "name": "Itaú", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/PBZ": { - "tags": { - "name": "PBZ", - "amenity": "bank" - }, - "name": "PBZ", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Bancolombia": { - "tags": { - "name": "Bancolombia", - "amenity": "bank" - }, - "name": "Bancolombia", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Райффайзен Банк Аваль": { - "tags": { - "name": "Райффайзен Банк Аваль", - "amenity": "bank" - }, - "name": "Райффайзен Банк Аваль", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Bancomer": { - "tags": { - "name": "Bancomer", - "amenity": "bank" - }, - "name": "Bancomer", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Banorte": { - "tags": { - "name": "Banorte", - "amenity": "bank" - }, - "name": "Banorte", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Alior Bank": { - "tags": { - "name": "Alior Bank", - "amenity": "bank" - }, - "name": "Alior Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/BOC": { - "tags": { - "name": "BOC", - "amenity": "bank" - }, - "name": "BOC", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Банк Москвы": { - "tags": { - "name": "Банк Москвы", - "amenity": "bank" - }, - "name": "Банк Москвы", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/ВТБ": { - "tags": { - "name": "ВТБ", - "amenity": "bank" - }, - "name": "ВТБ", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Caja Duero": { - "tags": { - "name": "Caja Duero", - "amenity": "bank" - }, - "name": "Caja Duero", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Regions Bank": { - "tags": { - "name": "Regions Bank", - "amenity": "bank" - }, - "name": "Regions Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Росбанк": { - "tags": { - "name": "Росбанк", - "amenity": "bank" - }, - "name": "Росбанк", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Banco Estado": { - "tags": { - "name": "Banco Estado", - "amenity": "bank" - }, - "name": "Banco Estado", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/BCI": { - "tags": { - "name": "BCI", - "amenity": "bank" - }, - "name": "BCI", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/SunTrust": { - "tags": { - "name": "SunTrust", - "amenity": "bank" - }, - "name": "SunTrust", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/PNC Bank": { - "tags": { - "name": "PNC Bank", - "amenity": "bank" - }, - "name": "PNC Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/신한은행": { - "tags": { - "name": "신한은행", - "name:en": "Sinhan Bank", - "amenity": "bank" - }, - "name": "신한은행", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/우리은행": { - "tags": { - "name": "우리은행", - "name:en": "Uri Bank", - "amenity": "bank" - }, - "name": "우리은행", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/국민은행": { - "tags": { - "name": "국민은행", - "name:en": "Gungmin Bank", - "amenity": "bank" - }, - "name": "국민은행", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/중소기업은행": { - "tags": { - "name": "중소기업은행", - "name:en": "Industrial Bank of Korea", - "amenity": "bank" - }, - "name": "중소기업은행", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/광주은행": { - "tags": { - "name": "광주은행", - "name:en": "Gwangju Bank", - "amenity": "bank" - }, - "name": "광주은행", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Газпромбанк": { - "tags": { - "name": "Газпромбанк", - "amenity": "bank" - }, - "name": "Газпромбанк", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/M&T Bank": { - "tags": { - "name": "M&T Bank", - "amenity": "bank" - }, - "name": "M&T Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Caja de Burgos": { - "tags": { - "name": "Caja de Burgos", - "amenity": "bank" - }, - "name": "Caja de Burgos", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Santander Totta": { - "tags": { - "name": "Santander Totta", - "amenity": "bank" - }, - "name": "Santander Totta", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/УкрСиббанк": { - "tags": { - "name": "УкрСиббанк", - "amenity": "bank" - }, - "name": "УкрСиббанк", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Ощадбанк": { - "tags": { - "name": "Ощадбанк", - "amenity": "bank" - }, - "name": "Ощадбанк", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Уралсиб": { - "tags": { - "name": "Уралсиб", - "amenity": "bank" - }, - "name": "Уралсиб", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/りそな銀行": { - "tags": { - "name": "りそな銀行", - "name:en": "Mizuho Bank", - "amenity": "bank" - }, - "name": "りそな銀行", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Cajero Automatico Bancared": { - "tags": { - "name": "Cajero Automatico Bancared", - "amenity": "bank" - }, - "name": "Cajero Automatico Bancared", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Промсвязьбанк": { - "tags": { - "name": "Промсвязьбанк", - "amenity": "bank" - }, - "name": "Промсвязьбанк", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/三井住友銀行": { - "tags": { - "name": "三井住友銀行", - "amenity": "bank" - }, - "name": "三井住友銀行", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Banco Provincia": { - "tags": { - "name": "Banco Provincia", - "amenity": "bank" - }, - "name": "Banco Provincia", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/BB&T": { - "tags": { - "name": "BB&T", - "amenity": "bank" - }, - "name": "BB&T", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Возрождение": { - "tags": { - "name": "Возрождение", - "amenity": "bank" - }, - "name": "Возрождение", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Capital One": { - "tags": { - "name": "Capital One", - "amenity": "bank" - }, - "name": "Capital One", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Bank Mandiri": { - "tags": { - "name": "Bank Mandiri", - "amenity": "bank" - }, - "name": "Bank Mandiri", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Banco de la Nación": { - "tags": { - "name": "Banco de la Nación", - "amenity": "bank" - }, - "name": "Banco de la Nación", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Banco G&T Continental": { - "tags": { - "name": "Banco G&T Continental", - "amenity": "bank" - }, - "name": "Banco G&T Continental", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Peoples Bank": { - "tags": { - "name": "Peoples Bank", - "amenity": "bank" - }, - "name": "Peoples Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Совкомбанк": { - "tags": { - "name": "Совкомбанк", - "amenity": "bank" - }, - "name": "Совкомбанк", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Provincial": { - "tags": { - "name": "Provincial", - "amenity": "bank" - }, - "name": "Provincial", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Banco de Desarrollo Banrural": { - "tags": { - "name": "Banco de Desarrollo Banrural", - "amenity": "bank" - }, - "name": "Banco de Desarrollo Banrural", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Banco Bradesco": { - "tags": { - "name": "Banco Bradesco", - "amenity": "bank" - }, - "name": "Banco Bradesco", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Bicentenario": { - "tags": { - "name": "Bicentenario", - "amenity": "bank" - }, - "name": "Bicentenario", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/ლიბერთი ბანკი": { - "tags": { - "name": "ლიბერთი ბანკი", - "name:en": "Liberty Bank", - "amenity": "bank" - }, - "name": "ლიბერთი ბანკი", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Banesco": { - "tags": { - "name": "Banesco", - "amenity": "bank" - }, - "name": "Banesco", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Mercantil": { - "tags": { - "name": "Mercantil", - "amenity": "bank" - }, - "name": "Mercantil", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/Del Tesoro": { - "tags": { - "name": "Del Tesoro", - "amenity": "bank" - }, - "name": "Del Tesoro", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/하나은행": { - "tags": { - "name": "하나은행", - "amenity": "bank" - }, - "name": "하나은행", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/CityCommerce Bank": { - "tags": { - "name": "CityCommerce Bank", - "amenity": "bank" - }, - "name": "CityCommerce Bank", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/bank/De Venezuela": { - "tags": { - "name": "De Venezuela", - "amenity": "bank" - }, - "name": "De Venezuela", - "icon": "bank", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "atm", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/car_rental/Europcar": { - "tags": { - "name": "Europcar", - "amenity": "car_rental" - }, - "name": "Europcar", - "icon": "car", - "geometry": [ - "point", - "area" - ], - "fields": [ - "operator" - ], - "suggestion": true - }, - "amenity/car_rental/Budget": { - "tags": { - "name": "Budget", - "amenity": "car_rental" - }, - "name": "Budget", - "icon": "car", - "geometry": [ - "point", - "area" - ], - "fields": [ - "operator" - ], - "suggestion": true - }, - "amenity/car_rental/Sixt": { - "tags": { - "name": "Sixt", - "amenity": "car_rental" - }, - "name": "Sixt", - "icon": "car", - "geometry": [ - "point", - "area" - ], - "fields": [ - "operator" - ], - "suggestion": true - }, - "amenity/car_rental/Avis": { - "tags": { - "name": "Avis", - "amenity": "car_rental" - }, - "name": "Avis", - "icon": "car", - "geometry": [ - "point", - "area" - ], - "fields": [ - "operator" - ], - "suggestion": true - }, - "amenity/car_rental/Hertz": { - "tags": { - "name": "Hertz", - "amenity": "car_rental" - }, - "name": "Hertz", - "icon": "car", - "geometry": [ - "point", - "area" - ], - "fields": [ - "operator" - ], - "suggestion": true - }, - "amenity/car_rental/Enterprise": { - "tags": { - "name": "Enterprise", - "amenity": "car_rental" - }, - "name": "Enterprise", - "icon": "car", - "geometry": [ - "point", - "area" - ], - "fields": [ - "operator" - ], - "suggestion": true - }, - "amenity/car_rental/stadtmobil CarSharing-Station": { - "tags": { - "name": "stadtmobil CarSharing-Station", - "amenity": "car_rental" - }, - "name": "stadtmobil CarSharing-Station", - "icon": "car", - "geometry": [ - "point", - "area" - ], - "fields": [ - "operator" - ], - "suggestion": true - }, - "amenity/pharmacy/Rowlands Pharmacy": { - "tags": { - "name": "Rowlands Pharmacy", - "amenity": "pharmacy" - }, - "name": "Rowlands Pharmacy", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Boots": { - "tags": { - "name": "Boots", - "amenity": "pharmacy" - }, - "name": "Boots", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Marien-Apotheke": { - "tags": { - "name": "Marien-Apotheke", - "amenity": "pharmacy" - }, - "name": "Marien-Apotheke", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Mercury Drug": { - "tags": { - "name": "Mercury Drug", - "amenity": "pharmacy" - }, - "name": "Mercury Drug", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Löwen-Apotheke": { - "tags": { - "name": "Löwen-Apotheke", - "amenity": "pharmacy" - }, - "name": "Löwen-Apotheke", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Superdrug": { - "tags": { - "name": "Superdrug", - "amenity": "pharmacy" - }, - "name": "Superdrug", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Sonnen-Apotheke": { - "tags": { - "name": "Sonnen-Apotheke", - "amenity": "pharmacy" - }, - "name": "Sonnen-Apotheke", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Rathaus-Apotheke": { - "tags": { - "name": "Rathaus-Apotheke", - "amenity": "pharmacy" - }, - "name": "Rathaus-Apotheke", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Engel-Apotheke": { - "tags": { - "name": "Engel-Apotheke", - "amenity": "pharmacy" - }, - "name": "Engel-Apotheke", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Hirsch-Apotheke": { - "tags": { - "name": "Hirsch-Apotheke", - "amenity": "pharmacy" - }, - "name": "Hirsch-Apotheke", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Stern-Apotheke": { - "tags": { - "name": "Stern-Apotheke", - "amenity": "pharmacy" - }, - "name": "Stern-Apotheke", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Lloyds Pharmacy": { - "tags": { - "name": "Lloyds Pharmacy", - "amenity": "pharmacy" - }, - "name": "Lloyds Pharmacy", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Rosen-Apotheke": { - "tags": { - "name": "Rosen-Apotheke", - "amenity": "pharmacy" - }, - "name": "Rosen-Apotheke", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Stadt-Apotheke": { - "tags": { - "name": "Stadt-Apotheke", - "amenity": "pharmacy" - }, - "name": "Stadt-Apotheke", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Markt-Apotheke": { - "tags": { - "name": "Markt-Apotheke", - "amenity": "pharmacy" - }, - "name": "Markt-Apotheke", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Аптека": { - "tags": { - "name": "Аптека", - "amenity": "pharmacy" - }, - "name": "Аптека", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Pharmasave": { - "tags": { - "name": "Pharmasave", - "amenity": "pharmacy" - }, - "name": "Pharmasave", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Brunnen-Apotheke": { - "tags": { - "name": "Brunnen-Apotheke", - "amenity": "pharmacy" - }, - "name": "Brunnen-Apotheke", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Shoppers Drug Mart": { - "tags": { - "name": "Shoppers Drug Mart", - "amenity": "pharmacy" - }, - "name": "Shoppers Drug Mart", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Apotheke am Markt": { - "tags": { - "name": "Apotheke am Markt", - "amenity": "pharmacy" - }, - "name": "Apotheke am Markt", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Alte Apotheke": { - "tags": { - "name": "Alte Apotheke", - "amenity": "pharmacy" - }, - "name": "Alte Apotheke", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Neue Apotheke": { - "tags": { - "name": "Neue Apotheke", - "amenity": "pharmacy" - }, - "name": "Neue Apotheke", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Gintarinė vaistinė": { - "tags": { - "name": "Gintarinė vaistinė", - "amenity": "pharmacy" - }, - "name": "Gintarinė vaistinė", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Rats-Apotheke": { - "tags": { - "name": "Rats-Apotheke", - "amenity": "pharmacy" - }, - "name": "Rats-Apotheke", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Adler Apotheke": { - "tags": { - "name": "Adler Apotheke", - "amenity": "pharmacy" - }, - "name": "Adler Apotheke", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Pharmacie Centrale": { - "tags": { - "name": "Pharmacie Centrale", - "amenity": "pharmacy" - }, - "name": "Pharmacie Centrale", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Walgreens": { - "tags": { - "name": "Walgreens", - "amenity": "pharmacy" - }, - "name": "Walgreens", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Rite Aid": { - "tags": { - "name": "Rite Aid", - "amenity": "pharmacy" - }, - "name": "Rite Aid", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Apotheke": { - "tags": { - "name": "Apotheke", - "amenity": "pharmacy" - }, - "name": "Apotheke", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Linden-Apotheke": { - "tags": { - "name": "Linden-Apotheke", - "amenity": "pharmacy" - }, - "name": "Linden-Apotheke", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Bahnhof-Apotheke": { - "tags": { - "name": "Bahnhof-Apotheke", - "amenity": "pharmacy" - }, - "name": "Bahnhof-Apotheke", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Burg-Apotheke": { - "tags": { - "name": "Burg-Apotheke", - "amenity": "pharmacy" - }, - "name": "Burg-Apotheke", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Jean Coutu": { - "tags": { - "name": "Jean Coutu", - "amenity": "pharmacy" - }, - "name": "Jean Coutu", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Pharmaprix": { - "tags": { - "name": "Pharmaprix", - "amenity": "pharmacy" - }, - "name": "Pharmaprix", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Farmacias Ahumada": { - "tags": { - "name": "Farmacias Ahumada", - "amenity": "pharmacy" - }, - "name": "Farmacias Ahumada", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Farmacia Comunale": { - "tags": { - "name": "Farmacia Comunale", - "amenity": "pharmacy" - }, - "name": "Farmacia Comunale", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Farmacias Cruz Verde": { - "tags": { - "name": "Farmacias Cruz Verde", - "amenity": "pharmacy" - }, - "name": "Farmacias Cruz Verde", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Cruz Verde": { - "tags": { - "name": "Cruz Verde", - "amenity": "pharmacy" - }, - "name": "Cruz Verde", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Hubertus Apotheke": { - "tags": { - "name": "Hubertus Apotheke", - "amenity": "pharmacy" - }, - "name": "Hubertus Apotheke", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/CVS": { - "tags": { - "name": "CVS", - "amenity": "pharmacy" - }, - "name": "CVS", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Farmacias SalcoBrand": { - "tags": { - "name": "Farmacias SalcoBrand", - "amenity": "pharmacy" - }, - "name": "Farmacias SalcoBrand", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Фармация": { - "tags": { - "name": "Фармация", - "amenity": "pharmacy" - }, - "name": "Фармация", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Bären-Apotheke": { - "tags": { - "name": "Bären-Apotheke", - "amenity": "pharmacy" - }, - "name": "Bären-Apotheke", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Clicks": { - "tags": { - "name": "Clicks", - "amenity": "pharmacy" - }, - "name": "Clicks", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/セイジョー": { - "tags": { - "name": "セイジョー", - "amenity": "pharmacy" - }, - "name": "セイジョー", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/マツモトキヨシ": { - "tags": { - "name": "マツモトキヨシ", - "amenity": "pharmacy" - }, - "name": "マツモトキヨシ", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Вита": { - "tags": { - "name": "Вита", - "amenity": "pharmacy" - }, - "name": "Вита", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Радуга": { - "tags": { - "name": "Радуга", - "amenity": "pharmacy" - }, - "name": "Радуга", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/サンドラッグ": { - "tags": { - "name": "サンドラッグ", - "amenity": "pharmacy" - }, - "name": "サンドラッグ", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Apteka": { - "tags": { - "name": "Apteka", - "amenity": "pharmacy" - }, - "name": "Apteka", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Первая помощь": { - "tags": { - "name": "Первая помощь", - "amenity": "pharmacy" - }, - "name": "Первая помощь", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Ригла": { - "tags": { - "name": "Ригла", - "amenity": "pharmacy" - }, - "name": "Ригла", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Имплозия": { - "tags": { - "name": "Имплозия", - "amenity": "pharmacy" - }, - "name": "Имплозия", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Kinney Drugs": { - "tags": { - "name": "Kinney Drugs", - "amenity": "pharmacy" - }, - "name": "Kinney Drugs", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Классика": { - "tags": { - "name": "Классика", - "amenity": "pharmacy" - }, - "name": "Классика", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Ljekarna": { - "tags": { - "name": "Ljekarna", - "amenity": "pharmacy" - }, - "name": "Ljekarna", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/SalcoBrand": { - "tags": { - "name": "SalcoBrand", - "amenity": "pharmacy" - }, - "name": "SalcoBrand", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Аптека 36,6": { - "tags": { - "name": "Аптека 36,6", - "amenity": "pharmacy" - }, - "name": "Аптека 36,6", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Фармакор": { - "tags": { - "name": "Фармакор", - "amenity": "pharmacy" - }, - "name": "Фармакор", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/スギ薬局": { - "tags": { - "name": "スギ薬局", - "amenity": "pharmacy" - }, - "name": "スギ薬局", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Аптечный пункт": { - "tags": { - "name": "Аптечный пункт", - "amenity": "pharmacy" - }, - "name": "Аптечный пункт", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Невис": { - "tags": { - "name": "Невис", - "amenity": "pharmacy" - }, - "name": "Невис", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/トモズ (Tomod's)": { - "tags": { - "name": "トモズ (Tomod's)", - "amenity": "pharmacy" - }, - "name": "トモズ (Tomod's)", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Eurovaistinė": { - "tags": { - "name": "Eurovaistinė", - "amenity": "pharmacy" - }, - "name": "Eurovaistinė", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Farmacity": { - "tags": { - "name": "Farmacity", - "amenity": "pharmacy" - }, - "name": "Farmacity", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/аптека": { - "tags": { - "name": "аптека", - "amenity": "pharmacy" - }, - "name": "аптека", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/The Generics Pharmacy": { - "tags": { - "name": "The Generics Pharmacy", - "amenity": "pharmacy" - }, - "name": "The Generics Pharmacy", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Farmatodo": { - "tags": { - "name": "Farmatodo", - "amenity": "pharmacy" - }, - "name": "Farmatodo", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Фармленд": { - "tags": { - "name": "Фармленд", - "amenity": "pharmacy" - }, - "name": "Фармленд", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/ドラッグてらしま (Drug Terashima)": { - "tags": { - "name": "ドラッグてらしま (Drug Terashima)", - "amenity": "pharmacy" - }, - "name": "ドラッグてらしま (Drug Terashima)", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/ავერსი (Aversi)": { - "tags": { - "name": "ავერსი (Aversi)", - "amenity": "pharmacy" - }, - "name": "ავერსი (Aversi)", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/pharmacy/Farmahorro": { - "tags": { - "name": "Farmahorro", - "amenity": "pharmacy" - }, - "name": "Farmahorro", - "icon": "pharmacy", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/cafe/Starbucks": { - "tags": { - "name": "Starbucks", - "cuisine": "coffee_shop", - "amenity": "cafe" - }, - "name": "Starbucks", - "icon": "cafe", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "internet_access", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/cafe/Cafeteria": { - "tags": { - "name": "Cafeteria", - "amenity": "cafe" - }, - "name": "Cafeteria", - "icon": "cafe", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "internet_access", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/cafe/Costa": { - "tags": { - "name": "Costa", - "amenity": "cafe" - }, - "name": "Costa", - "icon": "cafe", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "internet_access", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/cafe/Caffè Nero": { - "tags": { - "name": "Caffè Nero", - "amenity": "cafe" - }, - "name": "Caffè Nero", - "icon": "cafe", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "internet_access", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/cafe/Кафе": { - "tags": { - "name": "Кафе", - "amenity": "cafe" - }, - "name": "Кафе", - "icon": "cafe", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "internet_access", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/cafe/Café Central": { - "tags": { - "name": "Café Central", - "amenity": "cafe" - }, - "name": "Café Central", - "icon": "cafe", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "internet_access", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/cafe/Second Cup": { - "tags": { - "name": "Second Cup", - "amenity": "cafe" - }, - "name": "Second Cup", - "icon": "cafe", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "internet_access", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/cafe/Eisdiele": { - "tags": { - "name": "Eisdiele", - "amenity": "cafe" - }, - "name": "Eisdiele", - "icon": "cafe", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "internet_access", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/cafe/Dunkin Donuts": { - "tags": { - "name": "Dunkin Donuts", - "cuisine": "donut", - "amenity": "cafe" - }, - "name": "Dunkin Donuts", - "icon": "cafe", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "internet_access", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/cafe/Segafredo": { - "tags": { - "name": "Segafredo", - "amenity": "cafe" - }, - "name": "Segafredo", - "icon": "cafe", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "internet_access", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/cafe/Coffee Time": { - "tags": { - "name": "Coffee Time", - "amenity": "cafe" - }, - "name": "Coffee Time", - "icon": "cafe", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "internet_access", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/cafe/Cafe Coffee Day": { - "tags": { - "name": "Cafe Coffee Day", - "amenity": "cafe" - }, - "name": "Cafe Coffee Day", - "icon": "cafe", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "internet_access", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/cafe/Eiscafe Venezia": { - "tags": { - "name": "Eiscafe Venezia", - "amenity": "cafe" - }, - "name": "Eiscafe Venezia", - "icon": "cafe", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "internet_access", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/cafe/スターバックス": { - "tags": { - "name": "スターバックス", - "name:en": "Starbucks", - "amenity": "cafe" - }, - "name": "スターバックス", - "icon": "cafe", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "internet_access", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/cafe/Шоколадница": { - "tags": { - "name": "Шоколадница", - "amenity": "cafe" - }, - "name": "Шоколадница", - "icon": "cafe", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "internet_access", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/cafe/Pret A Manger": { - "tags": { - "name": "Pret A Manger", - "amenity": "cafe" - }, - "name": "Pret A Manger", - "icon": "cafe", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "internet_access", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/cafe/Столовая": { - "tags": { - "name": "Столовая", - "amenity": "cafe" - }, - "name": "Столовая", - "icon": "cafe", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "internet_access", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/cafe/ドトール": { - "tags": { - "name": "ドトール", - "name:en": "DOUTOR", - "amenity": "cafe" - }, - "name": "ドトール", - "icon": "cafe", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "internet_access", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/cafe/Tchibo": { - "tags": { - "name": "Tchibo", - "amenity": "cafe" - }, - "name": "Tchibo", - "icon": "cafe", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "internet_access", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/cafe/Кофе Хауз": { - "tags": { - "name": "Кофе Хауз", - "amenity": "cafe" - }, - "name": "Кофе Хауз", - "icon": "cafe", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "internet_access", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/cafe/Caribou Coffee": { - "tags": { - "name": "Caribou Coffee", - "amenity": "cafe" - }, - "name": "Caribou Coffee", - "icon": "cafe", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "internet_access", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/cafe/Уют": { - "tags": { - "name": "Уют", - "amenity": "cafe" - }, - "name": "Уют", - "icon": "cafe", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "internet_access", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/cafe/Шашлычная": { - "tags": { - "name": "Шашлычная", - "amenity": "cafe" - }, - "name": "Шашлычная", - "icon": "cafe", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "internet_access", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/cafe/คาเฟ่ อเมซอน": { - "tags": { - "name": "คาเฟ่ อเมซอน", - "amenity": "cafe" - }, - "name": "คาเฟ่ อเมซอน", - "icon": "cafe", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "internet_access", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/cafe/Traveler's Coffee": { - "tags": { - "name": "Traveler's Coffee", - "amenity": "cafe" - }, - "name": "Traveler's Coffee", - "icon": "cafe", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "internet_access", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/cafe/カフェ・ド・クリエ": { - "tags": { - "name": "カフェ・ド・クリエ", - "name:en": "Cafe de CRIE", - "amenity": "cafe" - }, - "name": "カフェ・ド・クリエ", - "icon": "cafe", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "internet_access", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "amenity/cafe/Cafe Amazon": { - "tags": { - "name": "Cafe Amazon", - "amenity": "cafe" - }, - "name": "Cafe Amazon", - "icon": "cafe", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "cuisine", - "internet_access", - "building_area", - "address", - "opening_hours" - ], - "suggestion": true - }, - "shop/supermarket/Budgens": { - "tags": { - "name": "Budgens", - "shop": "supermarket" - }, - "name": "Budgens", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Interspar": { - "tags": { - "name": "Interspar", - "shop": "supermarket" - }, - "name": "Interspar", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Merkur": { - "tags": { - "name": "Merkur", - "shop": "supermarket" - }, - "name": "Merkur", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Lidl": { - "tags": { - "name": "Lidl", - "shop": "supermarket" - }, - "name": "Lidl", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/EDEKA": { - "tags": { - "name": "EDEKA", - "shop": "supermarket" - }, - "name": "EDEKA", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Coles": { - "tags": { - "name": "Coles", - "shop": "supermarket" - }, - "name": "Coles", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Iceland": { - "tags": { - "name": "Iceland", - "shop": "supermarket" - }, - "name": "Iceland", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Woolworths": { - "tags": { - "name": "Woolworths", - "shop": "supermarket" - }, - "name": "Woolworths", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Zielpunkt": { - "tags": { - "name": "Zielpunkt", - "shop": "supermarket" - }, - "name": "Zielpunkt", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Nahkauf": { - "tags": { - "name": "Nahkauf", - "shop": "supermarket" - }, - "name": "Nahkauf", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Billa": { - "tags": { - "name": "Billa", - "shop": "supermarket" - }, - "name": "Billa", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Kaufland": { - "tags": { - "name": "Kaufland", - "shop": "supermarket" - }, - "name": "Kaufland", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Plus": { - "tags": { - "name": "Plus", - "shop": "supermarket" - }, - "name": "Plus", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/ALDI": { - "tags": { - "name": "ALDI", - "shop": "supermarket" - }, - "name": "ALDI", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Checkers": { - "tags": { - "name": "Checkers", - "shop": "supermarket" - }, - "name": "Checkers", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Tesco Metro": { - "tags": { - "name": "Tesco Metro", - "shop": "supermarket" - }, - "name": "Tesco Metro", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/NP": { - "tags": { - "name": "NP", - "shop": "supermarket" - }, - "name": "NP", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Penny": { - "tags": { - "name": "Penny", - "shop": "supermarket" - }, - "name": "Penny", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Norma": { - "tags": { - "name": "Norma", - "shop": "supermarket" - }, - "name": "Norma", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Asda": { - "tags": { - "name": "Asda", - "shop": "supermarket" - }, - "name": "Asda", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Netto": { - "tags": { - "name": "Netto", - "shop": "supermarket" - }, - "name": "Netto", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/REWE": { - "tags": { - "name": "REWE", - "shop": "supermarket" - }, - "name": "REWE", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Rewe": { - "tags": { - "name": "Rewe", - "shop": "supermarket" - }, - "name": "Rewe", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Aldi Süd": { - "tags": { - "name": "Aldi Süd", - "shop": "supermarket" - }, - "name": "Aldi Süd", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Real": { - "tags": { - "name": "Real", - "shop": "supermarket" - }, - "name": "Real", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Tesco Express": { - "tags": { - "name": "Tesco Express", - "shop": "supermarket" - }, - "name": "Tesco Express", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/King Soopers": { - "tags": { - "name": "King Soopers", - "shop": "supermarket" - }, - "name": "King Soopers", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Kiwi": { - "tags": { - "name": "Kiwi", - "shop": "supermarket" - }, - "name": "Kiwi", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Edeka": { - "tags": { - "name": "Edeka", - "shop": "supermarket" - }, - "name": "Edeka", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Pick n Pay": { - "tags": { - "name": "Pick n Pay", - "shop": "supermarket" - }, - "name": "Pick n Pay", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/ICA": { - "tags": { - "name": "ICA", - "shop": "supermarket" - }, - "name": "ICA", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Tengelmann": { - "tags": { - "name": "Tengelmann", - "shop": "supermarket" - }, - "name": "Tengelmann", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Waitrose": { - "tags": { - "name": "Waitrose", - "shop": "supermarket" - }, - "name": "Waitrose", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Spar": { - "tags": { - "name": "Spar", - "shop": "supermarket" - }, - "name": "Spar", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Hofer": { - "tags": { - "name": "Hofer", - "shop": "supermarket" - }, - "name": "Hofer", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/M-Preis": { - "tags": { - "name": "M-Preis", - "shop": "supermarket" - }, - "name": "M-Preis", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/LIDL": { - "tags": { - "name": "LIDL", - "shop": "supermarket" - }, - "name": "LIDL", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/tegut": { - "tags": { - "name": "tegut", - "shop": "supermarket" - }, - "name": "tegut", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Sainsbury's Local": { - "tags": { - "name": "Sainsbury's Local", - "shop": "supermarket" - }, - "name": "Sainsbury's Local", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/E-Center": { - "tags": { - "name": "E-Center", - "shop": "supermarket" - }, - "name": "E-Center", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Aldi Nord": { - "tags": { - "name": "Aldi Nord", - "shop": "supermarket" - }, - "name": "Aldi Nord", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/nahkauf": { - "tags": { - "name": "nahkauf", - "shop": "supermarket" - }, - "name": "nahkauf", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Meijer": { - "tags": { - "name": "Meijer", - "shop": "supermarket" - }, - "name": "Meijer", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Safeway": { - "tags": { - "name": "Safeway", - "shop": "supermarket" - }, - "name": "Safeway", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Costco": { - "tags": { - "name": "Costco", - "shop": "supermarket" - }, - "name": "Costco", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Albert": { - "tags": { - "name": "Albert", - "shop": "supermarket" - }, - "name": "Albert", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Jumbo": { - "tags": { - "name": "Jumbo", - "shop": "supermarket" - }, - "name": "Jumbo", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Shoprite": { - "tags": { - "name": "Shoprite", - "shop": "supermarket" - }, - "name": "Shoprite", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/MPreis": { - "tags": { - "name": "MPreis", - "shop": "supermarket" - }, - "name": "MPreis", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Penny Market": { - "tags": { - "name": "Penny Market", - "shop": "supermarket" - }, - "name": "Penny Market", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Tesco Extra": { - "tags": { - "name": "Tesco Extra", - "shop": "supermarket" - }, - "name": "Tesco Extra", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Albert Heijn": { - "tags": { - "name": "Albert Heijn", - "shop": "supermarket" - }, - "name": "Albert Heijn", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/IGA": { - "tags": { - "name": "IGA", - "shop": "supermarket" - }, - "name": "IGA", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Metro": { - "tags": { - "name": "Metro", - "shop": "supermarket" - }, - "name": "Metro", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Neukauf": { - "tags": { - "name": "Neukauf", - "shop": "supermarket" - }, - "name": "Neukauf", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Migros": { - "tags": { - "name": "Migros", - "shop": "supermarket" - }, - "name": "Migros", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Marktkauf": { - "tags": { - "name": "Marktkauf", - "shop": "supermarket" - }, - "name": "Marktkauf", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Delikatesy Centrum": { - "tags": { - "name": "Delikatesy Centrum", - "shop": "supermarket" - }, - "name": "Delikatesy Centrum", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/C1000": { - "tags": { - "name": "C1000", - "shop": "supermarket" - }, - "name": "C1000", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Hoogvliet": { - "tags": { - "name": "Hoogvliet", - "shop": "supermarket" - }, - "name": "Hoogvliet", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/COOP": { - "tags": { - "name": "COOP", - "shop": "supermarket" - }, - "name": "COOP", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Food Basics": { - "tags": { - "name": "Food Basics", - "shop": "supermarket" - }, - "name": "Food Basics", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Casino": { - "tags": { - "name": "Casino", - "shop": "supermarket" - }, - "name": "Casino", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Penny Markt": { - "tags": { - "name": "Penny Markt", - "shop": "supermarket" - }, - "name": "Penny Markt", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Giant": { - "tags": { - "name": "Giant", - "shop": "supermarket" - }, - "name": "Giant", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/COOP Jednota": { - "tags": { - "name": "COOP Jednota", - "shop": "supermarket" - }, - "name": "COOP Jednota", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Rema 1000": { - "tags": { - "name": "Rema 1000", - "shop": "supermarket" - }, - "name": "Rema 1000", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Kaufpark": { - "tags": { - "name": "Kaufpark", - "shop": "supermarket" - }, - "name": "Kaufpark", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/ALDI SÜD": { - "tags": { - "name": "ALDI SÜD", - "shop": "supermarket" - }, - "name": "ALDI SÜD", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Simply Market": { - "tags": { - "name": "Simply Market", - "shop": "supermarket" - }, - "name": "Simply Market", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Konzum": { - "tags": { - "name": "Konzum", - "shop": "supermarket" - }, - "name": "Konzum", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Carrefour Express": { - "tags": { - "name": "Carrefour Express", - "shop": "supermarket" - }, - "name": "Carrefour Express", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Eurospar": { - "tags": { - "name": "Eurospar", - "shop": "supermarket" - }, - "name": "Eurospar", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Mercator": { - "tags": { - "name": "Mercator", - "shop": "supermarket" - }, - "name": "Mercator", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Mercadona": { - "tags": { - "name": "Mercadona", - "shop": "supermarket" - }, - "name": "Mercadona", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Famila": { - "tags": { - "name": "Famila", - "shop": "supermarket" - }, - "name": "Famila", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Hemköp": { - "tags": { - "name": "Hemköp", - "shop": "supermarket" - }, - "name": "Hemköp", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/real,-": { - "tags": { - "name": "real,-", - "shop": "supermarket" - }, - "name": "real,-", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Markant": { - "tags": { - "name": "Markant", - "shop": "supermarket" - }, - "name": "Markant", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Volg": { - "tags": { - "name": "Volg", - "shop": "supermarket" - }, - "name": "Volg", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Leader Price": { - "tags": { - "name": "Leader Price", - "shop": "supermarket" - }, - "name": "Leader Price", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Treff 3000": { - "tags": { - "name": "Treff 3000", - "shop": "supermarket" - }, - "name": "Treff 3000", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/SuperBrugsen": { - "tags": { - "name": "SuperBrugsen", - "shop": "supermarket" - }, - "name": "SuperBrugsen", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Kaiser's": { - "tags": { - "name": "Kaiser's", - "shop": "supermarket" - }, - "name": "Kaiser's", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/K+K": { - "tags": { - "name": "K+K", - "shop": "supermarket" - }, - "name": "K+K", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Unimarkt": { - "tags": { - "name": "Unimarkt", - "shop": "supermarket" - }, - "name": "Unimarkt", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Sobeys": { - "tags": { - "name": "Sobeys", - "shop": "supermarket" - }, - "name": "Sobeys", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/S-Market": { - "tags": { - "name": "S-Market", - "shop": "supermarket" - }, - "name": "S-Market", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Combi": { - "tags": { - "name": "Combi", - "shop": "supermarket" - }, - "name": "Combi", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Denner": { - "tags": { - "name": "Denner", - "shop": "supermarket" - }, - "name": "Denner", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Konsum": { - "tags": { - "name": "Konsum", - "shop": "supermarket" - }, - "name": "Konsum", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Franprix": { - "tags": { - "name": "Franprix", - "shop": "supermarket" - }, - "name": "Franprix", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Monoprix": { - "tags": { - "name": "Monoprix", - "shop": "supermarket" - }, - "name": "Monoprix", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Diska": { - "tags": { - "name": "Diska", - "shop": "supermarket" - }, - "name": "Diska", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/PENNY": { - "tags": { - "name": "PENNY", - "shop": "supermarket" - }, - "name": "PENNY", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Dia": { - "tags": { - "name": "Dia", - "shop": "supermarket" - }, - "name": "Dia", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Giant Eagle": { - "tags": { - "name": "Giant Eagle", - "shop": "supermarket" - }, - "name": "Giant Eagle", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/NORMA": { - "tags": { - "name": "NORMA", - "shop": "supermarket" - }, - "name": "NORMA", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/AD Delhaize": { - "tags": { - "name": "AD Delhaize", - "shop": "supermarket" - }, - "name": "AD Delhaize", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Consum": { - "tags": { - "name": "Consum", - "shop": "supermarket" - }, - "name": "Consum", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Carrefour Market": { - "tags": { - "name": "Carrefour Market", - "shop": "supermarket" - }, - "name": "Carrefour Market", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Carrefour City": { - "tags": { - "name": "Carrefour City", - "shop": "supermarket" - }, - "name": "Carrefour City", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Pam": { - "tags": { - "name": "Pam", - "shop": "supermarket" - }, - "name": "Pam", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Despar": { - "tags": { - "name": "Despar", - "shop": "supermarket" - }, - "name": "Despar", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Eroski": { - "tags": { - "name": "Eroski", - "shop": "supermarket" - }, - "name": "Eroski", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Costcutter": { - "tags": { - "name": "Costcutter", - "shop": "supermarket" - }, - "name": "Costcutter", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Maxi": { - "tags": { - "name": "Maxi", - "shop": "supermarket" - }, - "name": "Maxi", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Colruyt": { - "tags": { - "name": "Colruyt", - "shop": "supermarket" - }, - "name": "Colruyt", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/The Co-operative": { - "tags": { - "name": "The Co-operative", - "shop": "supermarket" - }, - "name": "The Co-operative", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/sky": { - "tags": { - "name": "sky", - "shop": "supermarket" - }, - "name": "sky", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Delhaize": { - "tags": { - "name": "Delhaize", - "shop": "supermarket" - }, - "name": "Delhaize", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/CBA": { - "tags": { - "name": "CBA", - "shop": "supermarket" - }, - "name": "CBA", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Shopi": { - "tags": { - "name": "Shopi", - "shop": "supermarket" - }, - "name": "Shopi", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Walmart": { - "tags": { - "name": "Walmart", - "shop": "supermarket" - }, - "name": "Walmart", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Kroger": { - "tags": { - "name": "Kroger", - "shop": "supermarket" - }, - "name": "Kroger", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Albertsons": { - "tags": { - "name": "Albertsons", - "shop": "supermarket" - }, - "name": "Albertsons", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Trader Joe's": { - "tags": { - "name": "Trader Joe's", - "shop": "supermarket" - }, - "name": "Trader Joe's", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Feneberg": { - "tags": { - "name": "Feneberg", - "shop": "supermarket" - }, - "name": "Feneberg", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/dm": { - "tags": { - "name": "dm", - "shop": "supermarket" - }, - "name": "dm", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Kvickly": { - "tags": { - "name": "Kvickly", - "shop": "supermarket" - }, - "name": "Kvickly", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Makro": { - "tags": { - "name": "Makro", - "shop": "supermarket" - }, - "name": "Makro", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Nah & Frisch": { - "tags": { - "name": "Nah & Frisch", - "shop": "supermarket" - }, - "name": "Nah & Frisch", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Champion": { - "tags": { - "name": "Champion", - "shop": "supermarket" - }, - "name": "Champion", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Fakta": { - "tags": { - "name": "Fakta", - "shop": "supermarket" - }, - "name": "Fakta", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Магнит": { - "tags": { - "name": "Магнит", - "shop": "supermarket" - }, - "name": "Магнит", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Caprabo": { - "tags": { - "name": "Caprabo", - "shop": "supermarket" - }, - "name": "Caprabo", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Famiglia Cooperativa": { - "tags": { - "name": "Famiglia Cooperativa", - "shop": "supermarket" - }, - "name": "Famiglia Cooperativa", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Народная 7Я семьЯ": { - "tags": { - "name": "Народная 7Я семьЯ", - "shop": "supermarket" - }, - "name": "Народная 7Я семьЯ", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Esselunga": { - "tags": { - "name": "Esselunga", - "shop": "supermarket" - }, - "name": "Esselunga", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Maxima": { - "tags": { - "name": "Maxima", - "shop": "supermarket" - }, - "name": "Maxima", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Petit Casino": { - "tags": { - "name": "Petit Casino", - "shop": "supermarket" - }, - "name": "Petit Casino", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Wasgau": { - "tags": { - "name": "Wasgau", - "shop": "supermarket" - }, - "name": "Wasgau", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Pingo Doce": { - "tags": { - "name": "Pingo Doce", - "shop": "supermarket" - }, - "name": "Pingo Doce", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Match": { - "tags": { - "name": "Match", - "shop": "supermarket" - }, - "name": "Match", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Profi": { - "tags": { - "name": "Profi", - "shop": "supermarket" - }, - "name": "Profi", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Lider": { - "tags": { - "name": "Lider", - "shop": "supermarket" - }, - "name": "Lider", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Unimarc": { - "tags": { - "name": "Unimarc", - "shop": "supermarket" - }, - "name": "Unimarc", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Co-operative Food": { - "tags": { - "name": "Co-operative Food", - "shop": "supermarket" - }, - "name": "Co-operative Food", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Santa Isabel": { - "tags": { - "name": "Santa Isabel", - "shop": "supermarket" - }, - "name": "Santa Isabel", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Седьмой континент": { - "tags": { - "name": "Седьмой континент", - "shop": "supermarket" - }, - "name": "Седьмой континент", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/HIT": { - "tags": { - "name": "HIT", - "shop": "supermarket" - }, - "name": "HIT", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Rimi": { - "tags": { - "name": "Rimi", - "shop": "supermarket" - }, - "name": "Rimi", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Conad": { - "tags": { - "name": "Conad", - "shop": "supermarket" - }, - "name": "Conad", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Фуршет": { - "tags": { - "name": "Фуршет", - "shop": "supermarket" - }, - "name": "Фуршет", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Willys": { - "tags": { - "name": "Willys", - "shop": "supermarket" - }, - "name": "Willys", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Farmfoods": { - "tags": { - "name": "Farmfoods", - "shop": "supermarket" - }, - "name": "Farmfoods", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Фора": { - "tags": { - "name": "Фора", - "shop": "supermarket" - }, - "name": "Фора", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Dunnes Stores": { - "tags": { - "name": "Dunnes Stores", - "shop": "supermarket" - }, - "name": "Dunnes Stores", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Сільпо": { - "tags": { - "name": "Сільпо", - "shop": "supermarket" - }, - "name": "Сільпо", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/マルエツ": { - "tags": { - "name": "マルエツ", - "shop": "supermarket" - }, - "name": "マルエツ", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Piggly Wiggly": { - "tags": { - "name": "Piggly Wiggly", - "shop": "supermarket" - }, - "name": "Piggly Wiggly", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Crai": { - "tags": { - "name": "Crai", - "shop": "supermarket" - }, - "name": "Crai", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Biedronka": { - "tags": { - "name": "Biedronka", - "shop": "supermarket" - }, - "name": "Biedronka", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/El Árbol": { - "tags": { - "name": "El Árbol", - "shop": "supermarket" - }, - "name": "El Árbol", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Centre Commercial E. Leclerc": { - "tags": { - "name": "Centre Commercial E. Leclerc", - "shop": "supermarket" - }, - "name": "Centre Commercial E. Leclerc", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Foodland": { - "tags": { - "name": "Foodland", - "shop": "supermarket" - }, - "name": "Foodland", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Super Brugsen": { - "tags": { - "name": "Super Brugsen", - "shop": "supermarket" - }, - "name": "Super Brugsen", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Дикси": { - "tags": { - "name": "Дикси", - "shop": "supermarket" - }, - "name": "Дикси", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Пятёрочка": { - "tags": { - "name": "Пятёрочка", - "shop": "supermarket" - }, - "name": "Пятёрочка", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Publix": { - "tags": { - "name": "Publix", - "shop": "supermarket" - }, - "name": "Publix", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Whole Foods": { - "tags": { - "name": "Whole Foods", - "shop": "supermarket" - }, - "name": "Whole Foods", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Føtex": { - "tags": { - "name": "Føtex", - "shop": "supermarket" - }, - "name": "Føtex", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/coop": { - "tags": { - "name": "coop", - "shop": "supermarket" - }, - "name": "coop", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Fressnapf": { - "tags": { - "name": "Fressnapf", - "shop": "supermarket" - }, - "name": "Fressnapf", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Coop Konsum": { - "tags": { - "name": "Coop Konsum", - "shop": "supermarket" - }, - "name": "Coop Konsum", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Carrefour Contact": { - "tags": { - "name": "Carrefour Contact", - "shop": "supermarket" - }, - "name": "Carrefour Contact", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/SPAR": { - "tags": { - "name": "SPAR", - "shop": "supermarket" - }, - "name": "SPAR", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/No Frills": { - "tags": { - "name": "No Frills", - "shop": "supermarket" - }, - "name": "No Frills", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/The Co-operative Food": { - "tags": { - "name": "The Co-operative Food", - "shop": "supermarket" - }, - "name": "The Co-operative Food", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Plodine": { - "tags": { - "name": "Plodine", - "shop": "supermarket" - }, - "name": "Plodine", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/ADEG": { - "tags": { - "name": "ADEG", - "shop": "supermarket" - }, - "name": "ADEG", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Minipreço": { - "tags": { - "name": "Minipreço", - "shop": "supermarket" - }, - "name": "Minipreço", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Eurospin": { - "tags": { - "name": "Eurospin", - "shop": "supermarket" - }, - "name": "Eurospin", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Семья": { - "tags": { - "name": "Семья", - "shop": "supermarket" - }, - "name": "Семья", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Евроопт": { - "tags": { - "name": "Евроопт", - "shop": "supermarket" - }, - "name": "Евроопт", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Centra": { - "tags": { - "name": "Centra", - "shop": "supermarket" - }, - "name": "Centra", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Квартал": { - "tags": { - "name": "Квартал", - "shop": "supermarket" - }, - "name": "Квартал", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/New World": { - "tags": { - "name": "New World", - "shop": "supermarket" - }, - "name": "New World", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Countdown": { - "tags": { - "name": "Countdown", - "shop": "supermarket" - }, - "name": "Countdown", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Reliance Fresh": { - "tags": { - "name": "Reliance Fresh", - "shop": "supermarket" - }, - "name": "Reliance Fresh", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Stokrotka": { - "tags": { - "name": "Stokrotka", - "shop": "supermarket" - }, - "name": "Stokrotka", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Coop Jednota": { - "tags": { - "name": "Coop Jednota", - "shop": "supermarket" - }, - "name": "Coop Jednota", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Fred Meyer": { - "tags": { - "name": "Fred Meyer", - "shop": "supermarket" - }, - "name": "Fred Meyer", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Irma": { - "tags": { - "name": "Irma", - "shop": "supermarket" - }, - "name": "Irma", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Continente": { - "tags": { - "name": "Continente", - "shop": "supermarket" - }, - "name": "Continente", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Price Chopper": { - "tags": { - "name": "Price Chopper", - "shop": "supermarket" - }, - "name": "Price Chopper", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Wegmans": { - "tags": { - "name": "Wegmans", - "shop": "supermarket" - }, - "name": "Wegmans", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Game": { - "tags": { - "name": "Game", - "shop": "supermarket" - }, - "name": "Game", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Soriana": { - "tags": { - "name": "Soriana", - "shop": "supermarket" - }, - "name": "Soriana", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Alimerka": { - "tags": { - "name": "Alimerka", - "shop": "supermarket" - }, - "name": "Alimerka", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Piotr i Paweł": { - "tags": { - "name": "Piotr i Paweł", - "shop": "supermarket" - }, - "name": "Piotr i Paweł", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Перекресток": { - "tags": { - "name": "Перекресток", - "shop": "supermarket" - }, - "name": "Перекресток", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Maxima X": { - "tags": { - "name": "Maxima X", - "shop": "supermarket" - }, - "name": "Maxima X", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Карусель": { - "tags": { - "name": "Карусель", - "shop": "supermarket" - }, - "name": "Карусель", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Tesco Lotus": { - "tags": { - "name": "Tesco Lotus", - "shop": "supermarket" - }, - "name": "Tesco Lotus", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Condis": { - "tags": { - "name": "Condis", - "shop": "supermarket" - }, - "name": "Condis", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Sam's Club": { - "tags": { - "name": "Sam's Club", - "shop": "supermarket" - }, - "name": "Sam's Club", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Копейка": { - "tags": { - "name": "Копейка", - "shop": "supermarket" - }, - "name": "Копейка", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Géant Casino": { - "tags": { - "name": "Géant Casino", - "shop": "supermarket" - }, - "name": "Géant Casino", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/ASDA": { - "tags": { - "name": "ASDA", - "shop": "supermarket" - }, - "name": "ASDA", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Intermarche": { - "tags": { - "name": "Intermarche", - "shop": "supermarket" - }, - "name": "Intermarche", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Stop & Shop": { - "tags": { - "name": "Stop & Shop", - "shop": "supermarket" - }, - "name": "Stop & Shop", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Food Lion": { - "tags": { - "name": "Food Lion", - "shop": "supermarket" - }, - "name": "Food Lion", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Harris Teeter": { - "tags": { - "name": "Harris Teeter", - "shop": "supermarket" - }, - "name": "Harris Teeter", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/H-E-B": { - "tags": { - "name": "H-E-B", - "shop": "supermarket" - }, - "name": "H-E-B", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Foodworks": { - "tags": { - "name": "Foodworks", - "shop": "supermarket" - }, - "name": "Foodworks", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Polo Market": { - "tags": { - "name": "Polo Market", - "shop": "supermarket" - }, - "name": "Polo Market", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/西友 (SEIYU)": { - "tags": { - "name": "西友 (SEIYU)", - "shop": "supermarket" - }, - "name": "西友 (SEIYU)", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Полушка": { - "tags": { - "name": "Полушка", - "shop": "supermarket" - }, - "name": "Полушка", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Extra": { - "tags": { - "name": "Extra", - "shop": "supermarket" - }, - "name": "Extra", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Lewiatan": { - "tags": { - "name": "Lewiatan", - "shop": "supermarket" - }, - "name": "Lewiatan", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/АТБ": { - "tags": { - "name": "АТБ", - "shop": "supermarket" - }, - "name": "АТБ", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Społem": { - "tags": { - "name": "Społem", - "shop": "supermarket" - }, - "name": "Społem", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Bodega Aurrera": { - "tags": { - "name": "Bodega Aurrera", - "shop": "supermarket" - }, - "name": "Bodega Aurrera", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Мария-Ра": { - "tags": { - "name": "Мария-Ра", - "shop": "supermarket" - }, - "name": "Мария-Ра", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Магнолия": { - "tags": { - "name": "Магнолия", - "shop": "supermarket" - }, - "name": "Магнолия", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Магазин": { - "tags": { - "name": "Магазин", - "shop": "supermarket" - }, - "name": "Магазин", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Монетка": { - "tags": { - "name": "Монетка", - "shop": "supermarket" - }, - "name": "Монетка", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Hy-Vee": { - "tags": { - "name": "Hy-Vee", - "shop": "supermarket" - }, - "name": "Hy-Vee", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Walmart Supercenter": { - "tags": { - "name": "Walmart Supercenter", - "shop": "supermarket" - }, - "name": "Walmart Supercenter", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Hannaford": { - "tags": { - "name": "Hannaford", - "shop": "supermarket" - }, - "name": "Hannaford", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/業務スーパー": { - "tags": { - "name": "業務スーパー", - "shop": "supermarket" - }, - "name": "業務スーパー", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Norfa XL": { - "tags": { - "name": "Norfa XL", - "shop": "supermarket" - }, - "name": "Norfa XL", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/ヨークマート (YorkMart)": { - "tags": { - "name": "ヨークマート (YorkMart)", - "shop": "supermarket" - }, - "name": "ヨークマート (YorkMart)", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/supermarket/Leclerc Drive": { - "tags": { - "name": "Leclerc Drive", - "shop": "supermarket" - }, - "name": "Leclerc Drive", - "icon": "grocery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "operator", - "building_area", - "address" - ], - "suggestion": true - }, - "shop/electronics/Media Markt": { - "tags": { - "name": "Media Markt", - "shop": "electronics" - }, - "name": "Media Markt", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/electronics/Maplin": { - "tags": { - "name": "Maplin", - "shop": "electronics" - }, - "name": "Maplin", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/electronics/Best Buy": { - "tags": { - "name": "Best Buy", - "shop": "electronics" - }, - "name": "Best Buy", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/electronics/Future Shop": { - "tags": { - "name": "Future Shop", - "shop": "electronics" - }, - "name": "Future Shop", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/electronics/Saturn": { - "tags": { - "name": "Saturn", - "shop": "electronics" - }, - "name": "Saturn", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/electronics/Currys": { - "tags": { - "name": "Currys", - "shop": "electronics" - }, - "name": "Currys", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/electronics/Radio Shack": { - "tags": { - "name": "Radio Shack", - "shop": "electronics" - }, - "name": "Radio Shack", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/electronics/Comet": { - "tags": { - "name": "Comet", - "shop": "electronics" - }, - "name": "Comet", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/electronics/Euronics": { - "tags": { - "name": "Euronics", - "shop": "electronics" - }, - "name": "Euronics", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/electronics/Expert": { - "tags": { - "name": "Expert", - "shop": "electronics" - }, - "name": "Expert", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/electronics/Эльдорадо": { - "tags": { - "name": "Эльдорадо", - "shop": "electronics" - }, - "name": "Эльдорадо", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/electronics/Darty": { - "tags": { - "name": "Darty", - "shop": "electronics" - }, - "name": "Darty", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/electronics/М.Видео": { - "tags": { - "name": "М.Видео", - "shop": "electronics" - }, - "name": "М.Видео", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/McColl's": { - "tags": { - "name": "McColl's", - "shop": "convenience" - }, - "name": "McColl's", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/One Stop": { - "tags": { - "name": "One Stop", - "shop": "convenience" - }, - "name": "One Stop", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Londis": { - "tags": { - "name": "Londis", - "shop": "convenience" - }, - "name": "Londis", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Sale": { - "tags": { - "name": "Sale", - "shop": "convenience" - }, - "name": "Sale", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Siwa": { - "tags": { - "name": "Siwa", - "shop": "convenience" - }, - "name": "Siwa", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Mac's": { - "tags": { - "name": "Mac's", - "shop": "convenience" - }, - "name": "Mac's", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Alepa": { - "tags": { - "name": "Alepa", - "shop": "convenience" - }, - "name": "Alepa", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Hasty Market": { - "tags": { - "name": "Hasty Market", - "shop": "convenience" - }, - "name": "Hasty Market", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/K-Market": { - "tags": { - "name": "K-Market", - "shop": "convenience" - }, - "name": "K-Market", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Valintatalo": { - "tags": { - "name": "Valintatalo", - "shop": "convenience" - }, - "name": "Valintatalo", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/セブンイレブン": { - "tags": { - "name": "セブンイレブン", - "name:en": "7-Eleven", - "shop": "convenience" - }, - "name": "セブンイレブン", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/ローソン": { - "tags": { - "name": "ローソン", - "name:en": "LAWSON", - "shop": "convenience" - }, - "name": "ローソン", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Mace": { - "tags": { - "name": "Mace", - "shop": "convenience" - }, - "name": "Mace", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Mini Market": { - "tags": { - "name": "Mini Market", - "shop": "convenience" - }, - "name": "Mini Market", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Nisa Local": { - "tags": { - "name": "Nisa Local", - "shop": "convenience" - }, - "name": "Nisa Local", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Dorfladen": { - "tags": { - "name": "Dorfladen", - "shop": "convenience" - }, - "name": "Dorfladen", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Продукты": { - "tags": { - "name": "Продукты", - "shop": "convenience" - }, - "name": "Продукты", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Mini Stop": { - "tags": { - "name": "Mini Stop", - "shop": "convenience" - }, - "name": "Mini Stop", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/LAWSON": { - "tags": { - "name": "LAWSON", - "shop": "convenience" - }, - "name": "LAWSON", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/デイリーヤマザキ": { - "tags": { - "name": "デイリーヤマザキ", - "shop": "convenience" - }, - "name": "デイリーヤマザキ", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Надежда": { - "tags": { - "name": "Надежда", - "shop": "convenience" - }, - "name": "Надежда", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Nisa": { - "tags": { - "name": "Nisa", - "shop": "convenience" - }, - "name": "Nisa", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Premier": { - "tags": { - "name": "Premier", - "shop": "convenience" - }, - "name": "Premier", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/ミニストップ": { - "tags": { - "name": "ミニストップ", - "name:en": "MINISTOP", - "shop": "convenience" - }, - "name": "ミニストップ", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/サンクス": { - "tags": { - "name": "サンクス", - "name:en": "sunkus", - "shop": "convenience" - }, - "name": "サンクス", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/スリーエフ": { - "tags": { - "name": "スリーエフ", - "shop": "convenience" - }, - "name": "スリーエフ", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/8 à Huit": { - "tags": { - "name": "8 à Huit", - "shop": "convenience" - }, - "name": "8 à Huit", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Żabka": { - "tags": { - "name": "Żabka", - "shop": "convenience" - }, - "name": "Żabka", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Almacen": { - "tags": { - "name": "Almacen", - "shop": "convenience" - }, - "name": "Almacen", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Vival": { - "tags": { - "name": "Vival", - "shop": "convenience" - }, - "name": "Vival", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/FamilyMart": { - "tags": { - "name": "FamilyMart", - "shop": "convenience" - }, - "name": "FamilyMart", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/ファミリーマート": { - "tags": { - "name": "ファミリーマート", - "name:en": "FamilyMart", - "shop": "convenience" - }, - "name": "ファミリーマート", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Sunkus": { - "tags": { - "name": "Sunkus", - "shop": "convenience" - }, - "name": "Sunkus", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/セブンイレブン(Seven-Eleven)": { - "tags": { - "name": "セブンイレブン(Seven-Eleven)", - "shop": "convenience" - }, - "name": "セブンイレブン(Seven-Eleven)", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Jednota": { - "tags": { - "name": "Jednota", - "shop": "convenience" - }, - "name": "Jednota", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Гастроном": { - "tags": { - "name": "Гастроном", - "shop": "convenience" - }, - "name": "Гастроном", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Sklep spożywczy": { - "tags": { - "name": "Sklep spożywczy", - "shop": "convenience" - }, - "name": "Sklep spożywczy", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/サークルK": { - "tags": { - "name": "サークルK", - "name:en": "Circle K", - "shop": "convenience" - }, - "name": "サークルK", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Proxi": { - "tags": { - "name": "Proxi", - "shop": "convenience" - }, - "name": "Proxi", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Универсам": { - "tags": { - "name": "Универсам", - "shop": "convenience" - }, - "name": "Универсам", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Groszek": { - "tags": { - "name": "Groszek", - "shop": "convenience" - }, - "name": "Groszek", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Select": { - "tags": { - "name": "Select", - "shop": "convenience" - }, - "name": "Select", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Potraviny": { - "tags": { - "name": "Potraviny", - "shop": "convenience" - }, - "name": "Potraviny", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Смак": { - "tags": { - "name": "Смак", - "shop": "convenience" - }, - "name": "Смак", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Эконом": { - "tags": { - "name": "Эконом", - "shop": "convenience" - }, - "name": "Эконом", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Березка": { - "tags": { - "name": "Березка", - "shop": "convenience" - }, - "name": "Березка", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Cumberland Farms": { - "tags": { - "name": "Cumberland Farms", - "shop": "convenience" - }, - "name": "Cumberland Farms", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Tesco Lotus Express": { - "tags": { - "name": "Tesco Lotus Express", - "shop": "convenience" - }, - "name": "Tesco Lotus Express", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/24 часа": { - "tags": { - "name": "24 часа", - "shop": "convenience" - }, - "name": "24 часа", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Минимаркет": { - "tags": { - "name": "Минимаркет", - "shop": "convenience" - }, - "name": "Минимаркет", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Oxxo": { - "tags": { - "name": "Oxxo", - "shop": "convenience" - }, - "name": "Oxxo", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/abc": { - "tags": { - "name": "abc", - "shop": "convenience" - }, - "name": "abc", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Продукти": { - "tags": { - "name": "Продукти", - "shop": "convenience" - }, - "name": "Продукти", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/ローソンストア100 (LAWSON STORE 100)": { - "tags": { - "name": "ローソンストア100 (LAWSON STORE 100)", - "shop": "convenience" - }, - "name": "ローソンストア100 (LAWSON STORE 100)", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/ローソンストア100": { - "tags": { - "name": "ローソンストア100", - "shop": "convenience" - }, - "name": "ローソンストア100", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/เซเว่นอีเลฟเว่น": { - "tags": { - "name": "เซเว่นอีเลฟเว่น", - "shop": "convenience" - }, - "name": "เซเว่นอีเลฟเว่น", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Spożywczy": { - "tags": { - "name": "Spożywczy", - "shop": "convenience" - }, - "name": "Spożywczy", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Фортуна": { - "tags": { - "name": "Фортуна", - "shop": "convenience" - }, - "name": "Фортуна", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Picard": { - "tags": { - "name": "Picard", - "shop": "convenience" - }, - "name": "Picard", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Four Square": { - "tags": { - "name": "Four Square", - "shop": "convenience" - }, - "name": "Four Square", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Визит": { - "tags": { - "name": "Визит", - "shop": "convenience" - }, - "name": "Визит", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Авоська": { - "tags": { - "name": "Авоська", - "shop": "convenience" - }, - "name": "Авоська", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Dollar General": { - "tags": { - "name": "Dollar General", - "shop": "convenience" - }, - "name": "Dollar General", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Studenac": { - "tags": { - "name": "Studenac", - "shop": "convenience" - }, - "name": "Studenac", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Central Convenience Store": { - "tags": { - "name": "Central Convenience Store", - "shop": "convenience" - }, - "name": "Central Convenience Store", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/продукты": { - "tags": { - "name": "продукты", - "shop": "convenience" - }, - "name": "продукты", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Кулинария": { - "tags": { - "name": "Кулинария", - "shop": "convenience" - }, - "name": "Кулинария", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/全家": { - "tags": { - "name": "全家", - "shop": "convenience" - }, - "name": "全家", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Мечта": { - "tags": { - "name": "Мечта", - "shop": "convenience" - }, - "name": "Мечта", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Epicerie": { - "tags": { - "name": "Epicerie", - "shop": "convenience" - }, - "name": "Epicerie", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Кировский": { - "tags": { - "name": "Кировский", - "shop": "convenience" - }, - "name": "Кировский", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Food Mart": { - "tags": { - "name": "Food Mart", - "shop": "convenience" - }, - "name": "Food Mart", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Delikatesy": { - "tags": { - "name": "Delikatesy", - "shop": "convenience" - }, - "name": "Delikatesy", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/ポプラ": { - "tags": { - "name": "ポプラ", - "shop": "convenience" - }, - "name": "ポプラ", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Продуктовый магазин": { - "tags": { - "name": "Продуктовый магазин", - "shop": "convenience" - }, - "name": "Продуктовый магазин", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Продуктовый": { - "tags": { - "name": "Продуктовый", - "shop": "convenience" - }, - "name": "Продуктовый", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/セイコーマート (Seicomart)": { - "tags": { - "name": "セイコーマート (Seicomart)", - "shop": "convenience" - }, - "name": "セイコーマート (Seicomart)", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Виктория": { - "tags": { - "name": "Виктория", - "shop": "convenience" - }, - "name": "Виктория", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Весна": { - "tags": { - "name": "Весна", - "shop": "convenience" - }, - "name": "Весна", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Mini Market Non-Stop": { - "tags": { - "name": "Mini Market Non-Stop", - "shop": "convenience" - }, - "name": "Mini Market Non-Stop", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Копеечка": { - "tags": { - "name": "Копеечка", - "shop": "convenience" - }, - "name": "Копеечка", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Royal Farms": { - "tags": { - "name": "Royal Farms", - "shop": "convenience" - }, - "name": "Royal Farms", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Alfamart": { - "tags": { - "name": "Alfamart", - "shop": "convenience" - }, - "name": "Alfamart", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Indomaret": { - "tags": { - "name": "Indomaret", - "shop": "convenience" - }, - "name": "Indomaret", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/магазин": { - "tags": { - "name": "магазин", - "shop": "convenience" - }, - "name": "магазин", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/全家便利商店": { - "tags": { - "name": "全家便利商店", - "shop": "convenience" - }, - "name": "全家便利商店", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/მარკეტი (Market)": { - "tags": { - "name": "მარკეტი (Market)", - "shop": "convenience" - }, - "name": "მარკეტი (Market)", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/convenience/Stores": { - "tags": { - "name": "Stores", - "shop": "convenience" - }, - "name": "Stores", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/chemist/Müller": { - "tags": { - "name": "Müller", - "shop": "chemist" - }, - "name": "Müller", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/chemist/Schlecker": { - "tags": { - "name": "Schlecker", - "shop": "chemist" - }, - "name": "Schlecker", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/chemist/Etos": { - "tags": { - "name": "Etos", - "shop": "chemist" - }, - "name": "Etos", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/chemist/Bipa": { - "tags": { - "name": "Bipa", - "shop": "chemist" - }, - "name": "Bipa", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/chemist/Rossmann": { - "tags": { - "name": "Rossmann", - "shop": "chemist" - }, - "name": "Rossmann", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/chemist/Ihr Platz": { - "tags": { - "name": "Ihr Platz", - "shop": "chemist" - }, - "name": "Ihr Platz", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/chemist/Douglas": { - "tags": { - "name": "Douglas", - "shop": "chemist" - }, - "name": "Douglas", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/chemist/Kruidvat": { - "tags": { - "name": "Kruidvat", - "shop": "chemist" - }, - "name": "Kruidvat", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/car_repair/Peugeot": { - "tags": { - "name": "Peugeot", - "shop": "car_repair" - }, - "name": "Peugeot", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/car_repair/Kwik Fit": { - "tags": { - "name": "Kwik Fit", - "shop": "car_repair" - }, - "name": "Kwik Fit", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/car_repair/ATU": { - "tags": { - "name": "ATU", - "shop": "car_repair" - }, - "name": "ATU", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/car_repair/Kwik-Fit": { - "tags": { - "name": "Kwik-Fit", - "shop": "car_repair" - }, - "name": "Kwik-Fit", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/car_repair/Midas": { - "tags": { - "name": "Midas", - "shop": "car_repair" - }, - "name": "Midas", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/car_repair/Feu Vert": { - "tags": { - "name": "Feu Vert", - "shop": "car_repair" - }, - "name": "Feu Vert", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/car_repair/Norauto": { - "tags": { - "name": "Norauto", - "shop": "car_repair" - }, - "name": "Norauto", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/car_repair/Speedy": { - "tags": { - "name": "Speedy", - "shop": "car_repair" - }, - "name": "Speedy", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/car_repair/Автозапчасти": { - "tags": { - "name": "Автозапчасти", - "shop": "car_repair" - }, - "name": "Автозапчасти", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/car_repair/Renault": { - "tags": { - "name": "Renault", - "shop": "car_repair" - }, - "name": "Renault", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/car_repair/Pit Stop": { - "tags": { - "name": "Pit Stop", - "shop": "car_repair" - }, - "name": "Pit Stop", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/car_repair/Jiffy Lube": { - "tags": { - "name": "Jiffy Lube", - "shop": "car_repair" - }, - "name": "Jiffy Lube", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/car_repair/Шиномонтаж": { - "tags": { - "name": "Шиномонтаж", - "shop": "car_repair" - }, - "name": "Шиномонтаж", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/car_repair/СТО": { - "tags": { - "name": "СТО", - "shop": "car_repair" - }, - "name": "СТО", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/car_repair/O'Reilly Auto Parts": { - "tags": { - "name": "O'Reilly Auto Parts", - "shop": "car_repair" - }, - "name": "O'Reilly Auto Parts", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/car_repair/Carglass": { - "tags": { - "name": "Carglass", - "shop": "car_repair" - }, - "name": "Carglass", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/car_repair/шиномонтаж": { - "tags": { - "name": "шиномонтаж", - "shop": "car_repair" - }, - "name": "шиномонтаж", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/car_repair/Euromaster": { - "tags": { - "name": "Euromaster", - "shop": "car_repair" - }, - "name": "Euromaster", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/car_repair/Firestone": { - "tags": { - "name": "Firestone", - "shop": "car_repair" - }, - "name": "Firestone", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/car_repair/AutoZone": { - "tags": { - "name": "AutoZone", - "shop": "car_repair" - }, - "name": "AutoZone", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/car_repair/Автосервис": { - "tags": { - "name": "Автосервис", - "shop": "car_repair" - }, - "name": "Автосервис", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/car_repair/Roady": { - "tags": { - "name": "Roady", - "shop": "car_repair" - }, - "name": "Roady", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/furniture/IKEA": { - "tags": { - "name": "IKEA", - "shop": "furniture" - }, - "name": "IKEA", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/furniture/Jysk": { - "tags": { - "name": "Jysk", - "shop": "furniture" - }, - "name": "Jysk", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/furniture/Roller": { - "tags": { - "name": "Roller", - "shop": "furniture" - }, - "name": "Roller", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/furniture/Dänisches Bettenlager": { - "tags": { - "name": "Dänisches Bettenlager", - "shop": "furniture" - }, - "name": "Dänisches Bettenlager", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/furniture/Conforama": { - "tags": { - "name": "Conforama", - "shop": "furniture" - }, - "name": "Conforama", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/furniture/Matratzen Concord": { - "tags": { - "name": "Matratzen Concord", - "shop": "furniture" - }, - "name": "Matratzen Concord", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/furniture/Мебель": { - "tags": { - "name": "Мебель", - "shop": "furniture" - }, - "name": "Мебель", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/furniture/But": { - "tags": { - "name": "But", - "shop": "furniture" - }, - "name": "But", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Hornbach": { - "tags": { - "name": "Hornbach", - "shop": "doityourself" - }, - "name": "Hornbach", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/B&Q": { - "tags": { - "name": "B&Q", - "shop": "doityourself" - }, - "name": "B&Q", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Hubo": { - "tags": { - "name": "Hubo", - "shop": "doityourself" - }, - "name": "Hubo", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Mr Bricolage": { - "tags": { - "name": "Mr Bricolage", - "shop": "doityourself" - }, - "name": "Mr Bricolage", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Gamma": { - "tags": { - "name": "Gamma", - "shop": "doityourself" - }, - "name": "Gamma", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/OBI": { - "tags": { - "name": "OBI", - "shop": "doityourself" - }, - "name": "OBI", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Lowes": { - "tags": { - "name": "Lowes", - "shop": "doityourself" - }, - "name": "Lowes", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Wickes": { - "tags": { - "name": "Wickes", - "shop": "doityourself" - }, - "name": "Wickes", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Hagebau": { - "tags": { - "name": "Hagebau", - "shop": "doityourself" - }, - "name": "Hagebau", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Max Bahr": { - "tags": { - "name": "Max Bahr", - "shop": "doityourself" - }, - "name": "Max Bahr", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Castorama": { - "tags": { - "name": "Castorama", - "shop": "doityourself" - }, - "name": "Castorama", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Rona": { - "tags": { - "name": "Rona", - "shop": "doityourself" - }, - "name": "Rona", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Home Depot": { - "tags": { - "name": "Home Depot", - "shop": "doityourself" - }, - "name": "Home Depot", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Toom Baumarkt": { - "tags": { - "name": "Toom Baumarkt", - "shop": "doityourself" - }, - "name": "Toom Baumarkt", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Homebase": { - "tags": { - "name": "Homebase", - "shop": "doityourself" - }, - "name": "Homebase", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Baumax": { - "tags": { - "name": "Baumax", - "shop": "doityourself" - }, - "name": "Baumax", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Lagerhaus": { - "tags": { - "name": "Lagerhaus", - "shop": "doityourself" - }, - "name": "Lagerhaus", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Bauhaus": { - "tags": { - "name": "Bauhaus", - "shop": "doityourself" - }, - "name": "Bauhaus", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Leroy Merlin": { - "tags": { - "name": "Leroy Merlin", - "shop": "doityourself" - }, - "name": "Leroy Merlin", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Hellweg": { - "tags": { - "name": "Hellweg", - "shop": "doityourself" - }, - "name": "Hellweg", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Brico": { - "tags": { - "name": "Brico", - "shop": "doityourself" - }, - "name": "Brico", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Bricomarché": { - "tags": { - "name": "Bricomarché", - "shop": "doityourself" - }, - "name": "Bricomarché", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Toom": { - "tags": { - "name": "Toom", - "shop": "doityourself" - }, - "name": "Toom", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Praktiker": { - "tags": { - "name": "Praktiker", - "shop": "doityourself" - }, - "name": "Praktiker", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Hagebaumarkt": { - "tags": { - "name": "Hagebaumarkt", - "shop": "doityourself" - }, - "name": "Hagebaumarkt", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Menards": { - "tags": { - "name": "Menards", - "shop": "doityourself" - }, - "name": "Menards", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Weldom": { - "tags": { - "name": "Weldom", - "shop": "doityourself" - }, - "name": "Weldom", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Bunnings Warehouse": { - "tags": { - "name": "Bunnings Warehouse", - "shop": "doityourself" - }, - "name": "Bunnings Warehouse", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Ace Hardware": { - "tags": { - "name": "Ace Hardware", - "shop": "doityourself" - }, - "name": "Ace Hardware", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Home Hardware": { - "tags": { - "name": "Home Hardware", - "shop": "doityourself" - }, - "name": "Home Hardware", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Хозтовары": { - "tags": { - "name": "Хозтовары", - "shop": "doityourself" - }, - "name": "Хозтовары", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Стройматериалы": { - "tags": { - "name": "Стройматериалы", - "shop": "doityourself" - }, - "name": "Стройматериалы", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Bricorama": { - "tags": { - "name": "Bricorama", - "shop": "doityourself" - }, - "name": "Bricorama", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/doityourself/Point P": { - "tags": { - "name": "Point P", - "shop": "doityourself" - }, - "name": "Point P", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/department_store/Target": { - "tags": { - "name": "Target", - "shop": "department_store" - }, - "name": "Target", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/department_store/Debenhams": { - "tags": { - "name": "Debenhams", - "shop": "department_store" - }, - "name": "Debenhams", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/department_store/Karstadt": { - "tags": { - "name": "Karstadt", - "shop": "department_store" - }, - "name": "Karstadt", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/department_store/Kmart": { - "tags": { - "name": "Kmart", - "shop": "department_store" - }, - "name": "Kmart", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/department_store/Galeria Kaufhof": { - "tags": { - "name": "Galeria Kaufhof", - "shop": "department_store" - }, - "name": "Galeria Kaufhof", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/department_store/Marks & Spencer": { - "tags": { - "name": "Marks & Spencer", - "shop": "department_store" - }, - "name": "Marks & Spencer", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/department_store/Big W": { - "tags": { - "name": "Big W", - "shop": "department_store" - }, - "name": "Big W", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/department_store/Woolworth": { - "tags": { - "name": "Woolworth", - "shop": "department_store" - }, - "name": "Woolworth", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/department_store/Универмаг": { - "tags": { - "name": "Универмаг", - "shop": "department_store" - }, - "name": "Универмаг", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/department_store/Sears": { - "tags": { - "name": "Sears", - "shop": "department_store" - }, - "name": "Sears", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/department_store/Kohl's": { - "tags": { - "name": "Kohl's", - "shop": "department_store" - }, - "name": "Kohl's", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/department_store/Macy's": { - "tags": { - "name": "Macy's", - "shop": "department_store" - }, - "name": "Macy's", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/department_store/JCPenney": { - "tags": { - "name": "JCPenney", - "shop": "department_store" - }, - "name": "JCPenney", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/stationery/Staples": { - "tags": { - "name": "Staples", - "shop": "stationery" - }, - "name": "Staples", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/stationery/McPaper": { - "tags": { - "name": "McPaper", - "shop": "stationery" - }, - "name": "McPaper", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/stationery/Office Depot": { - "tags": { - "name": "Office Depot", - "shop": "stationery" - }, - "name": "Office Depot", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/stationery/Канцтовары": { - "tags": { - "name": "Канцтовары", - "shop": "stationery" - }, - "name": "Канцтовары", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/car/Skoda": { - "tags": { - "name": "Skoda", - "shop": "car" - }, - "name": "Skoda", - "icon": "car", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "opening_hours" - ], - "suggestion": true - }, - "shop/car/BMW": { - "tags": { - "name": "BMW", - "shop": "car" - }, - "name": "BMW", - "icon": "car", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "opening_hours" - ], - "suggestion": true - }, - "shop/car/Citroen": { - "tags": { - "name": "Citroen", - "shop": "car" - }, - "name": "Citroen", - "icon": "car", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "opening_hours" - ], - "suggestion": true - }, - "shop/car/Mercedes-Benz": { - "tags": { - "name": "Mercedes-Benz", - "shop": "car" - }, - "name": "Mercedes-Benz", - "icon": "car", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "opening_hours" - ], - "suggestion": true - }, - "shop/car/Volvo": { - "tags": { - "name": "Volvo", - "shop": "car" - }, - "name": "Volvo", - "icon": "car", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "opening_hours" - ], - "suggestion": true - }, - "shop/car/Ford": { - "tags": { - "name": "Ford", - "shop": "car" - }, - "name": "Ford", - "icon": "car", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "opening_hours" - ], - "suggestion": true - }, - "shop/car/Volkswagen": { - "tags": { - "name": "Volkswagen", - "shop": "car" - }, - "name": "Volkswagen", - "icon": "car", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "opening_hours" - ], - "suggestion": true - }, - "shop/car/Mazda": { - "tags": { - "name": "Mazda", - "shop": "car" - }, - "name": "Mazda", - "icon": "car", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "opening_hours" - ], - "suggestion": true - }, - "shop/car/Mitsubishi": { - "tags": { - "name": "Mitsubishi", - "shop": "car" - }, - "name": "Mitsubishi", - "icon": "car", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "opening_hours" - ], - "suggestion": true - }, - "shop/car/Fiat": { - "tags": { - "name": "Fiat", - "shop": "car" - }, - "name": "Fiat", - "icon": "car", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "opening_hours" - ], - "suggestion": true - }, - "shop/car/Opel": { - "tags": { - "name": "Opel", - "shop": "car" - }, - "name": "Opel", - "icon": "car", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "opening_hours" - ], - "suggestion": true - }, - "shop/car/Audi": { - "tags": { - "name": "Audi", - "shop": "car" - }, - "name": "Audi", - "icon": "car", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "opening_hours" - ], - "suggestion": true - }, - "shop/car/Toyota": { - "tags": { - "name": "Toyota", - "shop": "car" - }, - "name": "Toyota", - "icon": "car", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "opening_hours" - ], - "suggestion": true - }, - "shop/car/Nissan": { - "tags": { - "name": "Nissan", - "shop": "car" - }, - "name": "Nissan", - "icon": "car", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "opening_hours" - ], - "suggestion": true - }, - "shop/car/Suzuki": { - "tags": { - "name": "Suzuki", - "shop": "car" - }, - "name": "Suzuki", - "icon": "car", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "opening_hours" - ], - "suggestion": true - }, - "shop/car/Honda": { - "tags": { - "name": "Honda", - "shop": "car" - }, - "name": "Honda", - "icon": "car", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "opening_hours" - ], - "suggestion": true - }, - "shop/car/Hyundai": { - "tags": { - "name": "Hyundai", - "shop": "car" - }, - "name": "Hyundai", - "icon": "car", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "opening_hours" - ], - "suggestion": true - }, - "shop/car/Subaru": { - "tags": { - "name": "Subaru", - "shop": "car" - }, - "name": "Subaru", - "icon": "car", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "opening_hours" - ], - "suggestion": true - }, - "shop/car/Chevrolet": { - "tags": { - "name": "Chevrolet", - "shop": "car" - }, - "name": "Chevrolet", - "icon": "car", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "opening_hours" - ], - "suggestion": true - }, - "shop/car/Автомагазин": { - "tags": { - "name": "Автомагазин", - "shop": "car" - }, - "name": "Автомагазин", - "icon": "car", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Matalan": { - "tags": { - "name": "Matalan", - "shop": "clothes" - }, - "name": "Matalan", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/KiK": { - "tags": { - "name": "KiK", - "shop": "clothes" - }, - "name": "KiK", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/H&M": { - "tags": { - "name": "H&M", - "shop": "clothes" - }, - "name": "H&M", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Urban Outfitters": { - "tags": { - "name": "Urban Outfitters", - "shop": "clothes" - }, - "name": "Urban Outfitters", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Vögele": { - "tags": { - "name": "Vögele", - "shop": "clothes" - }, - "name": "Vögele", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Zeeman": { - "tags": { - "name": "Zeeman", - "shop": "clothes" - }, - "name": "Zeeman", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Takko": { - "tags": { - "name": "Takko", - "shop": "clothes" - }, - "name": "Takko", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/C&A": { - "tags": { - "name": "C&A", - "shop": "clothes" - }, - "name": "C&A", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Zara": { - "tags": { - "name": "Zara", - "shop": "clothes" - }, - "name": "Zara", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Vero Moda": { - "tags": { - "name": "Vero Moda", - "shop": "clothes" - }, - "name": "Vero Moda", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/NKD": { - "tags": { - "name": "NKD", - "shop": "clothes" - }, - "name": "NKD", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Ernsting's family": { - "tags": { - "name": "Ernsting's family", - "shop": "clothes" - }, - "name": "Ernsting's family", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Winners": { - "tags": { - "name": "Winners", - "shop": "clothes" - }, - "name": "Winners", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/River Island": { - "tags": { - "name": "River Island", - "shop": "clothes" - }, - "name": "River Island", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Next": { - "tags": { - "name": "Next", - "shop": "clothes" - }, - "name": "Next", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Gap": { - "tags": { - "name": "Gap", - "shop": "clothes" - }, - "name": "Gap", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Adidas": { - "tags": { - "name": "Adidas", - "shop": "clothes" - }, - "name": "Adidas", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Mr Price": { - "tags": { - "name": "Mr Price", - "shop": "clothes" - }, - "name": "Mr Price", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Pep": { - "tags": { - "name": "Pep", - "shop": "clothes" - }, - "name": "Pep", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Edgars": { - "tags": { - "name": "Edgars", - "shop": "clothes" - }, - "name": "Edgars", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Ackermans": { - "tags": { - "name": "Ackermans", - "shop": "clothes" - }, - "name": "Ackermans", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Truworths": { - "tags": { - "name": "Truworths", - "shop": "clothes" - }, - "name": "Truworths", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Ross": { - "tags": { - "name": "Ross", - "shop": "clothes" - }, - "name": "Ross", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Dorothy Perkins": { - "tags": { - "name": "Dorothy Perkins", - "shop": "clothes" - }, - "name": "Dorothy Perkins", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Deichmann": { - "tags": { - "name": "Deichmann", - "shop": "clothes" - }, - "name": "Deichmann", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Lindex": { - "tags": { - "name": "Lindex", - "shop": "clothes" - }, - "name": "Lindex", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/s.Oliver": { - "tags": { - "name": "s.Oliver", - "shop": "clothes" - }, - "name": "s.Oliver", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Old Navy": { - "tags": { - "name": "Old Navy", - "shop": "clothes" - }, - "name": "Old Navy", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Jack & Jones": { - "tags": { - "name": "Jack & Jones", - "shop": "clothes" - }, - "name": "Jack & Jones", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Pimkie": { - "tags": { - "name": "Pimkie", - "shop": "clothes" - }, - "name": "Pimkie", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Esprit": { - "tags": { - "name": "Esprit", - "shop": "clothes" - }, - "name": "Esprit", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Primark": { - "tags": { - "name": "Primark", - "shop": "clothes" - }, - "name": "Primark", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Bonita": { - "tags": { - "name": "Bonita", - "shop": "clothes" - }, - "name": "Bonita", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Mexx": { - "tags": { - "name": "Mexx", - "shop": "clothes" - }, - "name": "Mexx", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Gerry Weber": { - "tags": { - "name": "Gerry Weber", - "shop": "clothes" - }, - "name": "Gerry Weber", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Tally Weijl": { - "tags": { - "name": "Tally Weijl", - "shop": "clothes" - }, - "name": "Tally Weijl", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Mango": { - "tags": { - "name": "Mango", - "shop": "clothes" - }, - "name": "Mango", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/TK Maxx": { - "tags": { - "name": "TK Maxx", - "shop": "clothes" - }, - "name": "TK Maxx", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Benetton": { - "tags": { - "name": "Benetton", - "shop": "clothes" - }, - "name": "Benetton", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Ulla Popken": { - "tags": { - "name": "Ulla Popken", - "shop": "clothes" - }, - "name": "Ulla Popken", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/AWG": { - "tags": { - "name": "AWG", - "shop": "clothes" - }, - "name": "AWG", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Tommy Hilfiger": { - "tags": { - "name": "Tommy Hilfiger", - "shop": "clothes" - }, - "name": "Tommy Hilfiger", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/New Yorker": { - "tags": { - "name": "New Yorker", - "shop": "clothes" - }, - "name": "New Yorker", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Orsay": { - "tags": { - "name": "Orsay", - "shop": "clothes" - }, - "name": "Orsay", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Charles Vögele": { - "tags": { - "name": "Charles Vögele", - "shop": "clothes" - }, - "name": "Charles Vögele", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/New Look": { - "tags": { - "name": "New Look", - "shop": "clothes" - }, - "name": "New Look", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Lacoste": { - "tags": { - "name": "Lacoste", - "shop": "clothes" - }, - "name": "Lacoste", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Etam": { - "tags": { - "name": "Etam", - "shop": "clothes" - }, - "name": "Etam", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Kiabi": { - "tags": { - "name": "Kiabi", - "shop": "clothes" - }, - "name": "Kiabi", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Jack Wolfskin": { - "tags": { - "name": "Jack Wolfskin", - "shop": "clothes" - }, - "name": "Jack Wolfskin", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/American Apparel": { - "tags": { - "name": "American Apparel", - "shop": "clothes" - }, - "name": "American Apparel", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Men's Wearhouse": { - "tags": { - "name": "Men's Wearhouse", - "shop": "clothes" - }, - "name": "Men's Wearhouse", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Intimissimi": { - "tags": { - "name": "Intimissimi", - "shop": "clothes" - }, - "name": "Intimissimi", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/United Colors of Benetton": { - "tags": { - "name": "United Colors of Benetton", - "shop": "clothes" - }, - "name": "United Colors of Benetton", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Jules": { - "tags": { - "name": "Jules", - "shop": "clothes" - }, - "name": "Jules", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/AOKI": { - "tags": { - "name": "AOKI", - "shop": "clothes" - }, - "name": "AOKI", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Calzedonia": { - "tags": { - "name": "Calzedonia", - "shop": "clothes" - }, - "name": "Calzedonia", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/洋服の青山": { - "tags": { - "name": "洋服の青山", - "shop": "clothes" - }, - "name": "洋服の青山", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Levi's": { - "tags": { - "name": "Levi's", - "shop": "clothes" - }, - "name": "Levi's", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Celio": { - "tags": { - "name": "Celio", - "shop": "clothes" - }, - "name": "Celio", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/TJ Maxx": { - "tags": { - "name": "TJ Maxx", - "shop": "clothes" - }, - "name": "TJ Maxx", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Promod": { - "tags": { - "name": "Promod", - "shop": "clothes" - }, - "name": "Promod", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Street One": { - "tags": { - "name": "Street One", - "shop": "clothes" - }, - "name": "Street One", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/ユニクロ": { - "tags": { - "name": "ユニクロ", - "shop": "clothes" - }, - "name": "ユニクロ", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Banana Republic": { - "tags": { - "name": "Banana Republic", - "shop": "clothes" - }, - "name": "Banana Republic", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Одежда": { - "tags": { - "name": "Одежда", - "shop": "clothes" - }, - "name": "Одежда", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/La Halle": { - "tags": { - "name": "La Halle", - "shop": "clothes" - }, - "name": "La Halle", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/Peacocks": { - "tags": { - "name": "Peacocks", - "shop": "clothes" - }, - "name": "Peacocks", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/clothes/しまむら": { - "tags": { - "name": "しまむら", - "shop": "clothes" - }, - "name": "しまむら", - "icon": "clothing-store", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/books/Bruna": { - "tags": { - "name": "Bruna", - "shop": "books" - }, - "name": "Bruna", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/books/Waterstones": { - "tags": { - "name": "Waterstones", - "shop": "books" - }, - "name": "Waterstones", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/books/Libro": { - "tags": { - "name": "Libro", - "shop": "books" - }, - "name": "Libro", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/books/Barnes & Noble": { - "tags": { - "name": "Barnes & Noble", - "shop": "books" - }, - "name": "Barnes & Noble", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/books/Weltbild": { - "tags": { - "name": "Weltbild", - "shop": "books" - }, - "name": "Weltbild", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/books/Thalia": { - "tags": { - "name": "Thalia", - "shop": "books" - }, - "name": "Thalia", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/books/Книги": { - "tags": { - "name": "Книги", - "shop": "books" - }, - "name": "Книги", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/alcohol/Alko": { - "tags": { - "name": "Alko", - "shop": "alcohol" - }, - "name": "Alko", - "icon": "alcohol-shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/alcohol/The Beer Store": { - "tags": { - "name": "The Beer Store", - "shop": "alcohol" - }, - "name": "The Beer Store", - "icon": "alcohol-shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/alcohol/Systembolaget": { - "tags": { - "name": "Systembolaget", - "shop": "alcohol" - }, - "name": "Systembolaget", - "icon": "alcohol-shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/alcohol/LCBO": { - "tags": { - "name": "LCBO", - "shop": "alcohol" - }, - "name": "LCBO", - "icon": "alcohol-shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/alcohol/Ароматный мир": { - "tags": { - "name": "Ароматный мир", - "shop": "alcohol" - }, - "name": "Ароматный мир", - "icon": "alcohol-shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/alcohol/Bargain Booze": { - "tags": { - "name": "Bargain Booze", - "shop": "alcohol" - }, - "name": "Bargain Booze", - "icon": "alcohol-shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/alcohol/Nicolas": { - "tags": { - "name": "Nicolas", - "shop": "alcohol" - }, - "name": "Nicolas", - "icon": "alcohol-shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/alcohol/Botilleria": { - "tags": { - "name": "Botilleria", - "shop": "alcohol" - }, - "name": "Botilleria", - "icon": "alcohol-shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/alcohol/SAQ": { - "tags": { - "name": "SAQ", - "shop": "alcohol" - }, - "name": "SAQ", - "icon": "alcohol-shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/alcohol/Gall & Gall": { - "tags": { - "name": "Gall & Gall", - "shop": "alcohol" - }, - "name": "Gall & Gall", - "icon": "alcohol-shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/alcohol/BWS": { - "tags": { - "name": "BWS", - "shop": "alcohol" - }, - "name": "BWS", - "icon": "alcohol-shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/alcohol/Живое пиво": { - "tags": { - "name": "Живое пиво", - "shop": "alcohol" - }, - "name": "Живое пиво", - "icon": "alcohol-shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/bakery/Kamps": { - "tags": { - "name": "Kamps", - "shop": "bakery" - }, - "name": "Kamps", - "icon": "bakery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/bakery/Bäckerei Schmidt": { - "tags": { - "name": "Bäckerei Schmidt", - "shop": "bakery" - }, - "name": "Bäckerei Schmidt", - "icon": "bakery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/bakery/Anker": { - "tags": { - "name": "Anker", - "shop": "bakery" - }, - "name": "Anker", - "icon": "bakery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/bakery/Schäfer": { - "tags": { - "name": "Schäfer", - "shop": "bakery" - }, - "name": "Schäfer", - "icon": "bakery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/bakery/Hofpfisterei": { - "tags": { - "name": "Hofpfisterei", - "shop": "bakery" - }, - "name": "Hofpfisterei", - "icon": "bakery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/bakery/Greggs": { - "tags": { - "name": "Greggs", - "shop": "bakery" - }, - "name": "Greggs", - "icon": "bakery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/bakery/Oebel": { - "tags": { - "name": "Oebel", - "shop": "bakery" - }, - "name": "Oebel", - "icon": "bakery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/bakery/Boulangerie": { - "tags": { - "name": "Boulangerie", - "shop": "bakery" - }, - "name": "Boulangerie", - "icon": "bakery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/bakery/Stadtbäckerei": { - "tags": { - "name": "Stadtbäckerei", - "shop": "bakery" - }, - "name": "Stadtbäckerei", - "icon": "bakery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/bakery/Steinecke": { - "tags": { - "name": "Steinecke", - "shop": "bakery" - }, - "name": "Steinecke", - "icon": "bakery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/bakery/Ihle": { - "tags": { - "name": "Ihle", - "shop": "bakery" - }, - "name": "Ihle", - "icon": "bakery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/bakery/Goldilocks": { - "tags": { - "name": "Goldilocks", - "shop": "bakery" - }, - "name": "Goldilocks", - "icon": "bakery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/bakery/Dat Backhus": { - "tags": { - "name": "Dat Backhus", - "shop": "bakery" - }, - "name": "Dat Backhus", - "icon": "bakery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/bakery/K&U": { - "tags": { - "name": "K&U", - "shop": "bakery" - }, - "name": "K&U", - "icon": "bakery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/bakery/Der Beck": { - "tags": { - "name": "Der Beck", - "shop": "bakery" - }, - "name": "Der Beck", - "icon": "bakery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/bakery/Thürmann": { - "tags": { - "name": "Thürmann", - "shop": "bakery" - }, - "name": "Thürmann", - "icon": "bakery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/bakery/Backwerk": { - "tags": { - "name": "Backwerk", - "shop": "bakery" - }, - "name": "Backwerk", - "icon": "bakery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/bakery/Bäcker": { - "tags": { - "name": "Bäcker", - "shop": "bakery" - }, - "name": "Bäcker", - "icon": "bakery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/bakery/Schäfer's": { - "tags": { - "name": "Schäfer's", - "shop": "bakery" - }, - "name": "Schäfer's", - "icon": "bakery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/bakery/Panaderia": { - "tags": { - "name": "Panaderia", - "shop": "bakery" - }, - "name": "Panaderia", - "icon": "bakery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/bakery/Goeken backen": { - "tags": { - "name": "Goeken backen", - "shop": "bakery" - }, - "name": "Goeken backen", - "icon": "bakery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/bakery/Stadtbäckerei Junge": { - "tags": { - "name": "Stadtbäckerei Junge", - "shop": "bakery" - }, - "name": "Stadtbäckerei Junge", - "icon": "bakery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/bakery/Boulangerie Patisserie": { - "tags": { - "name": "Boulangerie Patisserie", - "shop": "bakery" - }, - "name": "Boulangerie Patisserie", - "icon": "bakery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/bakery/Paul": { - "tags": { - "name": "Paul", - "shop": "bakery" - }, - "name": "Paul", - "icon": "bakery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/bakery/Хлеб": { - "tags": { - "name": "Хлеб", - "shop": "bakery" - }, - "name": "Хлеб", - "icon": "bakery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/bakery/Piekarnia": { - "tags": { - "name": "Piekarnia", - "shop": "bakery" - }, - "name": "Piekarnia", - "icon": "bakery", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/sports/Sports Direct": { - "tags": { - "name": "Sports Direct", - "shop": "sports" - }, - "name": "Sports Direct", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/sports/Decathlon": { - "tags": { - "name": "Decathlon", - "shop": "sports" - }, - "name": "Decathlon", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/sports/Intersport": { - "tags": { - "name": "Intersport", - "shop": "sports" - }, - "name": "Intersport", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/sports/Sports Authority": { - "tags": { - "name": "Sports Authority", - "shop": "sports" - }, - "name": "Sports Authority", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/sports/Спортмастер": { - "tags": { - "name": "Спортмастер", - "shop": "sports" - }, - "name": "Спортмастер", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/sports/Sport 2000": { - "tags": { - "name": "Sport 2000", - "shop": "sports" - }, - "name": "Sport 2000", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/sports/Dick's Sporting Goods": { - "tags": { - "name": "Dick's Sporting Goods", - "shop": "sports" - }, - "name": "Dick's Sporting Goods", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/variety_store/Tedi": { - "tags": { - "name": "Tedi", - "shop": "variety_store" - }, - "name": "Tedi", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/variety_store/Dollarama": { - "tags": { - "name": "Dollarama", - "shop": "variety_store" - }, - "name": "Dollarama", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/variety_store/Dollar Tree": { - "tags": { - "name": "Dollar Tree", - "shop": "variety_store" - }, - "name": "Dollar Tree", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/pet/PetSmart": { - "tags": { - "name": "PetSmart", - "shop": "pet" - }, - "name": "PetSmart", - "icon": "dog-park", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/pet/Das Futterhaus": { - "tags": { - "name": "Das Futterhaus", - "shop": "pet" - }, - "name": "Das Futterhaus", - "icon": "dog-park", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/pet/Pets at Home": { - "tags": { - "name": "Pets at Home", - "shop": "pet" - }, - "name": "Pets at Home", - "icon": "dog-park", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/pet/Petco": { - "tags": { - "name": "Petco", - "shop": "pet" - }, - "name": "Petco", - "icon": "dog-park", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/pet/Зоомагазин": { - "tags": { - "name": "Зоомагазин", - "shop": "pet" - }, - "name": "Зоомагазин", - "icon": "dog-park", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/shoes/Reno": { - "tags": { - "name": "Reno", - "shop": "shoes" - }, - "name": "Reno", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/shoes/Ecco": { - "tags": { - "name": "Ecco", - "shop": "shoes" - }, - "name": "Ecco", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/shoes/Clarks": { - "tags": { - "name": "Clarks", - "shop": "shoes" - }, - "name": "Clarks", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/shoes/La Halle aux Chaussures": { - "tags": { - "name": "La Halle aux Chaussures", - "shop": "shoes" - }, - "name": "La Halle aux Chaussures", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/shoes/Brantano": { - "tags": { - "name": "Brantano", - "shop": "shoes" - }, - "name": "Brantano", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/shoes/Salamander": { - "tags": { - "name": "Salamander", - "shop": "shoes" - }, - "name": "Salamander", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/shoes/Обувь": { - "tags": { - "name": "Обувь", - "shop": "shoes" - }, - "name": "Обувь", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/shoes/Payless Shoe Source": { - "tags": { - "name": "Payless Shoe Source", - "shop": "shoes" - }, - "name": "Payless Shoe Source", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/shoes/Famous Footwear": { - "tags": { - "name": "Famous Footwear", - "shop": "shoes" - }, - "name": "Famous Footwear", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/shoes/Quick Schuh": { - "tags": { - "name": "Quick Schuh", - "shop": "shoes" - }, - "name": "Quick Schuh", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/shoes/Foot Locker": { - "tags": { - "name": "Foot Locker", - "shop": "shoes" - }, - "name": "Foot Locker", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/shoes/Bata": { - "tags": { - "name": "Bata", - "shop": "shoes" - }, - "name": "Bata", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/toys/La Grande Récré": { - "tags": { - "name": "La Grande Récré", - "shop": "toys" - }, - "name": "La Grande Récré", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/toys/Toys R Us": { - "tags": { - "name": "Toys R Us", - "shop": "toys" - }, - "name": "Toys R Us", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/toys/Детский мир": { - "tags": { - "name": "Детский мир", - "shop": "toys" - }, - "name": "Детский мир", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/toys/Intertoys": { - "tags": { - "name": "Intertoys", - "shop": "toys" - }, - "name": "Intertoys", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/toys/Игрушки": { - "tags": { - "name": "Игрушки", - "shop": "toys" - }, - "name": "Игрушки", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/travel_agency/Flight Centre": { - "tags": { - "name": "Flight Centre", - "shop": "travel_agency" - }, - "name": "Flight Centre", - "icon": "suitcase", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/travel_agency/Thomas Cook": { - "tags": { - "name": "Thomas Cook", - "shop": "travel_agency" - }, - "name": "Thomas Cook", - "icon": "suitcase", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/jewelry/Bijou Brigitte": { - "tags": { - "name": "Bijou Brigitte", - "shop": "jewelry" - }, - "name": "Bijou Brigitte", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/jewelry/Christ": { - "tags": { - "name": "Christ", - "shop": "jewelry" - }, - "name": "Christ", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/jewelry/Swarovski": { - "tags": { - "name": "Swarovski", - "shop": "jewelry" - }, - "name": "Swarovski", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/optician/Fielmann": { - "tags": { - "name": "Fielmann", - "shop": "optician" - }, - "name": "Fielmann", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/optician/Apollo Optik": { - "tags": { - "name": "Apollo Optik", - "shop": "optician" - }, - "name": "Apollo Optik", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/optician/Vision Express": { - "tags": { - "name": "Vision Express", - "shop": "optician" - }, - "name": "Vision Express", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/optician/Оптика": { - "tags": { - "name": "Оптика", - "shop": "optician" - }, - "name": "Оптика", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/optician/Optic 2000": { - "tags": { - "name": "Optic 2000", - "shop": "optician" - }, - "name": "Optic 2000", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/optician/Alain Afflelou": { - "tags": { - "name": "Alain Afflelou", - "shop": "optician" - }, - "name": "Alain Afflelou", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/optician/Specsavers": { - "tags": { - "name": "Specsavers", - "shop": "optician" - }, - "name": "Specsavers", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/optician/Krys": { - "tags": { - "name": "Krys", - "shop": "optician" - }, - "name": "Krys", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/optician/Atol": { - "tags": { - "name": "Atol", - "shop": "optician" - }, - "name": "Atol", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/video/Blockbuster": { - "tags": { - "name": "Blockbuster", - "shop": "video" - }, - "name": "Blockbuster", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/video/World of Video": { - "tags": { - "name": "World of Video", - "shop": "video" - }, - "name": "World of Video", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/mobile_phone/Билайн": { - "tags": { - "name": "Билайн", - "shop": "mobile_phone" - }, - "name": "Билайн", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/mobile_phone/ソフトバンクショップ (SoftBank shop)": { - "tags": { - "name": "ソフトバンクショップ (SoftBank shop)", - "shop": "mobile_phone" - }, - "name": "ソフトバンクショップ (SoftBank shop)", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/mobile_phone/Vodafone": { - "tags": { - "name": "Vodafone", - "shop": "mobile_phone" - }, - "name": "Vodafone", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/mobile_phone/O2": { - "tags": { - "name": "O2", - "shop": "mobile_phone" - }, - "name": "O2", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/mobile_phone/Carphone Warehouse": { - "tags": { - "name": "Carphone Warehouse", - "shop": "mobile_phone" - }, - "name": "Carphone Warehouse", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/mobile_phone/Orange": { - "tags": { - "name": "Orange", - "shop": "mobile_phone" - }, - "name": "Orange", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/mobile_phone/Verizon Wireless": { - "tags": { - "name": "Verizon Wireless", - "shop": "mobile_phone" - }, - "name": "Verizon Wireless", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/mobile_phone/Sprint": { - "tags": { - "name": "Sprint", - "shop": "mobile_phone" - }, - "name": "Sprint", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/mobile_phone/T-Mobile": { - "tags": { - "name": "T-Mobile", - "shop": "mobile_phone" - }, - "name": "T-Mobile", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/mobile_phone/МТС": { - "tags": { - "name": "МТС", - "shop": "mobile_phone" - }, - "name": "МТС", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/mobile_phone/Евросеть": { - "tags": { - "name": "Евросеть", - "shop": "mobile_phone" - }, - "name": "Евросеть", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/mobile_phone/Bell": { - "tags": { - "name": "Bell", - "shop": "mobile_phone" - }, - "name": "Bell", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/mobile_phone/The Phone House": { - "tags": { - "name": "The Phone House", - "shop": "mobile_phone" - }, - "name": "The Phone House", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/mobile_phone/SFR": { - "tags": { - "name": "SFR", - "shop": "mobile_phone" - }, - "name": "SFR", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/mobile_phone/Связной": { - "tags": { - "name": "Связной", - "shop": "mobile_phone" - }, - "name": "Связной", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/mobile_phone/Мегафон": { - "tags": { - "name": "Мегафон", - "shop": "mobile_phone" - }, - "name": "Мегафон", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/mobile_phone/AT&T": { - "tags": { - "name": "AT&T", - "shop": "mobile_phone" - }, - "name": "AT&T", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/mobile_phone/ドコモショップ (docomo shop)": { - "tags": { - "name": "ドコモショップ (docomo shop)", - "shop": "mobile_phone" - }, - "name": "ドコモショップ (docomo shop)", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/mobile_phone/au": { - "tags": { - "name": "au", - "shop": "mobile_phone" - }, - "name": "au", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/mobile_phone/Movistar": { - "tags": { - "name": "Movistar", - "shop": "mobile_phone" - }, - "name": "Movistar", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/mobile_phone/Bitė": { - "tags": { - "name": "Bitė", - "shop": "mobile_phone" - }, - "name": "Bitė", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/computer/PC World": { - "tags": { - "name": "PC World", - "shop": "computer" - }, - "name": "PC World", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/computer/DNS": { - "tags": { - "name": "DNS", - "shop": "computer" - }, - "name": "DNS", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/hairdresser/Klier": { - "tags": { - "name": "Klier", - "shop": "hairdresser" - }, - "name": "Klier", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/hairdresser/Supercuts": { - "tags": { - "name": "Supercuts", - "shop": "hairdresser" - }, - "name": "Supercuts", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/hairdresser/Hairkiller": { - "tags": { - "name": "Hairkiller", - "shop": "hairdresser" - }, - "name": "Hairkiller", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/hairdresser/Great Clips": { - "tags": { - "name": "Great Clips", - "shop": "hairdresser" - }, - "name": "Great Clips", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/hairdresser/Парикмахерская": { - "tags": { - "name": "Парикмахерская", - "shop": "hairdresser" - }, - "name": "Парикмахерская", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/hairdresser/Fryzjer": { - "tags": { - "name": "Fryzjer", - "shop": "hairdresser" - }, - "name": "Fryzjer", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/hairdresser/Franck Provost": { - "tags": { - "name": "Franck Provost", - "shop": "hairdresser" - }, - "name": "Franck Provost", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/hairdresser/Салон красоты": { - "tags": { - "name": "Салон красоты", - "shop": "hairdresser" - }, - "name": "Салон красоты", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/hardware/1000 мелочей": { - "tags": { - "name": "1000 мелочей", - "shop": "hardware" - }, - "name": "1000 мелочей", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - }, - "shop/motorcycle/Yamaha": { - "tags": { - "name": "Yamaha", - "shop": "motorcycle" - }, - "name": "Yamaha", - "icon": "shop", - "geometry": [ - "point", - "vertex", - "area" - ], - "fields": [ - "address", - "building_area", - "opening_hours" - ], - "suggestion": true - } - }, - "defaults": { - "area": [ - "category-landuse", - "category-building", - "category-water-area", - "leisure/park", - "amenity/hospital", - "amenity/place_of_worship", - "amenity/cafe", - "amenity/restaurant", - "area" - ], - "line": [ - "category-road", - "category-rail", - "category-path", - "category-water-line", - "power/line", - "line" - ], - "point": [ - "leisure/park", - "amenity/hospital", - "amenity/place_of_worship", - "amenity/cafe", - "amenity/restaurant", - "amenity/bar", - "amenity/bank", - "shop/supermarket", - "point" - ], - "vertex": [ - "highway/crossing", - "railway/level_crossing", - "highway/traffic_signals", - "highway/turning_circle", - "highway/mini_roundabout", - "highway/motorway_junction", - "vertex" - ], - "relation": [ - "category-route", - "type/boundary", - "type/restriction", - "type/multipolygon", - "relation" - ] - }, - "categories": { - "category-building": { - "geometry": "area", - "name": "Building", - "icon": "building", - "members": [ - "building/house", - "building/apartments", - "building/commercial", - "building/industrial", - "building/residential", - "building" - ] - }, - "category-golf": { - "geometry": "area", - "name": "Golf", - "icon": "golf", - "members": [ - "golf/fairway", - "golf/green", - "golf/lateral_water_hazard", - "golf/rough", - "golf/bunker", - "golf/tee", - "golf/water_hazard" - ] - }, - "category-landuse": { - "geometry": "area", - "name": "Land Use", - "icon": "land-use", - "members": [ - "landuse/residential", - "landuse/industrial", - "landuse/commercial", - "landuse/retail", - "landuse/farm", - "landuse/farmyard", - "landuse/forest", - "landuse/meadow", - "landuse/cemetery" - ] - }, - "category-path": { - "geometry": "line", - "name": "Path", - "icon": "category-path", - "members": [ - "highway/footway", - "highway/cycleway", - "highway/bridleway", - "highway/path", - "highway/steps" - ] - }, - "category-rail": { - "geometry": "line", - "name": "Rail", - "icon": "category-rail", - "members": [ - "railway/rail", - "railway/subway", - "railway/tram", - "railway/monorail", - "railway/disused", - "railway/abandoned" - ] - }, - "category-road": { - "geometry": "line", - "name": "Road", - "icon": "category-roads", - "members": [ - "highway/residential", - "highway/motorway", - "highway/trunk", - "highway/primary", - "highway/secondary", - "highway/tertiary", - "highway/service", - "highway/motorway_link", - "highway/trunk_link", - "highway/primary_link", - "highway/secondary_link", - "highway/tertiary_link", - "highway/unclassified", - "highway/track", - "highway/road" - ] - }, - "category-route": { - "geometry": "relation", - "name": "Route", - "icon": "route", - "members": [ - "type/route/road", - "type/route/bicycle", - "type/route/foot", - "type/route/hiking", - "type/route/bus", - "type/route/train", - "type/route/tram", - "type/route/ferry", - "type/route/power", - "type/route/pipeline", - "type/route/detour", - "type/route_master", - "type/route" - ] - }, - "category-water-area": { - "geometry": "area", - "name": "Water", - "icon": "water", - "members": [ - "natural/water/lake", - "natural/water/pond", - "natural/water/reservoir", - "natural/water" - ] - }, - "category-water-line": { - "geometry": "line", - "name": "Water", - "icon": "category-water", - "members": [ - "waterway/river", - "waterway/stream", - "waterway/canal", - "waterway/ditch", - "waterway/drain" - ] - } - }, - "fields": { - "access": { - "keys": [ - "access", - "foot", - "motor_vehicle", - "bicycle", - "horse" - ], - "type": "access", - "label": "Access", - "placeholder": "Unknown", - "strings": { - "types": { - "access": "General", - "foot": "Foot", - "motor_vehicle": "Motor Vehicles", - "bicycle": "Bicycles", - "horse": "Horses" - }, - "options": { - "yes": { - "title": "Allowed", - "description": "Access permitted by law; a right of way" - }, - "no": { - "title": "Prohibited", - "description": "Access not permitted to the general public" - }, - "permissive": { - "title": "Permissive", - "description": "Access permitted until such time as the owner revokes the permission" - }, - "private": { - "title": "Private", - "description": "Access permitted only with permission of the owner on an individual basis" - }, - "designated": { - "title": "Designated", - "description": "Access permitted according to signs or specific local laws" - }, - "destination": { - "title": "Destination", - "description": "Access permitted only to reach a destination" - } - } - } - }, - "access_simple": { - "key": "access", - "type": "combo", - "label": "Access", - "options": [ - "public", - "permissive", - "private", - "customers" - ] - }, - "address": { - "type": "address", - "keys": [ - "addr:housenumber", - "addr:street", - "addr:city", - "addr:postcode" - ], - "icon": "address", - "universal": true, - "label": "Address", - "strings": { - "placeholders": { - "number": "123", - "street": "Street", - "city": "City", - "postcode": "Postal code" - } - } - }, - "admin_level": { - "key": "admin_level", - "type": "number", - "label": "Admin Level" - }, - "aerialway": { - "key": "aerialway", - "type": "typeCombo", - "label": "Type" - }, - "aerialway/access": { - "key": "aerialway:access", - "type": "combo", - "options": [ - "entry", - "exit", - "both" - ], - "label": "Access" - }, - "aerialway/bubble": { - "key": "aerialway:bubble", - "type": "check", - "label": "Bubble" - }, - "aerialway/capacity": { - "key": "aerialway:capacity", - "type": "number", - "label": "Capacity (per hour)", - "placeholder": "500, 2500, 5000..." - }, - "aerialway/duration": { - "key": "aerialway:duration", - "type": "number", - "label": "Duration (minutes)", - "placeholder": "1, 2, 3..." - }, - "aerialway/heating": { - "key": "aerialway:heating", - "type": "check", - "label": "Heated" - }, - "aerialway/occupancy": { - "key": "aerialway:occupancy", - "type": "number", - "label": "Occupancy", - "placeholder": "2, 4, 8..." - }, - "aerialway/summer/access": { - "key": "aerialway:summer:access", - "type": "combo", - "options": [ - "entry", - "exit", - "both" - ], - "label": "Access (summer)" - }, - "aeroway": { - "key": "aeroway", - "type": "typeCombo", - "label": "Type" - }, - "amenity": { - "key": "amenity", - "type": "typeCombo", - "label": "Type" - }, - "artist": { - "key": "artist_name", - "type": "text", - "label": "Artist" - }, - "artwork_type": { - "key": "artwork_type", - "type": "combo", - "label": "Type" - }, - "atm": { - "key": "atm", - "type": "check", - "label": "ATM" - }, - "backrest": { - "key": "backrest", - "type": "check", - "label": "Backrest" - }, - "barrier": { - "key": "barrier", - "type": "typeCombo", - "label": "Type" - }, - "bicycle_parking": { - "key": "bicycle_parking", - "type": "combo", - "label": "Type" - }, - "boundary": { - "key": "boundary", - "type": "combo", - "label": "Type" - }, - "building": { - "key": "building", - "type": "typeCombo", - "label": "Building" - }, - "building_area": { - "key": "building", - "type": "check", - "default": "yes", - "geometry": "area", - "label": "Building" - }, - "cans": { - "key": "cans", - "type": "check", - "label": "Accepts Cans" - }, - "capacity": { - "key": "capacity", - "type": "number", - "label": "Capacity", - "placeholder": "50, 100, 200..." - }, - "cardinal_direction": { - "key": "direction", - "type": "combo", - "options": [ - "N", - "E", - "S", - "W", - "NE", - "SE", - "SW", - "NNE", - "ENE", - "ESE", - "SSE", - "SSW", - "WSW", - "WNW", - "NNW" - ], - "label": "Direction" - }, - "clock_direction": { - "key": "direction", - "type": "combo", - "options": [ - "clockwise", - "anticlockwise" - ], - "label": "Direction", - "strings": { - "options": { - "clockwise": "Clockwise", - "anticlockwise": "Counterclockwise" - } - } - }, - "clothes": { - "key": "clothes", - "type": "check", - "label": "Accepts Clothes" - }, - "collection_times": { - "key": "collection_times", - "type": "text", - "label": "Collection Times" - }, - "construction": { - "key": "construction", - "type": "combo", - "label": "Type" - }, - "country": { - "key": "country", - "type": "combo", - "label": "Country" - }, - "covered": { - "key": "covered", - "type": "check", - "label": "Covered" - }, - "crossing": { - "key": "crossing", - "type": "combo", - "label": "Type" - }, - "cuisine": { - "key": "cuisine", - "type": "combo", - "indexed": true, - "label": "Cuisine" - }, - "denomination": { - "key": "denomination", - "type": "combo", - "label": "Denomination" - }, - "denotation": { - "key": "denotation", - "type": "combo", - "label": "Denotation" - }, - "description": { - "key": "description", - "type": "textarea", - "label": "Description" - }, - "electrified": { - "key": "electrified", - "type": "combo", - "label": "Electrification", - "options": [ - "contact_line", - "rail", - "yes", - "no" - ] - }, - "elevation": { - "key": "ele", - "type": "number", - "icon": "elevation", - "universal": true, - "label": "Elevation" - }, - "emergency": { - "key": "emergency", - "type": "check", - "label": "Emergency" - }, - "entrance": { - "key": "entrance", - "type": "typeCombo", - "label": "Type" - }, - "fax": { - "key": "fax", - "type": "tel", - "label": "Fax", - "placeholder": "+31 42 123 4567" - }, - "fee": { - "key": "fee", - "type": "check", - "label": "Fee" - }, - "fire_hydrant/type": { - "key": "fire_hydrant:type", - "type": "combo", - "options": [ - "pillar", - "pond", - "underground", - "wall" - ], - "label": "Type" - }, - "fixme": { - "key": "fixme", - "type": "textarea", - "label": "Fix Me" - }, - "gauge": { - "key": "gauge", - "type": "combo", - "label": "Gauge" - }, - "generator/method": { - "key": "generator:method", - "type": "combo", - "label": "Method" - }, - "generator/source": { - "key": "generator:source", - "type": "combo", - "label": "Source" - }, - "generator/type": { - "key": "generator:type", - "type": "combo", - "label": "Type" - }, - "glass": { - "key": "glass", - "type": "check", - "label": "Accepts Glass" - }, - "golf_hole": { - "key": "ref", - "type": "text", - "label": "Reference", - "placeholder": "Hole number (1-18)" - }, - "handicap": { - "key": "handicap", - "type": "number", - "label": "Handicap", - "placeholder": "1-18" - }, - "highway": { - "key": "highway", - "type": "typeCombo", - "label": "Type" - }, - "historic": { - "key": "historic", - "type": "typeCombo", - "label": "Type" - }, - "iata": { - "key": "iata", - "type": "text", - "label": "IATA" - }, - "icao": { - "key": "icao", - "type": "text", - "label": "ICAO" - }, - "incline": { - "key": "incline", - "type": "combo", - "label": "Incline" - }, - "information": { - "key": "information", - "type": "typeCombo", - "label": "Type" - }, - "internet_access": { - "key": "internet_access", - "type": "combo", - "options": [ - "yes", - "no", - "wlan", - "wired", - "terminal" - ], - "label": "Internet Access", - "strings": { - "options": { - "yes": "Yes", - "no": "No", - "wlan": "Wifi", - "wired": "Wired", - "terminal": "Terminal" - } - } - }, - "landuse": { - "key": "landuse", - "type": "typeCombo", - "label": "Type" - }, - "lanes": { - "key": "lanes", - "type": "number", - "label": "Lanes", - "placeholder": "1, 2, 3..." - }, - "layer": { - "key": "layer", - "type": "combo", - "label": "Layer" - }, - "leisure": { - "key": "leisure", - "type": "typeCombo", - "label": "Type" - }, - "levels": { - "key": "building:levels", - "type": "number", - "label": "Levels", - "placeholder": "2, 4, 6..." - }, - "lit": { - "key": "lit", - "type": "check", - "label": "Lit" - }, - "location": { - "key": "location", - "type": "combo", - "label": "Location" - }, - "man_made": { - "key": "man_made", - "type": "typeCombo", - "label": "Type" - }, - "maxspeed": { - "key": "maxspeed", - "type": "maxspeed", - "label": "Speed Limit", - "placeholder": "40, 50, 60..." - }, - "name": { - "key": "name", - "type": "localized", - "label": "Name", - "placeholder": "Common name (if any)" - }, - "natural": { - "key": "natural", - "type": "typeCombo", - "label": "Natural" - }, - "network": { - "key": "network", - "type": "text", - "label": "Network" - }, - "note": { - "key": "note", - "type": "textarea", - "universal": true, - "icon": "note", - "label": "Note" - }, - "office": { - "key": "office", - "type": "typeCombo", - "label": "Type" - }, - "oneway": { - "key": "oneway", - "type": "check", - "label": "One Way" - }, - "oneway_yes": { - "key": "oneway", - "type": "check", - "default": "yes", - "label": "One Way" - }, - "opening_hours": { - "key": "opening_hours", - "type": "text", - "label": "Hours" - }, - "operator": { - "key": "operator", - "type": "text", - "label": "Operator" - }, - "paper": { - "key": "paper", - "type": "check", - "label": "Accepts Paper" - }, - "par": { - "key": "par", - "type": "number", - "label": "Par", - "placeholder": "3, 4, 5..." - }, - "park_ride": { - "key": "park_ride", - "type": "check", - "label": "Park and Ride" - }, - "parking": { - "key": "parking", - "type": "combo", - "options": [ - "surface", - "multi-storey", - "underground", - "sheds", - "carports", - "garage_boxes", - "lane" - ], - "label": "Type" - }, - "phone": { - "key": "phone", - "type": "tel", - "icon": "telephone", - "universal": true, - "label": "Phone", - "placeholder": "+31 42 123 4567" - }, - "piste/difficulty": { - "key": "piste:difficulty", - "type": "combo", - "label": "Difficulty" - }, - "piste/grooming": { - "key": "piste:grooming", - "type": "combo", - "label": "Grooming" - }, - "piste/type": { - "key": "piste:type", - "type": "typeCombo", - "label": "Type" - }, - "place": { - "key": "place", - "type": "typeCombo", - "label": "Type" - }, - "power": { - "key": "power", - "type": "typeCombo", - "label": "Type" - }, - "railway": { - "key": "railway", - "type": "typeCombo", - "label": "Type" - }, - "ref": { - "key": "ref", - "type": "text", - "label": "Reference" - }, - "relation": { - "key": "type", - "type": "combo", - "label": "Type" - }, - "religion": { - "key": "religion", - "type": "combo", - "options": [ - "christian", - "muslim", - "buddhist", - "jewish", - "hindu", - "shinto", - "taoist" - ], - "label": "Religion", - "strings": { - "options": { - "christian": "Christian", - "muslim": "Muslim", - "buddhist": "Buddhist", - "jewish": "Jewish", - "hindu": "Hindu", - "shinto": "Shinto", - "taoist": "Taoist" - } - } - }, - "restriction": { - "key": "restriction", - "type": "combo", - "label": "Type" - }, - "route": { - "key": "route", - "type": "combo", - "label": "Type" - }, - "route_master": { - "key": "route_master", - "type": "combo", - "label": "Type" - }, - "sac_scale": { - "key": "sac_scale", - "type": "combo", - "label": "Path Difficulty" - }, - "service": { - "key": "service", - "type": "combo", - "options": [ - "parking_aisle", - "driveway", - "alley", - "drive-through", - "emergency_access" - ], - "label": "Type" - }, - "shelter": { - "key": "shelter", - "type": "check", - "label": "Shelter" - }, - "shelter_type": { - "key": "shelter_type", - "type": "combo", - "options": [ - "public_transport", - "picnic_shelter", - "weather_shelter", - "lean_to", - "basic_hut", - "field_shelter", - "rock_shelter" - ], - "label": "Type" - }, - "shop": { - "key": "shop", - "type": "typeCombo", - "label": "Type" - }, - "social_facility_for": { - "key": "social_facility:for", - "type": "radio", - "label": "People served", - "placeholder": "Homeless, Disabled, Child, etc", - "options": [ - "abused", - "child", - "disabled", - "diseased", - "drug_addicted", - "homeless", - "juvenile", - "mental_health", - "migrant", - "orphan", - "senior", - "underprivileged", - "unemployed", - "victim" - ] - }, - "source": { - "key": "source", - "type": "text", - "icon": "source", - "universal": true, - "label": "Source" - }, - "sport": { - "key": "sport", - "type": "combo", - "label": "Sport" - }, - "structure": { - "type": "radio", - "keys": [ - "bridge", - "tunnel", - "embankment", - "cutting" - ], - "label": "Structure", - "placeholder": "Unknown", - "strings": { - "options": { - "bridge": "Bridge", - "tunnel": "Tunnel", - "embankment": "Embankment", - "cutting": "Cutting" - } - } - }, - "studio_type": { - "key": "type", - "type": "combo", - "options": [ - "audio", - "video" - ], - "label": "Type" - }, - "supervised": { - "key": "supervised", - "type": "check", - "label": "Supervised" - }, - "surface": { - "key": "surface", - "type": "combo", - "label": "Surface" - }, - "toilets/disposal": { - "key": "toilets:disposal", - "type": "combo", - "label": "Disposal" - }, - "tourism": { - "key": "tourism", - "type": "typeCombo", - "label": "Type" - }, - "towertype": { - "key": "tower:type", - "type": "combo", - "label": "Tower type" - }, - "tracktype": { - "key": "tracktype", - "type": "combo", - "label": "Type" - }, - "trail_visibility": { - "key": "trail_visibility", - "type": "combo", - "label": "Trail Visibility" - }, - "tree_type": { - "key": "type", - "type": "combo", - "options": [ - "broad_leaved", - "conifer", - "palm" - ], - "label": "Type" - }, - "tunnel": { - "key": "tunnel", - "type": "combo", - "label": "Tunnel" - }, - "vending": { - "key": "vending", - "type": "combo", - "label": "Type of Goods" - }, - "water": { - "key": "water", - "type": "combo", - "label": "Type" - }, - "waterway": { - "key": "waterway", - "type": "typeCombo", - "label": "Type" - }, - "website": { - "key": "website", - "type": "url", - "icon": "website", - "placeholder": "http://example.com/", - "universal": true, - "label": "Website" - }, - "wetland": { - "key": "wetland", - "type": "combo", - "label": "Type" - }, - "wheelchair": { - "key": "wheelchair", - "type": "radio", - "options": [ - "yes", - "limited", - "no" - ], - "icon": "wheelchair", - "universal": true, - "label": "Wheelchair Access" - }, - "wikipedia": { - "key": "wikipedia", - "type": "wikipedia", - "icon": "wikipedia", - "universal": true, - "label": "Wikipedia" - }, - "wood": { - "key": "wood", - "type": "combo", - "label": "Type" - } - } - }, - "imperial": { - "type": "FeatureCollection", - "features": [ - { - "type": "Feature", - "properties": { - "id": 0 - }, - "geometry": { - "type": "MultiPolygon", - "coordinates": [ - [ - [ - [ - -1.426496, - 50.639342 - ], - [ - -1.445953, - 50.648139 - ], - [ - -1.452789, - 50.654283 - ], - [ - -1.485951, - 50.669338 - ], - [ - -1.497426, - 50.672309 - ], - [ - -1.535146, - 50.669379 - ], - [ - -1.551503, - 50.665107 - ], - [ - -1.569488, - 50.658026 - ], - [ - -1.545318, - 50.686103 - ], - [ - -1.50593, - 50.707709 - ], - [ - -1.418691, - 50.733791 - ], - [ - -1.420888, - 50.730455 - ], - [ - -1.423451, - 50.7237 - ], - [ - -1.425364, - 50.72012 - ], - [ - -1.400868, - 50.721991 - ], - [ - -1.377553, - 50.734198 - ], - [ - -1.343495, - 50.761054 - ], - [ - -1.318512, - 50.772162 - ], - [ - -1.295766, - 50.773179 - ], - [ - -1.144276, - 50.733791 - ], - [ - -1.119537, - 50.734198 - ], - [ - -1.10912, - 50.732856 - ], - [ - -1.097035, - 50.726955 - ], - [ - -1.096425, - 50.724433 - ], - [ - -1.097646, - 50.71601 - ], - [ - -1.097035, - 50.713324 - ], - [ - -1.094228, - 50.712633 - ], - [ - -1.085561, - 50.714016 - ], - [ - -1.082753, - 50.713324 - ], - [ - -1.062327, - 50.692816 - ], - [ - -1.062327, - 50.685289 - ], - [ - -1.066965, - 50.685248 - ], - [ - -1.069651, - 50.683498 - ], - [ - -1.071889, - 50.680976 - ], - [ - -1.075307, - 50.678534 - ], - [ - -1.112701, - 50.671454 - ], - [ - -1.128651, - 50.666449 - ], - [ - -1.156361, - 50.650784 - ], - [ - -1.162221, - 50.645982 - ], - [ - -1.164703, - 50.640937 - ], - [ - -1.164666, - 50.639543 - ], - [ - -1.426496, - 50.639342 - ] - ] - ], - [ - [ - [ - -7.240314, - 55.050389 - ], - [ - -7.013736, - 55.1615 - ], - [ - -6.958913, - 55.20349 - ], - [ - -6.571562, - 55.268366 - ], - [ - -6.509633, - 55.31398 - ], - [ - -6.226158, - 55.344406 - ], - [ - -6.07105, - 55.25001 - ], - [ - -5.712696, - 55.017635 - ], - [ - -5.242021, - 54.415204 - ], - [ - -5.695554, - 54.14284 - ], - [ - -5.72473, - 54.07455 - ], - [ - -6.041633, - 54.006238 - ], - [ - -6.153953, - 54.054931 - ], - [ - -6.220539, - 54.098803 - ], - [ - -6.242502, - 54.099758 - ], - [ - -6.263661, - 54.104682 - ], - [ - -6.269887, - 54.097927 - ], - [ - -6.28465, - 54.105226 - ], - [ - -6.299585, - 54.104037 - ], - [ - -6.313796, - 54.099696 - ], - [ - -6.327128, - 54.097888 - ], - [ - -6.338962, - 54.102952 - ], - [ - -6.346662, - 54.109877 - ], - [ - -6.354827, - 54.110652 - ], - [ - -6.368108, - 54.097319 - ], - [ - -6.369348, - 54.091118 - ], - [ - -6.367643, - 54.083418 - ], - [ - -6.366919, - 54.075098 - ], - [ - -6.371157, - 54.066778 - ], - [ - -6.377513, - 54.063264 - ], - [ - -6.401026, - 54.060887 - ], - [ - -6.426761, - 54.05541 - ], - [ - -6.433892, - 54.055306 - ], - [ - -6.4403, - 54.057993 - ], - [ - -6.446243, - 54.062438 - ], - [ - -6.450222, - 54.066675 - ], - [ - -6.450894, - 54.068432 - ], - [ - -6.47854, - 54.067709 - ], - [ - -6.564013, - 54.04895 - ], - [ - -6.571868, - 54.049519 - ], - [ - -6.587164, - 54.053343 - ], - [ - -6.595071, - 54.052412 - ], - [ - -6.60029, - 54.04895 - ], - [ - -6.605217, - 54.044475 - ], - [ - -6.610987, - 54.039235 - ], - [ - -6.616465, - 54.037271 - ], - [ - -6.630624, - 54.041819 - ], - [ - -6.657289, - 54.061146 - ], - [ - -6.672534, - 54.068432 - ], - [ - -6.657082, - 54.091945 - ], - [ - -6.655791, - 54.103314 - ], - [ - -6.666436, - 54.114786 - ], - [ - -6.643957, - 54.131839 - ], - [ - -6.634552, - 54.150133 - ], - [ - -6.640339, - 54.168013 - ], - [ - -6.648448, - 54.173665 - ], - [ - -6.663025, - 54.183826 - ], - [ - -6.683954, - 54.194368 - ], - [ - -6.694651, - 54.197985 - ], - [ - -6.706537, - 54.198915 - ], - [ - -6.717234, - 54.195143 - ], - [ - -6.724779, - 54.188631 - ], - [ - -6.73284, - 54.183567 - ], - [ - -6.744777, - 54.184187 - ], - [ - -6.766481, - 54.192352 - ], - [ - -6.787824, - 54.202998 - ], - [ - -6.807358, - 54.21633 - ], - [ - -6.823946, - 54.23235 - ], - [ - -6.829733, - 54.242375 - ], - [ - -6.833196, - 54.25209 - ], - [ - -6.837743, - 54.260513 - ], - [ - -6.846683, - 54.266456 - ], - [ - -6.882185, - 54.277257 - ], - [ - -6.864667, - 54.282734 - ], - [ - -6.856657, - 54.292811 - ], - [ - -6.858414, - 54.307332 - ], - [ - -6.870015, - 54.326001 - ], - [ - -6.879705, - 54.341594 - ], - [ - -6.885957, - 54.345624 - ], - [ - -6.897895, - 54.346193 - ], - [ - -6.905956, - 54.349035 - ], - [ - -6.915051, - 54.365933 - ], - [ - -6.922028, - 54.372703 - ], - [ - -6.984091, - 54.403089 - ], - [ - -7.017836, - 54.413166 - ], - [ - -7.049255, - 54.411512 - ], - [ - -7.078504, - 54.394717 - ], - [ - -7.127028, - 54.349759 - ], - [ - -7.159894, - 54.335186 - ], - [ - -7.168059, - 54.335031 - ], - [ - -7.185629, - 54.336943 - ], - [ - -7.18947, - 54.335692 - ], - [ - -7.19245, - 54.334721 - ], - [ - -7.193949, - 54.329967 - ], - [ - -7.191468, - 54.323869 - ], - [ - -7.187644, - 54.318804 - ], - [ - -7.185009, - 54.317254 - ], - [ - -7.184647, - 54.316634 - ], - [ - -7.192399, - 54.307384 - ], - [ - -7.193691, - 54.307539 - ], - [ - -7.199168, - 54.303457 - ], - [ - -7.206661, - 54.304903 - ], - [ - -7.211467, - 54.30418 - ], - [ - -7.209038, - 54.293431 - ], - [ - -7.1755, - 54.283664 - ], - [ - -7.181495, - 54.269763 - ], - [ - -7.14589, - 54.25209 - ], - [ - -7.159739, - 54.24067 - ], - [ - -7.153331, - 54.224237 - ], - [ - -7.174725, - 54.216072 - ], - [ - -7.229502, - 54.207545 - ], - [ - -7.240871, - 54.202326 - ], - [ - -7.249088, - 54.197416 - ], - [ - -7.255496, - 54.190854 - ], - [ - -7.261128, - 54.18088 - ], - [ - -7.256322, - 54.176901 - ], - [ - -7.247021, - 54.17225 - ], - [ - -7.24578, - 54.166979 - ], - [ - -7.265366, - 54.16114 - ], - [ - -7.26087, - 54.151166 - ], - [ - -7.263505, - 54.140986 - ], - [ - -7.27074, - 54.132253 - ], - [ - -7.280042, - 54.126155 - ], - [ - -7.293788, - 54.122021 - ], - [ - -7.297353, - 54.125896 - ], - [ - -7.29632, - 54.134991 - ], - [ - -7.296423, - 54.146515 - ], - [ - -7.295028, - 54.155404 - ], - [ - -7.292134, - 54.162638 - ], - [ - -7.295545, - 54.165119 - ], - [ - -7.325982, - 54.154577 - ], - [ - -7.333165, - 54.149409 - ], - [ - -7.333165, - 54.142743 - ], - [ - -7.310324, - 54.114683 - ], - [ - -7.316489, - 54.11428 - ], - [ - -7.326964, - 54.113597 - ], - [ - -7.375488, - 54.123312 - ], - [ - -7.390216, - 54.121194 - ], - [ - -7.39466, - 54.121917 - ], - [ - -7.396624, - 54.126258 - ], - [ - -7.403962, - 54.135043 - ], - [ - -7.41223, - 54.136438 - ], - [ - -7.422255, - 54.135456 - ], - [ - -7.425769, - 54.136955 - ], - [ - -7.414659, - 54.145688 - ], - [ - -7.439619, - 54.146929 - ], - [ - -7.480753, - 54.127653 - ], - [ - -7.502302, - 54.125121 - ], - [ - -7.609014, - 54.139901 - ], - [ - -7.620796, - 54.144965 - ], - [ - -7.624052, - 54.153336 - ], - [ - -7.625706, - 54.162173 - ], - [ - -7.632682, - 54.168529 - ], - [ - -7.70477, - 54.200362 - ], - [ - -7.722599, - 54.202326 - ], - [ - -7.782078, - 54.2 - ], - [ - -7.836959, - 54.204341 - ], - [ - -7.856441, - 54.211421 - ], - [ - -7.86967, - 54.226872 - ], - [ - -7.873649, - 54.271055 - ], - [ - -7.880264, - 54.287023 - ], - [ - -7.894966, - 54.293586 - ], - [ - -7.93411, - 54.297049 - ], - [ - -7.942075, - 54.298873 - ], - [ - -7.950802, - 54.300873 - ], - [ - -7.96801, - 54.31219 - ], - [ - -7.981033, - 54.326556 - ], - [ - -8.002194, - 54.357923 - ], - [ - -8.03134, - 54.358027 - ], - [ - -8.05648, - 54.365882 - ], - [ - -8.079941, - 54.380196 - ], - [ - -8.122419, - 54.415233 - ], - [ - -8.146346, - 54.430736 - ], - [ - -8.156035, - 54.439055 - ], - [ - -8.158128, - 54.447117 - ], - [ - -8.161177, - 54.454817 - ], - [ - -8.173837, - 54.461741 - ], - [ - -8.168467, - 54.463477 - ], - [ - -8.15017, - 54.46939 - ], - [ - -8.097046, - 54.478588 - ], - [ - -8.072448, - 54.487063 - ], - [ - -8.060976, - 54.493316 - ], - [ - -8.05586, - 54.497553 - ], - [ - -8.043561, - 54.512229 - ], - [ - -8.023278, - 54.529696 - ], - [ - -8.002194, - 54.543442 - ], - [ - -7.926411, - 54.533055 - ], - [ - -7.887137, - 54.532125 - ], - [ - -7.848844, - 54.54091 - ], - [ - -7.749264, - 54.596152 - ], - [ - -7.707871, - 54.604162 - ], - [ - -7.707944, - 54.604708 - ], - [ - -7.707951, - 54.604763 - ], - [ - -7.710558, - 54.624264 - ], - [ - -7.721204, - 54.625866 - ], - [ - -7.736758, - 54.619251 - ], - [ - -7.753553, - 54.614497 - ], - [ - -7.769159, - 54.618011 - ], - [ - -7.801199, - 54.634806 - ], - [ - -7.814996, - 54.639457 - ], - [ - -7.822541, - 54.638113 - ], - [ - -7.838044, - 54.63124 - ], - [ - -7.846416, - 54.631447 - ], - [ - -7.85427, - 54.636408 - ], - [ - -7.864347, - 54.649069 - ], - [ - -7.872771, - 54.652221 - ], - [ - -7.890082, - 54.655063 - ], - [ - -7.906619, - 54.661316 - ], - [ - -7.914835, - 54.671651 - ], - [ - -7.907135, - 54.686689 - ], - [ - -7.913233, - 54.688653 - ], - [ - -7.929666, - 54.696714 - ], - [ - -7.880109, - 54.711029 - ], - [ - -7.845899, - 54.731027 - ], - [ - -7.832153, - 54.730614 - ], - [ - -7.803576, - 54.716145 - ], - [ - -7.770503, - 54.706016 - ], - [ - -7.736603, - 54.707463 - ], - [ - -7.70229, - 54.718883 - ], - [ - -7.667512, - 54.738779 - ], - [ - -7.649683, - 54.744877 - ], - [ - -7.61537, - 54.739347 - ], - [ - -7.585398, - 54.744722 - ], - [ - -7.566639, - 54.738675 - ], - [ - -7.556149, - 54.738365 - ], - [ - -7.543075, - 54.741673 - ], - [ - -7.543023, - 54.743791 - ], - [ - -7.548398, - 54.747202 - ], - [ - -7.551705, - 54.754695 - ], - [ - -7.549741, - 54.779603 - ], - [ - -7.543385, - 54.793091 - ], - [ - -7.470831, - 54.845284 - ], - [ - -7.45507, - 54.863009 - ], - [ - -7.444735, - 54.884455 - ], - [ - -7.444735, - 54.894893 - ], - [ - -7.448972, - 54.920318 - ], - [ - -7.445251, - 54.932152 - ], - [ - -7.436983, - 54.938301 - ], - [ - -7.417139, - 54.943056 - ], - [ - -7.415755, - 54.944372 - ], - [ - -7.408665, - 54.951117 - ], - [ - -7.407424, - 54.959437 - ], - [ - -7.413109, - 54.984965 - ], - [ - -7.409078, - 54.992045 - ], - [ - -7.403755, - 54.99313 - ], - [ - -7.40112, - 54.994836 - ], - [ - -7.405254, - 55.003569 - ], - [ - -7.376987, - 55.02889 - ], - [ - -7.366962, - 55.035557 - ], - [ - -7.355024, - 55.040931 - ], - [ - -7.291152, - 55.046615 - ], - [ - -7.282987, - 55.051835 - ], - [ - -7.275288, - 55.058863 - ], - [ - -7.266503, - 55.065167 - ], - [ - -7.247097, - 55.069328 - ], - [ - -7.2471, - 55.069322 - ], - [ - -7.256744, - 55.050686 - ], - [ - -7.240956, - 55.050279 - ], - [ - -7.240314, - 55.050389 - ] - ] - ], - [ - [ - [ - -13.688588, - 57.596259 - ], - [ - -13.690419, - 57.596259 - ], - [ - -13.691314, - 57.596503 - ], - [ - -13.691314, - 57.597154 - ], - [ - -13.690419, - 57.597805 - ], - [ - -13.688588, - 57.597805 - ], - [ - -13.687652, - 57.597154 - ], - [ - -13.687652, - 57.596869 - ], - [ - -13.688588, - 57.596259 - ] - ] - ], - [ - [ - [ - -4.839121, - 54.469789 - ], - [ - -4.979941, - 54.457977 - ], - [ - -5.343644, - 54.878637 - ], - [ - -5.308469, - 55.176452 - ], - [ - -6.272566, - 55.418443 - ], - [ - -8.690528, - 57.833706 - ], - [ - -6.344705, - 59.061083 - ], - [ - -4.204785, - 58.63305 - ], - [ - -2.31566, - 60.699068 - ], - [ - -1.695335, - 60.76432 - ], - [ - -1.58092, - 60.866001 - ], - [ - -0.17022, - 60.897204 - ], - [ - -0.800508, - 59.770037 - ], - [ - -1.292368, - 57.732574 - ], - [ - -1.850077, - 55.766368 - ], - [ - -1.73054, - 55.782219 - ], - [ - 1.892395, - 52.815229 - ], - [ - 1.742775, - 51.364209 - ], - [ - 1.080173, - 50.847526 - ], - [ - 0.000774, - 50.664982 - ], - [ - -0.162997, - 50.752401 - ], - [ - -0.725152, - 50.731879 - ], - [ - -0.768853, - 50.741516 - ], - [ - -0.770985, - 50.736884 - ], - [ - -0.789947, - 50.730048 - ], - [ - -0.812815, - 50.734768 - ], - [ - -0.877742, - 50.761156 - ], - [ - -0.942879, - 50.758338 - ], - [ - -0.992581, - 50.737379 - ], - [ - -1.18513, - 50.766989 - ], - [ - -1.282741, - 50.792353 - ], - [ - -1.375004, - 50.772063 - ], - [ - -1.523427, - 50.719605 - ], - [ - -1.630649, - 50.695128 - ], - [ - -1.663617, - 50.670508 - ], - [ - -1.498021, - 50.40831 - ], - [ - -4.097427, - 49.735486 - ], - [ - -6.825199, - 49.700905 - ], - [ - -5.541541, - 51.446591 - ], - [ - -6.03361, - 51.732369 - ], - [ - -4.791746, - 52.635365 - ], - [ - -4.969244, - 52.637413 - ], - [ - -5.049473, - 53.131209 - ], - [ - -4.787393, - 53.409491 - ], - [ - -4.734148, - 53.424866 - ], - [ - -4.917096, - 53.508212 - ], - [ - -4.839121, - 54.469789 - ] - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "id": 0 - }, - "geometry": { - "type": "MultiPolygon", - "coordinates": [ - [ - [ - [ - -157.018938, - 19.300864 - ], - [ - -179.437336, - 27.295312 - ], - [ - -179.480084, - 28.991459 - ], - [ - -168.707465, - 26.30325 - ], - [ - -163.107414, - 24.60499 - ], - [ - -153.841679, - 20.079306 - ], - [ - -154.233846, - 19.433391 - ], - [ - -153.61725, - 18.900587 - ], - [ - -154.429471, - 18.171036 - ], - [ - -156.780638, - 18.718492 - ], - [ - -157.018938, - 19.300864 - ] - ] - ], - [ - [ - [ - -78.91269, - 43.037032 - ], - [ - -78.964351, - 42.976393 - ], - [ - -78.981718, - 42.979043 - ], - [ - -78.998055, - 42.991111 - ], - [ - -79.01189, - 43.004358 - ], - [ - -79.022046, - 43.010539 - ], - [ - -79.023076, - 43.017015 - ], - [ - -79.00983, - 43.050867 - ], - [ - -79.011449, - 43.065291 - ], - [ - -78.993051, - 43.066174 - ], - [ - -78.975536, - 43.069707 - ], - [ - -78.958905, - 43.070884 - ], - [ - -78.943304, - 43.065291 - ], - [ - -78.917399, - 43.058521 - ], - [ - -78.908569, - 43.049396 - ], - [ - -78.91269, - 43.037032 - ] - ] - ], - [ - [ - [ - -123.03529, - 48.992515 - ], - [ - -123.035308, - 48.992499 - ], - [ - -123.045277, - 48.984361 - ], - [ - -123.08849, - 48.972235 - ], - [ - -123.089345, - 48.987982 - ], - [ - -123.090484, - 48.992499 - ], - [ - -123.090488, - 48.992515 - ], - [ - -123.035306, - 48.992515 - ], - [ - -123.03529, - 48.992515 - ] - ] - ], - [ - [ - [ - -103.837038, - 29.279906 - ], - [ - -103.864121, - 29.281366 - ], - [ - -103.928122, - 29.293019 - ], - [ - -104.01915, - 29.32033 - ], - [ - -104.057313, - 29.339037 - ], - [ - -104.105424, - 29.385675 - ], - [ - -104.139789, - 29.400584 - ], - [ - -104.161648, - 29.416759 - ], - [ - -104.194514, - 29.448927 - ], - [ - -104.212291, - 29.484661 - ], - [ - -104.218698, - 29.489829 - ], - [ - -104.227148, - 29.493033 - ], - [ - -104.251022, - 29.508588 - ], - [ - -104.267171, - 29.526571 - ], - [ - -104.292751, - 29.532824 - ], - [ - -104.320604, - 29.532255 - ], - [ - -104.338484, - 29.524013 - ], - [ - -104.349026, - 29.537578 - ], - [ - -104.430443, - 29.582795 - ], - [ - -104.437832, - 29.58543 - ], - [ - -104.444008, - 29.589203 - ], - [ - -104.448555, - 29.597678 - ], - [ - -104.452069, - 29.607109 - ], - [ - -104.455222, - 29.613387 - ], - [ - -104.469381, - 29.625402 - ], - [ - -104.516639, - 29.654315 - ], - [ - -104.530824, - 29.667906 - ], - [ - -104.535036, - 29.677802 - ], - [ - -104.535191, - 29.687853 - ], - [ - -104.537103, - 29.702116 - ], - [ - -104.543666, - 29.71643 - ], - [ - -104.561391, - 29.745421 - ], - [ - -104.570279, - 29.787511 - ], - [ - -104.583586, - 29.802575 - ], - [ - -104.601207, - 29.81477 - ], - [ - -104.619682, - 29.833064 - ], - [ - -104.623764, - 29.841487 - ], - [ - -104.637588, - 29.887996 - ], - [ - -104.656346, - 29.908201 - ], - [ - -104.660635, - 29.918433 - ], - [ - -104.663478, - 29.923084 - ], - [ - -104.676526, - 29.93683 - ], - [ - -104.680479, - 29.942308 - ], - [ - -104.682469, - 29.952126 - ], - [ - -104.680117, - 29.967784 - ], - [ - -104.680479, - 29.976466 - ], - [ - -104.699108, - 30.03145 - ], - [ - -104.701589, - 30.055324 - ], - [ - -104.698592, - 30.075271 - ], - [ - -104.684639, - 30.111135 - ], - [ - -104.680479, - 30.134131 - ], - [ - -104.67867, - 30.170356 - ], - [ - -104.681564, - 30.192939 - ], - [ - -104.695853, - 30.208441 - ], - [ - -104.715231, - 30.243995 - ], - [ - -104.724585, - 30.252211 - ], - [ - -104.742155, - 30.25986 - ], - [ - -104.74939, - 30.264459 - ], - [ - -104.761689, - 30.284199 - ], - [ - -104.774143, - 30.311588 - ], - [ - -104.788767, - 30.335927 - ], - [ - -104.807732, - 30.346418 - ], - [ - -104.8129, - 30.350707 - ], - [ - -104.814967, - 30.360577 - ], - [ - -104.816001, - 30.371997 - ], - [ - -104.818274, - 30.380524 - ], - [ - -104.824269, - 30.38719 - ], - [ - -104.83755, - 30.394063 - ], - [ - -104.844939, - 30.40104 - ], - [ - -104.853259, - 30.41215 - ], - [ - -104.855016, - 30.417473 - ], - [ - -104.853621, - 30.423984 - ], - [ - -104.852432, - 30.438867 - ], - [ - -104.854655, - 30.448737 - ], - [ - -104.864473, - 30.462018 - ], - [ - -104.866695, - 30.473025 - ], - [ - -104.865248, - 30.479898 - ], - [ - -104.859615, - 30.491112 - ], - [ - -104.859254, - 30.497261 - ], - [ - -104.863026, - 30.502377 - ], - [ - -104.879718, - 30.510852 - ], - [ - -104.882146, - 30.520929 - ], - [ - -104.884007, - 30.541858 - ], - [ - -104.886591, - 30.551883 - ], - [ - -104.898166, - 30.569401 - ], - [ - -104.928242, - 30.599529 - ], - [ - -104.93434, - 30.610536 - ], - [ - -104.941057, - 30.61405 - ], - [ - -104.972735, - 30.618029 - ], - [ - -104.98276, - 30.620716 - ], - [ - -104.989117, - 30.629553 - ], - [ - -104.991649, - 30.640301 - ], - [ - -104.992941, - 30.651464 - ], - [ - -104.995783, - 30.661747 - ], - [ - -105.008495, - 30.676992 - ], - [ - -105.027977, - 30.690117 - ], - [ - -105.049475, - 30.699264 - ], - [ - -105.06813, - 30.702675 - ], - [ - -105.087043, - 30.709806 - ], - [ - -105.133604, - 30.757917 - ], - [ - -105.140425, - 30.750476 - ], - [ - -105.153241, - 30.763188 - ], - [ - -105.157788, - 30.76572 - ], - [ - -105.160889, - 30.764118 - ], - [ - -105.162698, - 30.774919 - ], - [ - -105.167297, - 30.781171 - ], - [ - -105.17479, - 30.783962 - ], - [ - -105.185125, - 30.784634 - ], - [ - -105.195306, - 30.787941 - ], - [ - -105.204917, - 30.80241 - ], - [ - -105.2121, - 30.805718 - ], - [ - -105.21825, - 30.806803 - ], - [ - -105.229257, - 30.810214 - ], - [ - -105.232874, - 30.809128 - ], - [ - -105.239851, - 30.801532 - ], - [ - -105.243985, - 30.799103 - ], - [ - -105.249049, - 30.798845 - ], - [ - -105.259488, - 30.802979 - ], - [ - -105.265844, - 30.808405 - ], - [ - -105.270753, - 30.814348 - ], - [ - -105.277006, - 30.819412 - ], - [ - -105.334315, - 30.843803 - ], - [ - -105.363771, - 30.850366 - ], - [ - -105.376173, - 30.859565 - ], - [ - -105.41555, - 30.902456 - ], - [ - -105.496682, - 30.95651 - ], - [ - -105.530789, - 30.991701 - ], - [ - -105.555955, - 31.002605 - ], - [ - -105.565722, - 31.016661 - ], - [ - -105.578641, - 31.052163 - ], - [ - -105.59094, - 31.071438 - ], - [ - -105.605875, - 31.081928 - ], - [ - -105.623496, - 31.090351 - ], - [ - -105.643805, - 31.103684 - ], - [ - -105.668042, - 31.127869 - ], - [ - -105.675225, - 31.131951 - ], - [ - -105.692278, - 31.137635 - ], - [ - -105.76819, - 31.18001 - ], - [ - -105.777854, - 31.192722 - ], - [ - -105.78483, - 31.211016 - ], - [ - -105.861983, - 31.288376 - ], - [ - -105.880147, - 31.300881 - ], - [ - -105.896994, - 31.305997 - ], - [ - -105.897149, - 31.309511 - ], - [ - -105.908802, - 31.317004 - ], - [ - -105.928052, - 31.326461 - ], - [ - -105.934563, - 31.335504 - ], - [ - -105.941772, - 31.352351 - ], - [ - -105.948515, - 31.361239 - ], - [ - -105.961202, - 31.371006 - ], - [ - -106.004739, - 31.396948 - ], - [ - -106.021147, - 31.402167 - ], - [ - -106.046261, - 31.404648 - ], - [ - -106.065304, - 31.410952 - ], - [ - -106.099385, - 31.428884 - ], - [ - -106.141113, - 31.439167 - ], - [ - -106.164316, - 31.447797 - ], - [ - -106.174471, - 31.460251 - ], - [ - -106.209249, - 31.477305 - ], - [ - -106.215424, - 31.483919 - ], - [ - -106.21744, - 31.488725 - ], - [ - -106.218731, - 31.494616 - ], - [ - -106.222891, - 31.50459 - ], - [ - -106.232658, - 31.519938 - ], - [ - -106.274749, - 31.562622 - ], - [ - -106.286298, - 31.580141 - ], - [ - -106.312292, - 31.648612 - ], - [ - -106.331309, - 31.68215 - ], - [ - -106.35849, - 31.717548 - ], - [ - -106.39177, - 31.745919 - ], - [ - -106.428951, - 31.758476 - ], - [ - -106.473135, - 31.755065 - ], - [ - -106.492797, - 31.759044 - ], - [ - -106.501425, - 31.766344 - ], - [ - -106.506052, - 31.770258 - ], - [ - -106.517189, - 31.773824 - ], - [ - -106.558969, - 31.773876 - ], - [ - -106.584859, - 31.773927 - ], - [ - -106.610697, - 31.773979 - ], - [ - -106.636587, - 31.774082 - ], - [ - -106.662477, - 31.774134 - ], - [ - -106.688315, - 31.774237 - ], - [ - -106.714205, - 31.774237 - ], - [ - -106.740095, - 31.774289 - ], - [ - -106.765933, - 31.774392 - ], - [ - -106.791823, - 31.774444 - ], - [ - -106.817713, - 31.774496 - ], - [ - -106.843603, - 31.774547 - ], - [ - -106.869441, - 31.774599 - ], - [ - -106.895331, - 31.774702 - ], - [ - -106.921221, - 31.774702 - ], - [ - -106.947111, - 31.774754 - ], - [ - -106.973001, - 31.774857 - ], - [ - -106.998891, - 31.774909 - ], - [ - -107.02478, - 31.774961 - ], - [ - -107.05067, - 31.775013 - ], - [ - -107.076509, - 31.775064 - ], - [ - -107.102398, - 31.775168 - ], - [ - -107.128288, - 31.775168 - ], - [ - -107.154127, - 31.775219 - ], - [ - -107.180016, - 31.775374 - ], - [ - -107.205906, - 31.775374 - ], - [ - -107.231796, - 31.775426 - ], - [ - -107.257634, - 31.775478 - ], - [ - -107.283524, - 31.775529 - ], - [ - -107.309414, - 31.775633 - ], - [ - -107.335252, - 31.775684 - ], - [ - -107.361142, - 31.775788 - ], - [ - -107.387032, - 31.775788 - ], - [ - -107.412896, - 31.775839 - ], - [ - -107.438786, - 31.775943 - ], - [ - -107.464676, - 31.775994 - ], - [ - -107.490566, - 31.776098 - ], - [ - -107.516404, - 31.776149 - ], - [ - -107.542294, - 31.776201 - ], - [ - -107.568184, - 31.776253 - ], - [ - -107.594074, - 31.776304 - ], - [ - -107.619964, - 31.776408 - ], - [ - -107.645854, - 31.776459 - ], - [ - -107.671744, - 31.776459 - ], - [ - -107.697633, - 31.776563 - ], - [ - -107.723472, - 31.776614 - ], - [ - -107.749362, - 31.776666 - ], - [ - -107.775251, - 31.776718 - ], - [ - -107.801141, - 31.77677 - ], - [ - -107.82698, - 31.776873 - ], - [ - -107.852869, - 31.776925 - ], - [ - -107.878759, - 31.776925 - ], - [ - -107.904598, - 31.777028 - ], - [ - -107.930487, - 31.77708 - ], - [ - -107.956377, - 31.777131 - ], - [ - -107.982216, - 31.777183 - ], - [ - -108.008105, - 31.777235 - ], - [ - -108.033995, - 31.777338 - ], - [ - -108.059885, - 31.77739 - ], - [ - -108.085723, - 31.77739 - ], - [ - -108.111613, - 31.777545 - ], - [ - -108.137503, - 31.777545 - ], - [ - -108.163341, - 31.777648 - ], - [ - -108.189283, - 31.7777 - ], - [ - -108.215121, - 31.777751 - ], - [ - -108.215121, - 31.770723 - ], - [ - -108.215121, - 31.763695 - ], - [ - -108.215121, - 31.756667 - ], - [ - -108.215121, - 31.749639 - ], - [ - -108.215121, - 31.74256 - ], - [ - -108.215121, - 31.735583 - ], - [ - -108.215121, - 31.728555 - ], - [ - -108.215121, - 31.721476 - ], - [ - -108.215121, - 31.714396 - ], - [ - -108.215121, - 31.70742 - ], - [ - -108.215121, - 31.700392 - ], - [ - -108.215121, - 31.693312 - ], - [ - -108.215121, - 31.686284 - ], - [ - -108.215121, - 31.679256 - ], - [ - -108.215121, - 31.672176 - ], - [ - -108.21507, - 31.665148 - ], - [ - -108.215018, - 31.658172 - ], - [ - -108.215018, - 31.651092 - ], - [ - -108.215018, - 31.644064 - ], - [ - -108.215018, - 31.637036 - ], - [ - -108.215018, - 31.630008 - ], - [ - -108.215018, - 31.62298 - ], - [ - -108.215018, - 31.615952 - ], - [ - -108.215018, - 31.608873 - ], - [ - -108.215018, - 31.601845 - ], - [ - -108.215018, - 31.594817 - ], - [ - -108.215018, - 31.587789 - ], - [ - -108.215018, - 31.580761 - ], - [ - -108.215018, - 31.573733 - ], - [ - -108.215018, - 31.566653 - ], - [ - -108.215018, - 31.559625 - ], - [ - -108.214966, - 31.552597 - ], - [ - -108.214966, - 31.545569 - ], - [ - -108.214966, - 31.538489 - ], - [ - -108.214966, - 31.531461 - ], - [ - -108.214966, - 31.524485 - ], - [ - -108.214966, - 31.517405 - ], - [ - -108.214966, - 31.510378 - ], - [ - -108.214966, - 31.503401 - ], - [ - -108.214966, - 31.496322 - ], - [ - -108.214966, - 31.489242 - ], - [ - -108.214966, - 31.482214 - ], - [ - -108.214966, - 31.475238 - ], - [ - -108.214966, - 31.468158 - ], - [ - -108.214966, - 31.46113 - ], - [ - -108.214966, - 31.454102 - ], - [ - -108.214966, - 31.447074 - ], - [ - -108.214915, - 31.440046 - ], - [ - -108.214863, - 31.432966 - ], - [ - -108.214863, - 31.425938 - ], - [ - -108.214863, - 31.41891 - ], - [ - -108.214863, - 31.411882 - ], - [ - -108.214863, - 31.404803 - ], - [ - -108.214863, - 31.397826 - ], - [ - -108.214863, - 31.390798 - ], - [ - -108.214863, - 31.383719 - ], - [ - -108.214863, - 31.376639 - ], - [ - -108.214863, - 31.369663 - ], - [ - -108.214863, - 31.362635 - ], - [ - -108.214863, - 31.355555 - ], - [ - -108.214863, - 31.348527 - ], - [ - -108.214863, - 31.341551 - ], - [ - -108.214863, - 31.334471 - ], - [ - -108.214811, - 31.327443 - ], - [ - -108.257573, - 31.327391 - ], - [ - -108.300336, - 31.327391 - ], - [ - -108.34302, - 31.327391 - ], - [ - -108.385731, - 31.327391 - ], - [ - -108.428442, - 31.327391 - ], - [ - -108.471152, - 31.327391 - ], - [ - -108.513837, - 31.327391 - ], - [ - -108.556547, - 31.327391 - ], - [ - -108.59931, - 31.327391 - ], - [ - -108.64202, - 31.327391 - ], - [ - -108.684757, - 31.327391 - ], - [ - -108.727467, - 31.327391 - ], - [ - -108.770178, - 31.327391 - ], - [ - -108.812914, - 31.327391 - ], - [ - -108.855625, - 31.327391 - ], - [ - -108.898335, - 31.327391 - ], - [ - -108.941046, - 31.327391 - ], - [ - -108.968282, - 31.327391 - ], - [ - -108.983731, - 31.327391 - ], - [ - -109.026493, - 31.327391 - ], - [ - -109.04743, - 31.327391 - ], - [ - -109.069203, - 31.327391 - ], - [ - -109.111914, - 31.327391 - ], - [ - -109.154599, - 31.327391 - ], - [ - -109.197361, - 31.327391 - ], - [ - -109.240072, - 31.32734 - ], - [ - -109.282782, - 31.32734 - ], - [ - -109.325519, - 31.32734 - ], - [ - -109.368229, - 31.32734 - ], - [ - -109.410914, - 31.32734 - ], - [ - -109.45365, - 31.32734 - ], - [ - -109.496387, - 31.32734 - ], - [ - -109.539071, - 31.32734 - ], - [ - -109.581808, - 31.32734 - ], - [ - -109.624493, - 31.32734 - ], - [ - -109.667177, - 31.32734 - ], - [ - -109.709965, - 31.32734 - ], - [ - -109.75265, - 31.32734 - ], - [ - -109.795335, - 31.32734 - ], - [ - -109.838123, - 31.32734 - ], - [ - -109.880808, - 31.32734 - ], - [ - -109.923596, - 31.327288 - ], - [ - -109.96628, - 31.327236 - ], - [ - -110.008965, - 31.327236 - ], - [ - -110.051702, - 31.327236 - ], - [ - -110.094386, - 31.327236 - ], - [ - -110.137071, - 31.327236 - ], - [ - -110.179807, - 31.327236 - ], - [ - -110.222544, - 31.327236 - ], - [ - -110.265229, - 31.327236 - ], - [ - -110.308017, - 31.327236 - ], - [ - -110.350753, - 31.327236 - ], - [ - -110.39349, - 31.327236 - ], - [ - -110.436174, - 31.327236 - ], - [ - -110.478859, - 31.327236 - ], - [ - -110.521595, - 31.327236 - ], - [ - -110.56428, - 31.327236 - ], - [ - -110.606965, - 31.327236 - ], - [ - -110.649727, - 31.327236 - ], - [ - -110.692438, - 31.327236 - ], - [ - -110.7352, - 31.327236 - ], - [ - -110.777885, - 31.327236 - ], - [ - -110.820595, - 31.327236 - ], - [ - -110.863358, - 31.327236 - ], - [ - -110.906068, - 31.327236 - ], - [ - -110.948753, - 31.327185 - ], - [ - -111.006269, - 31.327185 - ], - [ - -111.067118, - 31.333644 - ], - [ - -111.094455, - 31.342532 - ], - [ - -111.145924, - 31.359069 - ], - [ - -111.197446, - 31.375554 - ], - [ - -111.248864, - 31.392142 - ], - [ - -111.300333, - 31.40873 - ], - [ - -111.351803, - 31.425318 - ], - [ - -111.403299, - 31.441855 - ], - [ - -111.454768, - 31.458339 - ], - [ - -111.506238, - 31.474979 - ], - [ - -111.915464, - 31.601431 - ], - [ - -112.324715, - 31.727987 - ], - [ - -112.733967, - 31.854543 - ], - [ - -113.143218, - 31.981046 - ], - [ - -113.552444, - 32.107602 - ], - [ - -113.961696, - 32.234132 - ], - [ - -114.370921, - 32.360687 - ], - [ - -114.780147, - 32.487243 - ], - [ - -114.816785, - 32.498534 - ], - [ - -114.819373, - 32.499363 - ], - [ - -114.822108, - 32.50024 - ], - [ - -114.809447, - 32.511324 - ], - [ - -114.795546, - 32.552226 - ], - [ - -114.794203, - 32.574111 - ], - [ - -114.802678, - 32.594497 - ], - [ - -114.786813, - 32.621033 - ], - [ - -114.781542, - 32.628061 - ], - [ - -114.758804, - 32.64483 - ], - [ - -114.751156, - 32.65222 - ], - [ - -114.739477, - 32.669066 - ], - [ - -114.731209, - 32.686636 - ], - [ - -114.723871, - 32.711519 - ], - [ - -114.724284, - 32.712835 - ], - [ - -114.724285, - 32.712836 - ], - [ - -114.764541, - 32.709839 - ], - [ - -114.838076, - 32.704206 - ], - [ - -114.911612, - 32.698703 - ], - [ - -114.985199, - 32.693122 - ], - [ - -115.058734, - 32.687567 - ], - [ - -115.13227, - 32.681986 - ], - [ - -115.205806, - 32.676456 - ], - [ - -115.27929, - 32.670823 - ], - [ - -115.352851, - 32.665346 - ], - [ - -115.426386, - 32.659765 - ], - [ - -115.499922, - 32.654209 - ], - [ - -115.573535, - 32.648654 - ], - [ - -115.647019, - 32.643073 - ], - [ - -115.720529, - 32.637518 - ], - [ - -115.794064, - 32.631963 - ], - [ - -115.8676, - 32.626408 - ], - [ - -115.941213, - 32.620827 - ], - [ - -116.014748, - 32.615271 - ], - [ - -116.088232, - 32.609664 - ], - [ - -116.161742, - 32.604161 - ], - [ - -116.235329, - 32.598554 - ], - [ - -116.308891, - 32.593025 - ], - [ - -116.382426, - 32.587469 - ], - [ - -116.455962, - 32.581888 - ], - [ - -116.529472, - 32.576333 - ], - [ - -116.603007, - 32.570804 - ], - [ - -116.676543, - 32.565223 - ], - [ - -116.750104, - 32.559667 - ], - [ - -116.82364, - 32.554086 - ], - [ - -116.897201, - 32.548531 - ], - [ - -116.970737, - 32.542976 - ], - [ - -117.044221, - 32.537421 - ], - [ - -117.125121, - 32.531669 - ], - [ - -117.125969, - 32.538258 - ], - [ - -117.239623, - 32.531308 - ], - [ - -120.274098, - 32.884264 - ], - [ - -121.652736, - 34.467248 - ], - [ - -124.367265, - 37.662798 - ], - [ - -126.739806, - 41.37928 - ], - [ - -126.996297, - 45.773888 - ], - [ - -124.770704, - 48.44258 - ], - [ - -123.734053, - 48.241906 - ], - [ - -123.1663, - 48.27837 - ], - [ - -123.193018, - 48.501035 - ], - [ - -123.176987, - 48.65482 - ], - [ - -122.912481, - 48.753561 - ], - [ - -122.899122, - 48.897797 - ], - [ - -122.837671, - 48.97502 - ], - [ - -122.743986, - 48.980582 - ], - [ - -122.753, - 48.992499 - ], - [ - -122.753012, - 48.992515 - ], - [ - -122.653258, - 48.992515 - ], - [ - -122.433375, - 48.992515 - ], - [ - -122.213517, - 48.992515 - ], - [ - -121.993763, - 48.992515 - ], - [ - -121.773958, - 48.992515 - ], - [ - -121.554152, - 48.992515 - ], - [ - -121.33432, - 48.992515 - ], - [ - -121.114515, - 48.992515 - ], - [ - -95.396937, - 48.99267 - ], - [ - -95.177106, - 48.99267 - ], - [ - -95.168527, - 48.995047 - ], - [ - -95.161887, - 49.001145 - ], - [ - -95.159329, - 49.01179 - ], - [ - -95.159665, - 49.10951 - ], - [ - -95.160027, - 49.223353 - ], - [ - -95.160337, - 49.313012 - ], - [ - -95.160569, - 49.369494 - ], - [ - -95.102821, - 49.35394 - ], - [ - -94.982518, - 49.356162 - ], - [ - -94.926087, - 49.345568 - ], - [ - -94.856195, - 49.318283 - ], - [ - -94.839142, - 49.308878 - ], - [ - -94.827256, - 49.292858 - ], - [ - -94.819892, - 49.252034 - ], - [ - -94.810358, - 49.229606 - ], - [ - -94.806121, - 49.210899 - ], - [ - -94.811185, - 49.166561 - ], - [ - -94.803743, - 49.146407 - ], - [ - -94.792039, - 49.12646 - ], - [ - -94.753772, - 49.026156 - ], - [ - -94.711217, - 48.914586 - ], - [ - -94.711734, - 48.862755 - ], - [ - -94.712147, - 48.842446 - ], - [ - -94.713284, - 48.823843 - ], - [ - -94.710907, - 48.807513 - ], - [ - -94.701786, - 48.790098 - ], - [ - -94.688893, - 48.778832 - ], - [ - -94.592852, - 48.726433 - ], - [ - -94.519161, - 48.70447 - ], - [ - -94.4795, - 48.700698 - ], - [ - -94.311577, - 48.713927 - ], - [ - -94.292586, - 48.711912 - ], - [ - -94.284034, - 48.709069 - ], - [ - -94.274499, - 48.704108 - ], - [ - -94.265482, - 48.697752 - ], - [ - -94.258454, - 48.690828 - ], - [ - -94.255767, - 48.683541 - ], - [ - -94.252459, - 48.662405 - ], - [ - -94.251038, - 48.65729 - ], - [ - -94.23215, - 48.652019 - ], - [ - -94.03485, - 48.643311 - ], - [ - -93.874885, - 48.636206 - ], - [ - -93.835741, - 48.617137 - ], - [ - -93.809386, - 48.543576 - ], - [ - -93.778664, - 48.519468 - ], - [ - -93.756779, - 48.516549 - ], - [ - -93.616297, - 48.531302 - ], - [ - -93.599889, - 48.526341 - ], - [ - -93.566584, - 48.538279 - ], - [ - -93.491756, - 48.542309 - ], - [ - -93.459924, - 48.557399 - ], - [ - -93.45225, - 48.572721 - ], - [ - -93.453774, - 48.586958 - ], - [ - -93.451475, - 48.597422 - ], - [ - -93.417316, - 48.604114 - ], - [ - -93.385716, - 48.614863 - ], - [ - -93.25774, - 48.630314 - ], - [ - -93.131701, - 48.62463 - ], - [ - -92.97972, - 48.61768 - ], - [ - -92.955588, - 48.612228 - ], - [ - -92.884197, - 48.579878 - ], - [ - -92.72555, - 48.548692 - ], - [ - -92.648604, - 48.536263 - ], - [ - -92.630181, - 48.519468 - ], - [ - -92.627468, - 48.502777 - ], - [ - -92.646743, - 48.497428 - ], - [ - -92.691366, - 48.489858 - ], - [ - -92.710641, - 48.482882 - ], - [ - -92.718909, - 48.459782 - ], - [ - -92.704052, - 48.445158 - ], - [ - -92.677129, - 48.441747 - ], - [ - -92.657053, - 48.438233 - ], - [ - -92.570521, - 48.446656 - ], - [ - -92.526932, - 48.445623 - ], - [ - -92.490629, - 48.433117 - ], - [ - -92.474532, - 48.410483 - ], - [ - -92.467581, - 48.394282 - ], - [ - -92.467064, - 48.353225 - ], - [ - -92.462465, - 48.329299 - ], - [ - -92.451381, - 48.312685 - ], - [ - -92.41823, - 48.282041 - ], - [ - -92.38464, - 48.232406 - ], - [ - -92.371851, - 48.222587 - ], - [ - -92.353815, - 48.222897 - ], - [ - -92.327874, - 48.229435 - ], - [ - -92.303663, - 48.239279 - ], - [ - -92.291029, - 48.249562 - ], - [ - -92.292062, - 48.270336 - ], - [ - -92.301416, - 48.290645 - ], - [ - -92.303095, - 48.310928 - ], - [ - -92.281598, - 48.33178 - ], - [ - -92.259118, - 48.339635 - ], - [ - -92.154732, - 48.350125 - ], - [ - -92.070499, - 48.346714 - ], - [ - -92.043421, - 48.334596 - ], - [ - -92.030114, - 48.313176 - ], - [ - -92.021355, - 48.287441 - ], - [ - -92.007997, - 48.262482 - ], - [ - -91.992158, - 48.247909 - ], - [ - -91.975492, - 48.236566 - ], - [ - -91.957302, - 48.228323 - ], - [ - -91.852244, - 48.195974 - ], - [ - -91.764988, - 48.187344 - ], - [ - -91.744137, - 48.179593 - ], - [ - -91.727575, - 48.168327 - ], - [ - -91.695509, - 48.13758 - ], - [ - -91.716438, - 48.112051 - ], - [ - -91.692512, - 48.097866 - ], - [ - -91.618615, - 48.089572 - ], - [ - -91.597479, - 48.090399 - ], - [ - -91.589676, - 48.088332 - ], - [ - -91.581098, - 48.080942 - ], - [ - -91.579806, - 48.070969 - ], - [ - -91.585129, - 48.06084 - ], - [ - -91.586989, - 48.052572 - ], - [ - -91.574845, - 48.048205 - ], - [ - -91.487098, - 48.053476 - ], - [ - -91.464722, - 48.048955 - ], - [ - -91.446274, - 48.040738 - ], - [ - -91.427929, - 48.036449 - ], - [ - -91.3654, - 48.057843 - ], - [ - -91.276362, - 48.064768 - ], - [ - -91.23807, - 48.082648 - ], - [ - -91.203963, - 48.107659 - ], - [ - -91.071103, - 48.170859 - ], - [ - -91.02816, - 48.184838 - ], - [ - -91.008109, - 48.194372 - ], - [ - -90.923153, - 48.227109 - ], - [ - -90.873802, - 48.234344 - ], - [ - -90.840678, - 48.220107 - ], - [ - -90.837939, - 48.210547 - ], - [ - -90.848843, - 48.198713 - ], - [ - -90.849721, - 48.189566 - ], - [ - -90.843003, - 48.176983 - ], - [ - -90.83427, - 48.171789 - ], - [ - -90.823883, - 48.168327 - ], - [ - -90.812307, - 48.160989 - ], - [ - -90.803057, - 48.147166 - ], - [ - -90.796701, - 48.117064 - ], - [ - -90.786469, - 48.10045 - ], - [ - -90.750347, - 48.083991 - ], - [ - -90.701307, - 48.08456 - ], - [ - -90.611079, - 48.103499 - ], - [ - -90.586843, - 48.104817 - ], - [ - -90.573872, - 48.097892 - ], - [ - -90.562194, - 48.088849 - ], - [ - -90.542014, - 48.083733 - ], - [ - -90.531601, - 48.08456 - ], - [ - -90.501887, - 48.094275 - ], - [ - -90.490493, - 48.096239 - ], - [ - -90.483465, - 48.094482 - ], - [ - -90.477858, - 48.091536 - ], - [ - -90.470623, - 48.089882 - ], - [ - -90.178625, - 48.116444 - ], - [ - -90.120386, - 48.115359 - ], - [ - -90.073257, - 48.101199 - ], - [ - -90.061036, - 48.091019 - ], - [ - -90.008222, - 48.029731 - ], - [ - -89.995329, - 48.018595 - ], - [ - -89.980317, - 48.010094 - ], - [ - -89.92045, - 47.98746 - ], - [ - -89.902441, - 47.985909 - ], - [ - -89.803454, - 48.013763 - ], - [ - -89.780975, - 48.017199 - ], - [ - -89.763302, - 48.017303 - ], - [ - -89.745964, - 48.013763 - ], - [ - -89.724596, - 48.005908 - ], - [ - -89.712788, - 48.003376 - ], - [ - -89.678656, - 48.008699 - ], - [ - -89.65659, - 48.007975 - ], - [ - -89.593105, - 47.996503 - ], - [ - -89.581753, - 47.996333 - ], - [ - -89.586724, - 47.992938 - ], - [ - -89.310872, - 47.981097 - ], - [ - -89.072861, - 48.046842 - ], - [ - -88.49789, - 48.212841 - ], - [ - -88.286621, - 48.156675 - ], - [ - -85.939935, - 47.280501 - ], - [ - -84.784644, - 46.770068 - ], - [ - -84.516909, - 46.435083 - ], - [ - -84.489712, - 46.446652 - ], - [ - -84.491052, - 46.457658 - ], - [ - -84.478301, - 46.466467 - ], - [ - -84.465408, - 46.478172 - ], - [ - -84.448096, - 46.489722 - ], - [ - -84.42324, - 46.511581 - ], - [ - -84.389702, - 46.520262 - ], - [ - -84.352469, - 46.522743 - ], - [ - -84.30534, - 46.501607 - ], - [ - -84.242011, - 46.526464 - ], - [ - -84.197285, - 46.546359 - ], - [ - -84.147676, - 46.541346 - ], - [ - -84.110443, - 46.526464 - ], - [ - -84.158812, - 46.433343 - ], - [ - -84.147676, - 46.399882 - ], - [ - -84.129046, - 46.375026 - ], - [ - -84.10543, - 46.347741 - ], - [ - -84.105944, - 46.346374 - ], - [ - -84.117195, - 46.347157 - ], - [ - -84.117489, - 46.338326 - ], - [ - -84.122361, - 46.331922 - ], - [ - -84.112061, - 46.287102 - ], - [ - -84.092672, - 46.227469 - ], - [ - -84.111983, - 46.20337 - ], - [ - -84.015118, - 46.149712 - ], - [ - -83.957038, - 46.045736 - ], - [ - -83.676821, - 46.15388 - ], - [ - -83.429449, - 46.086221 - ], - [ - -83.523049, - 45.892052 - ], - [ - -83.574563, - 45.890259 - ], - [ - -82.551615, - 44.857931 - ], - [ - -82.655591, - 43.968545 - ], - [ - -82.440632, - 43.096285 - ], - [ - -82.460131, - 43.084392 - ], - [ - -82.458894, - 43.083247 - ], - [ - -82.431813, - 43.039387 - ], - [ - -82.424748, - 43.02408 - ], - [ - -82.417242, - 43.01731 - ], - [ - -82.416369, - 43.01742 - ], - [ - -82.416412, - 43.017143 - ], - [ - -82.414603, - 42.983243 - ], - [ - -82.430442, - 42.951307 - ], - [ - -82.453179, - 42.918983 - ], - [ - -82.464781, - 42.883637 - ], - [ - -82.468036, - 42.863974 - ], - [ - -82.482325, - 42.835113 - ], - [ - -82.485271, - 42.818524 - ], - [ - -82.473618, - 42.798164 - ], - [ - -82.470982, - 42.790568 - ], - [ - -82.471344, - 42.779845 - ], - [ - -82.476951, - 42.761474 - ], - [ - -82.48341, - 42.719254 - ], - [ - -82.511264, - 42.646675 - ], - [ - -82.526224, - 42.619906 - ], - [ - -82.549246, - 42.590941 - ], - [ - -82.575833, - 42.571795 - ], - [ - -82.608467, - 42.561098 - ], - [ - -82.644331, - 42.557817 - ], - [ - -82.644698, - 42.557533 - ], - [ - -82.644932, - 42.561634 - ], - [ - -82.637132, - 42.568405 - ], - [ - -82.60902, - 42.579296 - ], - [ - -82.616673, - 42.582828 - ], - [ - -82.636985, - 42.599607 - ], - [ - -82.625357, - 42.616092 - ], - [ - -82.629331, - 42.626394 - ], - [ - -82.638751, - 42.633459 - ], - [ - -82.644344, - 42.640524 - ], - [ - -82.644166, - 42.641056 - ], - [ - -82.716083, - 42.617461 - ], - [ - -82.777592, - 42.408506 - ], - [ - -82.888693, - 42.406093 - ], - [ - -82.889991, - 42.403266 - ], - [ - -82.905739, - 42.387665 - ], - [ - -82.923842, - 42.374419 - ], - [ - -82.937972, - 42.366176 - ], - [ - -82.947686, - 42.363527 - ], - [ - -82.979624, - 42.359406 - ], - [ - -83.042618, - 42.340861 - ], - [ - -83.061899, - 42.32732 - ], - [ - -83.081622, - 42.30907 - ], - [ - -83.11342, - 42.279619 - ], - [ - -83.145306, - 42.066968 - ], - [ - -83.177398, - 41.960666 - ], - [ - -83.21512, - 41.794493 - ], - [ - -82.219051, - 41.516445 - ], - [ - -80.345329, - 42.13344 - ], - [ - -80.316455, - 42.123137 - ], - [ - -79.270266, - 42.591872 - ], - [ - -79.221058, - 42.582892 - ], - [ - -78.871842, - 42.860012 - ], - [ - -78.875011, - 42.867184 - ], - [ - -78.896205, - 42.897209 - ], - [ - -78.901651, - 42.908101 - ], - [ - -78.90901, - 42.952255 - ], - [ - -78.913426, - 42.957848 - ], - [ - -78.932118, - 42.9708 - ], - [ - -78.936386, - 42.979631 - ], - [ - -78.927997, - 43.002003 - ], - [ - -78.893114, - 43.029379 - ], - [ - -78.887963, - 43.051456 - ], - [ - -78.914897, - 43.076477 - ], - [ - -79.026167, - 43.086485 - ], - [ - -79.065231, - 43.10573 - ], - [ - -79.065273, - 43.105897 - ], - [ - -79.065738, - 43.120237 - ], - [ - -79.061423, - 43.130288 - ], - [ - -79.055583, - 43.138427 - ], - [ - -79.051604, - 43.146851 - ], - [ - -79.04933, - 43.159847 - ], - [ - -79.048607, - 43.170622 - ], - [ - -79.053775, - 43.260358 - ], - [ - -79.058425, - 43.277799 - ], - [ - -79.058631, - 43.2782 - ], - [ - -78.990696, - 43.286947 - ], - [ - -78.862059, - 43.324332 - ], - [ - -78.767813, - 43.336418 - ], - [ - -78.516117, - 43.50645 - ], - [ - -76.363317, - 43.943219 - ], - [ - -76.396746, - 44.106667 - ], - [ - -76.364697, - 44.111631 - ], - [ - -76.366146, - 44.117349 - ], - [ - -76.357462, - 44.131478 - ], - [ - -76.183493, - 44.223025 - ], - [ - -76.162644, - 44.229888 - ], - [ - -76.176117, - 44.30795 - ], - [ - -76.046414, - 44.354817 - ], - [ - -75.928746, - 44.391137 - ], - [ - -75.852508, - 44.381639 - ], - [ - -75.849095, - 44.386103 - ], - [ - -75.847623, - 44.392579 - ], - [ - -75.84674, - 44.398172 - ], - [ - -75.845415, - 44.40141 - ], - [ - -75.780803, - 44.432318 - ], - [ - -75.770205, - 44.446153 - ], - [ - -75.772266, - 44.463815 - ], - [ - -75.779184, - 44.48236 - ], - [ - -75.791496, - 44.496513 - ], - [ - -75.791183, - 44.496768 - ], - [ - -75.754622, - 44.527567 - ], - [ - -75.69969, - 44.581673 - ], - [ - -75.578199, - 44.661513 - ], - [ - -75.455958, - 44.741766 - ], - [ - -75.341831, - 44.816749 - ], - [ - -75.270233, - 44.863774 - ], - [ - -75.129647, - 44.925166 - ], - [ - -75.075594, - 44.935501 - ], - [ - -75.058721, - 44.941031 - ], - [ - -75.0149, - 44.96599 - ], - [ - -74.998647, - 44.972398 - ], - [ - -74.940201, - 44.987746 - ], - [ - -74.903744, - 45.005213 - ], - [ - -74.88651, - 45.009398 - ], - [ - -74.868474, - 45.010122 - ], - [ - -74.741557, - 44.998857 - ], - [ - -74.712961, - 44.999254 - ], - [ - -74.695875, - 44.99803 - ], - [ - -74.596114, - 44.998495 - ], - [ - -74.496352, - 44.999012 - ], - [ - -74.197146, - 45.000458 - ], - [ - -71.703551, - 45.012757 - ], - [ - -71.603816, - 45.013274 - ], - [ - -71.505848, - 45.013731 - ], - [ - -71.50408, - 45.013739 - ], - [ - -71.506613, - 45.037045 - ], - [ - -71.504752, - 45.052962 - ], - [ - -71.497259, - 45.066553 - ], - [ - -71.45659, - 45.110994 - ], - [ - -71.451215, - 45.121691 - ], - [ - -71.445996, - 45.140295 - ], - [ - -71.441604, - 45.150682 - ], - [ - -71.413026, - 45.186184 - ], - [ - -71.406567, - 45.204942 - ], - [ - -71.42269, - 45.217189 - ], - [ - -71.449045, - 45.226905 - ], - [ - -71.438813, - 45.233468 - ], - [ - -71.394888, - 45.241529 - ], - [ - -71.381245, - 45.250779 - ], - [ - -71.3521, - 45.278323 - ], - [ - -71.334323, - 45.28871 - ], - [ - -71.311534, - 45.294136 - ], - [ - -71.293396, - 45.292327 - ], - [ - -71.20937, - 45.254758 - ], - [ - -71.185133, - 45.248557 - ], - [ - -71.160329, - 45.245767 - ], - [ - -71.141725, - 45.252329 - ], - [ - -71.111029, - 45.287108 - ], - [ - -71.095242, - 45.300905 - ], - [ - -71.085553, - 45.304213 - ], - [ - -71.084952, - 45.304293 - ], - [ - -71.064211, - 45.307055 - ], - [ - -71.054418, - 45.310362 - ], - [ - -71.036667, - 45.323385 - ], - [ - -71.027598, - 45.33465 - ], - [ - -71.016539, - 45.343125 - ], - [ - -70.993155, - 45.347827 - ], - [ - -70.968118, - 45.34452 - ], - [ - -70.951608, - 45.332014 - ], - [ - -70.906908, - 45.246232 - ], - [ - -70.892412, - 45.234604 - ], - [ - -70.874351, - 45.245663 - ], - [ - -70.870605, - 45.255275 - ], - [ - -70.872491, - 45.274189 - ], - [ - -70.870243, - 45.283129 - ], - [ - -70.862621, - 45.290363 - ], - [ - -70.842389, - 45.301215 - ], - [ - -70.835258, - 45.309794 - ], - [ - -70.83208, - 45.328552 - ], - [ - -70.835465, - 45.373097 - ], - [ - -70.833837, - 45.393096 - ], - [ - -70.825982, - 45.410459 - ], - [ - -70.812986, - 45.42343 - ], - [ - -70.794873, - 45.430406 - ], - [ - -70.771877, - 45.430045 - ], - [ - -70.75255, - 45.422345 - ], - [ - -70.718004, - 45.397282 - ], - [ - -70.696739, - 45.388652 - ], - [ - -70.675785, - 45.388704 - ], - [ - -70.65359, - 45.395473 - ], - [ - -70.641316, - 45.408496 - ], - [ - -70.650257, - 45.427461 - ], - [ - -70.668162, - 45.439036 - ], - [ - -70.707385, - 45.4564 - ], - [ - -70.722836, - 45.470921 - ], - [ - -70.732009, - 45.491591 - ], - [ - -70.730329, - 45.507973 - ], - [ - -70.686792, - 45.572723 - ], - [ - -70.589614, - 45.651788 - ], - [ - -70.572406, - 45.662279 - ], - [ - -70.514735, - 45.681709 - ], - [ - -70.484763, - 45.699641 - ], - [ - -70.4728, - 45.703568 - ], - [ - -70.450424, - 45.703723 - ], - [ - -70.439132, - 45.705893 - ], - [ - -70.419315, - 45.716901 - ], - [ - -70.407351, - 45.731525 - ], - [ - -70.402442, - 45.749663 - ], - [ - -70.403941, - 45.771161 - ], - [ - -70.408282, - 45.781651 - ], - [ - -70.413682, - 45.787697 - ], - [ - -70.41717, - 45.793795 - ], - [ - -70.415232, - 45.804389 - ], - [ - -70.409935, - 45.810745 - ], - [ - -70.389807, - 45.825059 - ], - [ - -70.312654, - 45.867641 - ], - [ - -70.283173, - 45.890482 - ], - [ - -70.262528, - 45.923038 - ], - [ - -70.255939, - 45.948876 - ], - [ - -70.263148, - 45.956834 - ], - [ - -70.280434, - 45.959315 - ], - [ - -70.303947, - 45.968616 - ], - [ - -70.316298, - 45.982982 - ], - [ - -70.316892, - 45.999002 - ], - [ - -70.306143, - 46.035331 - ], - [ - -70.303637, - 46.038483 - ], - [ - -70.294309, - 46.044943 - ], - [ - -70.29201, - 46.048663 - ], - [ - -70.293017, - 46.054038 - ], - [ - -70.296092, - 46.057862 - ], - [ - -70.300795, - 46.061737 - ], - [ - -70.304774, - 46.065975 - ], - [ - -70.311362, - 46.071866 - ], - [ - -70.312629, - 46.079566 - ], - [ - -70.30033, - 46.089281 - ], - [ - -70.26444, - 46.106593 - ], - [ - -70.24948, - 46.120597 - ], - [ - -70.244002, - 46.141009 - ], - [ - -70.249247, - 46.162765 - ], - [ - -70.263329, - 46.183229 - ], - [ - -70.284801, - 46.191859 - ], - [ - -70.280899, - 46.211857 - ], - [ - -70.253407, - 46.251493 - ], - [ - -70.236173, - 46.288339 - ], - [ - -70.223693, - 46.300793 - ], - [ - -70.201886, - 46.305495 - ], - [ - -70.199509, - 46.315262 - ], - [ - -70.197028, - 46.336863 - ], - [ - -70.188398, - 46.358412 - ], - [ - -70.167418, - 46.368179 - ], - [ - -70.153052, - 46.372829 - ], - [ - -70.074323, - 46.419545 - ], - [ - -70.061817, - 46.445409 - ], - [ - -70.050086, - 46.511271 - ], - [ - -70.032723, - 46.609766 - ], - [ - -70.023628, - 46.661287 - ], - [ - -70.007763, - 46.704075 - ], - [ - -69.989961, - 46.721697 - ], - [ - -69.899708, - 46.811562 - ], - [ - -69.809403, - 46.901299 - ], - [ - -69.719099, - 46.991086 - ], - [ - -69.628794, - 47.080797 - ], - [ - -69.538464, - 47.17061 - ], - [ - -69.448159, - 47.260346 - ], - [ - -69.357906, - 47.350134 - ], - [ - -69.267628, - 47.439844 - ], - [ - -69.25091, - 47.452919 - ], - [ - -69.237268, - 47.45881 - ], - [ - -69.221972, - 47.459688 - ], - [ - -69.069655, - 47.431886 - ], - [ - -69.054023, - 47.418399 - ], - [ - -69.054333, - 47.389253 - ], - [ - -69.066193, - 47.32967 - ], - [ - -69.065134, - 47.296339 - ], - [ - -69.06356, - 47.290809 - ], - [ - -69.057486, - 47.269467 - ], - [ - -69.0402, - 47.249055 - ], - [ - -68.906229, - 47.190221 - ], - [ - -68.889718, - 47.190609 - ], - [ - -68.761819, - 47.23704 - ], - [ - -68.71779, - 47.245231 - ], - [ - -68.668801, - 47.243422 - ], - [ - -68.644203, - 47.245283 - ], - [ - -68.6256, - 47.255205 - ], - [ - -68.607926, - 47.269829 - ], - [ - -68.58524, - 47.28249 - ], - [ - -68.539662, - 47.299853 - ], - [ - -68.518009, - 47.304762 - ], - [ - -68.492016, - 47.307553 - ], - [ - -68.466746, - 47.305692 - ], - [ - -68.435327, - 47.291275 - ], - [ - -68.422563, - 47.293109 - ], - [ - -68.410212, - 47.297424 - ], - [ - -68.385614, - 47.301713 - ], - [ - -68.383392, - 47.307139 - ], - [ - -68.384839, - 47.315873 - ], - [ - -68.382049, - 47.32781 - ], - [ - -68.347839, - 47.358506 - ], - [ - -68.299728, - 47.367833 - ], - [ - -68.24645, - 47.360573 - ], - [ - -68.197047, - 47.341401 - ], - [ - -68.184335, - 47.333133 - ], - [ - -68.156068, - 47.306674 - ], - [ - -68.145061, - 47.301455 - ], - [ - -68.115398, - 47.292282 - ], - [ - -68.101446, - 47.286185 - ], - [ - -68.039382, - 47.245231 - ], - [ - -67.993184, - 47.223217 - ], - [ - -67.962436, - 47.197689 - ], - [ - -67.953703, - 47.18663 - ], - [ - -67.949982, - 47.172936 - ], - [ - -67.943419, - 47.164538 - ], - [ - -67.899132, - 47.138778 - ], - [ - -67.870607, - 47.107358 - ], - [ - -67.854742, - 47.09785 - ], - [ - -67.813556, - 47.081908 - ], - [ - -67.808699, - 47.075138 - ], - [ - -67.805185, - 47.035631 - ], - [ - -67.802549, - 46.901247 - ], - [ - -67.800017, - 46.766785 - ], - [ - -67.797433, - 46.632297 - ], - [ - -67.794849, - 46.497861 - ], - [ - -67.792317, - 46.363476 - ], - [ - -67.789733, - 46.229014 - ], - [ - -67.78715, - 46.094552 - ], - [ - -67.784566, - 45.960142 - ], - [ - -67.782757, - 45.95053 - ], - [ - -67.776556, - 45.942933 - ], - [ - -67.767461, - 45.935957 - ], - [ - -67.759658, - 45.928567 - ], - [ - -67.757849, - 45.919472 - ], - [ - -67.769425, - 45.903969 - ], - [ - -67.787356, - 45.890017 - ], - [ - -67.799242, - 45.875651 - ], - [ - -67.792627, - 45.858907 - ], - [ - -67.776091, - 45.840821 - ], - [ - -67.772835, - 45.828057 - ], - [ - -67.779863, - 45.815706 - ], - [ - -67.794126, - 45.799169 - ], - [ - -67.80627, - 45.781754 - ], - [ - -67.811127, - 45.76651 - ], - [ - -67.810816, - 45.762414 - ], - [ - -67.817811, - 45.754896 - ], - [ - -67.821785, - 45.740767 - ], - [ - -67.827673, - 45.739001 - ], - [ - -67.868884, - 45.744593 - ], - [ - -67.856815, - 45.723694 - ], - [ - -67.835768, - 45.703971 - ], - [ - -67.793821, - 45.676301 - ], - [ - -67.733034, - 45.651869 - ], - [ - -67.723173, - 45.645393 - ], - [ - -67.711546, - 45.642155 - ], - [ - -67.697564, - 45.64922 - ], - [ - -67.66695, - 45.620077 - ], - [ - -67.649435, - 45.611247 - ], - [ - -67.603073, - 45.605948 - ], - [ - -67.561862, - 45.596234 - ], - [ - -67.54052, - 45.593879 - ], - [ - -67.442056, - 45.603593 - ], - [ - -67.440939, - 45.604586 - ], - [ - -67.431306, - 45.597941 - ], - [ - -67.422107, - 45.568796 - ], - [ - -67.42619, - 45.533449 - ], - [ - -67.443036, - 45.522184 - ], - [ - -67.467531, - 45.508283 - ], - [ - -67.493214, - 45.493142 - ], - [ - -67.48231, - 45.455521 - ], - [ - -67.428825, - 45.38705 - ], - [ - -67.434561, - 45.350308 - ], - [ - -67.459056, - 45.318424 - ], - [ - -67.468668, - 45.301835 - ], - [ - -67.475024, - 45.282353 - ], - [ - -67.471303, - 45.266282 - ], - [ - -67.427585, - 45.236568 - ], - [ - -67.390533, - 45.193108 - ], - [ - -67.356272, - 45.165926 - ], - [ - -67.31922, - 45.153886 - ], - [ - -67.284648, - 45.169699 - ], - [ - -67.279584, - 45.179052 - ], - [ - -67.279222, - 45.187372 - ], - [ - -67.277207, - 45.195072 - ], - [ - -67.267336, - 45.202513 - ], - [ - -67.254986, - 45.205045 - ], - [ - -67.242428, - 45.202565 - ], - [ - -67.219071, - 45.192126 - ], - [ - -67.206166, - 45.189401 - ], - [ - -67.176015, - 45.178656 - ], - [ - -67.191274, - 45.180365 - ], - [ - -67.204376, - 45.178209 - ], - [ - -67.204724, - 45.177791 - ], - [ - -67.152423, - 45.148932 - ], - [ - -67.048033, - 45.043407 - ], - [ - -66.962727, - 45.047088 - ], - [ - -66.857192, - 44.968696 - ], - [ - -66.897268, - 44.817275 - ], - [ - -67.2159, - 44.593511 - ], - [ - -67.122366, - 44.423624 - ], - [ - -67.68447, - 44.192544 - ], - [ - -67.459678, - 40.781645 - ], - [ - -76.607854, - 32.495823 - ], - [ - -76.798479, - 32.713735 - ], - [ - -78.561892, - 29.037718 - ], - [ - -78.892446, - 29.039659 - ], - [ - -79.762295, - 26.719312 - ], - [ - -80.026352, - 24.932961 - ], - [ - -82.368794, - 23.994833 - ], - [ - -83.806281, - 29.068506 - ], - [ - -87.460772, - 29.089961 - ], - [ - -87.922646, - 28.666131 - ], - [ - -90.461001, - 28.246758 - ], - [ - -91.787336, - 29.11536 - ], - [ - -93.311871, - 29.12431 - ], - [ - -96.423449, - 26.057857 - ], - [ - -97.129057, - 25.991017 - ], - [ - -97.129509, - 25.966833 - ], - [ - -97.139358, - 25.965876 - ], - [ - -97.202171, - 25.960893 - ], - [ - -97.202176, - 25.960857 - ], - [ - -97.204941, - 25.960639 - ], - [ - -97.253051, - 25.963481 - ], - [ - -97.266358, - 25.960639 - ], - [ - -97.2692, - 25.944361 - ], - [ - -97.287649, - 25.928651 - ], - [ - -97.310981, - 25.922088 - ], - [ - -97.328447, - 25.933302 - ], - [ - -97.351107, - 25.918419 - ], - [ - -97.355112, - 25.912786 - ], - [ - -97.35227, - 25.894493 - ], - [ - -97.345165, - 25.871704 - ], - [ - -97.345733, - 25.852222 - ], - [ - -97.36599, - 25.843902 - ], - [ - -97.376015, - 25.846744 - ], - [ - -97.380124, - 25.853203 - ], - [ - -97.383121, - 25.860541 - ], - [ - -97.389891, - 25.865657 - ], - [ - -97.397823, - 25.865812 - ], - [ - -97.399476, - 25.861162 - ], - [ - -97.39989, - 25.855115 - ], - [ - -97.404179, - 25.851395 - ], - [ - -97.425418, - 25.854857 - ], - [ - -97.435727, - 25.869275 - ], - [ - -97.441309, - 25.884933 - ], - [ - -97.448259, - 25.892322 - ], - [ - -97.469421, - 25.892943 - ], - [ - -97.486319, - 25.895733 - ], - [ - -97.502209, - 25.901883 - ], - [ - -97.52027, - 25.912786 - ], - [ - -97.565177, - 25.954748 - ], - [ - -97.594322, - 25.966375 - ], - [ - -97.604787, - 25.979966 - ], - [ - -97.613055, - 25.995985 - ], - [ - -97.622641, - 26.00906 - ], - [ - -97.641451, - 26.022495 - ], - [ - -97.659874, - 26.03066 - ], - [ - -97.679614, - 26.034639 - ], - [ - -97.766948, - 26.039652 - ], - [ - -97.780306, - 26.043218 - ], - [ - -97.782321, - 26.058617 - ], - [ - -97.80201, - 26.063733 - ], - [ - -97.878181, - 26.063733 - ], - [ - -97.941666, - 26.056809 - ], - [ - -97.999233, - 26.064302 - ], - [ - -98.013057, - 26.063682 - ], - [ - -98.044166, - 26.048799 - ], - [ - -98.065457, - 26.042184 - ], - [ - -98.075146, - 26.046628 - ], - [ - -98.083311, - 26.070916 - ], - [ - -98.103103, - 26.074947 - ], - [ - -98.150232, - 26.063682 - ], - [ - -98.185062, - 26.065232 - ], - [ - -98.222656, - 26.075412 - ], - [ - -98.300429, - 26.111431 - ], - [ - -98.309809, - 26.121094 - ], - [ - -98.333037, - 26.15303 - ], - [ - -98.339264, - 26.159851 - ], - [ - -98.365774, - 26.160161 - ], - [ - -98.377272, - 26.163572 - ], - [ - -98.377272, - 26.173649 - ], - [ - -98.36934, - 26.19401 - ], - [ - -98.397193, - 26.201141 - ], - [ - -98.428845, - 26.217729 - ], - [ - -98.456544, - 26.225946 - ], - [ - -98.472383, - 26.207652 - ], - [ - -98.49295, - 26.230596 - ], - [ - -98.521527, - 26.240932 - ], - [ - -98.552791, - 26.248321 - ], - [ - -98.581627, - 26.262274 - ], - [ - -98.640564, - 26.24181 - ], - [ - -98.653663, - 26.244291 - ], - [ - -98.664696, - 26.250647 - ], - [ - -98.685289, - 26.268475 - ], - [ - -98.693325, - 26.270542 - ], - [ - -98.702239, - 26.271628 - ], - [ - -98.704255, - 26.27664 - ], - [ - -98.691465, - 26.290231 - ], - [ - -98.701413, - 26.299119 - ], - [ - -98.713169, - 26.303357 - ], - [ - -98.726217, - 26.30439 - ], - [ - -98.739911, - 26.303253 - ], - [ - -98.735932, - 26.320048 - ], - [ - -98.746397, - 26.332141 - ], - [ - -98.780839, - 26.351674 - ], - [ - -98.795851, - 26.368314 - ], - [ - -98.801329, - 26.372138 - ], - [ - -98.810295, - 26.372448 - ], - [ - -98.817323, - 26.368521 - ], - [ - -98.825023, - 26.366454 - ], - [ - -98.836081, - 26.372138 - ], - [ - -98.842334, - 26.365834 - ], - [ - -98.850835, - 26.364077 - ], - [ - -98.860524, - 26.366299 - ], - [ - -98.870214, - 26.372138 - ], - [ - -98.893029, - 26.367849 - ], - [ - -98.9299, - 26.39224 - ], - [ - -98.945377, - 26.378288 - ], - [ - -98.954136, - 26.393946 - ], - [ - -98.962844, - 26.399527 - ], - [ - -98.986951, - 26.400095 - ], - [ - -99.004056, - 26.393842 - ], - [ - -99.010515, - 26.392602 - ], - [ - -99.016432, - 26.394462 - ], - [ - -99.022995, - 26.403351 - ], - [ - -99.027878, - 26.406245 - ], - [ - -99.047645, - 26.406968 - ], - [ - -99.066351, - 26.404746 - ], - [ - -99.085498, - 26.40764 - ], - [ - -99.106427, - 26.423039 - ], - [ - -99.108907, - 26.434253 - ], - [ - -99.102525, - 26.446966 - ], - [ - -99.09374, - 26.459781 - ], - [ - -99.089373, - 26.47115 - ], - [ - -99.091492, - 26.484018 - ], - [ - -99.10299, - 26.512078 - ], - [ - -99.115108, - 26.525617 - ], - [ - -99.140946, - 26.531405 - ], - [ - -99.164873, - 26.540448 - ], - [ - -99.17128, - 26.563961 - ], - [ - -99.171548, - 26.56583 - ], - [ - -99.213953, - 26.568537 - ], - [ - -99.242801, - 26.579723 - ], - [ - -99.254575, - 26.6018 - ], - [ - -99.258844, - 26.614752 - ], - [ - -99.277683, - 26.638007 - ], - [ - -99.281951, - 26.649781 - ], - [ - -99.277389, - 26.657729 - ], - [ - -99.26635, - 26.653314 - ], - [ - -99.252662, - 26.644483 - ], - [ - -99.240299, - 26.639184 - ], - [ - -99.244861, - 26.652431 - ], - [ - -99.240299, - 26.697763 - ], - [ - -99.242507, - 26.713658 - ], - [ - -99.252368, - 26.743683 - ], - [ - -99.254575, - 26.75899 - ], - [ - -99.252368, - 26.799024 - ], - [ - -99.254575, - 26.810504 - ], - [ - -99.257666, - 26.813153 - ], - [ - -99.262229, - 26.814036 - ], - [ - -99.266497, - 26.817863 - ], - [ - -99.268263, - 26.827872 - ], - [ - -99.271649, - 26.832876 - ], - [ - -99.289458, - 26.84465 - ], - [ - -99.308444, - 26.830521 - ], - [ - -99.316539, - 26.822279 - ], - [ - -99.323457, - 26.810504 - ], - [ - -99.328166, - 26.797258 - ], - [ - -99.329197, - 26.789016 - ], - [ - -99.331699, - 26.78254 - ], - [ - -99.340383, - 26.77312 - ], - [ - -99.366728, - 26.761345 - ], - [ - -99.380269, - 26.777241 - ], - [ - -99.391896, - 26.796963 - ], - [ - -99.412207, - 26.796963 - ], - [ - -99.410883, - 26.808149 - ], - [ - -99.405437, - 26.818452 - ], - [ - -99.396606, - 26.824928 - ], - [ - -99.384979, - 26.824928 - ], - [ - -99.377178, - 26.816686 - ], - [ - -99.374823, - 26.804028 - ], - [ - -99.374234, - 26.791076 - ], - [ - -99.371291, - 26.783128 - ], - [ - -99.360694, - 26.780479 - ], - [ - -99.359369, - 26.790487 - ], - [ - -99.36452, - 26.810504 - ], - [ - -99.357897, - 26.822279 - ], - [ - -99.351274, - 26.83111 - ], - [ - -99.346123, - 26.840824 - ], - [ - -99.344062, - 26.855247 - ], - [ - -99.348772, - 26.899696 - ], - [ - -99.355101, - 26.920302 - ], - [ - -99.36452, - 26.934726 - ], - [ - -99.403377, - 26.952093 - ], - [ - -99.413974, - 26.964162 - ], - [ - -99.401758, - 26.985651 - ], - [ - -99.399991, - 26.999192 - ], - [ - -99.418831, - 27.007728 - ], - [ - -99.441938, - 27.013615 - ], - [ - -99.453271, - 27.019797 - ], - [ - -99.455332, - 27.025979 - ], - [ - -99.464751, - 27.039225 - ], - [ - -99.466959, - 27.047467 - ], - [ - -99.462544, - 27.057181 - ], - [ - -99.461635, - 27.056839 - ], - [ - -99.461728, - 27.056954 - ], - [ - -99.442039, - 27.089614 - ], - [ - -99.439404, - 27.098347 - ], - [ - -99.441419, - 27.107494 - ], - [ - -99.445734, - 27.114728 - ], - [ - -99.450178, - 27.120465 - ], - [ - -99.452452, - 27.125012 - ], - [ - -99.450333, - 27.145166 - ], - [ - -99.435786, - 27.188419 - ], - [ - -99.431988, - 27.207591 - ], - [ - -99.434029, - 27.22697 - ], - [ - -99.440902, - 27.244798 - ], - [ - -99.451832, - 27.26118 - ], - [ - -99.46612, - 27.276527 - ], - [ - -99.468963, - 27.278233 - ], - [ - -99.480409, - 27.283297 - ], - [ - -99.482941, - 27.286708 - ], - [ - -99.484879, - 27.294821 - ], - [ - -99.486584, - 27.297611 - ], - [ - -99.493199, - 27.30128 - ], - [ - -99.521362, - 27.311254 - ], - [ - -99.5148, - 27.321796 - ], - [ - -99.497591, - 27.338798 - ], - [ - -99.494026, - 27.348203 - ], - [ - -99.492889, - 27.358848 - ], - [ - -99.487721, - 27.37187 - ], - [ - -99.484621, - 27.391766 - ], - [ - -99.475706, - 27.414762 - ], - [ - -99.472916, - 27.426647 - ], - [ - -99.473639, - 27.463803 - ], - [ - -99.472916, - 27.468299 - ], - [ - -99.47643, - 27.48251 - ], - [ - -99.480409, - 27.490778 - ], - [ - -99.48829, - 27.494654 - ], - [ - -99.503689, - 27.495584 - ], - [ - -99.509503, - 27.500028 - ], - [ - -99.510071, - 27.510518 - ], - [ - -99.507074, - 27.533437 - ], - [ - -99.507203, - 27.57377 - ], - [ - -99.515006, - 27.588601 - ], - [ - -99.535031, - 27.604828 - ], - [ - -99.55503, - 27.613509 - ], - [ - -99.572264, - 27.61847 - ], - [ - -99.578232, - 27.622811 - ], - [ - -99.590247, - 27.642061 - ], - [ - -99.600169, - 27.646427 - ], - [ - -99.612442, - 27.643637 - ], - [ - -99.633526, - 27.633069 - ], - [ - -99.644869, - 27.632733 - ], - [ - -99.648642, - 27.636919 - ], - [ - -99.658693, - 27.654024 - ], - [ - -99.664739, - 27.659398 - ], - [ - -99.70037, - 27.659191 - ], - [ - -99.705692, - 27.66317 - ], - [ - -99.710674, - 27.670116 - ], - [ - -99.723056, - 27.687381 - ], - [ - -99.730652, - 27.691825 - ], - [ - -99.734037, - 27.702031 - ], - [ - -99.736311, - 27.713607 - ], - [ - -99.740445, - 27.722159 - ], - [ - -99.747344, - 27.726009 - ], - [ - -99.765198, - 27.731177 - ], - [ - -99.774577, - 27.735828 - ], - [ - -99.78685, - 27.748488 - ], - [ - -99.795428, - 27.761924 - ], - [ - -99.806963, - 27.771423 - ], - [ - -99.808167, - 27.772414 - ], - [ - -99.83292, - 27.776755 - ], - [ - -99.832971, - 27.782181 - ], - [ - -99.844779, - 27.793576 - ], - [ - -99.858241, - 27.803524 - ], - [ - -99.863357, - 27.804661 - ], - [ - -99.864727, - 27.814324 - ], - [ - -99.861858, - 27.83608 - ], - [ - -99.863357, - 27.845666 - ], - [ - -99.870928, - 27.854477 - ], - [ - -99.880204, - 27.859231 - ], - [ - -99.888007, - 27.864812 - ], - [ - -99.891288, - 27.876026 - ], - [ - -99.882684, - 27.89158 - ], - [ - -99.878808, - 27.901838 - ], - [ - -99.88134, - 27.906463 - ], - [ - -99.896766, - 27.912923 - ], - [ - -99.914336, - 27.928245 - ], - [ - -99.929916, - 27.946331 - ], - [ - -99.939683, - 27.961085 - ], - [ - -99.928289, - 27.975761 - ], - [ - -99.940717, - 27.983254 - ], - [ - -99.961852, - 27.987492 - ], - [ - -99.976606, - 27.992453 - ], - [ - -99.991127, - 28.007801 - ], - [ - -100.000584, - 28.02041 - ], - [ - -100.007457, - 28.033561 - ], - [ - -100.014123, - 28.050459 - ], - [ - -100.013503, - 28.056971 - ], - [ - -100.010506, - 28.063611 - ], - [ - -100.010196, - 28.068882 - ], - [ - -100.017585, - 28.070949 - ], - [ - -100.031538, - 28.081801 - ], - [ - -100.045077, - 28.095289 - ], - [ - -100.048023, - 28.102523 - ], - [ - -100.048901, - 28.115959 - ], - [ - -100.056498, - 28.137922 - ], - [ - -100.074895, - 28.154407 - ], - [ - -100.172873, - 28.198538 - ], - [ - -100.189203, - 28.201329 - ], - [ - -100.197626, - 28.207168 - ], - [ - -100.201192, - 28.220346 - ], - [ - -100.202949, - 28.234428 - ], - [ - -100.205946, - 28.242877 - ], - [ - -100.212819, - 28.245073 - ], - [ - -100.240724, - 28.249698 - ], - [ - -100.257932, - 28.260524 - ], - [ - -100.275089, - 28.277242 - ], - [ - -100.284339, - 28.296517 - ], - [ - -100.277931, - 28.314888 - ], - [ - -100.278551, - 28.331088 - ], - [ - -100.293899, - 28.353413 - ], - [ - -100.322631, - 28.386899 - ], - [ - -100.331675, - 28.422013 - ], - [ - -100.336326, - 28.458574 - ], - [ - -100.340201, - 28.464259 - ], - [ - -100.348315, - 28.470253 - ], - [ - -100.355549, - 28.478185 - ], - [ - -100.35679, - 28.489322 - ], - [ - -100.351622, - 28.496711 - ], - [ - -100.322631, - 28.510406 - ], - [ - -100.364024, - 28.524797 - ], - [ - -100.38423, - 28.537174 - ], - [ - -100.397769, - 28.557586 - ], - [ - -100.398751, - 28.568645 - ], - [ - -100.397097, - 28.592726 - ], - [ - -100.401438, - 28.60226 - ], - [ - -100.411463, - 28.609314 - ], - [ - -100.434821, - 28.619133 - ], - [ - -100.44619, - 28.626497 - ], - [ - -100.444898, - 28.643782 - ], - [ - -100.481381, - 28.686054 - ], - [ - -100.493939, - 28.708378 - ], - [ - -100.519054, - 28.804961 - ], - [ - -100.524996, - 28.814831 - ], - [ - -100.529285, - 28.819947 - ], - [ - -100.534453, - 28.830231 - ], - [ - -100.538639, - 28.835631 - ], - [ - -100.54515, - 28.83899 - ], - [ - -100.559671, - 28.839378 - ], - [ - -100.566234, - 28.842504 - ], - [ - -100.569696, - 28.84961 - ], - [ - -100.56334, - 28.86209 - ], - [ - -100.566234, - 28.869789 - ], - [ - -100.571763, - 28.8732 - ], - [ - -100.586543, - 28.879789 - ], - [ - -100.58954, - 28.883458 - ], - [ - -100.594966, - 28.899322 - ], - [ - -100.606955, - 28.910123 - ], - [ - -100.618841, - 28.917926 - ], - [ - -100.624318, - 28.924721 - ], - [ - -100.624783, - 28.93777 - ], - [ - -100.626696, - 28.948338 - ], - [ - -100.630778, - 28.956683 - ], - [ - -100.637909, - 28.962884 - ], - [ - -100.628918, - 28.98433 - ], - [ - -100.632793, - 29.005156 - ], - [ - -100.652224, - 29.044817 - ], - [ - -100.660854, - 29.102669 - ], - [ - -100.668967, - 29.116208 - ], - [ - -100.678165, - 29.119412 - ], - [ - -100.690826, - 29.121014 - ], - [ - -100.70204, - 29.12365 - ], - [ - -100.706846, - 29.130187 - ], - [ - -100.70974, - 29.135561 - ], - [ - -100.762501, - 29.173776 - ], - [ - -100.770098, - 29.187289 - ], - [ - -100.762088, - 29.208658 - ], - [ - -100.783172, - 29.243074 - ], - [ - -100.796143, - 29.257673 - ], - [ - -100.81609, - 29.270773 - ], - [ - -100.86389, - 29.290616 - ], - [ - -100.871797, - 29.296456 - ], - [ - -100.891227, - 29.318547 - ], - [ - -100.91474, - 29.337048 - ], - [ - -100.987397, - 29.366322 - ], - [ - -100.998301, - 29.372472 - ], - [ - -101.008068, - 29.380585 - ], - [ - -101.016232, - 29.390068 - ], - [ - -101.022175, - 29.40048 - ], - [ - -101.025948, - 29.414356 - ], - [ - -101.029617, - 29.442984 - ], - [ - -101.037782, - 29.460063 - ], - [ - -101.039026, - 29.460452 - ], - [ - -101.040188, - 29.457132 - ], - [ - -101.045487, - 29.451245 - ], - [ - -101.060205, - 29.449184 - ], - [ - -101.067711, - 29.45095 - ], - [ - -101.076101, - 29.453894 - ], - [ - -101.085962, - 29.454483 - ], - [ - -101.098031, - 29.449184 - ], - [ - -101.113043, - 29.466552 - ], - [ - -101.142774, - 29.475383 - ], - [ - -101.174124, - 29.475971 - ], - [ - -101.193699, - 29.469495 - ], - [ - -101.198703, - 29.473911 - ], - [ - -101.198851, - 29.476854 - ], - [ - -101.184132, - 29.497754 - ], - [ - -101.184868, - 29.512767 - ], - [ - -101.195171, - 29.521892 - ], - [ - -101.214157, - 29.518065 - ], - [ - -101.245213, - 29.493044 - ], - [ - -101.265818, - 29.487157 - ], - [ - -101.290545, - 29.49746 - ], - [ - -101.297315, - 29.503936 - ], - [ - -101.300995, - 29.512767 - ], - [ - -101.294372, - 29.520715 - ], - [ - -101.273177, - 29.524247 - ], - [ - -101.259195, - 29.533372 - ], - [ - -101.243888, - 29.554861 - ], - [ - -101.231966, - 29.580176 - ], - [ - -101.227845, - 29.599899 - ], - [ - -101.239178, - 29.616677 - ], - [ - -101.26052, - 29.613439 - ], - [ - -101.281272, - 29.597249 - ], - [ - -101.290545, - 29.575761 - ], - [ - -101.295255, - 29.570168 - ], - [ - -101.306146, - 29.574583 - ], - [ - -101.317626, - 29.584003 - ], - [ - -101.323955, - 29.592539 - ], - [ - -101.323661, - 29.603137 - ], - [ - -101.318804, - 29.616383 - ], - [ - -101.311445, - 29.628158 - ], - [ - -101.303497, - 29.634045 - ], - [ - -101.303669, - 29.631411 - ], - [ - -101.302727, - 29.633851 - ], - [ - -101.301073, - 29.649509 - ], - [ - -101.30978, - 29.654548 - ], - [ - -101.336239, - 29.654315 - ], - [ - -101.349029, - 29.660103 - ], - [ - -101.357684, - 29.667441 - ], - [ - -101.364351, - 29.676665 - ], - [ - -101.376624, - 29.700643 - ], - [ - -101.383368, - 29.718497 - ], - [ - -101.39962, - 29.740718 - ], - [ - -101.406545, - 29.752888 - ], - [ - -101.409309, - 29.765781 - ], - [ - -101.405098, - 29.778442 - ], - [ - -101.414012, - 29.774411 - ], - [ - -101.424218, - 29.771414 - ], - [ - -101.435096, - 29.770122 - ], - [ - -101.446103, - 29.771052 - ], - [ - -101.455689, - 29.77591 - ], - [ - -101.462433, - 29.788932 - ], - [ - -101.470908, - 29.791516 - ], - [ - -101.490286, - 29.785547 - ], - [ - -101.505763, - 29.773894 - ], - [ - -101.521809, - 29.765936 - ], - [ - -101.542893, - 29.771052 - ], - [ - -101.539689, - 29.779191 - ], - [ - -101.530516, - 29.796477 - ], - [ - -101.528604, - 29.801438 - ], - [ - -101.531912, - 29.811101 - ], - [ - -101.539172, - 29.817974 - ], - [ - -101.546458, - 29.820145 - ], - [ - -101.549766, - 29.815701 - ], - [ - -101.553977, - 29.796684 - ], - [ - -101.564907, - 29.786478 - ], - [ - -101.580281, - 29.781568 - ], - [ - -101.632216, - 29.775651 - ], - [ - -101.794531, - 29.795857 - ], - [ - -101.80298, - 29.801438 - ], - [ - -101.805978, - 29.811928 - ], - [ - -101.812695, - 29.812032 - ], - [ - -101.82409, - 29.805184 - ], - [ - -101.857602, - 29.805184 - ], - [ - -101.877524, - 29.810843 - ], - [ - -101.88742, - 29.81229 - ], - [ - -101.895455, - 29.808621 - ], - [ - -101.90238, - 29.803247 - ], - [ - -101.910881, - 29.799888 - ], - [ - -101.920157, - 29.798182 - ], - [ - -101.929613, - 29.797717 - ], - [ - -101.942662, - 29.803608 - ], - [ - -101.957054, - 29.814047 - ], - [ - -101.972246, - 29.818181 - ], - [ - -101.98793, - 29.805184 - ], - [ - -102.014595, - 29.810998 - ], - [ - -102.109344, - 29.80211 - ], - [ - -102.145647, - 29.815701 - ], - [ - -102.157248, - 29.824537 - ], - [ - -102.203679, - 29.846138 - ], - [ - -102.239775, - 29.849135 - ], - [ - -102.253444, - 29.855285 - ], - [ - -102.258276, - 29.873475 - ], - [ - -102.276181, - 29.869547 - ], - [ - -102.289023, - 29.878126 - ], - [ - -102.302175, - 29.889391 - ], - [ - -102.321011, - 29.893939 - ], - [ - -102.330235, - 29.888926 - ], - [ - -102.339769, - 29.870633 - ], - [ - -102.351061, - 29.866602 - ], - [ - -102.36323, - 29.864276 - ], - [ - -102.370723, - 29.857765 - ], - [ - -102.374547, - 29.848102 - ], - [ - -102.376589, - 29.821488 - ], - [ - -102.380051, - 29.811386 - ], - [ - -102.404132, - 29.780793 - ], - [ - -102.406096, - 29.777279 - ], - [ - -102.515288, - 29.784721 - ], - [ - -102.523066, - 29.782318 - ], - [ - -102.531127, - 29.769915 - ], - [ - -102.54154, - 29.762474 - ], - [ - -102.543349, - 29.760123 - ], - [ - -102.546578, - 29.757875 - ], - [ - -102.553141, - 29.756738 - ], - [ - -102.558309, - 29.759089 - ], - [ - -102.562882, - 29.769347 - ], - [ - -102.566758, - 29.771052 - ], - [ - -102.58531, - 29.764696 - ], - [ - -102.621225, - 29.747281 - ], - [ - -102.638743, - 29.743715 - ], - [ - -102.676054, - 29.74449 - ], - [ - -102.683469, - 29.743715 - ], - [ - -102.69104, - 29.736817 - ], - [ - -102.693624, - 29.729401 - ], - [ - -102.694709, - 29.720616 - ], - [ - -102.697758, - 29.709557 - ], - [ - -102.726748, - 29.664495 - ], - [ - -102.73127, - 29.650594 - ], - [ - -102.735507, - 29.649509 - ], - [ - -102.751656, - 29.622457 - ], - [ - -102.75176, - 29.620157 - ], - [ - -102.761346, - 29.603414 - ], - [ - -102.767598, - 29.59729 - ], - [ - -102.779665, - 29.592303 - ], - [ - -102.774084, - 29.579617 - ], - [ - -102.776461, - 29.575948 - ], - [ - -102.785892, - 29.571814 - ], - [ - -102.78075, - 29.558249 - ], - [ - -102.786512, - 29.550497 - ], - [ - -102.795478, - 29.54427 - ], - [ - -102.827311, - 29.470502 - ], - [ - -102.833951, - 29.461355 - ], - [ - -102.839067, - 29.45195 - ], - [ - -102.841134, - 29.438308 - ], - [ - -102.838705, - 29.426939 - ], - [ - -102.834984, - 29.415699 - ], - [ - -102.835191, - 29.403839 - ], - [ - -102.844545, - 29.390533 - ], - [ - -102.845578, - 29.384719 - ], - [ - -102.838033, - 29.370534 - ], - [ - -102.837672, - 29.366322 - ], - [ - -102.84656, - 29.361749 - ], - [ - -102.853872, - 29.361 - ], - [ - -102.859867, - 29.361155 - ], - [ - -102.864957, - 29.359527 - ], - [ - -102.876972, - 29.350871 - ], - [ - -102.883069, - 29.343766 - ], - [ - -102.885188, - 29.333379 - ], - [ - -102.885498, - 29.314801 - ], - [ - -102.899399, - 29.276095 - ], - [ - -102.899709, - 29.2639 - ], - [ - -102.892139, - 29.254391 - ], - [ - -102.867954, - 29.240387 - ], - [ - -102.858781, - 29.229147 - ], - [ - -102.869866, - 29.224781 - ], - [ - -102.896893, - 29.220285 - ], - [ - -102.942265, - 29.190209 - ], - [ - -102.947536, - 29.182018 - ], - [ - -102.969757, - 29.192845 - ], - [ - -102.988386, - 29.177135 - ], - [ - -103.015826, - 29.126776 - ], - [ - -103.024275, - 29.116157 - ], - [ - -103.032621, - 29.110214 - ], - [ - -103.072541, - 29.091404 - ], - [ - -103.080758, - 29.085203 - ], - [ - -103.085589, - 29.07572 - ], - [ - -103.091532, - 29.057866 - ], - [ - -103.095356, - 29.060294 - ], - [ - -103.104684, - 29.057866 - ], - [ - -103.109205, - 29.023372 - ], - [ - -103.122771, - 28.996474 - ], - [ - -103.147989, - 28.985105 - ], - [ - -103.187108, - 28.990221 - ], - [ - -103.241756, - 29.003502 - ], - [ - -103.301545, - 29.002365 - ], - [ - -103.316247, - 29.010065 - ], - [ - -103.311514, - 29.026043 - ], - [ - -103.309994, - 29.031175 - ], - [ - -103.3248, - 29.026808 - ], - [ - -103.330484, - 29.023733 - ], - [ - -103.342602, - 29.041226 - ], - [ - -103.351671, - 29.039417 - ], - [ - -103.360534, - 29.029831 - ], - [ - -103.372083, - 29.023733 - ], - [ - -103.38663, - 29.028798 - ], - [ - -103.414639, - 29.052414 - ], - [ - -103.423605, - 29.057866 - ], - [ - -103.435697, - 29.061121 - ], - [ - -103.478537, - 29.08205 - ], - [ - -103.529748, - 29.126776 - ], - [ - -103.535588, - 29.135122 - ], - [ - -103.538223, - 29.142408 - ], - [ - -103.541711, - 29.148816 - ], - [ - -103.550238, - 29.154656 - ], - [ - -103.558015, - 29.156206 - ], - [ - -103.58499, - 29.154656 - ], - [ - -103.673125, - 29.173569 - ], - [ - -103.702477, - 29.187858 - ], - [ - -103.749476, - 29.222972 - ], - [ - -103.759062, - 29.226848 - ], - [ - -103.770767, - 29.229845 - ], - [ - -103.777718, - 29.235297 - ], - [ - -103.769424, - 29.257543 - ], - [ - -103.774229, - 29.267517 - ], - [ - -103.78366, - 29.274803 - ], - [ - -103.794177, - 29.277594 - ], - [ - -103.837038, - 29.279906 - ] - ] - ], - [ - [ - [ - 178.301106, - 52.056551 - ], - [ - 179.595462, - 52.142083 - ], - [ - 179.825447, - 51.992849 - ], - [ - 179.661729, - 51.485763 - ], - [ - 179.723231, - 51.459963 - ], - [ - 179.408066, - 51.209841 - ], - [ - 178.411463, - 51.523605 - ], - [ - 177.698335, - 51.877899 - ], - [ - 177.16784, - 51.581866 - ], - [ - 176.487008, - 52.175325 - ], - [ - 174.484678, - 52.08716 - ], - [ - 172.866263, - 52.207379 - ], - [ - 172.825506, - 52.716846 - ], - [ - 172.747012, - 52.654022 - ], - [ - 172.08261, - 52.952695 - ], - [ - 172.942925, - 53.183013 - ], - [ - 173.029416, - 52.993628 - ], - [ - 173.127208, - 52.99494 - ], - [ - 173.143321, - 52.990383 - ], - [ - 173.175059, - 52.971747 - ], - [ - 173.182932, - 52.968373 - ], - [ - 176.45233, - 52.628178 - ], - [ - 176.468135, - 52.488358 - ], - [ - 177.900385, - 52.488358 - ], - [ - 178.007601, - 52.179677 - ], - [ - 178.301106, - 52.056551 - ] - ] - ], - [ - [ - [ - -168.899607, - 65.747626 - ], - [ - -168.909861, - 65.739569 - ], - [ - -168.926218, - 65.739895 - ], - [ - -168.942128, - 65.74372 - ], - [ - -168.951731, - 65.75316 - ], - [ - -168.942983, - 65.764716 - ], - [ - -168.920115, - 65.768866 - ], - [ - -168.907908, - 65.768297 - ], - [ - -168.902781, - 65.761542 - ], - [ - -168.899607, - 65.747626 - ] - ] - ], - [ - [ - [ - -131.160718, - 54.787192 - ], - [ - -132.853508, - 54.482536 - ], - [ - -134.77719, - 54.717786 - ], - [ - -142.6966, - 55.845503 - ], - [ - -142.861997, - 49.948308 - ], - [ - -155.675916, - 51.109976 - ], - [ - -164.492732, - 50.603976 - ], - [ - -164.691217, - 50.997975 - ], - [ - -171.246993, - 49.948308 - ], - [ - -171.215436, - 50.576636 - ], - [ - -173.341669, - 50.968826 - ], - [ - -173.362022, - 51.082198 - ], - [ - -177.799603, - 51.272899 - ], - [ - -179.155463, - 50.982285 - ], - [ - -179.476076, - 52.072632 - ], - [ - -177.11459, - 52.248701 - ], - [ - -177.146284, - 52.789384 - ], - [ - -174.777218, - 52.443779 - ], - [ - -174.773743, - 52.685853 - ], - [ - -173.653194, - 52.704099 - ], - [ - -173.790528, - 53.469081 - ], - [ - -171.063371, - 53.604473 - ], - [ - -170.777733, - 59.291898 - ], - [ - -174.324884, - 60.332184 - ], - [ - -171.736408, - 62.68026 - ], - [ - -172.315705, - 62.725352 - ], - [ - -171.995091, - 63.999658 - ], - [ - -168.501424, - 65.565173 - ], - [ - -168.714145, - 65.546708 - ], - [ - -168.853077, - 68.370871 - ], - [ - -161.115601, - 72.416214 - ], - [ - -146.132257, - 70.607941 - ], - [ - -140.692512, - 69.955349 - ], - [ - -141.145395, - 69.671641 - ], - [ - -141.015207, - 69.654202 - ], - [ - -141.006459, - 69.651272 - ], - [ - -141.005564, - 69.650946 - ], - [ - -141.005549, - 69.650941 - ], - [ - -141.005471, - 69.505164 - ], - [ - -141.001208, - 60.466879 - ], - [ - -141.001156, - 60.321074 - ], - [ - -140.994929, - 60.304382 - ], - [ - -140.979555, - 60.295804 - ], - [ - -140.909146, - 60.28366 - ], - [ - -140.768457, - 60.259269 - ], - [ - -140.660505, - 60.24051 - ], - [ - -140.533743, - 60.218548 - ], - [ - -140.518705, - 60.22387 - ], - [ - -140.506664, - 60.236324 - ], - [ - -140.475323, - 60.276477 - ], - [ - -140.462791, - 60.289138 - ], - [ - -140.447805, - 60.29446 - ], - [ - -140.424111, - 60.293168 - ], - [ - -140.32497, - 60.267537 - ], - [ - -140.169243, - 60.227229 - ], - [ - -140.01579, - 60.187387 - ], - [ - -139.967757, - 60.188369 - ], - [ - -139.916933, - 60.207851 - ], - [ - -139.826318, - 60.256478 - ], - [ - -139.728417, - 60.309033 - ], - [ - -139.679816, - 60.32681 - ], - [ - -139.628346, - 60.334096 - ], - [ - -139.517965, - 60.336732 - ], - [ - -139.413992, - 60.339212 - ], - [ - -139.262193, - 60.342778 - ], - [ - -139.101608, - 60.346602 - ], - [ - -139.079465, - 60.341021 - ], - [ - -139.06869, - 60.322056 - ], - [ - -139.073186, - 60.299835 - ], - [ - -139.113468, - 60.226816 - ], - [ - -139.149615, - 60.161187 - ], - [ - -139.183231, - 60.100157 - ], - [ - -139.182146, - 60.073389 - ], - [ - -139.112305, - 60.031376 - ], - [ - -139.060207, - 60.000059 - ], - [ - -139.051611, - 59.994892 - ], - [ - -139.003759, - 59.977219 - ], - [ - -138.842425, - 59.937686 - ], - [ - -138.742586, - 59.913192 - ], - [ - -138.704888, - 59.898464 - ], - [ - -138.697188, - 59.89371 - ], - [ - -138.692098, - 59.886888 - ], - [ - -138.654349, - 59.805498 - ], - [ - -138.63745, - 59.784052 - ], - [ - -138.59921, - 59.753822 - ], - [ - -138.488881, - 59.696357 - ], - [ - -138.363617, - 59.631142 - ], - [ - -138.219543, - 59.556004 - ], - [ - -138.067614, - 59.476991 - ], - [ - -137.91057, - 59.395187 - ], - [ - -137.758305, - 59.315915 - ], - [ - -137.611363, - 59.239331 - ], - [ - -137.594181, - 59.225275 - ], - [ - -137.582088, - 59.206568 - ], - [ - -137.5493, - 59.134531 - ], - [ - -137.521007, - 59.072364 - ], - [ - -137.484394, - 58.991904 - ], - [ - -137.507752, - 58.939969 - ], - [ - -137.50876, - 58.914906 - ], - [ - -137.486875, - 58.900075 - ], - [ - -137.453466, - 58.899145 - ], - [ - -137.423106, - 58.907723 - ], - [ - -137.338098, - 58.955472 - ], - [ - -137.2819, - 58.98715 - ], - [ - -137.172346, - 59.027148 - ], - [ - -137.062367, - 59.067572 - ], - [ - -137.047109, - 59.07331 - ], - [ - -136.942282, - 59.11107 - ], - [ - -136.840816, - 59.148174 - ], - [ - -136.785496, - 59.157217 - ], - [ - -136.671911, - 59.150809 - ], - [ - -136.613491, - 59.15422 - ], - [ - -136.569489, - 59.172152 - ], - [ - -136.484791, - 59.2538 - ], - [ - -136.483551, - 59.257469 - ], - [ - -136.466549, - 59.287803 - ], - [ - -136.467092, - 59.38449 - ], - [ - -136.467557, - 59.461643 - ], - [ - -136.415958, - 59.452238 - ], - [ - -136.36684, - 59.449551 - ], - [ - -136.319995, - 59.459059 - ], - [ - -136.275036, - 59.486448 - ], - [ - -136.244728, - 59.528202 - ], - [ - -136.258474, - 59.556107 - ], - [ - -136.29935, - 59.575745 - ], - [ - -136.350329, - 59.592384 - ], - [ - -136.2585, - 59.621582 - ], - [ - -136.145406, - 59.636826 - ], - [ - -136.02686, - 59.652846 - ], - [ - -135.923818, - 59.666747 - ], - [ - -135.830955, - 59.693257 - ], - [ - -135.641251, - 59.747362 - ], - [ - -135.482759, - 59.792475 - ], - [ - -135.465137, - 59.789685 - ], - [ - -135.404392, - 59.753305 - ], - [ - -135.345791, - 59.731032 - ], - [ - -135.259879, - 59.698218 - ], - [ - -135.221897, - 59.675273 - ], - [ - -135.192028, - 59.64711 - ], - [ - -135.157792, - 59.623287 - ], - [ - -135.106684, - 59.613158 - ], - [ - -135.087874, - 59.606544 - ], - [ - -135.032942, - 59.573109 - ], - [ - -135.018524, - 59.559363 - ], - [ - -135.016198, - 59.543447 - ], - [ - -135.01948, - 59.493166 - ], - [ - -135.023252, - 59.477146 - ], - [ - -135.037489, - 59.461591 - ], - [ - -135.078598, - 59.438337 - ], - [ - -135.095754, - 59.418855 - ], - [ - -134.993254, - 59.381906 - ], - [ - -135.00483, - 59.367127 - ], - [ - -135.014441, - 59.35152 - ], - [ - -135.016198, - 59.336173 - ], - [ - -134.979973, - 59.297415 - ], - [ - -134.95783, - 59.280982 - ], - [ - -134.932431, - 59.270647 - ], - [ - -134.839465, - 59.258141 - ], - [ - -134.74345, - 59.245119 - ], - [ - -134.70552, - 59.240106 - ], - [ - -134.692084, - 59.235249 - ], - [ - -134.68286, - 59.223001 - ], - [ - -134.671439, - 59.193752 - ], - [ - -134.66038, - 59.181298 - ], - [ - -134.610771, - 59.144556 - ], - [ - -134.582788, - 59.128847 - ], - [ - -134.556717, - 59.123059 - ], - [ - -134.509072, - 59.122801 - ], - [ - -134.477575, - 59.114946 - ], - [ - -134.451013, - 59.097893 - ], - [ - -134.398019, - 59.051952 - ], - [ - -134.387167, - 59.036863 - ], - [ - -134.385591, - 59.018828 - ], - [ - -134.399389, - 58.974954 - ], - [ - -134.343423, - 58.968857 - ], - [ - -134.329651, - 58.963017 - ], - [ - -134.320039, - 58.952682 - ], - [ - -134.32314, - 58.949168 - ], - [ - -134.330323, - 58.945344 - ], - [ - -134.333036, - 58.93413 - ], - [ - -134.327403, - 58.916457 - ], - [ - -134.316939, - 58.903796 - ], - [ - -134.22219, - 58.842714 - ], - [ - -134.108838, - 58.808246 - ], - [ - -133.983109, - 58.769902 - ], - [ - -133.87123, - 58.735899 - ], - [ - -133.831129, - 58.718019 - ], - [ - -133.796402, - 58.693421 - ], - [ - -133.700077, - 58.59937 - ], - [ - -133.626283, - 58.546402 - ], - [ - -133.547063, - 58.505577 - ], - [ - -133.463089, - 58.462221 - ], - [ - -133.392241, - 58.403878 - ], - [ - -133.43012, - 58.372097 - ], - [ - -133.41503, - 58.330549 - ], - [ - -133.374567, - 58.290965 - ], - [ - -133.257262, - 58.210298 - ], - [ - -133.165588, - 58.147305 - ], - [ - -133.142127, - 58.120588 - ], - [ - -133.094843, - 58.0331 - ], - [ - -133.075154, - 58.007882 - ], - [ - -132.99335, - 57.941917 - ], - [ - -132.917153, - 57.880499 - ], - [ - -132.83212, - 57.791564 - ], - [ - -132.70944, - 57.663303 - ], - [ - -132.629057, - 57.579277 - ], - [ - -132.552447, - 57.499075 - ], - [ - -132.455735, - 57.420992 - ], - [ - -132.362304, - 57.3457 - ], - [ - -132.304684, - 57.280355 - ], - [ - -132.230994, - 57.19682 - ], - [ - -132.276366, - 57.14889 - ], - [ - -132.34122, - 57.080393 - ], - [ - -132.16229, - 57.050317 - ], - [ - -132.031859, - 57.028406 - ], - [ - -132.107384, - 56.858753 - ], - [ - -131.871558, - 56.79346 - ], - [ - -131.865874, - 56.785708 - ], - [ - -131.872411, - 56.77297 - ], - [ - -131.882617, - 56.759146 - ], - [ - -131.887966, - 56.747958 - ], - [ - -131.886028, - 56.737055 - ], - [ - -131.880705, - 56.728838 - ], - [ - -131.864789, - 56.71349 - ], - [ - -131.838976, - 56.682278 - ], - [ - -131.830424, - 56.664759 - ], - [ - -131.826574, - 56.644606 - ], - [ - -131.832103, - 56.603368 - ], - [ - -131.825592, - 56.593343 - ], - [ - -131.799108, - 56.587658 - ], - [ - -131.692293, - 56.585074 - ], - [ - -131.585891, - 56.595048 - ], - [ - -131.560363, - 56.594066 - ], - [ - -131.536437, - 56.585229 - ], - [ - -131.491659, - 56.560166 - ], - [ - -131.345699, - 56.503271 - ], - [ - -131.215604, - 56.45255 - ], - [ - -131.100546, - 56.407669 - ], - [ - -131.016934, - 56.38705 - ], - [ - -130.839089, - 56.372452 - ], - [ - -130.760334, - 56.345192 - ], - [ - -130.645768, - 56.261942 - ], - [ - -130.602256, - 56.247059 - ], - [ - -130.495518, - 56.232434 - ], - [ - -130.47229, - 56.22489 - ], - [ - -130.458053, - 56.210653 - ], - [ - -130.427926, - 56.143964 - ], - [ - -130.418159, - 56.129702 - ], - [ - -130.403974, - 56.121898 - ], - [ - -130.290311, - 56.10097 - ], - [ - -130.243156, - 56.092391 - ], - [ - -130.211246, - 56.089962 - ], - [ - -130.116756, - 56.105646 - ], - [ - -130.094328, - 56.101486 - ], - [ - -130.071539, - 56.084123 - ], - [ - -130.039319, - 56.045521 - ], - [ - -130.026632, - 56.024101 - ], - [ - -130.01901, - 56.002216 - ], - [ - -130.014695, - 55.963252 - ], - [ - -130.016788, - 55.918913 - ], - [ - -130.019612, - 55.907978 - ], - [ - -130.019618, - 55.907952 - ], - [ - -130.022817, - 55.901353 - ], - [ - -130.049387, - 55.871405 - ], - [ - -130.104726, - 55.825263 - ], - [ - -130.136627, - 55.806464 - ], - [ - -130.148834, - 55.795356 - ], - [ - -130.163482, - 55.771145 - ], - [ - -130.167307, - 55.766262 - ], - [ - -130.170806, - 55.759833 - ], - [ - -130.173655, - 55.749498 - ], - [ - -130.170806, - 55.740953 - ], - [ - -130.163808, - 55.734565 - ], - [ - -130.160064, - 55.727118 - ], - [ - -130.167388, - 55.715399 - ], - [ - -130.155914, - 55.700141 - ], - [ - -130.142893, - 55.689521 - ], - [ - -130.131825, - 55.676581 - ], - [ - -130.126454, - 55.653998 - ], - [ - -130.12857, - 55.63642 - ], - [ - -130.135121, - 55.619127 - ], - [ - -130.153147, - 55.58511 - ], - [ - -130.148671, - 55.578192 - ], - [ - -130.146881, - 55.569322 - ], - [ - -130.146962, - 55.547187 - ], - [ - -130.112172, - 55.509345 - ], - [ - -130.101674, - 55.481147 - ], - [ - -130.095082, - 55.472113 - ], - [ - -130.065419, - 55.446112 - ], - [ - -130.057525, - 55.434882 - ], - [ - -130.052561, - 55.414008 - ], - [ - -130.054311, - 55.366645 - ], - [ - -130.05012, - 55.345445 - ], - [ - -130.039296, - 55.330756 - ], - [ - -129.989247, - 55.284003 - ], - [ - -130.031239, - 55.26435 - ], - [ - -130.050038, - 55.252875 - ], - [ - -130.067494, - 55.239 - ], - [ - -130.078236, - 55.233791 - ], - [ - -130.100494, - 55.230292 - ], - [ - -130.104726, - 55.225653 - ], - [ - -130.105702, - 55.211127 - ], - [ - -130.10912, - 55.200751 - ], - [ - -130.115793, - 55.191596 - ], - [ - -130.126454, - 55.180976 - ], - [ - -130.151967, - 55.163275 - ], - [ - -130.159983, - 55.153713 - ], - [ - -130.167592, - 55.129584 - ], - [ - -130.173695, - 55.117743 - ], - [ - -130.200266, - 55.104153 - ], - [ - -130.211781, - 55.084133 - ], - [ - -130.228871, - 55.04385 - ], - [ - -130.238678, - 55.03441 - ], - [ - -130.261342, - 55.022895 - ], - [ - -130.269846, - 55.016547 - ], - [ - -130.275706, - 55.006985 - ], - [ - -130.286366, - 54.983222 - ], - [ - -130.294342, - 54.971869 - ], - [ - -130.326568, - 54.952094 - ], - [ - -130.335561, - 54.938707 - ], - [ - -130.365387, - 54.907294 - ], - [ - -130.385243, - 54.896552 - ], - [ - -130.430816, - 54.881252 - ], - [ - -130.488759, - 54.844184 - ], - [ - -130.580312, - 54.806383 - ], - [ - -130.597485, - 54.803391 - ], - [ - -130.71074, - 54.733215 - ], - [ - -131.160718, - 54.787192 - ] - ] - ] - ] - } - } - ] - }, - "featureIcons": { - "circle-stroked": { - "12": [ - 42, - 0 - ], - "18": [ - 24, - 0 - ], - "24": [ - 0, - 0 - ] - }, - "circle": { - "12": [ - 96, - 0 - ], - "18": [ - 78, - 0 - ], - "24": [ - 54, - 0 - ] - }, - "square-stroked": { - "12": [ - 150, - 0 - ], - "18": [ - 132, - 0 - ], - "24": [ - 108, - 0 - ] - }, - "square": { - "12": [ - 204, - 0 - ], - "18": [ - 186, - 0 - ], - "24": [ - 162, - 0 - ] - }, - "triangle-stroked": { - "12": [ - 258, - 0 - ], - "18": [ - 240, - 0 - ], - "24": [ - 216, - 0 - ] - }, - "triangle": { - "12": [ - 42, - 24 - ], - "18": [ - 24, - 24 - ], - "24": [ - 0, - 24 - ] - }, - "star-stroked": { - "12": [ - 96, - 24 - ], - "18": [ - 78, - 24 - ], - "24": [ - 54, - 24 - ] - }, - "star": { - "12": [ - 150, - 24 - ], - "18": [ - 132, - 24 - ], - "24": [ - 108, - 24 - ] - }, - "cross": { - "12": [ - 204, - 24 - ], - "18": [ - 186, - 24 - ], - "24": [ - 162, - 24 - ] - }, - "marker-stroked": { - "12": [ - 258, - 24 - ], - "18": [ - 240, - 24 - ], - "24": [ - 216, - 24 - ] - }, - "marker": { - "12": [ - 42, - 48 - ], - "18": [ - 24, - 48 - ], - "24": [ - 0, - 48 - ] - }, - "religious-jewish": { - "12": [ - 96, - 48 - ], - "18": [ - 78, - 48 - ], - "24": [ - 54, - 48 - ] - }, - "religious-christian": { - "12": [ - 150, - 48 - ], - "18": [ - 132, - 48 - ], - "24": [ - 108, - 48 - ] - }, - "religious-muslim": { - "12": [ - 204, - 48 - ], - "18": [ - 186, - 48 - ], - "24": [ - 162, - 48 - ] - }, - "cemetery": { - "12": [ - 258, - 48 - ], - "18": [ - 240, - 48 - ], - "24": [ - 216, - 48 - ] - }, - "rocket": { - "12": [ - 42, - 72 - ], - "18": [ - 24, - 72 - ], - "24": [ - 0, - 72 - ] - }, - "airport": { - "12": [ - 96, - 72 - ], - "18": [ - 78, - 72 - ], - "24": [ - 54, - 72 - ] - }, - "heliport": { - "12": [ - 150, - 72 - ], - "18": [ - 132, - 72 - ], - "24": [ - 108, - 72 - ] - }, - "rail": { - "12": [ - 204, - 72 - ], - "18": [ - 186, - 72 - ], - "24": [ - 162, - 72 - ] - }, - "rail-metro": { - "12": [ - 258, - 72 - ], - "18": [ - 240, - 72 - ], - "24": [ - 216, - 72 - ] - }, - "rail-light": { - "12": [ - 42, - 96 - ], - "18": [ - 24, - 96 - ], - "24": [ - 0, - 96 - ] - }, - "bus": { - "12": [ - 96, - 96 - ], - "18": [ - 78, - 96 - ], - "24": [ - 54, - 96 - ] - }, - "fuel": { - "12": [ - 150, - 96 - ], - "18": [ - 132, - 96 - ], - "24": [ - 108, - 96 - ] - }, - "parking": { - "12": [ - 204, - 96 - ], - "18": [ - 186, - 96 - ], - "24": [ - 162, - 96 - ] - }, - "parking-garage": { - "12": [ - 258, - 96 - ], - "18": [ - 240, - 96 - ], - "24": [ - 216, - 96 - ] - }, - "airfield": { - "12": [ - 42, - 120 - ], - "18": [ - 24, - 120 - ], - "24": [ - 0, - 120 - ] - }, - "roadblock": { - "12": [ - 96, - 120 - ], - "18": [ - 78, - 120 - ], - "24": [ - 54, - 120 - ] - }, - "ferry": { - "12": [ - 150, - 120 - ], - "18": [ - 132, - 120 - ], - "24": [ - 108, - 120 - ], - "line": [ - 2240, - 25 - ] - }, - "harbor": { - "12": [ - 204, - 120 - ], - "18": [ - 186, - 120 - ], - "24": [ - 162, - 120 - ] - }, - "bicycle": { - "12": [ - 258, - 120 - ], - "18": [ - 240, - 120 - ], - "24": [ - 216, - 120 - ] - }, - "park": { - "12": [ - 42, - 144 - ], - "18": [ - 24, - 144 - ], - "24": [ - 0, - 144 - ] - }, - "park2": { - "12": [ - 96, - 144 - ], - "18": [ - 78, - 144 - ], - "24": [ - 54, - 144 - ] - }, - "museum": { - "12": [ - 150, - 144 - ], - "18": [ - 132, - 144 - ], - "24": [ - 108, - 144 - ] - }, - "lodging": { - "12": [ - 204, - 144 - ], - "18": [ - 186, - 144 - ], - "24": [ - 162, - 144 - ] - }, - "monument": { - "12": [ - 258, - 144 - ], - "18": [ - 240, - 144 - ], - "24": [ - 216, - 144 - ] - }, - "zoo": { - "12": [ - 42, - 168 - ], - "18": [ - 24, - 168 - ], - "24": [ - 0, - 168 - ] - }, - "garden": { - "12": [ - 96, - 168 - ], - "18": [ - 78, - 168 - ], - "24": [ - 54, - 168 - ] - }, - "campsite": { - "12": [ - 150, - 168 - ], - "18": [ - 132, - 168 - ], - "24": [ - 108, - 168 - ] - }, - "theatre": { - "12": [ - 204, - 168 - ], - "18": [ - 186, - 168 - ], - "24": [ - 162, - 168 - ] - }, - "art-gallery": { - "12": [ - 258, - 168 - ], - "18": [ - 240, - 168 - ], - "24": [ - 216, - 168 - ] - }, - "pitch": { - "12": [ - 42, - 192 - ], - "18": [ - 24, - 192 - ], - "24": [ - 0, - 192 - ] - }, - "soccer": { - "12": [ - 96, - 192 - ], - "18": [ - 78, - 192 - ], - "24": [ - 54, - 192 - ] - }, - "america-football": { - "12": [ - 150, - 192 - ], - "18": [ - 132, - 192 - ], - "24": [ - 108, - 192 - ] - }, - "tennis": { - "12": [ - 204, - 192 - ], - "18": [ - 186, - 192 - ], - "24": [ - 162, - 192 - ] - }, - "basketball": { - "12": [ - 258, - 192 - ], - "18": [ - 240, - 192 - ], - "24": [ - 216, - 192 - ] - }, - "baseball": { - "12": [ - 42, - 216 - ], - "18": [ - 24, - 216 - ], - "24": [ - 0, - 216 - ] - }, - "golf": { - "12": [ - 96, - 216 - ], - "18": [ - 78, - 216 - ], - "24": [ - 54, - 216 - ] - }, - "swimming": { - "12": [ - 150, - 216 - ], - "18": [ - 132, - 216 - ], - "24": [ - 108, - 216 - ] - }, - "cricket": { - "12": [ - 204, - 216 - ], - "18": [ - 186, - 216 - ], - "24": [ - 162, - 216 - ] - }, - "skiing": { - "12": [ - 258, - 216 - ], - "18": [ - 240, - 216 - ], - "24": [ - 216, - 216 - ] - }, - "school": { - "12": [ - 42, - 240 - ], - "18": [ - 24, - 240 - ], - "24": [ - 0, - 240 - ] - }, - "college": { - "12": [ - 96, - 240 - ], - "18": [ - 78, - 240 - ], - "24": [ - 54, - 240 - ] - }, - "library": { - "12": [ - 150, - 240 - ], - "18": [ - 132, - 240 - ], - "24": [ - 108, - 240 - ] - }, - "post": { - "12": [ - 204, - 240 - ], - "18": [ - 186, - 240 - ], - "24": [ - 162, - 240 - ] - }, - "fire-station": { - "12": [ - 258, - 240 - ], - "18": [ - 240, - 240 - ], - "24": [ - 216, - 240 - ] - }, - "town-hall": { - "12": [ - 42, - 264 - ], - "18": [ - 24, - 264 - ], - "24": [ - 0, - 264 - ] - }, - "police": { - "12": [ - 96, - 264 - ], - "18": [ - 78, - 264 - ], - "24": [ - 54, - 264 - ] - }, - "prison": { - "12": [ - 150, - 264 - ], - "18": [ - 132, - 264 - ], - "24": [ - 108, - 264 - ] - }, - "embassy": { - "12": [ - 204, - 264 - ], - "18": [ - 186, - 264 - ], - "24": [ - 162, - 264 - ] - }, - "beer": { - "12": [ - 258, - 264 - ], - "18": [ - 240, - 264 - ], - "24": [ - 216, - 264 - ] - }, - "restaurant": { - "12": [ - 42, - 288 - ], - "18": [ - 24, - 288 - ], - "24": [ - 0, - 288 - ] - }, - "cafe": { - "12": [ - 96, - 288 - ], - "18": [ - 78, - 288 - ], - "24": [ - 54, - 288 - ] - }, - "shop": { - "12": [ - 150, - 288 - ], - "18": [ - 132, - 288 - ], - "24": [ - 108, - 288 - ] - }, - "fast-food": { - "12": [ - 204, - 288 - ], - "18": [ - 186, - 288 - ], - "24": [ - 162, - 288 - ] - }, - "bar": { - "12": [ - 258, - 288 - ], - "18": [ - 240, - 288 - ], - "24": [ - 216, - 288 - ] - }, - "bank": { - "12": [ - 42, - 312 - ], - "18": [ - 24, - 312 - ], - "24": [ - 0, - 312 - ] - }, - "grocery": { - "12": [ - 96, - 312 - ], - "18": [ - 78, - 312 - ], - "24": [ - 54, - 312 - ] - }, - "cinema": { - "12": [ - 150, - 312 - ], - "18": [ - 132, - 312 - ], - "24": [ - 108, - 312 - ] - }, - "pharmacy": { - "12": [ - 204, - 312 - ], - "18": [ - 186, - 312 - ], - "24": [ - 162, - 312 - ] - }, - "hospital": { - "12": [ - 258, - 312 - ], - "18": [ - 240, - 312 - ], - "24": [ - 216, - 312 - ] - }, - "danger": { - "12": [ - 42, - 336 - ], - "18": [ - 24, - 336 - ], - "24": [ - 0, - 336 - ] - }, - "industrial": { - "12": [ - 96, - 336 - ], - "18": [ - 78, - 336 - ], - "24": [ - 54, - 336 - ] - }, - "warehouse": { - "12": [ - 150, - 336 - ], - "18": [ - 132, - 336 - ], - "24": [ - 108, - 336 - ] - }, - "commercial": { - "12": [ - 204, - 336 - ], - "18": [ - 186, - 336 - ], - "24": [ - 162, - 336 - ] - }, - "building": { - "12": [ - 258, - 336 - ], - "18": [ - 240, - 336 - ], - "24": [ - 216, - 336 - ] - }, - "place-of-worship": { - "12": [ - 42, - 360 - ], - "18": [ - 24, - 360 - ], - "24": [ - 0, - 360 - ] - }, - "alcohol-shop": { - "12": [ - 96, - 360 - ], - "18": [ - 78, - 360 - ], - "24": [ - 54, - 360 - ] - }, - "logging": { - "12": [ - 150, - 360 - ], - "18": [ - 132, - 360 - ], - "24": [ - 108, - 360 - ] - }, - "oil-well": { - "12": [ - 204, - 360 - ], - "18": [ - 186, - 360 - ], - "24": [ - 162, - 360 - ] - }, - "slaughterhouse": { - "12": [ - 258, - 360 - ], - "18": [ - 240, - 360 - ], - "24": [ - 216, - 360 - ] - }, - "dam": { - "12": [ - 42, - 384 - ], - "18": [ - 24, - 384 - ], - "24": [ - 0, - 384 - ] - }, - "water": { - "12": [ - 96, - 384 - ], - "18": [ - 78, - 384 - ], - "24": [ - 54, - 384 - ] - }, - "wetland": { - "12": [ - 150, - 384 - ], - "18": [ - 132, - 384 - ], - "24": [ - 108, - 384 - ] - }, - "disability": { - "12": [ - 204, - 384 - ], - "18": [ - 186, - 384 - ], - "24": [ - 162, - 384 - ] - }, - "telephone": { - "12": [ - 258, - 384 - ], - "18": [ - 240, - 384 - ], - "24": [ - 216, - 384 - ] - }, - "emergency-telephone": { - "12": [ - 42, - 408 - ], - "18": [ - 24, - 408 - ], - "24": [ - 0, - 408 - ] - }, - "toilets": { - "12": [ - 96, - 408 - ], - "18": [ - 78, - 408 - ], - "24": [ - 54, - 408 - ] - }, - "waste-basket": { - "12": [ - 150, - 408 - ], - "18": [ - 132, - 408 - ], - "24": [ - 108, - 408 - ] - }, - "music": { - "12": [ - 204, - 408 - ], - "18": [ - 186, - 408 - ], - "24": [ - 162, - 408 - ] - }, - "land-use": { - "12": [ - 258, - 408 - ], - "18": [ - 240, - 408 - ], - "24": [ - 216, - 408 - ] - }, - "city": { - "12": [ - 42, - 432 - ], - "18": [ - 24, - 432 - ], - "24": [ - 0, - 432 - ] - }, - "town": { - "12": [ - 96, - 432 - ], - "18": [ - 78, - 432 - ], - "24": [ - 54, - 432 - ] - }, - "village": { - "12": [ - 150, - 432 - ], - "18": [ - 132, - 432 - ], - "24": [ - 108, - 432 - ] - }, - "farm": { - "12": [ - 204, - 432 - ], - "18": [ - 186, - 432 - ], - "24": [ - 162, - 432 - ] - }, - "bakery": { - "12": [ - 258, - 432 - ], - "18": [ - 240, - 432 - ], - "24": [ - 216, - 432 - ] - }, - "dog-park": { - "12": [ - 42, - 456 - ], - "18": [ - 24, - 456 - ], - "24": [ - 0, - 456 - ] - }, - "lighthouse": { - "12": [ - 96, - 456 - ], - "18": [ - 78, - 456 - ], - "24": [ - 54, - 456 - ] - }, - "clothing-store": { - "12": [ - 150, - 456 - ], - "18": [ - 132, - 456 - ], - "24": [ - 108, - 456 - ] - }, - "polling-place": { - "12": [ - 204, - 456 - ], - "18": [ - 186, - 456 - ], - "24": [ - 162, - 456 - ] - }, - "playground": { - "12": [ - 258, - 456 - ], - "18": [ - 240, - 456 - ], - "24": [ - 216, - 456 - ] - }, - "entrance": { - "12": [ - 42, - 480 - ], - "18": [ - 24, - 480 - ], - "24": [ - 0, - 480 - ] - }, - "heart": { - "12": [ - 96, - 480 - ], - "18": [ - 78, - 480 - ], - "24": [ - 54, - 480 - ] - }, - "london-underground": { - "12": [ - 150, - 480 - ], - "18": [ - 132, - 480 - ], - "24": [ - 108, - 480 - ] - }, - "minefield": { - "12": [ - 204, - 480 - ], - "18": [ - 186, - 480 - ], - "24": [ - 162, - 480 - ] - }, - "rail-underground": { - "12": [ - 258, - 480 - ], - "18": [ - 240, - 480 - ], - "24": [ - 216, - 480 - ] - }, - "rail-above": { - "12": [ - 42, - 504 - ], - "18": [ - 24, - 504 - ], - "24": [ - 0, - 504 - ] - }, - "camera": { - "12": [ - 96, - 504 - ], - "18": [ - 78, - 504 - ], - "24": [ - 54, - 504 - ] - }, - "laundry": { - "12": [ - 150, - 504 - ], - "18": [ - 132, - 504 - ], - "24": [ - 108, - 504 - ] - }, - "car": { - "12": [ - 204, - 504 - ], - "18": [ - 186, - 504 - ], - "24": [ - 162, - 504 - ] - }, - "suitcase": { - "12": [ - 258, - 504 - ], - "18": [ - 240, - 504 - ], - "24": [ - 216, - 504 - ] - }, - "highway-motorway": { - "line": [ - 20, - 25 - ] - }, - "highway-trunk": { - "line": [ - 80, - 25 - ] - }, - "highway-primary": { - "line": [ - 140, - 25 - ] - }, - "highway-secondary": { - "line": [ - 200, - 25 - ] - }, - "highway-tertiary": { - "line": [ - 260, - 25 - ] - }, - "highway-motorway-link": { - "line": [ - 320, - 25 - ] - }, - "highway-trunk-link": { - "line": [ - 380, - 25 - ] - }, - "highway-primary-link": { - "line": [ - 440, - 25 - ] - }, - "highway-secondary-link": { - "line": [ - 500, - 25 - ] - }, - "highway-tertiary-link": { - "line": [ - 560, - 25 - ] - }, - "highway-residential": { - "line": [ - 620, - 25 - ] - }, - "highway-unclassified": { - "line": [ - 680, - 25 - ] - }, - "highway-service": { - "line": [ - 740, - 25 - ] - }, - "highway-road": { - "line": [ - 800, - 25 - ] - }, - "highway-track": { - "line": [ - 860, - 25 - ] - }, - "highway-living-street": { - "line": [ - 920, - 25 - ] - }, - "highway-path": { - "line": [ - 980, - 25 - ] - }, - "highway-cycleway": { - "line": [ - 1040, - 25 - ] - }, - "highway-footway": { - "line": [ - 1100, - 25 - ] - }, - "highway-bridleway": { - "line": [ - 1160, - 25 - ] - }, - "highway-steps": { - "line": [ - 1220, - 25 - ] - }, - "railway-rail": { - "line": [ - 1280, - 25 - ] - }, - "railway-disused": { - "line": [ - 1340, - 25 - ] - }, - "railway-abandoned": { - "line": [ - 1400, - 25 - ] - }, - "railway-subway": { - "line": [ - 1460, - 25 - ] - }, - "railway-light-rail": { - "line": [ - 1520, - 25 - ] - }, - "railway-monorail": { - "line": [ - 1580, - 25 - ] - }, - "waterway-river": { - "line": [ - 1640, - 25 - ] - }, - "waterway-stream": { - "line": [ - 1700, - 25 - ] - }, - "waterway-canal": { - "line": [ - 1760, - 25 - ] - }, - "waterway-ditch": { - "line": [ - 1820, - 25 - ] - }, - "power-line": { - "line": [ - 1880, - 25 - ] - }, - "other-line": { - "line": [ - 1940, - 25 - ] - }, - "category-roads": { - "line": [ - 2000, - 25 - ] - }, - "category-rail": { - "line": [ - 2060, - 25 - ] - }, - "category-path": { - "line": [ - 2120, - 25 - ] - }, - "category-water": { - "line": [ - 2180, - 25 - ] - }, - "pipeline": { - "line": [ - 2300, - 25 - ] - }, - "relation": { - "relation": [ - 20, - 25 - ] - }, - "restriction": { - "relation": [ - 80, - 25 - ] - }, - "multipolygon": { - "relation": [ - 140, - 25 - ] - }, - "boundary": { - "relation": [ - 200, - 25 - ] - }, - "route": { - "relation": [ - 260, - 25 - ] - }, - "route-road": { - "relation": [ - 320, - 25 - ] - }, - "route-bicycle": { - "relation": [ - 380, - 25 - ] - }, - "route-foot": { - "relation": [ - 440, - 25 - ] - }, - "route-bus": { - "relation": [ - 500, - 25 - ] - }, - "route-train": { - "relation": [ - 560, - 25 - ] - }, - "route-detour": { - "relation": [ - 620, - 25 - ] - }, - "route-tram": { - "relation": [ - 680, - 25 - ] - }, - "route-ferry": { - "relation": [ - 740, - 25 - ] - }, - "route-power": { - "relation": [ - 800, - 25 - ] - }, - "route-pipeline": { - "relation": [ - 860, - 25 - ] - }, - "route-master": { - "relation": [ - 920, - 25 - ] - } - }, - "operations": { - "icon-operation-delete": [ - 0, - 140 - ], - "icon-operation-circularize": [ - 20, - 140 - ], - "icon-operation-straighten": [ - 40, - 140 - ], - "icon-operation-split": [ - 60, - 140 - ], - "icon-operation-disconnect": [ - 80, - 140 - ], - "icon-operation-reverse": [ - 100, - 140 - ], - "icon-operation-move": [ - 120, - 140 - ], - "icon-operation-merge": [ - 140, - 140 - ], - "icon-operation-orthogonalize": [ - 160, - 140 - ], - "icon-operation-rotate": [ - 180, - 140 - ], - "icon-operation-simplify": [ - 200, - 140 - ], - "icon-operation-continue": [ - 220, - 140 - ], - "icon-operation-disabled-delete": [ - 0, - 160 - ], - "icon-operation-disabled-circularize": [ - 20, - 160 - ], - "icon-operation-disabled-straighten": [ - 40, - 160 - ], - "icon-operation-disabled-split": [ - 60, - 160 - ], - "icon-operation-disabled-disconnect": [ - 80, - 160 - ], - "icon-operation-disabled-reverse": [ - 100, - 160 - ], - "icon-operation-disabled-move": [ - 120, - 160 - ], - "icon-operation-disabled-merge": [ - 140, - 160 - ], - "icon-operation-disabled-orthogonalize": [ - 160, - 160 - ], - "icon-operation-disabled-rotate": [ - 180, - 160 - ], - "icon-operation-disabled-simplify": [ - 200, - 160 - ], - "icon-operation-disabled-continue": [ - 220, - 160 - ] - }, - "locales": [ - "af", - "sq", - "ar", - "ar-AA", - "hy", - "ast", - "bn", - "bs", - "bg-BG", - "ca", - "zh", - "zh-CN", - "zh-CN.GB2312", - "zh-HK", - "zh-TW", - "yue", - "hr", - "cs", - "da", - "nl", - "en-GB", - "et", - "fi", - "fr", - "de", - "el", - "hu", - "is", - "id", - "it", - "ja", - "kn", - "ko", - "ko-KR", - "lv", - "lt", - "no", - "nn", - "fa", - "pl", - "pt", - "pt-BR", - "ro-RO", - "ru", - "sc", - "sr", - "sr-RS", - "sk", - "sl", - "es", - "sv", - "ta", - "te", - "tr", - "uk", - "vi" - ], - "en": { - "modes": { - "add_area": { - "title": "Area", - "description": "Add parks, buildings, lakes or other areas to the map.", - "tail": "Click on the map to start drawing an area, like a park, lake, or building." - }, - "add_line": { - "title": "Line", - "description": "Add highways, streets, pedestrian paths, canals or other lines to the map.", - "tail": "Click on the map to start drawing a road, path, or route." - }, - "add_point": { - "title": "Point", - "description": "Add restaurants, monuments, postal boxes or other points to the map.", - "tail": "Click on the map to add a point." - }, - "browse": { - "title": "Browse", - "description": "Pan and zoom the map." - }, - "draw_area": { - "tail": "Click to add nodes to your area. Click the first node to finish the area." - }, - "draw_line": { - "tail": "Click to add more nodes to the line. Click on other lines to connect to them, and double-click to end the line." - } - }, - "operations": { - "add": { - "annotation": { - "point": "Added a point.", - "vertex": "Added a node to a way.", - "relation": "Added a relation." - } - }, - "start": { - "annotation": { - "line": "Started a line.", - "area": "Started an area." - } - }, - "continue": { - "key": "A", - "title": "Continue", - "description": "Continue this line.", - "not_eligible": "No line can be continued here.", - "multiple": "Several lines can be continued here. To choose a line, press the Shift key and click on it to select it.", - "annotation": { - "line": "Continued a line.", - "area": "Continued an area." - } - }, - "cancel_draw": { - "annotation": "Canceled drawing." - }, - "change_role": { - "annotation": "Changed the role of a relation member." - }, - "change_tags": { - "annotation": "Changed tags." - }, - "circularize": { - "title": "Circularize", - "description": { - "line": "Make this line circular.", - "area": "Make this area circular." - }, - "key": "O", - "annotation": { - "line": "Made a line circular.", - "area": "Made an area circular." - }, - "not_closed": "This can't be made circular because it's not a loop." - }, - "orthogonalize": { - "title": "Square", - "description": { - "line": "Square the corners of this line.", - "area": "Square the corners of this area." - }, - "key": "S", - "annotation": { - "line": "Squared the corners of a line.", - "area": "Squared the corners of an area." - }, - "not_squarish": "This can't be made square because it is not squarish." - }, - "straighten": { - "title": "Straighten", - "description": "Straighten this line.", - "key": "S", - "annotation": "Straightened a line.", - "too_bendy": "This can't be straightened because it bends too much." - }, - "delete": { - "title": "Delete", - "description": "Remove this from the map.", - "annotation": { - "point": "Deleted a point.", - "vertex": "Deleted a node from a way.", - "line": "Deleted a line.", - "area": "Deleted an area.", - "relation": "Deleted a relation.", - "multiple": "Deleted {n} objects." - }, - "incomplete_relation": "This feature can't be deleted because it hasn't been fully downloaded." - }, - "add_member": { - "annotation": "Added a member to a relation." - }, - "delete_member": { - "annotation": "Removed a member from a relation." - }, - "connect": { - "annotation": { - "point": "Connected a way to a point.", - "vertex": "Connected a way to another.", - "line": "Connected a way to a line.", - "area": "Connected a way to an area." - } - }, - "disconnect": { - "title": "Disconnect", - "description": "Disconnect these lines/areas from each other.", - "key": "D", - "annotation": "Disconnected lines/areas.", - "not_connected": "There aren't enough lines/areas here to disconnect." - }, - "merge": { - "title": "Merge", - "description": "Merge these lines.", - "key": "C", - "annotation": "Merged {n} lines.", - "not_eligible": "These features can't be merged.", - "not_adjacent": "These lines can't be merged because they aren't connected.", - "restriction": "These lines can't be merged because at least one is a member of a \"{relation}\" relation.", - "incomplete_relation": "These features can't be merged because at least one hasn't been fully downloaded." - }, - "move": { - "title": "Move", - "description": "Move this to a different location.", - "key": "M", - "annotation": { - "point": "Moved a point.", - "vertex": "Moved a node in a way.", - "line": "Moved a line.", - "area": "Moved an area.", - "multiple": "Moved multiple objects." - }, - "incomplete_relation": "This feature can't be moved because it hasn't been fully downloaded." - }, - "rotate": { - "title": "Rotate", - "description": "Rotate this object around its center point.", - "key": "R", - "annotation": { - "line": "Rotated a line.", - "area": "Rotated an area." - } - }, - "reverse": { - "title": "Reverse", - "description": "Make this line go in the opposite direction.", - "key": "V", - "annotation": "Reversed a line." - }, - "split": { - "title": "Split", - "description": { - "line": "Split this line into two at this node.", - "area": "Split the boundary of this area into two.", - "multiple": "Split the lines/area boundaries at this node into two." - }, - "key": "X", - "annotation": { - "line": "Split a line.", - "area": "Split an area boundary.", - "multiple": "Split {n} lines/area boundaries." - }, - "not_eligible": "Lines can't be split at their beginning or end.", - "multiple_ways": "There are too many lines here to split." - } - }, - "undo": { - "tooltip": "Undo: {action}", - "nothing": "Nothing to undo." - }, - "redo": { - "tooltip": "Redo: {action}", - "nothing": "Nothing to redo." - }, - "tooltip_keyhint": "Shortcut:", - "browser_notice": "This editor is supported in Firefox, Chrome, Safari, Opera, and Internet Explorer 9 and above. Please upgrade your browser or use Potlatch 2 to edit the map.", - "translate": { - "translate": "Translate", - "localized_translation_label": "Multilingual name", - "localized_translation_language": "Choose language", - "localized_translation_name": "Name" - }, - "zoom_in_edit": "Zoom in to Edit", - "logout": "logout", - "loading_auth": "Connecting to OpenStreetMap...", - "report_a_bug": "report a bug", - "status": { - "error": "Unable to connect to API.", - "offline": "The API is offline. Please try editing later.", - "readonly": "The API is read-only. You will need to wait to save your changes." - }, - "commit": { - "title": "Save Changes", - "description_placeholder": "Brief description of your contributions", - "message_label": "Commit message", - "upload_explanation": "The changes you upload will be visible on all maps that use OpenStreetMap data.", - "upload_explanation_with_user": "The changes you upload as {user} will be visible on all maps that use OpenStreetMap data.", - "save": "Save", - "cancel": "Cancel", - "warnings": "Warnings", - "modified": "Modified", - "deleted": "Deleted", - "created": "Created" - }, - "contributors": { - "list": "Edits by {users}", - "truncated_list": "Edits by {users} and {count} others" - }, - "geocoder": { - "search": "Search worldwide...", - "no_results_visible": "No results in visible map area", - "no_results_worldwide": "No results found" - }, - "geolocate": { - "title": "Show My Location" - }, - "inspector": { - "no_documentation_combination": "There is no documentation available for this tag combination", - "no_documentation_key": "There is no documentation available for this key", - "show_more": "Show More", - "view_on_osm": "View on openstreetmap.org", - "all_tags": "All tags", - "all_members": "All members", - "all_relations": "All relations", - "new_relation": "New relation...", - "role": "Role", - "choose": "Select feature type", - "results": "{n} results for {search}", - "reference": "View on OpenStreetMap Wiki", - "back_tooltip": "Change feature", - "remove": "Remove", - "search": "Search", - "multiselect": "Selected items", - "unknown": "Unknown", - "incomplete": "", - "feature_list": "Search features", - "edit": "Edit feature", - "check": { - "yes": "Yes", - "no": "No" - }, - "none": "None", - "node": "Node", - "way": "Way", - "relation": "Relation", - "location": "Location" - }, - "background": { - "title": "Background", - "description": "Background settings", - "percent_brightness": "{opacity}% brightness", - "none": "None", - "custom": "Custom", - "custom_prompt": "Enter a tile template. Valid tokens are {z}, {x}, {y} for Z/X/Y scheme and {u} for quadtile scheme.", - "fix_misalignment": "Fix alignment", - "reset": "reset" - }, - "restore": { - "heading": "You have unsaved changes", - "description": "Do you wish to restore unsaved changes from a previous editing session?", - "restore": "Restore", - "reset": "Reset" - }, - "save": { - "title": "Save", - "help": "Save changes to OpenStreetMap, making them visible to other users.", - "no_changes": "No changes to save.", - "error": "An error occurred while trying to save", - "uploading": "Uploading changes to OpenStreetMap.", - "unsaved_changes": "You have unsaved changes" - }, - "success": { - "edited_osm": "Edited OSM!", - "just_edited": "You just edited OpenStreetMap!", - "view_on_osm": "View on OSM", - "facebook": "Share on Facebook", - "twitter": "Share on Twitter", - "google": "Share on Google+", - "help_html": "Your changes should appear in the \"Standard\" layer in a few minutes. Other layers, and certain features, may take longer\n(details).\n" - }, - "confirm": { - "okay": "Okay" - }, - "splash": { - "welcome": "Welcome to the iD OpenStreetMap editor", - "text": "iD is a friendly but powerful tool for contributing to the world's best free world map. This is version {version}. For more information see {website} and report bugs at {github}.", - "walkthrough": "Start the Walkthrough", - "start": "Edit Now" - }, - "source_switch": { - "live": "live", - "lose_changes": "You have unsaved changes. Switching the map server will discard them. Are you sure you want to switch servers?", - "dev": "dev" - }, - "tag_reference": { - "description": "Description", - "on_wiki": "{tag} on wiki.osm.org", - "used_with": "used with {type}" - }, - "validations": { - "untagged_point": "Untagged point", - "untagged_line": "Untagged line", - "untagged_area": "Untagged area", - "many_deletions": "You're deleting {n} objects. Are you sure you want to do this? This will delete them from the map that everyone else sees on openstreetmap.org.", - "tag_suggests_area": "The tag {tag} suggests line should be area, but it is not an area", - "untagged_tooltip": "Select a feature type that describes what this {geometry} is.", - "deprecated_tags": "Deprecated tags: {tags}" - }, - "zoom": { - "in": "Zoom In", - "out": "Zoom Out" - }, - "cannot_zoom": "Cannot zoom out further in current mode.", - "gpx": { - "local_layer": "Local GPX file", - "drag_drop": "Drag and drop a .gpx file on the page, or click the button to the right to browse", - "zoom": "Zoom to GPX track", - "browse": "Browse for a .gpx file" - }, - "help": { - "title": "Help", - "help": "# Help\n\nThis is an editor for [OpenStreetMap](http://www.openstreetmap.org/), the\nfree and editable map of the world. You can use it to add and update\ndata in your area, making an open-source and open-data map of the world\nbetter for everyone.\n\nEdits that you make on this map will be visible to everyone who uses\nOpenStreetMap. In order to make an edit, you'll need a\n[free OpenStreetMap account](https://www.openstreetmap.org/user/new).\n\nThe [iD editor](http://ideditor.com/) is a collaborative project with [source\ncode available on GitHub](https://github.com/openstreetmap/iD).\n", - "editing_saving": "# Editing & Saving\n\nThis editor is designed to work primarily online, and you're accessing\nit through a website right now.\n\n### Selecting Features\n\nTo select a map feature, like a road or point of interest, click\non it on the map. This will highlight the selected feature, open a panel with\ndetails about it, and show a menu of things you can do with the feature.\n\nTo select multiple features, hold down the 'Shift' key. Then either click\non the features you want to select, or drag on the map to draw a rectangle.\nThis will draw a box and select all the points within it.\n\n### Saving Edits\n\nWhen you make changes like editing roads, buildings, and places, these are\nstored locally until you save them to the server. Don't worry if you make\na mistake - you can undo changes by clicking the undo button, and redo\nchanges by clicking the redo button.\n\nClick 'Save' to finish a group of edits - for instance, if you've completed\nan area of town and would like to start on a new area. You'll have a chance\nto review what you've done, and the editor supplies helpful suggestions\nand warnings if something doesn't seem right about the changes.\n\nIf everything looks good, you can enter a short comment explaining the change\nyou made, and click 'Save' again to post the changes\nto [OpenStreetMap.org](http://www.openstreetmap.org/), where they are visible\nto all other users and available for others to build and improve upon.\n\nIf you can't finish your edits in one sitting, you can leave the editor\nwindow and come back (on the same browser and computer), and the\neditor application will offer to restore your work.\n", - "roads": "# Roads\n\nYou can create, fix, and delete roads with this editor. Roads can be all\nkinds: paths, highways, trails, cycleways, and more - any often-crossed\nsegment should be mappable.\n\n### Selecting\n\nClick on a road to select it. An outline should become visible, along\nwith a small tools menu on the map and a sidebar showing more information\nabout the road.\n\n### Modifying\n\nOften you'll see roads that aren't aligned to the imagery behind them\nor to a GPS track. You can adjust these roads so they are in the correct\nplace.\n\nFirst click on the road you want to change. This will highlight it and show\ncontrol points along it that you can drag to better locations. If\nyou want to add new control points for more detail, double-click a part\nof the road without a node, and one will be added.\n\nIf the road connects to another road, but doesn't properly connect on\nthe map, you can drag one of its control points onto the other road in\norder to join them. Having roads connect is important for the map\nand essential for providing driving directions.\n\nYou can also click the 'Move' tool or press the `M` shortcut key to move the entire road at\none time, and then click again to save that movement.\n\n### Deleting\n\nIf a road is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the road could simply be newly built.\n\nYou can delete a road by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.\n\n### Creating\n\nFound somewhere there should be a road but there isn't? Click the 'Line'\nicon in the top-left of the editor or press the shortcut key `2` to start drawing\na line.\n\nClick on the start of the road on the map to start drawing. If the road\nbranches off from an existing road, start by clicking on the place where they connect.\n\nThen click on points along the road so that it follows the right path, according\nto satellite imagery or GPS. If the road you are drawing crosses another road, connect\nit by clicking on the intersection point. When you're done drawing, double-click\nor press 'Return' or 'Enter' on your keyboard.\n", - "gps": "# GPS\n\nGPS data is the most trusted source of data for OpenStreetMap. This editor\nsupports local traces - `.gpx` files on your local computer. You can collect\nthis kind of GPS trace with a number of smartphone applications as well as\npersonal GPS hardware.\n\nFor information on how to perform a GPS survey, read\n[Surveying with a GPS](http://learnosm.org/en/beginner/using-gps/).\n\nTo use a GPX track for mapping, drag and drop the GPX file onto the map\neditor. If it's recognized, it will be added to the map as a bright green\nline. Click on the 'Background Settings' menu on the right side to enable,\ndisable, or zoom to this new GPX-powered layer.\n\nThe GPX track isn't directly uploaded to OpenStreetMap - the best way to\nuse it is to draw on the map, using it as a guide for the new features that\nyou add, and also to [upload it to OpenStreetMap](http://www.openstreetmap.org/trace/create)\nfor other users to use.\n", - "imagery": "# Imagery\n\nAerial imagery is an important resource for mapping. A combination of\nairplane flyovers, satellite views, and freely-compiled sources are available\nin the editor under the 'Background Settings' menu on the right.\n\nBy default a [Bing Maps](http://www.bing.com/maps/) satellite layer is\npresented in the editor, but as you pan and zoom the map to new geographical\nareas, new sources will become available. Some countries, like the United\nStates, France, and Denmark have very high-quality imagery available for some areas.\n\nImagery is sometimes offset from the map data because of a mistake on the\nimagery provider's side. If you see a lot of roads shifted from the background,\ndon't immediately move them all to match the background. Instead you can adjust\nthe imagery so that it matches the existing data by clicking 'Fix alignment' at\nthe bottom of the Background Settings UI.\n", - "addresses": "# Addresses\n\nAddresses are some of the most useful information for the map.\n\nAlthough addresses are often represented as parts of streets, in OpenStreetMap\nthey're recorded as attributes of buildings and places along streets.\n\nYou can add address information to places mapped as building outlines\nas well as those mapped as single points. The optimal source of address\ndata is from an on-the-ground survey or personal knowledge - as with any\nother feature, copying from commercial sources like Google Maps is strictly\nforbidden.\n", - "inspector": "# Using the Inspector\n\nThe inspector is the section on the left side of the page that allows you to\nedit the details of the selected feature.\n\n### Selecting a Feature Type\n\nAfter you add a point, line, or area, you can choose what type of feature it\nis, like whether it's a highway or residential road, supermarket or cafe.\nThe inspector will display buttons for common feature types, and you can\nfind others by typing what you're looking for in the search box.\n\nClick the 'i' in the bottom-right-hand corner of a feature type button to\nlearn more about it. Click a button to choose that type.\n\n### Using Forms and Editing Tags\n\nAfter you choose a feature type, or when you select a feature that already\nhas a type assigned, the inspector will display fields with details about\nthe feature like its name and address.\n\nBelow the fields you see, you can click icons to add other details,\nlike [Wikipedia](http://www.wikipedia.org/) information, wheelchair\naccess, and more.\n\nAt the bottom of the inspector, click 'Additional tags' to add arbitrary\nother tags to the element. [Taginfo](http://taginfo.openstreetmap.org/) is a\ngreat resource for learn more about popular tag combinations.\n\nChanges you make in the inspector are automatically applied to the map.\nYou can undo them at any time by clicking the 'Undo' button.\n", - "buildings": "# Buildings\n\nOpenStreetMap is the world's largest database of buildings. You can create\nand improve this database.\n\n### Selecting\n\nYou can select a building by clicking on its border. This will highlight the\nbuilding and open a small tools menu and a sidebar showing more information\nabout the building.\n\n### Modifying\n\nSometimes buildings are incorrectly placed or have incorrect tags.\n\nTo move an entire building, select it, then click the 'Move' tool. Move your\nmouse to shift the building, and click when it's correctly placed.\n\nTo fix the specific shape of a building, click and drag the nodes that form\nits border into better places.\n\n### Creating\n\nOne of the main questions around adding buildings to the map is that\nOpenStreetMap records buildings both as shapes and points. The rule of thumb\nis to _map a building as a shape whenever possible_, and map companies, homes,\namenities, and other things that operate out of buildings as points placed\nwithin the building shape.\n\nStart drawing a building as a shape by clicking the 'Area' button in the top\nleft of the interface, and end it either by pressing 'Return' on your keyboard\nor clicking on the first node drawn to close the shape.\n\n### Deleting\n\nIf a building is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the building could simply be newly built.\n\nYou can delete a building by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.\n", - "relations": "# Relations\n\nA relation is a special type of feature in OpenStreetMap that groups together\nother features. For example, two common types of relations are *route relations*,\nwhich group together sections of road that belong to a specific freeway or\nhighway, and *multipolygons*, which group together several lines that define\na complex area (one with several pieces or holes in it like a donut).\n\nThe group of features in a relation are called *members*. In the sidebar, you can\nsee which relations a feature is a member of, and click on a relation there\nto select the it. When the relation is selected, you can see all of its\nmembers listed in the sidebar and highlighted on the map.\n\nFor the most part, iD will take care of maintaining relations automatically\nwhile you edit. The main thing you should be aware of is that if you delete a\nsection of road to redraw it more accurately, you should make sure that the\nnew section is a member of the same relations as the original.\n\n## Editing Relations\n\nIf you want to edit relations, here are the basics.\n\nTo add a feature to a relation, select the feature, click the \"+\" button in the\n\"All relations\" section of the sidebar, and select or type the name of the relation.\n\nTo create a new relation, select the first feature that should be a member,\nclick the \"+\" button in the \"All relations\" section, and select \"New relation...\".\n\nTo remove a feature from a relation, select the feature and click the trash\nbutton next to the relation you want to remove it from.\n\nYou can create multipolygons with holes using the \"Merge\" tool. Draw two areas (inner\nand outer), hold the Shift key and click on each of them to select them both, and then\nclick the \"Merge\" (+) button.\n" - }, - "intro": { - "navigation": { - "title": "Navigation", - "drag": "The main map area shows OpenStreetMap data on top of a background. You can navigate by dragging and scrolling, just like any web map. **Drag the map!**", - "select": "Map features are represented three ways: using points, lines or areas. All features can be selected by clicking on them. **Click on the point to select it.**", - "header": "The header shows us the feature type.", - "pane": "When a feature is selected, the feature editor is displayed. The header shows us the feature type and the main pane shows the feature's attributes, such as its name and address. **Close the feature editor with the close button in the top right.**" - }, - "points": { - "title": "Points", - "add": "Points can be used to represent features such as shops, restaurants and monuments. They mark a specific location, and describe what's there. **Click the Point button to add a new point.**", - "place": "The point can be placed by clicking on the map. **Place the point on top of the building.**", - "search": "There are many different features that can be represented by points. The point you just added is a Cafe. **Search for '{name}'**", - "choose": "**Choose Cafe from the list.**", - "describe": "The point is now marked as a cafe. Using the feature editor, we can add more information about the feature. **Add a name**", - "close": "The feature editor can be closed by clicking on the close button. **Close the feature editor**", - "reselect": "Often points will already exist, but have mistakes or be incomplete. We can edit existing points. **Select the point you just created.**", - "fixname": "**Change the name and close the feature editor.**", - "reselect_delete": "All features on the map can be deleted. **Click on the point you created.**", - "delete": "The menu around the point contains operations that can be performed on it, including delete. **Delete the point.**" - }, - "areas": { - "title": "Areas", - "add": "Areas are a more detailed way to represent features. They provide information on the boundaries of the feature. Areas can be used for most feature types points can be used for, and are often preferred. **Click the Area button to add a new area.**", - "corner": "Areas are drawn by placing nodes that mark the boundary of the area. **Place the starting node on one of the corners of the playground.**", - "place": "Draw the area by placing more nodes. Finish the area by clicking on the starting node. **Draw an area for the playground.**", - "search": "**Search for '{name}'.**", - "choose": "**Choose Playground from the list.**", - "describe": "**Add a name, and close the feature editor**" - }, - "lines": { - "title": "Lines", - "add": "Lines are used to represent features such as roads, railroads and rivers. **Click the Line button to add a new line.**", - "start": "**Start the line by clicking on the end of the road.**", - "intersect": "Click to add more nodes to the line. You can drag the map while drawing if necessary. Roads, and many other types of lines, are part of a larger network. It is important for these lines to be connected properly in order for routing applications to work. **Click on Flower Street, to create an intersection connecting the two lines.**", - "finish": "Lines can be finished by clicking on the last node again. **Finish drawing the road.**", - "road": "**Select Road from the list**", - "residential": "There are different types of roads, the most common of which is Residential. **Choose the Residential road type**", - "describe": "**Name the road and close the feature editor.**", - "restart": "The road needs to intersect Flower Street.", - "wrong_preset": "You didn't select the Residential road type. **Click here to choose again**" - }, - "startediting": { - "title": "Start Editing", - "help": "More documentation and this walkthrough are available here.", - "save": "Don't forget to regularly save your changes!", - "start": "Start mapping!" - } - }, - "presets": { - "categories": { - "category-building": { - "name": "Building" - }, - "category-golf": { - "name": "Golf" - }, - "category-landuse": { - "name": "Land Use" - }, - "category-path": { - "name": "Path" - }, - "category-rail": { - "name": "Rail" - }, - "category-road": { - "name": "Road" - }, - "category-route": { - "name": "Route" - }, - "category-water-area": { - "name": "Water" - }, - "category-water-line": { - "name": "Water" - } - }, - "fields": { - "access": { - "label": "Access", - "placeholder": "Unknown", - "types": { - "access": "General", - "foot": "Foot", - "motor_vehicle": "Motor Vehicles", - "bicycle": "Bicycles", - "horse": "Horses" - }, - "options": { - "yes": { - "title": "Allowed", - "description": "Access permitted by law; a right of way" - }, - "no": { - "title": "Prohibited", - "description": "Access not permitted to the general public" - }, - "permissive": { - "title": "Permissive", - "description": "Access permitted until such time as the owner revokes the permission" - }, - "private": { - "title": "Private", - "description": "Access permitted only with permission of the owner on an individual basis" - }, - "designated": { - "title": "Designated", - "description": "Access permitted according to signs or specific local laws" - }, - "destination": { - "title": "Destination", - "description": "Access permitted only to reach a destination" - } - } - }, - "access_simple": { - "label": "Access" - }, - "address": { - "label": "Address", - "placeholders": { - "number": "123", - "street": "Street", - "city": "City", - "postcode": "Postal code" - } - }, - "admin_level": { - "label": "Admin Level" - }, - "aerialway": { - "label": "Type" - }, - "aerialway/access": { - "label": "Access" - }, - "aerialway/bubble": { - "label": "Bubble" - }, - "aerialway/capacity": { - "label": "Capacity (per hour)", - "placeholder": "500, 2500, 5000..." - }, - "aerialway/duration": { - "label": "Duration (minutes)", - "placeholder": "1, 2, 3..." - }, - "aerialway/heating": { - "label": "Heated" - }, - "aerialway/occupancy": { - "label": "Occupancy", - "placeholder": "2, 4, 8..." - }, - "aerialway/summer/access": { - "label": "Access (summer)" - }, - "aeroway": { - "label": "Type" - }, - "amenity": { - "label": "Type" - }, - "artist": { - "label": "Artist" - }, - "artwork_type": { - "label": "Type" - }, - "atm": { - "label": "ATM" - }, - "backrest": { - "label": "Backrest" - }, - "barrier": { - "label": "Type" - }, - "bicycle_parking": { - "label": "Type" - }, - "boundary": { - "label": "Type" - }, - "building": { - "label": "Building" - }, - "building_area": { - "label": "Building" - }, - "cans": { - "label": "Accepts Cans" - }, - "capacity": { - "label": "Capacity", - "placeholder": "50, 100, 200..." - }, - "cardinal_direction": { - "label": "Direction" - }, - "clock_direction": { - "label": "Direction", - "options": { - "clockwise": "Clockwise", - "anticlockwise": "Counterclockwise" - } - }, - "clothes": { - "label": "Accepts Clothes" - }, - "collection_times": { - "label": "Collection Times" - }, - "construction": { - "label": "Type" - }, - "country": { - "label": "Country" - }, - "covered": { - "label": "Covered" - }, - "crossing": { - "label": "Type" - }, - "cuisine": { - "label": "Cuisine" - }, - "denomination": { - "label": "Denomination" - }, - "denotation": { - "label": "Denotation" - }, - "description": { - "label": "Description" - }, - "electrified": { - "label": "Electrification" - }, - "elevation": { - "label": "Elevation" - }, - "emergency": { - "label": "Emergency" - }, - "entrance": { - "label": "Type" - }, - "fax": { - "label": "Fax", - "placeholder": "+31 42 123 4567" - }, - "fee": { - "label": "Fee" - }, - "fire_hydrant/type": { - "label": "Type" - }, - "fixme": { - "label": "Fix Me" - }, - "gauge": { - "label": "Gauge" - }, - "generator/method": { - "label": "Method" - }, - "generator/source": { - "label": "Source" - }, - "generator/type": { - "label": "Type" - }, - "glass": { - "label": "Accepts Glass" - }, - "golf_hole": { - "label": "Reference", - "placeholder": "Hole number (1-18)" - }, - "handicap": { - "label": "Handicap", - "placeholder": "1-18" - }, - "highway": { - "label": "Type" - }, - "historic": { - "label": "Type" - }, - "iata": { - "label": "IATA" - }, - "icao": { - "label": "ICAO" - }, - "incline": { - "label": "Incline" - }, - "information": { - "label": "Type" - }, - "internet_access": { - "label": "Internet Access", - "options": { - "yes": "Yes", - "no": "No", - "wlan": "Wifi", - "wired": "Wired", - "terminal": "Terminal" - } - }, - "landuse": { - "label": "Type" - }, - "lanes": { - "label": "Lanes", - "placeholder": "1, 2, 3..." - }, - "layer": { - "label": "Layer" - }, - "leisure": { - "label": "Type" - }, - "levels": { - "label": "Levels", - "placeholder": "2, 4, 6..." - }, - "lit": { - "label": "Lit" - }, - "location": { - "label": "Location" - }, - "man_made": { - "label": "Type" - }, - "maxspeed": { - "label": "Speed Limit", - "placeholder": "40, 50, 60..." - }, - "name": { - "label": "Name", - "placeholder": "Common name (if any)" - }, - "natural": { - "label": "Natural" - }, - "network": { - "label": "Network" - }, - "note": { - "label": "Note" - }, - "office": { - "label": "Type" - }, - "oneway": { - "label": "One Way" - }, - "oneway_yes": { - "label": "One Way" - }, - "opening_hours": { - "label": "Hours" - }, - "operator": { - "label": "Operator" - }, - "paper": { - "label": "Accepts Paper" - }, - "par": { - "label": "Par", - "placeholder": "3, 4, 5..." - }, - "park_ride": { - "label": "Park and Ride" - }, - "parking": { - "label": "Type" - }, - "phone": { - "label": "Phone", - "placeholder": "+31 42 123 4567" - }, - "piste/difficulty": { - "label": "Difficulty" - }, - "piste/grooming": { - "label": "Grooming" - }, - "piste/type": { - "label": "Type" - }, - "place": { - "label": "Type" - }, - "power": { - "label": "Type" - }, - "railway": { - "label": "Type" - }, - "ref": { - "label": "Reference" - }, - "relation": { - "label": "Type" - }, - "religion": { - "label": "Religion", - "options": { - "christian": "Christian", - "muslim": "Muslim", - "buddhist": "Buddhist", - "jewish": "Jewish", - "hindu": "Hindu", - "shinto": "Shinto", - "taoist": "Taoist" - } - }, - "restriction": { - "label": "Type" - }, - "route": { - "label": "Type" - }, - "route_master": { - "label": "Type" - }, - "sac_scale": { - "label": "Path Difficulty" - }, - "service": { - "label": "Type" - }, - "shelter": { - "label": "Shelter" - }, - "shelter_type": { - "label": "Type" - }, - "shop": { - "label": "Type" - }, - "social_facility_for": { - "label": "People served", - "placeholder": "Homeless, Disabled, Child, etc" - }, - "source": { - "label": "Source" - }, - "sport": { - "label": "Sport" - }, - "structure": { - "label": "Structure", - "placeholder": "Unknown", - "options": { - "bridge": "Bridge", - "tunnel": "Tunnel", - "embankment": "Embankment", - "cutting": "Cutting" - } - }, - "studio_type": { - "label": "Type" - }, - "supervised": { - "label": "Supervised" - }, - "surface": { - "label": "Surface" - }, - "toilets/disposal": { - "label": "Disposal" - }, - "tourism": { - "label": "Type" - }, - "towertype": { - "label": "Tower type" - }, - "tracktype": { - "label": "Type" - }, - "trail_visibility": { - "label": "Trail Visibility" - }, - "tree_type": { - "label": "Type" - }, - "tunnel": { - "label": "Tunnel" - }, - "vending": { - "label": "Type of Goods" - }, - "water": { - "label": "Type" - }, - "waterway": { - "label": "Type" - }, - "website": { - "label": "Website", - "placeholder": "http://example.com/" - }, - "wetland": { - "label": "Type" - }, - "wheelchair": { - "label": "Wheelchair Access" - }, - "wikipedia": { - "label": "Wikipedia" - }, - "wood": { - "label": "Type" - } - }, - "presets": { - "address": { - "name": "Address", - "terms": "" - }, - "aerialway": { - "name": "Aerialway", - "terms": "ski lift,funifor,funitel" - }, - "aerialway/cable_car": { - "name": "Cable Car", - "terms": "tramway,ropeway" - }, - "aerialway/chair_lift": { - "name": "Chair Lift", - "terms": "" - }, - "aerialway/gondola": { - "name": "Gondola", - "terms": "" - }, - "aerialway/magic_carpet": { - "name": "Magic Carpet Lift", - "terms": "" - }, - "aerialway/platter": { - "name": "Platter Lift", - "terms": "button lift,poma lift" - }, - "aerialway/pylon": { - "name": "Aerialway Pylon", - "terms": "" - }, - "aerialway/rope_tow": { - "name": "Rope Tow Lift", - "terms": "handle tow,bugel lift" - }, - "aerialway/station": { - "name": "Aerialway Station", - "terms": "" - }, - "aerialway/t-bar": { - "name": "T-bar Lift", - "terms": "" - }, - "aeroway": { - "name": "Aeroway", - "terms": "" - }, - "aeroway/aerodrome": { - "name": "Airport", - "terms": "airplane,airport,aerodrome" - }, - "aeroway/apron": { - "name": "Apron", - "terms": "ramp" - }, - "aeroway/gate": { - "name": "Airport gate", - "terms": "" - }, - "aeroway/hangar": { - "name": "Hangar", - "terms": "" - }, - "aeroway/helipad": { - "name": "Helipad", - "terms": "helicopter,helipad,heliport" - }, - "aeroway/runway": { - "name": "Runway", - "terms": "landing strip" - }, - "aeroway/taxiway": { - "name": "Taxiway", - "terms": "" - }, - "aeroway/terminal": { - "name": "Airport terminal", - "terms": "airport,aerodrome" - }, - "amenity": { - "name": "Amenity", - "terms": "" - }, - "amenity/arts_centre": { - "name": "Arts Center", - "terms": "arts,arts centre" - }, - "amenity/atm": { - "name": "ATM", - "terms": "" - }, - "amenity/bank": { - "name": "Bank", - "terms": "coffer,countinghouse,credit union,depository,exchequer,fund,hoard,investment firm,repository,reserve,reservoir,safe,savings,stock,stockpile,store,storehouse,thrift,treasury,trust company,vault" - }, - "amenity/bar": { - "name": "Bar", - "terms": "" - }, - "amenity/bench": { - "name": "Bench", - "terms": "" - }, - "amenity/bicycle_parking": { - "name": "Bicycle Parking", - "terms": "" - }, - "amenity/bicycle_rental": { - "name": "Bicycle Rental", - "terms": "" - }, - "amenity/boat_rental": { - "name": "Boat Rental", - "terms": "" - }, - "amenity/cafe": { - "name": "Cafe", - "terms": "coffee,tea,coffee shop" - }, - "amenity/car_rental": { - "name": "Car Rental", - "terms": "" - }, - "amenity/car_sharing": { - "name": "Car Sharing", - "terms": "" - }, - "amenity/car_wash": { - "name": "Car Wash", - "terms": "" - }, - "amenity/childcare": { - "name": "Childcare", - "terms": "nursery,orphanage,playgroup" - }, - "amenity/cinema": { - "name": "Cinema", - "terms": "big screen,bijou,cine,drive-in,film,flicks,motion pictures,movie house,movie theater,moving pictures,nabes,photoplay,picture show,pictures,playhouse,show,silver screen" - }, - "amenity/clinic": { - "name": "Clinic", - "terms": "clinic,medical clinic" - }, - "amenity/clock": { - "name": "Clock", - "terms": "" - }, - "amenity/college": { - "name": "College", - "terms": "" - }, - "amenity/courthouse": { - "name": "Courthouse", - "terms": "" - }, - "amenity/dentist": { - "name": "Dentist", - "terms": "dentist,dentist's office" - }, - "amenity/doctor": { - "name": "Doctor", - "terms": "doctor,doctor's office" - }, - "amenity/drinking_water": { - "name": "Drinking Water", - "terms": "water fountain,potable water" - }, - "amenity/embassy": { - "name": "Embassy", - "terms": "" - }, - "amenity/fast_food": { - "name": "Fast Food", - "terms": "" - }, - "amenity/fire_station": { - "name": "Fire Station", - "terms": "" - }, - "amenity/fountain": { - "name": "Fountain", - "terms": "" - }, - "amenity/fuel": { - "name": "Gas Station", - "terms": "petrol,fuel,propane,diesel,lng,cng,biodiesel" - }, - "amenity/grave_yard": { - "name": "Graveyard", - "terms": "" - }, - "amenity/hospital": { - "name": "Hospital", - "terms": "clinic,emergency room,health service,hospice,infirmary,institution,nursing home,rest home,sanatorium,sanitarium,sick bay,surgery,ward" - }, - "amenity/kindergarten": { - "name": "Kindergarten", - "terms": "nursery,preschool" - }, - "amenity/library": { - "name": "Library", - "terms": "" - }, - "amenity/marketplace": { - "name": "Marketplace", - "terms": "" - }, - "amenity/parking": { - "name": "Car Parking", - "terms": "" - }, - "amenity/pharmacy": { - "name": "Pharmacy", - "terms": "" - }, - "amenity/place_of_worship": { - "name": "Place of Worship", - "terms": "abbey,basilica,bethel,cathedral,chancel,chantry,chapel,church,fold,house of God,house of prayer,house of worship,minster,mission,mosque,oratory,parish,sacellum,sanctuary,shrine,synagogue,tabernacle,temple" - }, - "amenity/place_of_worship/buddhist": { - "name": "Buddhist Temple", - "terms": "stupa,vihara,monastery,temple,pagoda,zendo,dojo" - }, - "amenity/place_of_worship/christian": { - "name": "Church", - "terms": "christian,abbey,basilica,bethel,cathedral,chancel,chantry,chapel,church,fold,house of God,house of prayer,house of worship,minster,mission,oratory,parish,sacellum,sanctuary,shrine,tabernacle,temple" - }, - "amenity/place_of_worship/jewish": { - "name": "Synagogue", - "terms": "jewish,synagogue" - }, - "amenity/place_of_worship/muslim": { - "name": "Mosque", - "terms": "muslim,mosque" - }, - "amenity/police": { - "name": "Police", - "terms": "badge,bear,blue,bluecoat,bobby,boy scout,bull,constable,constabulary,cop,copper,corps,county mounty,detective,fed,flatfoot,force,fuzz,gendarme,gumshoe,heat,law,law enforcement,man,narc,officers,patrolman,police" - }, - "amenity/post_box": { - "name": "Mailbox", - "terms": "letter drop,letterbox,mail drop,mailbox,pillar box,postbox" - }, - "amenity/post_office": { - "name": "Post Office", - "terms": "" - }, - "amenity/pub": { - "name": "Pub", - "terms": "" - }, - "amenity/ranger_station": { - "name": "Ranger Station", - "terms": "visitor center,visitor centre,permit center,permit centre,backcountry office,warden office,warden center" - }, - "amenity/recycling": { - "name": "Recycling", - "terms": "" - }, - "amenity/restaurant": { - "name": "Restaurant", - "terms": "bar,cafeteria,café,canteen,chophouse,coffee shop,diner,dining room,dive*,doughtnut shop,drive-in,eatery,eating house,eating place,fast-food place,fish and chips,greasy spoon,grill,hamburger stand,hashery,hideaway,hotdog stand,inn,joint*,luncheonette,lunchroom,night club,outlet*,pizzeria,saloon,soda fountain,watering hole" - }, - "amenity/school": { - "name": "School", - "terms": "academy,alma mater,blackboard,college,department,discipline,establishment,faculty,hall,halls of ivy,institute,institution,jail*,schoolhouse,seminary,university" - }, - "amenity/shelter": { - "name": "Shelter", - "terms": "lean-to" - }, - "amenity/social_facility": { - "name": "Social Facility", - "terms": "" - }, - "amenity/social_facility/food_bank": { - "name": "Food Bank", - "terms": "" - }, - "amenity/social_facility/group_home": { - "name": "Group Home", - "terms": "elderly,old,senior living" - }, - "amenity/social_facility/homeless_shelter": { - "name": "Homeless Shelter", - "terms": "houseless,unhoused,displaced" - }, - "amenity/studio": { - "name": "Studio", - "terms": "recording studio,studio,radio,radio studio,television,television studio" - }, - "amenity/swimming_pool": { - "name": "Swimming Pool", - "terms": "" - }, - "amenity/taxi": { - "name": "Taxi Stand", - "terms": "cab" - }, - "amenity/telephone": { - "name": "Telephone", - "terms": "phone" - }, - "amenity/theatre": { - "name": "Theater", - "terms": "theatre,performance,play,musical" - }, - "amenity/toilets": { - "name": "Toilets", - "terms": "bathroom,restroom,outhouse,privy,head,lavatory,latrine,water closet,WC,W.C." - }, - "amenity/townhall": { - "name": "Town Hall", - "terms": "village hall,city government,courthouse,municipal building,municipal center,municipal centre" - }, - "amenity/university": { - "name": "University", - "terms": "college" - }, - "amenity/vending_machine": { - "name": "Vending Machine", - "terms": "" - }, - "amenity/veterinary": { - "name": "Veterinary", - "terms": "pet clinic,veterinarian,animal hospital,pet doctor" - }, - "amenity/waste_basket": { - "name": "Waste Basket", - "terms": "rubbish bin,litter bin,trash can,garbage can" - }, - "area": { - "name": "Area", - "terms": "" - }, - "barrier": { - "name": "Barrier", - "terms": "" - }, - "barrier/block": { - "name": "Block", - "terms": "" - }, - "barrier/bollard": { - "name": "Bollard", - "terms": "" - }, - "barrier/cattle_grid": { - "name": "Cattle Grid", - "terms": "" - }, - "barrier/city_wall": { - "name": "City Wall", - "terms": "" - }, - "barrier/cycle_barrier": { - "name": "Cycle Barrier", - "terms": "" - }, - "barrier/ditch": { - "name": "Ditch", - "terms": "" - }, - "barrier/entrance": { - "name": "Entrance", - "terms": "" - }, - "barrier/fence": { - "name": "Fence", - "terms": "" - }, - "barrier/gate": { - "name": "Gate", - "terms": "" - }, - "barrier/hedge": { - "name": "Hedge", - "terms": "" - }, - "barrier/kissing_gate": { - "name": "Kissing Gate", - "terms": "" - }, - "barrier/lift_gate": { - "name": "Lift Gate", - "terms": "" - }, - "barrier/retaining_wall": { - "name": "Retaining Wall", - "terms": "" - }, - "barrier/stile": { - "name": "Stile", - "terms": "" - }, - "barrier/toll_booth": { - "name": "Toll Booth", - "terms": "" - }, - "barrier/wall": { - "name": "Wall", - "terms": "" - }, - "boundary/administrative": { - "name": "Administrative Boundary", - "terms": "" - }, - "building": { - "name": "Building", - "terms": "" - }, - "building/apartments": { - "name": "Apartments", - "terms": "" - }, - "building/barn": { - "name": "Barn", - "terms": "" - }, - "building/bunker": { - "name": "Bunker", - "terms": "" - }, - "building/cabin": { - "name": "Cabin", - "terms": "" - }, - "building/cathedral": { - "name": "Cathedral", - "terms": "" - }, - "building/chapel": { - "name": "Chapel", - "terms": "" - }, - "building/church": { - "name": "Church", - "terms": "" - }, - "building/commercial": { - "name": "Commercial Building", - "terms": "" - }, - "building/construction": { - "name": "Building Under Construction", - "terms": "" - }, - "building/detached": { - "name": "Detached Home", - "terms": "" - }, - "building/dormitory": { - "name": "Dormitory", - "terms": "" - }, - "building/entrance": { - "name": "Entrance", - "terms": "" - }, - "building/garage": { - "name": "Garage", - "terms": "" - }, - "building/garages": { - "name": "Garages", - "terms": "" - }, - "building/greenhouse": { - "name": "Greenhouse", - "terms": "" - }, - "building/hospital": { - "name": "Hospital Building", - "terms": "" - }, - "building/hotel": { - "name": "Hotel Building", - "terms": "" - }, - "building/house": { - "name": "House", - "terms": "" - }, - "building/hut": { - "name": "Hut", - "terms": "" - }, - "building/industrial": { - "name": "Industrial Building", - "terms": "" - }, - "building/public": { - "name": "Public Building", - "terms": "" - }, - "building/residential": { - "name": "Residential Building", - "terms": "" - }, - "building/retail": { - "name": "Retail Building", - "terms": "" - }, - "building/roof": { - "name": "Roof", - "terms": "" - }, - "building/school": { - "name": "School Building", - "terms": "" - }, - "building/shed": { - "name": "Shed", - "terms": "" - }, - "building/stable": { - "name": "Stable", - "terms": "" - }, - "building/static_caravan": { - "name": "Static Mobile Home", - "terms": "" - }, - "building/terrace": { - "name": "Row Houses", - "terms": "" - }, - "building/train_station": { - "name": "Train Station", - "terms": "" - }, - "building/university": { - "name": "University Building", - "terms": "" - }, - "building/warehouse": { - "name": "Warehouse", - "terms": "" - }, - "craft/basket_maker": { - "name": "Basket Maker", - "terms": "basket,basketry,basket maker,basket weaver" - }, - "craft/beekeeper": { - "name": "Beekeeper", - "terms": "bees,beekeeper,bee box" - }, - "craft/blacksmith": { - "name": "Blacksmith", - "terms": "blacksmith" - }, - "craft/boatbuilder": { - "name": "Boat Builder", - "terms": "boat builder" - }, - "craft/bookbinder": { - "name": "Bookbinder", - "terms": "bookbinder,book repair" - }, - "craft/brewery": { - "name": "Brewery", - "terms": "brewery" - }, - "craft/carpenter": { - "name": "Carpenter", - "terms": "carpenter,woodworker" - }, - "craft/carpet_layer": { - "name": "Carpet Layer", - "terms": "carpet layer" - }, - "craft/caterer": { - "name": "Caterer", - "terms": "Caterer,Catering" - }, - "craft/clockmaker": { - "name": "Clockmaker", - "terms": "clock,clockmaker,clock repair" - }, - "craft/confectionary": { - "name": "Confectionary", - "terms": "confectionary,sweets,candy" - }, - "craft/dressmaker": { - "name": "Dressmaker", - "terms": "dress,dressmaker" - }, - "craft/electrician": { - "name": "Electrician", - "terms": "electrician" - }, - "craft/gardener": { - "name": "Gardener", - "terms": "gardener,landscaper,grounds keeper" - }, - "craft/glaziery": { - "name": "Glaziery", - "terms": "glass,glass foundry,stained-glass,window" - }, - "craft/handicraft": { - "name": "Handicraft", - "terms": "handicraft" - }, - "craft/hvac": { - "name": "HVAC", - "terms": "heating,ventilating,air-conditioning,air conditioning" - }, - "craft/insulator": { - "name": "Insulator", - "terms": "insulation,insulator" - }, - "craft/jeweler": { - "name": "Jeweler", - "terms": "jeweler,gem,diamond" - }, - "craft/key_cutter": { - "name": "Key Cutter", - "terms": "key,key cutter" - }, - "craft/locksmith": { - "name": "Locksmith", - "terms": "locksmith,lock" - }, - "craft/metal_construction": { - "name": "Metal Construction", - "terms": "metal construction" - }, - "craft/optician": { - "name": "Optician", - "terms": "glasses,optician" - }, - "craft/painter": { - "name": "Painter", - "terms": "painter" - }, - "craft/photographer": { - "name": "Photographer", - "terms": "photographer" - }, - "craft/photographic_labratory": { - "name": "Photographic Labratory", - "terms": "photographic labratory,film developer" - }, - "craft/plasterer": { - "name": "Plasterer", - "terms": "plasterer" - }, - "craft/plumber": { - "name": "Plumber", - "terms": "pumber" - }, - "craft/pottery": { - "name": "Pottery", - "terms": "pottery,potter" - }, - "craft/rigger": { - "name": "Rigger", - "terms": "rigger" - }, - "craft/roofer": { - "name": "Roofer", - "terms": "roofer" - }, - "craft/saddler": { - "name": "Saddler", - "terms": "saddler" - }, - "craft/sailmaker": { - "name": "Sailmaker", - "terms": "sailmaker" - }, - "craft/sawmill": { - "name": "Sawmill", - "terms": "sawmill,lumber" - }, - "craft/scaffolder": { - "name": "Scaffolder", - "terms": "scaffolder" - }, - "craft/sculpter": { - "name": "Sculpter", - "terms": "sculpter" - }, - "craft/shoemaker": { - "name": "Shoemaker", - "terms": "shoe repair,shoemaker" - }, - "craft/stonemason": { - "name": "Stonemason", - "terms": "stonemason,masonry" - }, - "craft/sweep": { - "name": "Chimney Sweep", - "terms": "sweep,chimney sweep" - }, - "craft/tailor": { - "name": "Tailor", - "terms": "tailor,clothes" - }, - "craft/tiler": { - "name": "Tiler", - "terms": "tiler" - }, - "craft/tinsmith": { - "name": "Tinsmith", - "terms": "tinsmith" - }, - "craft/upholsterer": { - "name": "Upholsterer", - "terms": "upholsterer" - }, - "craft/watchmaker": { - "name": "Watchmaker", - "terms": "watch,watchmaker,watch repair" - }, - "craft/window_construction": { - "name": "Window Construction", - "terms": "window,window maker,window construction" - }, - "embankment": { - "name": "Embankment", - "terms": "" - }, - "emergency/ambulance_station": { - "name": "Ambulance Station", - "terms": "" - }, - "emergency/fire_hydrant": { - "name": "Fire Hydrant", - "terms": "" - }, - "emergency/phone": { - "name": "Emergency Phone", - "terms": "" - }, - "entrance": { - "name": "Entrance", - "terms": "" - }, - "footway/crossing": { - "name": "Crossing", - "terms": "crosswalk,zebra crossing" - }, - "footway/sidewalk": { - "name": "Sidewalk", - "terms": "" - }, - "golf/bunker": { - "name": "Sand Trap", - "terms": "hazard,bunker" - }, - "golf/fairway": { - "name": "Fairway", - "terms": "" - }, - "golf/green": { - "name": "Putting Green", - "terms": "putting green" - }, - "golf/hole": { - "name": "Golf Hole", - "terms": "" - }, - "golf/lateral_water_hazard": { - "name": "Lateral Water Hazard", - "terms": "" - }, - "golf/rough": { - "name": "Rough", - "terms": "" - }, - "golf/tee": { - "name": "Tee Box", - "terms": "teeing ground" - }, - "golf/water_hazard": { - "name": "Water Hazard", - "terms": "" - }, - "highway": { - "name": "Highway", - "terms": "" - }, - "highway/bridleway": { - "name": "Bridle Path", - "terms": "bridleway,equestrian trail,horse riding path,bridle road,horse trail" - }, - "highway/bus_stop": { - "name": "Bus Stop", - "terms": "" - }, - "highway/crossing": { - "name": "Crossing", - "terms": "crosswalk,zebra crossing" - }, - "highway/cycleway": { - "name": "Cycle Path", - "terms": "" - }, - "highway/footway": { - "name": "Foot Path", - "terms": "beaten path,boulevard,clearing,course,cut*,drag*,footpath,highway,lane,line,orbit,passage,pathway,rail,rails,road,roadway,route,street,thoroughfare,trackway,trail,trajectory,walk" - }, - "highway/living_street": { - "name": "Living Street", - "terms": "" - }, - "highway/mini_roundabout": { - "name": "Mini-Roundabout", - "terms": "" - }, - "highway/motorway": { - "name": "Motorway", - "terms": "" - }, - "highway/motorway_junction": { - "name": "Motorway Junction", - "terms": "" - }, - "highway/motorway_link": { - "name": "Motorway Link", - "terms": "ramp,on ramp,off ramp" - }, - "highway/path": { - "name": "Path", - "terms": "" - }, - "highway/pedestrian": { - "name": "Pedestrian", - "terms": "" - }, - "highway/primary": { - "name": "Primary Road", - "terms": "" - }, - "highway/primary_link": { - "name": "Primary Link", - "terms": "ramp,on ramp,off ramp" - }, - "highway/residential": { - "name": "Residential Road", - "terms": "" - }, - "highway/rest_area": { - "name": "Rest Area", - "terms": "rest stop,turnout,lay-by" - }, - "highway/road": { - "name": "Unknown Road", - "terms": "" - }, - "highway/secondary": { - "name": "Secondary Road", - "terms": "" - }, - "highway/secondary_link": { - "name": "Secondary Link", - "terms": "ramp,on ramp,off ramp" - }, - "highway/service": { - "name": "Service Road", - "terms": "" - }, - "highway/service/alley": { - "name": "Alley", - "terms": "" - }, - "highway/service/drive-through": { - "name": "Drive-Through", - "terms": "" - }, - "highway/service/driveway": { - "name": "Driveway", - "terms": "" - }, - "highway/service/emergency_access": { - "name": "Emergency Access", - "terms": "" - }, - "highway/service/parking_aisle": { - "name": "Parking Aisle", - "terms": "" - }, - "highway/services": { - "name": "Service Area", - "terms": "services,travel plaza,service station" - }, - "highway/steps": { - "name": "Steps", - "terms": "stairs,staircase" - }, - "highway/stop": { - "name": "Stop Sign", - "terms": "stop sign" - }, - "highway/tertiary": { - "name": "Tertiary Road", - "terms": "" - }, - "highway/tertiary_link": { - "name": "Tertiary Link", - "terms": "ramp,on ramp,off ramp" - }, - "highway/track": { - "name": "Track", - "terms": "" - }, - "highway/traffic_signals": { - "name": "Traffic Signals", - "terms": "light,stoplight,traffic light" - }, - "highway/trunk": { - "name": "Trunk Road", - "terms": "" - }, - "highway/trunk_link": { - "name": "Trunk Link", - "terms": "ramp,on ramp,off ramp" - }, - "highway/turning_circle": { - "name": "Turning Circle", - "terms": "" - }, - "highway/unclassified": { - "name": "Unclassified Road", - "terms": "" - }, - "historic": { - "name": "Historic Site", - "terms": "" - }, - "historic/archaeological_site": { - "name": "Archaeological Site", - "terms": "" - }, - "historic/boundary_stone": { - "name": "Boundary Stone", - "terms": "" - }, - "historic/castle": { - "name": "Castle", - "terms": "" - }, - "historic/memorial": { - "name": "Memorial", - "terms": "" - }, - "historic/monument": { - "name": "Monument", - "terms": "" - }, - "historic/ruins": { - "name": "Ruins", - "terms": "" - }, - "historic/wayside_cross": { - "name": "Wayside Cross", - "terms": "" - }, - "historic/wayside_shrine": { - "name": "Wayside Shrine", - "terms": "" - }, - "landuse": { - "name": "Landuse", - "terms": "" - }, - "landuse/allotments": { - "name": "Allotments", - "terms": "" - }, - "landuse/basin": { - "name": "Basin", - "terms": "" - }, - "landuse/cemetery": { - "name": "Cemetery", - "terms": "" - }, - "landuse/commercial": { - "name": "Commercial", - "terms": "" - }, - "landuse/construction": { - "name": "Construction", - "terms": "" - }, - "landuse/farm": { - "name": "Farm", - "terms": "" - }, - "landuse/farmland": { - "name": "Farmland", - "terms": "" - }, - "landuse/farmyard": { - "name": "Farmyard", - "terms": "" - }, - "landuse/forest": { - "name": "Forest", - "terms": "" - }, - "landuse/grass": { - "name": "Grass", - "terms": "" - }, - "landuse/industrial": { - "name": "Industrial", - "terms": "" - }, - "landuse/meadow": { - "name": "Meadow", - "terms": "" - }, - "landuse/orchard": { - "name": "Orchard", - "terms": "" - }, - "landuse/quarry": { - "name": "Quarry", - "terms": "" - }, - "landuse/residential": { - "name": "Residential", - "terms": "" - }, - "landuse/retail": { - "name": "Retail", - "terms": "" - }, - "landuse/vineyard": { - "name": "Vineyard", - "terms": "" - }, - "leisure": { - "name": "Leisure", - "terms": "" - }, - "leisure/common": { - "name": "Common", - "terms": "open space" - }, - "leisure/dog_park": { - "name": "Dog Park", - "terms": "" - }, - "leisure/garden": { - "name": "Garden", - "terms": "" - }, - "leisure/golf_course": { - "name": "Golf Course", - "terms": "links" - }, - "leisure/marina": { - "name": "Marina", - "terms": "" - }, - "leisure/park": { - "name": "Park", - "terms": "esplanade,estate,forest,garden,grass,green,grounds,lawn,lot,meadow,parkland,place,playground,plaza,pleasure garden,recreation area,square,tract,village green,woodland" - }, - "leisure/pitch": { - "name": "Sport Pitch", - "terms": "" - }, - "leisure/pitch/american_football": { - "name": "American Football Field", - "terms": "" - }, - "leisure/pitch/baseball": { - "name": "Baseball Diamond", - "terms": "" - }, - "leisure/pitch/basketball": { - "name": "Basketball Court", - "terms": "" - }, - "leisure/pitch/skateboard": { - "name": "Skate Park", - "terms": "" - }, - "leisure/pitch/soccer": { - "name": "Soccer Field", - "terms": "" - }, - "leisure/pitch/tennis": { - "name": "Tennis Court", - "terms": "" - }, - "leisure/pitch/volleyball": { - "name": "Volleyball Court", - "terms": "" - }, - "leisure/playground": { - "name": "Playground", - "terms": "jungle gym,play area" - }, - "leisure/slipway": { - "name": "Slipway", - "terms": "" - }, - "leisure/sports_center": { - "name": "Sports Center", - "terms": "gym" - }, - "leisure/stadium": { - "name": "Stadium", - "terms": "" - }, - "leisure/swimming_pool": { - "name": "Swimming Pool", - "terms": "" - }, - "leisure/track": { - "name": "Race Track", - "terms": "" - }, - "line": { - "name": "Line", - "terms": "" - }, - "man_made": { - "name": "Man Made", - "terms": "" - }, - "man_made/breakwater": { - "name": "Breakwater", - "terms": "" - }, - "man_made/cutline": { - "name": "Cut line", - "terms": "" - }, - "man_made/embankment": { - "name": "Embankment", - "terms": "" - }, - "man_made/flagpole": { - "name": "Flagpole", - "terms": "" - }, - "man_made/lighthouse": { - "name": "Lighthouse", - "terms": "" - }, - "man_made/observation": { - "name": "Observation Tower", - "terms": "lookout tower,fire tower" - }, - "man_made/pier": { - "name": "Pier", - "terms": "" - }, - "man_made/pipeline": { - "name": "Pipeline", - "terms": "" - }, - "man_made/survey_point": { - "name": "Survey Point", - "terms": "" - }, - "man_made/tower": { - "name": "Tower", - "terms": "" - }, - "man_made/wastewater_plant": { - "name": "Wastewater Plant", - "terms": "sewage works,sewage treatment plant,water treatment plant,reclamation plant" - }, - "man_made/water_tower": { - "name": "Water Tower", - "terms": "" - }, - "man_made/water_well": { - "name": "Water well", - "terms": "" - }, - "man_made/water_works": { - "name": "Water Works", - "terms": "" - }, - "military/airfield": { - "name": "Airfield", - "terms": "" - }, - "military/barracks": { - "name": "Barracks", - "terms": "" - }, - "military/bunker": { - "name": "Bunker", - "terms": "" - }, - "military/range": { - "name": "Military Range", - "terms": "" - }, - "natural": { - "name": "Natural", - "terms": "" - }, - "natural/bay": { - "name": "Bay", - "terms": "" - }, - "natural/beach": { - "name": "Beach", - "terms": "" - }, - "natural/cliff": { - "name": "Cliff", - "terms": "" - }, - "natural/coastline": { - "name": "Coastline", - "terms": "shore" - }, - "natural/fell": { - "name": "Fell", - "terms": "" - }, - "natural/glacier": { - "name": "Glacier", - "terms": "" - }, - "natural/grassland": { - "name": "Grassland", - "terms": "" - }, - "natural/heath": { - "name": "Heath", - "terms": "" - }, - "natural/peak": { - "name": "Peak", - "terms": "acme,aiguille,alp,climax,crest,crown,hill,mount,mountain,pinnacle,summit,tip,top" - }, - "natural/scree": { - "name": "Scree", - "terms": "loose rocks" - }, - "natural/scrub": { - "name": "Scrub", - "terms": "" - }, - "natural/spring": { - "name": "Spring", - "terms": "" - }, - "natural/tree": { - "name": "Tree", - "terms": "" - }, - "natural/water": { - "name": "Water", - "terms": "" - }, - "natural/water/lake": { - "name": "Lake", - "terms": "lakelet,loch,mere" - }, - "natural/water/pond": { - "name": "Pond", - "terms": "lakelet,millpond,tarn,pool,mere" - }, - "natural/water/reservoir": { - "name": "Reservoir", - "terms": "" - }, - "natural/wetland": { - "name": "Wetland", - "terms": "" - }, - "natural/wood": { - "name": "Wood", - "terms": "" - }, - "office": { - "name": "Office", - "terms": "" - }, - "office/accountant": { - "name": "Accountant", - "terms": "" - }, - "office/administrative": { - "name": "Administrative Office", - "terms": "" - }, - "office/architect": { - "name": "Architect", - "terms": "" - }, - "office/company": { - "name": "Company Office", - "terms": "" - }, - "office/educational_institution": { - "name": "Educational Institution", - "terms": "" - }, - "office/employment_agency": { - "name": "Employment Agency", - "terms": "" - }, - "office/estate_agent": { - "name": "Real Estate Office", - "terms": "" - }, - "office/financial": { - "name": "Financial Office", - "terms": "" - }, - "office/government": { - "name": "Government Office", - "terms": "" - }, - "office/insurance": { - "name": "Insurance Office", - "terms": "" - }, - "office/it": { - "name": "IT Office", - "terms": "" - }, - "office/lawyer": { - "name": "Law Office", - "terms": "" - }, - "office/newspaper": { - "name": "Newspaper", - "terms": "" - }, - "office/ngo": { - "name": "NGO Office", - "terms": "" - }, - "office/physician": { - "name": "Physician", - "terms": "" - }, - "office/political_party": { - "name": "Political Party", - "terms": "" - }, - "office/research": { - "name": "Research Office", - "terms": "" - }, - "office/telecommunication": { - "name": "Telecom Office", - "terms": "" - }, - "office/therapist": { - "name": "Therapist", - "terms": "" - }, - "office/travel_agent": { - "name": "Travel Agency", - "terms": "" - }, - "piste": { - "name": "Piste/Ski Trail", - "terms": "ski,sled,sleigh,snowboard,nordic,downhill,snowmobile" - }, - "place": { - "name": "Place", - "terms": "" - }, - "place/city": { - "name": "City", - "terms": "" - }, - "place/hamlet": { - "name": "Hamlet", - "terms": "" - }, - "place/island": { - "name": "Island", - "terms": "archipelago,atoll,bar,cay,isle,islet,key,reef" - }, - "place/isolated_dwelling": { - "name": "Isolated Dwelling", - "terms": "" - }, - "place/locality": { - "name": "Locality", - "terms": "" - }, - "place/town": { - "name": "Town", - "terms": "" - }, - "place/village": { - "name": "Village", - "terms": "" - }, - "point": { - "name": "Point", - "terms": "" - }, - "power": { - "name": "Power", - "terms": "" - }, - "power/generator": { - "name": "Power Generator", - "terms": "" - }, - "power/line": { - "name": "Power Line", - "terms": "" - }, - "power/minor_line": { - "name": "Minor Power Line", - "terms": "" - }, - "power/pole": { - "name": "Power Pole", - "terms": "" - }, - "power/sub_station": { - "name": "Substation", - "terms": "" - }, - "power/tower": { - "name": "High-Voltage Tower", - "terms": "" - }, - "power/transformer": { - "name": "Transformer", - "terms": "" - }, - "public_transport/platform": { - "name": "Platform", - "terms": "" - }, - "public_transport/stop_position": { - "name": "Stop Position", - "terms": "" - }, - "railway": { - "name": "Railway", - "terms": "" - }, - "railway/abandoned": { - "name": "Abandoned Railway", - "terms": "" - }, - "railway/disused": { - "name": "Disused Railway", - "terms": "" - }, - "railway/funicular": { - "name": "Funicular", - "terms": "venicular,cliff railway,cable car,cable railway,funicular railway" - }, - "railway/halt": { - "name": "Railway Halt", - "terms": "break,interrupt,rest,wait,interruption" - }, - "railway/level_crossing": { - "name": "Level Crossing", - "terms": "crossing,railroad crossing,railway crossing,grade crossing,road through railroad,train crossing" - }, - "railway/monorail": { - "name": "Monorail", - "terms": "" - }, - "railway/narrow_gauge": { - "name": "Narrow Gauge Rail", - "terms": "narrow gauge railway,narrow gauge railroad" - }, - "railway/platform": { - "name": "Railway Platform", - "terms": "" - }, - "railway/rail": { - "name": "Rail", - "terms": "" - }, - "railway/station": { - "name": "Railway Station", - "terms": "train station,station" - }, - "railway/subway": { - "name": "Subway", - "terms": "" - }, - "railway/subway_entrance": { - "name": "Subway Entrance", - "terms": "" - }, - "railway/tram": { - "name": "Tram", - "terms": "streetcar" - }, - "relation": { - "name": "Relation", - "terms": "" - }, - "route/ferry": { - "name": "Ferry Route", - "terms": "" - }, - "shop": { - "name": "Shop", - "terms": "" - }, - "shop/alcohol": { - "name": "Liquor Store", - "terms": "alcohol" - }, - "shop/art": { - "name": "Art Shop", - "terms": "art store,art gallery" - }, - "shop/bakery": { - "name": "Bakery", - "terms": "" - }, - "shop/beauty": { - "name": "Beauty Shop", - "terms": "nail spa,spa,salon,tanning" - }, - "shop/beverages": { - "name": "Beverage Store", - "terms": "" - }, - "shop/bicycle": { - "name": "Bicycle Shop", - "terms": "" - }, - "shop/bookmaker": { - "name": "Bookmaker", - "terms": "" - }, - "shop/books": { - "name": "Bookstore", - "terms": "" - }, - "shop/boutique": { - "name": "Boutique", - "terms": "" - }, - "shop/butcher": { - "name": "Butcher", - "terms": "" - }, - "shop/car": { - "name": "Car Dealership", - "terms": "" - }, - "shop/car_parts": { - "name": "Car Parts Store", - "terms": "" - }, - "shop/car_repair": { - "name": "Car Repair Shop", - "terms": "" - }, - "shop/chemist": { - "name": "Chemist", - "terms": "" - }, - "shop/clothes": { - "name": "Clothing Store", - "terms": "" - }, - "shop/computer": { - "name": "Computer Store", - "terms": "" - }, - "shop/confectionery": { - "name": "Confectionery", - "terms": "" - }, - "shop/convenience": { - "name": "Convenience Store", - "terms": "" - }, - "shop/deli": { - "name": "Deli", - "terms": "" - }, - "shop/department_store": { - "name": "Department Store", - "terms": "" - }, - "shop/doityourself": { - "name": "DIY Store", - "terms": "" - }, - "shop/dry_cleaning": { - "name": "Dry Cleaners", - "terms": "" - }, - "shop/electronics": { - "name": "Electronics Store", - "terms": "" - }, - "shop/farm": { - "name": "Produce Stand", - "terms": "farm shop,farm stand" - }, - "shop/fishmonger": { - "name": "Fishmonger", - "terms": "" - }, - "shop/florist": { - "name": "Florist", - "terms": "" - }, - "shop/furniture": { - "name": "Furniture Store", - "terms": "" - }, - "shop/garden_centre": { - "name": "Garden Center", - "terms": "garden centre" - }, - "shop/gift": { - "name": "Gift Shop", - "terms": "" - }, - "shop/greengrocer": { - "name": "Greengrocer", - "terms": "" - }, - "shop/hairdresser": { - "name": "Hairdresser", - "terms": "" - }, - "shop/hardware": { - "name": "Hardware Store", - "terms": "" - }, - "shop/hifi": { - "name": "Hifi Store", - "terms": "" - }, - "shop/jewelry": { - "name": "Jeweler", - "terms": "" - }, - "shop/kiosk": { - "name": "Kiosk", - "terms": "" - }, - "shop/laundry": { - "name": "Laundry", - "terms": "" - }, - "shop/locksmith": { - "name": "Locksmith", - "terms": "keys" - }, - "shop/lottery": { - "name": "Lottery Shop", - "terms": "" - }, - "shop/mall": { - "name": "Mall", - "terms": "" - }, - "shop/mobile_phone": { - "name": "Mobile Phone Store", - "terms": "" - }, - "shop/motorcycle": { - "name": "Motorcycle Dealership", - "terms": "" - }, - "shop/music": { - "name": "Music Store", - "terms": "" - }, - "shop/newsagent": { - "name": "Newsagent", - "terms": "" - }, - "shop/optician": { - "name": "Optician", - "terms": "" - }, - "shop/outdoor": { - "name": "Outdoor Store", - "terms": "" - }, - "shop/pet": { - "name": "Pet Store", - "terms": "" - }, - "shop/photo": { - "name": "Photography Store", - "terms": "" - }, - "shop/shoes": { - "name": "Shoe Store", - "terms": "" - }, - "shop/sports": { - "name": "Sporting Goods Store", - "terms": "" - }, - "shop/stationery": { - "name": "Stationery Store", - "terms": "" - }, - "shop/supermarket": { - "name": "Supermarket", - "terms": "bazaar,boutique,chain,co-op,cut-rate store,discount store,five-and-dime,flea market,galleria,grocery store,mall,mart,outlet,outlet store,shop,shopping center,shopping centre,shopping plaza,stand,store,supermarket,thrift shop" - }, - "shop/toys": { - "name": "Toy Store", - "terms": "" - }, - "shop/travel_agency": { - "name": "Travel Agency", - "terms": "" - }, - "shop/tyres": { - "name": "Tire Store", - "terms": "" - }, - "shop/vacant": { - "name": "Vacant Shop", - "terms": "" - }, - "shop/variety_store": { - "name": "Variety Store", - "terms": "" - }, - "shop/video": { - "name": "Video Store", - "terms": "" - }, - "tourism": { - "name": "Tourism", - "terms": "" - }, - "tourism/alpine_hut": { - "name": "Alpine Hut", - "terms": "" - }, - "tourism/artwork": { - "name": "Artwork", - "terms": "mural,sculpture,statue" - }, - "tourism/attraction": { - "name": "Tourist Attraction", - "terms": "" - }, - "tourism/camp_site": { - "name": "Camp Site", - "terms": "camping" - }, - "tourism/caravan_site": { - "name": "RV Park", - "terms": "" - }, - "tourism/chalet": { - "name": "Chalet", - "terms": "" - }, - "tourism/guest_house": { - "name": "Guest House", - "terms": "B&B,Bed & Breakfast,Bed and Breakfast" - }, - "tourism/hostel": { - "name": "Hostel", - "terms": "" - }, - "tourism/hotel": { - "name": "Hotel", - "terms": "" - }, - "tourism/information": { - "name": "Information", - "terms": "" - }, - "tourism/motel": { - "name": "Motel", - "terms": "" - }, - "tourism/museum": { - "name": "Museum", - "terms": "exhibition,exhibits archive,foundation,gallery,hall,institution,library,menagerie,repository,salon,storehouse,treasury,vault" - }, - "tourism/picnic_site": { - "name": "Picnic Site", - "terms": "" - }, - "tourism/theme_park": { - "name": "Theme Park", - "terms": "" - }, - "tourism/viewpoint": { - "name": "Viewpoint", - "terms": "" - }, - "tourism/zoo": { - "name": "Zoo", - "terms": "" - }, - "type/boundary": { - "name": "Boundary", - "terms": "" - }, - "type/boundary/administrative": { - "name": "Administrative Boundary", - "terms": "" - }, - "type/multipolygon": { - "name": "Multipolygon", - "terms": "" - }, - "type/restriction": { - "name": "Restriction", - "terms": "" - }, - "type/route": { - "name": "Route", - "terms": "" - }, - "type/route/bicycle": { - "name": "Cycle Route", - "terms": "" - }, - "type/route/bus": { - "name": "Bus Route", - "terms": "" - }, - "type/route/detour": { - "name": "Detour Route", - "terms": "" - }, - "type/route/ferry": { - "name": "Ferry Route", - "terms": "" - }, - "type/route/foot": { - "name": "Foot Route", - "terms": "" - }, - "type/route/hiking": { - "name": "Hiking Route", - "terms": "" - }, - "type/route/pipeline": { - "name": "Pipeline Route", - "terms": "" - }, - "type/route/power": { - "name": "Power Route", - "terms": "" - }, - "type/route/road": { - "name": "Road Route", - "terms": "" - }, - "type/route/train": { - "name": "Train Route", - "terms": "" - }, - "type/route/tram": { - "name": "Tram Route", - "terms": "" - }, - "type/route_master": { - "name": "Route Master", - "terms": "" - }, - "vertex": { - "name": "Other", - "terms": "" - }, - "waterway": { - "name": "Waterway", - "terms": "" - }, - "waterway/canal": { - "name": "Canal", - "terms": "" - }, - "waterway/dam": { - "name": "Dam", - "terms": "" - }, - "waterway/ditch": { - "name": "Ditch", - "terms": "" - }, - "waterway/drain": { - "name": "Drain", - "terms": "" - }, - "waterway/river": { - "name": "River", - "terms": "beck,branch,brook,course,creek,estuary,rill,rivulet,run,runnel,stream,tributary,watercourse" - }, - "waterway/riverbank": { - "name": "Riverbank", - "terms": "" - }, - "waterway/stream": { - "name": "Stream", - "terms": "beck,branch,brook,burn,course,creek,current,drift,flood,flow,freshet,race,rill,rindle,rivulet,run,runnel,rush,spate,spritz,surge,tide,torrent,tributary,watercourse" - }, - "waterway/weir": { - "name": "Weir", - "terms": "" - } - } - } - }, - "suggestions": { - "amenity": { - "pub": { - "The Green Man": { - "count": 51 - }, - "Kings Arms": { - "count": 67 - }, - "Red Lion": { - "count": 203 - }, - "The Ship": { - "count": 87 - }, - "The White Horse": { - "count": 201 - }, - "The White Hart": { - "count": 228 - }, - "Royal Oak": { - "count": 147 - }, - "The Red Lion": { - "count": 231 - }, - "The Kings Arms": { - "count": 58 - }, - "The Star": { - "count": 73 - }, - "The Anchor": { - "count": 64 - }, - "The Cross Keys": { - "count": 55 - }, - "The Wheatsheaf": { - "count": 117 - }, - "The Crown Inn": { - "count": 68 - }, - "The Kings Head": { - "count": 53 - }, - "The Castle": { - "count": 58 - }, - "The Railway": { - "count": 100 - }, - "The White Lion": { - "count": 118 - }, - "The Bell": { - "count": 121 - }, - "The Bull": { - "count": 67 - }, - "The Plough": { - "count": 177 - }, - "The George": { - "count": 109 - }, - "The Royal Oak": { - "count": 210 - }, - "The Fox": { - "count": 76 - }, - "Prince of Wales": { - "count": 76 - }, - "The Rising Sun": { - "count": 69 - }, - "The Prince of Wales": { - "count": 51 - }, - "The Crown": { - "count": 241 - }, - "The Chequers": { - "count": 64 - }, - "The Swan": { - "count": 150 - }, - "Rose and Crown": { - "count": 79 - }, - "The Victoria": { - "count": 68 - }, - "New Inn": { - "count": 89 - }, - "Royal Hotel": { - "count": 55 - }, - "Cross Keys": { - "count": 59 - }, - "The Greyhound": { - "count": 96 - }, - "The Black Horse": { - "count": 94 - }, - "The New Inn": { - "count": 104 - }, - "Kings Head": { - "count": 57 - }, - "The Angel": { - "count": 53 - }, - "The Queens Head": { - "count": 51 - }, - "The Ship Inn": { - "count": 83 - }, - "Rose & Crown": { - "count": 51 - }, - "Queens Head": { - "count": 51 - }, - "Irish Pub": { - "count": 79 - } - }, - "fuel": { - "76": { - "count": 295 - }, - "Neste": { - "count": 192 - }, - "BP": { - "count": 2444 - }, - "Shell": { - "count": 8191 - }, - "Agip": { - "count": 2652 - }, - "Migrol": { - "count": 65 - }, - "Avia": { - "count": 883 - }, - "Texaco": { - "count": 667 - }, - "Total": { - "count": 2545 - }, - "Statoil": { - "count": 589 - }, - "Esso": { - "count": 3595 - }, - "Jet": { - "count": 438 - }, - "Avanti": { - "count": 89 - }, - "Sainsbury's": { - "count": 57 - }, - "OMV": { - "count": 706 - }, - "Aral": { - "count": 1334 - }, - "Tesco": { - "count": 193 - }, - "JET": { - "count": 178 - }, - "Morrisons": { - "count": 108 - }, - "United": { - "count": 89 - }, - "Canadian Tire": { - "count": 65 - }, - "Mobil": { - "count": 586 - }, - "Caltex": { - "count": 973 - }, - "Sunoco": { - "count": 336 - }, - "Q8": { - "count": 1160 - }, - "ABC": { - "count": 80 - }, - "Tankstelle": { - "count": 115 - }, - "ARAL": { - "count": 366 - }, - "CEPSA": { - "count": 1017 - }, - "BFT": { - "count": 88 - }, - "Petron": { - "count": 862 - }, - "Intermarché": { - "count": 428 - }, - "Super U": { - "count": 122 - }, - "Auchan": { - "count": 52 - }, - "Elf": { - "count": 131 - }, - "Carrefour": { - "count": 199 - }, - "Station Service E. Leclerc": { - "count": 534 - }, - "Shell Express": { - "count": 129 - }, - "Hess": { - "count": 114 - }, - "Flying V": { - "count": 132 - }, - "bft": { - "count": 169 - }, - "Gulf": { - "count": 192 - }, - "PTT": { - "count": 176 - }, - "St1": { - "count": 102 - }, - "Teboil": { - "count": 120 - }, - "HEM": { - "count": 218 - }, - "GALP": { - "count": 593 - }, - "OK": { - "count": 160 - }, - "ÖMV": { - "count": 100 - }, - "Tinq": { - "count": 215 - }, - "OKQ8": { - "count": 187 - }, - "Freie Tankstelle": { - "count": 217 - }, - "Repsol": { - "count": 408 - }, - "Westfalen": { - "count": 96 - }, - "Esso Express": { - "count": 87 - }, - "Raiffeisenbank": { - "count": 115 - }, - "Tamoil": { - "count": 865 - }, - "Engen": { - "count": 230 - }, - "Sasol": { - "count": 58 - }, - "Topaz": { - "count": 78 - }, - "LPG": { - "count": 170 - }, - "Coop": { - "count": 55 - }, - "Orlen": { - "count": 577 - }, - "Oilibya": { - "count": 66 - }, - "Tango": { - "count": 122 - }, - "Star": { - "count": 315 - }, - "Петрол": { - "count": 81 - }, - "Cepsa": { - "count": 82 - }, - "OIL!": { - "count": 59 - }, - "Ultramar": { - "count": 124 - }, - "Irving": { - "count": 86 - }, - "Lukoil": { - "count": 689 - }, - "Petro-Canada": { - "count": 477 - }, - "7-Eleven": { - "count": 447 - }, - "Agrola": { - "count": 70 - }, - "Husky": { - "count": 119 - }, - "Slovnaft": { - "count": 218 - }, - "Sheetz": { - "count": 113 - }, - "Mol": { - "count": 56 - }, - "Petronas": { - "count": 151 - }, - "Газпромнефть": { - "count": 742 - }, - "Лукойл": { - "count": 1451 - }, - "Elan": { - "count": 113 - }, - "Роснефть": { - "count": 621 - }, - "Turmöl": { - "count": 57 - }, - "Neste A24": { - "count": 57 - }, - "Marathon": { - "count": 170 - }, - "Valero": { - "count": 348 - }, - "Eni": { - "count": 219 - }, - "Chevron": { - "count": 918 - }, - "ТНК": { - "count": 512 - }, - "REPSOL": { - "count": 1609 - }, - "MOL": { - "count": 226 - }, - "Bliska": { - "count": 150 - }, - "Api": { - "count": 307 - }, - "Arco": { - "count": 174 - }, - "Pemex": { - "count": 385 - }, - "Exxon": { - "count": 474 - }, - "Coles Express": { - "count": 108 - }, - "Petrom": { - "count": 256 - }, - "PETRONOR": { - "count": 208 - }, - "Rompetrol": { - "count": 165 - }, - "Lotos": { - "count": 171 - }, - "ОМВ": { - "count": 60 - }, - "BR": { - "count": 102 - }, - "Copec": { - "count": 500 - }, - "Petrobras": { - "count": 260 - }, - "Liberty": { - "count": 53 - }, - "IP": { - "count": 855 - }, - "YPF": { - "count": 158 - }, - "Erg": { - "count": 594 - }, - "Eneos": { - "count": 96 - }, - "Citgo": { - "count": 268 - }, - "Metano": { - "count": 206 - }, - "Сургутнефтегаз": { - "count": 62 - }, - "EKO": { - "count": 58 - }, - "Eko": { - "count": 58 - }, - "Indipend.": { - "count": 175 - }, - "IES": { - "count": 63 - }, - "TotalErg": { - "count": 85 - }, - "Cenex": { - "count": 114 - }, - "ПТК": { - "count": 81 - }, - "HP": { - "count": 76 - }, - "Phillips 66": { - "count": 202 - }, - "CARREFOUR": { - "count": 73 - }, - "ERG": { - "count": 75 - }, - "Speedway": { - "count": 131 - }, - "Benzina": { - "count": 70 - }, - "Татнефть": { - "count": 258 - }, - "Terpel": { - "count": 258 - }, - "WOG": { - "count": 169 - }, - "Seaoil": { - "count": 53 - }, - "АЗС": { - "count": 1048 - }, - "Kwik Trip": { - "count": 104 - }, - "Wawa": { - "count": 81 - }, - "Pertamina": { - "count": 182 - }, - "COSMO": { - "count": 65 - }, - "Z": { - "count": 75 - }, - "Indian Oil": { - "count": 167 - }, - "АГЗС": { - "count": 486 - }, - "INA": { - "count": 119 - }, - "JOMO": { - "count": 63 - }, - "Holiday": { - "count": 96 - }, - "IDEMITSU": { - "count": 88 - }, - "ENEOS": { - "count": 702 - }, - "Stacja paliw": { - "count": 84 - }, - "Bharat Petroleum": { - "count": 51 - }, - "CAMPSA": { - "count": 622 - }, - "Casey's General Store": { - "count": 179 - }, - "Kangaroo": { - "count": 57 - }, - "Белоруснефть": { - "count": 51 - }, - "コスモ石油 (COSMO)": { - "count": 132 - }, - "MEROIL": { - "count": 78 - }, - "1-2-3": { - "count": 71 - }, - "Conoco": { - "count": 171 - }, - "出光": { - "count": 214, - "tags": { - "name:en": "IDEMITSU" - } - }, - "НК Альянс": { - "count": 87 - }, - "Sinclair": { - "count": 86 - }, - "SPBU": { - "count": 51 - }, - "Макпетрол": { - "count": 109 - }, - "Circle K": { - "count": 156 - }, - "Posto Ipiranga": { - "count": 57 - }, - "Phoenix": { - "count": 143 - }, - "Ipiranga": { - "count": 83 - }, - "OKKO": { - "count": 83 - }, - "ОККО": { - "count": 116 - }, - "บางจาก": { - "count": 59 - }, - "QuikTrip": { - "count": 92 - }, - "Stewart's": { - "count": 62 - }, - "Posto BR": { - "count": 58 - }, - "ป ต ท": { - "count": 153 - }, - "ปตท": { - "count": 88 - }, - "ANP": { - "count": 77 - }, - "Kum & Go": { - "count": 84 - }, - "Sokimex": { - "count": 61 - }, - "Tela": { - "count": 115 - }, - "Укрнафта": { - "count": 57 - }, - "Татнефтепродукт": { - "count": 54 - }, - "Afriquia": { - "count": 88 - }, - "Murphy USA": { - "count": 62 - }, - "昭和シェル (Showa-shell)": { - "count": 94 - }, - "CNG": { - "count": 79 - } - }, - "fast_food": { - "Quick": { - "count": 482 - }, - "McDonald's": { - "count": 12049, - "tags": { - "cuisine": "burger" - } - }, - "Subway": { - "count": 5378, - "tags": { - "cuisine": "sandwich" - } - }, - "Burger King": { - "count": 3594, - "tags": { - "cuisine": "burger" - } - }, - "Ali Baba": { - "count": 59 - }, - "Hungry Jacks": { - "count": 170, - "tags": { - "cuisine": "burger" - } - }, - "Red Rooster": { - "count": 147 - }, - "KFC": { - "count": 3093, - "tags": { - "cuisine": "chicken" - } - }, - "Domino's Pizza": { - "count": 935, - "tags": { - "cuisine": "pizza" - } - }, - "Chowking": { - "count": 141 - }, - "Jollibee": { - "count": 390 - }, - "Hesburger": { - "count": 99 - }, - "肯德基": { - "count": 84 - }, - "Wendy's": { - "count": 1554, - "tags": { - "cuisine": "burger" - } - }, - "Tim Hortons": { - "count": 304 - }, - "Steers": { - "count": 143 - }, - "Hardee's": { - "count": 253, - "tags": { - "cuisine": "burger" - } - }, - "Arby's": { - "count": 747 - }, - "A&W": { - "count": 268 - }, - "Dairy Queen": { - "count": 752 - }, - "Hallo Pizza": { - "count": 76 - }, - "Fish & Chips": { - "count": 85 - }, - "Harvey's": { - "count": 88 - }, - "麥當勞": { - "count": 55 - }, - "Pizza Pizza": { - "count": 203 - }, - "Kotipizza": { - "count": 75 - }, - "Jack in the Box": { - "count": 530, - "tags": { - "cuisine": "burger" - } - }, - "Istanbul": { - "count": 56 - }, - "Kochlöffel": { - "count": 68 - }, - "Döner": { - "count": 227 - }, - "Telepizza": { - "count": 190 - }, - "Sibylla": { - "count": 60 - }, - "Carl's Jr.": { - "count": 287, - "tags": { - "cuisine": "burger" - } - }, - "Quiznos": { - "count": 261, - "tags": { - "cuisine": "sandwich" - } - }, - "Wimpy": { - "count": 136 - }, - "Sonic": { - "count": 538, - "tags": { - "cuisine": "burger" - } - }, - "Taco Bell": { - "count": 1367 - }, - "Pizza Nova": { - "count": 58 - }, - "Papa John's": { - "count": 289, - "tags": { - "cuisine": "pizza" - } - }, - "Nordsee": { - "count": 158 - }, - "Mr. Sub": { - "count": 104 - }, - "Kebab": { - "count": 176 - }, - "Макдоналдс": { - "count": 316, - "tags": { - "name:en": "McDonald's" - } - }, - "Asia Imbiss": { - "count": 107 - }, - "Imbiss": { - "count": 183 - }, - "Chipotle": { - "count": 275, - "tags": { - "cuisine": "mexican" - } - }, - "マクドナルド": { - "count": 668, - "tags": { - "name:en": "McDonald's", - "cuisine": "burger" - } - }, - "In-N-Out Burger": { - "count": 58 - }, - "Jimmy John's": { - "count": 126 - }, - "Jamba Juice": { - "count": 63 - }, - "Робин Сдобин": { - "count": 81 - }, - "Baskin Robbins": { - "count": 69 - }, - "ケンタッキーフライドチキン": { - "count": 162, - "tags": { - "name:en": "KFC", - "cuisine": "chicken" - } - }, - "吉野家": { - "count": 183 - }, - "Taco Time": { - "count": 85 - }, - "松屋": { - "count": 262, - "tags": { - "name:en": "Matsuya" - } - }, - "Little Caesars": { - "count": 65 - }, - "El Pollo Loco": { - "count": 62 - }, - "Del Taco": { - "count": 139 - }, - "White Castle": { - "count": 77 - }, - "Boston Market": { - "count": 63 - }, - "Chick-fil-A": { - "count": 236, - "tags": { - "cuisine": "chicken" - } - }, - "Panda Express": { - "count": 225 - }, - "Whataburger": { - "count": 152 - }, - "Taco John's": { - "count": 72 - }, - "Теремок": { - "count": 65 - }, - "Culver's": { - "count": 426 - }, - "Five Guys": { - "count": 130 - }, - "Church's Chicken": { - "count": 93 - }, - "Popeye's": { - "count": 151, - "tags": { - "cuisine": "chicken" - } - }, - "Long John Silver's": { - "count": 80 - }, - "Pollo Campero": { - "count": 61 - }, - "すき家": { - "count": 264, - "tags": { - "name:en": "SUKIYA" - } - }, - "モスバーガー": { - "count": 252, - "tags": { - "name:en": "MOS BURGER" - } - }, - "Русский Аппетит": { - "count": 67 - }, - "なか卯": { - "count": 56 - } - }, - "restaurant": { - "Pizza Hut": { - "count": 1099 - }, - "Little Chef": { - "count": 64 - }, - "Adler": { - "count": 158 - }, - "Zur Krone": { - "count": 91 - }, - "Deutsches Haus": { - "count": 91 - }, - "Krone": { - "count": 173 - }, - "Akropolis": { - "count": 150 - }, - "Schützenhaus": { - "count": 126 - }, - "TGI Friday's": { - "count": 198 - }, - "Kreuz": { - "count": 73 - }, - "Waldschänke": { - "count": 56 - }, - "La Piazza": { - "count": 69 - }, - "Lamm": { - "count": 68 - }, - "Zur Sonne": { - "count": 73 - }, - "Zur Linde": { - "count": 204 - }, - "Poseidon": { - "count": 111 - }, - "Shanghai": { - "count": 81 - }, - "Red Lobster": { - "count": 224 - }, - "Zum Löwen": { - "count": 81 - }, - "Swiss Chalet": { - "count": 105 - }, - "Olympia": { - "count": 77 - }, - "Wagamama": { - "count": 59 - }, - "Frankie & Benny's": { - "count": 62 - }, - "Hooters": { - "count": 101 - }, - "Sternen": { - "count": 76 - }, - "Hirschen": { - "count": 82 - }, - "Papa John's": { - "count": 58, - "tags": { - "cuisine": "pizza" - } - }, - "Denny's": { - "count": 422 - }, - "Athen": { - "count": 67 - }, - "Sonne": { - "count": 124 - }, - "Hirsch": { - "count": 78 - }, - "Ratskeller": { - "count": 149 - }, - "La Cantina": { - "count": 54 - }, - "Gasthaus Krone": { - "count": 55 - }, - "El Greco": { - "count": 80 - }, - "Gasthof zur Post": { - "count": 74 - }, - "Nando's": { - "count": 234 - }, - "Löwen": { - "count": 114 - }, - "Pizza Express": { - "count": 250 - }, - "Mandarin": { - "count": 64 - }, - "Hong Kong": { - "count": 83 - }, - "Zizzi": { - "count": 65 - }, - "Cracker Barrel": { - "count": 170 - }, - "Rhodos": { - "count": 78 - }, - "Lindenhof": { - "count": 80 - }, - "Milano": { - "count": 53 - }, - "Dolce Vita": { - "count": 75 - }, - "Kirchenwirt": { - "count": 81 - }, - "Kantine": { - "count": 56 - }, - "Ochsen": { - "count": 93 - }, - "Spur": { - "count": 59 - }, - "Mykonos": { - "count": 59 - }, - "Lotus": { - "count": 66 - }, - "Applebee's": { - "count": 501 - }, - "Flunch": { - "count": 71 - }, - "Zur Post": { - "count": 116 - }, - "China Town": { - "count": 71 - }, - "La Dolce Vita": { - "count": 68 - }, - "Waffle House": { - "count": 195 - }, - "Delphi": { - "count": 88 - }, - "Linde": { - "count": 102 - }, - "Dionysos": { - "count": 69 - }, - "Outback Steakhouse": { - "count": 199 - }, - "Kelsey's": { - "count": 55 - }, - "Boston Pizza": { - "count": 153 - }, - "Bella Italia": { - "count": 129 - }, - "Sizzler": { - "count": 52 - }, - "Grüner Baum": { - "count": 115 - }, - "Taj Mahal": { - "count": 102 - }, - "Rössli": { - "count": 67 - }, - "Traube": { - "count": 64 - }, - "Red Robin": { - "count": 177 - }, - "Roma": { - "count": 61 - }, - "San Marco": { - "count": 66 - }, - "Hellas": { - "count": 54 - }, - "La Perla": { - "count": 66 - }, - "Vips": { - "count": 52 - }, - "Panera Bread": { - "count": 192 - }, - "Da Vinci": { - "count": 54 - }, - "Hippopotamus": { - "count": 92 - }, - "Prezzo": { - "count": 71 - }, - "Courtepaille": { - "count": 99 - }, - "Hard Rock Cafe": { - "count": 67 - }, - "Panorama": { - "count": 61 - }, - "デニーズ": { - "count": 77 - }, - "Sportheim": { - "count": 62 - }, - "餃子の王将": { - "count": 54 - }, - "Bären": { - "count": 55 - }, - "Alte Post": { - "count": 61 - }, - "China Garden": { - "count": 64 - }, - "Vapiano": { - "count": 82 - }, - "Mamma Mia": { - "count": 60 - }, - "Schwarzer Adler": { - "count": 56 - }, - "IHOP": { - "count": 304 - }, - "Chili's": { - "count": 308 - }, - "Olive Garden": { - "count": 264 - }, - "Friendly's": { - "count": 75 - }, - "Buffalo Grill": { - "count": 196 - }, - "Texas Roadhouse": { - "count": 103 - }, - "ガスト": { - "count": 221, - "tags": { - "name:en": "Gusto" - } - }, - "Sakura": { - "count": 70 - }, - "Mensa": { - "count": 92 - }, - "The Keg": { - "count": 52 - }, - "サイゼリヤ": { - "count": 88 - }, - "La Strada": { - "count": 51 - }, - "Village Inn": { - "count": 89 - }, - "Buffalo Wild Wings": { - "count": 161 - }, - "Peking": { - "count": 56 - }, - "Boston Market": { - "count": 60 - }, - "Jimmy John's": { - "count": 53 - }, - "California Pizza Kitchen": { - "count": 56 - }, - "Якитория": { - "count": 77 - }, - "Golden Corral": { - "count": 97 - }, - "Perkins": { - "count": 101 - }, - "Ruby Tuesday": { - "count": 146 - }, - "Shari's": { - "count": 63 - }, - "Bob Evans": { - "count": 112 - }, - "바다횟집 (Bada Fish Restaurant)": { - "count": 54 - }, - "Mang Inasal": { - "count": 82 - }, - "Евразия": { - "count": 99 - }, - "ジョナサン": { - "count": 57 - }, - "Longhorn Steakhouse": { - "count": 63 - } - }, - "bank": { - "Chase": { - "count": 667 - }, - "Commonwealth Bank": { - "count": 224 - }, - "Citibank": { - "count": 261 - }, - "HSBC": { - "count": 1072 - }, - "Barclays": { - "count": 947 - }, - "Westpac": { - "count": 200 - }, - "NAB": { - "count": 126 - }, - "ANZ": { - "count": 207 - }, - "Lloyds Bank": { - "count": 543 - }, - "Landbank": { - "count": 80 - }, - "Sparkasse": { - "count": 4526 - }, - "UCPB": { - "count": 90 - }, - "PNB": { - "count": 243 - }, - "Metrobank": { - "count": 264 - }, - "BDO": { - "count": 288 - }, - "Volksbank": { - "count": 2584 - }, - "BPI": { - "count": 402 - }, - "Postbank": { - "count": 440 - }, - "NatWest": { - "count": 620 - }, - "Raiffeisenbank": { - "count": 2072 - }, - "Yorkshire Bank": { - "count": 63 - }, - "ABSA": { - "count": 90 - }, - "Standard Bank": { - "count": 101 - }, - "FNB": { - "count": 92 - }, - "Deutsche Bank": { - "count": 846 - }, - "SEB": { - "count": 131 - }, - "Commerzbank": { - "count": 802 - }, - "Targobank": { - "count": 166 - }, - "ABN AMRO": { - "count": 129 - }, - "Handelsbanken": { - "count": 181 - }, - "Swedbank": { - "count": 221 - }, - "Kreissparkasse": { - "count": 587 - }, - "UniCredit Bank": { - "count": 400 - }, - "Monte dei Paschi di Siena": { - "count": 131 - }, - "Caja Rural": { - "count": 94 - }, - "Dresdner Bank": { - "count": 72 - }, - "Sparda-Bank": { - "count": 315 - }, - "VÚB": { - "count": 106 - }, - "Slovenská sporiteľňa": { - "count": 130 - }, - "Bank of Montreal": { - "count": 115 - }, - "KBC": { - "count": 198 - }, - "Royal Bank of Scotland": { - "count": 109 - }, - "TSB": { - "count": 71 - }, - "US Bank": { - "count": 234 - }, - "HypoVereinsbank": { - "count": 565 - }, - "Bank Austria": { - "count": 172 - }, - "ING": { - "count": 482 - }, - "Erste Bank": { - "count": 180 - }, - "CIBC": { - "count": 321 - }, - "Scotiabank": { - "count": 392 - }, - "Caisse d'Épargne": { - "count": 849 - }, - "Santander": { - "count": 1254 - }, - "Bank of Scotland": { - "count": 87 - }, - "TD Canada Trust": { - "count": 437 - }, - "BMO": { - "count": 166 - }, - "Danske Bank": { - "count": 130 - }, - "OTP": { - "count": 189 - }, - "Crédit Agricole": { - "count": 1200 - }, - "LCL": { - "count": 528 - }, - "VR-Bank": { - "count": 427 - }, - "ČSOB": { - "count": 160 - }, - "Česká spořitelna": { - "count": 211 - }, - "BNP": { - "count": 109 - }, - "Royal Bank": { - "count": 65 - }, - "Nationwide": { - "count": 200 - }, - "Halifax": { - "count": 219 - }, - "BAWAG PSK": { - "count": 101 - }, - "National Bank": { - "count": 84 - }, - "Nedbank": { - "count": 78 - }, - "First National Bank": { - "count": 76 - }, - "Nordea": { - "count": 313 - }, - "Rabobank": { - "count": 613 - }, - "Sparkasse KölnBonn": { - "count": 53 - }, - "Tatra banka": { - "count": 67 - }, - "Berliner Sparkasse": { - "count": 61 - }, - "Berliner Volksbank": { - "count": 77 - }, - "Wells Fargo": { - "count": 822 - }, - "Credit Suisse": { - "count": 70 - }, - "Société Générale": { - "count": 615 - }, - "Osuuspankki": { - "count": 73 - }, - "Sparkasse Aachen": { - "count": 56 - }, - "Hamburger Sparkasse": { - "count": 155 - }, - "Cassa di Risparmio del Veneto": { - "count": 66 - }, - "BNP Paribas": { - "count": 598 - }, - "Banque Populaire": { - "count": 411 - }, - "BNP Paribas Fortis": { - "count": 208 - }, - "Banco Popular": { - "count": 272 - }, - "Bancaja": { - "count": 55 - }, - "Banesto": { - "count": 207 - }, - "La Caixa": { - "count": 553 - }, - "Santander Consumer Bank": { - "count": 83 - }, - "BRD": { - "count": 188 - }, - "BCR": { - "count": 140 - }, - "Banca Transilvania": { - "count": 139 - }, - "BW-Bank": { - "count": 97 - }, - "Komerční banka": { - "count": 133 - }, - "Banco Pastor": { - "count": 64 - }, - "Stadtsparkasse": { - "count": 86 - }, - "Ulster Bank": { - "count": 88 - }, - "Sberbank": { - "count": 59 - }, - "CIC": { - "count": 411 - }, - "Bancpost": { - "count": 53 - }, - "Caja Madrid": { - "count": 114 - }, - "Maybank": { - "count": 88 - }, - "中国银行": { - "count": 70 - }, - "Unicredit Banca": { - "count": 233 - }, - "Crédit Mutuel": { - "count": 666 - }, - "BBVA": { - "count": 614 - }, - "Intesa San Paolo": { - "count": 62 - }, - "TD Bank": { - "count": 184 - }, - "Belfius": { - "count": 227 - }, - "Bank of America": { - "count": 877 - }, - "RBC": { - "count": 224 - }, - "Alpha Bank": { - "count": 103 - }, - "Сбербанк": { - "count": 4703 - }, - "Россельхозбанк": { - "count": 192 - }, - "Crédit du Nord": { - "count": 91 - }, - "BancoEstado": { - "count": 79 - }, - "Millennium Bank": { - "count": 415 - }, - "State Bank of India": { - "count": 141 - }, - "Беларусбанк": { - "count": 233 - }, - "ING Bank Śląski": { - "count": 65 - }, - "Caixa Geral de Depósitos": { - "count": 124 - }, - "Kreissparkasse Köln": { - "count": 67 - }, - "Banco BCI": { - "count": 51 - }, - "Banco de Chile": { - "count": 96 - }, - "ВТБ24": { - "count": 316 - }, - "UBS": { - "count": 131 - }, - "PKO BP": { - "count": 249 - }, - "Chinabank": { - "count": 54 - }, - "PSBank": { - "count": 57 - }, - "Union Bank": { - "count": 118 - }, - "China Bank": { - "count": 63 - }, - "RCBC": { - "count": 122 - }, - "Unicaja": { - "count": 78 - }, - "BBK": { - "count": 77 - }, - "Ibercaja": { - "count": 66 - }, - "RBS": { - "count": 140 - }, - "Commercial Bank of Ceylon PLC": { - "count": 79 - }, - "Bank of Ireland": { - "count": 108 - }, - "BNL": { - "count": 80 - }, - "Banco Santander": { - "count": 106 - }, - "Banco Itaú": { - "count": 94 - }, - "AIB": { - "count": 70 - }, - "BZ WBK": { - "count": 72 - }, - "Banco do Brasil": { - "count": 494 - }, - "Caixa Econômica Federal": { - "count": 155 - }, - "Fifth Third Bank": { - "count": 71 - }, - "Banca Popolare di Vicenza": { - "count": 77 - }, - "Wachovia": { - "count": 60 - }, - "OLB": { - "count": 51 - }, - "みずほ銀行": { - "count": 73 - }, - "BES": { - "count": 69 - }, - "ICICI Bank": { - "count": 88 - }, - "HDFC Bank": { - "count": 89 - }, - "La Banque Postale": { - "count": 63 - }, - "Pekao SA": { - "count": 53 - }, - "Oberbank": { - "count": 88 - }, - "Bradesco": { - "count": 272 - }, - "Oldenburgische Landesbank": { - "count": 55 - }, - "Scotia Bank": { - "count": 52 - }, - "Bendigo Bank": { - "count": 89 - }, - "Argenta": { - "count": 85 - }, - "AXA": { - "count": 68 - }, - "Axis Bank": { - "count": 58 - }, - "Banco Nación": { - "count": 61 - }, - "GE Money Bank": { - "count": 71 - }, - "Альфа-Банк": { - "count": 182 - }, - "Белагропромбанк": { - "count": 67 - }, - "Caja Círculo": { - "count": 64 - }, - "Eurobank": { - "count": 91 - }, - "Banca Intesa": { - "count": 55 - }, - "Canara Bank": { - "count": 86 - }, - "Cajamar": { - "count": 68 - }, - "Banamex": { - "count": 138 - }, - "Crédit Mutuel de Bretagne": { - "count": 335 - }, - "Davivienda": { - "count": 81 - }, - "Bank Spółdzielczy": { - "count": 148 - }, - "Credit Agricole": { - "count": 151 - }, - "Bankinter": { - "count": 55 - }, - "Banque Nationale": { - "count": 62 - }, - "Bank of the West": { - "count": 91 - }, - "Key Bank": { - "count": 144 - }, - "Western Union": { - "count": 86 - }, - "Citizens Bank": { - "count": 110 - }, - "ПриватБанк": { - "count": 492 - }, - "Security Bank": { - "count": 72 - }, - "Ecobank": { - "count": 63 - }, - "Millenium Bank": { - "count": 61 - }, - "Bankia": { - "count": 127 - }, - "三菱東京UFJ銀行": { - "count": 159 - }, - "Caixa": { - "count": 109 - }, - "Banco de Costa Rica": { - "count": 62 - }, - "SunTrust Bank": { - "count": 69 - }, - "Itaú": { - "count": 313 - }, - "PBZ": { - "count": 52 - }, - "Bancolombia": { - "count": 87 - }, - "Райффайзен Банк Аваль": { - "count": 62 - }, - "Bancomer": { - "count": 102 - }, - "Banorte": { - "count": 74 - }, - "Alior Bank": { - "count": 76 - }, - "BOC": { - "count": 51 - }, - "Банк Москвы": { - "count": 116 - }, - "ВТБ": { - "count": 57 - }, - "Caja Duero": { - "count": 58 - }, - "Regions Bank": { - "count": 61 - }, - "Росбанк": { - "count": 177 - }, - "Banco Estado": { - "count": 70 - }, - "BCI": { - "count": 63 - }, - "SunTrust": { - "count": 64 - }, - "PNC Bank": { - "count": 232 - }, - "신한은행": { - "count": 218, - "tags": { - "name:en": "Sinhan Bank" - } - }, - "우리은행": { - "count": 292, - "tags": { - "name:en": "Uri Bank" - } - }, - "국민은행": { - "count": 166, - "tags": { - "name:en": "Gungmin Bank" - } - }, - "중소기업은행": { - "count": 52, - "tags": { - "name:en": "Industrial Bank of Korea" - } - }, - "광주은행": { - "count": 53, - "tags": { - "name:en": "Gwangju Bank" - } - }, - "Газпромбанк": { - "count": 99 - }, - "M&T Bank": { - "count": 85 - }, - "Caja de Burgos": { - "count": 52 - }, - "Santander Totta": { - "count": 63 - }, - "УкрСиббанк": { - "count": 128 - }, - "Ощадбанк": { - "count": 313 - }, - "Уралсиб": { - "count": 84 - }, - "りそな銀行": { - "count": 227, - "tags": { - "name:en": "Mizuho Bank" - } - }, - "Cajero Automatico Bancared": { - "count": 145 - }, - "Промсвязьбанк": { - "count": 89 - }, - "三井住友銀行": { - "count": 126 - }, - "Banco Provincia": { - "count": 65 - }, - "BB&T": { - "count": 136 - }, - "Возрождение": { - "count": 57 - }, - "Capital One": { - "count": 52 - }, - "Bank Mandiri": { - "count": 59 - }, - "Banco de la Nación": { - "count": 93 - }, - "Banco G&T Continental": { - "count": 62 - }, - "Peoples Bank": { - "count": 58 - }, - "Совкомбанк": { - "count": 52 - }, - "Provincial": { - "count": 53 - }, - "Banco de Desarrollo Banrural": { - "count": 73 - }, - "Banco Bradesco": { - "count": 56 - }, - "Bicentenario": { - "count": 182 - }, - "ლიბერთი ბანკი": { - "count": 54, - "tags": { - "name:en": "Liberty Bank" - } - }, - "Banesco": { - "count": 106 - }, - "Mercantil": { - "count": 76 - }, - "Del Tesoro": { - "count": 91 - }, - "하나은행": { - "count": 77 - }, - "CityCommerce Bank": { - "count": 53 - }, - "De Venezuela": { - "count": 118 - } - }, - "car_rental": { - "Europcar": { - "count": 287 - }, - "Budget": { - "count": 85 - }, - "Sixt": { - "count": 151 - }, - "Avis": { - "count": 276 - }, - "Hertz": { - "count": 286 - }, - "Enterprise": { - "count": 184 - }, - "stadtmobil CarSharing-Station": { - "count": 149 - } - }, - "pharmacy": { - "Rowlands Pharmacy": { - "count": 69 - }, - "Boots": { - "count": 819 - }, - "Marien-Apotheke": { - "count": 314 - }, - "Mercury Drug": { - "count": 412 - }, - "Löwen-Apotheke": { - "count": 354 - }, - "Superdrug": { - "count": 109 - }, - "Sonnen-Apotheke": { - "count": 306 - }, - "Rathaus-Apotheke": { - "count": 131 - }, - "Engel-Apotheke": { - "count": 123 - }, - "Hirsch-Apotheke": { - "count": 82 - }, - "Stern-Apotheke": { - "count": 66 - }, - "Lloyds Pharmacy": { - "count": 292 - }, - "Rosen-Apotheke": { - "count": 207 - }, - "Stadt-Apotheke": { - "count": 299 - }, - "Markt-Apotheke": { - "count": 162 - }, - "Аптека": { - "count": 1938 - }, - "Pharmasave": { - "count": 63 - }, - "Brunnen-Apotheke": { - "count": 53 - }, - "Shoppers Drug Mart": { - "count": 417 - }, - "Apotheke am Markt": { - "count": 61 - }, - "Alte Apotheke": { - "count": 87 - }, - "Neue Apotheke": { - "count": 110 - }, - "Gintarinė vaistinė": { - "count": 101 - }, - "Rats-Apotheke": { - "count": 83 - }, - "Adler Apotheke": { - "count": 307 - }, - "Pharmacie Centrale": { - "count": 63 - }, - "Walgreens": { - "count": 1521 - }, - "Rite Aid": { - "count": 700 - }, - "Apotheke": { - "count": 163 - }, - "Linden-Apotheke": { - "count": 209 - }, - "Bahnhof-Apotheke": { - "count": 65 - }, - "Burg-Apotheke": { - "count": 56 - }, - "Jean Coutu": { - "count": 59 - }, - "Pharmaprix": { - "count": 58 - }, - "Farmacias Ahumada": { - "count": 102 - }, - "Farmacia Comunale": { - "count": 108 - }, - "Farmacias Cruz Verde": { - "count": 84 - }, - "Cruz Verde": { - "count": 97 - }, - "Hubertus Apotheke": { - "count": 52 - }, - "CVS": { - "count": 1448 - }, - "Farmacias SalcoBrand": { - "count": 132 - }, - "Фармация": { - "count": 118 - }, - "Bären-Apotheke": { - "count": 72 - }, - "Clicks": { - "count": 109 - }, - "セイジョー": { - "count": 51 - }, - "マツモトキヨシ": { - "count": 111 - }, - "Вита": { - "count": 107 - }, - "Радуга": { - "count": 70 - }, - "サンドラッグ": { - "count": 57 - }, - "Apteka": { - "count": 352 - }, - "Первая помощь": { - "count": 74 - }, - "Ригла": { - "count": 111 - }, - "Имплозия": { - "count": 63 - }, - "Kinney Drugs": { - "count": 68 - }, - "Классика": { - "count": 66 - }, - "Ljekarna": { - "count": 54 - }, - "SalcoBrand": { - "count": 90 - }, - "Аптека 36,6": { - "count": 220 - }, - "Фармакор": { - "count": 74 - }, - "スギ薬局": { - "count": 82 - }, - "Аптечный пункт": { - "count": 140 - }, - "Невис": { - "count": 58 - }, - "トモズ (Tomod's)": { - "count": 83 - }, - "Eurovaistinė": { - "count": 62 - }, - "Farmacity": { - "count": 65 - }, - "аптека": { - "count": 100 - }, - "The Generics Pharmacy": { - "count": 86 - }, - "Farmatodo": { - "count": 124 - }, - "Фармленд": { - "count": 80 - }, - "ドラッグてらしま (Drug Terashima)": { - "count": 96 - }, - "ავერსი (Aversi)": { - "count": 62 - }, - "Farmahorro": { - "count": 58 + + function drawList() { + var value = search.property('value'), + results = features(); + + list.classed('filtered', value.length); + + var noResultsWorldwide = geocodeResults && geocodeResults.length === 0; + + var resultsIndicator = list.selectAll('.no-results-item') + .data([0]) + .enter().append('button') + .property('disabled', true) + .attr('class', 'no-results-item') + .call(iD.svg.Icon('#icon-alert', 'pre-text')); + + resultsIndicator.append('span') + .attr('class', 'entity-name'); + + list.selectAll('.no-results-item .entity-name') + .text(noResultsWorldwide ? t('geocoder.no_results_worldwide') : t('geocoder.no_results_visible')); + + list.selectAll('.geocode-item') + .data([0]) + .enter().append('button') + .attr('class', 'geocode-item') + .on('click', geocode) + .append('div') + .attr('class', 'label') + .append('span') + .attr('class', 'entity-name') + .text(t('geocoder.search')); + + list.selectAll('.no-results-item') + .style('display', (value.length && !results.length) ? 'block' : 'none'); + + list.selectAll('.geocode-item') + .style('display', (value && geocodeResults === undefined) ? 'block' : 'none'); + + list.selectAll('.feature-list-item') + .data([-1]) + .remove(); + + var items = list.selectAll('.feature-list-item') + .data(results, function(d) { return d.id; }); + + var enter = items.enter() + .insert('button', '.geocode-item') + .attr('class', 'feature-list-item') + .on('mouseover', mouseover) + .on('mouseout', mouseout) + .on('click', click); + + var label = enter + .append('div') + .attr('class', 'label'); + + label.each(function(d) { + d3.select(this) + .call(iD.svg.Icon('#icon-' + d.geometry, 'pre-text')); + }); + + label.append('span') + .attr('class', 'entity-type') + .text(function(d) { return d.type; }); + + label.append('span') + .attr('class', 'entity-name') + .text(function(d) { return d.name; }); + + enter.style('opacity', 0) + .transition() + .style('opacity', 1); + + items.order(); + + items.exit() + .remove(); + } + + function mouseover(d) { + if (d.id === -1) return; + + context.surface().selectAll(iD.util.entityOrMemberSelector([d.id], context.graph())) + .classed('hover', true); + } + + function mouseout() { + context.surface().selectAll('.hover') + .classed('hover', false); + } + + function click(d) { + d3.event.preventDefault(); + if (d.location) { + context.map().centerZoom([d.location[1], d.location[0]], 20); + } + else if (d.entity) { + if (d.entity.type === 'node') { + context.map().center(d.entity.loc); + } else if (d.entity.type === 'way') { + var center = context.projection(context.map().center()), + edge = iD.geo.chooseEdge(context.childNodes(d.entity), center, context.projection); + context.map().center(edge.loc); } - }, - "cafe": { - "Starbucks": { - "count": 4032, - "tags": { - "cuisine": "coffee_shop" - } - }, - "Cafeteria": { - "count": 77 - }, - "Costa": { - "count": 579 - }, - "Caffè Nero": { - "count": 165 - }, - "Кафе": { - "count": 214 - }, - "Café Central": { - "count": 60 - }, - "Second Cup": { - "count": 190 - }, - "Eisdiele": { - "count": 65 - }, - "Dunkin Donuts": { - "count": 393, - "tags": { - "cuisine": "donut" - } - }, - "Segafredo": { - "count": 66 - }, - "Coffee Time": { - "count": 95 - }, - "Cafe Coffee Day": { - "count": 104 - }, - "Eiscafe Venezia": { - "count": 173 - }, - "スターバックス": { - "count": 248, - "tags": { - "name:en": "Starbucks" - } - }, - "Шоколадница": { - "count": 138 - }, - "Pret A Manger": { - "count": 115 - }, - "Столовая": { - "count": 351 - }, - "ドトール": { - "count": 163, - "tags": { - "name:en": "DOUTOR" - } - }, - "Tchibo": { - "count": 97 - }, - "Кофе Хауз": { - "count": 102 - }, - "Caribou Coffee": { - "count": 98 - }, - "Уют": { - "count": 51 - }, - "Шашлычная": { - "count": 57 - }, - "คาเฟ่ อเมซอน": { - "count": 62 - }, - "Traveler's Coffee": { - "count": 60 - }, - "カフェ・ド・クリエ": { - "count": 67, - "tags": { - "name:en": "Cafe de CRIE" - } - }, - "Cafe Amazon": { - "count": 54 + context.enter(iD.modes.Select(context, [d.entity.id]).suppressMenu(true)); + } else { + context.zoomToEntity(d.id); + } + } + + function geocode() { + var searchVal = encodeURIComponent(search.property('value')); + d3.json('https://nominatim.openstreetmap.org/search/' + searchVal + '?limit=10&format=json', function(err, resp) { + geocodeResults = resp || []; + drawList(); + }); + } + } + + return featureList; +}; +iD.ui.flash = function(selection) { + var modal = iD.ui.modal(selection); + + modal.select('.modal').classed('modal-flash', true); + + modal.select('.content') + .classed('modal-section', true) + .append('div') + .attr('class', 'description'); + + modal.on('click.flash', function() { modal.remove(); }); + + setTimeout(function() { + modal.remove(); + return true; + }, 1500); + + return modal; +}; +iD.ui.FullScreen = function(context) { + var element = context.container().node(), + keybinding = d3.keybinding('full-screen'); + // button; + + function getFullScreenFn() { + if (element.requestFullscreen) { + return element.requestFullscreen; + } else if (element.msRequestFullscreen) { + return element.msRequestFullscreen; + } else if (element.mozRequestFullScreen) { + return element.mozRequestFullScreen; + } else if (element.webkitRequestFullscreen) { + return element.webkitRequestFullscreen; + } + } + + function getExitFullScreenFn() { + if (document.exitFullscreen) { + return document.exitFullscreen; + } else if (document.msExitFullscreen) { + return document.msExitFullscreen; + } else if (document.mozCancelFullScreen) { + return document.mozCancelFullScreen; + } else if (document.webkitExitFullscreen) { + return document.webkitExitFullscreen; + } + } + + function isFullScreen() { + return document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || + document.msFullscreenElement; + } + + function isSupported() { + return !!getFullScreenFn(); + } + + function fullScreen() { + d3.event.preventDefault(); + if (!isFullScreen()) { + // button.classed('active', true); + getFullScreenFn().apply(element); + } else { + // button.classed('active', false); + getExitFullScreenFn().apply(document); + } + } + + return function() { // selection) { + if (!isSupported()) + return; + + // var tooltip = bootstrap.tooltip() + // .placement('left'); + + // button = selection.append('button') + // .attr('title', t('full_screen')) + // .attr('tabindex', -1) + // .on('click', fullScreen) + // .call(tooltip); + + // button.append('span') + // .attr('class', 'icon full-screen'); + + keybinding + .on('f11', fullScreen) + .on(iD.ui.cmd('⌘⇧F'), fullScreen); + + d3.select(document) + .call(keybinding); + }; +}; +iD.ui.Geolocate = function(map) { + function click() { + navigator.geolocation.getCurrentPosition( + success, error); + } + + function success(position) { + var extent = iD.geo.Extent([position.coords.longitude, position.coords.latitude]) + .padByMeters(position.coords.accuracy); + + map.centerZoom(extent.center(), Math.min(20, map.extentZoom(extent))); + } + + function error() { } + + return function(selection) { + if (!navigator.geolocation) return; + + selection.append('button') + .attr('tabindex', -1) + .attr('title', t('geolocate.title')) + .on('click', click) + .call(iD.svg.Icon('#icon-geolocate', 'light')) + .call(bootstrap.tooltip() + .placement('left')); + }; +}; +iD.ui.Help = function(context) { + var key = 'H'; + + var docKeys = [ + 'help.help', + 'help.editing_saving', + 'help.roads', + 'help.gps', + 'help.imagery', + 'help.addresses', + 'help.inspector', + 'help.buildings', + 'help.relations']; + + var docs = docKeys.map(function(key) { + var text = t(key); + return { + title: text.split('\n')[0].replace('#', '').trim(), + html: marked(text.split('\n').slice(1).join('\n')) + }; + }); + + function help(selection) { + + function hide() { + setVisible(false); + } + + function toggle() { + if (d3.event) d3.event.preventDefault(); + tooltip.hide(button); + setVisible(!button.classed('active')); + } + + function setVisible(show) { + if (show !== shown) { + button.classed('active', show); + shown = show; + + if (show) { + selection.on('mousedown.help-inside', function() { + return d3.event.stopPropagation(); + }); + pane.style('display', 'block') + .style('right', '-500px') + .transition() + .duration(200) + .style('right', '0px'); + } else { + pane.style('right', '0px') + .transition() + .duration(200) + .style('right', '-500px') + .each('end', function() { + d3.select(this).style('display', 'none'); + }); + selection.on('mousedown.help-inside', null); + } + } + } + + function clickHelp(d, i) { + pane.property('scrollTop', 0); + doctitle.html(d.title); + body.html(d.html); + body.selectAll('a') + .attr('target', '_blank'); + menuItems.classed('selected', function(m) { + return m.title === d.title; + }); + + nav.html(''); + + if (i > 0) { + var prevLink = nav.append('a') + .attr('class', 'previous') + .on('click', function() { + clickHelp(docs[i - 1], i - 1); + }); + prevLink.append('span').html('◄ ' + docs[i - 1].title); + } + if (i < docs.length - 1) { + var nextLink = nav.append('a') + .attr('class', 'next') + .on('click', function() { + clickHelp(docs[i + 1], i + 1); + }); + nextLink.append('span').html(docs[i + 1].title + ' ►'); + } + } + + function clickWalkthrough() { + d3.select(document.body).call(iD.ui.intro(context)); + setVisible(false); + } + + + var pane = selection.append('div') + .attr('class', 'help-wrap map-overlay fillL col5 content hide'), + tooltip = bootstrap.tooltip() + .placement('left') + .html(true) + .title(iD.ui.tooltipHtml(t('help.title'), key)), + button = selection.append('button') + .attr('tabindex', -1) + .on('click', toggle) + .call(iD.svg.Icon('#icon-help', 'light')) + .call(tooltip), + shown = false; + + + var toc = pane.append('ul') + .attr('class', 'toc'); + + var menuItems = toc.selectAll('li') + .data(docs) + .enter() + .append('li') + .append('a') + .html(function(d) { return d.title; }) + .on('click', clickHelp); + + toc.append('li') + .attr('class','walkthrough') + .append('a') + .text(t('splash.walkthrough')) + .on('click', clickWalkthrough); + + var content = pane.append('div') + .attr('class', 'left-content'); + + var doctitle = content.append('h2') + .text(t('help.title')); + + var body = content.append('div') + .attr('class', 'body'); + + var nav = content.append('div') + .attr('class', 'nav'); + + clickHelp(docs[0], 0); + + var keybinding = d3.keybinding('help') + .on(key, toggle) + .on('B', hide) + .on('F', hide); + + d3.select(document) + .call(keybinding); + + context.surface().on('mousedown.help-outside', hide); + context.container().on('mousedown.help-outside', hide); + } + + return help; +}; +iD.ui.Info = function(context) { + var key = iD.ui.cmd('⌘I'), + imperial = (iD.detect().locale.toLowerCase() === 'en-us'), + hidden = true; + + function info(selection) { + function radiansToMeters(r) { + // using WGS84 authalic radius (6371007.1809 m) + return r * 6371007.1809; + } + + function steradiansToSqmeters(r) { + // http://gis.stackexchange.com/a/124857/40446 + return r / 12.56637 * 510065621724000; + } + + function toLineString(feature) { + if (feature.type === 'LineString') return feature; + + var result = { type: 'LineString', coordinates: [] }; + if (feature.type === 'Polygon') { + result.coordinates = feature.coordinates[0]; + } else if (feature.type === 'MultiPolygon') { + result.coordinates = feature.coordinates[0][0]; + } + + return result; + } + + function displayLength(m) { + var d = m * (imperial ? 3.28084 : 1), + p, unit; + + if (imperial) { + if (d >= 5280) { + d /= 5280; + unit = 'mi'; + } else { + unit = 'ft'; + } + } else { + if (d >= 1000) { + d /= 1000; + unit = 'km'; + } else { + unit = 'm'; } } - }, - "shop": { - "supermarket": { - "Budgens": { - "count": 86 - }, - "Morrisons": { - "count": 408 - }, - "Interspar": { - "count": 141 - }, - "Merkur": { - "count": 107 - }, - "Sainsbury's": { - "count": 540 - }, - "Lidl": { - "count": 6128 - }, - "EDEKA": { - "count": 494 - }, - "Coles": { - "count": 392 - }, - "Iceland": { - "count": 301 - }, - "Coop": { - "count": 1883 - }, - "Tesco": { - "count": 1292 - }, - "Woolworths": { - "count": 530 - }, - "Zielpunkt": { - "count": 236 - }, - "Nahkauf": { - "count": 167 - }, - "Billa": { - "count": 1415 - }, - "Kaufland": { - "count": 989 - }, - "Plus": { - "count": 125 - }, - "ALDI": { - "count": 5132 - }, - "Checkers": { - "count": 126 - }, - "Tesco Metro": { - "count": 124 - }, - "NP": { - "count": 149 - }, - "Penny": { - "count": 1758 - }, - "Norma": { - "count": 1062 - }, - "Asda": { - "count": 226 - }, - "Netto": { - "count": 4331 - }, - "REWE": { - "count": 1467 - }, - "Rewe": { - "count": 1169 - }, - "Aldi Süd": { - "count": 590 - }, - "Real": { - "count": 248 - }, - "Tesco Express": { - "count": 388 - }, - "King Soopers": { - "count": 70 - }, - "Kiwi": { - "count": 164 - }, - "Edeka": { - "count": 1799 - }, - "Pick n Pay": { - "count": 238 - }, - "ICA": { - "count": 192 - }, - "Tengelmann": { - "count": 190 - }, - "Carrefour": { - "count": 1614 - }, - "Waitrose": { - "count": 258 - }, - "Spar": { - "count": 2063 - }, - "Hofer": { - "count": 439 - }, - "M-Preis": { - "count": 79 - }, - "LIDL": { - "count": 915 - }, - "tegut": { - "count": 209 - }, - "Sainsbury's Local": { - "count": 109 - }, - "E-Center": { - "count": 66 - }, - "Aldi Nord": { - "count": 197 - }, - "nahkauf": { - "count": 81 - }, - "Meijer": { - "count": 73 - }, - "Safeway": { - "count": 398 - }, - "Costco": { - "count": 145 - }, - "Albert": { - "count": 183 - }, - "Jumbo": { - "count": 190 - }, - "Shoprite": { - "count": 239 - }, - "MPreis": { - "count": 52 - }, - "Penny Market": { - "count": 409 - }, - "Tesco Extra": { - "count": 119 - }, - "Albert Heijn": { - "count": 464 - }, - "IGA": { - "count": 347 - }, - "Super U": { - "count": 476 - }, - "Metro": { - "count": 256 - }, - "Neukauf": { - "count": 77 - }, - "Migros": { - "count": 442 - }, - "Marktkauf": { - "count": 126 - }, - "Delikatesy Centrum": { - "count": 57 - }, - "C1000": { - "count": 314 - }, - "Hoogvliet": { - "count": 52 - }, - "COOP": { - "count": 192 - }, - "Food Basics": { - "count": 74 - }, - "Casino": { - "count": 259 - }, - "Penny Markt": { - "count": 462 - }, - "Giant": { - "count": 194 - }, - "COOP Jednota": { - "count": 69 - }, - "Rema 1000": { - "count": 364 - }, - "Kaufpark": { - "count": 96 - }, - "ALDI SÜD": { - "count": 114 - }, - "Simply Market": { - "count": 320 - }, - "Konzum": { - "count": 228 - }, - "Carrefour Express": { - "count": 330 - }, - "Eurospar": { - "count": 265 - }, - "Mercator": { - "count": 123 - }, - "Mercadona": { - "count": 734 - }, - "Famila": { - "count": 129 - }, - "Hemköp": { - "count": 83 - }, - "real,-": { - "count": 80 - }, - "Markant": { - "count": 87 - }, - "Volg": { - "count": 128 - }, - "Leader Price": { - "count": 257 - }, - "Treff 3000": { - "count": 95 - }, - "SuperBrugsen": { - "count": 67 - }, - "Kaiser's": { - "count": 253 - }, - "K+K": { - "count": 104 - }, - "Unimarkt": { - "count": 81 - }, - "Sobeys": { - "count": 120 - }, - "S-Market": { - "count": 107 - }, - "Combi": { - "count": 55 - }, - "Denner": { - "count": 267 - }, - "Konsum": { - "count": 134 - }, - "Franprix": { - "count": 308 - }, - "Monoprix": { - "count": 195 - }, - "Diska": { - "count": 68 - }, - "PENNY": { - "count": 79 - }, - "Dia": { - "count": 798 - }, - "Giant Eagle": { - "count": 82 - }, - "NORMA": { - "count": 115 - }, - "AD Delhaize": { - "count": 62 - }, - "Auchan": { - "count": 147 - }, - "Consum": { - "count": 125 - }, - "Carrefour Market": { - "count": 80 - }, - "Carrefour City": { - "count": 117 - }, - "Pam": { - "count": 54 - }, - "Despar": { - "count": 147 - }, - "Eroski": { - "count": 204 - }, - "Costcutter": { - "count": 61 - }, - "Maxi": { - "count": 103 - }, - "Colruyt": { - "count": 181 - }, - "The Co-operative": { - "count": 64 - }, - "sky": { - "count": 101 - }, - "Intermarché": { - "count": 1183 - }, - "Delhaize": { - "count": 207 - }, - "CBA": { - "count": 165 - }, - "Shopi": { - "count": 57 - }, - "Walmart": { - "count": 611 - }, - "Kroger": { - "count": 298 - }, - "Albertsons": { - "count": 236 - }, - "Trader Joe's": { - "count": 190 - }, - "Feneberg": { - "count": 58 - }, - "dm": { - "count": 108 - }, - "Kvickly": { - "count": 54 - }, - "Makro": { - "count": 137 - }, - "Nah & Frisch": { - "count": 72 - }, - "Champion": { - "count": 59 - }, - "Fakta": { - "count": 227 - }, - "Магнит": { - "count": 1697 - }, - "Caprabo": { - "count": 101 - }, - "Famiglia Cooperativa": { - "count": 64 - }, - "Народная 7Я семьЯ": { - "count": 150 - }, - "Esselunga": { - "count": 87 - }, - "Maxima": { - "count": 103 - }, - "Petit Casino": { - "count": 104 - }, - "Wasgau": { - "count": 60 - }, - "Pingo Doce": { - "count": 250 - }, - "Match": { - "count": 142 - }, - "Profi": { - "count": 58 - }, - "Lider": { - "count": 64 - }, - "Unimarc": { - "count": 174 - }, - "Co-operative Food": { - "count": 51 - }, - "Santa Isabel": { - "count": 128 - }, - "Седьмой континент": { - "count": 79 - }, - "HIT": { - "count": 61 - }, - "Rimi": { - "count": 104 - }, - "Conad": { - "count": 302 - }, - "Фуршет": { - "count": 74 - }, - "Willys": { - "count": 55 - }, - "Farmfoods": { - "count": 62 - }, - "Фора": { - "count": 52 - }, - "Dunnes Stores": { - "count": 72 - }, - "Сільпо": { - "count": 119 - }, - "マルエツ": { - "count": 59 - }, - "Piggly Wiggly": { - "count": 52 - }, - "Crai": { - "count": 52 - }, - "Biedronka": { - "count": 1290 - }, - "El Árbol": { - "count": 72 - }, - "Centre Commercial E. Leclerc": { - "count": 553 - }, - "Foodland": { - "count": 98 - }, - "Super Brugsen": { - "count": 64 - }, - "Дикси": { - "count": 610 - }, - "Пятёрочка": { - "count": 1293 - }, - "Publix": { - "count": 321 - }, - "Whole Foods": { - "count": 196 - }, - "Føtex": { - "count": 66 - }, - "coop": { - "count": 74 - }, - "Fressnapf": { - "count": 64 - }, - "Coop Konsum": { - "count": 79 - }, - "Carrefour Contact": { - "count": 77 - }, - "SPAR": { - "count": 280 - }, - "No Frills": { - "count": 102 - }, - "The Co-operative Food": { - "count": 120 - }, - "Plodine": { - "count": 51 - }, - "ADEG": { - "count": 63 - }, - "Minipreço": { - "count": 103 - }, - "Eurospin": { - "count": 153 - }, - "Семья": { - "count": 62 - }, - "Евроопт": { - "count": 58 - }, - "Centra": { - "count": 51 - }, - "Квартал": { - "count": 88 - }, - "New World": { - "count": 65 - }, - "Countdown": { - "count": 92 - }, - "Reliance Fresh": { - "count": 62 - }, - "Stokrotka": { - "count": 98 - }, - "Coop Jednota": { - "count": 73 - }, - "Fred Meyer": { - "count": 62 - }, - "Irma": { - "count": 59 - }, - "Continente": { - "count": 73 - }, - "Price Chopper": { - "count": 98 - }, - "Wegmans": { - "count": 53 - }, - "Game": { - "count": 53 - }, - "Soriana": { - "count": 92 - }, - "Alimerka": { - "count": 61 - }, - "Piotr i Paweł": { - "count": 52 - }, - "Перекресток": { - "count": 309 - }, - "Maxima X": { - "count": 113 - }, - "Карусель": { - "count": 55 - }, - "Tesco Lotus": { - "count": 69 - }, - "Condis": { - "count": 64 - }, - "Sam's Club": { - "count": 131 - }, - "Копейка": { - "count": 91 - }, - "Géant Casino": { - "count": 54 - }, - "ASDA": { - "count": 177 - }, - "Intermarche": { - "count": 111 - }, - "Stop & Shop": { - "count": 56 - }, - "Food Lion": { - "count": 192 - }, - "Harris Teeter": { - "count": 88 - }, - "H-E-B": { - "count": 122 - }, - "Foodworks": { - "count": 59 - }, - "Polo Market": { - "count": 84 - }, - "西友 (SEIYU)": { - "count": 58 - }, - "Полушка": { - "count": 135 - }, - "Extra": { - "count": 76 - }, - "Lewiatan": { - "count": 91 - }, - "АТБ": { - "count": 305 - }, - "Społem": { - "count": 55 - }, - "Bodega Aurrera": { - "count": 78 - }, - "Мария-Ра": { - "count": 95 - }, - "Магнолия": { - "count": 71 - }, - "Магазин": { - "count": 113 - }, - "Монетка": { - "count": 170 - }, - "Hy-Vee": { - "count": 72 - }, - "Walmart Supercenter": { - "count": 112 - }, - "Hannaford": { - "count": 55 - }, - "業務スーパー": { - "count": 55 - }, - "Norfa XL": { - "count": 53 - }, - "ヨークマート (YorkMart)": { - "count": 64 - }, - "Leclerc Drive": { - "count": 75 + + // drop unnecessary precision + p = d > 1000 ? 0 : d > 100 ? 1 : 2; + + return String(d.toFixed(p)) + ' ' + unit; + } + + function displayArea(m2) { + var d = m2 * (imperial ? 10.7639111056 : 1), + d1, d2, p1, p2, unit1, unit2; + + if (imperial) { + if (d >= 6969600) { // > 0.25mi² show mi² + d1 = d / 27878400; + unit1 = 'mi²'; + } else { + d1 = d; + unit1 = 'ft²'; } - }, - "electronics": { - "Media Markt": { - "count": 277 - }, - "Maplin": { - "count": 63 - }, - "Best Buy": { - "count": 325 - }, - "Future Shop": { - "count": 69 - }, - "Saturn": { - "count": 130 - }, - "Currys": { - "count": 81 - }, - "Radio Shack": { - "count": 249 - }, - "Comet": { - "count": 52 - }, - "Euronics": { - "count": 112 - }, - "Expert": { - "count": 119 - }, - "Эльдорадо": { - "count": 180 - }, - "Darty": { - "count": 72 - }, - "М.Видео": { - "count": 75 + + if (d > 4356 && d < 43560000) { // 0.1 - 1000 acres + d2 = d / 43560; + unit2 = 'ac'; } - }, - "convenience": { - "Shell": { - "count": 251 - }, - "Spar": { - "count": 913 - }, - "McColl's": { - "count": 96 - }, - "Tesco Express": { - "count": 417 - }, - "Sainsbury's Local": { - "count": 98 - }, - "One Stop": { - "count": 143 - }, - "The Co-operative Food": { - "count": 109 - }, - "Londis": { - "count": 349 - }, - "7-Eleven": { - "count": 4138 - }, - "CBA": { - "count": 128 - }, - "Sale": { - "count": 79 - }, - "Statoil": { - "count": 69 - }, - "Konzum": { - "count": 171 - }, - "Siwa": { - "count": 211 - }, - "Mercator": { - "count": 58 - }, - "Esso": { - "count": 66 - }, - "COOP Jednota": { - "count": 172 - }, - "Mac's": { - "count": 151 - }, - "Alepa": { - "count": 62 - }, - "Hasty Market": { - "count": 54 - }, - "K-Market": { - "count": 55 - }, - "Coop": { - "count": 520 - }, - "Costcutter": { - "count": 285 - }, - "Valintatalo": { - "count": 61 - }, - "SPAR": { - "count": 188 - }, - "COOP": { - "count": 134 - }, - "Casino": { - "count": 87 - }, - "Franprix": { - "count": 62 - }, - "Circle K": { - "count": 277 - }, - "セブンイレブン": { - "count": 2893, - "tags": { - "name:en": "7-Eleven" - } - }, - "ローソン": { - "count": 1514, - "tags": { - "name:en": "LAWSON" - } - }, - "BP": { - "count": 160 - }, - "Tesco": { - "count": 55 - }, - "Petit Casino": { - "count": 231 - }, - "Volg": { - "count": 113 - }, - "Mace": { - "count": 112 - }, - "Mini Market": { - "count": 223 - }, - "Nisa Local": { - "count": 74 - }, - "Dorfladen": { - "count": 74 - }, - "Продукты": { - "count": 4085 - }, - "Mini Stop": { - "count": 222 - }, - "LAWSON": { - "count": 414 - }, - "デイリーヤマザキ": { - "count": 134 - }, - "Надежда": { - "count": 56 - }, - "Mobil": { - "count": 64 - }, - "Nisa": { - "count": 51 - }, - "Premier": { - "count": 126 - }, - "ABC": { - "count": 147 - }, - "Edeka": { - "count": 51 - }, - "ミニストップ": { - "count": 299, - "tags": { - "name:en": "MINISTOP" - } - }, - "サンクス": { - "count": 537, - "tags": { - "name:en": "sunkus" - } - }, - "スリーエフ": { - "count": 87 - }, - "8 à Huit": { - "count": 59 - }, - "Tchibo": { - "count": 55 - }, - "Å»abka": { - "count": 520 - }, - "Almacen": { - "count": 211 - }, - "Vival": { - "count": 191 - }, - "FamilyMart": { - "count": 518 - }, - "ファミリーマート": { - "count": 1512, - "tags": { - "name:en": "FamilyMart" - } - }, - "Carrefour City": { - "count": 54 - }, - "Sunkus": { - "count": 61 - }, - "Casey's General Store": { - "count": 88 - }, - "セブンイレブン(Seven-Eleven)": { - "count": 58 - }, - "Jednota": { - "count": 55 - }, - "Гастроном": { - "count": 148 - }, - "Sklep spożywczy": { - "count": 276 - }, - "Centra": { - "count": 110 - }, - "Магнит": { - "count": 684 - }, - "サークルK": { - "count": 495, - "tags": { - "name:en": "Circle K" - } - }, - "Wawa": { - "count": 130 - }, - "Proxi": { - "count": 120 - }, - "Универсам": { - "count": 79 - }, - "Groszek": { - "count": 59 - }, - "Select": { - "count": 58 - }, - "Potraviny": { - "count": 246 - }, - "Смак": { - "count": 72 - }, - "Эконом": { - "count": 53 - }, - "Магазин": { - "count": 875 - }, - "Березка": { - "count": 75 - }, - "Społem": { - "count": 89 - }, - "Carrefour Express": { - "count": 81 - }, - "Biedronka": { - "count": 77 - }, - "Cumberland Farms": { - "count": 63 - }, - "Chevron": { - "count": 56 - }, - "Coop Jednota": { - "count": 63 - }, - "Tesco Lotus Express": { - "count": 64 - }, - "Kiosk": { - "count": 55 - }, - "24 часа": { - "count": 58 - }, - "Минимаркет": { - "count": 97 - }, - "Oxxo": { - "count": 632 - }, - "Пятёрочка": { - "count": 383 - }, - "abc": { - "count": 64 - }, - "Stewart's": { - "count": 255 - }, - "Продукти": { - "count": 162 - }, - "ローソンストア100 (LAWSON STORE 100)": { - "count": 84 - }, - "Дикси": { - "count": 121 - }, - "Радуга": { - "count": 85 - }, - "ローソンストア100": { - "count": 71 - }, - "เซเว่นอีเลฟเว่น": { - "count": 191 - }, - "Spożywczy": { - "count": 75 - }, - "Delikatesy Centrum": { - "count": 51 - }, - "Citgo": { - "count": 63 - }, - "Фортуна": { - "count": 52 - }, - "Kum & Go": { - "count": 59 - }, - "Мария-Ра": { - "count": 75 - }, - "Picard": { - "count": 55 - }, - "Four Square": { - "count": 51 - }, - "Визит": { - "count": 57 - }, - "Авоська": { - "count": 52 - }, - "Dollar General": { - "count": 109 - }, - "Studenac": { - "count": 75 - }, - "Central Convenience Store": { - "count": 54 - }, - "Монетка": { - "count": 61 - }, - "продукты": { - "count": 118 - }, - "Теремок": { - "count": 54 - }, - "Kwik Trip": { - "count": 68 - }, - "Кулинария": { - "count": 53 - }, - "全家": { - "count": 71 - }, - "Мечта": { - "count": 54 - }, - "Epicerie": { - "count": 70 - }, - "Кировский": { - "count": 67 - }, - "Food Mart": { - "count": 101 - }, - "Delikatesy": { - "count": 79 - }, - "ポプラ": { - "count": 52 - }, - "Lewiatan": { - "count": 123 - }, - "Продуктовый магазин": { - "count": 94 - }, - "Продуктовый": { - "count": 67 - }, - "セイコーマート (Seicomart)": { - "count": 55 - }, - "Виктория": { - "count": 67 - }, - "Весна": { - "count": 56 - }, - "Mini Market Non-Stop": { - "count": 58 - }, - "QuikTrip": { - "count": 70 - }, - "Копеечка": { - "count": 53 - }, - "Royal Farms": { - "count": 51 - }, - "Alfamart": { - "count": 76 - }, - "Indomaret": { - "count": 130 - }, - "магазин": { - "count": 118 - }, - "全家便利商店": { - "count": 111 - }, - "Boutique": { - "count": 58 - }, - "მარკეტი (Market)": { - "count": 144 - }, - "Stores": { - "count": 60 + + } else { + if (d >= 250000) { // > 0.25km² show km² + d1 = d / 1000000; + unit1 = 'km²'; + } else { + d1 = d; + unit1 = 'm²'; } - }, - "chemist": { - "dm": { - "count": 904 - }, - "Müller": { - "count": 206 - }, - "Schlecker": { - "count": 194 - }, - "Etos": { - "count": 465 - }, - "Bipa": { - "count": 282 - }, - "Rossmann": { - "count": 1652 - }, - "Ihr Platz": { - "count": 74 - }, - "Douglas": { - "count": 61 - }, - "Kruidvat": { - "count": 122 + + if (d > 1000 && d < 10000000) { // 0.1 - 1000 hectares + d2 = d / 10000; + unit2 = 'ha'; + } + } + + // drop unnecessary precision + p1 = d1 > 1000 ? 0 : d1 > 100 ? 1 : 2; + p2 = d2 > 1000 ? 0 : d2 > 100 ? 1 : 2; + + return String(d1.toFixed(p1)) + ' ' + unit1 + + (d2 ? ' (' + String(d2.toFixed(p2)) + ' ' + unit2 + ')' : ''); + } + + + function redraw() { + if (hidden) return; + + var resolver = context.graph(), + selected = _.filter(context.selectedIDs(), function(e) { return context.hasEntity(e); }), + singular = selected.length === 1 ? selected[0] : null, + extent = iD.geo.Extent(), + entity; + + wrap.html(''); + wrap.append('h4') + .attr('class', 'infobox-heading fillD') + .text(singular || t('infobox.selected', { n: selected.length })); + + if (!selected.length) return; + + var center; + for (var i = 0; i < selected.length; i++) { + entity = context.entity(selected[i]); + extent._extend(entity.extent(resolver)); + } + center = extent.center(); + + + var list = wrap.append('ul'); + + // multiple wrap, just display extent center.. + if (!singular) { + list.append('li') + .text(t('infobox.center') + ': ' + center[0].toFixed(5) + ', ' + center[1].toFixed(5)); + return; + } + + // single wrap, display details.. + if (!entity) return; + var geometry = entity.geometry(resolver); + + if (geometry === 'line' || geometry === 'area') { + var closed = (entity.type === 'relation') || (entity.isClosed() && !entity.isDegenerate()), + feature = entity.asGeoJSON(resolver), + length = radiansToMeters(d3.geo.length(toLineString(feature))), + lengthLabel = t('infobox.' + (closed ? 'perimeter' : 'length')), + centroid = d3.geo.centroid(feature); + + list.append('li') + .text(t('infobox.geometry') + ': ' + + (closed ? t('infobox.closed') + ' ' : '') + t('geometry.' + geometry) ); + + if (closed) { + var area = steradiansToSqmeters(entity.area(resolver)); + list.append('li') + .text(t('infobox.area') + ': ' + displayArea(area)); + } + + list.append('li') + .text(lengthLabel + ': ' + displayLength(length)); + + list.append('li') + .text(t('infobox.centroid') + ': ' + centroid[0].toFixed(5) + ', ' + centroid[1].toFixed(5)); + + + var toggle = imperial ? 'imperial' : 'metric'; + wrap.append('a') + .text(t('infobox.' + toggle)) + .attr('href', '#') + .attr('class', 'button') + .on('click', function() { + d3.event.preventDefault(); + imperial = !imperial; + redraw(); + }); + + } else { + var centerLabel = t('infobox.' + (entity.type === 'node' ? 'location' : 'center')); + + list.append('li') + .text(t('infobox.geometry') + ': ' + t('geometry.' + geometry)); + + list.append('li') + .text(centerLabel + ': ' + center[0].toFixed(5) + ', ' + center[1].toFixed(5)); + } + } + + + function toggle() { + if (d3.event) d3.event.preventDefault(); + + hidden = !hidden; + + if (hidden) { + wrap + .style('display', 'block') + .style('opacity', 1) + .transition() + .duration(200) + .style('opacity', 0) + .each('end', function() { + d3.select(this).style('display', 'none'); + }); + } else { + wrap + .style('display', 'block') + .style('opacity', 0) + .transition() + .duration(200) + .style('opacity', 1); + + redraw(); + } + } + + + var wrap = selection.selectAll('.infobox') + .data([0]); + + wrap.enter() + .append('div') + .attr('class', 'infobox fillD2') + .style('display', (hidden ? 'none' : 'block')); + + context.map() + .on('drawn.info', redraw); + + redraw(); + + var keybinding = d3.keybinding('info') + .on(key, toggle); + + d3.select(document) + .call(keybinding); + } + + return info; +}; +iD.ui.Inspector = function(context) { + var presetList = iD.ui.PresetList(context), + entityEditor = iD.ui.EntityEditor(context), + state = 'select', + entityID, + newFeature = false; + + function inspector(selection) { + presetList + .entityID(entityID) + .autofocus(newFeature) + .on('choose', setPreset); + + entityEditor + .state(state) + .entityID(entityID) + .on('choose', showList); + + var $wrap = selection.selectAll('.panewrap') + .data([0]); + + var $enter = $wrap.enter().append('div') + .attr('class', 'panewrap'); + + $enter.append('div') + .attr('class', 'preset-list-pane pane'); + + $enter.append('div') + .attr('class', 'entity-editor-pane pane'); + + var $presetPane = $wrap.select('.preset-list-pane'); + var $editorPane = $wrap.select('.entity-editor-pane'); + + var graph = context.graph(), + entity = context.entity(entityID), + showEditor = state === 'hover' || + entity.isUsed(graph) || + entity.isHighwayIntersection(graph); + + if (showEditor) { + $wrap.style('right', '0%'); + $editorPane.call(entityEditor); + } else { + $wrap.style('right', '-100%'); + $presetPane.call(presetList); + } + + var $footer = selection.selectAll('.footer') + .data([0]); + + $footer.enter().append('div') + .attr('class', 'footer'); + + selection.select('.footer') + .call(iD.ui.ViewOnOSM(context) + .entityID(entityID)); + + function showList(preset) { + $wrap.transition() + .styleTween('right', function() { return d3.interpolate('0%', '-100%'); }); + + $presetPane.call(presetList + .preset(preset) + .autofocus(true)); + } + + function setPreset(preset) { + $wrap.transition() + .styleTween('right', function() { return d3.interpolate('-100%', '0%'); }); + + $editorPane.call(entityEditor + .preset(preset)); + } + } + + inspector.state = function(_) { + if (!arguments.length) return state; + state = _; + entityEditor.state(state); + return inspector; + }; + + inspector.entityID = function(_) { + if (!arguments.length) return entityID; + entityID = _; + return inspector; + }; + + inspector.newFeature = function(_) { + if (!arguments.length) return newFeature; + newFeature = _; + return inspector; + }; + + return inspector; +}; +iD.ui.intro = function(context) { + var step; + + function intro(selection) { + + function localizedName(id) { + var features = { + n2140018997: 'city_hall', + n367813436: 'fire_department', + w203988286: 'memory_isle_park', + w203972937: 'riverwalk_trail', + w203972938: 'riverwalk_trail', + w203972940: 'riverwalk_trail', + w41785752: 'w_michigan_ave', + w134150789: 'w_michigan_ave', + w134150795: 'w_michigan_ave', + w134150800: 'w_michigan_ave', + w134150811: 'w_michigan_ave', + w134150802: 'e_michigan_ave', + w134150836: 'e_michigan_ave', + w41074896: 'e_michigan_ave', + w17965834: 'spring_st', + w203986457: 'scidmore_park', + w203049587: 'petting_zoo', + w17967397: 'n_andrews_st', + w17967315: 's_andrews_st', + w17967326: 'n_constantine_st', + w17966400: 's_constantine_st', + w170848823: 'rocky_river', + w170848824: 'rocky_river', + w170848331: 'rocky_river', + w17967752: 'railroad_dr', + w17965998: 'conrail_rr', + w134150845: 'conrail_rr', + w170989131: 'st_joseph_river', + w143497377: 'n_main_st', + w134150801: 's_main_st', + w134150830: 's_main_st', + w17966462: 's_main_st', + w17967734: 'water_st', + w17964996: 'foster_st', + w170848330: 'portage_river', + w17965351: 'flower_st', + w17965502: 'elm_st', + w17965402: 'walnut_st', + w17964793: 'morris_ave', + w17967444: 'east_st', + w17966984: 'portage_ave' + }; + return features[id] && t('intro.graph.' + features[id]); + } + + context.enter(iD.modes.Browse(context)); + + // Save current map state + var history = context.history().toJSON(), + hash = window.location.hash, + center = context.map().center(), + zoom = context.map().zoom(), + background = context.background().baseLayerSource(), + opacity = d3.selectAll('#map .layer-background').style('opacity'), + loadedTiles = context.connection().loadedTiles(), + baseEntities = context.history().graph().base().entities, + introGraph, name; + + // Block saving + context.inIntro(true); + + // Load semi-real data used in intro + context.connection().toggle(false).flush(); + context.history().reset(); + + introGraph = JSON.parse(iD.introGraph); + for (var key in introGraph) { + introGraph[key] = iD.Entity(introGraph[key]); + name = localizedName(key); + if (name) { + introGraph[key].tags.name = name; + } + } + context.history().merge(d3.values(iD.Graph().load(introGraph).entities)); + context.background().bing(); + + d3.selectAll('#map .layer-background').style('opacity', 1); + + var curtain = d3.curtain(); + selection.call(curtain); + + function reveal(box, text, options) { + options = options || {}; + if (text) curtain.reveal(box, text, options.tooltipClass, options.duration); + else curtain.reveal(box, '', '', options.duration); + } + + var steps = ['navigation', 'point', 'area', 'line', 'startEditing'].map(function(step, i) { + var s = iD.ui.intro[step](context, reveal) + .on('done', function() { + entered.filter(function(d) { + return d.title === s.title; + }).classed('finished', true); + enter(steps[i + 1]); + }); + return s; + }); + + steps[steps.length - 1].on('startEditing', function() { + curtain.remove(); + navwrap.remove(); + d3.selectAll('#map .layer-background').style('opacity', opacity); + context.connection().toggle(true).flush().loadedTiles(loadedTiles); + context.history().reset().merge(d3.values(baseEntities)); + context.background().baseLayerSource(background); + if (history) context.history().fromJSON(history, false); + context.map().centerZoom(center, zoom); + window.location.replace(hash); + context.inIntro(false); + }); + + var navwrap = selection.append('div').attr('class', 'intro-nav-wrap fillD'); + + var buttonwrap = navwrap.append('div') + .attr('class', 'joined') + .selectAll('button.step'); + + var entered = buttonwrap + .data(steps) + .enter() + .append('button') + .attr('class', 'step') + .on('click', enter); + + entered + .call(iD.svg.Icon('#icon-apply', 'pre-text')); + + entered + .append('label') + .text(function(d) { return t(d.title); }); + + enter(steps[0]); + + function enter (newStep) { + if (step) { step.exit(); } + + context.enter(iD.modes.Browse(context)); + + step = newStep; + step.enter(); + + entered.classed('active', function(d) { + return d.title === step.title; + }); + } + + } + return intro; +}; + +iD.ui.intro.pointBox = function(point, context) { + var rect = context.surfaceRect(); + point = context.projection(point); + return { + left: point[0] + rect.left - 30, + top: point[1] + rect.top - 50, + width: 60, + height: 70 + }; +}; + +iD.ui.intro.pad = function(box, padding, context) { + if (box instanceof Array) { + var rect = context.surfaceRect(); + box = context.projection(box); + box = { + left: box[0] + rect.left, + top: box[1] + rect.top + }; + } + return { + left: box.left - padding, + top: box.top - padding, + width: (box.width || 0) + 2 * padding, + height: (box.width || 0) + 2 * padding + }; +}; + +iD.ui.intro.icon = function(name, svgklass) { + return '' + + ''; +}; +iD.ui.Lasso = function(context) { + + var box, group, + a = [0, 0], + b = [0, 0]; + + function lasso(selection) { + + context.container().classed('lasso', true); + + group = selection.append('g') + .attr('class', 'lasso hide'); + + box = group.append('rect') + .attr('class', 'lasso-box'); + + group.call(iD.ui.Toggle(true)); + + } + + // top-left + function topLeft(d) { + return 'translate(' + Math.min(d[0][0], d[1][0]) + ',' + Math.min(d[0][1], d[1][1]) + ')'; + } + + function width(d) { return Math.abs(d[0][0] - d[1][0]); } + function height(d) { return Math.abs(d[0][1] - d[1][1]); } + + function draw() { + if (box) { + box.data([[a, b]]) + .attr('transform', topLeft) + .attr('width', width) + .attr('height', height); + } + } + + lasso.a = function(_) { + if (!arguments.length) return a; + a = _; + draw(); + return lasso; + }; + + lasso.b = function(_) { + if (!arguments.length) return b; + b = _; + draw(); + return lasso; + }; + + lasso.close = function() { + if (group) { + group.call(iD.ui.Toggle(false, function() { + d3.select(this).remove(); + })); + } + context.container().classed('lasso', false); + }; + + return lasso; +}; +iD.ui.Loading = function(context) { + var message = '', + blocking = false, + modal; + + var loading = function(selection) { + modal = iD.ui.modal(selection, blocking); + + var loadertext = modal.select('.content') + .classed('loading-modal', true) + .append('div') + .attr('class', 'modal-section fillL'); + + loadertext.append('img') + .attr('class', 'loader') + .attr('src', context.imagePath('loader-white.gif')); + + loadertext.append('h3') + .text(message); + + modal.select('button.close') + .attr('class', 'hide'); + + return loading; + }; + + loading.message = function(_) { + if (!arguments.length) return message; + message = _; + return loading; + }; + + loading.blocking = function(_) { + if (!arguments.length) return blocking; + blocking = _; + return loading; + }; + + loading.close = function() { + modal.remove(); + }; + + return loading; +}; +iD.ui.MapData = function(context) { + var key = 'F', + features = context.features().keys(), + layers = context.layers(), + fills = ['wireframe', 'partial', 'full'], + fillDefault = context.storage('area-fill') || 'partial', + fillSelected = fillDefault; + + + function map_data(selection) { + + function showsFeature(d) { + return context.features().enabled(d); + } + + function autoHiddenFeature(d) { + return context.features().autoHidden(d); + } + + function clickFeature(d) { + context.features().toggle(d); + update(); + } + + function showsFill(d) { + return fillSelected === d; + } + + function setFill(d) { + _.each(fills, function(opt) { + context.surface().classed('fill-' + opt, Boolean(opt === d)); + }); + + fillSelected = d; + if (d !== 'wireframe') { + fillDefault = d; + context.storage('area-fill', d); + } + update(); + } + + function toggleLayer(which) { + var layer = layers.layer(which); + if (layer) { + layer.enabled(!layer.enabled()); + update(); + } + } + + function clickGpx() { + toggleLayer('gpx'); + } + + function clickMapillaryImages() { + toggleLayer('mapillary-images'); + } + + function clickMapillarySigns() { + toggleLayer('mapillary-signs'); + } + + + function drawMapillaryItems(selection) { + var mapillaryImages = layers.layer('mapillary-images'), + mapillarySigns = layers.layer('mapillary-signs'), + supportsMapillaryImages = mapillaryImages && mapillaryImages.supported(), + supportsMapillarySigns = mapillarySigns && mapillarySigns.supported(), + showsMapillaryImages = supportsMapillaryImages && mapillaryImages.enabled(), + showsMapillarySigns = supportsMapillarySigns && mapillarySigns.enabled(); + + var mapillaryList = selection + .selectAll('.layer-list-mapillary') + .data([0]); + + // Enter + mapillaryList + .enter() + .append('ul') + .attr('class', 'layer-list layer-list-mapillary'); + + var mapillaryImageLayerItem = mapillaryList + .selectAll('.list-item-mapillary-images') + .data(supportsMapillaryImages ? [0] : []); + + var enterImages = mapillaryImageLayerItem.enter() + .append('li') + .attr('class', 'list-item-mapillary-images'); + + var labelImages = enterImages.append('label') + .call(bootstrap.tooltip() + .title(t('mapillary_images.tooltip')) + .placement('top')); + + labelImages.append('input') + .attr('type', 'checkbox') + .on('change', clickMapillaryImages); + + labelImages.append('span') + .text(t('mapillary_images.title')); + + + var mapillarySignLayerItem = mapillaryList + .selectAll('.list-item-mapillary-signs') + .data(supportsMapillarySigns ? [0] : []); + + var enterSigns = mapillarySignLayerItem.enter() + .append('li') + .attr('class', 'list-item-mapillary-signs'); + + var labelSigns = enterSigns.append('label') + .call(bootstrap.tooltip() + .title(t('mapillary_signs.tooltip')) + .placement('top')); + + labelSigns.append('input') + .attr('type', 'checkbox') + .on('change', clickMapillarySigns); + + labelSigns.append('span') + .text(t('mapillary_signs.title')); + + // Update + mapillaryImageLayerItem + .classed('active', showsMapillaryImages) + .selectAll('input') + .property('checked', showsMapillaryImages); + + mapillarySignLayerItem + .classed('active', showsMapillarySigns) + .selectAll('input') + .property('checked', showsMapillarySigns); + + // Exit + mapillaryImageLayerItem.exit() + .remove(); + mapillarySignLayerItem.exit() + .remove(); + } + + + function drawGpxItem(selection) { + var gpx = layers.layer('gpx'), + hasGpx = gpx && gpx.hasGpx(), + showsGpx = hasGpx && gpx.enabled(); + + var gpxLayerItem = selection + .selectAll('.layer-list-gpx') + .data(gpx ? [0] : []); + + // Enter + var enter = gpxLayerItem.enter() + .append('ul') + .attr('class', 'layer-list layer-list-gpx') + .append('li') + .classed('list-item-gpx', true); + + enter.append('button') + .attr('class', 'list-item-gpx-extent') + .call(bootstrap.tooltip() + .title(t('gpx.zoom')) + .placement('left')) + .on('click', function() { + d3.event.preventDefault(); + d3.event.stopPropagation(); + gpx.fitZoom(); + }) + .call(iD.svg.Icon('#icon-search')); + + enter.append('button') + .attr('class', 'list-item-gpx-browse') + .call(bootstrap.tooltip() + .title(t('gpx.browse')) + .placement('left')) + .on('click', function() { + d3.select(document.createElement('input')) + .attr('type', 'file') + .on('change', function() { + gpx.files(d3.event.target.files); + }) + .node().click(); + }) + .call(iD.svg.Icon('#icon-geolocate')); + + var labelGpx = enter.append('label') + .call(bootstrap.tooltip() + .title(t('gpx.drag_drop')) + .placement('top')); + + labelGpx.append('input') + .attr('type', 'checkbox') + .on('change', clickGpx); + + labelGpx.append('span') + .text(t('gpx.local_layer')); + + // Update + gpxLayerItem + .classed('active', showsGpx) + .selectAll('input') + .property('disabled', !hasGpx) + .property('checked', showsGpx); + + // Exit + gpxLayerItem.exit() + .remove(); + } + + + function drawList(selection, data, type, name, change, active) { + var items = selection.selectAll('li') + .data(data); + + // Enter + var enter = items.enter() + .append('li') + .attr('class', 'layer') + .call(bootstrap.tooltip() + .html(true) + .title(function(d) { + var tip = t(name + '.' + d + '.tooltip'), + key = (d === 'wireframe' ? 'W' : null); + + if (name === 'feature' && autoHiddenFeature(d)) { + tip += '
    ' + t('map_data.autohidden') + '
    '; + } + return iD.ui.tooltipHtml(tip, key); + }) + .placement('top') + ); + + var label = enter.append('label'); + + label.append('input') + .attr('type', type) + .attr('name', name) + .on('change', change); + + label.append('span') + .text(function(d) { return t(name + '.' + d + '.description'); }); + + // Update + items + .classed('active', active) + .selectAll('input') + .property('checked', active) + .property('indeterminate', function(d) { + return (name === 'feature' && autoHiddenFeature(d)); + }); + + // Exit + items.exit() + .remove(); + } + + + function update() { + dataLayerContainer.call(drawMapillaryItems); + dataLayerContainer.call(drawGpxItem); + + fillList.call(drawList, fills, 'radio', 'area_fill', setFill, showsFill); + + featureList.call(drawList, features, 'checkbox', 'feature', clickFeature, showsFeature); + } + + function hidePanel() { + setVisible(false); + } + + function togglePanel() { + if (d3.event) d3.event.preventDefault(); + tooltip.hide(button); + setVisible(!button.classed('active')); + } + + function toggleWireframe() { + if (d3.event) { + d3.event.preventDefault(); + d3.event.stopPropagation(); + } + setFill((fillSelected === 'wireframe' ? fillDefault : 'wireframe')); + context.map().pan([0,0]); // trigger a redraw + } + + function setVisible(show) { + if (show !== shown) { + button.classed('active', show); + shown = show; + + if (show) { + update(); + selection.on('mousedown.map_data-inside', function() { + return d3.event.stopPropagation(); + }); + content.style('display', 'block') + .style('right', '-300px') + .transition() + .duration(200) + .style('right', '0px'); + } else { + content.style('display', 'block') + .style('right', '0px') + .transition() + .duration(200) + .style('right', '-300px') + .each('end', function() { + d3.select(this).style('display', 'none'); + }); + selection.on('mousedown.map_data-inside', null); } - }, - "car_repair": { - "Peugeot": { - "count": 82 - }, - "Kwik Fit": { - "count": 73 - }, - "ATU": { - "count": 259 - }, - "Kwik-Fit": { - "count": 51 - }, - "Midas": { - "count": 190 - }, - "Feu Vert": { - "count": 105 - }, - "Norauto": { - "count": 141 - }, - "Speedy": { - "count": 112 - }, - "Автозапчасти": { - "count": 186 - }, - "Renault": { - "count": 165 - }, - "Pit Stop": { - "count": 57 - }, - "Jiffy Lube": { - "count": 187 - }, - "Шиномонтаж": { - "count": 1097 - }, - "СТО": { - "count": 366 - }, - "O'Reilly Auto Parts": { - "count": 69 - }, - "Carglass": { - "count": 103 - }, - "шиномонтаж": { - "count": 56 - }, - "Euromaster": { - "count": 84 - }, - "Firestone": { - "count": 84 - }, - "AutoZone": { - "count": 63 - }, - "Автосервис": { - "count": 344 - }, - "Roady": { - "count": 55 + } + } + + + var content = selection.append('div') + .attr('class', 'fillL map-overlay col3 content hide'), + tooltip = bootstrap.tooltip() + .placement('left') + .html(true) + .title(iD.ui.tooltipHtml(t('map_data.description'), key)), + button = selection.append('button') + .attr('tabindex', -1) + .on('click', togglePanel) + .call(iD.svg.Icon('#icon-data', 'light')) + .call(tooltip), + shown = false; + + content.append('h4') + .text(t('map_data.title')); + + + // data layers + content.append('a') + .text(t('map_data.data_layers')) + .attr('href', '#') + .classed('hide-toggle', true) + .classed('expanded', true) + .on('click', function() { + var exp = d3.select(this).classed('expanded'); + dataLayerContainer.style('display', exp ? 'none' : 'block'); + d3.select(this).classed('expanded', !exp); + d3.event.preventDefault(); + }); + + var dataLayerContainer = content.append('div') + .attr('class', 'data-data-layers') + .style('display', 'block'); + + + // area fills + content.append('a') + .text(t('map_data.fill_area')) + .attr('href', '#') + .classed('hide-toggle', true) + .classed('expanded', false) + .on('click', function() { + var exp = d3.select(this).classed('expanded'); + fillContainer.style('display', exp ? 'none' : 'block'); + d3.select(this).classed('expanded', !exp); + d3.event.preventDefault(); + }); + + var fillContainer = content.append('div') + .attr('class', 'data-area-fills') + .style('display', 'none'); + + var fillList = fillContainer.append('ul') + .attr('class', 'layer-list layer-fill-list'); + + + // feature filters + content.append('a') + .text(t('map_data.map_features')) + .attr('href', '#') + .classed('hide-toggle', true) + .classed('expanded', false) + .on('click', function() { + var exp = d3.select(this).classed('expanded'); + featureContainer.style('display', exp ? 'none' : 'block'); + d3.select(this).classed('expanded', !exp); + d3.event.preventDefault(); + }); + + var featureContainer = content.append('div') + .attr('class', 'data-feature-filters') + .style('display', 'none'); + + var featureList = featureContainer.append('ul') + .attr('class', 'layer-list layer-feature-list'); + + + context.features() + .on('change.map_data-update', update); + + setFill(fillDefault); + + var keybinding = d3.keybinding('features') + .on(key, togglePanel) + .on('W', toggleWireframe) + .on('B', hidePanel) + .on('H', hidePanel); + + d3.select(document) + .call(keybinding); + + context.surface().on('mousedown.map_data-outside', hidePanel); + context.container().on('mousedown.map_data-outside', hidePanel); + } + + return map_data; +}; +iD.ui.MapInMap = function(context) { + var key = '/'; + + function map_in_map(selection) { + var backgroundLayer = iD.TileLayer(), + overlayLayers = {}, + projection = iD.geo.RawMercator(), + gpxLayer = iD.svg.Gpx(projection, context).showLabels(false), + zoom = d3.behavior.zoom() + .scaleExtent([ztok(0.5), ztok(24)]) + .on('zoom', zoomPan), + transformed = false, + panning = false, + hidden = true, + zDiff = 6, // by default, minimap renders at (main zoom - 6) + tStart, tLast, tCurr, kLast, kCurr, tiles, svg, timeoutId; + + function ztok(z) { return 256 * Math.pow(2, z); } + function ktoz(k) { return Math.log(k) / Math.LN2 - 8; } + + + function startMouse() { + context.surface().on('mouseup.map-in-map-outside', endMouse); + context.container().on('mouseup.map-in-map-outside', endMouse); + + tStart = tLast = tCurr = projection.translate(); + panning = true; + } + + + function zoomPan() { + var e = d3.event.sourceEvent, + t = d3.event.translate, + k = d3.event.scale, + zMain = ktoz(context.projection.scale() * 2 * Math.PI), + zMini = ktoz(k); + + // restrict minimap zoom to < (main zoom - 3) + if (zMini > zMain - 3) { + zMini = zMain - 3; + zoom.scale(kCurr).translate(tCurr); // restore last good values + return; + } + + tCurr = t; + kCurr = k; + zDiff = zMain - zMini; + + var scale = kCurr / kLast, + tX = (tCurr[0] / scale - tLast[0]) * scale, + tY = (tCurr[1] / scale - tLast[1]) * scale; + + iD.util.setTransform(tiles, tX, tY, scale); + iD.util.setTransform(svg, 0, 0, scale); + transformed = true; + + queueRedraw(); + + e.preventDefault(); + e.stopPropagation(); + } + + + function endMouse() { + context.surface().on('mouseup.map-in-map-outside', null); + context.container().on('mouseup.map-in-map-outside', null); + + updateProjection(); + panning = false; + + if (tCurr[0] !== tStart[0] && tCurr[1] !== tStart[1]) { + var dMini = wrap.dimensions(), + cMini = [ dMini[0] / 2, dMini[1] / 2 ]; + + context.map().center(projection.invert(cMini)); + } + } + + + function updateProjection() { + var loc = context.map().center(), + dMini = wrap.dimensions(), + cMini = [ dMini[0] / 2, dMini[1] / 2 ], + tMain = context.projection.translate(), + kMain = context.projection.scale(), + zMain = ktoz(kMain * 2 * Math.PI), + zMini = Math.max(zMain - zDiff, 0.5), + kMini = ztok(zMini); + + projection + .translate(tMain) + .scale(kMini / (2 * Math.PI)); + + var s = projection(loc), + mouse = panning ? [ tCurr[0] - tStart[0], tCurr[1] - tStart[1] ] : [0, 0], + tMini = [ + cMini[0] - s[0] + tMain[0] + mouse[0], + cMini[1] - s[1] + tMain[1] + mouse[1] + ]; + + projection + .translate(tMini) + .clipExtent([[0, 0], dMini]); + + zoom + .center(cMini) + .translate(tMini) + .scale(kMini); + + tLast = tCurr = tMini; + kLast = kCurr = kMini; + + if (transformed) { + iD.util.setTransform(tiles, 0, 0); + iD.util.setTransform(svg, 0, 0); + transformed = false; + } + } + + + function redraw() { + if (hidden) return; + + updateProjection(); + + var dMini = wrap.dimensions(), + zMini = ktoz(projection.scale() * 2 * Math.PI); + + // setup tile container + tiles = wrap + .selectAll('.map-in-map-tiles') + .data([0]); + + tiles + .enter() + .append('div') + .attr('class', 'map-in-map-tiles'); + + // redraw background + backgroundLayer + .source(context.background().baseLayerSource()) + .projection(projection) + .dimensions(dMini); + + var background = tiles + .selectAll('.map-in-map-background') + .data([0]); + + background.enter() + .append('div') + .attr('class', 'map-in-map-background'); + + background + .call(backgroundLayer); + + + // redraw overlay + var overlaySources = context.background().overlayLayerSources(); + var activeOverlayLayers = []; + for (var i = 0; i < overlaySources.length; i++) { + if (overlaySources[i].validZoom(zMini)) { + if (!overlayLayers[i]) overlayLayers[i] = iD.TileLayer(); + activeOverlayLayers.push(overlayLayers[i] + .source(overlaySources[i]) + .projection(projection) + .dimensions(dMini)); } - }, - "furniture": { - "IKEA": { - "count": 165 - }, - "Jysk": { - "count": 98 - }, - "Roller": { - "count": 76 - }, - "Dänisches Bettenlager": { - "count": 298 - }, - "Conforama": { - "count": 93 - }, - "Matratzen Concord": { - "count": 51 - }, - "Мебель": { - "count": 201 - }, - "But": { - "count": 58 + } + + var overlay = tiles + .selectAll('.map-in-map-overlay') + .data([0]); + + overlay.enter() + .append('div') + .attr('class', 'map-in-map-overlay'); + + var overlays = overlay + .selectAll('div') + .data(activeOverlayLayers, function(d) { return d.source().name(); }); + + overlays.enter().append('div'); + overlays.each(function(layer) { + d3.select(this).call(layer); + }); + + overlays.exit() + .remove(); + + + var gpx = tiles + .selectAll('.map-in-map-gpx') + .data(gpxLayer.enabled() ? [0] : []); + + gpx.enter() + .append('svg') + .attr('class', 'map-in-map-gpx'); + + gpx.exit() + .remove(); + + gpx.call(gpxLayer); + + + // redraw bounding box + if (!panning) { + var getPath = d3.geo.path().projection(projection), + bbox = { type: 'Polygon', coordinates: [context.map().extent().polygon()] }; + + svg = wrap.selectAll('.map-in-map-svg') + .data([0]); + + svg.enter() + .append('svg') + .attr('class', 'map-in-map-svg'); + + var path = svg.selectAll('.map-in-map-bbox') + .data([bbox]); + + path.enter() + .append('path') + .attr('class', 'map-in-map-bbox'); + + path + .attr('d', getPath) + .classed('thick', function(d) { return getPath.area(d) < 30; }); + } + } + + + function queueRedraw() { + clearTimeout(timeoutId); + timeoutId = setTimeout(function() { redraw(); }, 300); + } + + + function toggle() { + if (d3.event) d3.event.preventDefault(); + + hidden = !hidden; + + var label = d3.select('.minimap-toggle'); + label.classed('active', !hidden) + .select('input').property('checked', !hidden); + + if (hidden) { + wrap + .style('display', 'block') + .style('opacity', 1) + .transition() + .duration(200) + .style('opacity', 0) + .each('end', function() { + d3.select(this).style('display', 'none'); + }); + } else { + wrap + .style('display', 'block') + .style('opacity', 0) + .transition() + .duration(200) + .style('opacity', 1); + + redraw(); + } + } + + iD.ui.MapInMap.toggle = toggle; + + var wrap = selection.selectAll('.map-in-map') + .data([0]); + + wrap.enter() + .append('div') + .attr('class', 'map-in-map') + .style('display', (hidden ? 'none' : 'block')) + .on('mousedown.map-in-map', startMouse) + .on('mouseup.map-in-map', endMouse) + .call(zoom) + .on('dblclick.zoom', null); + + context.map() + .on('drawn.map-in-map', function(drawn) { + if (drawn.full === true) redraw(); + }); + + redraw(); + + var keybinding = d3.keybinding('map-in-map') + .on(key, toggle); + + d3.select(document) + .call(keybinding); + } + + return map_in_map; +}; +iD.ui.modal = function(selection, blocking) { + + var previous = selection.select('div.modal'); + var animate = previous.empty(); + + previous.transition() + .duration(200) + .style('opacity', 0) + .remove(); + + var shaded = selection + .append('div') + .attr('class', 'shaded') + .style('opacity', 0); + + shaded.close = function() { + shaded + .transition() + .duration(200) + .style('opacity',0) + .remove(); + modal + .transition() + .duration(200) + .style('top','0px'); + keybinding.off(); + }; + + var keybinding = d3.keybinding('modal') + .on('⌫', shaded.close) + .on('⎋', shaded.close); + + d3.select(document).call(keybinding); + + var modal = shaded.append('div') + .attr('class', 'modal fillL col6'); + + shaded.on('click.remove-modal', function() { + if (d3.event.target === this && !blocking) shaded.close(); + }); + + modal.append('button') + .attr('class', 'close') + .on('click', function() { + if (!blocking) shaded.close(); + }) + .append('div') + .attr('class','icon close'); + + modal.append('div') + .attr('class', 'content'); + + if (animate) { + shaded.transition().style('opacity', 1); + } else { + shaded.style('opacity', 1); + } + + return shaded; +}; +iD.ui.Modes = function(context) { + var modes = [ + iD.modes.AddPoint(context), + iD.modes.AddLine(context), + iD.modes.AddArea(context)]; + + function editable() { + return context.editable() && context.mode().id !== 'save'; + } + + return function(selection) { + var buttons = selection.selectAll('button.add-button') + .data(modes); + + buttons.enter().append('button') + .attr('tabindex', -1) + .attr('class', function(mode) { return mode.id + ' add-button col4'; }) + .on('click.mode-buttons', function(mode) { + if (mode.id === context.mode().id) { + context.enter(iD.modes.Browse(context)); + } else { + context.enter(mode); + } + }) + .call(bootstrap.tooltip() + .placement('bottom') + .html(true) + .title(function(mode) { + return iD.ui.tooltipHtml(mode.description, mode.key); + })); + + context.map() + .on('move.modes', _.debounce(update, 500)); + + context + .on('enter.modes', update); + + buttons.each(function(d) { + d3.select(this) + .call(iD.svg.Icon('#icon-' + d.button, 'pre-text')); + }); + + buttons.append('span') + .attr('class', 'label') + .text(function(mode) { return mode.title; }); + + context.on('enter.editor', function(entered) { + buttons.classed('active', function(mode) { return entered.button === mode.button; }); + context.container() + .classed('mode-' + entered.id, true); + }); + + context.on('exit.editor', function(exited) { + context.container() + .classed('mode-' + exited.id, false); + }); + + var keybinding = d3.keybinding('mode-buttons'); + + modes.forEach(function(m) { + keybinding.on(m.key, function() { if (editable()) context.enter(m); }); + }); + + d3.select(document) + .call(keybinding); + + function update() { + buttons.property('disabled', !editable()); + } + }; +}; +iD.ui.Notice = function(context) { + return function(selection) { + var div = selection.append('div') + .attr('class', 'notice'); + + var button = div.append('button') + .attr('class', 'zoom-to notice') + .on('click', function() { context.map().zoom(context.minEditableZoom()); }); + + button + .call(iD.svg.Icon('#icon-plus', 'pre-text')) + .append('span') + .attr('class', 'label') + .text(t('zoom_in_edit')); + + function disableTooHigh() { + div.style('display', context.editable() ? 'none' : 'block'); + } + + context.map() + .on('move.notice', _.debounce(disableTooHigh, 500)); + + disableTooHigh(); + }; +}; +iD.ui.PresetIcon = function() { + var preset, geometry; + + function presetIcon(selection) { + selection.each(render); + } + + function render() { + var selection = d3.select(this), + p = preset.apply(this, arguments), + geom = geometry.apply(this, arguments), + icon = p.icon || (geom === 'line' ? 'other-line' : 'marker-stroked'), + maki = iD.data.featureIcons.hasOwnProperty(icon + '-24'); + + if (icon === 'dentist') maki = true; // workaround for dentist icon missing in `maki-sprite.json` + + function tag_classes(p) { + var s = ''; + for (var i in p.tags) { + s += ' tag-' + i; + if (p.tags[i] !== '*') { + s += ' tag-' + i + '-' + p.tags[i]; } - }, - "doityourself": { - "Hornbach": { - "count": 123 - }, - "B&Q": { - "count": 223 - }, - "Hubo": { - "count": 74 - }, - "Mr Bricolage": { - "count": 88 - }, - "Gamma": { - "count": 108 - }, - "OBI": { - "count": 409 - }, - "Lowes": { - "count": 1135 - }, - "Wickes": { - "count": 122 - }, - "Hagebau": { - "count": 59 - }, - "Max Bahr": { - "count": 87 - }, - "Castorama": { - "count": 153 - }, - "Rona": { - "count": 58 - }, - "Home Depot": { - "count": 823 - }, - "Toom Baumarkt": { - "count": 66 - }, - "Homebase": { - "count": 223 - }, - "Baumax": { - "count": 94 - }, - "Lagerhaus": { - "count": 73 - }, - "Bauhaus": { - "count": 181 - }, - "Canadian Tire": { - "count": 93 - }, - "Leroy Merlin": { - "count": 203 - }, - "Hellweg": { - "count": 58 - }, - "Brico": { - "count": 97 - }, - "Bricomarché": { - "count": 217 - }, - "Toom": { - "count": 67 - }, - "Praktiker": { - "count": 143 - }, - "Hagebaumarkt": { - "count": 105 - }, - "Menards": { - "count": 66 - }, - "Weldom": { - "count": 70 - }, - "Bunnings Warehouse": { - "count": 90 - }, - "Ace Hardware": { - "count": 133 - }, - "Home Hardware": { - "count": 69 - }, - "Хозтовары": { - "count": 70 - }, - "Стройматериалы": { - "count": 180 - }, - "Bricorama": { - "count": 58 - }, - "Point P": { - "count": 56 + } + return s; + } + + var $fill = selection.selectAll('.preset-icon-fill') + .data([0]); + + $fill.enter().append('div'); + + $fill.attr('class', function() { + return 'preset-icon-fill preset-icon-fill-' + geom + tag_classes(p); + }); + + var $frame = selection.selectAll('.preset-icon-frame') + .data([0]); + + $frame.enter() + .append('div') + .call(iD.svg.Icon('#preset-icon-frame')); + + $frame.attr('class', function() { + return 'preset-icon-frame ' + (geom === 'area' ? '' : 'hide'); + }); + + + var $icon = selection.selectAll('.preset-icon') + .data([0]); + + $icon.enter() + .append('div') + .attr('class', 'preset-icon') + .call(iD.svg.Icon('')); + + $icon + .attr('class', 'preset-icon preset-icon-' + (maki ? '32' : (geom === 'area' ? '44' : '60'))); + + $icon.selectAll('svg') + .attr('class', function() { + return 'icon ' + icon + tag_classes(p); + }); + + $icon.selectAll('use') // workaround: maki parking-24 broken? + .attr('href', '#' + icon + (maki ? ( icon === 'parking' ? '-18' : '-24') : '')); + } + + presetIcon.preset = function(_) { + if (!arguments.length) return preset; + preset = d3.functor(_); + return presetIcon; + }; + + presetIcon.geometry = function(_) { + if (!arguments.length) return geometry; + geometry = d3.functor(_); + return presetIcon; + }; + + return presetIcon; +}; +iD.ui.preset = function(context) { + var event = d3.dispatch('change'), + state, + fields, + preset, + tags, + id; + + function UIField(field, entity, show) { + field = _.clone(field); + + field.input = iD.ui.preset[field.type](field, context) + .on('change', event.change); + + if (field.input.entity) field.input.entity(entity); + + field.keys = field.keys || [field.key]; + + field.show = show; + + field.shown = function() { + return field.id === 'name' || field.show || _.any(field.keys, function(key) { return !!tags[key]; }); + }; + + field.modified = function() { + var original = context.graph().base().entities[entity.id]; + return _.any(field.keys, function(key) { + return original ? tags[key] !== original.tags[key] : tags[key]; + }); + }; + + field.revert = function() { + var original = context.graph().base().entities[entity.id], + t = {}; + field.keys.forEach(function(key) { + t[key] = original ? original.tags[key] : undefined; + }); + return t; + }; + + field.present = function() { + return _.any(field.keys, function(key) { + return tags[key]; + }); + }; + + field.remove = function() { + var t = {}; + field.keys.forEach(function(key) { + t[key] = undefined; + }); + return t; + }; + + return field; + } + + function fieldKey(field) { + return field.id; + } + + function presets(selection) { + selection.call(iD.ui.Disclosure() + .title(t('inspector.all_fields')) + .expanded(context.storage('preset_fields.expanded') !== 'false') + .on('toggled', toggled) + .content(content)); + + function toggled(expanded) { + context.storage('preset_fields.expanded', expanded); + } + } + + function content(selection) { + if (!fields) { + var entity = context.entity(id), + geometry = context.geometry(id); + + fields = [UIField(context.presets().field('name'), entity)]; + + preset.fields.forEach(function(field) { + if (field.matchGeometry(geometry)) { + fields.push(UIField(field, entity, true)); } - }, - "department_store": { - "Target": { - "count": 530 - }, - "Debenhams": { - "count": 66 - }, - "Canadian Tire": { - "count": 71 - }, - "Karstadt": { - "count": 64 - }, - "Walmart": { - "count": 496 - }, - "Kmart": { - "count": 133 - }, - "Galeria Kaufhof": { - "count": 58 - }, - "Marks & Spencer": { - "count": 62 - }, - "Big W": { - "count": 56 - }, - "Woolworth": { - "count": 76 - }, - "Универмаг": { - "count": 63 - }, - "Sears": { - "count": 218 - }, - "Walmart Supercenter": { - "count": 90 - }, - "Sam's Club": { - "count": 51 - }, - "Kohl's": { - "count": 139 - }, - "Macy's": { - "count": 129 - }, - "JCPenney": { - "count": 58 + }); + + if (entity.isHighwayIntersection(context.graph())) { + fields.push(UIField(context.presets().field('restrictions'), entity, true)); + } + + context.presets().universal().forEach(function(field) { + if (preset.fields.indexOf(field) < 0) { + fields.push(UIField(field, entity)); } - }, - "stationery": { - "Staples": { - "count": 276 - }, - "McPaper": { - "count": 80 - }, - "Office Depot": { - "count": 88 - }, - "Канцтовары": { - "count": 56 + }); + } + + var shown = fields.filter(function(field) { return field.shown(); }), + notShown = fields.filter(function(field) { return !field.shown(); }); + + var $form = selection.selectAll('.preset-form') + .data([0]); + + $form.enter().append('div') + .attr('class', 'preset-form inspector-inner fillL3'); + + var $fields = $form.selectAll('.form-field') + .data(shown, fieldKey); + + // Enter + + var $enter = $fields.enter() + .append('div') + .attr('class', function(field) { + return 'form-field form-field-' + field.id; + }); + + var $label = $enter.append('label') + .attr('class', 'form-label') + .attr('for', function(field) { return 'preset-input-' + field.id; }) + .text(function(field) { return field.label(); }); + + var wrap = $label.append('div') + .attr('class', 'form-label-button-wrap'); + + wrap.append('button') + .attr('class', 'remove-icon') + .call(iD.svg.Icon('#operation-delete')); + + wrap.append('button') + .attr('class', 'modified-icon') + .attr('tabindex', -1) + .call(iD.svg.Icon('#icon-undo')); + + // Update + + $fields.select('.form-label-button-wrap .remove-icon') + .on('click', remove); + + $fields.select('.modified-icon') + .on('click', revert); + + $fields + .order() + .classed('modified', function(field) { + return field.modified(); + }) + .classed('present', function(field) { + return field.present(); + }) + .each(function(field) { + var reference = iD.ui.TagReference(field.reference || {key: field.key}, context); + + if (state === 'hover') { + reference.showing(false); } - }, - "car": { - "Skoda": { - "count": 95 - }, - "BMW": { - "count": 146 - }, - "Citroen": { - "count": 271 - }, - "Renault": { - "count": 365 - }, - "Mercedes-Benz": { - "count": 226 - }, - "Volvo": { - "count": 91 - }, - "Ford": { - "count": 230 - }, - "Volkswagen": { - "count": 203 - }, - "Mazda": { - "count": 99 - }, - "Mitsubishi": { - "count": 72 - }, - "Fiat": { - "count": 87 - }, - "Автозапчасти": { - "count": 278 - }, - "Opel": { - "count": 162 - }, - "Audi": { - "count": 109 - }, - "Toyota": { - "count": 256 - }, - "Nissan": { - "count": 180 - }, - "Suzuki": { - "count": 75 - }, - "Honda": { - "count": 148 - }, - "Peugeot": { - "count": 296 - }, - "Шиномонтаж": { - "count": 256 - }, - "Hyundai": { - "count": 155 - }, - "Subaru": { - "count": 53 - }, - "Chevrolet": { - "count": 81 - }, - "Автомагазин": { - "count": 62 + + d3.select(this) + .call(field.input) + .selectAll('input') + .on('keydown', function() { + if (d3.event.keyCode === 13) { // enter + context.enter(iD.modes.Browse(context)); + } + }) + .call(reference.body) + .select('.form-label-button-wrap') + .call(reference.button); + + field.input.tags(tags); + }); + + $fields.exit() + .remove(); + + notShown = notShown.map(function(field) { + return { + title: field.label(), + value: field.label(), + field: field + }; + }); + + var $more = selection.selectAll('.more-fields') + .data((notShown.length > 0) ? [0] : []); + + $more.enter().append('div') + .attr('class', 'more-fields') + .append('label') + .text(t('inspector.add_fields')); + + var $input = $more.selectAll('.value') + .data([0]); + + $input.enter().append('input') + .attr('class', 'value') + .attr('type', 'text'); + + $input.value('') + .attr('placeholder', function() { + var placeholder = []; + for (var field in notShown) { + placeholder.push(notShown[field].title); } - }, - "clothes": { - "Matalan": { - "count": 84 - }, - "KiK": { - "count": 1180 - }, - "H&M": { - "count": 641 - }, - "Urban Outfitters": { - "count": 62 - }, - "Vögele": { - "count": 131 - }, - "Zeeman": { - "count": 120 - }, - "Takko": { - "count": 508 - }, - "Adler": { - "count": 53 - }, - "C&A": { - "count": 498 - }, - "Zara": { - "count": 211 - }, - "Vero Moda": { - "count": 93 - }, - "NKD": { - "count": 476 - }, - "Ernsting's family": { - "count": 298 - }, - "Winners": { - "count": 62 - }, - "River Island": { - "count": 56 - }, - "Next": { - "count": 170 - }, - "Gap": { - "count": 77 - }, - "Adidas": { - "count": 86 - }, - "Woolworths": { - "count": 116 - }, - "Mr Price": { - "count": 87 - }, - "Jet": { - "count": 61 - }, - "Pep": { - "count": 134 - }, - "Edgars": { - "count": 110 - }, - "Ackermans": { - "count": 90 - }, - "Truworths": { - "count": 65 - }, - "Ross": { - "count": 85 - }, - "Dorothy Perkins": { - "count": 53 - }, - "Deichmann": { - "count": 58 - }, - "Lindex": { - "count": 72 - }, - "s.Oliver": { - "count": 54 - }, - "Old Navy": { - "count": 163 - }, - "Jack & Jones": { - "count": 52 - }, - "Pimkie": { - "count": 72 - }, - "Esprit": { - "count": 221 - }, - "Primark": { - "count": 87 - }, - "Bonita": { - "count": 150 - }, - "Mexx": { - "count": 65 - }, - "Gerry Weber": { - "count": 70 - }, - "Tally Weijl": { - "count": 68 - }, - "Mango": { - "count": 128 - }, - "TK Maxx": { - "count": 77 - }, - "Benetton": { - "count": 99 - }, - "Ulla Popken": { - "count": 59 - }, - "AWG": { - "count": 66 - }, - "Tommy Hilfiger": { - "count": 69 - }, - "New Yorker": { - "count": 176 - }, - "Orsay": { - "count": 72 - }, - "Charles Vögele": { - "count": 68 - }, - "New Look": { - "count": 122 - }, - "Lacoste": { - "count": 73 - }, - "Etam": { - "count": 52 - }, - "Kiabi": { - "count": 145 - }, - "Jack Wolfskin": { - "count": 60 - }, - "American Apparel": { - "count": 55 - }, - "Men's Wearhouse": { - "count": 51 - }, - "Intimissimi": { - "count": 51 - }, - "United Colors of Benetton": { - "count": 93 - }, - "Jules": { - "count": 61 - }, - "AOKI": { - "count": 55 - }, - "Calzedonia": { - "count": 66 - }, - "洋服の青山": { - "count": 96 - }, - "Levi's": { - "count": 59 - }, - "Celio": { - "count": 73 - }, - "TJ Maxx": { - "count": 52 - }, - "Promod": { - "count": 77 - }, - "Street One": { - "count": 72 - }, - "ユニクロ": { - "count": 56 - }, - "Banana Republic": { - "count": 51 - }, - "Одежда": { - "count": 68 - }, - "La Halle": { - "count": 61 - }, - "Peacocks": { - "count": 87 - }, - "しまむら": { - "count": 53 + return placeholder.slice(0,3).join(', ') + ((placeholder.length > 3) ? '…' : ''); + }) + .call(d3.combobox().data(notShown) + .minItems(1) + .on('accept', show)); + + $more.exit() + .remove(); + + $input.exit() + .remove(); + + function show(field) { + field = field.field; + field.show = true; + content(selection); + field.input.focus(); + } + + function revert(field) { + d3.event.stopPropagation(); + d3.event.preventDefault(); + event.change(field.revert()); + } + + function remove(field) { + d3.event.stopPropagation(); + d3.event.preventDefault(); + event.change(field.remove()); + } + } + + presets.preset = function(_) { + if (!arguments.length) return preset; + if (preset && preset.id === _.id) return presets; + preset = _; + fields = null; + return presets; + }; + + presets.state = function(_) { + if (!arguments.length) return state; + state = _; + return presets; + }; + + presets.tags = function(_) { + if (!arguments.length) return tags; + tags = _; + // Don't reset fields here. + return presets; + }; + + presets.entityID = function(_) { + if (!arguments.length) return id; + if (id === _) return presets; + id = _; + fields = null; + return presets; + }; + + return d3.rebind(presets, event, 'on'); +}; +iD.ui.PresetList = function(context) { + var event = d3.dispatch('choose'), + id, + currentPreset, + autofocus = false; + + function presetList(selection) { + var geometry = context.geometry(id), + presets = context.presets().matchGeometry(geometry); + + selection.html(''); + + var messagewrap = selection.append('div') + .attr('class', 'header fillL cf'); + + var message = messagewrap.append('h3') + .text(t('inspector.choose')); + + if (context.entity(id).isUsed(context.graph())) { + messagewrap.append('button') + .attr('class', 'preset-choose') + .on('click', function() { event.choose(currentPreset); }) + .append('span') + .html('►'); + } else { + messagewrap.append('button') + .attr('class', 'close') + .on('click', function() { + context.enter(iD.modes.Browse(context)); + }) + .call(iD.svg.Icon('#icon-close')); + } + + function keydown() { + // hack to let delete shortcut work when search is autofocused + if (search.property('value').length === 0 && + (d3.event.keyCode === d3.keybinding.keyCodes['⌫'] || + d3.event.keyCode === d3.keybinding.keyCodes['⌦'])) { + d3.event.preventDefault(); + d3.event.stopPropagation(); + iD.operations.Delete([id], context)(); + } else if (search.property('value').length === 0 && + (d3.event.ctrlKey || d3.event.metaKey) && + d3.event.keyCode === d3.keybinding.keyCodes.z) { + d3.event.preventDefault(); + d3.event.stopPropagation(); + context.undo(); + } else if (!d3.event.ctrlKey && !d3.event.metaKey) { + d3.select(this).on('keydown', null); + } + } + + function keypress() { + // enter + var value = search.property('value'); + if (d3.event.keyCode === 13 && value.length) { + list.selectAll('.preset-list-item:first-child').datum().choose(); + } + } + + function inputevent() { + var value = search.property('value'); + list.classed('filtered', value.length); + if (value.length) { + var results = presets.search(value, geometry); + message.text(t('inspector.results', { + n: results.collection.length, + search: value + })); + list.call(drawList, results); + } else { + list.call(drawList, context.presets().defaults(geometry, 36)); + message.text(t('inspector.choose')); + } + } + + var searchWrap = selection.append('div') + .attr('class', 'search-header'); + + var search = searchWrap.append('input') + .attr('class', 'preset-search-input') + .attr('placeholder', t('inspector.search')) + .attr('type', 'search') + .on('keydown', keydown) + .on('keypress', keypress) + .on('input', inputevent); + + searchWrap + .call(iD.svg.Icon('#icon-search', 'pre-text')); + + if (autofocus) { + search.node().focus(); + } + + var listWrap = selection.append('div') + .attr('class', 'inspector-body'); + + var list = listWrap.append('div') + .attr('class', 'preset-list fillL cf') + .call(drawList, context.presets().defaults(geometry, 36)); + } + + function drawList(list, presets) { + var collection = presets.collection.map(function(preset) { + return preset.members ? CategoryItem(preset) : PresetItem(preset); + }); + + var items = list.selectAll('.preset-list-item') + .data(collection, function(d) { return d.preset.id; }); + + items.enter().append('div') + .attr('class', function(item) { return 'preset-list-item preset-' + item.preset.id.replace('/', '-'); }) + .classed('current', function(item) { return item.preset === currentPreset; }) + .each(function(item) { + d3.select(this).call(item); + }) + .style('opacity', 0) + .transition() + .style('opacity', 1); + + items.order(); + + items.exit() + .remove(); + } + + function CategoryItem(preset) { + var box, sublist, shown = false; + + function item(selection) { + var wrap = selection.append('div') + .attr('class', 'preset-list-button-wrap category col12'); + + wrap.append('button') + .attr('class', 'preset-list-button') + .classed('expanded', false) + .call(iD.ui.PresetIcon() + .geometry(context.geometry(id)) + .preset(preset)) + .on('click', function() { + var isExpanded = d3.select(this).classed('expanded'); + var triangle = isExpanded ? '▶ ' : '▼ '; + d3.select(this).classed('expanded', !isExpanded); + d3.select(this).selectAll('.label').text(triangle + preset.name()); + item.choose(); + }) + .append('div') + .attr('class', 'label') + .text(function() { + return '▶ ' + preset.name(); + }); + + box = selection.append('div') + .attr('class', 'subgrid col12') + .style('max-height', '0px') + .style('opacity', 0); + + box.append('div') + .attr('class', 'arrow'); + + sublist = box.append('div') + .attr('class', 'preset-list fillL3 cf fl'); + } + + item.choose = function() { + if (!box || !sublist) return; + + if (shown) { + shown = false; + box.transition() + .duration(200) + .style('opacity', '0') + .style('max-height', '0px') + .style('padding-bottom', '0px'); + } else { + shown = true; + sublist.call(drawList, preset.members); + box.transition() + .duration(200) + .style('opacity', '1') + .style('max-height', 200 + preset.members.collection.length * 80 + 'px') + .style('padding-bottom', '20px'); + } + }; + + item.preset = preset; + + return item; + } + + function PresetItem(preset) { + function item(selection) { + var wrap = selection.append('div') + .attr('class', 'preset-list-button-wrap col12'); + + wrap.append('button') + .attr('class', 'preset-list-button') + .call(iD.ui.PresetIcon() + .geometry(context.geometry(id)) + .preset(preset)) + .on('click', item.choose) + .append('div') + .attr('class', 'label') + .text(preset.name()); + + wrap.call(item.reference.button); + selection.call(item.reference.body); + } + + item.choose = function() { + context.presets().choose(preset); + + context.perform( + iD.actions.ChangePreset(id, currentPreset, preset), + t('operations.change_tags.annotation')); + + event.choose(preset); + }; + + item.help = function() { + d3.event.stopPropagation(); + item.reference.toggle(); + }; + + item.preset = preset; + item.reference = iD.ui.TagReference(preset.reference(context.geometry(id)), context); + + return item; + } + + presetList.autofocus = function(_) { + if (!arguments.length) return autofocus; + autofocus = _; + return presetList; + }; + + presetList.entityID = function(_) { + if (!arguments.length) return id; + id = _; + presetList.preset(context.presets().match(context.entity(id), context.graph())); + return presetList; + }; + + presetList.preset = function(_) { + if (!arguments.length) return currentPreset; + currentPreset = _; + return presetList; + }; + + return d3.rebind(presetList, event, 'on'); +}; +iD.ui.RadialMenu = function(context, operations) { + var menu, + center = [0, 0], + tooltip; + + var radialMenu = function(selection) { + if (!operations.length) + return; + + selection.node().parentNode.focus(); + + function click(operation) { + d3.event.stopPropagation(); + if (operation.disabled()) + return; + operation(); + radialMenu.close(); + } + + menu = selection.append('g') + .attr('class', 'radial-menu') + .attr('transform', 'translate(' + center + ')') + .attr('opacity', 0); + + menu.transition() + .attr('opacity', 1); + + var r = 50, + a = Math.PI / 4, + a0 = -Math.PI / 4, + a1 = a0 + (operations.length - 1) * a; + + menu.append('path') + .attr('class', 'radial-menu-background') + .attr('d', 'M' + r * Math.sin(a0) + ',' + + r * Math.cos(a0) + + ' A' + r + ',' + r + ' 0 ' + (operations.length > 5 ? '1' : '0') + ',0 ' + + (r * Math.sin(a1) + 1e-3) + ',' + + (r * Math.cos(a1) + 1e-3)) // Force positive-length path (#1305) + .attr('stroke-width', 50) + .attr('stroke-linecap', 'round'); + + var button = menu.selectAll() + .data(operations) + .enter() + .append('g') + .attr('class', function(d) { return 'radial-menu-item radial-menu-item-' + d.id; }) + .classed('disabled', function(d) { return d.disabled(); }) + .attr('transform', function(d, i) { + return 'translate(' + iD.geo.roundCoords([ + r * Math.sin(a0 + i * a), + r * Math.cos(a0 + i * a)]).join(',') + ')'; + }); + + button.append('circle') + .attr('r', 15) + .on('click', click) + .on('mousedown', mousedown) + .on('mouseover', mouseover) + .on('mouseout', mouseout); + + button.append('use') + .attr('transform', 'translate(-10,-10)') + .attr('width', '20') + .attr('height', '20') + .attr('xlink:href', function(d) { return '#operation-' + d.id; }); + + tooltip = d3.select(document.body) + .append('div') + .attr('class', 'tooltip-inner radial-menu-tooltip'); + + function mousedown() { + d3.event.stopPropagation(); // https://github.com/openstreetmap/iD/issues/1869 + } + + function mouseover(d, i) { + var rect = context.surfaceRect(), + angle = a0 + i * a, + top = rect.top + (r + 25) * Math.cos(angle) + center[1] + 'px', + left = rect.left + (r + 25) * Math.sin(angle) + center[0] + 'px', + bottom = rect.height - (r + 25) * Math.cos(angle) - center[1] + 'px', + right = rect.width - (r + 25) * Math.sin(angle) - center[0] + 'px'; + + tooltip + .style('top', null) + .style('left', null) + .style('bottom', null) + .style('right', null) + .style('display', 'block') + .html(iD.ui.tooltipHtml(d.tooltip(), d.keys[0])); + + if (i === 0) { + tooltip + .style('right', right) + .style('top', top); + } else if (i >= 4) { + tooltip + .style('left', left) + .style('bottom', bottom); + } else { + tooltip + .style('left', left) + .style('top', top); + } + } + + function mouseout() { + tooltip.style('display', 'none'); + } + }; + + radialMenu.close = function() { + if (menu) { + menu + .style('pointer-events', 'none') + .transition() + .attr('opacity', 0) + .remove(); + } + + if (tooltip) { + tooltip.remove(); + } + }; + + radialMenu.center = function(_) { + if (!arguments.length) return center; + center = _; + return radialMenu; + }; + + return radialMenu; +}; +iD.ui.RawMemberEditor = function(context) { + var id; + + function selectMember(d) { + d3.event.preventDefault(); + context.enter(iD.modes.Select(context, [d.id])); + } + + function changeRole(d) { + var role = d3.select(this).property('value'); + context.perform( + iD.actions.ChangeMember(d.relation.id, _.extend({}, d.id, {role: role}), d.index), + t('operations.change_role.annotation')); + } + + function deleteMember(d) { + context.perform( + iD.actions.DeleteMember(d.relation.id, d.index), + t('operations.delete_member.annotation')); + + if (!context.hasEntity(d.relation.id)) { + context.enter(iD.modes.Browse(context)); + } + } + + function rawMemberEditor(selection) { + var entity = context.entity(id), + memberships = []; + + entity.members.forEach(function(member, index) { + memberships.push({ + index: index, + id: member.id, + role: member.role, + relation: entity, + member: context.hasEntity(member.id) + }); + }); + + selection.call(iD.ui.Disclosure() + .title(t('inspector.all_members') + ' (' + memberships.length + ')') + .expanded(true) + .on('toggled', toggled) + .content(content)); + + function toggled(expanded) { + if (expanded) { + selection.node().parentNode.scrollTop += 200; + } + } + + function content($wrap) { + var $list = $wrap.selectAll('.member-list') + .data([0]); + + $list.enter().append('ul') + .attr('class', 'member-list'); + + var $items = $list.selectAll('li') + .data(memberships, function(d) { + return iD.Entity.key(d.relation) + ',' + d.index + ',' + + (d.member ? iD.Entity.key(d.member) : 'incomplete'); + }); + + var $enter = $items.enter().append('li') + .attr('class', 'member-row form-field') + .classed('member-incomplete', function(d) { return !d.member; }); + + $enter.each(function(d) { + if (d.member) { + var $label = d3.select(this).append('label') + .attr('class', 'form-label') + .append('a') + .attr('href', '#') + .on('click', selectMember); + + $label.append('span') + .attr('class', 'member-entity-type') + .text(function(d) { return context.presets().match(d.member, context.graph()).name(); }); + + $label.append('span') + .attr('class', 'member-entity-name') + .text(function(d) { return iD.util.displayName(d.member); }); + + } else { + d3.select(this).append('label') + .attr('class', 'form-label') + .text(t('inspector.incomplete')); } + }); + + $enter.append('input') + .attr('class', 'member-role') + .property('type', 'text') + .attr('maxlength', 255) + .attr('placeholder', t('inspector.role')) + .property('value', function(d) { return d.role; }) + .on('change', changeRole); + + $enter.append('button') + .attr('tabindex', -1) + .attr('class', 'remove button-input-action member-delete minor') + .on('click', deleteMember) + .call(iD.svg.Icon('#operation-delete')); + + $items.exit() + .remove(); + } + } + + rawMemberEditor.entityID = function(_) { + if (!arguments.length) return id; + id = _; + return rawMemberEditor; + }; + + return rawMemberEditor; +}; +iD.ui.RawMembershipEditor = function(context) { + var id, showBlank; + + function selectRelation(d) { + d3.event.preventDefault(); + context.enter(iD.modes.Select(context, [d.relation.id])); + } + + function changeRole(d) { + var role = d3.select(this).property('value'); + context.perform( + iD.actions.ChangeMember(d.relation.id, _.extend({}, d.member, {role: role}), d.index), + t('operations.change_role.annotation')); + } + + function addMembership(d, role) { + showBlank = false; + + if (d.relation) { + context.perform( + iD.actions.AddMember(d.relation.id, {id: id, type: context.entity(id).type, role: role}), + t('operations.add_member.annotation')); + + } else { + var relation = iD.Relation(); + + context.perform( + iD.actions.AddEntity(relation), + iD.actions.AddMember(relation.id, {id: id, type: context.entity(id).type, role: role}), + t('operations.add.annotation.relation')); + + context.enter(iD.modes.Select(context, [relation.id])); + } + } + + function deleteMembership(d) { + context.perform( + iD.actions.DeleteMember(d.relation.id, d.index), + t('operations.delete_member.annotation')); + } + + function relations(q) { + var newRelation = { + relation: null, + value: t('inspector.new_relation') }, - "books": { - "Bruna": { - "count": 57 - }, - "Waterstones": { - "count": 86 - }, - "Libro": { - "count": 55 - }, - "Barnes & Noble": { - "count": 249 - }, - "Weltbild": { - "count": 73 - }, - "Thalia": { - "count": 120 - }, - "Книги": { - "count": 111 + result = [], + graph = context.graph(); + + context.intersects(context.extent()).forEach(function(entity) { + if (entity.type !== 'relation' || entity.id === id) + return; + + var presetName = context.presets().match(entity, graph).name(), + entityName = iD.util.displayName(entity) || ''; + + var value = presetName + ' ' + entityName; + if (q && value.toLowerCase().indexOf(q.toLowerCase()) === -1) + return; + + result.push({ + relation: entity, + value: value + }); + }); + + result.sort(function(a, b) { + return iD.Relation.creationOrder(a.relation, b.relation); + }); + result.unshift(newRelation); + + return result; + } + + function rawMembershipEditor(selection) { + var entity = context.entity(id), + memberships = []; + + context.graph().parentRelations(entity).forEach(function(relation) { + relation.members.forEach(function(member, index) { + if (member.id === entity.id) { + memberships.push({relation: relation, member: member, index: index}); } - }, - "alcohol": { - "Alko": { - "count": 142 - }, - "The Beer Store": { - "count": 144 - }, - "Systembolaget": { - "count": 207 - }, - "LCBO": { - "count": 226 - }, - "Ароматный мир": { - "count": 61 - }, - "Bargain Booze": { - "count": 61 - }, - "Nicolas": { - "count": 114 - }, - "Botilleria": { - "count": 76 - }, - "SAQ": { - "count": 70 - }, - "Gall & Gall": { - "count": 513 - }, - "BWS": { - "count": 66 - }, - "Живое пиво": { - "count": 61 + }); + }); + + selection.call(iD.ui.Disclosure() + .title(t('inspector.all_relations') + ' (' + memberships.length + ')') + .expanded(true) + .on('toggled', toggled) + .content(content)); + + function toggled(expanded) { + if (expanded) { + selection.node().parentNode.scrollTop += 200; + } + } + + function content($wrap) { + var $list = $wrap.selectAll('.member-list') + .data([0]); + + $list.enter().append('ul') + .attr('class', 'member-list'); + + var $items = $list.selectAll('li.member-row-normal') + .data(memberships, function(d) { return iD.Entity.key(d.relation) + ',' + d.index; }); + + var $enter = $items.enter().append('li') + .attr('class', 'member-row member-row-normal form-field'); + + var $label = $enter.append('label') + .attr('class', 'form-label') + .append('a') + .attr('href', '#') + .on('click', selectRelation); + + $label.append('span') + .attr('class', 'member-entity-type') + .text(function(d) { return context.presets().match(d.relation, context.graph()).name(); }); + + $label.append('span') + .attr('class', 'member-entity-name') + .text(function(d) { return iD.util.displayName(d.relation); }); + + $enter.append('input') + .attr('class', 'member-role') + .property('type', 'text') + .attr('maxlength', 255) + .attr('placeholder', t('inspector.role')) + .property('value', function(d) { return d.member.role; }) + .on('change', changeRole); + + $enter.append('button') + .attr('tabindex', -1) + .attr('class', 'remove button-input-action member-delete minor') + .on('click', deleteMembership) + .call(iD.svg.Icon('#operation-delete')); + + $items.exit() + .remove(); + + if (showBlank) { + var $new = $list.selectAll('.member-row-new') + .data([0]); + + $enter = $new.enter().append('li') + .attr('class', 'member-row member-row-new form-field'); + + $enter.append('input') + .attr('type', 'text') + .attr('class', 'member-entity-input') + .call(d3.combobox() + .minItems(1) + .fetcher(function(value, callback) { + callback(relations(value)); + }) + .on('accept', function(d) { + addMembership(d, $new.select('.member-role').property('value')); + })); + + $enter.append('input') + .attr('class', 'member-role') + .property('type', 'text') + .attr('maxlength', 255) + .attr('placeholder', t('inspector.role')) + .on('change', changeRole); + + $enter.append('button') + .attr('tabindex', -1) + .attr('class', 'remove button-input-action member-delete minor') + .on('click', deleteMembership) + .call(iD.svg.Icon('#operation-delete')); + + } else { + $list.selectAll('.member-row-new') + .remove(); + } + + var $add = $wrap.selectAll('.add-relation') + .data([0]); + + $add.enter() + .append('button') + .attr('class', 'add-relation') + .call(iD.svg.Icon('#icon-plus', 'light')); + + $wrap.selectAll('.add-relation') + .on('click', function() { + showBlank = true; + content($wrap); + $list.selectAll('.member-entity-input').node().focus(); + }); + } + } + + rawMembershipEditor.entityID = function(_) { + if (!arguments.length) return id; + id = _; + return rawMembershipEditor; + }; + + return rawMembershipEditor; +}; +iD.ui.RawTagEditor = function(context) { + var event = d3.dispatch('change'), + showBlank = false, + state, + preset, + tags, + id; + + function rawTagEditor(selection) { + var count = Object.keys(tags).filter(function(d) { return d; }).length; + + selection.call(iD.ui.Disclosure() + .title(t('inspector.all_tags') + ' (' + count + ')') + .expanded(context.storage('raw_tag_editor.expanded') === 'true' || preset.isFallback()) + .on('toggled', toggled) + .content(content)); + + function toggled(expanded) { + context.storage('raw_tag_editor.expanded', expanded); + if (expanded) { + selection.node().parentNode.scrollTop += 200; + } + } + } + + function content($wrap) { + var entries = d3.entries(tags); + + if (!entries.length || showBlank) { + showBlank = false; + entries.push({key: '', value: ''}); + } + + var $list = $wrap.selectAll('.tag-list') + .data([0]); + + $list.enter().append('ul') + .attr('class', 'tag-list'); + + var $newTag = $wrap.selectAll('.add-tag') + .data([0]); + + $newTag.enter() + .append('button') + .attr('class', 'add-tag') + .call(iD.svg.Icon('#icon-plus', 'light')); + + $newTag.on('click', addTag); + + var $items = $list.selectAll('li') + .data(entries, function(d) { return d.key; }); + + // Enter + + var $enter = $items.enter().append('li') + .attr('class', 'tag-row cf'); + + $enter.append('div') + .attr('class', 'key-wrap') + .append('input') + .property('type', 'text') + .attr('class', 'key') + .attr('maxlength', 255); + + $enter.append('div') + .attr('class', 'input-wrap-position') + .append('input') + .property('type', 'text') + .attr('class', 'value') + .attr('maxlength', 255); + + $enter.append('button') + .attr('tabindex', -1) + .attr('class', 'remove minor') + .call(iD.svg.Icon('#operation-delete')); + + if (context.taginfo()) { + $enter.each(bindTypeahead); + } + + // Update + + $items.order(); + + $items.each(function(tag) { + var isRelation = (context.entity(id).type === 'relation'), + reference; + if (isRelation && tag.key === 'type') + reference = iD.ui.TagReference({rtype: tag.value}, context); + else + reference = iD.ui.TagReference({key: tag.key, value: tag.value}, context); + + if (state === 'hover') { + reference.showing(false); + } + + d3.select(this) + .call(reference.button) + .call(reference.body); + }); + + $items.select('input.key') + .value(function(d) { return d.key; }) + .on('blur', keyChange) + .on('change', keyChange); + + $items.select('input.value') + .value(function(d) { return d.value; }) + .on('blur', valueChange) + .on('change', valueChange) + .on('keydown.push-more', pushMore); + + $items.select('button.remove') + .on('click', removeTag); + + $items.exit() + .each(unbind) + .remove(); + + function pushMore() { + if (d3.event.keyCode === 9 && !d3.event.shiftKey && + $list.selectAll('li:last-child input.value').node() === this) { + addTag(); + } + } + + function bindTypeahead() { + var row = d3.select(this), + key = row.selectAll('input.key'), + value = row.selectAll('input.value'); + + function sort(value, data) { + var sameletter = [], + other = []; + for (var i = 0; i < data.length; i++) { + if (data[i].value.substring(0, value.length) === value) { + sameletter.push(data[i]); + } else { + other.push(data[i]); + } } - }, - "bakery": { - "Kamps": { - "count": 250 - }, - "Bäckerei Schmidt": { - "count": 56 - }, - "Anker": { - "count": 70 - }, - "Schäfer": { - "count": 51 - }, - "Hofpfisterei": { - "count": 110 - }, - "Greggs": { - "count": 265 - }, - "Oebel": { - "count": 58 - }, - "Boulangerie": { - "count": 248 - }, - "Stadtbäckerei": { - "count": 57 - }, - "Steinecke": { - "count": 139 - }, - "Ihle": { - "count": 75 - }, - "Goldilocks": { - "count": 56 - }, - "Dat Backhus": { - "count": 66 - }, - "K&U": { - "count": 55 - }, - "Der Beck": { - "count": 97 - }, - "Thürmann": { - "count": 54 - }, - "Backwerk": { - "count": 94 - }, - "Bäcker": { - "count": 66 - }, - "Schäfer's": { - "count": 51 - }, - "Panaderia": { - "count": 162 - }, - "Goeken backen": { - "count": 51 - }, - "Stadtbäckerei Junge": { - "count": 53 - }, - "Boulangerie Patisserie": { - "count": 93 - }, - "Paul": { - "count": 78 - }, - "Хлеб": { - "count": 84 - }, - "Piekarnia": { - "count": 55 + return sameletter.concat(other); + } + + key.call(d3.combobox() + .fetcher(function(value, callback) { + context.taginfo().keys({ + debounce: true, + geometry: context.geometry(id), + query: value + }, function(err, data) { + if (!err) callback(sort(value, data)); + }); + })); + + value.call(d3.combobox() + .fetcher(function(value, callback) { + context.taginfo().values({ + debounce: true, + key: key.value(), + geometry: context.geometry(id), + query: value + }, function(err, data) { + if (!err) callback(sort(value, data)); + }); + })); + } + + function unbind() { + var row = d3.select(this); + + row.selectAll('input.key') + .call(d3.combobox.off); + + row.selectAll('input.value') + .call(d3.combobox.off); + } + + function keyChange(d) { + var kOld = d.key, + kNew = this.value.trim(), + tag = {}; + + if (kNew && kNew !== kOld) { + var match = kNew.match(/^(.*?)(?:_(\d+))?$/), + base = match[1], + suffix = +(match[2] || 1); + while (tags[kNew]) { // rename key if already in use + kNew = base + '_' + suffix++; + } + } + tag[kOld] = undefined; + tag[kNew] = d.value; + d.key = kNew; // Maintain DOM identity through the subsequent update. + this.value = kNew; + event.change(tag); + } + + function valueChange(d) { + var tag = {}; + tag[d.key] = this.value; + event.change(tag); + } + + function removeTag(d) { + var tag = {}; + tag[d.key] = undefined; + event.change(tag); + d3.select(this.parentNode).remove(); + } + + function addTag() { + // Wrapped in a setTimeout in case it's being called from a blur + // handler. Without the setTimeout, the call to `content` would + // wipe out the pending value change. + setTimeout(function() { + showBlank = true; + content($wrap); + $list.selectAll('li:last-child input.key').node().focus(); + }, 0); + } + } + + rawTagEditor.state = function(_) { + if (!arguments.length) return state; + state = _; + return rawTagEditor; + }; + + rawTagEditor.preset = function(_) { + if (!arguments.length) return preset; + preset = _; + return rawTagEditor; + }; + + rawTagEditor.tags = function(_) { + if (!arguments.length) return tags; + tags = _; + return rawTagEditor; + }; + + rawTagEditor.entityID = function(_) { + if (!arguments.length) return id; + id = _; + return rawTagEditor; + }; + + return d3.rebind(rawTagEditor, event, 'on'); +}; +iD.ui.Restore = function(context) { + return function(selection) { + if (!context.history().lock() || !context.history().restorableChanges()) + return; + + var modal = iD.ui.modal(selection); + + modal.select('.modal') + .attr('class', 'modal fillL col6'); + + var introModal = modal.select('.content'); + + introModal.attr('class','cf'); + + introModal.append('div') + .attr('class', 'modal-section') + .append('h3') + .text(t('restore.heading')); + + introModal.append('div') + .attr('class','modal-section') + .append('p') + .text(t('restore.description')); + + var buttonWrap = introModal.append('div') + .attr('class', 'modal-actions cf'); + + var restore = buttonWrap.append('button') + .attr('class', 'restore col6') + .text(t('restore.restore')) + .on('click', function() { + context.history().restore(); + modal.remove(); + }); + + buttonWrap.append('button') + .attr('class', 'reset col6') + .text(t('restore.reset')) + .on('click', function() { + context.history().clearSaved(); + modal.remove(); + }); + + restore.node().focus(); + }; +}; +iD.ui.Save = function(context) { + var history = context.history(), + key = iD.ui.cmd('⌘S'); + + function saving() { + return context.mode().id === 'save'; + } + + function save() { + d3.event.preventDefault(); + if (!context.inIntro() && !saving() && history.hasChanges()) { + context.enter(iD.modes.Save(context)); + } + } + + return function(selection) { + var tooltip = bootstrap.tooltip() + .placement('bottom') + .html(true) + .title(iD.ui.tooltipHtml(t('save.no_changes'), key)); + + var button = selection.append('button') + .attr('class', 'save col12 disabled') + .attr('tabindex', -1) + .on('click', save) + .call(tooltip); + + button.append('span') + .attr('class', 'label') + .text(t('save.title')); + + button.append('span') + .attr('class', 'count') + .text('0'); + + var keybinding = d3.keybinding('undo-redo') + .on(key, save, true); + + d3.select(document) + .call(keybinding); + + var numChanges = 0; + + context.history().on('change.save', function() { + var _ = history.difference().summary().length; + if (_ === numChanges) + return; + numChanges = _; + + tooltip.title(iD.ui.tooltipHtml(t(numChanges > 0 ? + 'save.help' : 'save.no_changes'), key)); + + button + .classed('disabled', numChanges === 0) + .classed('has-count', numChanges > 0); + + button.select('span.count') + .text(numChanges); + }); + + context.on('enter.save', function() { + button.property('disabled', saving()); + if (saving()) button.call(tooltip.hide); + }); + }; +}; +iD.ui.Scale = function(context) { + var projection = context.projection, + maxLength = 180, + tickHeight = 8; + + function scaleDefs(loc1, loc2) { + var lat = (loc2[1] + loc1[1]) / 2, + imperial = (iD.detect().locale.toLowerCase() === 'en-us'), + conversion = (imperial ? 3.28084 : 1), + dist = iD.geo.lonToMeters(loc2[0] - loc1[0], lat) * conversion, + scale = { dist: 0, px: 0, text: '' }, + buckets, i, val, dLon; + + if (imperial) { + buckets = [5280000, 528000, 52800, 5280, 500, 50, 5, 1]; + } else { + buckets = [5000000, 500000, 50000, 5000, 500, 50, 5, 1]; + } + + // determine a user-friendly endpoint for the scale + for (i = 0; i < buckets.length; i++) { + val = buckets[i]; + if (dist >= val) { + scale.dist = Math.floor(dist / val) * val; + break; + } + } + + dLon = iD.geo.metersToLon(scale.dist / conversion, lat); + scale.px = Math.round(projection([loc1[0] + dLon, loc1[1]])[0]); + + if (imperial) { + if (scale.dist >= 5280) { + scale.dist /= 5280; + scale.text = String(scale.dist) + ' mi'; + } else { + scale.text = String(scale.dist) + ' ft'; + } + } else { + if (scale.dist >= 1000) { + scale.dist /= 1000; + scale.text = String(scale.dist) + ' km'; + } else { + scale.text = String(scale.dist) + ' m'; + } + } + + return scale; + } + + function update(selection) { + // choose loc1, loc2 along bottom of viewport (near where the scale will be drawn) + var dims = context.map().dimensions(), + loc1 = projection.invert([0, dims[1]]), + loc2 = projection.invert([maxLength, dims[1]]), + scale = scaleDefs(loc1, loc2); + + selection.select('#scalepath') + .attr('d', 'M0.5,0.5v' + tickHeight + 'h' + scale.px + 'v-' + tickHeight); + + selection.select('#scaletext') + .attr('x', scale.px + 8) + .attr('y', tickHeight) + .text(scale.text); + } + + return function(selection) { + var g = selection.append('svg') + .attr('id', 'scale') + .append('g') + .attr('transform', 'translate(10,11)'); + + g.append('path').attr('id', 'scalepath'); + g.append('text').attr('id', 'scaletext'); + + update(selection); + + context.map().on('move.scale', function() { + update(selection); + }); + }; +}; +iD.ui.SelectionList = function(context, selectedIDs) { + + function selectEntity(entity) { + context.enter(iD.modes.Select(context, [entity.id]).suppressMenu(true)); + } + + + function selectionList(selection) { + selection.classed('selection-list-pane', true); + + var header = selection.append('div') + .attr('class', 'header fillL cf'); + + header.append('h3') + .text(t('inspector.multiselect')); + + var listWrap = selection.append('div') + .attr('class', 'inspector-body'); + + var list = listWrap.append('div') + .attr('class', 'feature-list cf'); + + context.history().on('change.selection-list', drawList); + drawList(); + + function drawList() { + var entities = selectedIDs + .map(function(id) { return context.hasEntity(id); }) + .filter(function(entity) { return entity; }); + + var items = list.selectAll('.feature-list-item') + .data(entities, iD.Entity.key); + + var enter = items.enter().append('button') + .attr('class', 'feature-list-item') + .on('click', selectEntity); + + // Enter + var label = enter.append('div') + .attr('class', 'label') + .call(iD.svg.Icon('', 'pre-text')); + + label.append('span') + .attr('class', 'entity-type'); + + label.append('span') + .attr('class', 'entity-name'); + + // Update + items.selectAll('use') + .attr('href', function() { + var entity = this.parentNode.parentNode.__data__; + return '#icon-' + context.geometry(entity.id); + }); + + items.selectAll('.entity-type') + .text(function(entity) { return context.presets().match(entity, context.graph()).name(); }); + + items.selectAll('.entity-name') + .text(function(entity) { return iD.util.displayName(entity); }); + + // Exit + items.exit() + .remove(); + } + } + + return selectionList; + +}; +iD.ui.Sidebar = function(context) { + var inspector = iD.ui.Inspector(context), + current; + + function sidebar(selection) { + var featureListWrap = selection.append('div') + .attr('class', 'feature-list-pane') + .call(iD.ui.FeatureList(context)); + + selection.call(iD.ui.Notice(context)); + + var inspectorWrap = selection.append('div') + .attr('class', 'inspector-hidden inspector-wrap fr'); + + function hover(id) { + if (!current && context.hasEntity(id)) { + featureListWrap.classed('inspector-hidden', true); + inspectorWrap.classed('inspector-hidden', false) + .classed('inspector-hover', true); + + if (inspector.entityID() !== id || inspector.state() !== 'hover') { + inspector + .state('hover') + .entityID(id); + + inspectorWrap.call(inspector); } - }, - "sports": { - "Sports Direct": { - "count": 53 - }, - "Decathlon": { - "count": 298 - }, - "Intersport": { - "count": 272 - }, - "Sports Authority": { - "count": 68 - }, - "Спортмастер": { - "count": 81 - }, - "Sport 2000": { - "count": 83 - }, - "Dick's Sporting Goods": { - "count": 69 + } else if (!current) { + featureListWrap.classed('inspector-hidden', false); + inspectorWrap.classed('inspector-hidden', true); + inspector.state('hide'); + } + } + + sidebar.hover = _.throttle(hover, 200); + + sidebar.select = function(id, newFeature) { + if (!current && id) { + featureListWrap.classed('inspector-hidden', true); + inspectorWrap.classed('inspector-hidden', false) + .classed('inspector-hover', false); + + if (inspector.entityID() !== id || inspector.state() !== 'select') { + inspector + .state('select') + .entityID(id) + .newFeature(newFeature); + + inspectorWrap.call(inspector); } - }, - "variety_store": { - "Tedi": { - "count": 148 - }, - "Dollarama": { - "count": 99 - }, - "Dollar Tree": { - "count": 91 - }, - "Dollar General": { - "count": 68 + } else if (!current) { + featureListWrap.classed('inspector-hidden', false); + inspectorWrap.classed('inspector-hidden', true); + inspector.state('hide'); + } + }; + + sidebar.show = function(component) { + featureListWrap.classed('inspector-hidden', true); + inspectorWrap.classed('inspector-hidden', true); + if (current) current.remove(); + current = selection.append('div') + .attr('class', 'sidebar-component') + .call(component); + }; + + sidebar.hide = function() { + featureListWrap.classed('inspector-hidden', false); + inspectorWrap.classed('inspector-hidden', true); + if (current) current.remove(); + current = null; + }; + } + + sidebar.hover = function() {}; + sidebar.hover.cancel = function() {}; + sidebar.select = function() {}; + sidebar.show = function() {}; + sidebar.hide = function() {}; + + return sidebar; +}; +iD.ui.SourceSwitch = function(context) { + var keys; + + function click() { + d3.event.preventDefault(); + + if (context.history().hasChanges() && + !window.confirm(t('source_switch.lose_changes'))) return; + + var live = d3.select(this) + .classed('live'); + + context.connection() + .switch(live ? keys[1] : keys[0]); + + context.enter(iD.modes.Browse(context)); + context.flush(); + + d3.select(this) + .text(live ? t('source_switch.dev') : t('source_switch.live')) + .classed('live', !live); + } + + var sourceSwitch = function(selection) { + selection.append('a') + .attr('href', '#') + .text(t('source_switch.live')) + .classed('live', true) + .attr('tabindex', -1) + .on('click', click); + }; + + sourceSwitch.keys = function(_) { + if (!arguments.length) return keys; + keys = _; + return sourceSwitch; + }; + + return sourceSwitch; +}; +iD.ui.Spinner = function(context) { + var connection = context.connection(); + + return function(selection) { + var img = selection.append('img') + .attr('src', context.imagePath('loader-black.gif')) + .style('opacity', 0); + + connection.on('loading.spinner', function() { + img.transition() + .style('opacity', 1); + }); + + connection.on('loaded.spinner', function() { + img.transition() + .style('opacity', 0); + }); + }; +}; +iD.ui.Splash = function(context) { + return function(selection) { + if (context.storage('sawSplash')) + return; + + context.storage('sawSplash', true); + + var modal = iD.ui.modal(selection); + + modal.select('.modal') + .attr('class', 'modal-splash modal col6'); + + var introModal = modal.select('.content') + .append('div') + .attr('class', 'fillL'); + + introModal.append('div') + .attr('class','modal-section cf') + .append('h3').text(t('splash.welcome')); + + introModal.append('div') + .attr('class','modal-section') + .append('p') + .html(t('splash.text', { + version: iD.version, + website: 'ideditor.com', + github: 'github.com' + })); + + var buttons = introModal.append('div').attr('class', 'modal-actions cf'); + + buttons.append('button') + .attr('class', 'col6 walkthrough') + .text(t('splash.walkthrough')) + .on('click', function() { + d3.select(document.body).call(iD.ui.intro(context)); + modal.close(); + }); + + buttons.append('button') + .attr('class', 'col6 start') + .text(t('splash.start')) + .on('click', modal.close); + + modal.select('button.close').attr('class','hide'); + + }; +}; +iD.ui.Status = function(context) { + var connection = context.connection(), + errCount = 0; + + return function(selection) { + + function update() { + + connection.status(function(err, apiStatus) { + + selection.html(''); + + if (err && errCount++ < 2) return; + + if (err) { + selection.text(t('status.error')); + + } else if (apiStatus === 'readonly') { + selection.text(t('status.readonly')); + + } else if (apiStatus === 'offline') { + selection.text(t('status.offline')); } - }, - "pet": { - "Fressnapf": { - "count": 309 - }, - "PetSmart": { - "count": 163 - }, - "Das Futterhaus": { - "count": 67 - }, - "Pets at Home": { - "count": 56 - }, - "Petco": { - "count": 89 - }, - "Зоомагазин": { - "count": 95 + + selection.attr('class', 'api-status ' + (err ? 'error' : apiStatus)); + if (!err) errCount = 0; + + }); + } + + connection.on('auth', function() { update(selection); }); + window.setInterval(update, 90000); + update(selection); + }; +}; +iD.ui.Success = function(context) { + var dispatch = d3.dispatch('cancel'), + changeset; + + function success(selection) { + var message = (changeset.comment || t('success.edited_osm')).substring(0, 130) + + ' ' + context.connection().changesetURL(changeset.id); + + var header = selection.append('div') + .attr('class', 'header fillL'); + + header.append('button') + .attr('class', 'fr') + .on('click', function() { dispatch.cancel(); }) + .call(iD.svg.Icon('#icon-close')); + + header.append('h3') + .text(t('success.just_edited')); + + var body = selection.append('div') + .attr('class', 'body save-success fillL'); + + body.append('p') + .html(t('success.help_html')); + + body.append('a') + .attr('class', 'details') + .attr('target', '_blank') + .attr('tabindex', -1) + .call(iD.svg.Icon('#icon-out-link', 'inline')) + .attr('href', t('success.help_link_url')) + .append('span') + .text(t('success.help_link_text')); + + var changesetURL = context.connection().changesetURL(changeset.id); + + body.append('a') + .attr('class', 'button col12 osm') + .attr('target', '_blank') + .attr('href', changesetURL) + .text(t('success.view_on_osm')); + + var sharing = { + facebook: 'https://facebook.com/sharer/sharer.php?u=' + encodeURIComponent(changesetURL), + twitter: 'https://twitter.com/intent/tweet?source=webclient&text=' + encodeURIComponent(message), + google: 'https://plus.google.com/share?url=' + encodeURIComponent(changesetURL) + }; + + body.selectAll('.button.social') + .data(d3.entries(sharing)) + .enter() + .append('a') + .attr('class', 'button social col4') + .attr('target', '_blank') + .attr('href', function(d) { return d.value; }) + .call(bootstrap.tooltip() + .title(function(d) { return t('success.' + d.key); }) + .placement('bottom')) + .each(function(d) { d3.select(this).call(iD.svg.Icon('#logo-' + d.key, 'social')); }); + } + + success.changeset = function(_) { + if (!arguments.length) return changeset; + changeset = _; + return success; + }; + + return d3.rebind(success, dispatch, 'on'); +}; +iD.ui.TagReference = function(tag, context) { + var tagReference = {}, + button, + body, + loaded, + showing; + + function findLocal(data) { + var locale = iD.detect().locale.toLowerCase(), + localized; + + localized = _.find(data, function(d) { + return d.lang.toLowerCase() === locale; + }); + if (localized) return localized; + + // try the non-regional version of a language, like + // 'en' if the language is 'en-US' + if (locale.indexOf('-') !== -1) { + var first = locale.split('-')[0]; + localized = _.find(data, function(d) { + return d.lang.toLowerCase() === first; + }); + if (localized) return localized; + } + + // finally fall back to english + return _.find(data, function(d) { + return d.lang.toLowerCase() === 'en'; + }); + } + + function load(param) { + button.classed('tag-reference-loading', true); + + context.taginfo().docs(param, function show(err, data) { + var docs; + if (!err && data) { + docs = findLocal(data); + } + + body.html(''); + + if (!docs || !docs.description) { + if (param.hasOwnProperty('value')) { + load(_.omit(param, 'value')); // retry with key only + } else { + body.append('p').text(t('inspector.no_documentation_key')); + done(); } - }, - "shoes": { - "Deichmann": { - "count": 607 - }, - "Reno": { - "count": 178 - }, - "Ecco": { - "count": 54 - }, - "Clarks": { - "count": 100 - }, - "La Halle aux Chaussures": { - "count": 65 - }, - "Brantano": { - "count": 68 - }, - "Salamander": { - "count": 52 - }, - "Обувь": { - "count": 97 - }, - "Payless Shoe Source": { - "count": 57 - }, - "Famous Footwear": { - "count": 54 - }, - "Quick Schuh": { - "count": 72 - }, - "Foot Locker": { - "count": 79 - }, - "Bata": { - "count": 97 + return; + } + + if (docs.image && docs.image.thumb_url_prefix) { + body + .append('img') + .attr('class', 'wiki-image') + .attr('src', docs.image.thumb_url_prefix + '100' + docs.image.thumb_url_suffix) + .on('load', function() { done(); }) + .on('error', function() { d3.select(this).remove(); done(); }); + } else { + done(); + } + + body + .append('p') + .text(docs.description); + + body + .append('a') + .attr('target', '_blank') + .attr('href', 'https://wiki.openstreetmap.org/wiki/' + docs.title) + .call(iD.svg.Icon('#icon-out-link', 'inline')) + .append('span') + .text(t('inspector.reference')); + }); + } + + function done() { + loaded = true; + + button.classed('tag-reference-loading', false); + + body.transition() + .duration(200) + .style('max-height', '200px') + .style('opacity', '1'); + + showing = true; + } + + function hide(selection) { + selection = selection || body.transition().duration(200); + + selection + .style('max-height', '0px') + .style('opacity', '0'); + + showing = false; + } + + tagReference.button = function(selection) { + button = selection.selectAll('.tag-reference-button') + .data([0]); + + button.enter() + .append('button') + .attr('class', 'tag-reference-button') + .attr('tabindex', -1) + .call(iD.svg.Icon('#icon-inspect')); + + button.on('click', function () { + d3.event.stopPropagation(); + d3.event.preventDefault(); + if (showing) { + hide(); + } else if (loaded) { + done(); + } else { + if (context.taginfo()) { + load(tag); } - }, - "toys": { - "La Grande Récré": { - "count": 55 - }, - "Toys R Us": { - "count": 141, - "tags": { - "shop": "toys" + } + }); + }; + + tagReference.body = function(selection) { + body = selection.selectAll('.tag-reference-body') + .data([0]); + + body.enter().append('div') + .attr('class', 'tag-reference-body cf') + .style('max-height', '0') + .style('opacity', '0'); + + if (showing === false) { + hide(body); + } + }; + + tagReference.showing = function(_) { + if (!arguments.length) return showing; + showing = _; + return tagReference; + }; + + return tagReference; +}; +// toggles the visibility of ui elements, using a combination of the +// hide class, which sets display=none, and a d3 transition for opacity. +// this will cause blinking when called repeatedly, so check that the +// value actually changes between calls. +iD.ui.Toggle = function(show, callback) { + return function(selection) { + selection + .style('opacity', show ? 0 : 1) + .classed('hide', false) + .transition() + .style('opacity', show ? 1 : 0) + .each('end', function() { + d3.select(this) + .classed('hide', !show) + .style('opacity', null); + if (callback) callback.apply(this); + }); + }; +}; +iD.ui.UndoRedo = function(context) { + var commands = [{ + id: 'undo', + cmd: iD.ui.cmd('⌘Z'), + action: function() { if (!(context.inIntro() || saving())) context.undo(); }, + annotation: function() { return context.history().undoAnnotation(); } + }, { + id: 'redo', + cmd: iD.ui.cmd('⌘⇧Z'), + action: function() {if (!(context.inIntro() || saving())) context.redo(); }, + annotation: function() { return context.history().redoAnnotation(); } + }]; + + function saving() { + return context.mode().id === 'save'; + } + + return function(selection) { + var tooltip = bootstrap.tooltip() + .placement('bottom') + .html(true) + .title(function (d) { + return iD.ui.tooltipHtml(d.annotation() ? + t(d.id + '.tooltip', {action: d.annotation()}) : + t(d.id + '.nothing'), d.cmd); + }); + + var buttons = selection.selectAll('button') + .data(commands) + .enter().append('button') + .attr('class', 'col6 disabled') + .on('click', function(d) { return d.action(); }) + .call(tooltip); + + buttons.each(function(d) { + d3.select(this) + .call(iD.svg.Icon('#icon-' + d.id)); + }); + + var keybinding = d3.keybinding('undo') + .on(commands[0].cmd, function() { d3.event.preventDefault(); commands[0].action(); }) + .on(commands[1].cmd, function() { d3.event.preventDefault(); commands[1].action(); }); + + d3.select(document) + .call(keybinding); + + context.history() + .on('change.undo_redo', update); + + context + .on('enter.undo_redo', update); + + function update() { + buttons + .property('disabled', saving()) + .classed('disabled', function(d) { return !d.annotation(); }) + .each(function() { + var selection = d3.select(this); + if (selection.property('tooltipVisible')) { + selection.call(tooltip.show); } - }, - "Детский мир": { - "count": 82 - }, - "Intertoys": { - "count": 53 - }, - "Игрушки": { - "count": 57 + }); + } + }; +}; +iD.ui.ViewOnOSM = function(context) { + var id; + + function viewOnOSM(selection) { + var entity = context.entity(id); + + selection.style('display', entity.isNew() ? 'none' : null); + + var $link = selection.selectAll('.view-on-osm') + .data([0]); + + $link.enter() + .append('a') + .attr('class', 'view-on-osm') + .attr('target', '_blank') + .call(iD.svg.Icon('#icon-out-link', 'inline')) + .append('span') + .text(t('inspector.view_on_osm')); + + $link + .attr('href', context.connection().entityURL(entity)); + } + + viewOnOSM.entityID = function(_) { + if (!arguments.length) return id; + id = _; + return viewOnOSM; + }; + + return viewOnOSM; +}; +iD.ui.Zoom = function(context) { + var zooms = [{ + id: 'zoom-in', + icon: 'plus', + title: t('zoom.in'), + action: context.zoomIn, + key: '+' + }, { + id: 'zoom-out', + icon: 'minus', + title: t('zoom.out'), + action: context.zoomOut, + key: '-' + }]; + + function zoomIn() { + d3.event.preventDefault(); + if (!context.inIntro()) context.zoomIn(); + } + + function zoomOut() { + d3.event.preventDefault(); + if (!context.inIntro()) context.zoomOut(); + } + + function zoomInFurther() { + d3.event.preventDefault(); + if (!context.inIntro()) context.zoomInFurther(); + } + + function zoomOutFurther() { + d3.event.preventDefault(); + if (!context.inIntro()) context.zoomOutFurther(); + } + + + return function(selection) { + var button = selection.selectAll('button') + .data(zooms) + .enter().append('button') + .attr('tabindex', -1) + .attr('class', function(d) { return d.id; }) + .on('click.editor', function(d) { d.action(); }) + .call(bootstrap.tooltip() + .placement('left') + .html(true) + .title(function(d) { + return iD.ui.tooltipHtml(d.title, d.key); + })); + + button.each(function(d) { + d3.select(this) + .call(iD.svg.Icon('#icon-' + d.icon, 'light')); + }); + + var keybinding = d3.keybinding('zoom'); + + _.each(['=','ffequals','plus','ffplus'], function(key) { + keybinding.on(key, zoomIn); + keybinding.on('⇧' + key, zoomIn); + keybinding.on(iD.ui.cmd('⌘' + key), zoomInFurther); + keybinding.on(iD.ui.cmd('⌘⇧' + key), zoomInFurther); + }); + _.each(['-','ffminus','_','dash'], function(key) { + keybinding.on(key, zoomOut); + keybinding.on('⇧' + key, zoomOut); + keybinding.on(iD.ui.cmd('⌘' + key), zoomOutFurther); + keybinding.on(iD.ui.cmd('⌘⇧' + key), zoomOutFurther); + }); + + d3.select(document) + .call(keybinding); + }; +}; +iD.ui.preset.access = function(field) { + var dispatch = d3.dispatch('change'), + items; + + function access(selection) { + var wrap = selection.selectAll('.preset-input-wrap') + .data([0]); + + wrap.enter().append('div') + .attr('class', 'cf preset-input-wrap') + .append('ul'); + + items = wrap.select('ul').selectAll('li') + .data(field.keys); + + // Enter + + var enter = items.enter().append('li') + .attr('class', function(d) { return 'cf preset-access-' + d; }); + + enter.append('span') + .attr('class', 'col6 label preset-label-access') + .attr('for', function(d) { return 'preset-input-access-' + d; }) + .text(function(d) { return field.t('types.' + d); }); + + enter.append('div') + .attr('class', 'col6 preset-input-access-wrap') + .append('input') + .attr('type', 'text') + .attr('class', 'preset-input-access') + .attr('id', function(d) { return 'preset-input-access-' + d; }) + .each(function(d) { + d3.select(this) + .call(d3.combobox() + .data(access.options(d))); + }); + + // Update + + wrap.selectAll('.preset-input-access') + .on('change', change) + .on('blur', change); + } + + function change(d) { + var tag = {}; + tag[d] = d3.select(this).value() || undefined; + dispatch.change(tag); + } + + access.options = function(type) { + var options = ['no', 'permissive', 'private', 'destination']; + + if (type !== 'access') { + options.unshift('yes'); + options.push('designated'); + + if (type === 'bicycle') { + options.push('dismount'); + } + } + + return options.map(function(option) { + return { + title: field.t('options.' + option + '.description'), + value: option + }; + }); + }; + + var placeholders = { + footway: { + foot: 'designated', + motor_vehicle: 'no' + }, + steps: { + foot: 'yes', + motor_vehicle: 'no', + bicycle: 'no', + horse: 'no' + }, + pedestrian: { + foot: 'yes', + motor_vehicle: 'no' + }, + cycleway: { + motor_vehicle: 'no', + bicycle: 'designated' + }, + bridleway: { + motor_vehicle: 'no', + horse: 'designated' + }, + path: { + foot: 'yes', + motor_vehicle: 'no', + bicycle: 'yes', + horse: 'yes' + }, + motorway: { + foot: 'no', + motor_vehicle: 'yes', + bicycle: 'no', + horse: 'no' + }, + trunk: { + motor_vehicle: 'yes' + }, + primary: { + foot: 'yes', + motor_vehicle: 'yes', + bicycle: 'yes', + horse: 'yes' + }, + secondary: { + foot: 'yes', + motor_vehicle: 'yes', + bicycle: 'yes', + horse: 'yes' + }, + tertiary: { + foot: 'yes', + motor_vehicle: 'yes', + bicycle: 'yes', + horse: 'yes' + }, + residential: { + foot: 'yes', + motor_vehicle: 'yes', + bicycle: 'yes', + horse: 'yes' + }, + unclassified: { + foot: 'yes', + motor_vehicle: 'yes', + bicycle: 'yes', + horse: 'yes' + }, + service: { + foot: 'yes', + motor_vehicle: 'yes', + bicycle: 'yes', + horse: 'yes' + }, + motorway_link: { + foot: 'no', + motor_vehicle: 'yes', + bicycle: 'no', + horse: 'no' + }, + trunk_link: { + motor_vehicle: 'yes' + }, + primary_link: { + foot: 'yes', + motor_vehicle: 'yes', + bicycle: 'yes', + horse: 'yes' + }, + secondary_link: { + foot: 'yes', + motor_vehicle: 'yes', + bicycle: 'yes', + horse: 'yes' + }, + tertiary_link: { + foot: 'yes', + motor_vehicle: 'yes', + bicycle: 'yes', + horse: 'yes' + } + }; + + access.tags = function(tags) { + items.selectAll('.preset-input-access') + .value(function(d) { return tags[d] || ''; }) + .attr('placeholder', function() { + return tags.access ? tags.access : field.placeholder(); + }); + + // items.selectAll('#preset-input-access-access') + // .attr('placeholder', 'yes'); + + _.forEach(placeholders[tags.highway], function(v, k) { + items.selectAll('#preset-input-access-' + k) + .attr('placeholder', function() { return (tags.access || v); }); + }); + }; + + access.focus = function() { + items.selectAll('.preset-input-access') + .node().focus(); + }; + + return d3.rebind(access, dispatch, 'on'); +}; +iD.ui.preset.address = function(field, context) { + var dispatch = d3.dispatch('init', 'change'), + wrap, + entity, + isInitialized; + + var widths = { + housenumber: 1/3, + street: 2/3, + city: 2/3, + state: 1/4, + postcode: 1/3 + }; + + function getStreets() { + var extent = entity.extent(context.graph()), + l = extent.center(), + box = iD.geo.Extent(l).padByMeters(200); + + return context.intersects(box) + .filter(isAddressable) + .map(function(d) { + var loc = context.projection([ + (extent[0][0] + extent[1][0]) / 2, + (extent[0][1] + extent[1][1]) / 2]), + choice = iD.geo.chooseEdge(context.childNodes(d), loc, context.projection); + return { + title: d.tags.name, + value: d.tags.name, + dist: choice.distance + }; + }).sort(function(a, b) { + return a.dist - b.dist; + }); + + function isAddressable(d) { + return d.tags.highway && d.tags.name && d.type === 'way'; + } + } + + function getCities() { + var extent = entity.extent(context.graph()), + l = extent.center(), + box = iD.geo.Extent(l).padByMeters(200); + + return context.intersects(box) + .filter(isAddressable) + .map(function(d) { + return { + title: d.tags['addr:city'] || d.tags.name, + value: d.tags['addr:city'] || d.tags.name, + dist: iD.geo.sphericalDistance(d.extent(context.graph()).center(), l) + }; + }).sort(function(a, b) { + return a.dist - b.dist; + }); + + function isAddressable(d) { + if (d.tags.name && + (d.tags.admin_level === '8' || d.tags.border_type === 'city')) + return true; + + if (d.tags.place && d.tags.name && ( + d.tags.place === 'city' || + d.tags.place === 'town' || + d.tags.place === 'village')) + return true; + + if (d.tags['addr:city']) return true; + + return false; + } + } + + function getPostCodes() { + var extent = entity.extent(context.graph()), + l = extent.center(), + box = iD.geo.Extent(l).padByMeters(200); + + return context.intersects(box) + .filter(isAddressable) + .map(function(d) { + return { + title: d.tags['addr:postcode'], + value: d.tags['addr:postcode'], + dist: iD.geo.sphericalDistance(d.extent(context.graph()).center(), l) + }; + }).sort(function(a, b) { + return a.dist - b.dist; + }); + + function isAddressable(d) { + return d.tags['addr:postcode']; + } + } + + function address(selection) { + isInitialized = false; + + wrap = selection.selectAll('.preset-input-wrap') + .data([0]); + + // Enter + + wrap.enter() + .append('div') + .attr('class', 'preset-input-wrap'); + + var center = entity.extent(context.graph()).center(), + addressFormat; + + iD.services.nominatim().countryCode(center, function (err, countryCode) { + addressFormat = _.find(iD.data.addressFormats, function (a) { + return a && a.countryCodes && _.contains(a.countryCodes, countryCode); + }) || _.first(iD.data.addressFormats); + + function row(r) { + // Normalize widths. + var total = _.reduce(r, function(sum, field) { + return sum + (widths[field] || 0.5); + }, 0); + + return r.map(function (field) { + return { + id: field, + width: (widths[field] || 0.5) / total + }; + }); + } + + wrap.selectAll('div') + .data(addressFormat.format) + .enter() + .append('div') + .attr('class', 'addr-row') + .selectAll('input') + .data(row) + .enter() + .append('input') + .property('type', 'text') + .attr('placeholder', function (d) { return field.t('placeholders.' + d.id); }) + .attr('class', function (d) { return 'addr-' + d.id; }) + .style('width', function (d) { return d.width * 100 + '%'; }); + + // Update + + wrap.selectAll('.addr-street') + .call(d3.combobox() + .fetcher(function(value, callback) { + callback(getStreets()); + })); + + wrap.selectAll('.addr-city') + .call(d3.combobox() + .fetcher(function(value, callback) { + callback(getCities()); + })); + + wrap.selectAll('.addr-postcode') + .call(d3.combobox() + .fetcher(function(value, callback) { + callback(getPostCodes()); + })); + + wrap.selectAll('input') + .on('blur', change()) + .on('change', change()); + + wrap.selectAll('input:not(.combobox-input)') + .on('input', change(true)); + + dispatch.init(); + isInitialized = true; + }); + } + + function change(onInput) { + return function() { + var tags = {}; + + wrap.selectAll('input') + .each(function (field) { + tags['addr:' + field.id] = this.value || undefined; + }); + + dispatch.change(tags, onInput); + }; + } + + function updateTags(tags) { + wrap.selectAll('input') + .value(function (field) { + return tags['addr:' + field.id] || ''; + }); + } + + address.entity = function(_) { + if (!arguments.length) return entity; + entity = _; + return address; + }; + + address.tags = function(tags) { + if (isInitialized) { + updateTags(tags); + } else { + dispatch.on('init', function () { + updateTags(tags); + }); + } + }; + + address.focus = function() { + var node = wrap.selectAll('input').node(); + if (node) node.focus(); + }; + + return d3.rebind(address, dispatch, 'on'); +}; +iD.ui.preset.check = +iD.ui.preset.defaultcheck = function(field) { + var dispatch = d3.dispatch('change'), + options = field.strings && field.strings.options, + values = [], + texts = [], + entity, value, box, text, label; + + if (options) { + for (var k in options) { + values.push(k === 'undefined' ? undefined : k); + texts.push(field.t('options.' + k, { 'default': options[k] })); + } + } else { + values = [undefined, 'yes']; + texts = [t('inspector.unknown'), t('inspector.check.yes')]; + if (field.type === 'check') { + values.push('no'); + texts.push(t('inspector.check.no')); + } + } + + var check = function(selection) { + // hack: pretend oneway field is a oneway_yes field + // where implied oneway tag exists (e.g. `junction=roundabout`) #2220, #1841 + if (field.id === 'oneway') { + for (var key in entity.tags) { + if (key in iD.oneWayTags && (entity.tags[key] in iD.oneWayTags[key])) { + texts[0] = t('presets.fields.oneway_yes.options.undefined'); + break; } - }, - "travel_agency": { - "Flight Centre": { - "count": 91 - }, - "Thomas Cook": { - "count": 111 + } + } + + selection.classed('checkselect', 'true'); + + label = selection.selectAll('.preset-input-wrap') + .data([0]); + + var enter = label.enter().append('label') + .attr('class', 'preset-input-wrap'); + + enter.append('input') + .property('indeterminate', field.type === 'check') + .attr('type', 'checkbox') + .attr('id', 'preset-input-' + field.id); + + enter.append('span') + .text(texts[0]) + .attr('class', 'value'); + + box = label.select('input') + .on('click', function() { + var t = {}; + t[field.key] = values[(values.indexOf(value) + 1) % values.length]; + dispatch.change(t); + d3.event.stopPropagation(); + }); + + text = label.select('span.value'); + }; + + check.entity = function(_) { + if (!arguments.length) return entity; + entity = _; + return check; + }; + + check.tags = function(tags) { + value = tags[field.key]; + box.property('indeterminate', field.type === 'check' && !value); + box.property('checked', value === 'yes'); + text.text(texts[values.indexOf(value)]); + label.classed('set', !!value); + }; + + check.focus = function() { + box.node().focus(); + }; + + return d3.rebind(check, dispatch, 'on'); +}; +iD.ui.preset.combo = +iD.ui.preset.typeCombo = function(field, context) { + var dispatch = d3.dispatch('change'), + optstrings = field.strings && field.strings.options, + optarray = field.options, + snake_case = (field.snake_case || (field.snake_case === undefined)), + strings = {}, + input; + + function snake(s) { + return s.replace(/\s+/g, '_'); + } + + function unsnake(s) { + return s.replace(/_+/g, ' '); + } + + function clean(s) { + return s.split(';') + .map(function(s) { return s.trim(); }) + .join(';'); + } + + function optString() { + return _.find(_.keys(strings), function(k) { + return strings[k] === input.value(); + }); + } + + function combo(selection) { + var combobox = d3.combobox(); + + input = selection.selectAll('input') + .data([0]); + + var enter = input.enter() + .append('input') + .attr('type', 'text') + .attr('id', 'preset-input-' + field.id); + + if (optstrings) { enter.attr('readonly', 'readonly'); } + + input + .call(combobox) + .on('change', change) + .on('blur', change) + .each(function() { + if (optstrings) { + _.each(optstrings, function(v, k) { + strings[k] = field.t('options.' + k, { 'default': v }); + }); + stringsLoaded(); + } else if (optarray) { + _.each(optarray, function(k) { + strings[k] = (snake_case ? unsnake(k) : k); + }); + stringsLoaded(); + } else if (context.taginfo()) { + context.taginfo().values({key: field.key}, function(err, data) { + if (!err) { + _.each(_.pluck(data, 'value'), function(k) { + strings[k] = (snake_case ? unsnake(k) : k); + }); + stringsLoaded(); + } + }); } - }, - "jewelry": { - "Bijou Brigitte": { - "count": 54 - }, - "Christ": { - "count": 56 - }, - "Swarovski": { - "count": 73 + }); + + function stringsLoaded() { + var keys = _.keys(strings), + strs = [], + placeholders; + + combobox.data(keys.map(function(k) { + var s = strings[k], + o = {}; + o.title = o.value = s; + if (s.length < 20) { strs.push(s); } + return o; + })); + + placeholders = strs.length > 1 ? strs : keys; + input.attr('placeholder', field.placeholder() || + (placeholders.slice(0, 3).join(', ') + '...')); + } + } + + function change() { + var value = optString() || clean(input.value()); + + if (snake_case) { + value = snake(value); + } + if (field.type === 'typeCombo' && !value) { + value = 'yes'; + } + + var t = {}; + t[field.key] = value || undefined; + dispatch.change(t); + } + + combo.tags = function(tags) { + var key = tags[field.key], + optstring = optString(), + value = strings[key] || key || ''; + + if (field.type === 'typeCombo' && value.toLowerCase() === 'yes') { + value = ''; + } + if (!optstring && snake_case) { + value = unsnake(value); + } + input.value(value); + }; + + combo.focus = function() { + input.node().focus(); + }; + + return d3.rebind(combo, dispatch, 'on'); +}; +iD.ui.preset.cycleway = function(field) { + var dispatch = d3.dispatch('change'), + items; + + function cycleway(selection) { + var wrap = selection.selectAll('.preset-input-wrap') + .data([0]); + + wrap.enter().append('div') + .attr('class', 'cf preset-input-wrap') + .append('ul'); + + items = wrap.select('ul').selectAll('li') + .data(field.keys); + + // Enter + + var enter = items.enter().append('li') + .attr('class', function(d) { return 'cf preset-cycleway-' + d; }); + + enter.append('span') + .attr('class', 'col6 label preset-label-cycleway') + .attr('for', function(d) { return 'preset-input-cycleway-' + d; }) + .text(function(d) { return field.t('types.' + d); }); + + enter.append('div') + .attr('class', 'col6 preset-input-cycleway-wrap') + .append('input') + .attr('type', 'text') + .attr('class', 'preset-input-cycleway') + .attr('id', function(d) { return 'preset-input-cycleway-' + d; }) + .each(function(d) { + d3.select(this) + .call(d3.combobox() + .data(cycleway.options(d))); + }); + + // Update + + wrap.selectAll('.preset-input-cycleway') + .on('change', change) + .on('blur', change); + } + + function change() { + var inputs = d3.selectAll('.preset-input-cycleway')[0], + left = d3.select(inputs[0]).value(), + right = d3.select(inputs[1]).value(), + tag = {}; + if (left === 'none' || left === '') { left = undefined; } + if (right === 'none' || right === '') { right = undefined; } + + // Always set both left and right as changing one can affect the other + tag = { + cycleway: undefined, + 'cycleway:left': left, + 'cycleway:right': right + }; + + // If the left and right tags match, use the cycleway tag to tag both + // sides the same way + if (left === right) { + tag = { + cycleway: left, + 'cycleway:left': undefined, + 'cycleway:right': undefined + }; + } + + dispatch.change(tag); + } + + cycleway.options = function() { + return d3.keys(field.strings.options).map(function(option) { + return { + title: field.t('options.' + option + '.description'), + value: option + }; + }); + }; + + cycleway.tags = function(tags) { + items.selectAll('.preset-input-cycleway') + .value(function(d) { + // If cycleway is set, always return that + if (tags.cycleway) { + return tags.cycleway; } - }, - "optician": { - "Fielmann": { - "count": 222 - }, - "Apollo Optik": { - "count": 147 - }, - "Vision Express": { - "count": 54 - }, - "Оптика": { - "count": 175 - }, - "Optic 2000": { - "count": 90 - }, - "Alain Afflelou": { - "count": 71 - }, - "Specsavers": { - "count": 116 - }, - "Krys": { - "count": 70 - }, - "Atol": { - "count": 52 + return tags[d] || ''; + }) + .attr('placeholder', field.placeholder()); + }; + + cycleway.focus = function() { + items.selectAll('.preset-input-cycleway') + .node().focus(); + }; + + return d3.rebind(cycleway, dispatch, 'on'); +}; +iD.ui.preset.text = +iD.ui.preset.number = +iD.ui.preset.tel = +iD.ui.preset.email = +iD.ui.preset.url = function(field) { + + var dispatch = d3.dispatch('change'), + input; + + function i(selection) { + input = selection.selectAll('input') + .data([0]); + + input.enter().append('input') + .attr('type', field.type) + .attr('id', 'preset-input-' + field.id) + .attr('placeholder', field.placeholder() || t('inspector.unknown')); + + input + .on('input', change(true)) + .on('blur', change()) + .on('change', change()); + + if (field.type === 'number') { + input.attr('type', 'text'); + + var spinControl = selection.selectAll('.spin-control') + .data([0]); + + var enter = spinControl.enter().append('div') + .attr('class', 'spin-control'); + + enter.append('button') + .datum(1) + .attr('class', 'increment'); + + enter.append('button') + .datum(-1) + .attr('class', 'decrement'); + + spinControl.selectAll('button') + .on('click', function(d) { + d3.event.preventDefault(); + var num = parseInt(input.node().value || 0, 10); + if (!isNaN(num)) input.node().value = num + d; + change()(); + }); + } + } + + function change(onInput) { + return function() { + var t = {}; + t[field.key] = input.value() || undefined; + dispatch.change(t, onInput); + }; + } + + i.tags = function(tags) { + input.value(tags[field.key] || ''); + }; + + i.focus = function() { + input.node().focus(); + }; + + return d3.rebind(i, dispatch, 'on'); +}; +iD.ui.preset.localized = function(field, context) { + var dispatch = d3.dispatch('change', 'input'), + wikipedia = iD.services.wikipedia(), + input, localizedInputs, wikiTitles, + entity; + + function i(selection) { + input = selection.selectAll('.localized-main') + .data([0]); + + input.enter().append('input') + .attr('type', 'text') + .attr('id', 'preset-input-' + field.id) + .attr('class', 'localized-main') + .attr('placeholder', field.placeholder()); + + if (field.id === 'name') { + var preset = context.presets().match(entity, context.graph()); + input.call(d3.combobox().fetcher( + iD.util.SuggestNames(preset, iD.data.suggestions) + )); + } + + input + .on('input', change(true)) + .on('blur', change()) + .on('change', change()); + + var translateButton = selection.selectAll('.localized-add') + .data([0]); + + translateButton.enter() + .append('button') + .attr('class', 'button-input-action localized-add minor') + .call(iD.svg.Icon('#icon-plus')) + .call(bootstrap.tooltip() + .title(t('translate.translate')) + .placement('left')); + + translateButton + .on('click', addNew); + + localizedInputs = selection.selectAll('.localized-wrap') + .data([0]); + + localizedInputs.enter().append('div') + .attr('class', 'localized-wrap'); + } + + function addNew() { + d3.event.preventDefault(); + var data = localizedInputs.selectAll('div.entry').data(); + var defaultLang = iD.detect().locale.toLowerCase().split('-')[0]; + var langExists = _.find(data, function(datum) { return datum.lang === defaultLang;}); + var isLangEn = defaultLang.indexOf('en') > -1; + if (isLangEn || langExists) { + defaultLang = ''; + } + data.push({ lang: defaultLang, value: '' }); + localizedInputs.call(render, data); + } + + function change(onInput) { + return function() { + var t = {}; + t[field.key] = d3.select(this).value() || undefined; + dispatch.change(t, onInput); + }; + } + + function key(lang) { return field.key + ':' + lang; } + + function changeLang(d) { + var lang = d3.select(this).value(), + t = {}, + language = _.find(iD.data.wikipedia, function(d) { + return d[0].toLowerCase() === lang.toLowerCase() || + d[1].toLowerCase() === lang.toLowerCase(); + }); + + if (language) lang = language[2]; + + if (d.lang && d.lang !== lang) { + t[key(d.lang)] = undefined; + } + + var value = d3.select(this.parentNode) + .selectAll('.localized-value') + .value(); + + if (lang && value) { + t[key(lang)] = value; + } else if (lang && wikiTitles && wikiTitles[d.lang]) { + t[key(lang)] = wikiTitles[d.lang]; + } + + d.lang = lang; + dispatch.change(t); + } + + function changeValue(d) { + if (!d.lang) return; + var t = {}; + t[key(d.lang)] = d3.select(this).value() || undefined; + dispatch.change(t); + } + + function fetcher(value, cb) { + var v = value.toLowerCase(); + + cb(iD.data.wikipedia.filter(function(d) { + return d[0].toLowerCase().indexOf(v) >= 0 || + d[1].toLowerCase().indexOf(v) >= 0 || + d[2].toLowerCase().indexOf(v) >= 0; + }).map(function(d) { + return { value: d[1] }; + })); + } + + function render(selection, data) { + var wraps = selection.selectAll('div.entry'). + data(data, function(d) { return d.lang; }); + + var innerWrap = wraps.enter() + .insert('div', ':first-child'); + + innerWrap.attr('class', 'entry') + .each(function() { + var wrap = d3.select(this); + var langcombo = d3.combobox().fetcher(fetcher); + + var label = wrap.append('label') + .attr('class','form-label') + .text(t('translate.localized_translation_label')) + .attr('for','localized-lang'); + + label.append('button') + .attr('class', 'minor remove') + .on('click', function(d){ + d3.event.preventDefault(); + var t = {}; + t[key(d.lang)] = undefined; + dispatch.change(t); + d3.select(this.parentNode.parentNode) + .style('top','0') + .style('max-height','240px') + .transition() + .style('opacity', '0') + .style('max-height','0px') + .remove(); + }) + .call(iD.svg.Icon('#operation-delete')); + + wrap.append('input') + .attr('class', 'localized-lang') + .attr('type', 'text') + .attr('placeholder',t('translate.localized_translation_language')) + .on('blur', changeLang) + .on('change', changeLang) + .call(langcombo); + + wrap.append('input') + .on('blur', changeValue) + .on('change', changeValue) + .attr('type', 'text') + .attr('placeholder', t('translate.localized_translation_name')) + .attr('class', 'localized-value'); + }); + + innerWrap + .style('margin-top', '0px') + .style('max-height', '0px') + .style('opacity', '0') + .transition() + .duration(200) + .style('margin-top', '10px') + .style('max-height', '240px') + .style('opacity', '1') + .each('end', function() { + d3.select(this) + .style('max-height', '') + .style('overflow', 'visible'); + }); + + wraps.exit() + .transition() + .duration(200) + .style('max-height','0px') + .style('opacity', '0') + .style('top','-10px') + .remove(); + + var entry = selection.selectAll('.entry'); + + entry.select('.localized-lang') + .value(function(d) { + var lang = _.find(iD.data.wikipedia, function(lang) { return lang[2] === d.lang; }); + return lang ? lang[1] : d.lang; + }); + + entry.select('.localized-value') + .value(function(d) { return d.value; }); + } + + i.tags = function(tags) { + // Fetch translations from wikipedia + if (tags.wikipedia && !wikiTitles) { + wikiTitles = {}; + var wm = tags.wikipedia.match(/([^:]+):(.+)/); + if (wm && wm[0] && wm[1]) { + wikipedia.translations(wm[1], wm[2], function(d) { + wikiTitles = d; + }); + } + } + + input.value(tags[field.key] || ''); + + var postfixed = [], k, m; + for (k in tags) { + m = k.match(/^(.*):([a-zA-Z_-]+)$/); + if (m && m[1] === field.key && m[2]) { + postfixed.push({ lang: m[2], value: tags[k] }); + } + } + + localizedInputs.call(render, postfixed.reverse()); + }; + + i.focus = function() { + input.node().focus(); + }; + + i.entity = function(_) { + entity = _; + }; + + return d3.rebind(i, dispatch, 'on'); +}; +iD.ui.preset.maxspeed = function(field, context) { + var dispatch = d3.dispatch('change'), + entity, + imperial, + unitInput, + combobox, + input; + + var metricValues = [20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120], + imperialValues = [20, 25, 30, 35, 40, 45, 50, 55, 65, 70]; + + function maxspeed(selection) { + combobox = d3.combobox(); + var unitCombobox = d3.combobox().data(['km/h', 'mph'].map(comboValues)); + + input = selection.selectAll('#preset-input-' + field.id) + .data([0]); + + input.enter().append('input') + .attr('type', 'text') + .attr('id', 'preset-input-' + field.id) + .attr('placeholder', field.placeholder()); + + input + .call(combobox) + .on('change', change) + .on('blur', change); + + var childNodes = context.graph().childNodes(context.entity(entity.id)), + loc = childNodes[~~(childNodes.length/2)].loc; + + imperial = _.any(iD.data.imperial.features, function(f) { + return _.any(f.geometry.coordinates, function(d) { + return iD.geo.pointInPolygon(loc, d[0]); + }); + }); + + unitInput = selection.selectAll('input.maxspeed-unit') + .data([0]); + + unitInput.enter().append('input') + .attr('type', 'text') + .attr('class', 'maxspeed-unit'); + + unitInput + .on('blur', changeUnits) + .on('change', changeUnits) + .call(unitCombobox); + + function changeUnits() { + imperial = unitInput.value() === 'mph'; + unitInput.value(imperial ? 'mph' : 'km/h'); + setSuggestions(); + change(); + } + + } + + function setSuggestions() { + combobox.data((imperial ? imperialValues : metricValues).map(comboValues)); + unitInput.value(imperial ? 'mph' : 'km/h'); + } + + function comboValues(d) { + return { + value: d.toString(), + title: d.toString() + }; + } + + function change() { + var tag = {}, + value = input.value(); + + if (!value) { + tag[field.key] = undefined; + } else if (isNaN(value) || !imperial) { + tag[field.key] = value; + } else { + tag[field.key] = value + ' mph'; + } + + dispatch.change(tag); + } + + maxspeed.tags = function(tags) { + var value = tags[field.key]; + + if (value && value.indexOf('mph') >= 0) { + value = parseInt(value, 10); + imperial = true; + } else if (value) { + imperial = false; + } + + setSuggestions(); + + input.value(value || ''); + }; + + maxspeed.focus = function() { + input.node().focus(); + }; + + maxspeed.entity = function(_) { + entity = _; + }; + + return d3.rebind(maxspeed, dispatch, 'on'); +}; +iD.ui.preset.radio = function(field) { + var dispatch = d3.dispatch('change'), + labels, radios, placeholder; + + function radio(selection) { + selection.classed('preset-radio', true); + + var wrap = selection.selectAll('.preset-input-wrap') + .data([0]); + + var buttonWrap = wrap.enter().append('div') + .attr('class', 'preset-input-wrap toggle-list'); + + buttonWrap.append('span') + .attr('class', 'placeholder'); + + placeholder = selection.selectAll('.placeholder'); + + labels = wrap.selectAll('label') + .data(field.options || field.keys); + + var enter = labels.enter().append('label'); + + enter.append('input') + .attr('type', 'radio') + .attr('name', field.id) + .attr('value', function(d) { return field.t('options.' + d, { 'default': d }); }) + .attr('checked', false); + + enter.append('span') + .text(function(d) { return field.t('options.' + d, { 'default': d }); }); + + radios = labels.selectAll('input') + .on('change', change); + } + + function change() { + var t = {}; + if (field.key) t[field.key] = undefined; + radios.each(function(d) { + var active = d3.select(this).property('checked'); + if (field.key) { + if (active) t[field.key] = d; + } else { + t[d] = active ? 'yes' : undefined; + } + }); + dispatch.change(t); + } + + radio.tags = function(tags) { + function checked(d) { + if (field.key) { + return tags[field.key] === d; + } else { + return !!(tags[d] && tags[d] !== 'no'); + } + } + + labels.classed('active', checked); + radios.property('checked', checked); + var selection = radios.filter(function() { return this.checked; }); + if (selection.empty()) { + placeholder.text(t('inspector.none')); + } else { + placeholder.text(selection.attr('value')); + } + }; + + radio.focus = function() { + radios.node().focus(); + }; + + return d3.rebind(radio, dispatch, 'on'); +}; +iD.ui.preset.restrictions = function(field, context) { + var dispatch = d3.dispatch('change'), + hover = iD.behavior.Hover(context), + vertexID, + fromNodeID; + + + function restrictions(selection) { + // if form field is hidden or has detached from dom, clean up. + if (!d3.select('.inspector-wrap.inspector-hidden').empty() || !selection.node().parentNode) { + selection.call(restrictions.off); + return; + } + + var wrap = selection.selectAll('.preset-input-wrap') + .data([0]); + + var enter = wrap.enter() + .append('div') + .attr('class', 'preset-input-wrap'); + + enter + .append('div') + .attr('class', 'restriction-help'); + + + var intersection = iD.geo.Intersection(context.graph(), vertexID), + graph = intersection.graph, + vertex = graph.entity(vertexID), + filter = d3.functor(true), + extent = iD.geo.Extent(), + projection = iD.geo.RawMercator(); + + var d = wrap.dimensions(), + c = [d[0] / 2, d[1] / 2], + z = 24; + + projection + .scale(256 * Math.pow(2, z) / (2 * Math.PI)); + + var s = projection(vertex.loc); + + projection + .translate([c[0] - s[0], c[1] - s[1]]) + .clipExtent([[0, 0], d]); + + var drawLayers = iD.svg.Layers(projection, context).only('osm').dimensions(d), + drawVertices = iD.svg.Vertices(projection, context), + drawLines = iD.svg.Lines(projection, context), + drawTurns = iD.svg.Turns(projection, context); + + enter + .call(drawLayers) + .selectAll('.surface') + .call(hover); + + + var surface = wrap.selectAll('.surface'); + + surface + .dimensions(d) + .call(drawVertices, graph, [vertex], filter, extent, z) + .call(drawLines, graph, intersection.ways, filter) + .call(drawTurns, graph, intersection.turns(fromNodeID)); + + surface + .on('click.restrictions', click) + .on('mouseover.restrictions', mouseover) + .on('mouseout.restrictions', mouseout); + + surface + .selectAll('.selected') + .classed('selected', false); + + if (fromNodeID) { + surface + .selectAll('.' + intersection.highways[fromNodeID].id) + .classed('selected', true); + } + + mouseout(); + + context.history() + .on('change.restrictions', render); + + d3.select(window) + .on('resize.restrictions', function() { + wrap.dimensions(null); + render(); + }); + + function click() { + var datum = d3.event.target.__data__; + if (datum instanceof iD.Entity) { + fromNodeID = intersection.adjacentNodeId(datum.id); + render(); + } else if (datum instanceof iD.geo.Turn) { + if (datum.restriction) { + context.perform( + iD.actions.UnrestrictTurn(datum, projection), + t('operations.restriction.annotation.delete')); + } else { + context.perform( + iD.actions.RestrictTurn(datum, projection), + t('operations.restriction.annotation.create')); } - }, - "video": { - "Blockbuster": { - "count": 190 - }, - "World of Video": { - "count": 65 + } + } + + function mouseover() { + var datum = d3.event.target.__data__; + if (datum instanceof iD.geo.Turn) { + var graph = context.graph(), + presets = context.presets(), + preset; + + if (datum.restriction) { + preset = presets.match(graph.entity(datum.restriction), graph); + } else { + preset = presets.item('type/restriction/' + + iD.geo.inferRestriction( + graph, + datum.from, + datum.via, + datum.to, + projection)); } - }, - "mobile_phone": { - "Билайн": { - "count": 120 - }, - "ソフトバンクショップ (SoftBank shop)": { - "count": 256 - }, - "Vodafone": { - "count": 335 - }, - "O2": { - "count": 190 - }, - "Carphone Warehouse": { - "count": 116 - }, - "Orange": { - "count": 236 - }, - "Verizon Wireless": { - "count": 104 - }, - "Sprint": { - "count": 97 - }, - "T-Mobile": { - "count": 169 - }, - "МТС": { - "count": 334 - }, - "Евросеть": { - "count": 489 - }, - "Bell": { - "count": 188 - }, - "The Phone House": { - "count": 83 - }, - "SFR": { - "count": 69 - }, - "Связной": { - "count": 419 - }, - "Мегафон": { - "count": 238 - }, - "AT&T": { - "count": 111 - }, - "ドコモショップ (docomo shop)": { - "count": 115 - }, - "au": { - "count": 61 - }, - "Movistar": { - "count": 69 - }, - "Bitė": { - "count": 72 + + wrap.selectAll('.restriction-help') + .text(t('operations.restriction.help.' + + (datum.restriction ? 'toggle_off' : 'toggle_on'), + {restriction: preset.name()})); + } + } + + function mouseout() { + wrap.selectAll('.restriction-help') + .text(t('operations.restriction.help.' + + (fromNodeID ? 'toggle' : 'select'))); + } + + function render() { + if (context.hasEntity(vertexID)) { + restrictions(selection); + } + } + } + + restrictions.entity = function(_) { + if (!vertexID || vertexID !== _.id) { + fromNodeID = null; + vertexID = _.id; + } + }; + + restrictions.tags = function() {}; + restrictions.focus = function() {}; + + restrictions.off = function(selection) { + selection.selectAll('.surface') + .call(hover.off) + .on('click.restrictions', null) + .on('mouseover.restrictions', null) + .on('mouseout.restrictions', null); + + context.history() + .on('change.restrictions', null); + + d3.select(window) + .on('resize.restrictions', null); + }; + + return d3.rebind(restrictions, dispatch, 'on'); +}; +iD.ui.preset.textarea = function(field) { + var dispatch = d3.dispatch('change'), + input; + + function i(selection) { + input = selection.selectAll('textarea') + .data([0]); + + input.enter().append('textarea') + .attr('id', 'preset-input-' + field.id) + .attr('placeholder', field.placeholder() || t('inspector.unknown')) + .attr('maxlength', 255); + + input + .on('input', change(true)) + .on('blur', change()) + .on('change', change()); + } + + function change(onInput) { + return function() { + var t = {}; + t[field.key] = input.value() || undefined; + dispatch.change(t, onInput); + }; + } + + i.tags = function(tags) { + input.value(tags[field.key] || ''); + }; + + i.focus = function() { + input.node().focus(); + }; + + return d3.rebind(i, dispatch, 'on'); +}; +iD.ui.preset.wikipedia = function(field, context) { + var dispatch = d3.dispatch('change'), + wikipedia = iD.services.wikipedia(), + link, entity, lang, title; + + function i(selection) { + var langcombo = d3.combobox() + .fetcher(function(value, cb) { + var v = value.toLowerCase(); + + cb(iD.data.wikipedia.filter(function(d) { + return d[0].toLowerCase().indexOf(v) >= 0 || + d[1].toLowerCase().indexOf(v) >= 0 || + d[2].toLowerCase().indexOf(v) >= 0; + }).map(function(d) { + return { value: d[1] }; + })); + }); + + var titlecombo = d3.combobox() + .fetcher(function(value, cb) { + + if (!value) value = context.entity(entity.id).tags.name || ''; + var searchfn = value.length > 7 ? wikipedia.search : wikipedia.suggestions; + + searchfn(language()[2], value, function(query, data) { + cb(data.map(function(d) { + return { value: d }; + })); + }); + }); + + lang = selection.selectAll('input.wiki-lang') + .data([0]); + + lang.enter().append('input') + .attr('type', 'text') + .attr('class', 'wiki-lang') + .value('English'); + + lang + .call(langcombo) + .on('blur', changeLang) + .on('change', changeLang); + + title = selection.selectAll('input.wiki-title') + .data([0]); + + title.enter().append('input') + .attr('type', 'text') + .attr('class', 'wiki-title') + .attr('id', 'preset-input-' + field.id); + + title + .call(titlecombo) + .on('blur', change) + .on('change', change); + + link = selection.selectAll('a.wiki-link') + .data([0]); + + link.enter().append('a') + .attr('class', 'wiki-link button-input-action minor') + .attr('target', '_blank') + .call(iD.svg.Icon('#icon-out-link', 'inline')); + } + + function language() { + var value = lang.value().toLowerCase(); + var locale = iD.detect().locale.toLowerCase(); + var localeLanguage; + return _.find(iD.data.wikipedia, function(d) { + if (d[2] === locale) localeLanguage = d; + return d[0].toLowerCase() === value || + d[1].toLowerCase() === value || + d[2] === value; + }) || localeLanguage || ['English', 'English', 'en']; + } + + function changeLang() { + lang.value(language()[1]); + change(); + } + + function change() { + var value = title.value(), + m = value.match(/https?:\/\/([-a-z]+)\.wikipedia\.org\/(?:wiki|\1-[-a-z]+)\/([^#]+)(?:#(.+))?/), + l = m && _.find(iD.data.wikipedia, function(d) { return m[1] === d[2]; }), + anchor; + + if (l) { + // Normalize title http://www.mediawiki.org/wiki/API:Query#Title_normalization + value = decodeURIComponent(m[2]).replace(/_/g, ' '); + if (m[3]) { + try { + // Best-effort `anchordecode:` implementation + anchor = decodeURIComponent(m[3].replace(/\.([0-9A-F]{2})/g, '%$1')); + } catch (e) { + anchor = decodeURIComponent(m[3]); } - }, - "hifi": {}, - "computer": { - "PC World": { - "count": 55 - }, - "DNS": { - "count": 124 + value += '#' + anchor.replace(/_/g, ' '); + } + value = value.slice(0, 1).toUpperCase() + value.slice(1); + lang.value(l[1]); + title.value(value); + } + + var t = {}; + t[field.key] = value ? language()[2] + ':' + value : undefined; + dispatch.change(t); + } + + i.tags = function(tags) { + var value = tags[field.key] || '', + m = value.match(/([^:]+):([^#]+)(?:#(.+))?/), + l = m && _.find(iD.data.wikipedia, function(d) { return m[1] === d[2]; }), + anchor = m && m[3]; + + // value in correct format + if (l) { + lang.value(l[1]); + title.value(m[2] + (anchor ? ('#' + anchor) : '')); + if (anchor) { + try { + // Best-effort `anchorencode:` implementation + anchor = encodeURIComponent(anchor.replace(/ /g, '_')).replace(/%/g, '.'); + } catch (e) { + anchor = anchor.replace(/ /g, '_'); + } + } + link.attr('href', 'https://' + m[1] + '.wikipedia.org/wiki/' + + m[2].replace(/ /g, '_') + (anchor ? ('#' + anchor) : '')); + + // unrecognized value format + } else { + title.value(value); + link.attr('href', 'https://en.wikipedia.org/wiki/Special:Search?search=' + value); + } + }; + + i.entity = function(_) { + entity = _; + }; + + i.focus = function() { + title.node().focus(); + }; + + return d3.rebind(i, dispatch, 'on'); +}; +iD.ui.intro.area = function(context, reveal) { + var event = d3.dispatch('done'), + timeout; + + var step = { + title: 'intro.areas.title' + }; + + step.enter = function() { + var playground = [-85.63552, 41.94159], + corner = [-85.63565411045074, 41.9417715536927]; + context.map().centerZoom(playground, 19); + reveal('button.add-area', + t('intro.areas.add', { button: iD.ui.intro.icon('#icon-area', 'pre-text') }), + { tooltipClass: 'intro-areas-add' }); + + context.on('enter.intro', addArea); + + function addArea(mode) { + if (mode.id !== 'add-area') return; + context.on('enter.intro', drawArea); + + var padding = 120 * Math.pow(2, context.map().zoom() - 19); + var pointBox = iD.ui.intro.pad(corner, padding, context); + reveal(pointBox, t('intro.areas.corner')); + + context.map().on('move.intro', function() { + padding = 120 * Math.pow(2, context.map().zoom() - 19); + pointBox = iD.ui.intro.pad(corner, padding, context); + reveal(pointBox, t('intro.areas.corner'), {duration: 0}); + }); + } + + function drawArea(mode) { + if (mode.id !== 'draw-area') return; + context.on('enter.intro', enterSelect); + + var padding = 150 * Math.pow(2, context.map().zoom() - 19); + var pointBox = iD.ui.intro.pad(playground, padding, context); + reveal(pointBox, t('intro.areas.place')); + + context.map().on('move.intro', function() { + padding = 150 * Math.pow(2, context.map().zoom() - 19); + pointBox = iD.ui.intro.pad(playground, padding, context); + reveal(pointBox, t('intro.areas.place'), {duration: 0}); + }); + } + + function enterSelect(mode) { + if (mode.id !== 'select') return; + context.map().on('move.intro', null); + context.on('enter.intro', null); + + timeout = setTimeout(function() { + reveal('.preset-search-input', + t('intro.areas.search', + { name: context.presets().item('leisure/playground').name() })); + d3.select('.preset-search-input').on('keyup.intro', keySearch); + }, 500); + } + + function keySearch() { + var first = d3.select('.preset-list-item:first-child'); + if (first.classed('preset-leisure-playground')) { + reveal(first.select('.preset-list-button').node(), t('intro.areas.choose')); + d3.selection.prototype.one.call(context.history(), 'change.intro', selectedPreset); + d3.select('.preset-search-input').on('keyup.intro', null); + } + } + + function selectedPreset() { + reveal('.pane', + t('intro.areas.describe', { button: iD.ui.intro.icon('#icon-apply', 'pre-text') })); + context.on('exit.intro', event.done); + } + }; + + step.exit = function() { + window.clearTimeout(timeout); + context.on('enter.intro', null); + context.on('exit.intro', null); + context.history().on('change.intro', null); + context.map().on('move.intro', null); + d3.select('.preset-search-input').on('keyup.intro', null); + }; + + return d3.rebind(step, event, 'on'); +}; +iD.ui.intro.line = function(context, reveal) { + var event = d3.dispatch('done'), + timeouts = []; + + var step = { + title: 'intro.lines.title' + }; + + function timeout(f, t) { + timeouts.push(window.setTimeout(f, t)); + } + + function eventCancel() { + d3.event.stopPropagation(); + d3.event.preventDefault(); + } + + step.enter = function() { + var centroid = [-85.62830, 41.95699]; + var midpoint = [-85.62975395449628, 41.95787501510204]; + var start = [-85.6297754121684, 41.95805253325314]; + var intersection = [-85.62974496187628, 41.95742515554585]; + + context.map().centerZoom(start, 18); + reveal('button.add-line', + t('intro.lines.add', { button: iD.ui.intro.icon('#icon-line', 'pre-text') }), + { tooltipClass: 'intro-lines-add' }); + + context.on('enter.intro', addLine); + + function addLine(mode) { + if (mode.id !== 'add-line') return; + context.on('enter.intro', drawLine); + + var padding = 150 * Math.pow(2, context.map().zoom() - 18); + var pointBox = iD.ui.intro.pad(start, padding, context); + reveal(pointBox, t('intro.lines.start')); + + context.map().on('move.intro', function() { + padding = 150 * Math.pow(2, context.map().zoom() - 18); + pointBox = iD.ui.intro.pad(start, padding, context); + reveal(pointBox, t('intro.lines.start'), {duration: 0}); + }); + } + + function drawLine(mode) { + if (mode.id !== 'draw-line') return; + context.history().on('change.intro', addIntersection); + context.on('enter.intro', retry); + + var padding = 300 * Math.pow(2, context.map().zoom() - 19); + var pointBox = iD.ui.intro.pad(midpoint, padding, context); + reveal(pointBox, t('intro.lines.intersect', {name: t('intro.graph.flower_st')})); + + context.map().on('move.intro', function() { + padding = 300 * Math.pow(2, context.map().zoom() - 19); + pointBox = iD.ui.intro.pad(midpoint, padding, context); + reveal(pointBox, t('intro.lines.intersect', {name: t('intro.graph.flower_st')}), {duration: 0}); + }); + } + + // ended line before creating intersection + function retry(mode) { + if (mode.id !== 'select') return; + var pointBox = iD.ui.intro.pad(intersection, 30, context), + ids = mode.selectedIDs(); + reveal(pointBox, t('intro.lines.restart', {name: t('intro.graph.flower_st')})); + d3.select(window).on('mousedown.intro', eventCancel, true); + + timeout(function() { + context.replace(iD.actions.DeleteMultiple(ids)); + step.exit(); + step.enter(); + }, 3000); + } + + function addIntersection(changes) { + if ( _.any(changes.created(), function(d) { + return d.type === 'node' && context.graph().parentWays(d).length > 1; + })) { + context.history().on('change.intro', null); + context.on('enter.intro', enterSelect); + + var padding = 900 * Math.pow(2, context.map().zoom() - 19); + var pointBox = iD.ui.intro.pad(centroid, padding, context); + reveal(pointBox, t('intro.lines.finish')); + + context.map().on('move.intro', function() { + padding = 900 * Math.pow(2, context.map().zoom() - 19); + pointBox = iD.ui.intro.pad(centroid, padding, context); + reveal(pointBox, t('intro.lines.finish'), {duration: 0}); + }); + } + } + + function enterSelect(mode) { + if (mode.id !== 'select') return; + context.map().on('move.intro', null); + context.on('enter.intro', null); + d3.select('#curtain').style('pointer-events', 'all'); + + presetCategory(); + } + + function presetCategory() { + timeout(function() { + d3.select('#curtain').style('pointer-events', 'none'); + var road = d3.select('.preset-category-road .preset-list-button'); + reveal(road.node(), t('intro.lines.road')); + road.one('click.intro', roadCategory); + }, 500); + } + + function roadCategory() { + timeout(function() { + var grid = d3.select('.subgrid'); + reveal(grid.node(), t('intro.lines.residential')); + grid.selectAll(':not(.preset-highway-residential) .preset-list-button') + .one('click.intro', retryPreset); + grid.selectAll('.preset-highway-residential .preset-list-button') + .one('click.intro', roadDetails); + }, 500); + } + + // selected wrong road type + function retryPreset() { + timeout(function() { + var preset = d3.select('.entity-editor-pane .preset-list-button'); + reveal(preset.node(), t('intro.lines.wrong_preset')); + preset.one('click.intro', presetCategory); + }, 500); + } + + function roadDetails() { + reveal('.pane', + t('intro.lines.describe', { button: iD.ui.intro.icon('#icon-apply', 'pre-text') })); + context.on('exit.intro', event.done); + } + + }; + + step.exit = function() { + d3.select(window).on('mousedown.intro', null, true); + d3.select('#curtain').style('pointer-events', 'none'); + timeouts.forEach(window.clearTimeout); + context.on('enter.intro', null); + context.on('exit.intro', null); + context.map().on('move.intro', null); + context.history().on('change.intro', null); + }; + + return d3.rebind(step, event, 'on'); +}; +iD.ui.intro.navigation = function(context, reveal) { + var event = d3.dispatch('done'), + timeouts = []; + + var step = { + title: 'intro.navigation.title' + }; + + function set(f, t) { + timeouts.push(window.setTimeout(f, t)); + } + + function eventCancel() { + d3.event.stopPropagation(); + d3.event.preventDefault(); + } + + step.enter = function() { + var rect = context.surfaceRect(), + map = { + left: rect.left + 10, + top: rect.top + 70, + width: rect.width - 70, + height: rect.height - 170 + }; + + context.map().centerZoom([-85.63591, 41.94285], 19); + + reveal(map, t('intro.navigation.drag')); + + context.map().on('move.intro', _.debounce(function() { + context.map().on('move.intro', null); + townhall(); + context.on('enter.intro', inspectTownHall); + }, 400)); + + function townhall() { + var hall = [-85.63645945147184, 41.942986488012565]; + + var point = context.projection(hall); + if (point[0] < 0 || point[0] > rect.width || + point[1] < 0 || point[1] > rect.height) { + context.map().center(hall); + } + + var box = iD.ui.intro.pointBox(hall, context); + reveal(box, t('intro.navigation.select')); + + context.map().on('move.intro', function() { + var box = iD.ui.intro.pointBox(hall, context); + reveal(box, t('intro.navigation.select'), {duration: 0}); + }); + } + + function inspectTownHall(mode) { + if (mode.id !== 'select') return; + context.on('enter.intro', null); + context.map().on('move.intro', null); + set(function() { + reveal('.entity-editor-pane', + t('intro.navigation.pane', { button: iD.ui.intro.icon('#icon-close', 'pre-text') })); + context.on('exit.intro', streetSearch); + }, 700); + } + + function streetSearch() { + context.on('exit.intro', null); + reveal('.search-header input', + t('intro.navigation.search', { name: t('intro.graph.spring_st') })); + d3.select('.search-header input').on('keyup.intro', searchResult); + } + + function searchResult() { + var first = d3.select('.feature-list-item:nth-child(0n+2)'), // skip No Results item + firstName = first.select('.entity-name'), + name = t('intro.graph.spring_st'); + + if (!firstName.empty() && firstName.text() === name) { + reveal(first.node(), t('intro.navigation.choose', { name: name })); + context.on('exit.intro', selectedStreet); + d3.select('.search-header input') + .on('keydown.intro', eventCancel, true) + .on('keyup.intro', null); + } + } + + function selectedStreet() { + var springSt = [-85.63585099140167, 41.942506848938926]; + context.map().center(springSt); + context.on('exit.intro', event.done); + set(function() { + reveal('.entity-editor-pane', + t('intro.navigation.chosen', { + name: t('intro.graph.spring_st'), + button: iD.ui.intro.icon('#icon-close', 'pre-text') + })); + }, 400); + } + }; + + step.exit = function() { + timeouts.forEach(window.clearTimeout); + context.map().on('move.intro', null); + context.on('enter.intro', null); + context.on('exit.intro', null); + d3.select('.search-header input') + .on('keydown.intro', null) + .on('keyup.intro', null); + }; + + return d3.rebind(step, event, 'on'); +}; +iD.ui.intro.point = function(context, reveal) { + var event = d3.dispatch('done'), + timeouts = []; + + var step = { + title: 'intro.points.title' + }; + + function setTimeout(f, t) { + timeouts.push(window.setTimeout(f, t)); + } + + function eventCancel() { + d3.event.stopPropagation(); + d3.event.preventDefault(); + } + + step.enter = function() { + context.map().centerZoom([-85.63279, 41.94394], 19); + reveal('button.add-point', + t('intro.points.add', { button: iD.ui.intro.icon('#icon-point', 'pre-text') }), + { tooltipClass: 'intro-points-add' }); + + var corner = [-85.632481,41.944094]; + + context.on('enter.intro', addPoint); + + function addPoint(mode) { + if (mode.id !== 'add-point') return; + context.on('enter.intro', enterSelect); + + var pointBox = iD.ui.intro.pad(corner, 150, context); + reveal(pointBox, t('intro.points.place')); + + context.map().on('move.intro', function() { + pointBox = iD.ui.intro.pad(corner, 150, context); + reveal(pointBox, t('intro.points.place'), {duration: 0}); + }); + } + + function enterSelect(mode) { + if (mode.id !== 'select') return; + context.map().on('move.intro', null); + context.on('enter.intro', null); + + setTimeout(function() { + reveal('.preset-search-input', + t('intro.points.search', {name: context.presets().item('amenity/cafe').name()})); + d3.select('.preset-search-input').on('keyup.intro', keySearch); + }, 500); + } + + function keySearch() { + var first = d3.select('.preset-list-item:first-child'); + if (first.classed('preset-amenity-cafe')) { + reveal(first.select('.preset-list-button').node(), t('intro.points.choose')); + d3.selection.prototype.one.call(context.history(), 'change.intro', selectedPreset); + d3.select('.preset-search-input') + .on('keydown.intro', eventCancel, true) + .on('keyup.intro', null); + } + } + + function selectedPreset() { + setTimeout(function() { + reveal('.entity-editor-pane', t('intro.points.describe'), {tooltipClass: 'intro-points-describe'}); + context.history().on('change.intro', closeEditor); + context.on('exit.intro', selectPoint); + }, 400); + } + + function closeEditor() { + d3.select('.preset-search-input').on('keydown.intro', null); + context.history().on('change.intro', null); + reveal('.entity-editor-pane', + t('intro.points.close', { button: iD.ui.intro.icon('#icon-apply', 'pre-text') })); + } + + function selectPoint() { + context.on('exit.intro', null); + context.history().on('change.intro', null); + context.on('enter.intro', enterReselect); + + var pointBox = iD.ui.intro.pad(corner, 150, context); + reveal(pointBox, t('intro.points.reselect')); + + context.map().on('move.intro', function() { + pointBox = iD.ui.intro.pad(corner, 150, context); + reveal(pointBox, t('intro.points.reselect'), {duration: 0}); + }); + } + + function enterReselect(mode) { + if (mode.id !== 'select') return; + context.map().on('move.intro', null); + context.on('enter.intro', null); + + setTimeout(function() { + reveal('.entity-editor-pane', + t('intro.points.fixname', { button: iD.ui.intro.icon('#icon-apply', 'pre-text') })); + context.on('exit.intro', deletePoint); + }, 500); + } + + function deletePoint() { + context.on('exit.intro', null); + context.on('enter.intro', enterDelete); + + var pointBox = iD.ui.intro.pad(corner, 150, context); + reveal(pointBox, t('intro.points.reselect_delete')); + + context.map().on('move.intro', function() { + pointBox = iD.ui.intro.pad(corner, 150, context); + reveal(pointBox, t('intro.points.reselect_delete'), {duration: 0}); + }); + } + + function enterDelete(mode) { + if (mode.id !== 'select') return; + context.map().on('move.intro', null); + context.on('enter.intro', null); + context.on('exit.intro', deletePoint); + context.map().on('move.intro', deletePoint); + context.history().on('change.intro', deleted); + + setTimeout(function() { + var node = d3.select('.radial-menu-item-delete').node(); + var pointBox = iD.ui.intro.pad(node.getBoundingClientRect(), 50, context); + reveal(pointBox, + t('intro.points.delete', { button: iD.ui.intro.icon('#operation-delete', 'pre-text') })); + }, 300); + } + + function deleted(changed) { + if (changed.deleted().length) event.done(); + } + + }; + + step.exit = function() { + timeouts.forEach(window.clearTimeout); + context.on('exit.intro', null); + context.on('enter.intro', null); + context.map().on('move.intro', null); + context.history().on('change.intro', null); + d3.select('.preset-search-input') + .on('keyup.intro', null) + .on('keydown.intro', null); + }; + + return d3.rebind(step, event, 'on'); +}; +iD.ui.intro.startEditing = function(context, reveal) { + var event = d3.dispatch('done', 'startEditing'), + modal, + timeouts = []; + + var step = { + title: 'intro.startediting.title' + }; + + function timeout(f, t) { + timeouts.push(window.setTimeout(f, t)); + } + + step.enter = function() { + reveal('.map-control.help-control', + t('intro.startediting.help', { button: iD.ui.intro.icon('#icon-help', 'pre-text') })); + + timeout(function() { + reveal('#bar button.save', t('intro.startediting.save')); + }, 5000); + + timeout(function() { + reveal('#surface'); + }, 10000); + + timeout(function() { + modal = iD.ui.modal(context.container()); + + modal.select('.modal') + .attr('class', 'modal-splash modal col6'); + + modal.selectAll('.close').remove(); + + var startbutton = modal.select('.content') + .attr('class', 'fillL') + .append('button') + .attr('class', 'modal-section huge-modal-button') + .on('click', function() { + modal.remove(); + }); + + startbutton.append('div') + .attr('class','illustration'); + startbutton.append('h2') + .text(t('intro.startediting.start')); + + event.startEditing(); + }, 10500); + }; + + step.exit = function() { + if (modal) modal.remove(); + timeouts.forEach(window.clearTimeout); + }; + + return d3.rebind(step, event, 'on'); +}; +iD.presets = function() { + + // an iD.presets.Collection with methods for + // loading new data and returning defaults + + var all = iD.presets.Collection([]), + defaults = { area: all, line: all, point: all, vertex: all, relation: all }, + fields = {}, + universal = [], + recent = iD.presets.Collection([]); + + // Index of presets by (geometry, tag key). + var index = { + point: {}, + vertex: {}, + line: {}, + area: {}, + relation: {} + }; + + all.match = function(entity, resolver) { + var geometry = entity.geometry(resolver), + geometryMatches = index[geometry], + best = -1, + match; + + for (var k in entity.tags) { + var keyMatches = geometryMatches[k]; + if (!keyMatches) continue; + + for (var i = 0; i < keyMatches.length; i++) { + var score = keyMatches[i].matchScore(entity); + if (score > best) { + best = score; + match = keyMatches[i]; } - }, - "hairdresser": { - "Klier": { - "count": 112 - }, - "Supercuts": { - "count": 96 - }, - "Hairkiller": { - "count": 52 - }, - "Great Clips": { - "count": 169 - }, - "Парикмахерская": { - "count": 502 - }, - "Fryzjer": { - "count": 53 - }, - "Franck Provost": { - "count": 67 - }, - "Салон красоты": { - "count": 67 + } + } + + return match || all.item(geometry); + }; + + // Because of the open nature of tagging, iD will never have a complete + // list of tags used in OSM, so we want it to have logic like "assume + // that a closed way with an amenity tag is an area, unless the amenity + // is one of these specific types". This function computes a structure + // that allows testing of such conditions, based on the presets designated + // as as supporting (or not supporting) the area geometry. + // + // The returned object L is a whitelist/blacklist of tags. A closed way + // with a tag (k, v) is considered to be an area if `k in L && !(v in L[k])` + // (see `iD.Way#isArea()`). In other words, the keys of L form the whitelist, + // and the subkeys form the blacklist. + all.areaKeys = function() { + var areaKeys = {}, + ignore = ['barrier', 'highway', 'footway', 'railway', 'type'], + presets = _.reject(all.collection, 'suggestion'); + + // whitelist + presets.forEach(function(d) { + for (var key in d.tags) break; + if (!key) return; + if (ignore.indexOf(key) !== -1) return; + + if (d.geometry.indexOf('area') !== -1) { + areaKeys[key] = areaKeys[key] || {}; + } + }); + + // blacklist + presets.forEach(function(d) { + for (var key in d.tags) break; + if (!key) return; + if (ignore.indexOf(key) !== -1) return; + + var value = d.tags[key]; + if (d.geometry.indexOf('area') === -1 && key in areaKeys && value !== '*') { + areaKeys[key][value] = true; + } + }); + + return areaKeys; + }; + + all.load = function(d) { + + if (d.fields) { + _.forEach(d.fields, function(d, id) { + fields[id] = iD.presets.Field(id, d); + if (d.universal) universal.push(fields[id]); + }); + } + + if (d.presets) { + _.forEach(d.presets, function(d, id) { + all.collection.push(iD.presets.Preset(id, d, fields)); + }); + } + + if (d.categories) { + _.forEach(d.categories, function(d, id) { + all.collection.push(iD.presets.Category(id, d, all)); + }); + } + + if (d.defaults) { + var getItem = _.bind(all.item, all); + defaults = { + area: iD.presets.Collection(d.defaults.area.map(getItem)), + line: iD.presets.Collection(d.defaults.line.map(getItem)), + point: iD.presets.Collection(d.defaults.point.map(getItem)), + vertex: iD.presets.Collection(d.defaults.vertex.map(getItem)), + relation: iD.presets.Collection(d.defaults.relation.map(getItem)) + }; + } + + for (var i = 0; i < all.collection.length; i++) { + var preset = all.collection[i], + geometry = preset.geometry; + + for (var j = 0; j < geometry.length; j++) { + var g = index[geometry[j]]; + for (var k in preset.tags) { + (g[k] = g[k] || []).push(preset); } - }, - "hardware": { - "1000 мелочей": { - "count": 57 - }, - "Хозтовары": { - "count": 149 - }, - "Стройматериалы": { - "count": 52 + } + } + + return all; + }; + + all.field = function(id) { + return fields[id]; + }; + + all.universal = function() { + return universal; + }; + + all.defaults = function(geometry, n) { + var rec = recent.matchGeometry(geometry).collection.slice(0, 4), + def = _.uniq(rec.concat(defaults[geometry].collection)).slice(0, n - 1); + return iD.presets.Collection(_.unique(rec.concat(def).concat(all.item(geometry)))); + }; + + all.choose = function(preset) { + if (!preset.isFallback()) { + recent = iD.presets.Collection(_.unique([preset].concat(recent.collection))); + } + return all; + }; + + return all; +}; +iD.presets.Category = function(id, category, all) { + category = _.clone(category); + + category.id = id; + + category.members = iD.presets.Collection(category.members.map(function(id) { + return all.item(id); + })); + + category.matchGeometry = function(geometry) { + return category.geometry.indexOf(geometry) >= 0; + }; + + category.matchScore = function() { return -1; }; + + category.name = function() { + return t('presets.categories.' + id + '.name', {'default': id}); + }; + + category.terms = function() { + return []; + }; + + return category; +}; +iD.presets.Collection = function(collection) { + + var maxSearchResults = 50, + maxSuggestionResults = 10; + + var presets = { + + collection: collection, + + item: function(id) { + return _.find(collection, function(d) { + return d.id === id; + }); + }, + + matchGeometry: function(geometry) { + return iD.presets.Collection(collection.filter(function(d) { + return d.matchGeometry(geometry); + })); + }, + + search: function(value, geometry) { + if (!value) return this; + + value = value.toLowerCase(); + + var searchable = _.filter(collection, function(a) { + return a.searchable !== false && a.suggestion !== true; + }), + suggestions = _.filter(collection, function(a) { + return a.suggestion === true; + }); + + function leading(a) { + var index = a.indexOf(value); + return index === 0 || a[index - 1] === ' '; + } + + // matches value to preset.name + var leading_name = _.filter(searchable, function(a) { + return leading(a.name().toLowerCase()); + }).sort(function(a, b) { + var i = a.name().toLowerCase().indexOf(value) - b.name().toLowerCase().indexOf(value); + if (i === 0) return a.name().length - b.name().length; + else return i; + }); + + // matches value to preset.terms values + var leading_terms = _.filter(searchable, function(a) { + return _.any(a.terms() || [], leading); + }); + + // matches value to preset.tags values + var leading_tag_values = _.filter(searchable, function(a) { + return _.any(_.without(_.values(a.tags || {}), '*'), leading); + }); + + + // finds close matches to value in preset.name + var levenstein_name = searchable.map(function(a) { + return { + preset: a, + dist: iD.util.editDistance(value, a.name().toLowerCase()) + }; + }).filter(function(a) { + return a.dist + Math.min(value.length - a.preset.name().length, 0) < 3; + }).sort(function(a, b) { + return a.dist - b.dist; + }).map(function(a) { + return a.preset; + }); + + // finds close matches to value in preset.terms + var leventstein_terms = _.filter(searchable, function(a) { + return _.any(a.terms() || [], function(b) { + return iD.util.editDistance(value, b) + Math.min(value.length - b.length, 0) < 3; + }); + }); + + function suggestionName(name) { + var nameArray = name.split(' - '); + if (nameArray.length > 1) { + name = nameArray.slice(0, nameArray.length-1).join(' - '); } - }, - "motorcycle": { - "Yamaha": { - "count": 63 - }, - "Honda": { - "count": 57 + return name.toLowerCase(); + } + + var leading_suggestions = _.filter(suggestions, function(a) { + return leading(suggestionName(a.name())); + }).sort(function(a, b) { + a = suggestionName(a.name()); + b = suggestionName(b.name()); + var i = a.indexOf(value) - b.indexOf(value); + if (i === 0) return a.length - b.length; + else return i; + }); + + var leven_suggestions = suggestions.map(function(a) { + return { + preset: a, + dist: iD.util.editDistance(value, suggestionName(a.name())) + }; + }).filter(function(a) { + return a.dist + Math.min(value.length - suggestionName(a.preset.name()).length, 0) < 1; + }).sort(function(a, b) { + return a.dist - b.dist; + }).map(function(a) { + return a.preset; + }); + + var other = presets.item(geometry); + + var results = leading_name.concat( + leading_terms, + leading_tag_values, + leading_suggestions.slice(0, maxSuggestionResults+5), + levenstein_name, + leventstein_terms, + leven_suggestions.slice(0, maxSuggestionResults) + ).slice(0, maxSearchResults-1); + + return iD.presets.Collection(_.unique( + results.concat(other) + )); + } + }; + + return presets; +}; +iD.presets.Field = function(id, field) { + field = _.clone(field); + + field.id = id; + + field.matchGeometry = function(geometry) { + return !field.geometry || field.geometry === geometry; + }; + + field.t = function(scope, options) { + return t('presets.fields.' + id + '.' + scope, options); + }; + + field.label = function() { + return field.t('label', {'default': id}); + }; + + var placeholder = field.placeholder; + field.placeholder = function() { + return field.t('placeholder', {'default': placeholder}); + }; + + return field; +}; +iD.presets.Preset = function(id, preset, fields) { + preset = _.clone(preset); + + preset.id = id; + preset.fields = (preset.fields || []).map(getFields); + preset.geometry = (preset.geometry || []); + + function getFields(f) { + return fields[f]; + } + + preset.matchGeometry = function(geometry) { + return preset.geometry.indexOf(geometry) >= 0; + }; + + var matchScore = preset.matchScore || 1; + preset.matchScore = function(entity) { + var tags = preset.tags, + score = 0; + + for (var t in tags) { + if (entity.tags[t] === tags[t]) { + score += matchScore; + } else if (tags[t] === '*' && t in entity.tags) { + score += matchScore / 2; + } else { + return -1; + } + } + + return score; + }; + + preset.t = function(scope, options) { + return t('presets.presets.' + id + '.' + scope, options); + }; + + var name = preset.name; + preset.name = function() { + if (preset.suggestion) { + id = id.split('/'); + id = id[0] + '/' + id[1]; + return name + ' - ' + t('presets.presets.' + id + '.name'); + } + return preset.t('name', {'default': name}); + }; + + preset.terms = function() { + return preset.t('terms', {'default': ''}).toLowerCase().trim().split(/\s*,+\s*/); + }; + + preset.isFallback = function() { + var tagCount = Object.keys(preset.tags).length; + return tagCount === 0 || (tagCount === 1 && preset.tags.hasOwnProperty('area')); + }; + + preset.reference = function(geometry) { + var key = Object.keys(preset.tags)[0], + value = preset.tags[key]; + + if (geometry === 'relation' && key === 'type') { + return { rtype: value }; + } else if (value === '*') { + return { key: key }; + } else { + return { key: key, value: value }; + } + }; + + var removeTags = preset.removeTags || preset.tags; + preset.removeTags = function(tags, geometry) { + tags = _.omit(tags, _.keys(removeTags)); + + for (var f in preset.fields) { + var field = preset.fields[f]; + if (field.matchGeometry(geometry) && field.default === tags[field.key]) { + delete tags[field.key]; + } + } + + delete tags.area; + return tags; + }; + + var applyTags = preset.addTags || preset.tags; + preset.applyTags = function(tags, geometry) { + var k; + + tags = _.clone(tags); + + for (k in applyTags) { + if (applyTags[k] === '*') { + tags[k] = 'yes'; + } else { + tags[k] = applyTags[k]; + } + } + + // Add area=yes if necessary. + // This is necessary if the geometry is already an area (e.g. user drew an area) AND any of: + // 1. chosen preset could be either an area or a line (`barrier=city_wall`) + // 2. chosen preset doesn't have a key in areaKeys (`railway=station`) + if (geometry === 'area') { + var needsAreaTag = true; + if (preset.geometry.indexOf('line') === -1) { + for (k in applyTags) { + if (k in iD.areaKeys) { + needsAreaTag = false; + break; + } } } + if (needsAreaTag) { + tags.area = 'yes'; + } + } + + for (var f in preset.fields) { + var field = preset.fields[f]; + if (field.matchGeometry(geometry) && field.key && !tags[field.key] && field.default) { + tags[field.key] = field.default; + } + } + + return tags; + }; + + return preset; +}; +iD.validations = {}; +iD.validations.DeprecatedTag = function() { + + var validation = function(changes) { + var warnings = []; + for (var i = 0; i < changes.created.length; i++) { + var change = changes.created[i], + deprecatedTags = change.deprecatedTags(); + + if (!_.isEmpty(deprecatedTags)) { + var tags = iD.util.tagText({ tags: deprecatedTags }); + warnings.push({ + id: 'deprecated_tags', + message: t('validations.deprecated_tags', { tags: tags }), + entity: change + }); + } + } + return warnings; + }; + + return validation; +}; +iD.validations.ManyDeletions = function() { + var threshold = 100; + + var validation = function(changes) { + var warnings = []; + if (changes.deleted.length > threshold) { + warnings.push({ + id: 'many_deletions', + message: t('validations.many_deletions', { n: changes.deleted.length }) + }); + } + return warnings; + }; + + return validation; +}; +iD.validations.MissingTag = function() { + + var validation = function(changes, graph) { + var warnings = []; + for (var i = 0; i < changes.created.length; i++) { + var change = changes.created[i], + geometry = change.geometry(graph); + + if ((geometry === 'point' || geometry === 'line' || geometry === 'area') && !change.isUsed(graph)) { + warnings.push({ + id: 'missing_tag', + message: t('validations.untagged_' + geometry), + tooltip: t('validations.untagged_' + geometry + '_tooltip'), + entity: change + }); + } + } + return warnings; + }; + + return validation; +}; +iD.validations.TagSuggestsArea = function() { + + // https://github.com/openstreetmap/josm/blob/mirror/src/org/ + // openstreetmap/josm/data/validation/tests/UnclosedWays.java#L80 + function tagSuggestsArea(tags) { + if (_.isEmpty(tags)) return false; + + var presence = ['landuse', 'amenities', 'tourism', 'shop']; + for (var i = 0; i < presence.length; i++) { + if (tags[presence[i]] !== undefined) { + return presence[i] + '=' + tags[presence[i]]; + } + } + + if (tags.building && tags.building === 'yes') return 'building=yes'; + } + + var validation = function(changes, graph) { + var warnings = []; + for (var i = 0; i < changes.created.length; i++) { + var change = changes.created[i], + geometry = change.geometry(graph), + suggestion = (geometry === 'line' ? tagSuggestsArea(change.tags) : undefined); + + if (suggestion) { + warnings.push({ + id: 'tag_suggests_area', + message: t('validations.tag_suggests_area', { tag: suggestion }), + entity: change + }); + } } + return warnings; + }; + + return validation; +}; +})(); +window.locale = { _current: 'en' }; + +locale.current = function(_) { + if (!arguments.length) return locale._current; + if (locale[_] !== undefined) locale._current = _; + else if (locale[_.split('-')[0]]) locale._current = _.split('-')[0]; + return locale; +}; + +function t(s, o, loc) { + loc = loc || locale._current; + + var path = s.split(".").reverse(), + rep = locale[loc]; + + while (rep !== undefined && path.length) rep = rep[path.pop()]; + + if (rep !== undefined) { + if (o) for (var k in o) rep = rep.replace('{' + k + '}', o[k]); + return rep; + } + + if (loc !== 'en') { + return t(s, o, 'en'); + } + + if (o && 'default' in o) { + return o['default']; } -}; \ No newline at end of file + + var missing = 'Missing ' + loc + ' translation: ' + s; + if (typeof console !== "undefined") console.error(missing); + + return missing; +} +iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081]},"n185964961":{"id":"n185964961","loc":[-85.6406588,41.942601]},"n185964962":{"id":"n185964962","loc":[-85.6394548,41.94261]},"n185970607":{"id":"n185970607","loc":[-85.641094,41.94006]},"n185970614":{"id":"n185970614","loc":[-85.641825,41.941316]},"n185970616":{"id":"n185970616","loc":[-85.641838,41.941556]},"n185973650":{"id":"n185973650","loc":[-85.639918,41.940064]},"n185973660":{"id":"n185973660","loc":[-85.640645,41.941339]},"n185973659":{"id":"n185973659","loc":[-85.6406115,41.9400658]},"n185974479":{"id":"n185974479","loc":[-85.639402,41.941344]},"n185974481":{"id":"n185974481","loc":[-85.643071,41.941288]},"n185976259":{"id":"n185976259","loc":[-85.642213,41.940043]},"n185976261":{"id":"n185976261","loc":[-85.643056,41.94001]},"n185964959":{"id":"n185964959","loc":[-85.6431031,41.9425754]},"n185964960":{"id":"n185964960","loc":[-85.6418749,41.9425864]},"n185981481":{"id":"n185981481","loc":[-85.6386827,41.9400828]},"n185981482":{"id":"n185981482","loc":[-85.6393664,41.9400854]},"n2138493844":{"id":"n2138493844","loc":[-85.6427969,41.940522]},"n2138493845":{"id":"n2138493845","loc":[-85.6425891,41.9405228]},"n2138493846":{"id":"n2138493846","loc":[-85.6425868,41.9402875]},"n2138493847":{"id":"n2138493847","loc":[-85.6427969,41.9402858]},"n2138493848":{"id":"n2138493848","loc":[-85.6425708,41.9405234]},"n2138493849":{"id":"n2138493849","loc":[-85.642568,41.9402855]},"n2138493850":{"id":"n2138493850","loc":[-85.6423157,41.9402886]},"n2138493851":{"id":"n2138493851","loc":[-85.6423212,41.9404362]},"n2138493852":{"id":"n2138493852","loc":[-85.6422923,41.9404578]},"n2138493853":{"id":"n2138493853","loc":[-85.6422868,41.9404834]},"n2138493854":{"id":"n2138493854","loc":[-85.6423226,41.9405091]},"n2138493855":{"id":"n2138493855","loc":[-85.6423847,41.9405111]},"n2138493856":{"id":"n2138493856","loc":[-85.6424081,41.9405265]},"n2140155811":{"id":"n2140155811","loc":[-85.6419547,41.9410956]},"n2140155814":{"id":"n2140155814","loc":[-85.6427577,41.9410884]},"n2140155816":{"id":"n2140155816","loc":[-85.6427545,41.9410052]},"n2140155818":{"id":"n2140155818","loc":[-85.6428057,41.9410028]},"n2140155821":{"id":"n2140155821","loc":[-85.6427993,41.9407339]},"n2140155823":{"id":"n2140155823","loc":[-85.6427385,41.9407339]},"n2140155825":{"id":"n2140155825","loc":[-85.6427417,41.9406435]},"n2140155827":{"id":"n2140155827","loc":[-85.6419515,41.9406482]},"n2140155828":{"id":"n2140155828","loc":[-85.6429368,41.9412407]},"n2140155829":{"id":"n2140155829","loc":[-85.6417756,41.9412526]},"n2140155830":{"id":"n2140155830","loc":[-85.641766,41.9405983]},"n2140155831":{"id":"n2140155831","loc":[-85.6419803,41.9405983]},"n2140155832":{"id":"n2140155832","loc":[-85.6419611,41.9401366]},"n2140155833":{"id":"n2140155833","loc":[-85.6429336,41.94012]},"n2140155834":{"id":"n2140155834","loc":[-85.6430697,41.9411732]},"n2140155835":{"id":"n2140155835","loc":[-85.6428411,41.9409974]},"n2140155837":{"id":"n2140155837","loc":[-85.6428388,41.9407211]},"n2140155839":{"id":"n2140155839","loc":[-85.6430624,41.9405521]},"n2140155840":{"id":"n2140155840","loc":[-85.6427323,41.9412396]},"n2140155842":{"id":"n2140155842","loc":[-85.6418147,41.9412457]},"n2140155844":{"id":"n2140155844","loc":[-85.641813,41.9411319]},"n2140155845":{"id":"n2140155845","loc":[-85.6418394,41.9411111]},"n2140155847":{"id":"n2140155847","loc":[-85.6418838,41.9410977]},"n2140155849":{"id":"n2140155849","loc":[-85.6427324,41.9410921]},"n2140155851":{"id":"n2140155851","loc":[-85.6427798,41.9412945]},"n2140155852":{"id":"n2140155852","loc":[-85.6427701,41.9411777]},"n2140155854":{"id":"n2140155854","loc":[-85.6427323,41.9411572]},"n2140155856":{"id":"n2140155856","loc":[-85.6418478,41.9411666]},"n2165942818":{"id":"n2165942818","loc":[-85.6437533,41.9415029]},"n2165942819":{"id":"n2165942819","loc":[-85.6437623,41.9421195]},"n2168510551":{"id":"n2168510551","loc":[-85.6423795,41.9422615]},"n2168510552":{"id":"n2168510552","loc":[-85.6423744,41.9419439]},"n2168510553":{"id":"n2168510553","loc":[-85.642518,41.9419427]},"n2168510554":{"id":"n2168510554","loc":[-85.6425186,41.9419801]},"n2168510555":{"id":"n2168510555","loc":[-85.6428314,41.9419773]},"n2168510556":{"id":"n2168510556","loc":[-85.6428368,41.9423116]},"n2168510557":{"id":"n2168510557","loc":[-85.6424947,41.9423146]},"n2168510558":{"id":"n2168510558","loc":[-85.6424938,41.9422605]},"n2189046007":{"id":"n2189046007","loc":[-85.6410866,41.9424327]},"n2189046009":{"id":"n2189046009","loc":[-85.6410805,41.9420061]},"n2189046011":{"id":"n2189046011","loc":[-85.6412443,41.9420048]},"n2189046012":{"id":"n2189046012","loc":[-85.6412505,41.9424314]},"n2189046014":{"id":"n2189046014","loc":[-85.6413311,41.942968]},"n2189046016":{"id":"n2189046016","loc":[-85.6413281,41.942713]},"n2189046018":{"id":"n2189046018","loc":[-85.641521,41.9427117]},"n2189046021":{"id":"n2189046021","loc":[-85.6415234,41.9429236]},"n2189046022":{"id":"n2189046022","loc":[-85.6415045,41.9429238]},"n2189046025":{"id":"n2189046025","loc":[-85.641505,41.9429668]},"n2189046053":{"id":"n2189046053","loc":[-85.6385988,41.942412]},"n2189046054":{"id":"n2189046054","loc":[-85.6385985,41.9423311]},"n2189046055":{"id":"n2189046055","loc":[-85.6387617,41.9423308]},"n2189046056":{"id":"n2189046056","loc":[-85.6387616,41.9423026]},"n2189046058":{"id":"n2189046058","loc":[-85.6388215,41.9423025]},"n2189046059":{"id":"n2189046059","loc":[-85.6388219,41.9424115]},"n2189046060":{"id":"n2189046060","loc":[-85.6391096,41.9424486]},"n2189046061":{"id":"n2189046061","loc":[-85.6391105,41.9423673]},"n2189046063":{"id":"n2189046063","loc":[-85.6392911,41.9423684]},"n2189046065":{"id":"n2189046065","loc":[-85.6392903,41.9424497]},"n2189046067":{"id":"n2189046067","loc":[-85.6397927,41.9423876]},"n2189046069":{"id":"n2189046069","loc":[-85.6397897,41.9422981]},"n2189046070":{"id":"n2189046070","loc":[-85.6399702,41.9422947]},"n2189046072":{"id":"n2189046072","loc":[-85.6399732,41.9423843]},"n2189046074":{"id":"n2189046074","loc":[-85.6396331,41.9430227]},"n2189046075":{"id":"n2189046075","loc":[-85.6398673,41.9430189]},"n2189046077":{"id":"n2189046077","loc":[-85.6398656,41.9429637]},"n2189046079":{"id":"n2189046079","loc":[-85.6398885,41.9429633]},"n2189046082":{"id":"n2189046082","loc":[-85.6398832,41.942779]},"n2189046083":{"id":"n2189046083","loc":[-85.6398513,41.9427796]},"n2189046085":{"id":"n2189046085","loc":[-85.6398502,41.9427401]},"n2189046087":{"id":"n2189046087","loc":[-85.6397889,41.9427411]},"n2189046089":{"id":"n2189046089","loc":[-85.6397892,41.942753]},"n2189046090":{"id":"n2189046090","loc":[-85.6396983,41.9427544]},"n2189046092":{"id":"n2189046092","loc":[-85.6396993,41.9427882]},"n2189046094":{"id":"n2189046094","loc":[-85.6396746,41.9427886]},"n2189046096":{"id":"n2189046096","loc":[-85.6396758,41.9428296]},"n2189046097":{"id":"n2189046097","loc":[-85.6397007,41.9428292]},"n2189046099":{"id":"n2189046099","loc":[-85.6397018,41.9428686]},"n2189046103":{"id":"n2189046103","loc":[-85.6396289,41.9428697]},"n2189046112":{"id":"n2189046112","loc":[-85.6435683,41.9429457]},"n2189046113":{"id":"n2189046113","loc":[-85.643568,41.9427766]},"n2189046115":{"id":"n2189046115","loc":[-85.6434011,41.9427767]},"n2189046116":{"id":"n2189046116","loc":[-85.6434012,41.9428631]},"n2189046117":{"id":"n2189046117","loc":[-85.643448,41.9428631]},"n2189046118":{"id":"n2189046118","loc":[-85.6434481,41.9429457]},"n2189046119":{"id":"n2189046119","loc":[-85.6428363,41.9429809]},"n2189046120":{"id":"n2189046120","loc":[-85.6429171,41.9429791]},"n2189046121":{"id":"n2189046121","loc":[-85.642914,41.9429041]},"n2189046122":{"id":"n2189046122","loc":[-85.6429385,41.9429035]},"n2189046123":{"id":"n2189046123","loc":[-85.6429348,41.9428126]},"n2189046124":{"id":"n2189046124","loc":[-85.6427746,41.9428163]},"n2189046125":{"id":"n2189046125","loc":[-85.6427783,41.942906]},"n2189046126":{"id":"n2189046126","loc":[-85.6428332,41.9429047]},"n2189046127":{"id":"n2189046127","loc":[-85.6423018,41.9428859]},"n2189046128":{"id":"n2189046128","loc":[-85.6422987,41.9427208]},"n2189046130":{"id":"n2189046130","loc":[-85.6424218,41.9427195]},"n2189046131":{"id":"n2189046131","loc":[-85.6424246,41.9428684]},"n2189046132":{"id":"n2189046132","loc":[-85.6423845,41.9428689]},"n2189046133":{"id":"n2189046133","loc":[-85.6423848,41.942885]},"n2189046134":{"id":"n2189046134","loc":[-85.641533,41.9429392]},"n2189046135":{"id":"n2189046135","loc":[-85.6416096,41.9428768]},"n2189046137":{"id":"n2189046137","loc":[-85.6416763,41.9429221]},"n2189046138":{"id":"n2189046138","loc":[-85.6415997,41.9429845]},"n2189046139":{"id":"n2189046139","loc":[-85.6420598,41.9428016]},"n2189046140":{"id":"n2189046140","loc":[-85.6420593,41.9427415]},"n2189046141":{"id":"n2189046141","loc":[-85.6421957,41.9427409]},"n2189046142":{"id":"n2189046142","loc":[-85.6421963,41.9428182]},"n2189046143":{"id":"n2189046143","loc":[-85.6421281,41.9428185]},"n2189046144":{"id":"n2189046144","loc":[-85.6421279,41.9428013]},"n2189046145":{"id":"n2189046145","loc":[-85.6409429,41.9429345]},"n2189046146":{"id":"n2189046146","loc":[-85.6410354,41.9429334]},"n2189046147":{"id":"n2189046147","loc":[-85.6410325,41.9427972]},"n2189046148":{"id":"n2189046148","loc":[-85.640997,41.9427976]},"n2189046149":{"id":"n2189046149","loc":[-85.6409963,41.9427643]},"n2189046150":{"id":"n2189046150","loc":[-85.6408605,41.9427659]},"n2189046152":{"id":"n2189046152","loc":[-85.6408623,41.9428482]},"n2189046153":{"id":"n2189046153","loc":[-85.640941,41.9428473]},"n2189152992":{"id":"n2189152992","loc":[-85.6437661,41.9422257]},"n2189152993":{"id":"n2189152993","loc":[-85.643768,41.9424067]},"n2189152994":{"id":"n2189152994","loc":[-85.6432176,41.9417705]},"n2189152995":{"id":"n2189152995","loc":[-85.6432097,41.941327]},"n2189152996":{"id":"n2189152996","loc":[-85.6436493,41.9413226]},"n2189152997":{"id":"n2189152997","loc":[-85.6436563,41.9417164]},"n2189152998":{"id":"n2189152998","loc":[-85.6435796,41.9417171]},"n2189152999":{"id":"n2189152999","loc":[-85.6435805,41.9417669]},"n2189153000":{"id":"n2189153000","loc":[-85.6438202,41.9414953]},"n2189153001":{"id":"n2189153001","loc":[-85.6438173,41.9413175]},"n2189153004":{"id":"n2189153004","loc":[-85.6432535,41.9418466]},"n2189153005":{"id":"n2189153005","loc":[-85.6433935,41.9418599]},"n2189153006":{"id":"n2189153006","loc":[-85.6434831,41.9418986]},"n2189153007":{"id":"n2189153007","loc":[-85.6435678,41.9419774]},"n2189153008":{"id":"n2189153008","loc":[-85.6435987,41.9420282]},"n2189153009":{"id":"n2189153009","loc":[-85.643438,41.9419573]},"n2189153010":{"id":"n2189153010","loc":[-85.6435284,41.9424676]},"n2189153011":{"id":"n2189153011","loc":[-85.6436207,41.9423631]},"n2189153012":{"id":"n2189153012","loc":[-85.6434957,41.9422973]},"n2189153013":{"id":"n2189153013","loc":[-85.6434457,41.9422458]},"n2189153014":{"id":"n2189153014","loc":[-85.6433976,41.9421772]},"n2189153015":{"id":"n2189153015","loc":[-85.6433861,41.9420785]},"n2189153016":{"id":"n2189153016","loc":[-85.6433765,41.9420313]},"n2189153017":{"id":"n2189153017","loc":[-85.6432207,41.9420284]},"n2189153018":{"id":"n2189153018","loc":[-85.6432245,41.9422759]},"n2189153019":{"id":"n2189153019","loc":[-85.6432649,41.9423474]},"n2189153020":{"id":"n2189153020","loc":[-85.6433226,41.9424132]},"n2189153021":{"id":"n2189153021","loc":[-85.6434111,41.9424704]},"n2189153022":{"id":"n2189153022","loc":[-85.6434591,41.9424347]},"n2189153025":{"id":"n2189153025","loc":[-85.6437669,41.9423073]},"n2189153026":{"id":"n2189153026","loc":[-85.6436611,41.942293]},"n2189153027":{"id":"n2189153027","loc":[-85.6435784,41.9422473]},"n2189153028":{"id":"n2189153028","loc":[-85.6435245,41.9421443]},"n2189153029":{"id":"n2189153029","loc":[-85.6435149,41.9420613]},"n2189153030":{"id":"n2189153030","loc":[-85.6433528,41.9419269]},"n2189153031":{"id":"n2189153031","loc":[-85.6432535,41.9419191]},"n2189153032":{"id":"n2189153032","loc":[-85.6430868,41.9419198]},"n2189153033":{"id":"n2189153033","loc":[-85.6434894,41.9420033]},"n2189153034":{"id":"n2189153034","loc":[-85.6432974,41.9419225]},"n2189153035":{"id":"n2189153035","loc":[-85.6433055,41.9421632]},"n2189153036":{"id":"n2189153036","loc":[-85.6433538,41.9422849]},"n2189153037":{"id":"n2189153037","loc":[-85.6434718,41.9423887]},"n2189153038":{"id":"n2189153038","loc":[-85.6436134,41.9422667]},"n2189153040":{"id":"n2189153040","loc":[-85.6438759,41.9414017]},"n2189153041":{"id":"n2189153041","loc":[-85.6438181,41.9413687]},"n2189153042":{"id":"n2189153042","loc":[-85.6436821,41.9413044]},"n2189153043":{"id":"n2189153043","loc":[-85.6435899,41.9412862]},"n2189153044":{"id":"n2189153044","loc":[-85.6433169,41.9417268]},"n2189153045":{"id":"n2189153045","loc":[-85.643301,41.9412859]},"n2189153046":{"id":"n2189153046","loc":[-85.6435531,41.9416981]},"n2189153047":{"id":"n2189153047","loc":[-85.6435427,41.9412863]},"n185948706":{"id":"n185948706","loc":[-85.6369439,41.940122]},"n185949348":{"id":"n185949348","loc":[-85.640039,41.931135]},"n185949870":{"id":"n185949870","loc":[-85.643195,41.949261]},"n185954680":{"id":"n185954680","loc":[-85.6337802,41.9401143]},"n185954784":{"id":"n185954784","loc":[-85.6487485,41.942527]},"n185958670":{"id":"n185958670","loc":[-85.637255,41.940104]},"n185958672":{"id":"n185958672","loc":[-85.636996,41.941355]},"n185960207":{"id":"n185960207","loc":[-85.634992,41.940118]},"n185963163":{"id":"n185963163","loc":[-85.638831,41.93398]},"n185963165":{"id":"n185963165","loc":[-85.640073,41.933968]},"n185963167":{"id":"n185963167","loc":[-85.641225,41.933972]},"n185963168":{"id":"n185963168","loc":[-85.642386,41.933952]},"n185964695":{"id":"n185964695","loc":[-85.6443608,41.9425645]},"n185964697":{"id":"n185964697","loc":[-85.644384,41.939941]},"n185964963":{"id":"n185964963","loc":[-85.6382347,41.9426146]},"n185964965":{"id":"n185964965","loc":[-85.637022,41.942622]},"n185964967":{"id":"n185964967","loc":[-85.6363706,41.9426606]},"n185964968":{"id":"n185964968","loc":[-85.6357988,41.9427748]},"n185964969":{"id":"n185964969","loc":[-85.6355409,41.9428465]},"n185964970":{"id":"n185964970","loc":[-85.6348729,41.9430443]},"n185966958":{"id":"n185966958","loc":[-85.641946,41.946413]},"n185966960":{"id":"n185966960","loc":[-85.643148,41.946389]},"n185967774":{"id":"n185967774","loc":[-85.641889,41.943852]},"n185967775":{"id":"n185967775","loc":[-85.641922,41.945121]},"n185967776":{"id":"n185967776","loc":[-85.641927,41.947544]},"n185967777":{"id":"n185967777","loc":[-85.641982,41.947622]},"n185969289":{"id":"n185969289","loc":[-85.63928,41.929221]},"n185969704":{"id":"n185969704","loc":[-85.6388186,41.9350099]},"n185969706":{"id":"n185969706","loc":[-85.6400709,41.9349957]},"n185969708":{"id":"n185969708","loc":[-85.6412214,41.9349827]},"n185969710":{"id":"n185969710","loc":[-85.6423509,41.934974]},"n185970602":{"id":"n185970602","loc":[-85.641293,41.931817]},"n185970604":{"id":"n185970604","loc":[-85.641258,41.932705]},"n185970605":{"id":"n185970605","loc":[-85.641148,41.936984]},"n185970606":{"id":"n185970606","loc":[-85.641112,41.938169]},"n185970906":{"id":"n185970906","loc":[-85.639454,41.943871]},"n185970908":{"id":"n185970908","loc":[-85.6394635,41.9450504]},"n185970909":{"id":"n185970909","loc":[-85.6394914,41.9451911]},"n185971368":{"id":"n185971368","loc":[-85.635769,41.940122]},"n185971978":{"id":"n185971978","loc":[-85.640003,41.936988]},"n185971980":{"id":"n185971980","loc":[-85.642299,41.936988]},"n185973633":{"id":"n185973633","loc":[-85.639023,41.92861]},"n185973635":{"id":"n185973635","loc":[-85.639153,41.928969]},"n185973637":{"id":"n185973637","loc":[-85.639213,41.929088]},"n185973639":{"id":"n185973639","loc":[-85.63935,41.929396]},"n185973641":{"id":"n185973641","loc":[-85.640143,41.931462]},"n185973644":{"id":"n185973644","loc":[-85.64019,41.931788]},"n185973646":{"id":"n185973646","loc":[-85.6401365,41.9327199]},"n185973648":{"id":"n185973648","loc":[-85.639983,41.938174]},"n185974477":{"id":"n185974477","loc":[-85.638206,41.941331]},"n185975928":{"id":"n185975928","loc":[-85.640683,41.94513]},"n185975930":{"id":"n185975930","loc":[-85.643102,41.945103]},"n185976255":{"id":"n185976255","loc":[-85.642424,41.931817]},"n185976257":{"id":"n185976257","loc":[-85.64242,41.932699]},"n185976258":{"id":"n185976258","loc":[-85.6422621,41.9381489]},"n185977452":{"id":"n185977452","loc":[-85.6457497,41.9398834]},"n185978772":{"id":"n185978772","loc":[-85.646656,41.939869]},"n185981472":{"id":"n185981472","loc":[-85.6388962,41.9321266]},"n185981474":{"id":"n185981474","loc":[-85.6388769,41.9327334]},"n185981476":{"id":"n185981476","loc":[-85.638829,41.934116]},"n185981478":{"id":"n185981478","loc":[-85.63876,41.937002]},"n185981480":{"id":"n185981480","loc":[-85.638682,41.93819]},"n185981999":{"id":"n185981999","loc":[-85.638194,41.9400866]},"n185982001":{"id":"n185982001","loc":[-85.646302,41.93988]},"n185982877":{"id":"n185982877","loc":[-85.640676,41.943867]},"n185982879":{"id":"n185982879","loc":[-85.640734,41.945887]},"n185985823":{"id":"n185985823","loc":[-85.643106,41.943841]},"n185985824":{"id":"n185985824","loc":[-85.643145,41.947641]},"n185985825":{"id":"n185985825","loc":[-85.643219,41.950829]},"n1475301385":{"id":"n1475301385","loc":[-85.6360612,41.9427042]},"n1475301397":{"id":"n1475301397","loc":[-85.6366651,41.9426328]},"n2139795811":{"id":"n2139795811","loc":[-85.6469154,41.9425427]},"n2139795830":{"id":"n2139795830","loc":[-85.6443194,41.9399444]},"n2139795834":{"id":"n2139795834","loc":[-85.6453506,41.9399002]},"n2139795837":{"id":"n2139795837","loc":[-85.645806,41.9398831]},"n2139858932":{"id":"n2139858932","loc":[-85.6351721,41.9429557]},"n2140019000":{"id":"n2140019000","loc":[-85.6359935,41.9427224]},"n2165942817":{"id":"n2165942817","loc":[-85.6442017,41.9414993]},"n2165942820":{"id":"n2165942820","loc":[-85.6442107,41.9421159]},"n2189152990":{"id":"n2189152990","loc":[-85.6442328,41.942404]},"n2189152991":{"id":"n2189152991","loc":[-85.6442309,41.9422229]},"n2189153002":{"id":"n2189153002","loc":[-85.6441329,41.9413147]},"n2189153003":{"id":"n2189153003","loc":[-85.6441357,41.9414925]},"n2189153023":{"id":"n2189153023","loc":[-85.6443453,41.9423074]},"n2189153024":{"id":"n2189153024","loc":[-85.6442318,41.9423045]},"n2189153039":{"id":"n2189153039","loc":[-85.6441343,41.9414025]},"w208643102":{"id":"w208643102","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2189153034","n2189153035","n2189153036","n2189153037","n2189153038"]},"w17966942":{"id":"w17966942","tags":{"highway":"residential","name":"Millard St"},"nodes":["n185954680","n185960207","n185971368","n185948706","n185958670","n185981999","n185981481","n185981482","n185973650","n185973659","n185970607","n185976259","n185976261","n2139795830","n185964697","n2139795834","n185977452","n2139795837","n185982001","n185978772"]},"w208643105":{"id":"w208643105","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2189153046","n2189153047"]},"w208631637":{"id":"w208631637","tags":{"area":"yes","building":"yes"},"nodes":["n2189046014","n2189046016","n2189046018","n2189046021","n2189046022","n2189046025","n2189046014"]},"w208643096":{"id":"w208643096","tags":{"amenity":"parking","area":"yes","fee":"no"},"nodes":["n2189152990","n2189153024","n2189152991","n2189152992","n2189153025","n2189152993","n2189152990"]},"w208631656":{"id":"w208631656","tags":{"area":"yes","building":"yes"},"nodes":["n2189046134","n2189046135","n2189046137","n2189046138","n2189046134"]},"w204003417":{"id":"w204003417","tags":{"area":"yes","building":"school"},"nodes":["n2140155811","n2140155814","n2140155816","n2140155818","n2140155821","n2140155823","n2140155825","n2140155827","n2140155811"]},"w208631654":{"id":"w208631654","tags":{"area":"yes","building":"yes"},"nodes":["n2189046127","n2189046128","n2189046130","n2189046131","n2189046132","n2189046133","n2189046127"]},"w17966327":{"id":"w17966327","tags":{"highway":"residential","name":"S Douglas Ave"},"nodes":["n185976261","n2140155839","n2140155834","n185974481","n2189153032","n185964959"]},"w41785752":{"id":"w41785752","tags":{"highway":"primary","name":"West Michigan Avenue","old_ref":"US 131","ref":"US 131 Business;M 60","access":"yes"},"nodes":["n185954784","n2139795811","n185964695","n185964959","n185964960","n185964961","n185964962","n185964963","n185964965","n1475301397","n185964967","n1475301385","n2140019000","n185964968","n185964969","n2139858932","n185964970"]},"w203841842":{"id":"w203841842","tags":{"area":"yes","leisure":"playground"},"nodes":["n2138493848","n2138493849","n2138493850","n2138493851","n2138493852","n2138493853","n2138493854","n2138493855","n2138493856","n2138493848"]},"w208643103":{"id":"w208643103","tags":{"highway":"service"},"nodes":["n2189153039","n2189153040","n2189153041","n2189153042","n2189153043","n2189153047","n2189153045","n185974481"]},"w208643098":{"id":"w208643098","tags":{"amenity":"parking","area":"yes"},"nodes":["n2189153000","n2189153041","n2189153001","n2189153002","n2189153039","n2189153003","n2189153000"]},"w208631646":{"id":"w208631646","tags":{"area":"yes","building":"yes"},"nodes":["n2189046067","n2189046069","n2189046070","n2189046072","n2189046067"]},"w208631653":{"id":"w208631653","tags":{"area":"yes","building":"yes"},"nodes":["n2189046119","n2189046120","n2189046121","n2189046122","n2189046123","n2189046124","n2189046125","n2189046126","n2189046119"]},"w17966041":{"id":"w17966041","tags":{"highway":"residential","name":"S Lincoln Ave"},"nodes":["n185973659","n185973660","n185964961"]},"w208631645":{"id":"w208631645","tags":{"area":"yes","building":"yes"},"nodes":["n2189046060","n2189046061","n2189046063","n2189046065","n2189046060"]},"w206803397":{"id":"w206803397","tags":{"area":"yes","building":"yes"},"nodes":["n2168510551","n2168510552","n2168510553","n2168510554","n2168510555","n2168510556","n2168510557","n2168510558","n2168510551"]},"w17965792":{"id":"w17965792","tags":{"highway":"residential","name":"N Hooker Ave"},"nodes":["n185964962","n185970906","n185970908","n185970909"]},"w208631651":{"id":"w208631651","tags":{"area":"yes","building":"yes"},"nodes":["n2189046112","n2189046113","n2189046115","n2189046116","n2189046117","n2189046118","n2189046112"]},"w208631643":{"id":"w208631643","tags":{"area":"yes","building":"yes"},"nodes":["n2189046053","n2189046054","n2189046055","n2189046056","n2189046058","n2189046059","n2189046053"]},"w17966878":{"id":"w17966878","tags":{"highway":"residential","name":"S Hooker Ave"},"nodes":["n185981472","n185981474","n185963163","n185981476","n185969704","n185981478","n185981480","n185981481"]},"w17966102":{"id":"w17966102","tags":{"highway":"residential","name":"South St"},"nodes":["n185958672","n185974477","n185974479","n185973660","n185970614"]},"w208631660":{"id":"w208631660","tags":{"area":"yes","building":"yes"},"nodes":["n2189046145","n2189046146","n2189046147","n2189046148","n2189046149","n2189046150","n2189046152","n2189046153","n2189046145"]},"w208643101":{"id":"w208643101","tags":{"highway":"service"},"nodes":["n2189153023","n2189153024","n2189153025","n2189153026","n2189153038","n2189153027","n2189153028","n2189153029","n2189153033","n2189153009","n2189153030","n2189153034","n2189153031","n2189153032"]},"w204000205":{"id":"w204000205","tags":{"highway":"residential","name":"South St","oneway":"yes"},"nodes":["n185974481","n2140155851","n185970614"]},"w203841841":{"id":"w203841841","tags":{"area":"yes","leisure":"pitch","pitch":"basketball"},"nodes":["n2138493844","n2138493845","n2138493846","n2138493847","n2138493844"]},"w17965444":{"id":"w17965444","tags":{"highway":"residential","name":"N Grant Ave"},"nodes":["n185964960","n185967774","n185967775","n185966958","n185967776","n185967777"]},"w208631648":{"id":"w208631648","tags":{"area":"yes","building":"yes"},"nodes":["n2189046074","n2189046075","n2189046077","n2189046079","n2189046082","n2189046083","n2189046085","n2189046087","n2189046089","n2189046090","n2189046092","n2189046094","n2189046096","n2189046097","n2189046099","n2189046103","n2189046074"]},"w208643100":{"id":"w208643100","tags":{"amenity":"parking","area":"yes"},"nodes":["n2189153010","n2189153011","n2189153012","n2189153013","n2189153014","n2189153015","n2189153016","n2189153017","n2189153018","n2189153019","n2189153020","n2189153021","n2189153022","n2189153010"]},"w17965749":{"id":"w17965749","tags":{"highway":"residential","name":"S Grant Ave"},"nodes":["n185970614","n185970616","n185964960"]},"w206574482":{"id":"w206574482","tags":{"amenity":"library","area":"yes","building":"yes","name":"Three Rivers Public Library"},"nodes":["n2165942817","n2165942818","n2165942819","n2165942820","n2165942817"]},"w208643097":{"id":"w208643097","tags":{"amenity":"parking","area":"yes"},"nodes":["n2189152994","n2189152995","n2189152996","n2189152997","n2189152998","n2189152999","n2189152994"]},"w17966879":{"id":"w17966879","tags":{"highway":"residential","name":"S Hooker Ave"},"nodes":["n185981482","n185974479","n185964962"]},"w17966325":{"id":"w17966325","tags":{"highway":"residential","name":"S Douglas Ave"},"nodes":["n185976255","n185976257","n185963168","n185969710","n185971980","n185976258","n185954700","n185976259"]},"w17967390":{"id":"w17967390","tags":{"highway":"residential","name":"N Douglas Ave"},"nodes":["n185964959","n185985823","n185975930","n185966960","n185985824","n185949870","n185985825"]},"w208631635":{"id":"w208631635","tags":{"area":"yes","building":"yes"},"nodes":["n2189046007","n2189046009","n2189046011","n2189046012","n2189046007"]},"w208643099":{"id":"w208643099","tags":{"amenity":"parking","area":"yes"},"nodes":["n2189153031","n2189153004","n2189153005","n2189153006","n2189153007","n2189153008","n2189153029","n2189153033","n2189153009","n2189153030","n2189153031"]},"w208631658":{"id":"w208631658","tags":{"area":"yes","building":"yes"},"nodes":["n2189046139","n2189046140","n2189046141","n2189046142","n2189046143","n2189046144","n2189046139"]},"w208643104":{"id":"w208643104","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2189153044","n2189153045"]},"w17966039":{"id":"w17966039","tags":{"highway":"residential","name":"S Lincoln Ave"},"nodes":["n185973633","n185973635","n185973637","n185969289","n185973639","n185949348","n185973641","n185973644","n185973646","n185963165","n185969706","n185971978","n185973648","n185973650"]},"w204003420":{"id":"w204003420","tags":{"amenity":"parking","area":"yes"},"nodes":["n2140155840","n2140155842","n2140155844","n2140155845","n2140155847","n2140155849","n2140155854","n2140155840"]},"w204003419":{"id":"w204003419","tags":{"highway":"service"},"nodes":["n2140155834","n2140155835","n2140155837","n2140155839"]},"w204003418":{"id":"w204003418","tags":{"amenity":"school","area":"yes","name":"Andrews Elementary School"},"nodes":["n2140155828","n2140155829","n2140155830","n2140155831","n2140155832","n2140155833","n2140155828"]},"w17965747":{"id":"w17965747","tags":{"highway":"residential","name":"S Grant Ave"},"nodes":["n185970602","n185970604","n185963167","n185969708","n185970605","n185970606","n185970607"]},"w17967073":{"id":"w17967073","tags":{"highway":"residential","name":"N Lincoln Ave"},"nodes":["n185964961","n185982877","n185975928","n185982879"]},"w204003421":{"id":"w204003421","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2140155851","n2140155852","n2140155854","n2140155856"]},"r1943857":{"id":"r1943857","tags":{"modifier":"Business","name":"US 131 Business (Three Rivers, MI)","network":"US:US","ref":"131","route":"road","type":"route"},"members":[{"id":"w17966509","type":"way","role":"forward"},{"id":"w143497377","type":"way","role":""},{"id":"w134150811","type":"way","role":""},{"id":"w134150800","type":"way","role":""},{"id":"w134150789","type":"way","role":""},{"id":"w134150795","type":"way","role":""},{"id":"w41785752","type":"way","role":""},{"id":"w17965146","type":"way","role":"forward"},{"id":"w17964031","type":"way","role":"forward"}]},"r270277":{"id":"r270277","tags":{"network":"US:MI","ref":"60","route":"road","state_id":"MI","type":"route","url":"http://en.wikipedia.org/wiki/M-60_%28Michigan_highway%29"},"members":[{"id":"w17751087","type":"way","role":"east"},{"id":"w117148312","type":"way","role":"east"},{"id":"w40942155","type":"way","role":"west"},{"id":"w17751017","type":"way","role":""},{"id":"w17751083","type":"way","role":""},{"id":"w17747780","type":"way","role":""},{"id":"w41068082","type":"way","role":""},{"id":"w197025212","type":"way","role":""},{"id":"w17743874","type":"way","role":""},{"id":"w17751044","type":"way","role":""},{"id":"w17752167","type":"way","role":""},{"id":"w17751089","type":"way","role":""},{"id":"w17743879","type":"way","role":""},{"id":"w17751064","type":"way","role":""},{"id":"w197057073","type":"way","role":""},{"id":"w167699963","type":"way","role":""},{"id":"w167699972","type":"way","role":""},{"id":"w17967584","type":"way","role":""},{"id":"w167699964","type":"way","role":""},{"id":"w17967582","type":"way","role":"west"},{"id":"w41260270","type":"way","role":"west"},{"id":"w17965146","type":"way","role":"west"},{"id":"w41785752","type":"way","role":""},{"id":"w134150795","type":"way","role":""},{"id":"w134150789","type":"way","role":""},{"id":"w134150800","type":"way","role":""},{"id":"w134150811","type":"way","role":""},{"id":"w134150836","type":"way","role":""},{"id":"w134150802","type":"way","role":""},{"id":"w41074896","type":"way","role":""},{"id":"w17966773","type":"way","role":""},{"id":"w17967415","type":"way","role":""},{"id":"w41074899","type":"way","role":""},{"id":"w17967581","type":"way","role":""},{"id":"w41074902","type":"way","role":""},{"id":"w41074906","type":"way","role":""},{"id":"w209707997","type":"way","role":""},{"id":"w209707998","type":"way","role":""},{"id":"w17964798","type":"way","role":""},{"id":"w17966034","type":"way","role":""},{"id":"w17967593","type":"way","role":""},{"id":"w41074888","type":"way","role":""},{"id":"w17733772","type":"way","role":""},{"id":"w41074813","type":"way","role":""},{"id":"w17742213","type":"way","role":""},{"id":"w17746863","type":"way","role":""},{"id":"w17745772","type":"way","role":""},{"id":"w17742222","type":"way","role":""},{"id":"w17745922","type":"way","role":""},{"id":"w17742198","type":"way","role":""},{"id":"w17747675","type":"way","role":""},{"id":"w17739927","type":"way","role":""},{"id":"w17745708","type":"way","role":""},{"id":"w41006323","type":"way","role":""},{"id":"w17744233","type":"way","role":""},{"id":"w17739436","type":"way","role":""},{"id":"w17742201","type":"way","role":""},{"id":"w151418616","type":"way","role":""},{"id":"w17750062","type":"way","role":""},{"id":"w17742227","type":"way","role":"east"},{"id":"w41006348","type":"way","role":"east"},{"id":"w41260984","type":"way","role":""},{"id":"w17832427","type":"way","role":""},{"id":"w17838408","type":"way","role":""},{"id":"w17835846","type":"way","role":""},{"id":"w17832923","type":"way","role":""},{"id":"w17839388","type":"way","role":""},{"id":"w17838390","type":"way","role":""},{"id":"w17831272","type":"way","role":""},{"id":"w17828581","type":"way","role":""},{"id":"w38240686","type":"way","role":""},{"id":"w17838405","type":"way","role":"east"},{"id":"w123323711","type":"way","role":"east"},{"id":"w17830167","type":"way","role":"east"},{"id":"w99011909","type":"way","role":"east"},{"id":"w41911361","type":"way","role":"east"},{"id":"w41911355","type":"way","role":"east"},{"id":"w41911356","type":"way","role":"east"},{"id":"w117148326","type":"way","role":"west"},{"id":"w41911352","type":"way","role":"west"},{"id":"w41911353","type":"way","role":"west"},{"id":"w41911354","type":"way","role":"west"},{"id":"w41911360","type":"way","role":"west"},{"id":"w38240676","type":"way","role":"west"},{"id":"w123323710","type":"way","role":"west"},{"id":"w41260271","type":"way","role":"east"},{"id":"w41260273","type":"way","role":"east"},{"id":"w17964031","type":"way","role":"east"},{"id":"w41006344","type":"way","role":"west"},{"id":"w41006351","type":"way","role":"west"}]},"n367813436":{"id":"n367813436","loc":[-85.63605205663384,41.94305506683346],"tags":{"amenity":"fire_station","name":"Three Rivers Fire Department"}},"n185948708":{"id":"n185948708","loc":[-85.6369828,41.9408789]},"n185948710":{"id":"n185948710","loc":[-85.6370184,41.9411346]},"n185954691":{"id":"n185954691","loc":[-85.634476,41.941475]},"n185954692":{"id":"n185954692","loc":[-85.635008,41.941846]},"n185954693":{"id":"n185954693","loc":[-85.635362,41.941962]},"n185954695":{"id":"n185954695","loc":[-85.63578,41.941978]},"n185972903":{"id":"n185972903","loc":[-85.63295,41.9430062]},"n185964971":{"id":"n185964971","loc":[-85.6346811,41.9431023]},"n1819805854":{"id":"n1819805854","loc":[-85.6331275,41.9404837]},"n1819805918":{"id":"n1819805918","loc":[-85.6331168,41.942798]},"n1819805762":{"id":"n1819805762","loc":[-85.6333034,41.9424123]},"n1819805907":{"id":"n1819805907","loc":[-85.6334819,41.9419121]},"n1819805915":{"id":"n1819805915","loc":[-85.6334554,41.9413588]},"n1819848888":{"id":"n1819848888","loc":[-85.6331625,41.942679]},"n1819848930":{"id":"n1819848930","loc":[-85.6338684,41.9431252]},"n1819858505":{"id":"n1819858505","loc":[-85.6346782,41.9429092]},"n1819858507":{"id":"n1819858507","loc":[-85.6339003,41.9414534]},"n1819858508":{"id":"n1819858508","loc":[-85.6345709,41.9427742]},"n1819858509":{"id":"n1819858509","loc":[-85.63419,41.9417322]},"n1819858511":{"id":"n1819858511","loc":[-85.6340666,41.9415652]},"n1819858512":{"id":"n1819858512","loc":[-85.6343295,41.9423027]},"n1819858514":{"id":"n1819858514","loc":[-85.6343241,41.942207]},"n1819858521":{"id":"n1819858521","loc":[-85.633391,41.941231]},"n1819858528":{"id":"n1819858528","loc":[-85.6343027,41.9419716]},"n185954683":{"id":"n185954683","loc":[-85.6335412,41.940147]},"n185954685":{"id":"n185954685","loc":[-85.6334296,41.9403023]},"n185954687":{"id":"n185954687","loc":[-85.6333988,41.9404704]},"n185954689":{"id":"n185954689","loc":[-85.6335511,41.9410225]},"n185954690":{"id":"n185954690","loc":[-85.6336721,41.9411669]},"n1820938802":{"id":"n1820938802","loc":[-85.6330671,41.941845]},"n1821006702":{"id":"n1821006702","loc":[-85.6344047,41.9395496]},"n2130304133":{"id":"n2130304133","loc":[-85.6349025,41.9427659]},"n2130304136":{"id":"n2130304136","loc":[-85.6346027,41.9422017]},"n2130304138":{"id":"n2130304138","loc":[-85.6348577,41.9421517]},"n2130304140":{"id":"n2130304140","loc":[-85.6348419,41.9422694]},"n2130304142":{"id":"n2130304142","loc":[-85.6349071,41.9423135]},"n2130304144":{"id":"n2130304144","loc":[-85.6350495,41.9423312]},"n2130304146":{"id":"n2130304146","loc":[-85.6351009,41.9422812]},"n2130304147":{"id":"n2130304147","loc":[-85.6351227,41.9421532]},"n2130304148":{"id":"n2130304148","loc":[-85.635526,41.9421547]},"n2130304149":{"id":"n2130304149","loc":[-85.6355339,41.9425768]},"n2130304150":{"id":"n2130304150","loc":[-85.6351582,41.9426562]},"n2130304151":{"id":"n2130304151","loc":[-85.6351207,41.9427032]},"n2138493807":{"id":"n2138493807","loc":[-85.6350923,41.9415216]},"n2138493808":{"id":"n2138493808","loc":[-85.6353603,41.9411061]},"n2138493809":{"id":"n2138493809","loc":[-85.6354421,41.9410942]},"n2138493810":{"id":"n2138493810","loc":[-85.6355079,41.9411044]},"n2138493811":{"id":"n2138493811","loc":[-85.6355693,41.9411246]},"n2138493812":{"id":"n2138493812","loc":[-85.6355829,41.9411061]},"n2138493813":{"id":"n2138493813","loc":[-85.6355624,41.9409777]},"n2138493814":{"id":"n2138493814","loc":[-85.6355011,41.9409152]},"n2138493815":{"id":"n2138493815","loc":[-85.635383,41.9409219]},"n2138493816":{"id":"n2138493816","loc":[-85.635299,41.9409658]},"n2138493817":{"id":"n2138493817","loc":[-85.6351695,41.941204]},"n2138493818":{"id":"n2138493818","loc":[-85.6348879,41.9415166]},"n2138493819":{"id":"n2138493819","loc":[-85.634897,41.9415757]},"n2138493820":{"id":"n2138493820","loc":[-85.6349606,41.9416399]},"n2138493821":{"id":"n2138493821","loc":[-85.6350219,41.9416669]},"n2138493822":{"id":"n2138493822","loc":[-85.6351241,41.9416314]},"n2138493823":{"id":"n2138493823","loc":[-85.6350855,41.9415622]},"n2138493824":{"id":"n2138493824","loc":[-85.6350401,41.9413603]},"n2138493825":{"id":"n2138493825","loc":[-85.6352206,41.9410765]},"n2138493826":{"id":"n2138493826","loc":[-85.6343865,41.9415594]},"n2138493827":{"id":"n2138493827","loc":[-85.6343506,41.9415873]},"n2138493828":{"id":"n2138493828","loc":[-85.6344158,41.9417557]},"n2138493829":{"id":"n2138493829","loc":[-85.6344614,41.9417968]},"n2138493830":{"id":"n2138493830","loc":[-85.6345005,41.9418186]},"n2138493831":{"id":"n2138493831","loc":[-85.6345965,41.9418162]},"n2138493832":{"id":"n2138493832","loc":[-85.6347317,41.9417242]},"n2138493833":{"id":"n2138493833","loc":[-85.6346722,41.941775]},"n2139858909":{"id":"n2139858909","loc":[-85.633403,41.9391006]},"n2139858910":{"id":"n2139858910","loc":[-85.6332973,41.9393967]},"n2139858911":{"id":"n2139858911","loc":[-85.633205,41.9396742]},"n2139858912":{"id":"n2139858912","loc":[-85.6332203,41.9397772]},"n2139858913":{"id":"n2139858913","loc":[-85.6333453,41.939936]},"n2139858914":{"id":"n2139858914","loc":[-85.6333761,41.9400018]},"n2139858915":{"id":"n2139858915","loc":[-85.63328,41.9402249]},"n2139858916":{"id":"n2139858916","loc":[-85.6332357,41.9403523]},"n2139858917":{"id":"n2139858917","loc":[-85.6332838,41.9405831]},"n2139858918":{"id":"n2139858918","loc":[-85.6333643,41.9408744]},"n2139858919":{"id":"n2139858919","loc":[-85.6334394,41.9410519]},"n2139858920":{"id":"n2139858920","loc":[-85.6335815,41.9411717]},"n2139858921":{"id":"n2139858921","loc":[-85.6337478,41.9412734]},"n2139858922":{"id":"n2139858922","loc":[-85.6343174,41.9415268]},"n2139858923":{"id":"n2139858923","loc":[-85.6343886,41.9417397]},"n2139858924":{"id":"n2139858924","loc":[-85.6344407,41.9418015]},"n2139858925":{"id":"n2139858925","loc":[-85.6345139,41.9418366]},"n2139858926":{"id":"n2139858926","loc":[-85.6344846,41.942005]},"n2139858927":{"id":"n2139858927","loc":[-85.6345775,41.9422218]},"n2139858928":{"id":"n2139858928","loc":[-85.6348771,41.9427814]},"n2139858929":{"id":"n2139858929","loc":[-85.6349487,41.9427995]},"n2139858930":{"id":"n2139858930","loc":[-85.6350415,41.9427874]},"n2139858931":{"id":"n2139858931","loc":[-85.6351246,41.9428589]},"n2139858978":{"id":"n2139858978","loc":[-85.6349658,41.9431481]},"n2139858979":{"id":"n2139858979","loc":[-85.6350081,41.9431287]},"n2139858980":{"id":"n2139858980","loc":[-85.6349967,41.9430997]},"n2139858981":{"id":"n2139858981","loc":[-85.6352158,41.9430352]},"n2139858982":{"id":"n2139858982","loc":[-85.6348174,41.94267]},"n2139858983":{"id":"n2139858983","loc":[-85.6346142,41.9425989]},"n2139858984":{"id":"n2139858984","loc":[-85.6344938,41.9423809]},"n2139858985":{"id":"n2139858985","loc":[-85.6344856,41.9422997]},"n2139870380":{"id":"n2139870380","loc":[-85.6346707,41.9417955]},"n2139870381":{"id":"n2139870381","loc":[-85.6345949,41.9418311]},"n2139870382":{"id":"n2139870382","loc":[-85.6343322,41.9418659]},"n2139870383":{"id":"n2139870383","loc":[-85.6342072,41.941885]},"n2139870384":{"id":"n2139870384","loc":[-85.6341325,41.9418919]},"n2139870385":{"id":"n2139870385","loc":[-85.6341314,41.9422028]},"n2139870386":{"id":"n2139870386","loc":[-85.6340472,41.9423271]},"n2139870387":{"id":"n2139870387","loc":[-85.6342185,41.9427933]},"n2139870388":{"id":"n2139870388","loc":[-85.6340605,41.9423924]},"n2139870389":{"id":"n2139870389","loc":[-85.6339889,41.9424069]},"n2139870390":{"id":"n2139870390","loc":[-85.633971,41.942356]},"n2139870391":{"id":"n2139870391","loc":[-85.63361,41.9424235]},"n2139870392":{"id":"n2139870392","loc":[-85.6337137,41.9426819]},"n2139870393":{"id":"n2139870393","loc":[-85.6336977,41.9428632]},"n2139870394":{"id":"n2139870394","loc":[-85.6338823,41.9428647]},"n2139870395":{"id":"n2139870395","loc":[-85.6339412,41.9430069]},"n2139870396":{"id":"n2139870396","loc":[-85.6338873,41.9430353]},"n2139870397":{"id":"n2139870397","loc":[-85.6337676,41.942815]},"n2139870398":{"id":"n2139870398","loc":[-85.6336822,41.9423505]},"n2139870399":{"id":"n2139870399","loc":[-85.634037,41.9422725]},"n2139870400":{"id":"n2139870400","loc":[-85.6340294,41.9422518]},"n2139870401":{"id":"n2139870401","loc":[-85.6336726,41.9423312]},"n2139870402":{"id":"n2139870402","loc":[-85.6342188,41.9425715]},"n2139870403":{"id":"n2139870403","loc":[-85.6342524,41.942565]},"n2139870404":{"id":"n2139870404","loc":[-85.6341438,41.942299]},"n2139870405":{"id":"n2139870405","loc":[-85.6341149,41.9423061]},"n2139870407":{"id":"n2139870407","loc":[-85.6340846,41.9431458]},"n2139870408":{"id":"n2139870408","loc":[-85.6339436,41.9429032]},"n2139870409":{"id":"n2139870409","loc":[-85.6343143,41.9428207]},"n2139870410":{"id":"n2139870410","loc":[-85.6343507,41.94277]},"n2139870411":{"id":"n2139870411","loc":[-85.6341527,41.942254]},"n2139870412":{"id":"n2139870412","loc":[-85.6340925,41.9422199]},"n2139870413":{"id":"n2139870413","loc":[-85.6335435,41.9423433]},"n2139870414":{"id":"n2139870414","loc":[-85.6335023,41.9423975]},"n2139870415":{"id":"n2139870415","loc":[-85.6335086,41.9424552]},"n2139870416":{"id":"n2139870416","loc":[-85.6336296,41.942665]},"n2139870417":{"id":"n2139870417","loc":[-85.6341396,41.9428596]},"n2139870418":{"id":"n2139870418","loc":[-85.6339701,41.9424487]},"n2139870419":{"id":"n2139870419","loc":[-85.6335514,41.9425294]},"n2139870420":{"id":"n2139870420","loc":[-85.6337406,41.9424929]},"n2139870421":{"id":"n2139870421","loc":[-85.6338939,41.9428687]},"n2139870422":{"id":"n2139870422","loc":[-85.6341323,41.9419538]},"n2139870423":{"id":"n2139870423","loc":[-85.6340321,41.9420376]},"n2139870424":{"id":"n2139870424","loc":[-85.6337648,41.942238]},"n2139870425":{"id":"n2139870425","loc":[-85.6337604,41.9422685]},"n2139870426":{"id":"n2139870426","loc":[-85.6337682,41.9422928]},"n2139870427":{"id":"n2139870427","loc":[-85.6338086,41.9423862]},"n2139870428":{"id":"n2139870428","loc":[-85.6349465,41.9416631]},"n2139870429":{"id":"n2139870429","loc":[-85.6351097,41.9416973]},"n2139870430":{"id":"n2139870430","loc":[-85.6353371,41.9416798]},"n2139870431":{"id":"n2139870431","loc":[-85.6349627,41.9422506]},"n2139870432":{"id":"n2139870432","loc":[-85.634979,41.9421815]},"n2139870433":{"id":"n2139870433","loc":[-85.634885,41.9421679]},"n2139870434":{"id":"n2139870434","loc":[-85.6348689,41.9422377]},"n2139870435":{"id":"n2139870435","loc":[-85.6349779,41.9419486]},"n2139870436":{"id":"n2139870436","loc":[-85.6349505,41.9418933]},"n2139870437":{"id":"n2139870437","loc":[-85.6347327,41.9419505]},"n2139870438":{"id":"n2139870438","loc":[-85.6347614,41.9420087]},"n2139870439":{"id":"n2139870439","loc":[-85.6351889,41.9416912]},"n2139870440":{"id":"n2139870440","loc":[-85.6351092,41.9418426]},"n2139870441":{"id":"n2139870441","loc":[-85.635086,41.9419659]},"n2139870442":{"id":"n2139870442","loc":[-85.6350584,41.9421466]},"n2139870443":{"id":"n2139870443","loc":[-85.6350993,41.9421606]},"n2139870444":{"id":"n2139870444","loc":[-85.6350993,41.9422132]},"n2139870445":{"id":"n2139870445","loc":[-85.6350794,41.9422855]},"n2139870446":{"id":"n2139870446","loc":[-85.6350474,41.9423159]},"n2139870447":{"id":"n2139870447","loc":[-85.6349251,41.9422998]},"n2139870448":{"id":"n2139870448","loc":[-85.634911,41.9422755]},"n2139870449":{"id":"n2139870449","loc":[-85.6349157,41.9422553]},"n2139870450":{"id":"n2139870450","loc":[-85.6347213,41.9419324]},"n2139870451":{"id":"n2139870451","loc":[-85.6349535,41.9418771]},"n2139870452":{"id":"n2139870452","loc":[-85.6350135,41.9419421]},"n2139870453":{"id":"n2139870453","loc":[-85.6348584,41.9418997]},"n2139870454":{"id":"n2139870454","loc":[-85.6348113,41.9418101]},"n2139870455":{"id":"n2139870455","loc":[-85.6347306,41.9417449]},"n2139870456":{"id":"n2139870456","loc":[-85.6349123,41.941776]},"n2139870457":{"id":"n2139870457","loc":[-85.6349423,41.9421448]},"n2139870458":{"id":"n2139870458","loc":[-85.6349436,41.9420652]},"n2139870459":{"id":"n2139870459","loc":[-85.6349136,41.9419963]},"n2139870460":{"id":"n2139870460","loc":[-85.6349814,41.9419789]},"n2139989328":{"id":"n2139989328","loc":[-85.6334188,41.9421725]},"n2139989330":{"id":"n2139989330","loc":[-85.6335087,41.9416308]},"n2139989335":{"id":"n2139989335","loc":[-85.6336856,41.9429371]},"n2139989337":{"id":"n2139989337","loc":[-85.6333713,41.9427217]},"n2139989339":{"id":"n2139989339","loc":[-85.6332912,41.9425383]},"n2139989341":{"id":"n2139989341","loc":[-85.6339369,41.9409198]},"n2139989344":{"id":"n2139989344","loc":[-85.634097,41.9409469]},"n2139989346":{"id":"n2139989346","loc":[-85.634137,41.9412852]},"n2139989348":{"id":"n2139989348","loc":[-85.6344536,41.9414151]},"n2139989350":{"id":"n2139989350","loc":[-85.6350794,41.9412392]},"n2139989351":{"id":"n2139989351","loc":[-85.6352541,41.9409387]},"n2139989353":{"id":"n2139989353","loc":[-85.6357198,41.9408007]},"n2139989355":{"id":"n2139989355","loc":[-85.6357235,41.9427088]},"n2139989357":{"id":"n2139989357","loc":[-85.6337119,41.9421256]},"n2139989359":{"id":"n2139989359","loc":[-85.6336913,41.9420655]},"n2139989360":{"id":"n2139989360","loc":[-85.633582,41.9420867]},"n2139989362":{"id":"n2139989362","loc":[-85.6336058,41.9421491]},"n2139989364":{"id":"n2139989364","loc":[-85.6339685,41.9410995]},"n2139989366":{"id":"n2139989366","loc":[-85.6339067,41.9411383]},"n2139989368":{"id":"n2139989368","loc":[-85.6339685,41.9411972]},"n2139989370":{"id":"n2139989370","loc":[-85.6340398,41.9411619]},"n2139870379":{"id":"n2139870379","loc":[-85.6348391,41.9416651]},"n2140006363":{"id":"n2140006363","loc":[-85.6353144,41.9430345]},"n2140006364":{"id":"n2140006364","loc":[-85.6349191,41.9431422]},"n2140018997":{"id":"n2140018997","loc":[-85.63645945147184,41.942986488012565],"tags":{"amenity":"townhall","name":"Three Rivers City Hall"}},"n2140018998":{"id":"n2140018998","loc":[-85.6370319,41.9427919]},"n2140018999":{"id":"n2140018999","loc":[-85.6360687,41.9427808]},"n2199856288":{"id":"n2199856288","loc":[-85.6344968,41.9407307]},"n2199856289":{"id":"n2199856289","loc":[-85.634492,41.9406036]},"n2199856290":{"id":"n2199856290","loc":[-85.634891,41.9406001]},"n2199856291":{"id":"n2199856291","loc":[-85.6348894,41.9405288]},"n2199856292":{"id":"n2199856292","loc":[-85.6349166,41.94053]},"n2199856293":{"id":"n2199856293","loc":[-85.6349166,41.9404956]},"n2199856294":{"id":"n2199856294","loc":[-85.6350219,41.9404956]},"n2199856295":{"id":"n2199856295","loc":[-85.6350251,41.94053]},"n2199856296":{"id":"n2199856296","loc":[-85.6350538,41.9405288]},"n2199856297":{"id":"n2199856297","loc":[-85.6350602,41.94079]},"n2199856298":{"id":"n2199856298","loc":[-85.6351703,41.9407912]},"n2199856299":{"id":"n2199856299","loc":[-85.6351688,41.9409171]},"n2199856300":{"id":"n2199856300","loc":[-85.6347889,41.9409135]},"n2199856301":{"id":"n2199856301","loc":[-85.6347921,41.94079]},"n2199856302":{"id":"n2199856302","loc":[-85.6348942,41.9407888]},"n2199856303":{"id":"n2199856303","loc":[-85.6348926,41.9407283]},"n185951869":{"id":"n185951869","loc":[-85.6387639,41.957288]},"n185958643":{"id":"n185958643","loc":[-85.636746,41.929221]},"n185958645":{"id":"n185958645","loc":[-85.636791,41.929363]},"n185958647":{"id":"n185958647","loc":[-85.6375975,41.9314987]},"n185958649":{"id":"n185958649","loc":[-85.637669,41.931667]},"n185958651":{"id":"n185958651","loc":[-85.637728,41.931901]},"n185958653":{"id":"n185958653","loc":[-85.637724,41.932187]},"n185958656":{"id":"n185958656","loc":[-85.637732,41.932761]},"n185958658":{"id":"n185958658","loc":[-85.637688,41.93398]},"n185958660":{"id":"n185958660","loc":[-85.637685,41.934223]},"n185958662":{"id":"n185958662","loc":[-85.6376468,41.9350232]},"n185958664":{"id":"n185958664","loc":[-85.637564,41.937028]},"n185958666":{"id":"n185958666","loc":[-85.637458,41.938197]},"n185958668":{"id":"n185958668","loc":[-85.637424,41.938692]},"n185964972":{"id":"n185964972","loc":[-85.6341901,41.9432732]},"n185971361":{"id":"n185971361","loc":[-85.635762,41.938208]},"n185971364":{"id":"n185971364","loc":[-85.635732,41.9384]},"n185971366":{"id":"n185971366","loc":[-85.635736,41.938697]},"n185972775":{"id":"n185972775","loc":[-85.635638,42.070357]},"n185972777":{"id":"n185972777","loc":[-85.635724,42.069929]},"n185972779":{"id":"n185972779","loc":[-85.635804,42.069248]},"n185972781":{"id":"n185972781","loc":[-85.635869,42.068361]},"n185972783":{"id":"n185972783","loc":[-85.635883,42.067582]},"n185972785":{"id":"n185972785","loc":[-85.635875,42.067114]},"n185972787":{"id":"n185972787","loc":[-85.635778,42.065359]},"n185972788":{"id":"n185972788","loc":[-85.635728,42.063416]},"n185972789":{"id":"n185972789","loc":[-85.635665,42.062491]},"n185972790":{"id":"n185972790","loc":[-85.635617,42.061928]},"n185972791":{"id":"n185972791","loc":[-85.635614,42.061898]},"n185972793":{"id":"n185972793","loc":[-85.635379,42.060288]},"n185972795":{"id":"n185972795","loc":[-85.635092,42.05799]},"n185972797":{"id":"n185972797","loc":[-85.634843,42.055781]},"n185972798":{"id":"n185972798","loc":[-85.634817,42.055549]},"n185972800":{"id":"n185972800","loc":[-85.634708,42.053942]},"n185972802":{"id":"n185972802","loc":[-85.634447,42.051809]},"n185972805":{"id":"n185972805","loc":[-85.634241,42.04946]},"n185972807":{"id":"n185972807","loc":[-85.633787,42.045926]},"n185972809":{"id":"n185972809","loc":[-85.633811,42.045645]},"n185972811":{"id":"n185972811","loc":[-85.63373,42.043626]},"n185972813":{"id":"n185972813","loc":[-85.633698,42.042184]},"n185972814":{"id":"n185972814","loc":[-85.63369,42.04181]},"n185972815":{"id":"n185972815","loc":[-85.633681,42.040714]},"n185972816":{"id":"n185972816","loc":[-85.633571,42.036322]},"n185972817":{"id":"n185972817","loc":[-85.633537,42.034044]},"n185972819":{"id":"n185972819","loc":[-85.633481,42.030785]},"n185972821":{"id":"n185972821","loc":[-85.633452,42.027538]},"n185972824":{"id":"n185972824","loc":[-85.633438,42.027427]},"n185972826":{"id":"n185972826","loc":[-85.633342,42.022656]},"n185972830":{"id":"n185972830","loc":[-85.63327,42.020724]},"n185972832":{"id":"n185972832","loc":[-85.633198,42.019106]},"n185972834":{"id":"n185972834","loc":[-85.633249,42.018363]},"n185972835":{"id":"n185972835","loc":[-85.633139,42.012944]},"n185972836":{"id":"n185972836","loc":[-85.63309,42.008284]},"n185972839":{"id":"n185972839","loc":[-85.63298,42.00005]},"n185972845":{"id":"n185972845","loc":[-85.6325369,41.9764959]},"n185972847":{"id":"n185972847","loc":[-85.6327549,41.9750005]},"n185972849":{"id":"n185972849","loc":[-85.6329374,41.9742527]},"n185972851":{"id":"n185972851","loc":[-85.6331387,41.9736039]},"n185972862":{"id":"n185972862","loc":[-85.6383589,41.9585023]},"n185972868":{"id":"n185972868","loc":[-85.6393633,41.9551716]},"n185972878":{"id":"n185972878","loc":[-85.639377,41.95335]},"n185972882":{"id":"n185972882","loc":[-85.6389179,41.9516944]},"n185972885":{"id":"n185972885","loc":[-85.6387444,41.9512105]},"n185972891":{"id":"n185972891","loc":[-85.636421,41.946392]},"n185972895":{"id":"n185972895","loc":[-85.635965,41.945809]},"n185972897":{"id":"n185972897","loc":[-85.635683,41.945449]},"n185972899":{"id":"n185972899","loc":[-85.635281,41.9450252]},"n185972905":{"id":"n185972905","loc":[-85.6324428,41.9425743]},"n185985217":{"id":"n185985217","loc":[-85.638243,41.943674]},"n185985219":{"id":"n185985219","loc":[-85.638228,41.943747]},"n185985221":{"id":"n185985221","loc":[-85.638163,41.943797]},"n185985222":{"id":"n185985222","loc":[-85.638089,41.943832]},"n185985223":{"id":"n185985223","loc":[-85.637969,41.943841]},"n185985225":{"id":"n185985225","loc":[-85.637841,41.943833]},"n185985227":{"id":"n185985227","loc":[-85.637601,41.943789]},"n185985229":{"id":"n185985229","loc":[-85.637449,41.943754]},"n185985231":{"id":"n185985231","loc":[-85.637342,41.943734]},"n185985233":{"id":"n185985233","loc":[-85.637218,41.943703]},"n185985235":{"id":"n185985235","loc":[-85.637151,41.943663]},"n185985238":{"id":"n185985238","loc":[-85.637118,41.943615]},"n185985240":{"id":"n185985240","loc":[-85.637073,41.943494]},"n185990434":{"id":"n185990434","loc":[-85.6329028,41.9984292],"tags":{"railway":"level_crossing"}},"n1475284023":{"id":"n1475284023","loc":[-85.6336163,41.9435806],"tags":{"railway":"level_crossing"}},"n1475293222":{"id":"n1475293222","loc":[-85.6394045,41.953658],"tags":{"railway":"level_crossing"}},"n1475293226":{"id":"n1475293226","loc":[-85.6364975,41.9638663],"tags":{"railway":"level_crossing"}},"n1475293234":{"id":"n1475293234","loc":[-85.6390449,41.9565145]},"n1475293240":{"id":"n1475293240","loc":[-85.636943,41.9473114]},"n1475293252":{"id":"n1475293252","loc":[-85.6392115,41.9559003]},"n1475293254":{"id":"n1475293254","loc":[-85.6348931,41.9685127],"tags":{"railway":"level_crossing"}},"n1475293260":{"id":"n1475293260","loc":[-85.6375999,41.9485401]},"n1475293261":{"id":"n1475293261","loc":[-85.6391256,41.9523817],"tags":{"railway":"level_crossing"}},"n1475293264":{"id":"n1475293264","loc":[-85.6394155,41.9546493],"tags":{"railway":"level_crossing"}},"n1819805614":{"id":"n1819805614","loc":[-85.6345652,41.9363097]},"n1819805618":{"id":"n1819805618","loc":[-85.6295334,41.9426862]},"n1819805622":{"id":"n1819805622","loc":[-85.6308208,41.9430773]},"n1819805626":{"id":"n1819805626","loc":[-85.6274734,41.9406592]},"n1819805629":{"id":"n1819805629","loc":[-85.6296943,41.9430533]},"n1819805632":{"id":"n1819805632","loc":[-85.6340931,41.9354477]},"n1819805636":{"id":"n1819805636","loc":[-85.6304131,41.9436598]},"n1819805639":{"id":"n1819805639","loc":[-85.6304882,41.9426623]},"n1819805641":{"id":"n1819805641","loc":[-85.6336103,41.9367487]},"n1819805643":{"id":"n1819805643","loc":[-85.6300376,41.9418084]},"n1819805645":{"id":"n1819805645","loc":[-85.6365286,41.9336679]},"n1819805647":{"id":"n1819805647","loc":[-85.632016,41.9429221]},"n1819805666":{"id":"n1819805666","loc":[-85.6314753,41.9442663]},"n1819805669":{"id":"n1819805669","loc":[-85.6268619,41.9402203]},"n1819805673":{"id":"n1819805673","loc":[-85.6296728,41.9412099]},"n1819805676":{"id":"n1819805676","loc":[-85.6354557,41.932766]},"n1819805680":{"id":"n1819805680","loc":[-85.632752,41.9431012]},"n1819805683":{"id":"n1819805683","loc":[-85.631147,41.9432014]},"n1819805687":{"id":"n1819805687","loc":[-85.635284,41.9343942]},"n1819805690":{"id":"n1819805690","loc":[-85.6249736,41.9405794]},"n1819805694":{"id":"n1819805694","loc":[-85.6294153,41.9417925]},"n1819805698":{"id":"n1819805698","loc":[-85.6323486,41.9426986]},"n1819805702":{"id":"n1819805702","loc":[-85.6340287,41.9373871]},"n1819805707":{"id":"n1819805707","loc":[-85.6353698,41.9316326]},"n1819805711":{"id":"n1819805711","loc":[-85.6284176,41.940356]},"n1819805715":{"id":"n1819805715","loc":[-85.6291471,41.9412897]},"n1819805718":{"id":"n1819805718","loc":[-85.6311105,41.943979]},"n1819805722":{"id":"n1819805722","loc":[-85.6320868,41.9400128]},"n1819805724":{"id":"n1819805724","loc":[-85.635166,41.9324627]},"n1819805727":{"id":"n1819805727","loc":[-85.6344686,41.9350567]},"n1819805728":{"id":"n1819805728","loc":[-85.6357132,41.9332369]},"n1819805731":{"id":"n1819805731","loc":[-85.629984,41.9434444]},"n1819805760":{"id":"n1819805760","loc":[-85.6330996,41.9378784]},"n1819805766":{"id":"n1819805766","loc":[-85.625274,41.9411141]},"n1819805770":{"id":"n1819805770","loc":[-85.6326321,41.9412173]},"n1819805774":{"id":"n1819805774","loc":[-85.6347047,41.9312096]},"n1819805777":{"id":"n1819805777","loc":[-85.6363569,41.9339552]},"n1819805780":{"id":"n1819805780","loc":[-85.6327392,41.941926]},"n1819805783":{"id":"n1819805783","loc":[-85.6357239,41.9338435]},"n1819805786":{"id":"n1819805786","loc":[-85.6356595,41.9346576]},"n1819805789":{"id":"n1819805789","loc":[-85.6316469,41.9436598]},"n1819805792":{"id":"n1819805792","loc":[-85.6350587,41.9354557]},"n1819805795":{"id":"n1819805795","loc":[-85.6360028,41.9322791]},"n1819805798":{"id":"n1819805798","loc":[-85.63125,41.9443062]},"n1819805802":{"id":"n1819805802","loc":[-85.6263362,41.9408109]},"n1819805805":{"id":"n1819805805","loc":[-85.6315075,41.9438753]},"n1819805808":{"id":"n1819805808","loc":[-85.6340008,41.9316051]},"n1819805810":{"id":"n1819805810","loc":[-85.6345545,41.9320557]},"n1819805812":{"id":"n1819805812","loc":[-85.6250809,41.9408587]},"n1819805814":{"id":"n1819805814","loc":[-85.6257783,41.9400926]},"n1819805834":{"id":"n1819805834","loc":[-85.6326408,41.9424363]},"n1819805838":{"id":"n1819805838","loc":[-85.6365607,41.9334365]},"n1819805842":{"id":"n1819805842","loc":[-85.6288253,41.9410343]},"n1819805846":{"id":"n1819805846","loc":[-85.6279133,41.9402921]},"n1819805849":{"id":"n1819805849","loc":[-85.6289433,41.9405156]},"n1819805852":{"id":"n1819805852","loc":[-85.6313787,41.9439152]},"n1819805858":{"id":"n1819805858","loc":[-85.6300805,41.9420398]},"n1819805861":{"id":"n1819805861","loc":[-85.6321941,41.9396297]},"n1819805864":{"id":"n1819805864","loc":[-85.6329129,41.9393903]},"n1819805868":{"id":"n1819805868","loc":[-85.632001,41.9434922]},"n1819805870":{"id":"n1819805870","loc":[-85.6314903,41.9431535]},"n1819805873":{"id":"n1819805873","loc":[-85.6251667,41.9401166]},"n1819805876":{"id":"n1819805876","loc":[-85.63287,41.939941]},"n1819805878":{"id":"n1819805878","loc":[-85.6307886,41.9437317]},"n1819805880":{"id":"n1819805880","loc":[-85.6321727,41.940348]},"n1819805883":{"id":"n1819805883","loc":[-85.6265872,41.940113]},"n1819805885":{"id":"n1819805885","loc":[-85.6268404,41.9406672]},"n1819805887":{"id":"n1819805887","loc":[-85.6325267,41.9389035]},"n1819805889":{"id":"n1819805889","loc":[-85.6364964,41.933189]},"n1819805911":{"id":"n1819805911","loc":[-85.6248663,41.9401804]},"n1819805922":{"id":"n1819805922","loc":[-85.633267,41.9387199]},"n1819805925":{"id":"n1819805925","loc":[-85.6293402,41.9408428]},"n1819848849":{"id":"n1819848849","loc":[-85.6464957,41.9695178]},"n1819848850":{"id":"n1819848850","loc":[-85.6497642,41.9611355]},"n1819848851":{"id":"n1819848851","loc":[-85.6480943,41.9624818]},"n1819848854":{"id":"n1819848854","loc":[-85.6500362,41.9657367]},"n1819848855":{"id":"n1819848855","loc":[-85.6493673,41.9783496]},"n1819848856":{"id":"n1819848856","loc":[-85.6457409,41.9548007]},"n1819848857":{"id":"n1819848857","loc":[-85.651313,41.9760426]},"n1819848858":{"id":"n1819848858","loc":[-85.6495819,41.9784772]},"n1819848859":{"id":"n1819848859","loc":[-85.6495105,41.9833722]},"n1819848860":{"id":"n1819848860","loc":[-85.6405053,41.9492792]},"n1819848863":{"id":"n1819848863","loc":[-85.6502293,41.9786826]},"n1819848865":{"id":"n1819848865","loc":[-85.6406877,41.9495106]},"n1819848870":{"id":"n1819848870","loc":[-85.6493136,41.9704611]},"n1819848871":{"id":"n1819848871","loc":[-85.6372249,41.9441284]},"n1819848873":{"id":"n1819848873","loc":[-85.6512379,41.9659441]},"n1819848875":{"id":"n1819848875","loc":[-85.6508087,41.9650187]},"n1819848877":{"id":"n1819848877","loc":[-85.6487166,41.9605352]},"n1819848878":{"id":"n1819848878","loc":[-85.6506478,41.9760665]},"n1819848879":{"id":"n1819848879","loc":[-85.651431,41.9758512]},"n1819848886":{"id":"n1819848886","loc":[-85.6477617,41.9563945]},"n1819848889":{"id":"n1819848889","loc":[-85.6497895,41.9832286]},"n1819848892":{"id":"n1819848892","loc":[-85.6504868,41.9791931]},"n1819848893":{"id":"n1819848893","loc":[-85.6498002,41.9615085]},"n1819848894":{"id":"n1819848894","loc":[-85.6404302,41.9502846]},"n1819848901":{"id":"n1819848901","loc":[-85.6354412,41.9439886]},"n1819848903":{"id":"n1819848903","loc":[-85.6472145,41.9698528]},"n1819848904":{"id":"n1819848904","loc":[-85.6401979,41.9486233]},"n1819848905":{"id":"n1819848905","loc":[-85.6475042,41.963503]},"n1819848909":{"id":"n1819848909","loc":[-85.6343405,41.94358]},"n1819848914":{"id":"n1819848914","loc":[-85.6503474,41.9737773]},"n1819848915":{"id":"n1819848915","loc":[-85.6389533,41.9470992]},"n1819848916":{"id":"n1819848916","loc":[-85.6483625,41.9577907]},"n1819848917":{"id":"n1819848917","loc":[-85.6484768,41.9617419]},"n1819848918":{"id":"n1819848918","loc":[-85.644078,41.9545693]},"n1819848919":{"id":"n1819848919","loc":[-85.6437169,41.9543041]},"n1819848920":{"id":"n1819848920","loc":[-85.6478331,41.9627949]},"n1819848922":{"id":"n1819848922","loc":[-85.6499144,41.9785889]},"n1819848924":{"id":"n1819848924","loc":[-85.647633,41.9720066]},"n1819848926":{"id":"n1819848926","loc":[-85.6487987,41.978868]},"n1819848927":{"id":"n1819848927","loc":[-85.6495105,41.9730355]},"n1819848928":{"id":"n1819848928","loc":[-85.648223,41.9829654]},"n1819848929":{"id":"n1819848929","loc":[-85.6514846,41.9659122]},"n1819848931":{"id":"n1819848931","loc":[-85.6498753,41.9731871]},"n1819848932":{"id":"n1819848932","loc":[-85.640906,41.9508575]},"n1819848933":{"id":"n1819848933","loc":[-85.649775,41.9799767]},"n1819848934":{"id":"n1819848934","loc":[-85.6507014,41.9739927]},"n1819848937":{"id":"n1819848937","loc":[-85.6479763,41.9840899]},"n1819848938":{"id":"n1819848938","loc":[-85.6501113,41.9600884]},"n1819848939":{"id":"n1819848939","loc":[-85.6389962,41.9478253]},"n1819848941":{"id":"n1819848941","loc":[-85.637469,41.9445791]},"n1819848942":{"id":"n1819848942","loc":[-85.6494569,41.9601682]},"n1819848943":{"id":"n1819848943","loc":[-85.6368803,41.9439351]},"n1819848945":{"id":"n1819848945","loc":[-85.6474398,41.9724213]},"n1819848946":{"id":"n1819848946","loc":[-85.6382629,41.9463666]},"n1819848948":{"id":"n1819848948","loc":[-85.6489633,41.9830771]},"n1819848952":{"id":"n1819848952","loc":[-85.6488882,41.9600326]},"n1819848953":{"id":"n1819848953","loc":[-85.6488094,41.9774324]},"n1819848954":{"id":"n1819848954","loc":[-85.6491135,41.9600485]},"n1819848955":{"id":"n1819848955","loc":[-85.6501435,41.9734583]},"n1819848956":{"id":"n1819848956","loc":[-85.6495534,41.960958]},"n1819848958":{"id":"n1819848958","loc":[-85.6474683,41.9561491]},"n1819848959":{"id":"n1819848959","loc":[-85.6401083,41.9485451]},"n1819848960":{"id":"n1819848960","loc":[-85.6481764,41.9678686]},"n1819848961":{"id":"n1819848961","loc":[-85.6484017,41.967382]},"n1819848962":{"id":"n1819848962","loc":[-85.6501328,41.959897]},"n1819848964":{"id":"n1819848964","loc":[-85.6403695,41.9504586]},"n1819848966":{"id":"n1819848966","loc":[-85.6398975,41.9491499]},"n1819848967":{"id":"n1819848967","loc":[-85.6412455,41.9510187]},"n1819848968":{"id":"n1819848968","loc":[-85.6482622,41.9619493]},"n1819848969":{"id":"n1819848969","loc":[-85.6405841,41.9501474]},"n1819848970":{"id":"n1819848970","loc":[-85.6478583,41.9703394]},"n1819848971":{"id":"n1819848971","loc":[-85.6493388,41.9832845]},"n1819848972":{"id":"n1819848972","loc":[-85.6485664,41.9829415]},"n1819848974":{"id":"n1819848974","loc":[-85.6491457,41.9779887]},"n1819848975":{"id":"n1819848975","loc":[-85.6468889,41.9697033]},"n1819848976":{"id":"n1819848976","loc":[-85.6452726,41.9546072]},"n1819848977":{"id":"n1819848977","loc":[-85.6448435,41.9546072]},"n1819848979":{"id":"n1819848979","loc":[-85.6485342,41.9763138]},"n1819848980":{"id":"n1819848980","loc":[-85.6495282,41.9664087]},"n1819848986":{"id":"n1819848986","loc":[-85.6486307,41.9603278]},"n1819848987":{"id":"n1819848987","loc":[-85.6492278,41.9791871]},"n1819848990":{"id":"n1819848990","loc":[-85.6501934,41.9800724]},"n1819848992":{"id":"n1819848992","loc":[-85.6482445,41.9819685]},"n1819848993":{"id":"n1819848993","loc":[-85.6481871,41.9704451]},"n1819848994":{"id":"n1819848994","loc":[-85.6371364,41.9457602]},"n1819848996":{"id":"n1819848996","loc":[-85.6500362,41.9801023]},"n1819849000":{"id":"n1819849000","loc":[-85.639007,41.9485914]},"n1819849001":{"id":"n1819849001","loc":[-85.6488882,41.9669253]},"n1819849002":{"id":"n1819849002","loc":[-85.6484698,41.9565062]},"n1819849004":{"id":"n1819849004","loc":[-85.6510769,41.9761064]},"n1819849005":{"id":"n1819849005","loc":[-85.6503581,41.9799029]},"n1819849006":{"id":"n1819849006","loc":[-85.6489381,41.9703893]},"n1819849008":{"id":"n1819849008","loc":[-85.6497457,41.9833588]},"n1819849011":{"id":"n1819849011","loc":[-85.6497358,41.9717593]},"n1819849012":{"id":"n1819849012","loc":[-85.6494676,41.9796796]},"n1819849019":{"id":"n1819849019","loc":[-85.6486093,41.9771034]},"n1819849021":{"id":"n1819849021","loc":[-85.6504546,41.9796556]},"n1819849022":{"id":"n1819849022","loc":[-85.6371294,41.9454154]},"n1819849023":{"id":"n1819849023","loc":[-85.6503436,41.9759249]},"n1819849025":{"id":"n1819849025","loc":[-85.6462382,41.9693822]},"n1819849026":{"id":"n1819849026","loc":[-85.6497573,41.983093]},"n1819849028":{"id":"n1819849028","loc":[-85.6497465,41.9602799]},"n1819849029":{"id":"n1819849029","loc":[-85.6374728,41.9460698]},"n1819849030":{"id":"n1819849030","loc":[-85.6486592,41.9566039]},"n1819849031":{"id":"n1819849031","loc":[-85.6515989,41.9654993]},"n1819849032":{"id":"n1819849032","loc":[-85.6387028,41.9482658]},"n1819849033":{"id":"n1819849033","loc":[-85.6464742,41.9688398]},"n1819849034":{"id":"n1819849034","loc":[-85.6495212,41.9589236]},"n1819849035":{"id":"n1819849035","loc":[-85.6490599,41.9790096]},"n1819849036":{"id":"n1819849036","loc":[-85.6489918,41.9800724]},"n1819849038":{"id":"n1819849038","loc":[-85.6499182,41.9659042]},"n1819849040":{"id":"n1819849040","loc":[-85.639758,41.9490143]},"n1819849041":{"id":"n1819849041","loc":[-85.6514846,41.9755241]},"n1819849042":{"id":"n1819849042","loc":[-85.6436633,41.9540647]},"n1819849045":{"id":"n1819849045","loc":[-85.6475541,41.9726387]},"n1819849046":{"id":"n1819849046","loc":[-85.6488308,41.9718331]},"n1819849047":{"id":"n1819849047","loc":[-85.6377694,41.9460953]},"n1819849048":{"id":"n1819849048","loc":[-85.6490706,41.9804452]},"n1819849049":{"id":"n1819849049","loc":[-85.6485449,41.9766248]},"n1819849051":{"id":"n1819849051","loc":[-85.6483625,41.9790256]},"n1819849052":{"id":"n1819849052","loc":[-85.6490706,41.9585167]},"n1819849053":{"id":"n1819849053","loc":[-85.6425008,41.9522874]},"n1819849054":{"id":"n1819849054","loc":[-85.6475793,41.9632158]},"n1819849055":{"id":"n1819849055","loc":[-85.6408631,41.9499399]},"n1819849056":{"id":"n1819849056","loc":[-85.6483373,41.9814681]},"n1819849057":{"id":"n1819849057","loc":[-85.6313548,41.9442876]},"n1819849058":{"id":"n1819849058","loc":[-85.6432663,41.9529796]},"n1819849059":{"id":"n1819849059","loc":[-85.6487128,41.9582873]},"n1819849060":{"id":"n1819849060","loc":[-85.6482338,41.9817612]},"n1819849062":{"id":"n1819849062","loc":[-85.6485664,41.9788661]},"n1819849063":{"id":"n1819849063","loc":[-85.6373081,41.9448824]},"n1819849064":{"id":"n1819849064","loc":[-85.6472215,41.9557582]},"n1819849065":{"id":"n1819849065","loc":[-85.6348984,41.9440414]},"n1819849066":{"id":"n1819849066","loc":[-85.6501972,41.9647315]},"n1819849067":{"id":"n1819849067","loc":[-85.6489741,41.9808281]},"n1819849068":{"id":"n1819849068","loc":[-85.6420111,41.9515034]},"n1819849069":{"id":"n1819849069","loc":[-85.6397972,41.9488882]},"n1819849070":{"id":"n1819849070","loc":[-85.6499718,41.9593465]},"n1819849071":{"id":"n1819849071","loc":[-85.6486844,41.9811311]},"n1819849072":{"id":"n1819849072","loc":[-85.6390392,41.9474663]},"n1819849074":{"id":"n1819849074","loc":[-85.6495642,41.9616362]},"n1819849075":{"id":"n1819849075","loc":[-85.6483518,41.9791931]},"n1819849076":{"id":"n1819849076","loc":[-85.6478974,41.9833104]},"n1819849077":{"id":"n1819849077","loc":[-85.640155,41.948719]},"n1819849078":{"id":"n1819849078","loc":[-85.6399366,41.9487845]},"n1819849079":{"id":"n1819849079","loc":[-85.6492959,41.9825348]},"n1819849080":{"id":"n1819849080","loc":[-85.6505083,41.9648352]},"n1819849081":{"id":"n1819849081","loc":[-85.6492959,41.9645241]},"n1819849082":{"id":"n1819849082","loc":[-85.6402049,41.9491835]},"n1819849083":{"id":"n1819849083","loc":[-85.6495175,41.9826963]},"n1819849084":{"id":"n1819849084","loc":[-85.6480836,41.9728361]},"n1819849085":{"id":"n1819849085","loc":[-85.6374349,41.9443425]},"n1819849086":{"id":"n1819849086","loc":[-85.6478331,41.9681238]},"n1819849089":{"id":"n1819849089","loc":[-85.639368,41.9486169]},"n1819849092":{"id":"n1819849092","loc":[-85.6503581,41.9788022]},"n1819849093":{"id":"n1819849093","loc":[-85.64862,41.9568014]},"n1819849094":{"id":"n1819849094","loc":[-85.6496999,41.9828877]},"n1819849095":{"id":"n1819849095","loc":[-85.647472,41.972198]},"n1819849096":{"id":"n1819849096","loc":[-85.6485771,41.9644523]},"n1819849097":{"id":"n1819849097","loc":[-85.6388353,41.9480488]},"n1819849099":{"id":"n1819849099","loc":[-85.6472752,41.9683312]},"n1819849104":{"id":"n1819849104","loc":[-85.6479548,41.9836035]},"n1819849105":{"id":"n1819849105","loc":[-85.6462489,41.9691668]},"n1819849107":{"id":"n1819849107","loc":[-85.6511912,41.9746328]},"n1819849108":{"id":"n1819849108","loc":[-85.6498646,41.9714881]},"n1819849111":{"id":"n1819849111","loc":[-85.6488239,41.961684]},"n1819849112":{"id":"n1819849112","loc":[-85.6469356,41.9553812]},"n1819849114":{"id":"n1819849114","loc":[-85.6479548,41.9640853]},"n1819849119":{"id":"n1819849119","loc":[-85.6491565,41.961692]},"n1819849121":{"id":"n1819849121","loc":[-85.651667,41.9656728]},"n1819849124":{"id":"n1819849124","loc":[-85.6388423,41.9484414]},"n1819849126":{"id":"n1819849126","loc":[-85.6371686,41.9450978]},"n1819849127":{"id":"n1819849127","loc":[-85.6502615,41.9656728]},"n1819849129":{"id":"n1819849129","loc":[-85.6498501,41.9613031]},"n1819849131":{"id":"n1819849131","loc":[-85.6513881,41.9653298]},"n1819849133":{"id":"n1819849133","loc":[-85.639883,41.9485291]},"n1819849139":{"id":"n1819849139","loc":[-85.6508693,41.9658264]},"n1819849140":{"id":"n1819849140","loc":[-85.6486806,41.9761642]},"n1819849141":{"id":"n1819849141","loc":[-85.6483159,41.9717613]},"n1819849144":{"id":"n1819849144","loc":[-85.6443714,41.9546232]},"n1819849146":{"id":"n1819849146","loc":[-85.641775,41.9513359]},"n1819849147":{"id":"n1819849147","loc":[-85.6495604,41.9757335]},"n1819849148":{"id":"n1819849148","loc":[-85.6465671,41.9551678]},"n1819849150":{"id":"n1819849150","loc":[-85.6485127,41.9794084]},"n1819849151":{"id":"n1819849151","loc":[-85.6499144,41.9757096]},"n1819849152":{"id":"n1819849152","loc":[-85.6433736,41.9531072]},"n1819849154":{"id":"n1819849154","loc":[-85.6489741,41.9607426]},"n1819849155":{"id":"n1819849155","loc":[-85.640627,41.9507697]},"n1819849156":{"id":"n1819849156","loc":[-85.6509659,41.9743058]},"n1819849157":{"id":"n1819849157","loc":[-85.6486844,41.9704431]},"n1819849158":{"id":"n1819849158","loc":[-85.6498538,41.9711132]},"n1819849159":{"id":"n1819849159","loc":[-85.6358937,41.943719]},"n1819849160":{"id":"n1819849160","loc":[-85.6497358,41.9707702]},"n1819849161":{"id":"n1819849161","loc":[-85.6480476,41.9564842]},"n1819849162":{"id":"n1819849162","loc":[-85.6482982,41.9574556]},"n1819849163":{"id":"n1819849163","loc":[-85.6501757,41.9757794]},"n1819849164":{"id":"n1819849164","loc":[-85.6372973,41.9459916]},"n1819849165":{"id":"n1819849165","loc":[-85.6513773,41.9750775]},"n1819849166":{"id":"n1819849166","loc":[-85.6436418,41.9537455]},"n1819849167":{"id":"n1819849167","loc":[-85.6483625,41.9571524]},"n1819849169":{"id":"n1819849169","loc":[-85.647751,41.9727962]},"n1819849170":{"id":"n1819849170","loc":[-85.6504546,41.9656808]},"n1819849171":{"id":"n1819849171","loc":[-85.6479977,41.971839]},"n1819849172":{"id":"n1819849172","loc":[-85.6482767,41.9642449]},"n1819849174":{"id":"n1819849174","loc":[-85.6414317,41.9512086]},"n1819849176":{"id":"n1819849176","loc":[-85.6469034,41.9685287]},"n1819849179":{"id":"n1819849179","loc":[-85.6408631,41.9497564]},"n1819849182":{"id":"n1819849182","loc":[-85.6476721,41.96384]},"n1819849183":{"id":"n1819849183","loc":[-85.6479725,41.983111]},"n1819849184":{"id":"n1819849184","loc":[-85.640788,41.9500516]},"n1819849185":{"id":"n1819849185","loc":[-85.6427798,41.9528778]},"n1819849186":{"id":"n1819849186","loc":[-85.6435308,41.9534124]},"n1819849187":{"id":"n1819849187","loc":[-85.6483733,41.9821998]},"n1819849189":{"id":"n1819849189","loc":[-85.6351752,41.9440796]},"n1819849191":{"id":"n1819849191","loc":[-85.6487021,41.9601463]},"n1819849192":{"id":"n1819849192","loc":[-85.6363811,41.9437605]},"n1819849193":{"id":"n1819849193","loc":[-85.6490883,41.9759728]},"n1819849194":{"id":"n1819849194","loc":[-85.6423292,41.9520081]},"n1819849195":{"id":"n1819849195","loc":[-85.6500003,41.960242]},"n1819849196":{"id":"n1819849196","loc":[-85.6385778,41.9466443]},"n1819849197":{"id":"n1819849197","loc":[-85.6494032,41.9718789]},"n1819849198":{"id":"n1819849198","loc":[-85.6404339,41.9506501]},"n1819849199":{"id":"n1819849199","loc":[-85.6426226,41.9527083]},"n1819849200":{"id":"n1819849200","loc":[-85.6439101,41.9545035]},"n1819849201":{"id":"n1819849201","loc":[-85.6516563,41.9657845]},"n1819849202":{"id":"n1819849202","loc":[-85.6473395,41.9699585]},"n1819858501":{"id":"n1819858501","loc":[-85.6361263,41.9437126]},"n1819858503":{"id":"n1819858503","loc":[-85.6350068,41.944034]},"n1819858513":{"id":"n1819858513","loc":[-85.6371402,41.9453282]},"n1819858518":{"id":"n1819858518","loc":[-85.6348713,41.9432923]},"n1819858523":{"id":"n1819858523","loc":[-85.6357047,41.943799]},"n1819858526":{"id":"n1819858526","loc":[-85.6349947,41.9435756]},"n1819858531":{"id":"n1819858531","loc":[-85.6350376,41.943827]},"n1820937508":{"id":"n1820937508","loc":[-85.1026013,42.0881722]},"n1820937509":{"id":"n1820937509","loc":[-85.0558088,42.102493]},"n1820937511":{"id":"n1820937511","loc":[-85.3030116,41.9724451]},"n1820937513":{"id":"n1820937513","loc":[-85.0353221,42.1027398]},"n1820937514":{"id":"n1820937514","loc":[-85.0835468,42.1015469]},"n1820937515":{"id":"n1820937515","loc":[-85.2421298,42.0106305]},"n1820937517":{"id":"n1820937517","loc":[-85.0090632,42.0910452]},"n1820937518":{"id":"n1820937518","loc":[-85.086626,42.0948838]},"n1820937520":{"id":"n1820937520","loc":[-85.2552039,42.0015448]},"n1820937521":{"id":"n1820937521","loc":[-85.3739614,41.9969917]},"n1820937522":{"id":"n1820937522","loc":[-85.4831166,41.993898]},"n1820937523":{"id":"n1820937523","loc":[-85.0341084,42.0977657]},"n1820937524":{"id":"n1820937524","loc":[-85.3272802,41.9710333]},"n1820937525":{"id":"n1820937525","loc":[-85.2125568,42.0414521]},"n1820937526":{"id":"n1820937526","loc":[-85.3798022,41.9992458]},"n1820937527":{"id":"n1820937527","loc":[-85.2652021,41.999768]},"n1820937528":{"id":"n1820937528","loc":[-85.3852739,42.0004896]},"n1820937529":{"id":"n1820937529","loc":[-85.3911919,42.0030513]},"n1820937530":{"id":"n1820937530","loc":[-85.5440349,41.9717109]},"n1820937531":{"id":"n1820937531","loc":[-85.2790155,41.9911764]},"n1820937532":{"id":"n1820937532","loc":[-85.4723277,41.9950518]},"n1820937533":{"id":"n1820937533","loc":[-85.5690546,41.9653931]},"n1820937535":{"id":"n1820937535","loc":[-85.5674882,41.9649623]},"n1820937536":{"id":"n1820937536","loc":[-85.6362815,41.9189165]},"n1820937537":{"id":"n1820937537","loc":[-85.5659003,41.963638]},"n1820937539":{"id":"n1820937539","loc":[-85.6391353,41.9122262]},"n1820937540":{"id":"n1820937540","loc":[-85.4834385,41.9894803]},"n1820937541":{"id":"n1820937541","loc":[-85.6399078,41.9160744]},"n1820937542":{"id":"n1820937542","loc":[-85.632874,41.941031]},"n1820937543":{"id":"n1820937543","loc":[-85.1307591,42.0726961]},"n1820937544":{"id":"n1820937544","loc":[-85.6444397,41.9128378]},"n1820937545":{"id":"n1820937545","loc":[-85.6197204,41.9420365]},"n1820937546":{"id":"n1820937546","loc":[-85.1164857,42.0864631]},"n1820937547":{"id":"n1820937547","loc":[-85.6476111,41.9142222]},"n1820937548":{"id":"n1820937548","loc":[-85.2915747,41.9774223]},"n1820937549":{"id":"n1820937549","loc":[-85.6430192,41.9102461]},"n1820937550":{"id":"n1820937550","loc":[-85.1597495,42.0639017]},"n1820937551":{"id":"n1820937551","loc":[-85.5504079,41.9701793]},"n1820937553":{"id":"n1820937553","loc":[-85.2781317,41.9948951]},"n1820937555":{"id":"n1820937555","loc":[-85.3724594,41.997518]},"n1820937556":{"id":"n1820937556","loc":[-85.5629434,41.9665155]},"n1820937557":{"id":"n1820937557","loc":[-85.3791971,41.9990808]},"n1820937558":{"id":"n1820937558","loc":[-85.001891,42.0878843]},"n1820937560":{"id":"n1820937560","loc":[-85.3140838,41.9709056]},"n1820937561":{"id":"n1820937561","loc":[-85.2468032,42.0146987]},"n1820937563":{"id":"n1820937563","loc":[-85.0877378,42.097255]},"n1820937564":{"id":"n1820937564","loc":[-85.2442498,42.0150654]},"n1820937566":{"id":"n1820937566","loc":[-85.3108973,41.9701478]},"n1820937568":{"id":"n1820937568","loc":[-85.0344584,42.1016572]},"n1820937569":{"id":"n1820937569","loc":[-85.2331025,42.0297387]},"n1820937570":{"id":"n1820937570","loc":[-85.5058446,41.9746996]},"n1820937571":{"id":"n1820937571","loc":[-85.5622739,41.9676427]},"n1820937572":{"id":"n1820937572","loc":[-85.2792687,41.9890337]},"n1820937574":{"id":"n1820937574","loc":[-84.9909302,42.08695]},"n1820937575":{"id":"n1820937575","loc":[-85.6218233,41.9418609]},"n1820937576":{"id":"n1820937576","loc":[-85.3577437,41.9931062]},"n1820937577":{"id":"n1820937577","loc":[-85.639028,41.9165853]},"n1820937578":{"id":"n1820937578","loc":[-84.9956576,42.0865348]},"n1820937579":{"id":"n1820937579","loc":[-85.4828376,41.990198]},"n1820937580":{"id":"n1820937580","loc":[-85.3244478,41.9720543]},"n1820937582":{"id":"n1820937582","loc":[-85.0517479,42.1035159]},"n1820937583":{"id":"n1820937583","loc":[-85.225646,42.0338025]},"n1820937584":{"id":"n1820937584","loc":[-84.9941019,42.0862163]},"n1820937586":{"id":"n1820937586","loc":[-85.1051762,42.0879452]},"n1820937587":{"id":"n1820937587","loc":[-85.1245203,42.0753162]},"n1820937588":{"id":"n1820937588","loc":[-85.3250808,41.9719506]},"n1820937589":{"id":"n1820937589","loc":[-85.2720109,41.997933]},"n1820937590":{"id":"n1820937590","loc":[-85.2556653,42.0027248]},"n1820937591":{"id":"n1820937591","loc":[-85.0872483,42.0943544]},"n1820937592":{"id":"n1820937592","loc":[-85.2778353,41.9955023]},"n1820937593":{"id":"n1820937593","loc":[-85.2984733,41.9735538]},"n1820937594":{"id":"n1820937594","loc":[-85.101578,42.0889552]},"n1820937595":{"id":"n1820937595","loc":[-85.3888745,42.0016959]},"n1820937596":{"id":"n1820937596","loc":[-84.9903508,42.0870654]},"n1820937597":{"id":"n1820937597","loc":[-85.6405558,41.9146261]},"n1820937598":{"id":"n1820937598","loc":[-85.6460704,41.9141311]},"n1820937599":{"id":"n1820937599","loc":[-85.0377468,42.1037428]},"n1820937600":{"id":"n1820937600","loc":[-85.2298345,42.0312899]},"n1820937601":{"id":"n1820937601","loc":[-85.1080958,42.0861964]},"n1820937602":{"id":"n1820937602","loc":[-85.6325307,41.9402329]},"n1820937603":{"id":"n1820937603","loc":[-85.1165984,42.0832184]},"n1820937604":{"id":"n1820937604","loc":[-85.6354446,41.9190602]},"n1820937605":{"id":"n1820937605","loc":[-85.1114592,42.0862959]},"n1820937606":{"id":"n1820937606","loc":[-85.0858763,42.1001646]},"n1820937607":{"id":"n1820937607","loc":[-85.0472083,42.1015151]},"n1820937608":{"id":"n1820937608","loc":[-85.0802477,42.1027609]},"n1820937610":{"id":"n1820937610","loc":[-85.0924585,42.0928564]},"n1820937611":{"id":"n1820937611","loc":[-85.0329617,42.09827]},"n1820937612":{"id":"n1820937612","loc":[-85.2814617,41.993465]},"n1820937613":{"id":"n1820937613","loc":[-85.3097708,41.9700282]},"n1820937614":{"id":"n1820937614","loc":[-85.2809427,41.993695]},"n1820937615":{"id":"n1820937615","loc":[-85.0583233,42.1026494]},"n1820937617":{"id":"n1820937617","loc":[-85.2801592,41.9840021]},"n1820937619":{"id":"n1820937619","loc":[-85.1064154,42.0863449]},"n1820937620":{"id":"n1820937620","loc":[-85.0423173,42.1014662]},"n1820937621":{"id":"n1820937621","loc":[-85.2168913,42.0398107]},"n1820937622":{"id":"n1820937622","loc":[-85.2798481,41.9833401]},"n1820937623":{"id":"n1820937623","loc":[-85.0575468,42.1028672]},"n1820937625":{"id":"n1820937625","loc":[-85.0130369,42.0893067]},"n1820937626":{"id":"n1820937626","loc":[-85.0346985,42.1018256]},"n1820937627":{"id":"n1820937627","loc":[-85.2231569,42.0372768]},"n1820937628":{"id":"n1820937628","loc":[-85.2956195,41.9732268]},"n1820937629":{"id":"n1820937629","loc":[-85.1052312,42.086893]},"n1820937630":{"id":"n1820937630","loc":[-85.4813356,41.9958436]},"n1820937631":{"id":"n1820937631","loc":[-85.0961599,42.0914672]},"n1820937632":{"id":"n1820937632","loc":[-85.308419,41.9704749]},"n1820937633":{"id":"n1820937633","loc":[-85.295952,41.9715119]},"n1820937634":{"id":"n1820937634","loc":[-85.3310933,41.9703923]},"n1820937635":{"id":"n1820937635","loc":[-85.2940745,41.9739686]},"n1820937636":{"id":"n1820937636","loc":[-85.3803343,42.000484]},"n1820937637":{"id":"n1820937637","loc":[-85.1174231,42.0845533]},"n1820937638":{"id":"n1820937638","loc":[-85.0095836,42.089839]},"n1820937639":{"id":"n1820937639","loc":[-85.3179354,41.9705866]},"n1820937640":{"id":"n1820937640","loc":[-85.257708,42.0001189]},"n1820937641":{"id":"n1820937641","loc":[-85.2563522,42.0002771]},"n1820937642":{"id":"n1820937642","loc":[-85.3181929,41.970419]},"n1820937643":{"id":"n1820937643","loc":[-85.2911884,41.9757154]},"n1820937644":{"id":"n1820937644","loc":[-85.2714423,41.9975862]},"n1820937645":{"id":"n1820937645","loc":[-85.0193669,42.089888]},"n1820937646":{"id":"n1820937646","loc":[-85.3889818,42.0039921]},"n1820937647":{"id":"n1820937647","loc":[-85.3408093,41.9853965]},"n1820937648":{"id":"n1820937648","loc":[-85.1258091,42.0748332]},"n1820937649":{"id":"n1820937649","loc":[-85.5722561,41.962782]},"n1820937650":{"id":"n1820937650","loc":[-85.3266902,41.9721819]},"n1820937651":{"id":"n1820937651","loc":[-85.1473255,42.065192]},"n1820937652":{"id":"n1820937652","loc":[-85.1462526,42.0655106]},"n1820937653":{"id":"n1820937653","loc":[-85.4641051,42.0013929]},"n1820937654":{"id":"n1820937654","loc":[-85.5620379,41.9700677]},"n1820937655":{"id":"n1820937655","loc":[-85.3226025,41.971121]},"n1820937656":{"id":"n1820937656","loc":[-85.0200965,42.0899516]},"n1820937657":{"id":"n1820937657","loc":[-85.0624714,42.1044711]},"n1820937658":{"id":"n1820937658","loc":[-85.5649562,41.9637178]},"n1820937659":{"id":"n1820937659","loc":[-85.2360315,42.0253315]},"n1820937660":{"id":"n1820937660","loc":[-85.3881449,41.9994475]},"n1820937661":{"id":"n1820937661","loc":[-85.5032911,41.976263]},"n1820937662":{"id":"n1820937662","loc":[-85.481297,41.9871414]},"n1820937663":{"id":"n1820937663","loc":[-85.1167056,42.0841898]},"n1820937664":{"id":"n1820937664","loc":[-85.2891714,41.9787223]},"n1820937665":{"id":"n1820937665","loc":[-85.4393429,42.0058736]},"n1820937666":{"id":"n1820937666","loc":[-85.0077007,42.0895762]},"n1820937667":{"id":"n1820937667","loc":[-85.2736202,41.9979171]},"n1820937668":{"id":"n1820937668","loc":[-84.9935332,42.0859296]},"n1820937669":{"id":"n1820937669","loc":[-85.0622769,42.1046713]},"n1820937670":{"id":"n1820937670","loc":[-85.2309031,42.0311249]},"n1820937671":{"id":"n1820937671","loc":[-85.0343726,42.10069]},"n1820937672":{"id":"n1820937672","loc":[-85.0596551,42.1048612]},"n1820937673":{"id":"n1820937673","loc":[-85.1338597,42.0707449]},"n1820937674":{"id":"n1820937674","loc":[-85.3117663,41.9689194]},"n1820937675":{"id":"n1820937675","loc":[-85.0705649,42.1057499]},"n1820937676":{"id":"n1820937676","loc":[-85.2441425,42.0180944]},"n1820937677":{"id":"n1820937677","loc":[-85.1171174,42.0862692]},"n1820937678":{"id":"n1820937678","loc":[-85.0346824,42.1005519]},"n1820937680":{"id":"n1820937680","loc":[-85.2389927,42.0229245]},"n1820937681":{"id":"n1820937681","loc":[-85.0834892,42.1018642]},"n1820937682":{"id":"n1820937682","loc":[-85.0619443,42.1049459]},"n1820937683":{"id":"n1820937683","loc":[-85.2845366,41.9811868]},"n1820937684":{"id":"n1820937684","loc":[-85.210411,42.0394123]},"n1820937685":{"id":"n1820937685","loc":[-85.4377383,42.0055942]},"n1820937686":{"id":"n1820937686","loc":[-85.2882058,41.9789138]},"n1820937687":{"id":"n1820937687","loc":[-85.2741191,41.9955808]},"n1820937688":{"id":"n1820937688","loc":[-85.3442211,41.9903575]},"n1820937689":{"id":"n1820937689","loc":[-85.2641413,41.9995237]},"n1820937690":{"id":"n1820937690","loc":[-85.2804489,41.9829174]},"n1820937691":{"id":"n1820937691","loc":[-85.5593342,41.9729074]},"n1820937692":{"id":"n1820937692","loc":[-85.3590912,41.9932601]},"n1820937694":{"id":"n1820937694","loc":[-85.4826445,41.9957479]},"n1820937695":{"id":"n1820937695","loc":[-85.4539127,42.0063041]},"n1820937696":{"id":"n1820937696","loc":[-85.2456767,42.0153683]},"n1820937697":{"id":"n1820937697","loc":[-85.5794015,41.9489631]},"n1820937698":{"id":"n1820937698","loc":[-85.4108686,42.0078507]},"n1820937699":{"id":"n1820937699","loc":[-85.0616386,42.1051529]},"n1820937700":{"id":"n1820937700","loc":[-85.4977979,41.978241]},"n1820937701":{"id":"n1820937701","loc":[-85.2488417,42.0086319]},"n1820937702":{"id":"n1820937702","loc":[-85.5588836,41.9728116]},"n1820937703":{"id":"n1820937703","loc":[-85.4557366,42.0051241]},"n1820937705":{"id":"n1820937705","loc":[-85.0723151,42.1056094]},"n1820937706":{"id":"n1820937706","loc":[-85.0057909,42.0887323]},"n1820937707":{"id":"n1820937707","loc":[-85.0756786,42.105677]},"n1820937708":{"id":"n1820937708","loc":[-85.0901504,42.0940001]},"n1820937709":{"id":"n1820937709","loc":[-85.0979999,42.0910213]},"n1820937710":{"id":"n1820937710","loc":[-85.2376301,42.0239686]},"n1820937711":{"id":"n1820937711","loc":[-85.2780671,41.9902299]},"n1820937712":{"id":"n1820937712","loc":[-85.251481,42.0113188]},"n1820937713":{"id":"n1820937713","loc":[-85.3114767,41.9690311]},"n1820937714":{"id":"n1820937714","loc":[-85.2649621,41.9975662]},"n1820937715":{"id":"n1820937715","loc":[-85.283807,41.9813383]},"n1820937716":{"id":"n1820937716","loc":[-85.5515451,41.9703867]},"n1820937717":{"id":"n1820937717","loc":[-85.1176605,42.0850896]},"n1820937718":{"id":"n1820937718","loc":[-85.1069317,42.0862441]},"n1820937719":{"id":"n1820937719","loc":[-85.2739314,41.9976938]},"n1820937720":{"id":"n1820937720","loc":[-85.5550212,41.9702112]},"n1820937721":{"id":"n1820937721","loc":[-85.3076679,41.9719904]},"n1820937722":{"id":"n1820937722","loc":[-85.592319,41.9440316]},"n1820937723":{"id":"n1820937723","loc":[-85.3139979,41.9704031]},"n1820937724":{"id":"n1820937724","loc":[-85.0421134,42.1013149]},"n1820937725":{"id":"n1820937725","loc":[-85.2508373,42.0102741]},"n1820937726":{"id":"n1820937726","loc":[-85.0830922,42.1038821]},"n1820937727":{"id":"n1820937727","loc":[-85.6342473,41.9360031]},"n1820937730":{"id":"n1820937730","loc":[-85.0500192,42.1024942]},"n1820937731":{"id":"n1820937731","loc":[-85.3498644,41.9926221]},"n1820937732":{"id":"n1820937732","loc":[-85.0234117,42.0918903]},"n1820937733":{"id":"n1820937733","loc":[-85.0464425,42.1009408]},"n1820937734":{"id":"n1820937734","loc":[-85.033938,42.099886]},"n1820937736":{"id":"n1820937736","loc":[-85.0152752,42.0886009]},"n1820937737":{"id":"n1820937737","loc":[-85.0441894,42.1012671]},"n1820937738":{"id":"n1820937738","loc":[-85.4668731,41.9979804]},"n1820937739":{"id":"n1820937739","loc":[-85.4407377,42.006033]},"n1820937740":{"id":"n1820937740","loc":[-85.2262253,42.0344878]},"n1820937741":{"id":"n1820937741","loc":[-85.2550001,42.0033706]},"n1820937742":{"id":"n1820937742","loc":[-85.3071422,41.9722617]},"n1820937743":{"id":"n1820937743","loc":[-85.6147852,41.942228]},"n1820937744":{"id":"n1820937744","loc":[-85.0183853,42.0901825]},"n1820937745":{"id":"n1820937745","loc":[-85.6323161,41.9228489]},"n1820937746":{"id":"n1820937746","loc":[-85.0095568,42.0901376]},"n1820937747":{"id":"n1820937747","loc":[-85.2524037,42.0113826]},"n1820937748":{"id":"n1820937748","loc":[-85.3186864,41.9708578]},"n1820937749":{"id":"n1820937749","loc":[-85.2805669,41.9870883]},"n1820937750":{"id":"n1820937750","loc":[-85.0585768,42.1038144]},"n1820937751":{"id":"n1820937751","loc":[-85.2970786,41.9715358]},"n1820937752":{"id":"n1820937752","loc":[-85.1315758,42.0723445]},"n1820937753":{"id":"n1820937753","loc":[-85.2448291,42.0175444]},"n1820937754":{"id":"n1820937754","loc":[-85.2446468,42.0174248]},"n1820937755":{"id":"n1820937755","loc":[-85.229165,42.032129]},"n1820937756":{"id":"n1820937756","loc":[-85.5612654,41.9724926]},"n1820937757":{"id":"n1820937757","loc":[-85.2331776,42.030854]},"n1820937758":{"id":"n1820937758","loc":[-85.2271909,42.0334519]},"n1820937759":{"id":"n1820937759","loc":[-85.1032396,42.0879214]},"n1820937760":{"id":"n1820937760","loc":[-85.0638447,42.1044154]},"n1820937761":{"id":"n1820937761","loc":[-85.1260706,42.0745556]},"n1820937762":{"id":"n1820937762","loc":[-85.3454485,41.99132]},"n1820937763":{"id":"n1820937763","loc":[-85.2639321,41.9980088]},"n1820937764":{"id":"n1820937764","loc":[-85.0837681,42.1013746]},"n1820937765":{"id":"n1820937765","loc":[-85.2808137,41.9869368]},"n1820937766":{"id":"n1820937766","loc":[-85.6338997,41.9309373]},"n1820937767":{"id":"n1820937767","loc":[-85.2267403,42.0332766]},"n1820937768":{"id":"n1820937768","loc":[-85.0605831,42.1052074]},"n1820937769":{"id":"n1820937769","loc":[-85.0259021,42.0930037]},"n1820937770":{"id":"n1820937770","loc":[-85.232963,42.0313162]},"n1820937771":{"id":"n1820937771","loc":[-85.2404947,42.0125381]},"n1820937772":{"id":"n1820937772","loc":[-85.0910892,42.0935742]},"n1820937773":{"id":"n1820937773","loc":[-85.2554829,42.0019435]},"n1820937774":{"id":"n1820937774","loc":[-85.2799339,41.9867773]},"n1820937775":{"id":"n1820937775","loc":[-85.1075432,42.0852767]},"n1820937776":{"id":"n1820937776","loc":[-85.1176927,42.0854001]},"n1820937777":{"id":"n1820937777","loc":[-85.1067064,42.0863357]},"n1820937778":{"id":"n1820937778","loc":[-85.2517492,42.0106333]},"n1820937779":{"id":"n1820937779","loc":[-85.0987174,42.0909031]},"n1820937780":{"id":"n1820937780","loc":[-85.1160083,42.0863994]},"n1820937781":{"id":"n1820937781","loc":[-85.1268645,42.0739703]},"n1820937782":{"id":"n1820937782","loc":[-85.0454702,42.1002852]},"n1820937783":{"id":"n1820937783","loc":[-85.1334145,42.0705418]},"n1820937784":{"id":"n1820937784","loc":[-85.5866542,41.947431]},"n1820937786":{"id":"n1820937786","loc":[-85.2359886,42.0250366]},"n1820937787":{"id":"n1820937787","loc":[-85.3138048,41.9698527]},"n1820937788":{"id":"n1820937788","loc":[-85.1274291,42.0733081]},"n1820937790":{"id":"n1820937790","loc":[-85.6292905,41.9411267]},"n1820937791":{"id":"n1820937791","loc":[-85.5958809,41.9417333]},"n1820937792":{"id":"n1820937792","loc":[-85.1271019,42.0737581]},"n1820937793":{"id":"n1820937793","loc":[-85.2312679,42.0314437]},"n1820937794":{"id":"n1820937794","loc":[-85.1081387,42.0863516]},"n1820937795":{"id":"n1820937795","loc":[-85.2424473,42.0212109]},"n1820937796":{"id":"n1820937796","loc":[-85.2710654,41.9975236]},"n1820937797":{"id":"n1820937797","loc":[-85.4798408,41.9863223]},"n1820937798":{"id":"n1820937798","loc":[-85.035939,42.104296]},"n1820937799":{"id":"n1820937799","loc":[-85.2178139,42.0395398]},"n1820937800":{"id":"n1820937800","loc":[-85.0630709,42.1042614]},"n1820937801":{"id":"n1820937801","loc":[-85.0440124,42.1014861]},"n1820937802":{"id":"n1820937802","loc":[-85.1321874,42.0720458]},"n1820937804":{"id":"n1820937804","loc":[-85.079427,42.1029121]},"n1820937805":{"id":"n1820937805","loc":[-85.2962632,41.9738968]},"n1820937806":{"id":"n1820937806","loc":[-85.6334748,41.9274627]},"n1820937807":{"id":"n1820937807","loc":[-85.1057341,42.0872804]},"n1820937808":{"id":"n1820937808","loc":[-85.4960169,41.9778263]},"n1820937809":{"id":"n1820937809","loc":[-85.2821226,41.9910273]},"n1820937810":{"id":"n1820937810","loc":[-85.0013868,42.0885054]},"n1820937811":{"id":"n1820937811","loc":[-85.2952547,41.9729795]},"n1820937812":{"id":"n1820937812","loc":[-85.1298375,42.0667842]},"n1820937813":{"id":"n1820937813","loc":[-85.1339201,42.0710025]},"n1820937814":{"id":"n1820937814","loc":[-85.0374356,42.103691]},"n1820937815":{"id":"n1820937815","loc":[-85.0061115,42.0880607]},"n1820937817":{"id":"n1820937817","loc":[-85.2398402,42.0226934]},"n1820937818":{"id":"n1820937818","loc":[-85.123501,42.076236]},"n1820937819":{"id":"n1820937819","loc":[-85.1209489,42.0791294]},"n1820937820":{"id":"n1820937820","loc":[-85.0818624,42.1025778]},"n1820937821":{"id":"n1820937821","loc":[-85.4428835,42.0054749]},"n1820937822":{"id":"n1820937822","loc":[-85.4710359,41.9961147]},"n1820937823":{"id":"n1820937823","loc":[-85.4253354,42.006198]},"n1820937824":{"id":"n1820937824","loc":[-85.5486483,41.9709451]},"n1820937825":{"id":"n1820937825","loc":[-85.2303238,42.0310452]},"n1820937826":{"id":"n1820937826","loc":[-85.6450405,41.9136361]},"n1820937828":{"id":"n1820937828","loc":[-85.2606853,41.9964073]},"n1820937830":{"id":"n1820937830","loc":[-85.097383,42.0911447]},"n1820937831":{"id":"n1820937831","loc":[-85.0498207,42.102136]},"n1820937832":{"id":"n1820937832","loc":[-85.1232435,42.0763793]},"n1820937833":{"id":"n1820937833","loc":[-85.394093,42.0055921]},"n1820937834":{"id":"n1820937834","loc":[-85.3566665,41.9928295]},"n1820937835":{"id":"n1820937835","loc":[-85.3543276,41.9920002]},"n1820937837":{"id":"n1820937837","loc":[-85.084668,42.1034932]},"n1820937838":{"id":"n1820937838","loc":[-85.4400296,42.0060649]},"n1820937839":{"id":"n1820937839","loc":[-85.2362246,42.025714]},"n1820937840":{"id":"n1820937840","loc":[-85.0409225,42.1012791]},"n1820937841":{"id":"n1820937841","loc":[-85.2442283,42.019832]},"n1820937842":{"id":"n1820937842","loc":[-85.1123001,42.084824]},"n1820937843":{"id":"n1820937843","loc":[-85.1603074,42.0638061]},"n1820937844":{"id":"n1820937844","loc":[-85.1359744,42.0650646]},"n1820937845":{"id":"n1820937845","loc":[-85.1757569,42.053849]},"n1820937846":{"id":"n1820937846","loc":[-85.5200925,41.9716686]},"n1820937848":{"id":"n1820937848","loc":[-85.5525322,41.9701315]},"n1820937849":{"id":"n1820937849","loc":[-85.0406489,42.10149]},"n1820937850":{"id":"n1820937850","loc":[-85.0142547,42.088825]},"n1820937851":{"id":"n1820937851","loc":[-85.343749,41.9881884]},"n1820937852":{"id":"n1820937852","loc":[-85.074996,42.1060205]},"n1820937853":{"id":"n1820937853","loc":[-85.2436275,42.0136864]},"n1820937854":{"id":"n1820937854","loc":[-85.2641453,41.9980897]},"n1820937856":{"id":"n1820937856","loc":[-85.2802343,41.9870086]},"n1820937857":{"id":"n1820937857","loc":[-85.0099256,42.0909946]},"n1820937858":{"id":"n1820937858","loc":[-85.493957,41.9786079]},"n1820937859":{"id":"n1820937859","loc":[-85.0739405,42.1059795]},"n1820937860":{"id":"n1820937860","loc":[-85.2331605,42.0301423]},"n1820937862":{"id":"n1820937862","loc":[-85.2035231,42.0438425]},"n1820937863":{"id":"n1820937863","loc":[-85.0884928,42.0986971]},"n1820937864":{"id":"n1820937864","loc":[-85.131597,42.0690142]},"n1820937865":{"id":"n1820937865","loc":[-85.3937454,42.0052677]},"n1820937866":{"id":"n1820937866","loc":[-85.2212729,42.0378561]},"n1820937867":{"id":"n1820937867","loc":[-85.0886068,42.0982421]},"n1820937868":{"id":"n1820937868","loc":[-85.0875004,42.0968064]},"n1820937869":{"id":"n1820937869","loc":[-85.0771323,42.1042642]},"n1820937870":{"id":"n1820937870","loc":[-85.0164554,42.0894887]},"n1820937871":{"id":"n1820937871","loc":[-85.6069102,41.9415577]},"n1820937872":{"id":"n1820937872","loc":[-85.3273875,41.9704908]},"n1820937873":{"id":"n1820937873","loc":[-85.3890891,41.9997983]},"n1820937875":{"id":"n1820937875","loc":[-85.5091276,41.9723705]},"n1820937876":{"id":"n1820937876","loc":[-85.0770626,42.1047696]},"n1820937877":{"id":"n1820937877","loc":[-85.612575,41.9419567]},"n1820937878":{"id":"n1820937878","loc":[-85.3868146,42.0036094]},"n1820937879":{"id":"n1820937879","loc":[-85.2722738,41.9981204]},"n1820937880":{"id":"n1820937880","loc":[-85.3064878,41.9723733]},"n1820937882":{"id":"n1820937882","loc":[-85.1270845,42.0727678]},"n1820937884":{"id":"n1820937884","loc":[-85.3316512,41.97923]},"n1820937885":{"id":"n1820937885","loc":[-85.3932519,42.0042472]},"n1820937886":{"id":"n1820937886","loc":[-85.2457411,42.0175444]},"n1820937887":{"id":"n1820937887","loc":[-85.1397509,42.0648415]},"n1820937891":{"id":"n1820937891","loc":[-85.3196735,41.9719665]},"n1820937892":{"id":"n1820937892","loc":[-85.3372473,41.9845033]},"n1820937894":{"id":"n1820937894","loc":[-85.3254778,41.9719745]},"n1820937897":{"id":"n1820937897","loc":[-85.3185148,41.9691268]},"n1820937899":{"id":"n1820937899","loc":[-85.5419106,41.9714556]},"n1820937901":{"id":"n1820937901","loc":[-85.3293509,41.9748368]},"n1820937903":{"id":"n1820937903","loc":[-85.0798078,42.1028365]},"n1820937905":{"id":"n1820937905","loc":[-85.3954191,42.0056025]},"n1820937909":{"id":"n1820937909","loc":[-85.3417534,41.9857155]},"n1820937913":{"id":"n1820937913","loc":[-84.9927822,42.0857107]},"n1820937915":{"id":"n1820937915","loc":[-85.5444212,41.9712801]},"n1820937917":{"id":"n1820937917","loc":[-85.259088,41.9981682]},"n1820937921":{"id":"n1820937921","loc":[-85.2784576,41.9876358]},"n1820937922":{"id":"n1820937922","loc":[-84.9971918,42.087753]},"n1820937924":{"id":"n1820937924","loc":[-85.5310688,41.966899]},"n1820937928":{"id":"n1820937928","loc":[-85.3766436,41.9979326]},"n1820937930":{"id":"n1820937930","loc":[-85.5494852,41.9704346]},"n1820937933":{"id":"n1820937933","loc":[-85.5548281,41.9695412]},"n1820937935":{"id":"n1820937935","loc":[-85.0768588,42.105088]},"n1820937937":{"id":"n1820937937","loc":[-85.2646885,41.9978054]},"n1820937939":{"id":"n1820937939","loc":[-85.2441532,42.0176082]},"n1820937941":{"id":"n1820937941","loc":[-85.105553,42.0877928]},"n1820937943":{"id":"n1820937943","loc":[-85.0879457,42.0958909]},"n1820937944":{"id":"n1820937944","loc":[-85.3187015,41.9704402]},"n1820937945":{"id":"n1820937945","loc":[-85.5624456,41.970626]},"n1820937946":{"id":"n1820937946","loc":[-85.0580176,42.1028644]},"n1820937948":{"id":"n1820937948","loc":[-85.3016061,41.9726286]},"n1820937949":{"id":"n1820937949","loc":[-85.4310388,42.0069418]},"n1820937950":{"id":"n1820937950","loc":[-85.2945144,41.9740723]},"n1820937951":{"id":"n1820937951","loc":[-85.1170222,42.082657]},"n1820937952":{"id":"n1820937952","loc":[-85.0864503,42.0947632]},"n1820937953":{"id":"n1820937953","loc":[-85.4285926,42.0059533]},"n1820937970":{"id":"n1820937970","loc":[-85.3629965,41.9938023]},"n1820937972":{"id":"n1820937972","loc":[-85.2438099,42.0199755]},"n1820937974":{"id":"n1820937974","loc":[-85.1327654,42.0699285]},"n1820937977":{"id":"n1820937977","loc":[-85.1515956,42.0611935]},"n1820937978":{"id":"n1820937978","loc":[-85.0107369,42.0896638]},"n1820937979":{"id":"n1820937979","loc":[-85.1152626,42.0862083]},"n1820937980":{"id":"n1820937980","loc":[-85.4531831,42.0062881]},"n1820937981":{"id":"n1820937981","loc":[-85.0341473,42.0985924]},"n1820937982":{"id":"n1820937982","loc":[-85.0877485,42.0960171]},"n1820937983":{"id":"n1820937983","loc":[-85.2756373,41.9951742]},"n1820937984":{"id":"n1820937984","loc":[-85.2965421,41.9714401]},"n1820937985":{"id":"n1820937985","loc":[-85.2409775,42.0226934]},"n1820937986":{"id":"n1820937986","loc":[-85.0170723,42.0900579]},"n1820937987":{"id":"n1820937987","loc":[-85.1034663,42.0880555]},"n1820937988":{"id":"n1820937988","loc":[-85.0585071,42.1031577]},"n1820937990":{"id":"n1820937990","loc":[-85.0819174,42.1032373]},"n1820937992":{"id":"n1820937992","loc":[-85.0546608,42.1030542]},"n1820937993":{"id":"n1820937993","loc":[-85.0100811,42.0906125]},"n1820937995":{"id":"n1820937995","loc":[-85.6304278,41.9432655]},"n1820937997":{"id":"n1820937997","loc":[-85.0255628,42.092778]},"n1820938011":{"id":"n1820938011","loc":[-85.2316756,42.0317146]},"n1820938012":{"id":"n1820938012","loc":[-85.4067917,42.008042]},"n1820938013":{"id":"n1820938013","loc":[-85.390398,42.0028759]},"n1820938014":{"id":"n1820938014","loc":[-85.0161604,42.0886527]},"n1820938015":{"id":"n1820938015","loc":[-85.125337,42.0744589]},"n1820938016":{"id":"n1820938016","loc":[-85.2151317,42.0404801]},"n1820938017":{"id":"n1820938017","loc":[-85.3165085,41.9706025]},"n1820938018":{"id":"n1820938018","loc":[-85.5641193,41.9640688]},"n1820938019":{"id":"n1820938019","loc":[-85.147583,42.0642203]},"n1820938022":{"id":"n1820938022","loc":[-85.2803781,41.9947886]},"n1820938024":{"id":"n1820938024","loc":[-85.2692469,41.9982053]},"n1820938026":{"id":"n1820938026","loc":[-85.4321975,42.0067505]},"n1820938028":{"id":"n1820938028","loc":[-85.572535,41.9633405]},"n1820938030":{"id":"n1820938030","loc":[-85.3237505,41.9716475]},"n1820938032":{"id":"n1820938032","loc":[-85.6487698,41.9141583]},"n1820938033":{"id":"n1820938033","loc":[-85.0526371,42.1038315]},"n1820938034":{"id":"n1820938034","loc":[-85.088069,42.0978731]},"n1820938035":{"id":"n1820938035","loc":[-85.2516312,42.0102267]},"n1820938039":{"id":"n1820938039","loc":[-85.2731374,41.9982958]},"n1820938040":{"id":"n1820938040","loc":[-85.5453224,41.9713439]},"n1820938041":{"id":"n1820938041","loc":[-85.4480548,42.0049647]},"n1820938043":{"id":"n1820938043","loc":[-85.2504081,42.010322]},"n1820938045":{"id":"n1820938045","loc":[-85.2663447,41.99919]},"n1820938046":{"id":"n1820938046","loc":[-85.0507287,42.102907]},"n1820938047":{"id":"n1820938047","loc":[-85.0408246,42.1024743]},"n1820938048":{"id":"n1820938048","loc":[-85.2796335,41.9866099]},"n1820938050":{"id":"n1820938050","loc":[-85.452475,42.0061127]},"n1820938051":{"id":"n1820938051","loc":[-85.2410569,42.0128147]},"n1820938052":{"id":"n1820938052","loc":[-85.0413302,42.1011477]},"n1820938053":{"id":"n1820938053","loc":[-85.6327409,41.9197627]},"n1820938056":{"id":"n1820938056","loc":[-85.1072039,42.0857994]},"n1820938057":{"id":"n1820938057","loc":[-85.2001114,42.0448145]},"n1820938058":{"id":"n1820938058","loc":[-85.2655347,41.9978186]},"n1820938059":{"id":"n1820938059","loc":[-85.2330918,42.0304874]},"n1820938060":{"id":"n1820938060","loc":[-85.2601113,41.9966545]},"n1820938061":{"id":"n1820938061","loc":[-85.5397863,41.9708494]},"n1820938062":{"id":"n1820938062","loc":[-85.2702085,41.9977217]},"n1820938063":{"id":"n1820938063","loc":[-85.2219982,42.03699]},"n1820938064":{"id":"n1820938064","loc":[-85.0668957,42.105121]},"n1820938065":{"id":"n1820938065","loc":[-85.2328665,42.0270769]},"n1820938066":{"id":"n1820938066","loc":[-85.3189654,41.9694778]},"n1820938067":{"id":"n1820938067","loc":[-85.3814115,42.0022915]},"n1820938068":{"id":"n1820938068","loc":[-85.2759108,41.9956008]},"n1820938069":{"id":"n1820938069","loc":[-85.0391938,42.1034853]},"n1820938070":{"id":"n1820938070","loc":[-85.2850623,41.9810353]},"n1820938071":{"id":"n1820938071","loc":[-85.538074,41.970855]},"n1820938073":{"id":"n1820938073","loc":[-85.1319661,42.0670932]},"n1820938074":{"id":"n1820938074","loc":[-85.2816763,41.9913678]},"n1820938075":{"id":"n1820938075","loc":[-85.3182144,41.9700282]},"n1820938076":{"id":"n1820938076","loc":[-85.5909028,41.9458989]},"n1820938077":{"id":"n1820938077","loc":[-85.4057617,42.0074361]},"n1820938078":{"id":"n1820938078","loc":[-85.2620438,41.9967729]},"n1820938079":{"id":"n1820938079","loc":[-85.1122143,42.0851107]},"n1820938080":{"id":"n1820938080","loc":[-85.2443785,42.0174567]},"n1820938081":{"id":"n1820938081","loc":[-85.0319733,42.0953853]},"n1820938082":{"id":"n1820938082","loc":[-85.0878276,42.09443]},"n1820938083":{"id":"n1820938083","loc":[-85.0271789,42.0935809]},"n1820938084":{"id":"n1820938084","loc":[-85.0326399,42.0974222]},"n1820938085":{"id":"n1820938085","loc":[-85.3989167,42.0065592]},"n1820938086":{"id":"n1820938086","loc":[-85.3263361,41.9721261]},"n1820938087":{"id":"n1820938087","loc":[-85.2547855,42.0037134]},"n1820938088":{"id":"n1820938088","loc":[-85.4373259,42.005746]},"n1820938089":{"id":"n1820938089","loc":[-85.3094275,41.9699245]},"n1820938090":{"id":"n1820938090","loc":[-85.2783246,41.9872793]},"n1820938092":{"id":"n1820938092","loc":[-85.0815633,42.1025169]},"n1820938093":{"id":"n1820938093","loc":[-85.1788511,42.0522134]},"n1820938095":{"id":"n1820938095","loc":[-85.2830345,41.9816733]},"n1820938096":{"id":"n1820938096","loc":[-85.0744984,42.1059835]},"n1820938097":{"id":"n1820938097","loc":[-85.2788396,41.9879333]},"n1820938098":{"id":"n1820938098","loc":[-85.3640093,41.9946531]},"n1820938099":{"id":"n1820938099","loc":[-85.291167,41.9787463]},"n1820938100":{"id":"n1820938100","loc":[-85.0772436,42.1038156]},"n1820938101":{"id":"n1820938101","loc":[-85.00563,42.0887482]},"n1820938102":{"id":"n1820938102","loc":[-85.0326881,42.0961245]},"n1820938104":{"id":"n1820938104","loc":[-85.0530448,42.1038634]},"n1820938105":{"id":"n1820938105","loc":[-85.2625266,41.9970639]},"n1820938106":{"id":"n1820938106","loc":[-85.2827556,41.9823512]},"n1820938107":{"id":"n1820938107","loc":[-85.2784319,41.9910752]},"n1820938108":{"id":"n1820938108","loc":[-85.0882099,42.094393]},"n1820938109":{"id":"n1820938109","loc":[-85.5718484,41.9645371]},"n1820938110":{"id":"n1820938110","loc":[-85.2559764,42.0099317]},"n1820938111":{"id":"n1820938111","loc":[-85.2969284,41.973179]},"n1820938113":{"id":"n1820938113","loc":[-85.3875055,42.0019726]},"n1820938114":{"id":"n1820938114","loc":[-85.4250779,42.0068199]},"n1820938115":{"id":"n1820938115","loc":[-85.0645367,42.104889]},"n1820938116":{"id":"n1820938116","loc":[-85.1636762,42.0623724]},"n1820938117":{"id":"n1820938117","loc":[-85.0757322,42.1055935]},"n1820938118":{"id":"n1820938118","loc":[-85.3695197,41.9981559]},"n1820938120":{"id":"n1820938120","loc":[-85.1297516,42.0671027]},"n1820938121":{"id":"n1820938121","loc":[-85.1057448,42.0875551]},"n1820938122":{"id":"n1820938122","loc":[-85.2805175,41.9943182]},"n1820938123":{"id":"n1820938123","loc":[-85.2545173,42.0040722]},"n1820938124":{"id":"n1820938124","loc":[-84.9966607,42.0871319]},"n1820938125":{"id":"n1820938125","loc":[-85.0099899,42.0904612]},"n1820938126":{"id":"n1820938126","loc":[-85.2489919,42.0091102]},"n1820938127":{"id":"n1820938127","loc":[-85.0342706,42.0979476]},"n1820938128":{"id":"n1820938128","loc":[-85.1080891,42.0855884]},"n1820938129":{"id":"n1820938129","loc":[-85.0128183,42.0905356]},"n1820938130":{"id":"n1820938130","loc":[-85.631608,41.9434251]},"n1820938131":{"id":"n1820938131","loc":[-85.2551975,42.0008524]},"n1820938132":{"id":"n1820938132","loc":[-85.6421823,41.9096233]},"n1820938133":{"id":"n1820938133","loc":[-85.0125059,42.0906284]},"n1820938134":{"id":"n1820938134","loc":[-85.5499358,41.9701793]},"n1820938135":{"id":"n1820938135","loc":[-85.5472107,41.9712323]},"n1820938136":{"id":"n1820938136","loc":[-85.2760758,41.9958691]},"n1820938137":{"id":"n1820938137","loc":[-85.276678,41.9960433]},"n1820938138":{"id":"n1820938138","loc":[-85.0570319,42.1024731]},"n1820938140":{"id":"n1820938140","loc":[-85.2394325,42.0227492]},"n1820938142":{"id":"n1820938142","loc":[-85.5666341,41.9638829]},"n1820938144":{"id":"n1820938144","loc":[-85.258101,41.9996353]},"n1820938147":{"id":"n1820938147","loc":[-85.2129645,42.0413565]},"n1820938149":{"id":"n1820938149","loc":[-84.9962369,42.0868373]},"n1820938151":{"id":"n1820938151","loc":[-85.2570386,42.0084968]},"n1820938153":{"id":"n1820938153","loc":[-85.3971142,42.0050285]},"n1820938155":{"id":"n1820938155","loc":[-85.1072093,42.0855566]},"n1820938157":{"id":"n1820938157","loc":[-85.2840323,41.9920959]},"n1820938159":{"id":"n1820938159","loc":[-85.1187924,42.0816458]},"n1820938161":{"id":"n1820938161","loc":[-85.2681324,41.9985788]},"n1820938163":{"id":"n1820938163","loc":[-85.0887034,42.0984969]},"n1820938165":{"id":"n1820938165","loc":[-85.4133405,42.0073141]},"n1820938166":{"id":"n1820938166","loc":[-85.0097445,42.0902888]},"n1820938167":{"id":"n1820938167","loc":[-85.0828133,42.1037388]},"n1820938168":{"id":"n1820938168","loc":[-85.0549599,42.1030833]},"n1820938169":{"id":"n1820938169","loc":[-85.4571528,42.0010421]},"n1820938178":{"id":"n1820938178","loc":[-85.2706644,41.9975941]},"n1820938180":{"id":"n1820938180","loc":[-85.2258606,42.0335794]},"n1820938182":{"id":"n1820938182","loc":[-85.2832276,41.9814659]},"n1820938184":{"id":"n1820938184","loc":[-85.1082299,42.0860928]},"n1820938185":{"id":"n1820938185","loc":[-85.3839392,42.0022381]},"n1820938186":{"id":"n1820938186","loc":[-85.2772131,41.995905]},"n1820938187":{"id":"n1820938187","loc":[-85.1044895,42.0879214]},"n1820938188":{"id":"n1820938188","loc":[-85.2135267,42.0407087]},"n1820938189":{"id":"n1820938189","loc":[-85.2543993,42.0044628]},"n1820938190":{"id":"n1820938190","loc":[-85.1501793,42.0617351]},"n1820938191":{"id":"n1820938191","loc":[-85.3350587,41.9820469]},"n1820938192":{"id":"n1820938192","loc":[-85.1350731,42.0655735]},"n1820938193":{"id":"n1820938193","loc":[-85.0404008,42.1028843]},"n1820938194":{"id":"n1820938194","loc":[-85.6323161,41.943042]},"n1820938195":{"id":"n1820938195","loc":[-85.1259593,42.0742837]},"n1820938196":{"id":"n1820938196","loc":[-85.4562988,42.0033758]},"n1820938197":{"id":"n1820938197","loc":[-85.256824,42.0056826]},"n1820938198":{"id":"n1820938198","loc":[-85.2742103,41.9963862]},"n1820938199":{"id":"n1820938199","loc":[-85.0380888,42.1037877]},"n1820938200":{"id":"n1820938200","loc":[-85.47404,41.9944721]},"n1820938201":{"id":"n1820938201","loc":[-85.103021,42.087948]},"n1820938202":{"id":"n1820938202","loc":[-85.4030151,42.0065113]},"n1820938203":{"id":"n1820938203","loc":[-85.2113981,42.040735]},"n1820938204":{"id":"n1820938204","loc":[-85.2603433,41.9965137]},"n1820938206":{"id":"n1820938206","loc":[-85.1669378,42.0607634]},"n1820938207":{"id":"n1820938207","loc":[-85.0642027,42.1046076]},"n1820938208":{"id":"n1820938208","loc":[-85.2812428,41.9915696]},"n1820938209":{"id":"n1820938209","loc":[-85.0839559,42.1038343]},"n1820938210":{"id":"n1820938210","loc":[-85.1239946,42.0769368]},"n1820938211":{"id":"n1820938211","loc":[-85.2311177,42.0283042]},"n1820938212":{"id":"n1820938212","loc":[-85.2791614,41.9882682]},"n1820938213":{"id":"n1820938213","loc":[-85.2674941,41.9987582]},"n1820938214":{"id":"n1820938214","loc":[-85.352787,41.9919579]},"n1820938215":{"id":"n1820938215","loc":[-85.0874146,42.0952182]},"n1820938216":{"id":"n1820938216","loc":[-85.0069711,42.0877092]},"n1820938217":{"id":"n1820938217","loc":[-85.2059049,42.0404004]},"n1820938218":{"id":"n1820938218","loc":[-85.2403552,42.0227332]},"n1820938219":{"id":"n1820938219","loc":[-85.2492923,42.0098915]},"n1820938220":{"id":"n1820938220","loc":[-85.269778,41.9979541]},"n1820938221":{"id":"n1820938221","loc":[-85.2097673,42.0389024]},"n1820938222":{"id":"n1820938222","loc":[-85.0845942,42.1032015]},"n1820938223":{"id":"n1820938223","loc":[-84.993206,42.0858142]},"n1820938224":{"id":"n1820938224","loc":[-85.2108187,42.0402729]},"n1820938225":{"id":"n1820938225","loc":[-84.9893959,42.0873043]},"n1820938226":{"id":"n1820938226","loc":[-85.2952332,41.9719984]},"n1820938227":{"id":"n1820938227","loc":[-85.4100961,42.0081536]},"n1820938228":{"id":"n1820938228","loc":[-85.3299088,41.9785696]},"n1820938229":{"id":"n1820938229","loc":[-85.2258176,42.0340097]},"n1820938230":{"id":"n1820938230","loc":[-85.3146739,41.9711449]},"n1820938231":{"id":"n1820938231","loc":[-85.5447645,41.9712801]},"n1820938232":{"id":"n1820938232","loc":[-85.5510087,41.9705941]},"n1820938233":{"id":"n1820938233","loc":[-85.5122389,41.9703445]},"n1820938234":{"id":"n1820938234","loc":[-85.2792687,41.9865381]},"n1820938235":{"id":"n1820938235","loc":[-85.1475229,42.0630151]},"n1820938237":{"id":"n1820938237","loc":[-85.0332889,42.0996034]},"n1820938238":{"id":"n1820938238","loc":[-85.2588882,41.9986877]},"n1820938239":{"id":"n1820938239","loc":[-85.0656458,42.1050892]},"n1820938240":{"id":"n1820938240","loc":[-84.9913915,42.086098]},"n1820938241":{"id":"n1820938241","loc":[-85.4752416,41.9944402]},"n1820938242":{"id":"n1820938242","loc":[-85.1214304,42.0791147]},"n1820938243":{"id":"n1820938243","loc":[-85.0075183,42.0886925]},"n1820938244":{"id":"n1820938244","loc":[-85.1052888,42.0872087]},"n1820938245":{"id":"n1820938245","loc":[-85.3104252,41.9703393]},"n1820938246":{"id":"n1820938246","loc":[-85.232109,42.0318158]},"n1820938247":{"id":"n1820938247","loc":[-85.0756075,42.1059528]},"n1820938248":{"id":"n1820938248","loc":[-85.0075612,42.0890866]},"n1820938249":{"id":"n1820938249","loc":[-85.1013312,42.0897474]},"n1820938250":{"id":"n1820938250","loc":[-85.1168076,42.0828919]},"n1820938251":{"id":"n1820938251","loc":[-85.2951367,41.9723334]},"n1820938252":{"id":"n1820938252","loc":[-85.0879363,42.0976053]},"n1820938253":{"id":"n1820938253","loc":[-85.0354763,42.1021838]},"n1820938254":{"id":"n1820938254","loc":[-85.2379627,42.0236339]},"n1820938255":{"id":"n1820938255","loc":[-85.1308245,42.0685364]},"n1820938256":{"id":"n1820938256","loc":[-85.0914446,42.0934774]},"n1820938257":{"id":"n1820938257","loc":[-85.2436812,42.014069]},"n1820938258":{"id":"n1820938258","loc":[-85.0682529,42.1056106]},"n1820938259":{"id":"n1820938259","loc":[-85.290652,41.9766805]},"n1820938260":{"id":"n1820938260","loc":[-85.0133494,42.0897434]},"n1820938261":{"id":"n1820938261","loc":[-85.2753047,41.9949429]},"n1820938262":{"id":"n1820938262","loc":[-85.0314691,42.0950788]},"n1820938263":{"id":"n1820938263","loc":[-85.3444786,41.9908359]},"n1820938264":{"id":"n1820938264","loc":[-85.0443115,42.1009061]},"n1820938265":{"id":"n1820938265","loc":[-85.0634853,42.1043159]},"n1820938267":{"id":"n1820938267","loc":[-85.3978223,42.0053952]},"n1820938268":{"id":"n1820938268","loc":[-85.0228659,42.0911885]},"n1820938269":{"id":"n1820938269","loc":[-85.0220237,42.0906272]},"n1820938270":{"id":"n1820938270","loc":[-85.1061525,42.0863369]},"n1820938271":{"id":"n1820938271","loc":[-85.2382309,42.0233708]},"n1820938272":{"id":"n1820938272","loc":[-85.310672,41.9702755]},"n1820938273":{"id":"n1820938273","loc":[-85.1448192,42.0652613]},"n1820938274":{"id":"n1820938274","loc":[-85.6036057,41.9403766]},"n1820938275":{"id":"n1820938275","loc":[-85.0778941,42.1032413]},"n1820938276":{"id":"n1820938276","loc":[-85.1279374,42.0723974]},"n1820938277":{"id":"n1820938277","loc":[-85.2806635,41.9847836]},"n1820938278":{"id":"n1820938278","loc":[-85.2653201,41.9976352]},"n1820938279":{"id":"n1820938279","loc":[-85.0351665,42.1001805]},"n1820938280":{"id":"n1820938280","loc":[-85.0718269,42.1056253]},"n1820938281":{"id":"n1820938281","loc":[-85.2574248,42.0075322]},"n1820938282":{"id":"n1820938282","loc":[-85.126666,42.0740778]},"n1820938283":{"id":"n1820938283","loc":[-85.077705,42.1034733]},"n1820938284":{"id":"n1820938284","loc":[-85.3535552,41.9919045]},"n1820938286":{"id":"n1820938286","loc":[-85.2810711,41.9866657]},"n1820938287":{"id":"n1820938287","loc":[-85.4567494,42.0019885]},"n1820938288":{"id":"n1820938288","loc":[-85.2642419,41.9992936]},"n1820938289":{"id":"n1820938289","loc":[-85.2643344,41.9980925]},"n1820938290":{"id":"n1820938290","loc":[-85.3270335,41.9776125]},"n1820938291":{"id":"n1820938291","loc":[-85.1200584,42.0795077]},"n1820938292":{"id":"n1820938292","loc":[-85.2290792,42.0340256]},"n1820938293":{"id":"n1820938293","loc":[-85.6015887,41.9401372]},"n1820938294":{"id":"n1820938294","loc":[-85.5370869,41.970488]},"n1820938295":{"id":"n1820938295","loc":[-85.3108866,41.9698048]},"n1820938297":{"id":"n1820938297","loc":[-85.1556511,42.0628184]},"n1820938298":{"id":"n1820938298","loc":[-85.0027922,42.0875221]},"n1820938300":{"id":"n1820938300","loc":[-85.3873338,42.0040614]},"n1820938301":{"id":"n1820938301","loc":[-85.0350753,42.1004034]},"n1820938302":{"id":"n1820938302","loc":[-85.6239476,41.9411906]},"n1820938304":{"id":"n1820938304","loc":[-85.0118246,42.0897964]},"n1820938306":{"id":"n1820938306","loc":[-85.4796877,41.995275]},"n1820938307":{"id":"n1820938307","loc":[-85.5388636,41.9707856]},"n1820938309":{"id":"n1820938309","loc":[-85.2971902,41.9727773]},"n1820938310":{"id":"n1820938310","loc":[-85.5426831,41.9715513]},"n1820938311":{"id":"n1820938311","loc":[-85.2798373,41.9836671]},"n1820938312":{"id":"n1820938312","loc":[-85.2432198,42.0104017]},"n1820938313":{"id":"n1820938313","loc":[-85.2650412,41.9987554]},"n1820938317":{"id":"n1820938317","loc":[-85.0015423,42.0882386]},"n1820938318":{"id":"n1820938318","loc":[-85.1409783,42.064879]},"n1820938319":{"id":"n1820938319","loc":[-85.1691908,42.058995]},"n1820938320":{"id":"n1820938320","loc":[-85.1059165,42.0864882]},"n1820938321":{"id":"n1820938321","loc":[-85.3664941,41.9965771]},"n1820938323":{"id":"n1820938323","loc":[-85.3143198,41.9710971]},"n1820938324":{"id":"n1820938324","loc":[-85.0016067,42.0880675]},"n1820938325":{"id":"n1820938325","loc":[-85.0148139,42.0887164]},"n1820938326":{"id":"n1820938326","loc":[-85.0324682,42.0959056]},"n1820938327":{"id":"n1820938327","loc":[-85.0898661,42.0939921]},"n1820938328":{"id":"n1820938328","loc":[-85.2556427,42.0004936]},"n1820938329":{"id":"n1820938329","loc":[-85.6287112,41.9407437]},"n1820938330":{"id":"n1820938330","loc":[-84.9913392,42.0866701]},"n1820938331":{"id":"n1820938331","loc":[-85.2685777,41.9984632]},"n1820938332":{"id":"n1820938332","loc":[-85.0078884,42.0901614]},"n1820938333":{"id":"n1820938333","loc":[-84.999642,42.0878616]},"n1820938334":{"id":"n1820938334","loc":[-85.0188909,42.0899186]},"n1820938335":{"id":"n1820938335","loc":[-85.2830238,41.9819843]},"n1820938336":{"id":"n1820938336","loc":[-85.2491421,42.0096204]},"n1820938337":{"id":"n1820938337","loc":[-85.0585701,42.1034295]},"n1820938338":{"id":"n1820938338","loc":[-85.0651965,42.1051636]},"n1820938339":{"id":"n1820938339","loc":[-85.0583944,42.104292]},"n1820938340":{"id":"n1820938340","loc":[-85.119876,42.0801567]},"n1820938341":{"id":"n1820938341","loc":[-85.0943937,42.0931323]},"n1820938342":{"id":"n1820938342","loc":[-85.1504583,42.0613209]},"n1820938343":{"id":"n1820938343","loc":[-85.0425426,42.1019836]},"n1820938345":{"id":"n1820938345","loc":[-84.9991391,42.0878206]},"n1820938346":{"id":"n1820938346","loc":[-85.2563841,42.0094614]},"n1820938347":{"id":"n1820938347","loc":[-85.0515387,42.103297]},"n1820938348":{"id":"n1820938348","loc":[-85.0857261,42.1003636]},"n1820938349":{"id":"n1820938349","loc":[-85.078971,42.1029241]},"n1820938350":{"id":"n1820938350","loc":[-85.5699558,41.958931]},"n1820938351":{"id":"n1820938351","loc":[-85.3181285,41.9696533]},"n1820938352":{"id":"n1820938352","loc":[-85.5998506,41.9402329]},"n1820938353":{"id":"n1820938353","loc":[-85.2567277,42.000317]},"n1820938354":{"id":"n1820938354","loc":[-85.3082795,41.9708338]},"n1820938355":{"id":"n1820938355","loc":[-85.3127856,41.9692784]},"n1820938356":{"id":"n1820938356","loc":[-85.0340775,42.1010721]},"n1820938357":{"id":"n1820938357","loc":[-85.3158111,41.9706583]},"n1820938359":{"id":"n1820938359","loc":[-85.2312035,42.0280412]},"n1820938360":{"id":"n1820938360","loc":[-85.2448613,42.018477]},"n1820938361":{"id":"n1820938361","loc":[-85.29077,41.9759068]},"n1820938364":{"id":"n1820938364","loc":[-85.3677387,41.9976615]},"n1820938365":{"id":"n1820938365","loc":[-85.0785204,42.1030355]},"n1820938366":{"id":"n1820938366","loc":[-85.2262039,42.0333722]},"n1820938367":{"id":"n1820938367","loc":[-85.1226011,42.0780902]},"n1820938368":{"id":"n1820938368","loc":[-85.3229673,41.971129]},"n1820938369":{"id":"n1820938369","loc":[-85.385334,42.0000056]},"n1820938370":{"id":"n1820938370","loc":[-85.000098,42.0879094]},"n1820938372":{"id":"n1820938372","loc":[-85.3852481,42.0025091]},"n1820938373":{"id":"n1820938373","loc":[-85.3770513,41.9982515]},"n1820938374":{"id":"n1820938374","loc":[-85.6278314,41.9405362]},"n1820938375":{"id":"n1820938375","loc":[-85.6355133,41.9344068]},"n1820938376":{"id":"n1820938376","loc":[-85.635642,41.9324753]},"n1820938377":{"id":"n1820938377","loc":[-85.3154463,41.970778]},"n1820938378":{"id":"n1820938378","loc":[-85.0920334,42.093411]},"n1820938379":{"id":"n1820938379","loc":[-85.3269155,41.9722297]},"n1820938381":{"id":"n1820938381","loc":[-85.1134334,42.0849184]},"n1820938382":{"id":"n1820938382","loc":[-85.005968,42.088585]},"n1820938384":{"id":"n1820938384","loc":[-85.1245203,42.0757183]},"n1820938385":{"id":"n1820938385","loc":[-85.020704,42.0905396]},"n1820938386":{"id":"n1820938386","loc":[-85.119585,42.0808984]},"n1820938387":{"id":"n1820938387","loc":[-85.0072447,42.0880117]},"n1820938388":{"id":"n1820938388","loc":[-85.2742908,41.9960273]},"n1820938389":{"id":"n1820938389","loc":[-85.3275807,41.9696852]},"n1820938390":{"id":"n1820938390","loc":[-85.2385635,42.0231556]},"n1820938392":{"id":"n1820938392","loc":[-85.0202856,42.0900778]},"n1820938393":{"id":"n1820938393","loc":[-85.2067847,42.0395398]},"n1820938394":{"id":"n1820938394","loc":[-85.5183544,41.9713495]},"n1820938396":{"id":"n1820938396","loc":[-85.5073037,41.9736787]},"n1820938397":{"id":"n1820938397","loc":[-85.2519638,42.0114225]},"n1820938398":{"id":"n1820938398","loc":[-85.287487,41.9793285]},"n1820938399":{"id":"n1820938399","loc":[-85.2298088,42.0336431]},"n1820938400":{"id":"n1820938400","loc":[-85.229444,42.0339141]},"n1820938401":{"id":"n1820938401","loc":[-85.2421791,42.0220239]},"n1820938402":{"id":"n1820938402","loc":[-85.2976687,41.9737612]},"n1820938403":{"id":"n1820938403","loc":[-85.3622069,41.993473]},"n1820938404":{"id":"n1820938404","loc":[-85.2465458,42.014906]},"n1820938405":{"id":"n1820938405","loc":[-85.5724663,41.9639412]},"n1820938406":{"id":"n1820938406","loc":[-85.3708501,41.9982037]},"n1820938408":{"id":"n1820938408","loc":[-85.2564592,42.0055311]},"n1820938409":{"id":"n1820938409","loc":[-85.1192846,42.0810856]},"n1820938410":{"id":"n1820938410","loc":[-85.5623812,41.971663]},"n1820938411":{"id":"n1820938411","loc":[-85.3221948,41.9719665]},"n1820938412":{"id":"n1820938412","loc":[-85.5168738,41.9710305]},"n1820938413":{"id":"n1820938413","loc":[-85.4546852,42.0061127]},"n1820938414":{"id":"n1820938414","loc":[-85.5896153,41.9463617]},"n1820938415":{"id":"n1820938415","loc":[-85.2978189,41.9722138]},"n1820938416":{"id":"n1820938416","loc":[-85.1021681,42.0883581]},"n1820938417":{"id":"n1820938417","loc":[-85.2797193,41.9912984]},"n1820938419":{"id":"n1820938419","loc":[-85.2362461,42.0248533]},"n1820938420":{"id":"n1820938420","loc":[-85.4833639,41.9846252]},"n1820938422":{"id":"n1820938422","loc":[-85.3281064,41.9689433]},"n1820938424":{"id":"n1820938424","loc":[-85.2416963,42.0130088]},"n1820938425":{"id":"n1820938425","loc":[-85.5718655,41.9564577]},"n1820938426":{"id":"n1820938426","loc":[-85.0512812,42.1030701]},"n1820938427":{"id":"n1820938427","loc":[-85.1273527,42.0723616]},"n1820938428":{"id":"n1820938428","loc":[-85.0215033,42.0904083]},"n1820938429":{"id":"n1820938429","loc":[-85.6169953,41.942228]},"n1820938430":{"id":"n1820938430","loc":[-85.2829165,41.9907243]},"n1820938431":{"id":"n1820938431","loc":[-85.2240796,42.0374203]},"n1820938432":{"id":"n1820938432","loc":[-85.0167598,42.0898442]},"n1820938433":{"id":"n1820938433","loc":[-85.2132649,42.0411334]},"n1820938434":{"id":"n1820938434","loc":[-85.2293839,42.031513]},"n1820938435":{"id":"n1820938435","loc":[-85.1203374,42.0792608]},"n1820938436":{"id":"n1820938436","loc":[-85.109571,42.086268]},"n1820938437":{"id":"n1820938437","loc":[-85.1079026,42.0853842]},"n1820938438":{"id":"n1820938438","loc":[-85.109237,42.0862413]},"n1820938439":{"id":"n1820938439","loc":[-85.2259936,42.0350831]},"n1820938440":{"id":"n1820938440","loc":[-85.3669705,41.99679]},"n1820938441":{"id":"n1820938441","loc":[-85.2418143,42.0223507]},"n1820938442":{"id":"n1820938442","loc":[-85.3101248,41.9702515]},"n1820938443":{"id":"n1820938443","loc":[-85.069315,42.1059688]},"n1820938444":{"id":"n1820938444","loc":[-85.205862,42.0410378]},"n1820938445":{"id":"n1820938445","loc":[-85.0388076,42.1036604]},"n1820938446":{"id":"n1820938446","loc":[-85.2225389,42.0370115]},"n1820938447":{"id":"n1820938447","loc":[-85.3241474,41.9719346]},"n1820938448":{"id":"n1820938448","loc":[-85.3125496,41.9690789]},"n1820938449":{"id":"n1820938449","loc":[-85.1146497,42.0857039]},"n1820938450":{"id":"n1820938450","loc":[-85.1333944,42.0714963]},"n1820938451":{"id":"n1820938451","loc":[-85.5619306,41.9720937]},"n1820938452":{"id":"n1820938452","loc":[-85.2553651,42.0006479]},"n1820938453":{"id":"n1820938453","loc":[-85.3151137,41.9710093]},"n1820938454":{"id":"n1820938454","loc":[-85.2592315,41.9977947]},"n1820938455":{"id":"n1820938455","loc":[-85.2655723,41.9995966]},"n1820938456":{"id":"n1820938456","loc":[-85.4820652,41.9959233]},"n1820938459":{"id":"n1820938459","loc":[-85.450737,42.0055068]},"n1820938460":{"id":"n1820938460","loc":[-85.2428658,42.0205573]},"n1820938461":{"id":"n1820938461","loc":[-85.0835576,42.1021559]},"n1820938462":{"id":"n1820938462","loc":[-85.244636,42.0194733]},"n1820938463":{"id":"n1820938463","loc":[-85.5702562,41.9581332]},"n1820938465":{"id":"n1820938465","loc":[-85.5680031,41.9659515]},"n1820938467":{"id":"n1820938467","loc":[-85.2798752,41.9948353]},"n1820938468":{"id":"n1820938468","loc":[-85.0477407,42.1015537]},"n1820938469":{"id":"n1820938469","loc":[-85.6403842,41.913732]},"n1820938470":{"id":"n1820938470","loc":[-85.0396029,42.103289]},"n1820938471":{"id":"n1820938471","loc":[-85.2824702,41.9907777]},"n1820938472":{"id":"n1820938472","loc":[-85.2969284,41.9735538]},"n1820938474":{"id":"n1820938474","loc":[-85.401041,42.0070853]},"n1820938475":{"id":"n1820938475","loc":[-85.4116625,42.0073883]},"n1820938476":{"id":"n1820938476","loc":[-85.0437764,42.1016214]},"n1820938477":{"id":"n1820938477","loc":[-85.3643269,41.9958436]},"n1820938478":{"id":"n1820938478","loc":[-85.3895182,42.0009465]},"n1820938479":{"id":"n1820938479","loc":[-85.636157,41.9333373]},"n1820938480":{"id":"n1820938480","loc":[-85.2811355,41.9858044]},"n1820938481":{"id":"n1820938481","loc":[-85.0239052,42.092153]},"n1820938482":{"id":"n1820938482","loc":[-85.2558798,42.0053557]},"n1820938483":{"id":"n1820938483","loc":[-85.2544422,42.0047339]},"n1820938484":{"id":"n1820938484","loc":[-85.4864683,41.9843183]},"n1820938485":{"id":"n1820938485","loc":[-85.2554185,42.0031075]},"n1820938486":{"id":"n1820938486","loc":[-85.3082795,41.9712486]},"n1820938487":{"id":"n1820938487","loc":[-85.2433378,42.0133436]},"n1820938488":{"id":"n1820938488","loc":[-85.0216696,42.0904162]},"n1820938489":{"id":"n1820938489","loc":[-85.2546138,42.0050289]},"n1820938490":{"id":"n1820938490","loc":[-85.2717521,41.9977349]},"n1820938491":{"id":"n1820938491","loc":[-85.0100489,42.0908195]},"n1820938492":{"id":"n1820938492","loc":[-85.207879,42.0392211]},"n1820938493":{"id":"n1820938493","loc":[-85.0007363,42.0882836]},"n1820938494":{"id":"n1820938494","loc":[-85.5775303,41.9504097]},"n1820938495":{"id":"n1820938495","loc":[-85.1131584,42.0847683]},"n1820938496":{"id":"n1820938496","loc":[-85.0887825,42.0941633]},"n1820938497":{"id":"n1820938497","loc":[-85.1185926,42.0818938]},"n1820938498":{"id":"n1820938498","loc":[-85.2748487,41.9948712]},"n1820938499":{"id":"n1820938499","loc":[-85.2566952,42.0090788]},"n1820938500":{"id":"n1820938500","loc":[-85.0774757,42.1036234]},"n1820938501":{"id":"n1820938501","loc":[-85.4190869,42.008903]},"n1820938502":{"id":"n1820938502","loc":[-85.1140395,42.0850577]},"n1820938503":{"id":"n1820938503","loc":[-85.1136104,42.0848627]},"n1820938504":{"id":"n1820938504","loc":[-85.5828089,41.9480638]},"n1820938505":{"id":"n1820938505","loc":[-85.625514,41.9405202]},"n1820938506":{"id":"n1820938506","loc":[-85.2063384,42.0398322]},"n1820938507":{"id":"n1820938507","loc":[-85.3395476,41.9851636]},"n1820938508":{"id":"n1820938508","loc":[-85.0328853,42.0963606]},"n1820938510":{"id":"n1820938510","loc":[-85.1170369,42.0843702]},"n1820938511":{"id":"n1820938511","loc":[-85.2784748,41.9868487]},"n1820938512":{"id":"n1820938512","loc":[-85.6310501,41.9435528]},"n1820938514":{"id":"n1820938514","loc":[-85.0334284,42.0981028]},"n1820938515":{"id":"n1820938515","loc":[-84.9912091,42.0868226]},"n1820938516":{"id":"n1820938516","loc":[-85.2806141,41.9940351]},"n1820938517":{"id":"n1820938517","loc":[-85.1233025,42.0776734]},"n1820938518":{"id":"n1820938518","loc":[-85.2047891,42.0429023]},"n1820938519":{"id":"n1820938519","loc":[-85.1475443,42.0648312]},"n1820938520":{"id":"n1820938520","loc":[-85.2644685,41.9990891]},"n1820938521":{"id":"n1820938521","loc":[-85.1056281,42.0872553]},"n1820938522":{"id":"n1820938522","loc":[-85.4813184,41.9930105]},"n1820938523":{"id":"n1820938523","loc":[-85.321551,41.9722936]},"n1820938524":{"id":"n1820938524","loc":[-85.1564664,42.0631211]},"n1820938525":{"id":"n1820938525","loc":[-85.4149885,42.0079144]},"n1820938527":{"id":"n1820938527","loc":[-85.2861888,41.9803653]},"n1820938528":{"id":"n1820938528","loc":[-85.1301379,42.0682178]},"n1820938529":{"id":"n1820938529","loc":[-85.4156537,42.0084247]},"n1820938530":{"id":"n1820938530","loc":[-85.245151,42.0176082]},"n1820938531":{"id":"n1820938531","loc":[-85.457818,42.0001651]},"n1820938532":{"id":"n1820938532","loc":[-85.310951,41.9694538]},"n1820938533":{"id":"n1820938533","loc":[-85.1509089,42.0611298]},"n1820938534":{"id":"n1820938534","loc":[-85.1108249,42.086321]},"n1820938535":{"id":"n1820938535","loc":[-85.1260344,42.0740687]},"n1820938536":{"id":"n1820938536","loc":[-85.4561228,42.0042791]},"n1820938537":{"id":"n1820938537","loc":[-85.2805082,41.9945761]},"n1820938538":{"id":"n1820938538","loc":[-85.273352,41.9981921]},"n1820938539":{"id":"n1820938539","loc":[-85.1084216,42.0864364]},"n1820938540":{"id":"n1820938540","loc":[-85.5009737,41.9773637]},"n1820938541":{"id":"n1820938541","loc":[-85.3960843,42.0051879]},"n1820938542":{"id":"n1820938542","loc":[-85.3425088,41.9865034]},"n1820938545":{"id":"n1820938545","loc":[-84.9937907,42.0860849]},"n1820938546":{"id":"n1820938546","loc":[-85.1084176,42.086065]},"n1820938547":{"id":"n1820938547","loc":[-85.3492851,41.9924786]},"n1820938548":{"id":"n1820938548","loc":[-85.2512235,42.0101147]},"n1820938549":{"id":"n1820938549","loc":[-85.3717298,41.9979326]},"n1820938551":{"id":"n1820938551","loc":[-85.2573712,42.0064081]},"n1820938552":{"id":"n1820938552","loc":[-85.2514596,42.010139]},"n1820938553":{"id":"n1820938553","loc":[-85.416512,42.0088073]},"n1820938554":{"id":"n1820938554","loc":[-85.4365964,42.0061606]},"n1820938555":{"id":"n1820938555","loc":[-85.4552431,42.0057301]},"n1820938556":{"id":"n1820938556","loc":[-85.2916283,41.9778769]},"n1820938557":{"id":"n1820938557","loc":[-85.100709,42.0902968]},"n1820938558":{"id":"n1820938558","loc":[-85.4703064,41.9965771]},"n1820938559":{"id":"n1820938559","loc":[-85.3134722,41.9696134]},"n1820938560":{"id":"n1820938560","loc":[-85.4834213,41.9885768]},"n1820938561":{"id":"n1820938561","loc":[-85.2740641,41.9975236]},"n1820938562":{"id":"n1820938562","loc":[-85.148334,42.0623405]},"n1820938563":{"id":"n1820938563","loc":[-85.2358598,42.0263675]},"n1820938565":{"id":"n1820938565","loc":[-85.2902979,41.9790892]},"n1820938566":{"id":"n1820938566","loc":[-85.2528865,42.0112869]},"n1820938567":{"id":"n1820938567","loc":[-85.2595319,41.9973003]},"n1820938568":{"id":"n1820938568","loc":[-85.071151,42.105689]},"n1820938570":{"id":"n1820938570","loc":[-85.299278,41.9732188]},"n1820938571":{"id":"n1820938571","loc":[-85.0354669,42.1024771]},"n1820938583":{"id":"n1820938583","loc":[-85.3313937,41.972562]},"n1820938585":{"id":"n1820938585","loc":[-85.0756933,42.1058334]},"n1820938587":{"id":"n1820938587","loc":[-85.3130324,41.9694219]},"n1820938590":{"id":"n1820938590","loc":[-85.0934227,42.0931681]},"n1820938592":{"id":"n1820938592","loc":[-85.3517956,41.9922553]},"n1820938593":{"id":"n1820938593","loc":[-85.4023971,42.0065169]},"n1820938594":{"id":"n1820938594","loc":[-85.3506798,41.9925583]},"n1820938595":{"id":"n1820938595","loc":[-85.3673524,41.9971193]},"n1820938596":{"id":"n1820938596","loc":[-85.1073608,42.0853523]},"n1820938597":{"id":"n1820938597","loc":[-85.2976579,41.972477]},"n1820938598":{"id":"n1820938598","loc":[-85.5616517,41.9694295]},"n1820938599":{"id":"n1820938599","loc":[-85.3552074,41.9921915]},"n1820938600":{"id":"n1820938600","loc":[-85.4665126,41.9999953]},"n1820938601":{"id":"n1820938601","loc":[-85.2740695,41.9966226]},"n1820938602":{"id":"n1820938602","loc":[-85.279376,41.9886669]},"n1820938603":{"id":"n1820938603","loc":[-85.0771109,42.1040413]},"n1820938604":{"id":"n1820938604","loc":[-85.2636049,41.9977895]},"n1820938605":{"id":"n1820938605","loc":[-85.3762145,41.9976456]},"n1820938606":{"id":"n1820938606","loc":[-85.2321369,42.0289577]},"n1820938620":{"id":"n1820938620","loc":[-85.4947724,41.9776189]},"n1820938622":{"id":"n1820938622","loc":[-85.1547069,42.0622768]},"n1820938624":{"id":"n1820938624","loc":[-85.0005056,42.0880249]},"n1820938626":{"id":"n1820938626","loc":[-85.0735596,42.1059357]},"n1820938628":{"id":"n1820938628","loc":[-85.4665298,41.99932]},"n1820938629":{"id":"n1820938629","loc":[-85.434515,42.0065273]},"n1820938630":{"id":"n1820938630","loc":[-85.117462,42.0823823]},"n1820938631":{"id":"n1820938631","loc":[-85.0131777,42.0890707]},"n1820938632":{"id":"n1820938632","loc":[-85.0875326,42.0961934]},"n1820938634":{"id":"n1820938634","loc":[-85.6433839,41.9112042]},"n1820938635":{"id":"n1820938635","loc":[-85.1366181,42.064969]},"n1820938636":{"id":"n1820938636","loc":[-85.073109,42.1057925]},"n1820938638":{"id":"n1820938638","loc":[-85.161406,42.0632541]},"n1820938640":{"id":"n1820938640","loc":[-85.6343932,41.9188845]},"n1820938642":{"id":"n1820938642","loc":[-85.2500004,42.010306]},"n1820938644":{"id":"n1820938644","loc":[-85.291918,41.9753166]},"n1820938663":{"id":"n1820938663","loc":[-85.2841611,41.9916812]},"n1820938664":{"id":"n1820938664","loc":[-85.1052955,42.0868134]},"n1820938665":{"id":"n1820938665","loc":[-85.4606118,42.0005534]},"n1820938666":{"id":"n1820938666","loc":[-85.5672736,41.9642922]},"n1820938667":{"id":"n1820938667","loc":[-85.6348481,41.9316932]},"n1820938668":{"id":"n1820938668","loc":[-85.0224904,42.0909576]},"n1820938669":{"id":"n1820938669","loc":[-85.0133856,42.0899755]},"n1820938670":{"id":"n1820938670","loc":[-85.344779,41.991139]},"n1820938671":{"id":"n1820938671","loc":[-85.632874,41.9425313]},"n1820938673":{"id":"n1820938673","loc":[-85.4941501,41.9779698]},"n1820938675":{"id":"n1820938675","loc":[-85.0862559,42.0997519]},"n1820938676":{"id":"n1820938676","loc":[-85.0097874,42.0898032]},"n1820938678":{"id":"n1820938678","loc":[-84.9913553,42.0863675]},"n1820938680":{"id":"n1820938680","loc":[-85.0533666,42.1038315]},"n1820938682":{"id":"n1820938682","loc":[-85.2950294,41.9743914]},"n1820938684":{"id":"n1820938684","loc":[-85.2517385,42.0104499]},"n1820938686":{"id":"n1820938686","loc":[-85.0247971,42.0922514]},"n1820938688":{"id":"n1820938688","loc":[-85.0807037,42.1026017]},"n1820938690":{"id":"n1820938690","loc":[-85.52462,41.9722748]},"n1820938694":{"id":"n1820938694","loc":[-85.2586535,41.9988818]},"n1820938695":{"id":"n1820938695","loc":[-85.0931612,42.092948]},"n1820938697":{"id":"n1820938697","loc":[-85.2470822,42.016564]},"n1820938698":{"id":"n1820938698","loc":[-85.4143018,42.0075158]},"n1820938699":{"id":"n1820938699","loc":[-85.0771484,42.104487]},"n1820938700":{"id":"n1820938700","loc":[-85.0291208,42.0942775]},"n1820938701":{"id":"n1820938701","loc":[-85.6367964,41.9185971]},"n1820938702":{"id":"n1820938702","loc":[-85.085419,42.1010693]},"n1820938703":{"id":"n1820938703","loc":[-85.0583877,42.1040584]},"n1820938705":{"id":"n1820938705","loc":[-85.2573379,42.0003182]},"n1820938706":{"id":"n1820938706","loc":[-85.2655937,41.9981575]},"n1820938707":{"id":"n1820938707","loc":[-85.023181,42.0915758]},"n1820938708":{"id":"n1820938708","loc":[-85.2318687,42.0274674]},"n1820938709":{"id":"n1820938709","loc":[-85.1056389,42.0866184]},"n1820938710":{"id":"n1820938710","loc":[-85.5276265,41.9700978]},"n1820938711":{"id":"n1820938711","loc":[-85.0864128,42.0945761]},"n1820938712":{"id":"n1820938712","loc":[-84.9897071,42.0871888]},"n1820938714":{"id":"n1820938714","loc":[-85.1328845,42.0665611]},"n1820938715":{"id":"n1820938715","loc":[-85.0336537,42.0991377]},"n1820938716":{"id":"n1820938716","loc":[-85.087597,42.0986692]},"n1820938717":{"id":"n1820938717","loc":[-85.1241394,42.0761882]},"n1820938718":{"id":"n1820938718","loc":[-85.1176002,42.0847723]},"n1820938719":{"id":"n1820938719","loc":[-85.2423615,42.0216572]},"n1820938721":{"id":"n1820938721","loc":[-85.2196378,42.0387908]},"n1820938722":{"id":"n1820938722","loc":[-85.0164272,42.0890082]},"n1820938723":{"id":"n1820938723","loc":[-85.5917182,41.9451807]},"n1820938724":{"id":"n1820938724","loc":[-85.2458806,42.0086638]},"n1820938725":{"id":"n1820938725","loc":[-85.1264474,42.0740527]},"n1820938726":{"id":"n1820938726","loc":[-85.1961631,42.04738]},"n1820938727":{"id":"n1820938727","loc":[-85.2784643,41.9943648]},"n1820938728":{"id":"n1820938728","loc":[-85.2905554,41.9763216]},"n1820938729":{"id":"n1820938729","loc":[-85.2913386,41.9771511]},"n1820938730":{"id":"n1820938730","loc":[-85.0112519,42.0895683]},"n1820938732":{"id":"n1820938732","loc":[-85.4290261,42.0064531]},"n1820938733":{"id":"n1820938733","loc":[-85.3867073,42.0031629]},"n1820938734":{"id":"n1820938734","loc":[-85.4943647,41.9836005]},"n1820938735":{"id":"n1820938735","loc":[-85.4900303,41.9860728]},"n1820938736":{"id":"n1820938736","loc":[-85.0866153,42.0944539]},"n1820938737":{"id":"n1820938737","loc":[-85.0869532,42.0990911]},"n1820938738":{"id":"n1820938738","loc":[-85.6321659,41.9208851]},"n1820938739":{"id":"n1820938739","loc":[-85.5930485,41.9433453]},"n1820938740":{"id":"n1820938740","loc":[-85.0406851,42.102733]},"n1820938741":{"id":"n1820938741","loc":[-85.1051131,42.0869846]},"n1820938742":{"id":"n1820938742","loc":[-85.1377554,42.0648893]},"n1820938743":{"id":"n1820938743","loc":[-85.2795694,41.994604]},"n1820938745":{"id":"n1820938745","loc":[-85.4948153,41.9826594]},"n1820938746":{"id":"n1820938746","loc":[-85.4488916,42.0050923]},"n1820938747":{"id":"n1820938747","loc":[-85.1052526,42.0866144]},"n1820938748":{"id":"n1820938748","loc":[-85.1468749,42.0653991]},"n1820938749":{"id":"n1820938749","loc":[-85.0856886,42.1006104]},"n1820938750":{"id":"n1820938750","loc":[-85.2144022,42.0404004]},"n1820938751":{"id":"n1820938751","loc":[-85.277771,41.9907458]},"n1820938752":{"id":"n1820938752","loc":[-85.1474542,42.0636149]},"n1820938753":{"id":"n1820938753","loc":[-85.0820515,42.1028075]},"n1820938754":{"id":"n1820938754","loc":[-85.1122948,42.08525]},"n1820938756":{"id":"n1820938756","loc":[-85.0173352,42.0901933]},"n1820938757":{"id":"n1820938757","loc":[-85.2259721,42.0354018]},"n1820938758":{"id":"n1820938758","loc":[-85.0872389,42.0987795]},"n1820938759":{"id":"n1820938759","loc":[-85.2291436,42.031874]},"n1820938760":{"id":"n1820938760","loc":[-85.3802485,42.0016002]},"n1820938761":{"id":"n1820938761","loc":[-85.3945822,42.0057938]},"n1820938762":{"id":"n1820938762","loc":[-85.5273237,41.9713017]},"n1820938763":{"id":"n1820938763","loc":[-85.2868862,41.9798629]},"n1820938764":{"id":"n1820938764","loc":[-85.2516677,42.0107899]},"n1820938766":{"id":"n1820938766","loc":[-85.3183002,41.9693103]},"n1820938768":{"id":"n1820938768","loc":[-85.2159042,42.0401932]},"n1820938770":{"id":"n1820938770","loc":[-85.0094481,42.0911141]},"n1820938771":{"id":"n1820938771","loc":[-85.0244538,42.0922155]},"n1820938772":{"id":"n1820938772","loc":[-85.231697,42.028862]},"n1820938773":{"id":"n1820938773","loc":[-85.2102394,42.0390617]},"n1820938774":{"id":"n1820938774","loc":[-85.2463419,42.0151212]},"n1820938775":{"id":"n1820938775","loc":[-85.0726195,42.1056424]},"n1820938776":{"id":"n1820938776","loc":[-85.0060431,42.0883262]},"n1820938778":{"id":"n1820938778","loc":[-85.425889,42.0056982]},"n1820938779":{"id":"n1820938779","loc":[-85.1183042,42.0820638]},"n1820938780":{"id":"n1820938780","loc":[-85.441596,42.0058257]},"n1820938781":{"id":"n1820938781","loc":[-85.1124879,42.0847086]},"n1820938782":{"id":"n1820938782","loc":[-85.2452733,42.0153894]},"n1820938783":{"id":"n1820938783","loc":[-85.2741191,41.9969244]},"n1820938784":{"id":"n1820938784","loc":[-85.2829487,41.9822236]},"n1820938785":{"id":"n1820938785","loc":[-85.3202743,41.972142]},"n1820938786":{"id":"n1820938786","loc":[-85.2345402,42.0266465]},"n1820938787":{"id":"n1820938787","loc":[-85.3037626,41.9724611]},"n1820938789":{"id":"n1820938789","loc":[-85.2474792,42.0161973]},"n1820938790":{"id":"n1820938790","loc":[-85.2951045,41.9727323]},"n1820938791":{"id":"n1820938791","loc":[-85.322345,41.9712726]},"n1820938792":{"id":"n1820938792","loc":[-85.2402372,42.0110394]},"n1820938793":{"id":"n1820938793","loc":[-85.5135693,41.9698659]},"n1820938794":{"id":"n1820938794","loc":[-85.4695339,41.9967366]},"n1820938796":{"id":"n1820938796","loc":[-85.0418492,42.1011131]},"n1820938797":{"id":"n1820938797","loc":[-85.3334107,41.9806337]},"n1820938798":{"id":"n1820938798","loc":[-85.5625314,41.9711685]},"n1820938799":{"id":"n1820938799","loc":[-85.3755707,41.9973585]},"n1820938800":{"id":"n1820938800","loc":[-85.5227532,41.9722429]},"n1820938801":{"id":"n1820938801","loc":[-85.4267687,42.0052836]},"n1820938803":{"id":"n1820938803","loc":[-85.0284704,42.0940837]},"n1820938804":{"id":"n1820938804","loc":[-85.015585,42.0885305]},"n1820938805":{"id":"n1820938805","loc":[-85.0765905,42.1053865]},"n1820938806":{"id":"n1820938806","loc":[-85.2614953,41.9964551]},"n1820938808":{"id":"n1820938808","loc":[-85.0307355,42.0947313]},"n1820938810":{"id":"n1820938810","loc":[-85.3894753,42.0003565]},"n1820938812":{"id":"n1820938812","loc":[-85.0868848,42.095006]},"n1820938813":{"id":"n1820938813","loc":[-85.3854198,42.0009465]},"n1820938814":{"id":"n1820938814","loc":[-85.2659692,41.9993534]},"n1820938815":{"id":"n1820938815","loc":[-85.1234259,42.0765266]},"n1820938816":{"id":"n1820938816","loc":[-85.1426906,42.0648893]},"n1820938818":{"id":"n1820938818","loc":[-85.1014533,42.0893067]},"n1820938819":{"id":"n1820938819","loc":[-85.0883064,42.098067]},"n1820938820":{"id":"n1820938820","loc":[-85.0503156,42.102704]},"n1820938821":{"id":"n1820938821","loc":[-85.1179649,42.0821884]},"n1820938822":{"id":"n1820938822","loc":[-85.3484697,41.9921596]},"n1820938823":{"id":"n1820938823","loc":[-85.3732962,41.9970874]},"n1820938824":{"id":"n1820938824","loc":[-85.2784104,41.9898312]},"n1820938825":{"id":"n1820938825","loc":[-85.4441709,42.0052198]},"n1820938826":{"id":"n1820938826","loc":[-85.3925438,42.0038326]},"n1820938829":{"id":"n1820938829","loc":[-85.5717582,41.9621861]},"n1820938830":{"id":"n1820938830","loc":[-85.0866314,42.0995051]},"n1820938831":{"id":"n1820938831","loc":[-85.576672,41.9522769]},"n1820938832":{"id":"n1820938832","loc":[-85.1587238,42.0636205]},"n1820938833":{"id":"n1820938833","loc":[-85.3804245,41.9999155]},"n1820938834":{"id":"n1820938834","loc":[-85.280083,41.9948843]},"n1820938836":{"id":"n1820938836","loc":[-85.561892,41.9686693]},"n1820938837":{"id":"n1820938837","loc":[-85.0158975,42.0885253]},"n1820938838":{"id":"n1820938838","loc":[-85.4248204,42.007633]},"n1820938839":{"id":"n1820938839","loc":[-85.0352738,42.1039657]},"n1820938840":{"id":"n1820938840","loc":[-85.211956,42.0411812]},"n1820938841":{"id":"n1820938841","loc":[-85.4816575,41.9908997]},"n1820938842":{"id":"n1820938842","loc":[-85.3807635,42.0020308]},"n1820938843":{"id":"n1820938843","loc":[-85.0100865,42.0898521]},"n1820938844":{"id":"n1820938844","loc":[-85.0103936,42.0897434]},"n1820938848":{"id":"n1820938848","loc":[-85.2430052,42.0131363]},"n1820938849":{"id":"n1820938849","loc":[-85.112559,42.0853723]},"n1820938851":{"id":"n1820938851","loc":[-85.3641553,41.9952535]},"n1820938852":{"id":"n1820938852","loc":[-85.2087373,42.0390777]},"n1820938853":{"id":"n1820938853","loc":[-85.2473933,42.0148263]},"n1820938854":{"id":"n1820938854","loc":[-85.0213464,42.090509]},"n1820938855":{"id":"n1820938855","loc":[-85.0673208,42.1052353]},"n1820938856":{"id":"n1820938856","loc":[-85.1003053,42.0905528]},"n1820938857":{"id":"n1820938857","loc":[-85.2617367,41.9965389]},"n1820938858":{"id":"n1820938858","loc":[-85.280363,41.9916015]},"n1820938859":{"id":"n1820938859","loc":[-85.0038866,42.0873469]},"n1820938860":{"id":"n1820938860","loc":[-85.2476401,42.0151451]},"n1820938861":{"id":"n1820938861","loc":[-85.193717,42.0499294]},"n1820938862":{"id":"n1820938862","loc":[-85.3478689,41.9917609]},"n1820938863":{"id":"n1820938863","loc":[-85.5638017,41.9648881]},"n1820938864":{"id":"n1820938864","loc":[-85.4356308,42.0064476]},"n1820938865":{"id":"n1820938865","loc":[-85.0561722,42.1023509]},"n1820938867":{"id":"n1820938867","loc":[-85.2256031,42.0356034]},"n1820938868":{"id":"n1820938868","loc":[-85.6102576,41.9420844]},"n1820938869":{"id":"n1820938869","loc":[-85.2285213,42.0339938]},"n1820938870":{"id":"n1820938870","loc":[-85.0326238,42.0978003]},"n1820938871":{"id":"n1820938871","loc":[-85.0131389,42.0903736]},"n1820938872":{"id":"n1820938872","loc":[-85.2550859,42.0012259]},"n1820938873":{"id":"n1820938873","loc":[-85.1130029,42.0846966]},"n1820938874":{"id":"n1820938874","loc":[-85.1579041,42.06336]},"n1820938875":{"id":"n1820938875","loc":[-85.0430522,42.1020234]},"n1820938876":{"id":"n1820938876","loc":[-85.2786679,41.9865935]},"n1820938877":{"id":"n1820938877","loc":[-85.1221666,42.0788706]},"n1820938878":{"id":"n1820938878","loc":[-85.2554614,42.0103303]},"n1820938879":{"id":"n1820938879","loc":[-85.2349801,42.0265748]},"n1820938880":{"id":"n1820938880","loc":[-85.0997434,42.0907864]},"n1820938881":{"id":"n1820938881","loc":[-85.0045464,42.0878167]},"n1820938882":{"id":"n1820938882","loc":[-85.2728048,41.9982519]},"n1820938883":{"id":"n1820938883","loc":[-85.3111333,41.9691587]},"n1820938884":{"id":"n1820938884","loc":[-85.3219802,41.9721899]},"n1820938885":{"id":"n1820938885","loc":[-85.3091378,41.9699325]},"n1820938887":{"id":"n1820938887","loc":[-85.4242367,42.0085203]},"n1820938888":{"id":"n1820938888","loc":[-84.9968377,42.0874504]},"n1820938890":{"id":"n1820938890","loc":[-85.5443139,41.9714078]},"n1820938891":{"id":"n1820938891","loc":[-85.6404013,41.9154676]},"n1820938892":{"id":"n1820938892","loc":[-85.3644986,41.9962582]},"n1820938893":{"id":"n1820938893","loc":[-85.0496772,42.1018323]},"n1820938894":{"id":"n1820938894","loc":[-85.297261,41.9737373]},"n1820938895":{"id":"n1820938895","loc":[-85.0327096,42.098071]},"n1820938896":{"id":"n1820938896","loc":[-85.3856773,41.9996867]},"n1820938897":{"id":"n1820938897","loc":[-85.0493862,42.1015509]},"n1820938898":{"id":"n1820938898","loc":[-84.9969879,42.0876614]},"n1820938899":{"id":"n1820938899","loc":[-85.0848625,42.1013587]},"n1820938900":{"id":"n1820938900","loc":[-85.5853195,41.9479201]},"n1820938901":{"id":"n1820938901","loc":[-85.6329169,41.9387964]},"n1820938902":{"id":"n1820938902","loc":[-85.0843046,42.1029468]},"n1820938903":{"id":"n1820938903","loc":[-85.1228747,42.0778474]},"n1820938904":{"id":"n1820938904","loc":[-85.4855456,41.984095]},"n1820938905":{"id":"n1820938905","loc":[-85.0573269,42.1026801]},"n1820938906":{"id":"n1820938906","loc":[-85.2425868,42.0131523]},"n1820938907":{"id":"n1820938907","loc":[-85.1149622,42.0860053]},"n1820938908":{"id":"n1820938908","loc":[-85.4833097,41.9951578]},"n1820938909":{"id":"n1820938909","loc":[-85.075979,42.1056372]},"n1820938910":{"id":"n1820938910","loc":[-85.0338509,42.0977139]},"n1820938911":{"id":"n1820938911","loc":[-85.6384272,41.9115715]},"n1820938912":{"id":"n1820938912","loc":[-85.0458363,42.1004074]},"n1820938913":{"id":"n1820938913","loc":[-85.0592138,42.1048305]},"n1820938914":{"id":"n1820938914","loc":[-85.2807493,41.9916653]},"n1820938915":{"id":"n1820938915","loc":[-85.1103274,42.0864193]},"n1820938916":{"id":"n1820938916","loc":[-85.6267156,41.9404404]},"n1820938918":{"id":"n1820938918","loc":[-85.0331374,42.0982911]},"n1820938919":{"id":"n1820938919","loc":[-85.5637331,41.965409]},"n1820938920":{"id":"n1820938920","loc":[-85.5457515,41.9714237]},"n1820938922":{"id":"n1820938922","loc":[-85.082073,42.1030104]},"n1820938923":{"id":"n1820938923","loc":[-85.0780765,42.103102]},"n1820938924":{"id":"n1820938924","loc":[-85.4208035,42.0089508]},"n1820938925":{"id":"n1820938925","loc":[-85.3469934,41.9914795]},"n1820938926":{"id":"n1820938926","loc":[-85.0322,42.095619]},"n1820938927":{"id":"n1820938927","loc":[-85.4784431,41.9949401]},"n1820938928":{"id":"n1820938928","loc":[-85.1303095,42.0667523]},"n1820938929":{"id":"n1820938929","loc":[-85.2463784,42.0084781]},"n1820938930":{"id":"n1820938930","loc":[-85.6299986,41.9427707]},"n1820938931":{"id":"n1820938931","loc":[-85.6325907,41.9238499]},"n1820938932":{"id":"n1820938932","loc":[-85.4808464,41.9914476]},"n1820938934":{"id":"n1820938934","loc":[-85.2411599,42.0105292]},"n1820938935":{"id":"n1820938935","loc":[-85.0163213,42.0892379]},"n1820938936":{"id":"n1820938936","loc":[-85.3290934,41.9682322]},"n1820938937":{"id":"n1820938937","loc":[-85.4925623,41.9853231]},"n1820938938":{"id":"n1820938938","loc":[-85.0338294,42.09892]},"n1820938940":{"id":"n1820938940","loc":[-85.4174561,42.008903]},"n1820938941":{"id":"n1820938941","loc":[-85.1165595,42.0838845]},"n1820938942":{"id":"n1820938942","loc":[-85.2954585,41.9717192]},"n1820938943":{"id":"n1820938943","loc":[-85.6330199,41.9257338]},"n1820938944":{"id":"n1820938944","loc":[-85.2294654,42.0324478]},"n1820938945":{"id":"n1820938945","loc":[-85.5601282,41.9728914]},"n1820938946":{"id":"n1820938946","loc":[-85.1176324,42.08568]},"n1820938947":{"id":"n1820938947","loc":[-85.0210245,42.0906005]},"n1820938948":{"id":"n1820938948","loc":[-85.0251887,42.09253]},"n1820938949":{"id":"n1820938949","loc":[-85.0895832,42.0939551]},"n1820938950":{"id":"n1820938950","loc":[-84.9915109,42.085842]},"n1820938951":{"id":"n1820938951","loc":[-85.2187366,42.0393486]},"n1820938952":{"id":"n1820938952","loc":[-85.006605,42.087579]},"n1820938953":{"id":"n1820938953","loc":[-85.046641,42.1012393]},"n1820938954":{"id":"n1820938954","loc":[-85.052102,42.103695]},"n1820938955":{"id":"n1820938955","loc":[-85.283925,41.9912825]},"n1820938956":{"id":"n1820938956","loc":[-85.2326626,42.0316349]},"n1820938957":{"id":"n1820938957","loc":[-85.1174298,42.0859694]},"n1820938958":{"id":"n1820938958","loc":[-85.3802056,41.9994794]},"n1820938959":{"id":"n1820938959","loc":[-85.4586334,41.9999737]},"n1820938960":{"id":"n1820938960","loc":[-85.4302234,42.0069418]},"n1820938961":{"id":"n1820938961","loc":[-85.092201,42.0930674]},"n1820938962":{"id":"n1820938962","loc":[-85.3684511,41.9979382]},"n1820938963":{"id":"n1820938963","loc":[-85.4618735,42.0011856]},"n1820938964":{"id":"n1820938964","loc":[-85.4828205,41.9877793]},"n1820938965":{"id":"n1820938965","loc":[-85.0837789,42.1025726]},"n1820938966":{"id":"n1820938966","loc":[-85.0176195,42.090253]},"n1820938967":{"id":"n1820938967","loc":[-85.3801627,42.001074]},"n1820938968":{"id":"n1820938968","loc":[-85.4767007,41.994488]},"n1820938969":{"id":"n1820938969","loc":[-85.274268,41.9957495]},"n1820938970":{"id":"n1820938970","loc":[-85.2977438,41.9719506]},"n1820938971":{"id":"n1820938971","loc":[-85.2425546,42.0208682]},"n1820938972":{"id":"n1820938972","loc":[-85.2557082,42.002382]},"n1820938973":{"id":"n1820938973","loc":[-85.3187937,41.9691986]},"n1820938975":{"id":"n1820938975","loc":[-85.2448077,42.0153045]},"n1820938977":{"id":"n1820938977","loc":[-85.0343015,42.0997718]},"n1820938978":{"id":"n1820938978","loc":[-85.2449364,42.01874]},"n1820938979":{"id":"n1820938979","loc":[-85.2598391,41.9969602]},"n1820938980":{"id":"n1820938980","loc":[-85.4294724,42.0067665]},"n1820938981":{"id":"n1820938981","loc":[-85.428082,42.0055124]},"n1820938983":{"id":"n1820938983","loc":[-85.5436315,41.9717484]},"n1820938985":{"id":"n1820938985","loc":[-85.5978336,41.9407437]},"n1820938986":{"id":"n1820938986","loc":[-85.491661,41.9860249]},"n1820938987":{"id":"n1820938987","loc":[-85.4942789,41.9801392]},"n1820938988":{"id":"n1820938988","loc":[-85.0416306,42.1010841]},"n1820938989":{"id":"n1820938989","loc":[-85.2653644,41.9984433]},"n1820938990":{"id":"n1820938990","loc":[-85.1028266,42.0881124]},"n1820938991":{"id":"n1820938991","loc":[-85.0163146,42.0887932]},"n1820938992":{"id":"n1820938992","loc":[-85.5282209,41.9678112]},"n1820938993":{"id":"n1820938993","loc":[-85.5442752,41.9715888]},"n1820938994":{"id":"n1820938994","loc":[-85.5634327,41.9658558]},"n1820938995":{"id":"n1820938995","loc":[-85.0384227,42.1037627]},"n1820938996":{"id":"n1820938996","loc":[-85.1144258,42.0854439]},"n1820938997":{"id":"n1820938997","loc":[-85.1870651,42.0506305]},"n1820938998":{"id":"n1820938998","loc":[-85.1256159,42.0747376]},"n1820938999":{"id":"n1820938999","loc":[-85.3272695,41.9715836]},"n1820939000":{"id":"n1820939000","loc":[-85.0543067,42.103098]},"n1820939001":{"id":"n1820939001","loc":[-85.4678173,41.9973585]},"n1820939003":{"id":"n1820939003","loc":[-85.0266626,42.0933154]},"n1820939004":{"id":"n1820939004","loc":[-85.0353046,42.1019728]},"n1820939005":{"id":"n1820939005","loc":[-85.1237961,42.0762798]},"n1820939006":{"id":"n1820939006","loc":[-85.2812214,41.9826702]},"n1820939007":{"id":"n1820939007","loc":[-85.2927763,41.9747343]},"n1820939008":{"id":"n1820939008","loc":[-85.3270979,41.9720862]},"n1820939009":{"id":"n1820939009","loc":[-85.488657,41.9856581]},"n1820939010":{"id":"n1820939010","loc":[-85.3087301,41.9701399]},"n1820939011":{"id":"n1820939011","loc":[-85.0276939,42.093768]},"n1820939012":{"id":"n1820939012","loc":[-85.2956516,41.9748779]},"n1820939013":{"id":"n1820939013","loc":[-85.1298579,42.0726443]},"n1820939014":{"id":"n1820939014","loc":[-85.105144,42.0870893]},"n1820939015":{"id":"n1820939015","loc":[-85.0677486,42.1053917]},"n1820939016":{"id":"n1820939016","loc":[-85.0333681,42.0993459]},"n1820939017":{"id":"n1820939017","loc":[-85.6384272,41.910805]},"n1820939018":{"id":"n1820939018","loc":[-85.399496,42.006894]},"n1820939019":{"id":"n1820939019","loc":[-85.2648427,41.9998318]},"n1820939020":{"id":"n1820939020","loc":[-85.1237424,42.0766779]},"n1820939021":{"id":"n1820939021","loc":[-85.2515025,42.0109442]},"n1820939022":{"id":"n1820939022","loc":[-85.5566306,41.9718385]},"n1820939023":{"id":"n1820939023","loc":[-85.090644,42.0938369]},"n1820939024":{"id":"n1820939024","loc":[-85.1245525,42.074914]},"n1820939025":{"id":"n1820939025","loc":[-85.1099934,42.0863926]},"n1820939026":{"id":"n1820939026","loc":[-85.1251653,42.0744589]},"n1820939027":{"id":"n1820939027","loc":[-85.401792,42.0068143]},"n1820939028":{"id":"n1820939028","loc":[-85.0094763,42.0899584]},"n1820939029":{"id":"n1820939029","loc":[-85.1330779,42.0705605]},"n1820939030":{"id":"n1820939030","loc":[-85.4935064,41.984398]},"n1820939031":{"id":"n1820939031","loc":[-85.5713334,41.9613939]},"n1820939032":{"id":"n1820939032","loc":[-85.0873945,42.0964669]},"n1820939033":{"id":"n1820939033","loc":[-85.0886497,42.0986481]},"n1820939034":{"id":"n1820939034","loc":[-85.3276343,41.9758897]},"n1820939035":{"id":"n1820939035","loc":[-85.1304386,42.0727387]},"n1820939036":{"id":"n1820939036","loc":[-85.2551932,42.0052999]},"n1820939037":{"id":"n1820939037","loc":[-85.2206936,42.0384458]},"n1820939038":{"id":"n1820939038","loc":[-85.2313645,42.0286389]},"n1820939039":{"id":"n1820939039","loc":[-85.0754586,42.1059835]},"n1820939040":{"id":"n1820939040","loc":[-85.0663324,42.1050812]},"n1820939041":{"id":"n1820939041","loc":[-85.2406234,42.0106887]},"n1820939042":{"id":"n1820939042","loc":[-85.0685962,42.1058175]},"n1820939043":{"id":"n1820939043","loc":[-85.0689462,42.1059437]},"n1820939044":{"id":"n1820939044","loc":[-85.0586144,42.1046144]},"n1820939045":{"id":"n1820939045","loc":[-85.3650565,41.9965452]},"n1820939047":{"id":"n1820939047","loc":[-85.5752558,41.9536014]},"n1820939048":{"id":"n1820939048","loc":[-85.5110159,41.9710624]},"n1820939050":{"id":"n1820939050","loc":[-85.2832641,41.9926477]},"n1820939051":{"id":"n1820939051","loc":[-85.0078402,42.0898947]},"n1820939052":{"id":"n1820939052","loc":[-85.3882737,42.0017916]},"n1820939053":{"id":"n1820939053","loc":[-85.1718945,42.0564937]},"n1820939054":{"id":"n1820939054","loc":[-85.0947048,42.0929293]},"n1820939055":{"id":"n1820939055","loc":[-85.4456944,42.0051082]},"n1820939056":{"id":"n1820939056","loc":[-85.3139872,41.9706903]},"n1820939057":{"id":"n1820939057","loc":[-85.3893895,42.0034021]},"n1820939058":{"id":"n1820939058","loc":[-85.2425332,42.0106089]},"n1820939059":{"id":"n1820939059","loc":[-85.6085624,41.9420844]},"n1820939060":{"id":"n1820939060","loc":[-85.210411,42.0397789]},"n1820939061":{"id":"n1820939061","loc":[-85.2762542,41.9960473]},"n1820939062":{"id":"n1820939062","loc":[-85.4686584,41.9969973]},"n1820939063":{"id":"n1820939063","loc":[-85.3860421,42.0018394]},"n1820939064":{"id":"n1820939064","loc":[-85.5636944,41.9644414]},"n1820939065":{"id":"n1820939065","loc":[-85.3267331,41.9766554]},"n1820939066":{"id":"n1820939066","loc":[-85.0868996,42.0943822]},"n1820939067":{"id":"n1820939067","loc":[-85.104861,42.0880038]},"n1820939068":{"id":"n1820939068","loc":[-85.5537123,41.9695093]},"n1820939069":{"id":"n1820939069","loc":[-85.6325092,41.9396743]},"n1820939070":{"id":"n1820939070","loc":[-85.3869648,42.0024454]},"n1820939071":{"id":"n1820939071","loc":[-85.2775349,41.9957335]},"n1820939072":{"id":"n1820939072","loc":[-85.2055616,42.0421533]},"n1820939073":{"id":"n1820939073","loc":[-85.4731431,41.9946531]},"n1820939074":{"id":"n1820939074","loc":[-85.0399609,42.1030833]},"n1820939075":{"id":"n1820939075","loc":[-85.3055758,41.9725169]},"n1820939076":{"id":"n1820939076","loc":[-85.4834599,41.994488]},"n1820939077":{"id":"n1820939077","loc":[-85.3819866,42.0023018]},"n1820939078":{"id":"n1820939078","loc":[-85.1218756,42.0789992]},"n1820939079":{"id":"n1820939079","loc":[-85.2793159,41.9944458]},"n1820939080":{"id":"n1820939080","loc":[-85.2495498,42.0101466]},"n1820939081":{"id":"n1820939081","loc":[-85.0035969,42.0872434]},"n1820939082":{"id":"n1820939082","loc":[-85.1054243,42.0865626]},"n1820939083":{"id":"n1820939083","loc":[-85.0917665,42.0934774]},"n1820939084":{"id":"n1820939084","loc":[-85.3442211,41.988938]},"n1820939086":{"id":"n1820939086","loc":[-85.273989,41.9953588]},"n1820939087":{"id":"n1820939087","loc":[-85.1142541,42.0852488]},"n1820939089":{"id":"n1820939089","loc":[-85.1526684,42.0615758]},"n1820939090":{"id":"n1820939090","loc":[-85.2538843,42.0110159]},"n1820939091":{"id":"n1820939091","loc":[-85.28341,41.9909635]},"n1820939092":{"id":"n1820939092","loc":[-85.3963178,42.0050217]},"n1820939093":{"id":"n1820939093","loc":[-85.0851682,42.1012472]},"n1820939095":{"id":"n1820939095","loc":[-85.2811784,41.986243]},"n1820939096":{"id":"n1820939096","loc":[-85.4274125,42.0052995]},"n1820939097":{"id":"n1820939097","loc":[-85.0871262,42.0951652]},"n1820939099":{"id":"n1820939099","loc":[-85.1314253,42.0671665]},"n1820939100":{"id":"n1820939100","loc":[-85.2778997,41.991001]},"n1820939101":{"id":"n1820939101","loc":[-85.112107,42.0862812]},"n1820939102":{"id":"n1820939102","loc":[-85.299911,41.9729955]},"n1820939103":{"id":"n1820939103","loc":[-85.639822,41.9094796]},"n1820939104":{"id":"n1820939104","loc":[-85.122294,42.0785334]},"n1820939105":{"id":"n1820939105","loc":[-85.2476294,42.015719]},"n1820939106":{"id":"n1820939106","loc":[-85.4946007,41.9814631]},"n1820939107":{"id":"n1820939107","loc":[-85.0879524,42.0986919]},"n1820939108":{"id":"n1820939108","loc":[-85.0342814,42.098274]},"n1820939109":{"id":"n1820939109","loc":[-85.2450695,42.0095463]},"n1820939110":{"id":"n1820939110","loc":[-85.3847546,42.0024135]},"n1820939111":{"id":"n1820939111","loc":[-85.2961344,41.9742558]},"n1820939112":{"id":"n1820939112","loc":[-85.27899,41.994317]},"n1820939114":{"id":"n1820939114","loc":[-85.1017644,42.0886618]},"n1820939115":{"id":"n1820939115","loc":[-85.076215,42.1056333]},"n1820939116":{"id":"n1820939116","loc":[-85.1198009,42.0805349]},"n1820939117":{"id":"n1820939117","loc":[-85.11988,42.0798513]},"n1820939118":{"id":"n1820939118","loc":[-85.147819,42.0625476]},"n1820939119":{"id":"n1820939119","loc":[-85.0585969,42.1029042]},"n1820939120":{"id":"n1820939120","loc":[-85.1248596,42.0745744]},"n1820939121":{"id":"n1820939121","loc":[-85.3023786,41.9725249]},"n1820939123":{"id":"n1820939123","loc":[-85.0119332,42.0900699]},"n1820939124":{"id":"n1820939124","loc":[-85.2466852,42.0170343]},"n1820939125":{"id":"n1820939125","loc":[-85.0033019,42.0872792]},"n1820939126":{"id":"n1820939126","loc":[-85.0042084,42.0875778]},"n1820939128":{"id":"n1820939128","loc":[-85.0052961,42.0885424]},"n1820939130":{"id":"n1820939130","loc":[-85.0647942,42.10508]},"n1820939131":{"id":"n1820939131","loc":[-85.2824123,41.9825107]},"n1820939132":{"id":"n1820939132","loc":[-85.3210039,41.9723255]},"n1820939133":{"id":"n1820939133","loc":[-85.0491033,42.1014184]},"n1820939134":{"id":"n1820939134","loc":[-85.1127776,42.0855168]},"n1820939135":{"id":"n1820939135","loc":[-85.1243768,42.0759322]},"n1820939137":{"id":"n1820939137","loc":[-85.125974,42.0747547]},"n1820939138":{"id":"n1820939138","loc":[-85.1071248,42.0859973]},"n1820939139":{"id":"n1820939139","loc":[-85.5326175,41.9674833]},"n1820939140":{"id":"n1820939140","loc":[-85.1338715,42.0660833]},"n1820939142":{"id":"n1820939142","loc":[-85.649671,41.9135675]},"n1820939144":{"id":"n1820939144","loc":[-85.0236545,42.0920444]},"n1820939145":{"id":"n1820939145","loc":[-85.1084391,42.0859376]},"n1820939146":{"id":"n1820939146","loc":[-85.1539988,42.0618626]},"n1820939147":{"id":"n1820939147","loc":[-85.2354521,42.026511]},"n1820939148":{"id":"n1820939148","loc":[-85.2362246,42.0260408]},"n1820939149":{"id":"n1820939149","loc":[-85.2401342,42.0115233]},"n1820939150":{"id":"n1820939150","loc":[-85.295319,41.9747423]},"n1820939151":{"id":"n1820939151","loc":[-85.1164696,42.0835409]},"n1820939152":{"id":"n1820939152","loc":[-85.3232891,41.9712885]},"n1820939153":{"id":"n1820939153","loc":[-85.2574463,42.0068944]},"n1820939155":{"id":"n1820939155","loc":[-85.5704064,41.9598246]},"n1820939156":{"id":"n1820939156","loc":[-85.0349077,42.0998116]},"n1820939157":{"id":"n1820939157","loc":[-85.0949529,42.0925619]},"n1820939159":{"id":"n1820939159","loc":[-85.0179829,42.0902343]},"n1820939160":{"id":"n1820939160","loc":[-85.0405832,42.1016942]},"n1820939161":{"id":"n1820939161","loc":[-85.2534015,42.0111833]},"n1820939162":{"id":"n1820939162","loc":[-85.0839881,42.102708]},"n1820939163":{"id":"n1820939163","loc":[-85.0341996,42.1008385]},"n1820939164":{"id":"n1820939164","loc":[-85.1037761,42.0879731]},"n1820939173":{"id":"n1820939173","loc":[-85.0460616,42.1005786]},"n1820939177":{"id":"n1820939177","loc":[-85.0061651,42.0878059]},"n1820939181":{"id":"n1820939181","loc":[-85.1456775,42.0654684]},"n1820939183":{"id":"n1820939183","loc":[-85.1325508,42.0718439]},"n1820939185":{"id":"n1820939185","loc":[-85.2485842,42.008329]},"n1820939187":{"id":"n1820939187","loc":[-85.2744128,41.9949322]},"n1820939189":{"id":"n1820939189","loc":[-85.2579025,41.9999542]},"n1820939191":{"id":"n1820939191","loc":[-85.3358998,41.9828987]},"n1820939193":{"id":"n1820939193","loc":[-85.3192658,41.9716714]},"n1820939194":{"id":"n1820939194","loc":[-85.6400795,41.9130725]},"n1820939195":{"id":"n1820939195","loc":[-85.3278489,41.9780591]},"n1820939196":{"id":"n1820939196","loc":[-85.2800197,41.983061]},"n1820939197":{"id":"n1820939197","loc":[-85.3278167,41.9692943]},"n1820939198":{"id":"n1820939198","loc":[-85.3366894,41.9838653]},"n1820939199":{"id":"n1820939199","loc":[-85.0328383,42.0969923]},"n1820939201":{"id":"n1820939201","loc":[-85.3259284,41.9720383]},"n1820939217":{"id":"n1820939217","loc":[-85.1840181,42.0503277]},"n1820939220":{"id":"n1820939220","loc":[-85.422563,42.0089986]},"n1820939222":{"id":"n1820939222","loc":[-85.555386,41.9707856]},"n1820939224":{"id":"n1820939224","loc":[-85.3830809,42.002254]},"n1820939226":{"id":"n1820939226","loc":[-84.9917938,42.0857517]},"n1820939227":{"id":"n1820939227","loc":[-85.2936775,41.9740484]},"n1820939228":{"id":"n1820939228","loc":[-85.2632133,41.9975024]},"n1820939229":{"id":"n1820939229","loc":[-85.2809424,41.9853259]},"n1820939230":{"id":"n1820939230","loc":[-85.242104,42.0131204]},"n1820939232":{"id":"n1820939232","loc":[-85.2610246,41.9963901]},"n1820939233":{"id":"n1820939233","loc":[-85.2335531,42.0268378]},"n1820939234":{"id":"n1820939234","loc":[-85.3188839,41.9713575]},"n1820939235":{"id":"n1820939235","loc":[-85.2413637,42.0225658]},"n1820939237":{"id":"n1820939237","loc":[-85.0010796,42.0887215]},"n1820939239":{"id":"n1820939239","loc":[-85.2241697,42.0362624]},"n1820939243":{"id":"n1820939243","loc":[-85.0368456,42.1040134]},"n1820939244":{"id":"n1820939244","loc":[-85.1327986,42.069524]},"n1820939260":{"id":"n1820939260","loc":[-85.5408163,41.9711206]},"n1820939261":{"id":"n1820939261","loc":[-85.2959199,41.9746546]},"n1820939262":{"id":"n1820939262","loc":[-85.3298659,41.9683598]},"n1820939263":{"id":"n1820939263","loc":[-85.2240581,42.0358425]},"n1820939264":{"id":"n1820939264","loc":[-85.2438206,42.0101944]},"n1820939265":{"id":"n1820939265","loc":[-85.3984489,42.0059589]},"n1820939266":{"id":"n1820939266","loc":[-85.2330811,42.0294279]},"n1820939268":{"id":"n1820939268","loc":[-85.1126877,42.0857704]},"n1820939271":{"id":"n1820939271","loc":[-85.254925,42.0106253]},"n1820939273":{"id":"n1820939273","loc":[-85.4328046,42.0064662]},"n1820939277":{"id":"n1820939277","loc":[-85.289622,41.9789616]},"n1820939279":{"id":"n1820939279","loc":[-85.4574532,42.0004043]},"n1820939281":{"id":"n1820939281","loc":[-85.4803486,41.9867211]},"n1820939283":{"id":"n1820939283","loc":[-85.157475,42.0631848]},"n1820939285":{"id":"n1820939285","loc":[-85.2571458,42.0059935]},"n1820939287":{"id":"n1820939287","loc":[-85.2818544,41.9825984]},"n1820939289":{"id":"n1820939289","loc":[-85.2298302,42.0328781]},"n1820939291":{"id":"n1820939291","loc":[-85.4819523,41.984821]},"n1820939301":{"id":"n1820939301","loc":[-85.3139765,41.9701159]},"n1820939304":{"id":"n1820939304","loc":[-85.0424447,42.101742]},"n1820939306":{"id":"n1820939306","loc":[-85.6360283,41.9338482]},"n1820939310":{"id":"n1820939310","loc":[-85.3463025,41.9913622]},"n1820939312":{"id":"n1820939312","loc":[-85.4664869,41.9988097]},"n1820939314":{"id":"n1820939314","loc":[-85.149364,42.0622449]},"n1820939316":{"id":"n1820939316","loc":[-85.2460415,42.0153125]},"n1820939318":{"id":"n1820939318","loc":[-85.4806103,41.9924523]},"n1820939320":{"id":"n1820939320","loc":[-85.2449042,42.0190987]},"n1820939322":{"id":"n1820939322","loc":[-85.5280165,41.9689263]},"n1820939324":{"id":"n1820939324","loc":[-85.0051204,42.0882625]},"n1820939326":{"id":"n1820939326","loc":[-85.1240925,42.0771546]},"n1820939329":{"id":"n1820939329","loc":[-85.2261653,42.0342225]},"n1820939331":{"id":"n1820939331","loc":[-85.5259933,41.972211]},"n1820939333":{"id":"n1820939333","loc":[-85.0074754,42.0883183]},"n1820939335":{"id":"n1820939335","loc":[-85.0764014,42.1055549]},"n1820939336":{"id":"n1820939336","loc":[-85.2908773,41.9769597]},"n1820939337":{"id":"n1820939337","loc":[-85.4095382,42.0083449]},"n1820939346":{"id":"n1820939346","loc":[-85.2514166,42.0111753]},"n1820939348":{"id":"n1820939348","loc":[-85.0030377,42.0873799]},"n1820939350":{"id":"n1820939350","loc":[-85.3659362,41.9964974]},"n1820939352":{"id":"n1820939352","loc":[-85.226058,42.0348281]},"n1820939355":{"id":"n1820939355","loc":[-85.1902408,42.0507101]},"n1820939357":{"id":"n1820939357","loc":[-85.2781854,41.9946001]},"n1820939359":{"id":"n1820939359","loc":[-85.2139988,42.0405175]},"n1820939361":{"id":"n1820939361","loc":[-85.0086609,42.0908262]},"n1820939363":{"id":"n1820939363","loc":[-85.0627128,42.1043398]},"n1820939365":{"id":"n1820939365","loc":[-85.1311346,42.072501]},"n1820939369":{"id":"n1820939369","loc":[-85.248198,42.0082652]},"n1820939370":{"id":"n1820939370","loc":[-84.99792,42.087794]},"n1820939371":{"id":"n1820939371","loc":[-85.2786775,41.9942783]},"n1820939372":{"id":"n1820939372","loc":[-85.0342103,42.1013957]},"n1820939373":{"id":"n1820939373","loc":[-85.2022357,42.0444799]},"n1820939374":{"id":"n1820939374","loc":[-85.2279205,42.0337388]},"n1820939375":{"id":"n1820939375","loc":[-85.1337699,42.0712614]},"n1820939376":{"id":"n1820939376","loc":[-85.317517,41.9707062]},"n1820939377":{"id":"n1820939377","loc":[-85.1326326,42.070218]},"n1820939394":{"id":"n1820939394","loc":[-85.0197746,42.0899118]},"n1820939397":{"id":"n1820939397","loc":[-85.2590076,41.9984632]},"n1820939399":{"id":"n1820939399","loc":[-85.2469964,42.0083449]},"n1820939400":{"id":"n1820939400","loc":[-85.2470929,42.0146668]},"n1820939401":{"id":"n1820939401","loc":[-84.9984095,42.0878087]},"n1820939402":{"id":"n1820939402","loc":[-85.2372653,42.0243273]},"n1820939403":{"id":"n1820939403","loc":[-85.2454986,42.0091955]},"n1820939404":{"id":"n1820939404","loc":[-85.0539205,42.1035995]},"n1820939405":{"id":"n1820939405","loc":[-85.550601,41.9706101]},"n1820939406":{"id":"n1820939406","loc":[-85.0351343,42.0999656]},"n1820939407":{"id":"n1820939407","loc":[-85.0082908,42.0905755]},"n1820939408":{"id":"n1820939408","loc":[-85.0132904,42.0902251]},"n1820939410":{"id":"n1820939410","loc":[-85.0892546,42.094012]},"n1820939412":{"id":"n1820939412","loc":[-85.0350793,42.1030315]},"n1820939416":{"id":"n1820939416","loc":[-85.0012406,42.0886777]},"n1820939418":{"id":"n1820939418","loc":[-85.0577453,42.1029229]},"n1820939420":{"id":"n1820939420","loc":[-85.1230786,42.0776722]},"n1820939422":{"id":"n1820939422","loc":[-85.571136,41.9649304]},"n1820939436":{"id":"n1820939436","loc":[-85.1137968,42.0848997]},"n1820939437":{"id":"n1820939437","loc":[-85.3559584,41.9925105]},"n1820939438":{"id":"n1820939438","loc":[-85.0080172,42.0903565]},"n1820939439":{"id":"n1820939439","loc":[-85.0048897,42.0880913]},"n1820939441":{"id":"n1820939441","loc":[-85.0406959,42.1018574]},"n1820939443":{"id":"n1820939443","loc":[-85.3897328,42.0029078]},"n1820939445":{"id":"n1820939445","loc":[-85.122349,42.0782814]},"n1820939448":{"id":"n1820939448","loc":[-85.4872193,41.985036]},"n1820939450":{"id":"n1820939450","loc":[-85.0120459,42.0904919]},"n1820939452":{"id":"n1820939452","loc":[-85.6320543,41.921982]},"n1820939456":{"id":"n1820939456","loc":[-85.0844749,42.1036843]},"n1820939458":{"id":"n1820939458","loc":[-85.0968037,42.091296]},"n1820939463":{"id":"n1820939463","loc":[-85.5339747,41.9681841]},"n1820939465":{"id":"n1820939465","loc":[-85.4125423,42.0072129]},"n1820939467":{"id":"n1820939467","loc":[-85.6335563,41.9303626]},"n1820939469":{"id":"n1820939469","loc":[-85.2821014,41.9932126]},"n1820939471":{"id":"n1820939471","loc":[-85.374691,41.9969917]},"n1820939485":{"id":"n1820939485","loc":[-85.4471321,42.0049806]},"n1820939487":{"id":"n1820939487","loc":[-85.3752532,41.9972206]},"n1820939489":{"id":"n1820939489","loc":[-85.4517283,42.005927]},"n1820939492":{"id":"n1820939492","loc":[-85.4662552,42.0005693]},"n1820939494":{"id":"n1820939494","loc":[-85.0120083,42.0902928]},"n1820939496":{"id":"n1820939496","loc":[-85.044463,42.1004631]},"n1820939498":{"id":"n1820939498","loc":[-85.418293,42.0089667]},"n1820939500":{"id":"n1820939500","loc":[-85.0554762,42.1027358]},"n1820939504":{"id":"n1820939504","loc":[-85.1246289,42.0746858]},"n1820939507":{"id":"n1820939507","loc":[-85.0408139,42.1021838]},"n1820939508":{"id":"n1820939508","loc":[-85.1236204,42.0775169]},"n1820939509":{"id":"n1820939509","loc":[-85.0350109,42.1037428]},"n1820939510":{"id":"n1820939510","loc":[-85.0551583,42.1029878]},"n1820939511":{"id":"n1820939511","loc":[-85.0956771,42.0916662]},"n1820939512":{"id":"n1820939512","loc":[-85.2323408,42.0273638]},"n1820939513":{"id":"n1820939513","loc":[-85.1232771,42.0762388]},"n1820939531":{"id":"n1820939531","loc":[-85.264608,41.9997828]},"n1820939533":{"id":"n1820939533","loc":[-85.4198808,42.0087914]},"n1820939535":{"id":"n1820939535","loc":[-85.3080864,41.9715677]},"n1820939536":{"id":"n1820939536","loc":[-85.1189426,42.0812596]},"n1820939537":{"id":"n1820939537","loc":[-85.2642741,41.9996764]},"n1820939538":{"id":"n1820939538","loc":[-85.2572531,42.0079627]},"n1820939539":{"id":"n1820939539","loc":[-85.2907807,41.9790174]},"n1820939540":{"id":"n1820939540","loc":[-85.3171415,41.9707301]},"n1820939541":{"id":"n1820939541","loc":[-85.08777,42.0953841]},"n1820939542":{"id":"n1820939542","loc":[-85.1239262,42.0773218]},"n1820939543":{"id":"n1820939543","loc":[-84.9973956,42.0877968]},"n1820939544":{"id":"n1820939544","loc":[-85.011606,42.0896161]},"n1820939545":{"id":"n1820939545","loc":[-85.4077358,42.0082971]},"n1820939546":{"id":"n1820939546","loc":[-85.3614945,41.9933717]},"n1820939547":{"id":"n1820939547","loc":[-85.3189118,41.9697649]},"n1820939550":{"id":"n1820939550","loc":[-85.1262691,42.0740221]},"n1820939551":{"id":"n1820939551","loc":[-85.3863639,41.9994635]},"n1820939552":{"id":"n1820939552","loc":[-85.2836034,41.9923953]},"n1820939554":{"id":"n1820939554","loc":[-85.3222377,41.9715916]},"n1820939555":{"id":"n1820939555","loc":[-85.0122658,42.0906312]},"n1820939556":{"id":"n1820939556","loc":[-85.0022652,42.0877581]},"n1820939557":{"id":"n1820939557","loc":[-85.1011314,42.0899954]},"n1820939559":{"id":"n1820939559","loc":[-85.0008181,42.0885293]},"n1820939561":{"id":"n1820939561","loc":[-85.3637046,41.9942488]},"n1820939562":{"id":"n1820939562","loc":[-85.4500117,42.0052892]},"n1820939563":{"id":"n1820939563","loc":[-85.0537636,42.1036365]},"n1820939565":{"id":"n1820939565","loc":[-85.2367503,42.0246939]},"n1820939566":{"id":"n1820939566","loc":[-85.0448479,42.1002653]},"n1820939567":{"id":"n1820939567","loc":[-85.6337065,41.9295006]},"n1820939568":{"id":"n1820939568","loc":[-85.0879792,42.095623]},"n1820939569":{"id":"n1820939569","loc":[-85.6347623,41.9352369]},"n1820939570":{"id":"n1820939570","loc":[-85.1497931,42.0620378]},"n1820939571":{"id":"n1820939571","loc":[-85.5676169,41.9656324]},"n1820939572":{"id":"n1820939572","loc":[-85.638041,41.9166971]},"n1820939573":{"id":"n1820939573","loc":[-85.4993429,41.9781293]},"n1820939574":{"id":"n1820939574","loc":[-85.5352831,41.9692127]},"n1820939575":{"id":"n1820939575","loc":[-84.9924429,42.0857118]},"n1820939577":{"id":"n1820939577","loc":[-85.0581101,42.1026721]},"n1820939578":{"id":"n1820939578","loc":[-85.641088,41.9094477]},"n1820939579":{"id":"n1820939579","loc":[-85.2548821,42.0052282]},"n1820939580":{"id":"n1820939580","loc":[-85.1124463,42.0859734]},"n1820939581":{"id":"n1820939581","loc":[-85.1083479,42.0857624]},"n1820939583":{"id":"n1820939583","loc":[-85.1387424,42.0648893]},"n1820939584":{"id":"n1820939584","loc":[-85.5152645,41.9700892]},"n1820939585":{"id":"n1820939585","loc":[-85.5463738,41.9713439]},"n1820939586":{"id":"n1820939586","loc":[-85.360207,41.9933717]},"n1820939587":{"id":"n1820939587","loc":[-85.2402372,42.0120917]},"n1820939588":{"id":"n1820939588","loc":[-85.3936381,42.0047255]},"n1820939589":{"id":"n1820939589","loc":[-85.3310246,41.973784]},"n1820939590":{"id":"n1820939590","loc":[-85.0329403,42.096642]},"n1820939591":{"id":"n1820939591","loc":[-85.0097271,42.0910981]},"n1820939593":{"id":"n1820939593","loc":[-85.0446562,42.1003437]},"n1820939595":{"id":"n1820939595","loc":[-85.0856671,42.1008452]},"n1820939596":{"id":"n1820939596","loc":[-85.4087228,42.0083449]},"n1820939597":{"id":"n1820939597","loc":[-85.0609519,42.1052564]},"n1820939598":{"id":"n1820939598","loc":[-85.3432126,41.9874548]},"n1820939599":{"id":"n1820939599","loc":[-85.4041738,42.0067027]},"n1820939600":{"id":"n1820939600","loc":[-85.0825437,42.1035768]},"n1820939601":{"id":"n1820939601","loc":[-85.048422,42.101498]},"n1820939602":{"id":"n1820939602","loc":[-85.0336256,42.0999031]},"n1820939603":{"id":"n1820939603","loc":[-85.046818,42.1014104]},"n1820939605":{"id":"n1820939605","loc":[-85.2856524,41.98078]},"n1820939607":{"id":"n1820939607","loc":[-85.1118173,42.0864245]},"n1820939609":{"id":"n1820939609","loc":[-85.0443397,42.1006263]},"n1820939610":{"id":"n1820939610","loc":[-85.0336698,42.0978361]},"n1820939611":{"id":"n1820939611","loc":[-85.4630322,42.0014248]},"n1820939612":{"id":"n1820939612","loc":[-85.0613127,42.1052353]},"n1820939613":{"id":"n1820939613","loc":[-85.0137571,42.0887801]},"n1820939614":{"id":"n1820939614","loc":[-85.272487,41.9982013]},"n1820939616":{"id":"n1820939616","loc":[-85.4665727,41.9983791]},"n1820939617":{"id":"n1820939617","loc":[-85.1288078,42.0725476]},"n1820939618":{"id":"n1820939618","loc":[-85.4653282,42.00109]},"n1820939619":{"id":"n1820939619","loc":[-85.2314717,42.0276746]},"n1820939620":{"id":"n1820939620","loc":[-85.255982,42.0003569]},"n1820939621":{"id":"n1820939621","loc":[-85.2886779,41.9787223]},"n1820939622":{"id":"n1820939622","loc":[-85.22438,42.0367509]},"n1820939623":{"id":"n1820939623","loc":[-85.0334713,42.0998382]},"n1820939624":{"id":"n1820939624","loc":[-85.2236504,42.037484]},"n1820939625":{"id":"n1820939625","loc":[-85.636908,41.9175162]},"n1820939627":{"id":"n1820939627","loc":[-85.2669187,41.9989707]},"n1820939628":{"id":"n1820939628","loc":[-85.3247268,41.9720702]},"n1820939629":{"id":"n1820939629","loc":[-85.3785104,41.9987299]},"n1820939630":{"id":"n1820939630","loc":[-85.5267658,41.9720515]},"n1820939631":{"id":"n1820939631","loc":[-85.2445116,42.0098811]},"n1820939632":{"id":"n1820939632","loc":[-85.1271448,42.0725077]},"n1820939633":{"id":"n1820939633","loc":[-85.0345751,42.099724]},"n1820939634":{"id":"n1820939634","loc":[-85.4217476,42.0089986]},"n1820939635":{"id":"n1820939635","loc":[-85.3121848,41.9689433]},"n1820939636":{"id":"n1820939636","loc":[-85.2826419,41.9929985]},"n1820939637":{"id":"n1820939637","loc":[-85.3160257,41.9706344]},"n1820939638":{"id":"n1820939638","loc":[-85.5684967,41.9657919]},"n1820939640":{"id":"n1820939640","loc":[-85.225131,42.0356194]},"n1820939642":{"id":"n1820939642","loc":[-85.1324124,42.0693328]},"n1820939644":{"id":"n1820939644","loc":[-84.9994073,42.0878843]},"n1820939645":{"id":"n1820939645","loc":[-85.1087596,42.0863329]},"n1820939646":{"id":"n1820939646","loc":[-85.2915532,41.9782996]},"n1820939647":{"id":"n1820939647","loc":[-84.9988708,42.0877808]},"n1820939648":{"id":"n1820939648","loc":[-85.2243628,42.0356728]},"n1820939649":{"id":"n1820939649","loc":[-85.0427397,42.1020524]},"n1820939650":{"id":"n1820939650","loc":[-85.6388392,41.9100752]},"n1820939651":{"id":"n1820939651","loc":[-85.0133709,42.0888557]},"n1820939652":{"id":"n1820939652","loc":[-85.318798,41.9701211]},"n1820939653":{"id":"n1820939653","loc":[-85.6335778,41.9190602]},"n1820939654":{"id":"n1820939654","loc":[-85.6338396,41.9370247]},"n1820939655":{"id":"n1820939655","loc":[-85.0939069,42.0931988]},"n1820939656":{"id":"n1820939656","loc":[-85.5702347,41.9651378]},"n1820939657":{"id":"n1820939657","loc":[-85.4235286,42.0088392]},"n1820939658":{"id":"n1820939658","loc":[-85.2740856,41.9972206]},"n1820939659":{"id":"n1820939659","loc":[-85.4824299,41.9934195]},"n1820939660":{"id":"n1820939660","loc":[-85.3857846,42.0014408]},"n1820939661":{"id":"n1820939661","loc":[-85.0451658,42.10028]},"n1820939662":{"id":"n1820939662","loc":[-85.3893036,42.001377]},"n1820939664":{"id":"n1820939664","loc":[-85.2455845,42.0088607]},"n1820939665":{"id":"n1820939665","loc":[-85.2741071,41.9951116]},"n1820939666":{"id":"n1820939666","loc":[-85.1298375,42.0677718]},"n1820939667":{"id":"n1820939667","loc":[-85.5491848,41.9707377]},"n1820939669":{"id":"n1820939669","loc":[-85.2780298,41.995238]},"n1820939670":{"id":"n1820939670","loc":[-85.1330068,42.0716926]},"n1820939671":{"id":"n1820939671","loc":[-85.0811342,42.1025129]},"n1820939672":{"id":"n1820939672","loc":[-85.2325124,42.0290135]},"n1820939673":{"id":"n1820939673","loc":[-85.2975077,41.9716953]},"n1820939674":{"id":"n1820939674","loc":[-85.0951729,42.0922394]},"n1820939676":{"id":"n1820939676","loc":[-85.0363252,42.1043119]},"n1820939677":{"id":"n1820939677","loc":[-85.2960057,41.97349]},"n1820939678":{"id":"n1820939678","loc":[-85.3701849,41.9982515]},"n1820939679":{"id":"n1820939679","loc":[-85.3381486,41.9848861]},"n1820939680":{"id":"n1820939680","loc":[-85.2058448,42.0417286]},"n1820939682":{"id":"n1820939682","loc":[-85.0819335,42.1034443]},"n1820939683":{"id":"n1820939683","loc":[-85.3872223,41.9993359]},"n1820939684":{"id":"n1820939684","loc":[-85.095366,42.091909]},"n1820939685":{"id":"n1820939685","loc":[-85.2327914,42.0291888]},"n1820939686":{"id":"n1820939686","loc":[-85.0433459,42.1018773]},"n1820939687":{"id":"n1820939687","loc":[-85.0585339,42.1027318]},"n1820939688":{"id":"n1820939688","loc":[-85.0062885,42.0876347]},"n1820939689":{"id":"n1820939689","loc":[-85.246299,42.017377]},"n1820939690":{"id":"n1820939690","loc":[-85.2932376,41.9742877]},"n1820939691":{"id":"n1820939691","loc":[-85.2962846,41.9736815]},"n1820939692":{"id":"n1820939692","loc":[-85.6052365,41.9409193]},"n1820939693":{"id":"n1820939693","loc":[-85.2570536,42.0003341]},"n1820939694":{"id":"n1820939694","loc":[-85.0488458,42.1014064]},"n1820939695":{"id":"n1820939695","loc":[-85.4050321,42.0069578]},"n1820939696":{"id":"n1820939696","loc":[-85.4847517,41.9845894]},"n1820939697":{"id":"n1820939697","loc":[-85.0844655,42.1013826]},"n1820939698":{"id":"n1820939698","loc":[-85.1437206,42.0650008]},"n1820939699":{"id":"n1820939699","loc":[-85.1168183,42.0864034]},"n1820939700":{"id":"n1820939700","loc":[-85.5479831,41.9711366]},"n1820939701":{"id":"n1820939701","loc":[-85.0349948,42.1034124]},"n1820939702":{"id":"n1820939702","loc":[-85.0835589,42.1038821]},"n1820939703":{"id":"n1820939703","loc":[-85.0203875,42.0902649]},"n1820939704":{"id":"n1820939704","loc":[-85.0371191,42.1038184]},"n1820939705":{"id":"n1820939705","loc":[-85.1273312,42.0735681]},"n1820939707":{"id":"n1820939707","loc":[-85.1272239,42.0730226]},"n1820939710":{"id":"n1820939710","loc":[-85.0349881,42.1019012]},"n1820939712":{"id":"n1820939712","loc":[-85.2440459,42.0178313]},"n1820939713":{"id":"n1820939713","loc":[-85.2444751,42.0182618]},"n1820939714":{"id":"n1820939714","loc":[-85.0539996,42.1032863]},"n1820939715":{"id":"n1820939715","loc":[-85.2215905,42.0373246]},"n1820939716":{"id":"n1820939716","loc":[-85.0649712,42.1051994]},"n1820939717":{"id":"n1820939717","loc":[-85.0927146,42.0927581]},"n1820939718":{"id":"n1820939718","loc":[-85.3884668,42.0042312]},"n1820939719":{"id":"n1820939719","loc":[-85.0840672,42.1013241]},"n1820939720":{"id":"n1820939720","loc":[-85.304739,41.9725408]},"n1820939721":{"id":"n1820939721","loc":[-85.2243585,42.0371334]},"n1820939722":{"id":"n1820939722","loc":[-85.0599823,42.1049686]},"n1820939723":{"id":"n1820939723","loc":[-85.0298825,42.0944288]},"n1820939724":{"id":"n1820939724","loc":[-85.0366095,42.1042443]},"n1820939725":{"id":"n1820939725","loc":[-85.0698783,42.1058135]},"n1820939726":{"id":"n1820939726","loc":[-85.1054551,42.0873361]},"n1820939727":{"id":"n1820939727","loc":[-84.9952324,42.0864285]},"n1820939728":{"id":"n1820939728","loc":[-85.3442211,41.9897993]},"n1820939729":{"id":"n1820939729","loc":[-85.4386134,42.0056822]},"n1820939730":{"id":"n1820939730","loc":[-85.2438528,42.0146589]},"n1820939731":{"id":"n1820939731","loc":[-85.0355581,42.1041846]},"n1820939732":{"id":"n1820939732","loc":[-85.557682,41.9724447]},"n1820939734":{"id":"n1820939734","loc":[-85.2299418,42.033314]},"n1820939735":{"id":"n1820939735","loc":[-85.6297412,41.9419088]},"n1820939736":{"id":"n1820939736","loc":[-85.2645101,41.9980259]},"n1820939738":{"id":"n1820939738","loc":[-85.082195,42.1035649]},"n1820939739":{"id":"n1820939739","loc":[-85.234272,42.0267102]},"n1820939740":{"id":"n1820939740","loc":[-85.0130758,42.0895006]},"n1820939741":{"id":"n1820939741","loc":[-85.4594702,42.0000375]},"n1820939742":{"id":"n1820939742","loc":[-84.9946745,42.0863687]},"n1820939743":{"id":"n1820939743","loc":[-85.6438775,41.9120186]},"n1820939744":{"id":"n1820939744","loc":[-85.6372685,41.9168089]},"n1820939745":{"id":"n1820939745","loc":[-85.2789468,41.9893208]},"n1820939747":{"id":"n1820939747","loc":[-85.3775019,41.998427]},"n1820939749":{"id":"n1820939749","loc":[-85.0993571,42.0909178]},"n1820939750":{"id":"n1820939750","loc":[-85.1308503,42.0669339]},"n1820939751":{"id":"n1820939751","loc":[-85.4802566,41.9856659]},"n1820939752":{"id":"n1820939752","loc":[-85.2543563,42.0108804]},"n1820939753":{"id":"n1820939753","loc":[-85.1041033,42.0878815]},"n1820939755":{"id":"n1820939755","loc":[-85.4000969,42.0071651]},"n1820939757":{"id":"n1820939757","loc":[-85.3858275,42.0022381]},"n1820939758":{"id":"n1820939758","loc":[-85.3653998,41.996609]},"n1820939759":{"id":"n1820939759","loc":[-85.2432949,42.0202305]},"n1820939760":{"id":"n1820939760","loc":[-85.3878874,42.0042472]},"n1820939761":{"id":"n1820939761","loc":[-85.2516741,42.0114145]},"n1820939762":{"id":"n1820939762","loc":[-85.2788825,41.9865142]},"n1820939763":{"id":"n1820939763","loc":[-85.0009147,42.0886686]},"n1820939764":{"id":"n1820939764","loc":[-85.3918142,42.003434]},"n1820939765":{"id":"n1820939765","loc":[-85.5532832,41.9696848]},"n1820939766":{"id":"n1820939766","loc":[-85.5545063,41.969254]},"n1820939768":{"id":"n1820939768","loc":[-85.1327989,42.0704769]},"n1820939770":{"id":"n1820939770","loc":[-85.0588558,42.1047696]},"n1820939772":{"id":"n1820939772","loc":[-85.555798,41.9713017]},"n1820939773":{"id":"n1820939773","loc":[-85.0565853,42.1023589]},"n1820939774":{"id":"n1820939774","loc":[-85.2582941,41.9992765]},"n1820939775":{"id":"n1820939775","loc":[-85.3007264,41.9727642]},"n1820939776":{"id":"n1820939776","loc":[-85.2477045,42.0082652]},"n1820939777":{"id":"n1820939777","loc":[-85.2415247,42.0104973]},"n1821006698":{"id":"n1821006698","loc":[-85.6345227,41.9382009]},"n1821006700":{"id":"n1821006700","loc":[-85.6344894,41.938975]},"n1821006704":{"id":"n1821006704","loc":[-85.6351181,41.9370157]},"n1821006706":{"id":"n1821006706","loc":[-85.6357554,41.9361657]},"n1821006708":{"id":"n1821006708","loc":[-85.6351235,41.9368481]},"n1821006710":{"id":"n1821006710","loc":[-85.6352844,41.9364211]},"n1821006712":{"id":"n1821006712","loc":[-85.6351503,41.937307]},"n1821006716":{"id":"n1821006716","loc":[-85.6350366,41.9379774]},"n1821006725":{"id":"n1821006725","loc":[-85.6352147,41.9375903]},"n1821137607":{"id":"n1821137607","loc":[-85.5297057,41.9669915]},"n1821137608":{"id":"n1821137608","loc":[-85.5288598,41.9673094]},"n1821139530":{"id":"n1821139530","loc":[-85.4832228,41.9881686]},"n1821139531":{"id":"n1821139531","loc":[-85.4812101,41.9851258]},"n1821139532":{"id":"n1821139532","loc":[-85.4799127,41.9860244]},"n1821139533":{"id":"n1821139533","loc":[-85.4800313,41.9865555]},"n1841425201":{"id":"n1841425201","loc":[-85.4334577,42.0063713]},"n1841425222":{"id":"n1841425222","loc":[-85.4382449,42.0055785]},"n1914861007":{"id":"n1914861007","loc":[-85.394959,42.0057472]},"n1914861057":{"id":"n1914861057","loc":[-85.3967185,42.0049695]},"n1914861112":{"id":"n1914861112","loc":[-85.394179,42.0056906]},"n1914861306":{"id":"n1914861306","loc":[-85.3900226,42.0028488]},"n2114807565":{"id":"n2114807565","loc":[-85.6385979,41.9577824]},"n2114807568":{"id":"n2114807568","loc":[-85.6325097,41.9775713]},"n2114807572":{"id":"n2114807572","loc":[-85.6328996,41.9980965]},"n2114807578":{"id":"n2114807578","loc":[-85.6344818,41.9696956]},"n2114807583":{"id":"n2114807583","loc":[-85.6326289,41.9757853]},"n2114807593":{"id":"n2114807593","loc":[-85.6360828,41.9650674]},"n2130304159":{"id":"n2130304159","loc":[-85.6352537,41.9450015],"tags":{"railway":"level_crossing"}},"n2139795852":{"id":"n2139795852","loc":[-85.6374708,41.9311633]},"n2139858882":{"id":"n2139858882","loc":[-85.635178,41.9356158]},"n2139858883":{"id":"n2139858883","loc":[-85.63533,41.9355886]},"n2139858884":{"id":"n2139858884","loc":[-85.6353819,41.93556]},"n2139858885":{"id":"n2139858885","loc":[-85.6353665,41.9355157]},"n2139858886":{"id":"n2139858886","loc":[-85.6353165,41.9354971]},"n2139858887":{"id":"n2139858887","loc":[-85.6352454,41.9355328]},"n2139858888":{"id":"n2139858888","loc":[-85.6350184,41.9357846]},"n2139858889":{"id":"n2139858889","loc":[-85.634978,41.9359448]},"n2139858890":{"id":"n2139858890","loc":[-85.6347723,41.9361523]},"n2139858891":{"id":"n2139858891","loc":[-85.6347165,41.9362667]},"n2139858892":{"id":"n2139858892","loc":[-85.6346992,41.9364312]},"n2139858893":{"id":"n2139858893","loc":[-85.634603,41.9366329]},"n2139858894":{"id":"n2139858894","loc":[-85.6345973,41.9367488]},"n2139858895":{"id":"n2139858895","loc":[-85.6345127,41.9369734]},"n2139858896":{"id":"n2139858896","loc":[-85.634478,41.9371923]},"n2139858897":{"id":"n2139858897","loc":[-85.6344838,41.9373768]},"n2139858898":{"id":"n2139858898","loc":[-85.6346242,41.9375299]},"n2139858899":{"id":"n2139858899","loc":[-85.6347723,41.9376357]},"n2139858900":{"id":"n2139858900","loc":[-85.6347607,41.9377788]},"n2139858901":{"id":"n2139858901","loc":[-85.6346204,41.9379533]},"n2139858902":{"id":"n2139858902","loc":[-85.6344184,41.9380105]},"n2139858903":{"id":"n2139858903","loc":[-85.6341627,41.9380406]},"n2139858904":{"id":"n2139858904","loc":[-85.634005,41.9381679]},"n2139858905":{"id":"n2139858905","loc":[-85.63393,41.9383353]},"n2139858906":{"id":"n2139858906","loc":[-85.6338588,41.9384597]},"n2139858907":{"id":"n2139858907","loc":[-85.6336627,41.9387759]},"n2139858908":{"id":"n2139858908","loc":[-85.6335127,41.9389361]},"n2139858933":{"id":"n2139858933","loc":[-85.6353118,41.9432646]},"n2139858934":{"id":"n2139858934","loc":[-85.6353952,41.9433002]},"n2139858935":{"id":"n2139858935","loc":[-85.6356496,41.9433255]},"n2139858936":{"id":"n2139858936","loc":[-85.6363128,41.9433373]},"n2139858937":{"id":"n2139858937","loc":[-85.6365467,41.9433779]},"n2139858938":{"id":"n2139858938","loc":[-85.6368692,41.9435265]},"n2139858939":{"id":"n2139858939","loc":[-85.6370986,41.9437039]},"n2139858940":{"id":"n2139858940","loc":[-85.6372371,41.9437732]},"n2139858941":{"id":"n2139858941","loc":[-85.6374756,41.9438171]},"n2139858942":{"id":"n2139858942","loc":[-85.6376164,41.9439286]},"n2139858943":{"id":"n2139858943","loc":[-85.6377504,41.944138]},"n2139858944":{"id":"n2139858944","loc":[-85.6384204,41.9443137]},"n2139858945":{"id":"n2139858945","loc":[-85.6385726,41.9444506]},"n2139858946":{"id":"n2139858946","loc":[-85.638702,41.9445739]},"n2139858947":{"id":"n2139858947","loc":[-85.6387179,41.9446516]},"n2139858948":{"id":"n2139858948","loc":[-85.6387088,41.9447985]},"n2139858949":{"id":"n2139858949","loc":[-85.6387656,41.9449877]},"n2139858950":{"id":"n2139858950","loc":[-85.638777,41.9451448]},"n2139858951":{"id":"n2139858951","loc":[-85.6387088,41.9452631]},"n2139858964":{"id":"n2139858964","loc":[-85.6383346,41.9442912]},"n2139858966":{"id":"n2139858966","loc":[-85.6384724,41.9443605]},"n2139858967":{"id":"n2139858967","loc":[-85.6354078,41.9434285]},"n2139858968":{"id":"n2139858968","loc":[-85.635271,41.943654]},"n2139858969":{"id":"n2139858969","loc":[-85.6352657,41.9437437]},"n2139858970":{"id":"n2139858970","loc":[-85.635271,41.9438195]},"n2139858971":{"id":"n2139858971","loc":[-85.6351563,41.9438906]},"n2139858972":{"id":"n2139858972","loc":[-85.6351384,41.9438882]},"n2139858973":{"id":"n2139858973","loc":[-85.6351514,41.9438034]},"n2139858974":{"id":"n2139858974","loc":[-85.6351237,41.9436641]},"n2139858975":{"id":"n2139858975","loc":[-85.6351498,41.9436108]},"n2139858976":{"id":"n2139858976","loc":[-85.6351058,41.9435345]},"n2139858977":{"id":"n2139858977","loc":[-85.6349641,41.9432051]},"n2139858986":{"id":"n2139858986","loc":[-85.6341205,41.9380746]},"n2139858990":{"id":"n2139858990","loc":[-85.6345671,41.9381816]},"n2139858995":{"id":"n2139858995","loc":[-85.6339783,41.9382273]},"n2139859003":{"id":"n2139859003","loc":[-85.6340477,41.9373489]},"n2139859004":{"id":"n2139859004","loc":[-85.6339784,41.9374752]},"n2139870406":{"id":"n2139870406","loc":[-85.6342265,41.9432605]},"n2139877106":{"id":"n2139877106","loc":[-85.6346323,41.9438746]},"n2139982399":{"id":"n2139982399","loc":[-85.6324055,41.9408537]},"n2139982400":{"id":"n2139982400","loc":[-85.632488,41.941063],"tags":{"leisure":"slipway"}},"n2139982401":{"id":"n2139982401","loc":[-85.6327261,41.9415366]},"n2139982402":{"id":"n2139982402","loc":[-85.6326391,41.9413598]},"n2139982403":{"id":"n2139982403","loc":[-85.6327041,41.9414391]},"n2139982405":{"id":"n2139982405","loc":[-85.6322891,41.9406009]},"n2139982406":{"id":"n2139982406","loc":[-85.6325412,41.9425257]},"n2139989333":{"id":"n2139989333","loc":[-85.6340584,41.9431731]},"n2140006331":{"id":"n2140006331","loc":[-85.6361751,41.9459744]},"n2140006334":{"id":"n2140006334","loc":[-85.636528,41.9459751]},"n2140006336":{"id":"n2140006336","loc":[-85.6370918,41.9458926]},"n2140006338":{"id":"n2140006338","loc":[-85.6378806,41.9456474]},"n2140006340":{"id":"n2140006340","loc":[-85.6385831,41.9454343]},"n2140006342":{"id":"n2140006342","loc":[-85.639341,41.945157]},"n2140006344":{"id":"n2140006344","loc":[-85.6393497,41.9450232]},"n2140006346":{"id":"n2140006346","loc":[-85.6388245,41.9450145]},"n2140006348":{"id":"n2140006348","loc":[-85.6388167,41.9441739]},"n2140006351":{"id":"n2140006351","loc":[-85.6382915,41.9441797]},"n2140006353":{"id":"n2140006353","loc":[-85.63828,41.9438109]},"n2140006355":{"id":"n2140006355","loc":[-85.6381949,41.9436009]},"n2140006357":{"id":"n2140006357","loc":[-85.6371904,41.9435918]},"n2140006359":{"id":"n2140006359","loc":[-85.6366966,41.9432727]},"n2140006361":{"id":"n2140006361","loc":[-85.6353755,41.9432744]},"n2140006365":{"id":"n2140006365","loc":[-85.6350906,41.9435472]},"n2140006366":{"id":"n2140006366","loc":[-85.6343461,41.9441573]},"n2140006395":{"id":"n2140006395","loc":[-85.6351171,41.9437175]},"n2140006397":{"id":"n2140006397","loc":[-85.635352,41.9450206]},"n2140006399":{"id":"n2140006399","loc":[-85.6358194,41.9454937]},"n2140006401":{"id":"n2140006401","loc":[-85.6348693,41.9445739]},"n2140006431":{"id":"n2140006431","loc":[-85.6376737,41.9438023]},"n2140006437":{"id":"n2140006437","loc":[-85.6382631,41.9442724]},"n2189123379":{"id":"n2189123379","loc":[-85.6342671,41.9352665]},"w203974076":{"id":"w203974076","tags":{"highway":"footway"},"nodes":["n2139870442","n2139870457","n2139870458","n2139870459","n2139870460","n2139870452"]},"w170989131":{"id":"w170989131","tags":{"name":"St Joseph River","waterway":"river"},"nodes":["n1820938225","n1820938712","n1820937596","n1820937574","n1820938515","n1820938330","n1820938678","n1820938240","n1820938950","n1820939226","n1820939575","n1820937913","n1820938223","n1820937668","n1820938545","n1820937584","n1820939742","n1820939727","n1820937578","n1820938149","n1820938124","n1820938888","n1820938898","n1820937922","n1820939543","n1820939370","n1820939401","n1820939647","n1820938345","n1820939644","n1820938333","n1820938370","n1820938624","n1820938493","n1820939559","n1820939763","n1820939237","n1820939416","n1820937810","n1820938317","n1820938324","n1820937558","n1820939556","n1820938298","n1820939348","n1820939125","n1820939081","n1820938859","n1820939126","n1820938881","n1820939439","n1820939324","n1820939128","n1820938101","n1820937706","n1820938382","n1820938776","n1820937815","n1820939177","n1820939688","n1820938952","n1820938216","n1820938387","n1820939333","n1820938243","n1820938248","n1820937666","n1820939051","n1820938332","n1820939438","n1820939407","n1820939361","n1820937517","n1820938770","n1820939591","n1820937857","n1820938491","n1820937993","n1820938125","n1820938166","n1820937746","n1820939028","n1820937638","n1820938676","n1820938843","n1820938844","n1820937978","n1820938730","n1820939544","n1820938304","n1820939123","n1820939494","n1820939450","n1820939555","n1820938133","n1820938129","n1820938871","n1820939408","n1820938669","n1820938260","n1820939740","n1820937625","n1820938631","n1820939651","n1820939613","n1820937850","n1820938325","n1820937736","n1820938804","n1820938837","n1820938014","n1820938991","n1820938722","n1820938935","n1820937870","n1820938432","n1820937986","n1820938756","n1820938966","n1820939159","n1820937744","n1820938334","n1820937645","n1820939394","n1820937656","n1820938392","n1820939703","n1820938385","n1820938947","n1820938854","n1820938428","n1820938488","n1820938269","n1820938668","n1820938268","n1820938707","n1820937732","n1820939144","n1820938481","n1820938771","n1820938686","n1820938948","n1820937997","n1820937769","n1820939003","n1820938083","n1820939011","n1820938803","n1820938700","n1820939723","n1820938808","n1820938262","n1820938081","n1820938926","n1820938326","n1820938102","n1820938508","n1820939590","n1820939199","n1820938084","n1820938870","n1820938895","n1820937611","n1820938918","n1820938514","n1820939610","n1820938910","n1820937523","n1820938127","n1820939108","n1820937981","n1820938938","n1820938715","n1820939016","n1820938237","n1820939623","n1820939602","n1820937734","n1820938977","n1820939633","n1820939156","n1820939406","n1820938279","n1820938301","n1820937678","n1820937671","n1820939163","n1820938356","n1820939372","n1820937568","n1820937626","n1820939710","n1820939004","n1820938253","n1820938571","n1820937513","n1820939412","n1820939701","n1820939509","n1820938839","n1820939731","n1820937798","n1820939676","n1820939724","n1820939243","n1820939704","n1820937814","n1820937599","n1820938199","n1820938995","n1820938445","n1820938069","n1820938470","n1820939074","n1820938193","n1820938740","n1820938047","n1820939507","n1820939441","n1820939160","n1820937849","n1820937840","n1820938052","n1820938988","n1820938796","n1820937724","n1820937620","n1820939304","n1820938343","n1820939649","n1820938875","n1820939686","n1820938476","n1820937801","n1820937737","n1820938264","n1820939609","n1820939496","n1820939593","n1820939566","n1820939661","n1820937782","n1820938912","n1820939173","n1820937733","n1820938953","n1820939603","n1820937607","n1820938468","n1820939601","n1820939694","n1820939133","n1820938897","n1820938893","n1820937831","n1820937730","n1820938820","n1820938046","n1820938426","n1820938347","n1820937582","n1820938954","n1820938033","n1820938104","n1820938680","n1820939563","n1820939404","n1820939714","n1820939000","n1820937992","n1820938168","n1820939510","n1820939500","n1820937509","n1820938865","n1820939773","n1820938138","n1820938905","n1820937623","n1820939418","n1820937946","n1820939577","n1820937615","n1820939687","n1820939119","n1820937988","n1820938337","n1820937750","n1820938703","n1820938339","n1820939044","n1820939770","n1820938913","n1820937672","n1820939722","n1820937768","n1820939597","n1820939612","n1820937699","n1820937682","n1820937669","n1820937657","n1820939363","n1820937800","n1820938265","n1820937760","n1820938207","n1820938115","n1820939130","n1820939716","n1820938338","n1820938239","n1820939040","n1820938064","n1820938855","n1820939015","n1820938258","n1820939042","n1820939043","n1820938443","n1820939725","n1820937675","n1820938568","n1820938280","n1820937705","n1820938775","n1820938636","n1820938626","n1820937859","n1820938096","n1820937852","n1820939039","n1820938247","n1820938585","n1820937707","n1820938117","n1820938909","n1820939115","n1820939335","n1820938805","n1820937935","n1820937876","n1820938699","n1820937869","n1820938603","n1820938100","n1820938500","n1820938283","n1820938275","n1820938923","n1820938365","n1820938349","n1820937804","n1820937903","n1820937608","n1820938688","n1820939671","n1820938092","n1820937820","n1820938753","n1820938922","n1820937990","n1820939682","n1820939738","n1820939600","n1820938167","n1820937726","n1820939702","n1820938209","n1820939456","n1820937837","n1820938222","n1820938902","n1820939162","n1820938965","n1820938461","n1820937681","n1820937514","n1820937764","n1820939719","n1820939697","n1820938899","n1820939093","n1820938702","n1820939595","n1820938749","n1820938348","n1820937606","n1820938675","n1820938830","n1820938737","n1820938758","n1820938716","n1820939107","n1820937863","n1820939033","n1820938163","n1820937867","n1820938819","n1820938034","n1820938252","n1820937563","n1820937868","n1820939032","n1820938632","n1820937982","n1820937943","n1820939568","n1820939541","n1820938215","n1820939097","n1820938812","n1820937518","n1820937952","n1820938711","n1820938736","n1820939066","n1820937591","n1820938082","n1820938108","n1820938496","n1820939410","n1820938949","n1820938327","n1820937708","n1820939023","n1820937772","n1820938256","n1820939083","n1820938378","n1820938961","n1820937610","n1820939717","n1820938695","n1820938590","n1820939655","n1820938341","n1820939054","n1820939157","n1820939674","n1820939684","n1820939511","n1820937631","n1820939458","n1820937830","n1820937709","n1820937779","n1820939749","n1820938880","n1820938856","n1820938557","n1820939557","n1820938249","n1820938818","n1820937594","n1820939114","n1820938416","n1820937508","n1820938990","n1820938201","n1820937759","n1820937987","n1820939164","n1820939753","n1820938187","n1820939067","n1820937586","n1820937941","n1820938121","n1820937807","n1820938521","n1820939726","n1820938244","n1820939014","n1820938741","n1820937629","n1820938664","n1820938747","n1820939082","n1820938709","n1820938320","n1820938270","n1820937619","n1820937777","n1820937718","n1820939138","n1820938056","n1820938155","n1820938596","n1820937775","n1820938437","n1820938128","n1820939581","n1820939145","n1820938546","n1820938184","n1820937601","n1820937794","n1820938539","n1820939645","n1820938438","n1820938436","n1820939025","n1820938915","n1820938534","n1820937605","n1820939607","n1820939101","n1820939580","n1820939268","n1820939134","n1820938849","n1820938754","n1820938079","n1820937842","n1820938781","n1820938873","n1820938495","n1820938381","n1820938503","n1820939436","n1820938502","n1820939087","n1820938996","n1820938449","n1820938907","n1820937979","n1820937780","n1820937546","n1820939699","n1820937677","n1820938957","n1820938946","n1820937776","n1820937717","n1820938718","n1820937637","n1820938510","n1820937663","n1820938941","n1820939151","n1820937603","n1820938250","n1820937951","n1820938630","n1820938821","n1820938779","n1820938497","n1820938159","n1820939536","n1820938409","n1820938386","n1820939116","n1820938340","n1820939117","n1820938291","n1820938435","n1820937819","n1820938242","n1820939078","n1820938877","n1820939104","n1820939445","n1820938367","n1820938903","n1820939420","n1820938517","n1820939508","n1820939542","n1820939326","n1820938210","n1820939020","n1820938815","n1820937832","n1820939513","n1820937818","n1820939005","n1820938717","n1820939135","n1820938384","n1820937587","n1820939024","n1820939504","n1820939120","n1820939026","n1820938015","n1820938998","n1820937648","n1820939137","n1820937761","n1820938195","n1820938535","n1820939550","n1820938725","n1820938282","n1820937781","n1820937792","n1820939705","n1820937788","n1820939707","n1820937882","n1820939632","n1820938427","n1820938276","n1820939617","n1820939013","n1820939035","n1820937543","n1820939365","n1820937752","n1820937802","n1820939183","n1820939670","n1820938450","n1820939375","n1820937813","n1820937673","n1820937783","n1820939029","n1820939768","n1820939377","n1820937974","n1820939244","n1820939642","n1820937864","n1820938255","n1820938528","n1820939666","n1820938120","n1820937812","n1820938928","n1820939750","n1820939099","n1820938073","n1820938714","n1820939140","n1820938192","n1820937844","n1820938635","n1820938742","n1820939583","n1820937887","n1820938318","n1820938816","n1820939698","n1820938273","n1820939181","n1820937652","n1820938748","n1820937651","n1820938519","n1820938019","n1820938752","n1820938235","n1820939118","n1820938562","n1820939314","n1820939570","n1820938190","n1820938342","n1820938533","n1820937977","n1820939089","n1820939146","n1820938622","n1820938297","n1820938524","n1820939283","n1820938874","n1820938832","n1820937550","n1820937843","n1820938638","n1820938116","n1820938206","n1820938319","n1820939053","n1820937845","n1820938093","n1820939217","n1820938997","n1820939355","n1820938861","n1820938726","n1820938057","n1820939373","n1820937862","n1820938518","n1820939072","n1820939680","n1820938444","n1820938217","n1820938506","n1820938393","n1820938492","n1820938852","n1820938221","n1820938773","n1820937684","n1820939060","n1820938224","n1820938203","n1820938840","n1820937525","n1820938147","n1820938433","n1820938188","n1820939359","n1820938750","n1820938016","n1820938768","n1820937621","n1820937799","n1820938951","n1820938721","n1820939037","n1820937866","n1820939715","n1820938063","n1820938446","n1820937627","n1820939624","n1820938431","n1820939721","n1820939622","n1820939239","n1820939263","n1820939648","n1820939640","n1820938867","n1820938757","n1820938439","n1820939352","n1820937740","n1820939329","n1820938229","n1820937583","n1820938180","n1820938366","n1820937767","n1820937758","n1820939374","n1820938869","n1820938292","n1820938400","n1820938399","n1820939734","n1820939289","n1820938944","n1820937755","n1820938759","n1820938434","n1820937600","n1820937825","n1820937670","n1820937793","n1820938011","n1820938246","n1820938956","n1820937770","n1820937757","n1820938059","n1820937860","n1820937569","n1820939266","n1820939685","n1820939672","n1820938606","n1820938772","n1820939038","n1820938211","n1820938359","n1820939619","n1820938708","n1820939512","n1820938065","n1820939233","n1820939739","n1820938786","n1820938879","n1820939147","n1820938563","n1820939148","n1820937839","n1820937659","n1820937786","n1820938419","n1820939565","n1820939402","n1820937710","n1820938254","n1820938271","n1820938390","n1820937680","n1820938140","n1820937817","n1820938218","n1820937985","n1820939235","n1820938441","n1820938401","n1820938719","n1820937795","n1820938971","n1820938460","n1820939759","n1820937972","n1820937841","n1820938462","n1820939320","n1820938978","n1820938360","n1820939713","n1820937676","n1820939712","n1820937939","n1820938080","n1820937754","n1820937753","n1820938530","n1820937886","n1820939689","n1820939124","n1820938697","n1820938789","n1820939105","n1820938860","n1820938853","n1820939400","n1820937561","n1820938404","n1820938774","n1820939316","n1820937696","n1820938782","n1820938975","n1820937564","n1820939730","n1820938257","n1820937853","n1820938487","n1820938848","n1820938906","n1820939230","n1820938424","n1820938051","n1820937771","n1820939587","n1820939149","n1820938792","n1820939041","n1820938934","n1820939777","n1820937515","n1820939058","n1820938312","n1820939264","n1820939631","n1820939109","n1820939403","n1820939664","n1820938724","n1820938929","n1820939399","n1820939776","n1820939369","n1820939185","n1820937701","n1820938126","n1820938336","n1820938219","n1820939080","n1820938642","n1820938043","n1820937725","n1820938548","n1820938552","n1820938035","n1820938684","n1820937778","n1820938764","n1820939021","n1820939346","n1820937712","n1820939761","n1820938397","n1820937747","n1820938566","n1820939161","n1820939090","n1820939752","n1820939271","n1820938878","n1820938110","n1820938346","n1820938499","n1820938151","n1820939538","n1820938281","n1820939153","n1820938551","n1820939285","n1820938197","n1820938408","n1820938482","n1820939036","n1820939579","n1820938489","n1820938483","n1820938189","n1820938123","n1820938087","n1820937741","n1820938485","n1820937590","n1820938972","n1820937773","n1820937520","n1820938872","n1820938131","n1820938452","n1820938328","n1820939620","n1820937641","n1820938353","n1820939693","n1820938705","n1820937640","n1820939189","n1820938144","n1820939774","n1820938694","n1820938238","n1820939397","n1820937917","n1820938454","n1820938567","n1820938979","n1820938060","n1820938204","n1820937828","n1820939232","n1820938806","n1820938857","n1820938078","n1820938105","n1820939228","n1820938604","n1820937763","n1820937854","n1820938289","n1820939736","n1820937937","n1820937714","n1820938278","n1820938058","n1820938706","n1820938989","n1820938313","n1820938520","n1820938288","n1820937689","n1820939537","n1820939531","n1820939019","n1820937527","n1820938455","n1820938814","n1820938045","n1820939627","n1820938213","n1820938161","n1820938331","n1820938024","n1820938220","n1820938062","n1820938178","n1820937796","n1820937644","n1820938490","n1820937589","n1820937879","n1820939614","n1820938882","n1820938039","n1820938538","n1820937667","n1820937719","n1820938561","n1820939658","n1820938783","n1820938601","n1820938198","n1820938388","n1820938969","n1820937687","n1820939086","n1820939665","n1820939187","n1820938498","n1820938261","n1820937983","n1820938068","n1820938136","n1820939061","n1820938137","n1820938186","n1820939071","n1820937592","n1820939669","n1820937553","n1820939357","n1820938727","n1820939371","n1820939112","n1820939079","n1820938743","n1820938467","n1820938834","n1820938022","n1820938537","n1820938122","n1820938516","n1820937614","n1820937612","n1820939469","n1820939636","n1820939050","n1820939552","n1820938157","n1820938663","n1820938955","n1820939091","n1820938430","n1820938471","n1820937809","n1820938074","n1820938208","n1820938914","n1820938858","n1820938417","n1820937531","n1820938107","n1820939100","n1820938751","n1820937711","n1820938824","n1820939745","n1820937572","n1820938602","n1820938212","n1820938097","n1820937921","n1820938090","n1820938511","n1820938876","n1820939762","n1820938234","n1820938048","n1820937774","n1820937856","n1820937749","n1820937765","n1820938286","n1820939095","n1820938480","n1820939229","n1820938277","n1820937617","n1820938311","n1820937622","n1820939196","n1820937690","n1820939006","n1820939287","n1820939131","n1820938106","n1820938784","n1820938335","n1820938095","n1820938182","n1820937715","n1820937683","n1820938070","n1820939605","n1820938527","n1820938763","n1820938398","n1820937686","n1820939621","n1820937664","n1820939277","n1820938565","n1820939539","n1820938099","n1820939646","n1820938556","n1820937548","n1820938729","n1820939336","n1820938259","n1820938728","n1820938361","n1820937643","n1820938644","n1820939007","n1820939690","n1820939227","n1820937635","n1820937950","n1820938682","n1820939150","n1820939012","n1820939261","n1820939111","n1820937805","n1820939691","n1820939677","n1820937628","n1820937811","n1820938790","n1820938251","n1820938226","n1820938942","n1820937633","n1820937984","n1820937751","n1820939673","n1820938970","n1820938415","n1820938597","n1820938309","n1820938111","n1820938472","n1820938894","n1820938402","n1820937593","n1820938570","n1820939102","n1820939775","n1820937948","n1820939121","n1820937511","n1820938787","n1820939720","n1820939075","n1820937880","n1820937742","n1820937721","n1820939535","n1820938486","n1820938354","n1820937632","n1820939010","n1820938885","n1820938089","n1820937613","n1820938442","n1820938245","n1820938272","n1820937566","n1820938295","n1820938532","n1820938883","n1820937713","n1820937674","n1820939635","n1820938448","n1820938355","n1820938587","n1820938559","n1820937787","n1820939301","n1820937723","n1820939056","n1820937560","n1820938323","n1820938230","n1820938453","n1820938377","n1820938357","n1820939637","n1820938017","n1820939540","n1820939376","n1820937639","n1820937642","n1820938075","n1820938351","n1820938766","n1820937897","n1820938973","n1820938066","n1820939547","n1820939652","n1820937944","n1820937748","n1820939234","n1820939193","n1820937891","n1820938785","n1820939132","n1820938523","n1820938884","n1820938411","n1820939554","n1820938791","n1820937655","n1820938368","n1820939152","n1820938030","n1820938447","n1820937580","n1820939628","n1820937588","n1820937894","n1820939201","n1820938086","n1820937650","n1820938379","n1820939008","n1820938999","n1820937524","n1820937872","n1820938389","n1820939197","n1820938422","n1820938936","n1820939262","n1820937634","n1820938583","n1820939589","n1820937901","n1820939034","n1820939065","n1820938290","n1820939195","n1820938228","n1820937884","n1820938797","n1820938191","n1820939191","n1820939198","n1820937892","n1820939679","n1820938507","n1820937647","n1820937909","n1820938542","n1820939598","n1820937851","n1820939084","n1820939728","n1820937688","n1820938263","n1820938670","n1820937762","n1820939310","n1820938925","n1820938862","n1820938822","n1820938547","n1820937731","n1820938594","n1820938592","n1820938214","n1820938284","n1820937835","n1820938599","n1820939437","n1820937834","n1820937576","n1820937692","n1820939586","n1820939546","n1820938403","n1820937970","n1820939561","n1820938098","n1820938851","n1820938477","n1820938892","n1820939045","n1820939758","n1820939350","n1820938321","n1820938440","n1820938595","n1820938364","n1820938962","n1820938118","n1820939678","n1820938406","n1820938549","n1820937555","n1820938823","n1820937521","n1820939471","n1820939487","n1820938799","n1820938605","n1820937928","n1820938373","n1820939747","n1820939629","n1820937557","n1820937526","n1820938958","n1820938833","n1820937636","n1820938967","n1820938760","n1820938842","n1820938067","n1820939077","n1820939224","n1820938185","n1820939110","n1820938372","n1820939757","n1820939063","n1820939660","n1820938813","n1820937528","n1820938369","n1820938896","n1820939551","n1820939683","n1820937660","n1820937873","n1820938810","n1820938478","n1820939662","n1820937595","n1820939052","n1820938113","n1820939070","n1820938733","n1820937878","n1820938300","n1820939760","n1820939718","n1820937646","n1820939057","n1820939443","n1914861306","n1820938013","n1820937529","n1820939764","n1820938826","n1820937885","n1820939588","n1820937865","n1820937833","n1914861112","n1820938761","n1914861007","n1820937905","n1820938541","n1820939092","n1914861057","n1820938153","n1820938267","n1820939265","n1820938085","n1820939018","n1820939755","n1820938474","n1820939027","n1820938593","n1820938202","n1820939599","n1820939695","n1820938077","n1820938012","n1820939545","n1820939596","n1820939337","n1820938227","n1820937698","n1820938475","n1820939465","n1820938165","n1820938698","n1820938525","n1820938529","n1820938553","n1820938940","n1820939498","n1820938501","n1820939533","n1820938924","n1820939634","n1820939220","n1820939657","n1820938887","n1820938838","n1820938114","n1820937823","n1820938778","n1820938801","n1820939096","n1820938981","n1820937953","n1820938732","n1820938980","n1820938960","n1820937949","n1820938026","n1820939273","n1841425201","n1820938629","n1820938864","n1820938554","n1820938088","n1820937685","n1841425222","n1820939729","n1820937665","n1820937838","n1820937739","n1820938780","n1820937821","n1820938825","n1820939055","n1820939485","n1820938041","n1820938746","n1820939562","n1820938459","n1820939489","n1820938050","n1820937980","n1820937695","n1820938413","n1820938555","n1820937703","n1820938536","n1820938196","n1820938287","n1820938169","n1820939279","n1820938531","n1820938959","n1820939741","n1820938665","n1820938963","n1820939611","n1820937653","n1820939618","n1820939492","n1820938600","n1820938628","n1820939312","n1820939616","n1820937738","n1820939001","n1820939062","n1820938794","n1820938558","n1820937822","n1820937532","n1820939073","n1820938200","n1820938241","n1820938968","n1820938927","n1820938306","n1820937630","n1820938456","n1820937694","n1820938908","n1820939076","n1820937522","n1820939659","n1820938522","n1820939318","n1820938932","n1820938841","n1820937579","n1820937540","n1820938560","n1821139530","n1820938964","n1820937662","n1820939281","n1821139533","n1820937797","n1821139532","n1820939751","n1821139531","n1820939291","n1820938420","n1820939696","n1820938904","n1820938484","n1820939448","n1820939009","n1820938735","n1820938986","n1820938937","n1820939030","n1820938734","n1820938745","n1820939106","n1820938987","n1820937858","n1820938673","n1820938620","n1820937808","n1820937700","n1820939573","n1820938540","n1820937661","n1820937570","n1820938396","n1820937875","n1820939048","n1820938233","n1820938793","n1820939584","n1820938412","n1820938394","n1820937846","n1820938800","n1820938690","n1820939331","n1820939630","n1820938762","n1820938710","n1820939322","n1820938992","n1821137608","n1821137607","n1820937924","n1820939139","n1820939463","n1820939574","n1820938294","n1820938071","n1820938307","n1820938061","n1820939260","n1820937899","n1820938310","n1820938983","n1820937530","n1820938993","n1820938890","n1820937915","n1820938231","n1820938040","n1820938920","n1820939585","n1820938135","n1820939700","n1820937824","n1820939667","n1820937930","n1820938134","n1820937551","n1820939405","n1820938232","n1820937716","n1820937848","n1820939765","n1820939068","n1820939766","n1820937933","n1820937720","n1820939222","n1820939772","n1820939022","n1820939732","n1820937702","n1820937691","n1820938945","n1820937756","n1820938451","n1820938410","n1820938798","n1820937945","n1820937654","n1820938598","n1820938836","n1820937571","n1820937556","n1820938994","n1820938919","n1820938863","n1820939064","n1820938018","n1820937658","n1820937537","n1820938142","n1820938666","n1820937535","n1820939571","n1820938465","n1820939638","n1820937533","n1820939656","n1820939422","n1820938109","n1820938405","n1820938028","n1820937649","n1820938829","n1820939031","n1820939155","n1820938350","n1820938463","n1820938425","n1820939047","n1820938831","n1820938494","n1820937697","n1820938504","n1820938900","n1820937784","n1820938414","n1820938076","n1820938723","n1820937722","n1820938739","n1820937791","n1820938985","n1820938352","n1820938293","n1820938274","n1820939692","n1820937871","n1820939059","n1820938868","n1820937877","n1820937743","n1820938429","n1820937545","n1820937575","n1820938302","n1820938505","n1820938916","n1820938374","n1820938329","n1820937790","n1820939735","n1820938930","n1820937995","n1820938512","n1820938130","n1820938194","n1820938671","n1820938802","n1820937542","n1820937602","n1820939069","n1820938901","n1820939654","n1820937727","n1820939569","n1820938375","n1820939306","n1820938479","n1820938376","n1820938667","n1820937766","n1820939467","n1820939567","n1820937806","n1820938943","n1820938931","n1820937745","n1820939452","n1820938738","n1820938053","n1820939653","n1820938640","n1820937604","n1820937536","n1820938701","n1820939625","n1820939744","n1820939572","n1820937577","n1820937541","n1820938891","n1820937597","n1820938469","n1820939194","n1820937539","n1820938911","n1820939017","n1820939650","n1820939103","n1820939578","n1820938132","n1820937549","n1820938634","n1820939743","n1820937544","n1820937826","n1820937598","n1820937547","n1820938032","n1820939142"]},"w17963021":{"id":"w17963021","tags":{"highway":"residential"},"nodes":["n185948706","n185948708","n185948710"]},"w203974069":{"id":"w203974069","tags":{"amenity":"shelter","area":"yes","building":"yes","shelter_type":"picnic_shelter"},"nodes":["n2139870431","n2139870432","n2139870433","n2139870434","n2139870431"]},"w209816575":{"id":"w209816575","tags":{"area":"yes","building":"yes"},"nodes":["n2199856288","n2199856289","n2199856290","n2199856291","n2199856292","n2199856293","n2199856294","n2199856295","n2199856296","n2199856297","n2199856298","n2199856299","n2199856300","n2199856301","n2199856302","n2199856303","n2199856288"]},"w203841838":{"id":"w203841838","tags":{"area":"yes","natural":"water"},"nodes":["n2138493826","n2138493827","n2138493828","n2138493829","n2138493830","n2138493831","n2138493833","n2138493832","n2138493826"]},"w203972937":{"id":"w203972937","tags":{"highway":"path","name":"Riverwalk Trail","surface":"asphalt","width":"3"},"nodes":["n2139858882","n2139858883","n2139858884","n2139858885","n2139858886","n2139858887","n2139858882","n2139858888","n2139858889","n2139858890","n2139858891","n2139858892","n2139858893","n2139858894","n2139858895","n2139858896","n2139858897","n2139858898","n2139858899","n2139858900","n2139858901","n2139858902","n2139858903","n2139858986","n2139858904","n2139858995","n2139858905","n2139858906","n2139858907","n2139858908","n2139858909","n2139858910","n2139858911","n2139858912","n2139858913","n2139858914","n2139858915","n2139858916","n2139858917","n2139858918","n2139858919","n2139858920","n2139858921","n2139858922","n2139858923","n2139858924","n2139858925","n2139858926","n2139858927","n2139858982","n2139858928","n2139858929","n2139858930","n2139858931","n2139858932","n2139858981","n2139858933","n2139858934","n2139858935","n2139858936","n2139858937","n2139858938","n2139858939","n2139858940","n2139858941","n2139858942","n2139858943","n2140006437","n2139858964","n2139858944","n2139858966","n2139858945","n2139858946","n2139858947","n2139858948","n2139858949","n2139858950","n2139858951"]},"w17964015":{"id":"w17964015","tags":{"highway":"residential"},"nodes":["n185954680","n185954683","n185954685","n185954687","n185954689","n185954690","n185954691","n2139870379","n2139870456","n185954692","n185954693","n185954695"]},"w17967315":{"id":"w17967315","tags":{"highway":"residential","name":"South Andrews Street"},"nodes":["n185981999","n185974477","n185964963"]},"w203974071":{"id":"w203974071","tags":{"highway":"footway"},"nodes":["n2139870439","n2139870440","n2139870441","n2139870442","n2139870443","n2139870444","n2139870445","n2139870446","n2139870447","n2139870448","n2139870449"]},"w170848824":{"id":"w170848824","tags":{"name":"Rocky River","waterway":"river"},"nodes":["n1819858503","n1819858531","n1819858526","n1819858518","n1819858505","n1819858508","n1819858512","n1819858514","n1819858528","n1819858509","n1819858511","n1819858507","n1819858521"]},"w203986458":{"id":"w203986458","tags":{"amenity":"shelter","area":"yes","shelter_type":"picnic_shelter"},"nodes":["n2139989357","n2139989359","n2139989360","n2139989362","n2139989357"]},"w170844917":{"id":"w170844917","tags":{"waterway":"riverbank"},"nodes":["n1819805911","n1819805690","n1819805812","n1819805766","n1819805802","n1819805885","n1819805626","n1819805842","n1819805715","n1819805694","n1819805618","n1819805629","n1819805731","n1819805636","n1819805878","n1819805718","n1819805798","n1819849057","n1819805666","n1819805852","n1819805805","n1819805789","n1819805868","n1819805680","n1819805918","n1819848888","n1819805762","n2139989328","n1819805907","n2139989330","n1819805915","n1819858521","n1819805854","n1819805876","n1819805864","n1819805922","n2139859004","n1819805702","n2139859003","n1819805614","n1819805792","n1819805786","n1819805777","n1819805645","n1819805838","n1819805889","n1819805795","n1819805707","n1819805774","n1819805808","n1819805810","n1819805724","n1819805676","n1819805728","n1819805783","n1819805687","n1819805727","n2189123379","n1819805632","n1819805641","n1819805760","n1819805887","n1819805861","n1819805722","n1819805880","n2139982405","n2139982399","n2139982400","n1819805770","n2139982402","n2139982403","n2139982401","n1819805780","n1819805834","n2139982406","n1819805698","n1819805647","n1819805870","n1819805683","n1819805622","n1819805639","n1819805858","n1819805643","n1819805673","n1819805925","n1819805849","n1819805711","n1819805846","n1819805669","n1819805883","n1819805814","n1819805873","n1819805911"]},"w17967326":{"id":"w17967326","tags":{"highway":"residential","name":"North Constantine Street"},"nodes":["n185985217","n185985219","n185985221","n185985222","n185985223","n185985225","n2140006431","n185985227","n185985229","n185985231","n185985233","n185985235","n185985238","n185985240","n2140018998","n185964965"]},"w134150789":{"id":"w134150789","tags":{"highway":"primary","name":"West Michigan Avenue","old_ref":"US 131","ref":"US 131 Business;M 60"},"nodes":["n185964971","n2139870406","n185964972"]},"w17966400":{"id":"w17966400","tags":{"highway":"tertiary","name":"South Constantine Street"},"nodes":["n185958672","n185964965"]},"w203974066":{"id":"w203974066","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2139870417","n2139870418","n2139870420","n2139870419"]},"w17965998":{"id":"w17965998","tags":{"name":"Conrail Railroad","railway":"rail"},"nodes":["n185972775","n185972777","n185972779","n185972781","n185972783","n185972785","n185972787","n185972788","n185972789","n185972790","n185972791","n185972793","n185972795","n185972797","n185972798","n185972800","n185972802","n185972805","n185972807","n185972809","n185972811","n185972813","n185972814","n185972815","n185972816","n185972817","n185972819","n185972821","n185972824","n185972826","n185972830","n185972832","n185972834","n185972835","n185972836","n185972839","n185990434","n2114807572","n2114807568","n185972845","n2114807583","n185972847","n185972849","n185972851","n2114807578","n1475293254","n2114807593","n1475293226","n185972862","n2114807565","n185951869","n1475293234","n1475293252","n185972868","n1475293264","n1475293222","n185972878","n1475293261","n185972882","n185972885","n1475293260","n1475293240","n185972891","n185972895","n185972897","n185972899","n2130304159","n1475284023","n185972903"]},"w134150795":{"id":"w134150795","tags":{"bridge":"yes","highway":"primary","name":"West Michigan Avenue","old_ref":"US 131","ref":"US 131 Business;M 60"},"nodes":["n185964970","n185964971"]},"w203974067":{"id":"w203974067","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2139870420","n2139870421"]},"w170995908":{"id":"w170995908","tags":{"highway":"residential","name":"Thomas Street"},"nodes":["n1821006702","n1821006700","n1821006698","n2139858990","n1821006716","n1821006725","n1821006712","n1821006704","n1821006708","n1821006710","n1821006706"]},"w17965834":{"id":"w17965834","tags":{"highway":"residential","name":"Spring Street"},"nodes":["n185971361","n185971364","n185971366","n185971368","n185954695","n185964968"]},"w203974070":{"id":"w203974070","tags":{"amenity":"shelter","area":"yes","building":"yes","shelter_type":"picnic_shelter"},"nodes":["n2139870435","n2139870436","n2139870437","n2139870438","n2139870435"]},"w203989879":{"id":"w203989879","tags":{"highway":"service"},"nodes":["n2140018998","n2140018999","n2140019000"]},"w203974062":{"id":"w203974062","tags":{"amenity":"parking","area":"yes"},"nodes":["n2139870387","n2139870388","n2139870389","n2139870390","n2139870391","n2139870392","n2139870397","n2139870393","n2139870396","n2139870395","n2139870394","n2139870387"]},"w203974061":{"id":"w203974061","tags":{"bridge":"yes","highway":"footway"},"nodes":["n2139870382","n2139870383"]},"w203049587":{"id":"w203049587","tags":{"area":"yes","name":"Scidmore Park Petting Zoo","tourism":"zoo","zoo":"petting_zoo"},"nodes":["n2130304133","n2130304136","n2130304138","n2130304140","n2130304142","n2130304144","n2130304146","n2130304147","n2130304148","n2130304149","n2130304150","n2130304151","n2130304133"]},"w203972941":{"id":"w203972941","tags":{"highway":"path"},"nodes":["n2139858982","n2139858983","n2139858984","n2139858985","n2139858927"]},"w203974065":{"id":"w203974065","tags":{"highway":"service"},"nodes":["n2139870406","n2139870407","n2139870408","n2139870417","n2139870409","n2139870410","n2139870411","n2139870412","n2139870426","n2139870413","n2139870414","n2139870415","n2139870419","n2139870416","n2139870421","n2139870408"]},"w203972940":{"id":"w203972940","tags":{"highway":"path","name":"Riverwalk Trail"},"nodes":["n2139858934","n2139858967","n2139858968","n2139858969","n2139858970","n2139858971","n2139858972","n2139858973","n2139858974","n2139858975","n2139858976","n2139858977","n2139858978","n2139858979","n2139858980","n2139858981"]},"w203974072":{"id":"w203974072","tags":{"highway":"footway"},"nodes":["n2139858925","n2139870450","n2139870453","n2139870451","n2139870452","n2139870441"]},"w203974074":{"id":"w203974074","tags":{"highway":"footway"},"nodes":["n2139870454","n2139870456","n2139870429"]},"w203974060":{"id":"w203974060","tags":{"highway":"footway"},"nodes":["n2139870383","n2139870384","n2139870422","n2139870385","n2139870386","n2139870388"]},"w203841837":{"id":"w203841837","tags":{"area":"yes","natural":"water"},"nodes":["n2138493807","n2138493808","n2138493809","n2138493810","n2138493811","n2138493812","n2138493813","n2138493814","n2138493815","n2138493816","n2138493825","n2138493817","n2138493824","n2138493818","n2138493819","n2138493820","n2138493821","n2138493822","n2138493823","n2138493807"]},"w134150845":{"id":"w134150845","tags":{"bridge":"yes","name":"Conrail Railroad","railway":"rail"},"nodes":["n185972903","n185972905"]},"w203974059":{"id":"w203974059","tags":{"highway":"footway"},"nodes":["n2139870430","n2139870439","n2139870429","n2139870428","n2139870379","n2139870455","n2139870380","n2139870381","n2139858925","n2139870382"]},"w203986457":{"id":"w203986457","tags":{"area":"yes","leisure":"park","name":"Scidmore Park"},"nodes":["n2139989333","n2139989335","n2139989337","n2139989339","n1819805762","n2139989328","n1819805907","n2139989330","n1819805915","n2139989341","n2139989344","n2139989346","n2139989348","n2139989350","n2139989351","n2139989353","n2139989355","n2139989333"]},"w170848331":{"id":"w170848331","tags":{"name":"Rocky River","waterway":"river"},"nodes":["n1819848937","n1819849104","n1819849076","n1819849183","n1819848928","n1819848972","n1819848948","n1819848971","n1819848859","n1819849008","n1819848889","n1819849026","n1819849094","n1819849083","n1819849079","n1819849187","n1819848992","n1819849060","n1819849056","n1819849071","n1819849067","n1819849048","n1819849036","n1819849150","n1819849075","n1819849051","n1819849062","n1819848926","n1819849035","n1819848987","n1819849012","n1819848933","n1819848996","n1819848990","n1819849005","n1819849021","n1819848892","n1819849092","n1819848863","n1819848922","n1819848858","n1819848855","n1819848974","n1819848953","n1819849019","n1819849049","n1819848979","n1819849140","n1819849193","n1819849147","n1819849151","n1819849163","n1819849023","n1819848878","n1819849004","n1819848857","n1819848879","n1819849041","n1819849165","n1819849107","n1819849156","n1819848934","n1819848914","n1819848955","n1819848931","n1819848927","n1819849084","n1819849169","n1819849045","n1819848945","n1819849095","n1819848924","n1819849171","n1819849141","n1819849046","n1819849197","n1819849011","n1819849108","n1819849158","n1819849160","n1819848870","n1819849006","n1819849157","n1819848993","n1819848970","n1819849202","n1819848903","n1819848975","n1819848849","n1819849025","n1819849105","n1819849033","n1819849176","n1819849099","n1819849086","n1819848960","n1819848961","n1819849001","n1819848980","n1819849038","n1819848854","n1819849127","n1819849170","n1819849139","n1819848873","n1819848929","n1819849201","n1819849121","n1819849031","n1819849131","n1819848875","n1819849080","n1819849066","n1819849081","n1819849096","n1819849172","n1819849114","n1819849182","n1819848905","n1819849054","n1819848920","n1819848851","n1819848968","n1819848917","n1819849111","n1819849119","n1819849074","n1819848893","n1819849129","n1819848850","n1819848956","n1819849154","n1819848877","n1819848986","n1819849191","n1819848952","n1819848954","n1819848942","n1819849028","n1819849195","n1819848938","n1819848962","n1819849070","n1819849034","n1819849052","n1819849059","n1819848916","n1819849162","n1819849167","n1819849093","n1819849030","n1819849002","n1819849161","n1819848886","n1819848958","n1819849064","n1819849112","n1819849148","n1819848856","n1819848976","n1819848977","n1819849144","n1819848918","n1819849200","n1819848919","n1819849042","n1819849166","n1819849186","n1819849152","n1819849058","n1819849185","n1819849199","n1819849053","n1819849194","n1819849068","n1819849146","n1819849174","n1819848967","n1819848932","n1819849155","n1819849198","n1819848964","n1819848894","n1819848969","n1819849184","n1819849055","n1819849179","n1819848865","n1819848860","n1819849082","n1819848966","n1819849040","n1819849069","n1819849078","n1819849077","n1819848904","n1819848959","n1819849133","n1819849089","n1819849000","n1819849124","n1819849032","n1819849097","n1819848939","n1819849072","n1819848915","n1819849196","n1819848946","n1819849047","n1819849029","n1819849164","n1819848994","n1819849022","n1819858513","n1819849126","n1819849063","n1819848941","n1819849085","n1819848871","n1819848943","n1819849192","n1819858501","n1819849159","n1819858523","n1819848901","n1819849189","n1819858503","n1819849065","n2139877106","n1819848909","n1819848930","n1819848888"]},"w17967397":{"id":"w17967397","tags":{"highway":"residential","name":"North Andrews Street"},"nodes":["n185964963","n185985217"]},"w17964497":{"id":"w17964497","tags":{"highway":"tertiary","name":"Constantine St"},"nodes":["n185958643","n185958645","n2139795852","n185958647","n185958649","n185958651","n185958653","n185958656","n185958658","n185958660","n185958662","n185958664","n185958666","n185958668","n185958670","n185948710","n185958672"]},"w203974068":{"id":"w203974068","tags":{"highway":"footway"},"nodes":["n2139870422","n2139870423","n2139870424","n2139870425","n2139870426","n2139870427"]},"w203974063":{"id":"w203974063","tags":{"amenity":"parking","area":"yes"},"nodes":["n2139870398","n2139870399","n2139870400","n2139870401","n2139870398"]},"w203986459":{"id":"w203986459","tags":{"amenity":"shelter","area":"yes","shelter_type":"picnic_shelter"},"nodes":["n2139989364","n2139989366","n2139989368","n2139989370","n2139989364"]},"w203988286":{"id":"w203988286","tags":{"area":"yes","leisure":"park","name":"Memory Isle Park"},"nodes":["n2140006331","n2140006334","n2140006336","n2140006338","n2140006340","n2140006342","n2140006344","n2140006346","n2140006348","n2140006351","n2140006353","n2140006355","n2140006357","n2140006359","n2140006361","n2140006363","n2140006364","n2140006365","n2140006395","n2140006366","n2140006401","n2140006397","n2140006399","n2140006331"]},"w203974073":{"id":"w203974073","tags":{"highway":"footway"},"nodes":["n2139870453","n2139870454","n2139870455"]},"w203974064":{"id":"w203974064","tags":{"amenity":"parking","area":"yes"},"nodes":["n2139870402","n2139870403","n2139870404","n2139870405","n2139870402"]},"n185966959":{"id":"n185966959","loc":[-85.642185,41.946411]},"n1475283980":{"id":"n1475283980","loc":[-85.6398249,41.9451425]},"n1475284013":{"id":"n1475284013","loc":[-85.6396448,41.9451666]},"n1475284042":{"id":"n1475284042","loc":[-85.6386382,41.9454789]},"n185975925":{"id":"n185975925","loc":[-85.6393332,41.9452388]},"n185975919":{"id":"n185975919","loc":[-85.6391279,41.9453044]},"n185975917":{"id":"n185975917","loc":[-85.6389034,41.9453872]},"n2140006369":{"id":"n2140006369","loc":[-85.6386163,41.9451631]},"n2140006370":{"id":"n2140006370","loc":[-85.6385144,41.9449357]},"n2140006417":{"id":"n2140006417","loc":[-85.6385785,41.9450299]},"n2140006419":{"id":"n2140006419","loc":[-85.6385781,41.9452152]},"n2189123361":{"id":"n2189123361","loc":[-85.6404948,41.947015]},"n2189123363":{"id":"n2189123363","loc":[-85.6395765,41.946495]},"n2189123365":{"id":"n2189123365","loc":[-85.6389347,41.9460875]},"n185966962":{"id":"n185966962","loc":[-85.644417,41.946364]},"n185975911":{"id":"n185975911","loc":[-85.637532,41.9458276]},"n185975913":{"id":"n185975913","loc":[-85.6376323,41.9457936]},"n185975915":{"id":"n185975915","loc":[-85.6383596,41.9455425]},"n185975932":{"id":"n185975932","loc":[-85.644403,41.945088]},"n185975934":{"id":"n185975934","loc":[-85.645486,41.945084]},"n185979974":{"id":"n185979974","loc":[-85.644381,41.943831]},"n2139795809":{"id":"n2139795809","loc":[-85.6464756,41.9450813]},"n2139795810":{"id":"n2139795810","loc":[-85.6466646,41.945174]},"n2139858952":{"id":"n2139858952","loc":[-85.6383567,41.9454039]},"n2139858953":{"id":"n2139858953","loc":[-85.6380506,41.9455301]},"n2139858954":{"id":"n2139858954","loc":[-85.6377321,41.9455546]},"n2139858955":{"id":"n2139858955","loc":[-85.6376571,41.9455245]},"n2139858956":{"id":"n2139858956","loc":[-85.6375859,41.9454544]},"n2139858957":{"id":"n2139858957","loc":[-85.6376686,41.9453185]},"n2139858958":{"id":"n2139858958","loc":[-85.6378936,41.9451712]},"n2139858959":{"id":"n2139858959","loc":[-85.6379225,41.9450825]},"n2139858960":{"id":"n2139858960","loc":[-85.6379302,41.9447564]},"n2139858961":{"id":"n2139858961","loc":[-85.6379763,41.9446963]},"n2139858962":{"id":"n2139858962","loc":[-85.6380436,41.9446706]},"n2139858963":{"id":"n2139858963","loc":[-85.6381286,41.9445969]},"n2139858965":{"id":"n2139858965","loc":[-85.6382523,41.9444134]},"n2140006367":{"id":"n2140006367","loc":[-85.6380923,41.9454418]},"n2140006368":{"id":"n2140006368","loc":[-85.6384089,41.9453146]},"n2140006372":{"id":"n2140006372","loc":[-85.6383252,41.9447706]},"n2140006374":{"id":"n2140006374","loc":[-85.6381033,41.9447436]},"n2140006376":{"id":"n2140006376","loc":[-85.6379759,41.9447815]},"n2140006378":{"id":"n2140006378","loc":[-85.6379832,41.9448654]},"n2140006380":{"id":"n2140006380","loc":[-85.6380632,41.9450738]},"n2140006382":{"id":"n2140006382","loc":[-85.6380414,41.9452064]},"n2140006389":{"id":"n2140006389","loc":[-85.6379068,41.9453092]},"n2140006391":{"id":"n2140006391","loc":[-85.637925,41.9453904]},"n2140006393":{"id":"n2140006393","loc":[-85.6379977,41.94545]},"n2189123275":{"id":"n2189123275","loc":[-85.6371346,41.9462544]},"n2189123278":{"id":"n2189123278","loc":[-85.6368371,41.9466153]},"n2189123280":{"id":"n2189123280","loc":[-85.6379537,41.9489088]},"n2189123282":{"id":"n2189123282","loc":[-85.6383816,41.9497858]},"n2189123285":{"id":"n2189123285","loc":[-85.6393673,41.9512417]},"n2189123287":{"id":"n2189123287","loc":[-85.640554,41.9517766]},"n2189123289":{"id":"n2189123289","loc":[-85.6411,41.9522344]},"n2189123291":{"id":"n2189123291","loc":[-85.6417418,41.9526574]},"n2189123293":{"id":"n2189123293","loc":[-85.642321,41.9529407]},"n2189123295":{"id":"n2189123295","loc":[-85.6427697,41.9532278]},"n2189123297":{"id":"n2189123297","loc":[-85.6433332,41.9538254]},"n2189123300":{"id":"n2189123300","loc":[-85.6435785,41.9543648]},"n2189123301":{"id":"n2189123301","loc":[-85.6444394,41.9541048]},"n2189123303":{"id":"n2189123303","loc":[-85.6450603,41.954]},"n2189123312":{"id":"n2189123312","loc":[-85.6454829,41.9539108]},"n2189123314":{"id":"n2189123314","loc":[-85.6460464,41.9538526]},"n2189123315":{"id":"n2189123315","loc":[-85.6463178,41.9537167]},"n2189123316":{"id":"n2189123316","loc":[-85.646276,41.9534141]},"n2189123317":{"id":"n2189123317","loc":[-85.6459995,41.9531541]},"n2189123318":{"id":"n2189123318","loc":[-85.645222,41.9531929]},"n2189123319":{"id":"n2189123319","loc":[-85.6447316,41.9531813]},"n2189123320":{"id":"n2189123320","loc":[-85.6440637,41.9532977]},"n2189123321":{"id":"n2189123321","loc":[-85.6438185,41.9531774]},"n2189123322":{"id":"n2189123322","loc":[-85.6440011,41.9528398]},"n2189123323":{"id":"n2189123323","loc":[-85.6442672,41.9525914]},"n2189123324":{"id":"n2189123324","loc":[-85.6442881,41.9523276]},"n2189123326":{"id":"n2189123326","loc":[-85.644262,41.952153]},"n2189123328":{"id":"n2189123328","loc":[-85.6441681,41.9520404]},"n2189123330":{"id":"n2189123330","loc":[-85.6442098,41.9517494]},"n2189123333":{"id":"n2189123333","loc":[-85.6438498,41.9515864]},"n2189123336":{"id":"n2189123336","loc":[-85.6435889,41.9513225]},"n2189123339":{"id":"n2189123339","loc":[-85.6425349,41.9510315]},"n2189123342":{"id":"n2189123342","loc":[-85.6422688,41.9508802]},"n2189123345":{"id":"n2189123345","loc":[-85.6418775,41.9508142]},"n2189123348":{"id":"n2189123348","loc":[-85.6415488,41.9508064]},"n2189123351":{"id":"n2189123351","loc":[-85.6411027,41.9505488]},"n2189123353":{"id":"n2189123353","loc":[-85.6410374,41.9498208]},"n2189123355":{"id":"n2189123355","loc":[-85.6410061,41.9494327]},"n2189123357":{"id":"n2189123357","loc":[-85.6411522,41.9482569]},"n2189123359":{"id":"n2189123359","loc":[-85.6410548,41.9473036]},"n2189123368":{"id":"n2189123368","loc":[-85.6380216,41.9458974]},"n2189123370":{"id":"n2189123370","loc":[-85.6386721,41.9507782]},"w17968193":{"id":"w17968193","tags":{"highway":"residential","name":"French St"},"nodes":["n185970906","n185982877","n185967774","n185985823","n185979974"]},"w203972939":{"id":"w203972939","tags":{"highway":"path"},"nodes":["n2139858965","n2139858966"]},"w203988289":{"id":"w203988289","tags":{"area":"yes","natural":"water"},"nodes":["n2140006367","n2140006368","n2140006419","n2140006369","n2140006417","n2140006370","n2140006372","n2140006374","n2140006376","n2140006378","n2140006380","n2140006382","n2140006389","n2140006391","n2140006393","n2140006367"]},"w208640157":{"id":"w208640157","tags":{"area":"yes","natural":"wetland"},"nodes":["n1819849029","n2189123275","n2189123278","n2189123280","n2189123282","n2189123370","n2189123285","n2189123287","n2189123289","n2189123291","n2189123293","n2189123295","n2189123297","n2189123300","n2189123301","n2189123303","n2189123312","n2189123314","n2189123315","n2189123316","n2189123317","n2189123318","n2189123319","n2189123320","n2189123321","n2189123322","n2189123323","n2189123324","n2189123326","n2189123328","n2189123330","n2189123333","n2189123336","n2189123339","n2189123342","n2189123345","n2189123348","n2189123351","n2189123353","n2189123355","n2189123357","n2189123359","n2189123361","n2189123363","n2189123365","n2189123368","n1819849029"]},"w17966281":{"id":"w17966281","tags":{"highway":"residential","name":"Pealer St"},"nodes":["n185975911","n185975913","n185975915","n1475284042","n185975917","n185975919","n185975925","n185970909","n1475284013","n1475283980","n185975928","n185967775","n185975930","n185975932","n185975934","n2139795809","n2139795810"]},"w17965353":{"id":"w17965353","tags":{"highway":"residential","name":"Yauney St"},"nodes":["n185966958","n185966959","n185966960","n185966962"]},"w203972938":{"id":"w203972938","tags":{"highway":"path","name":"Riverwalk Trail"},"nodes":["n2139858964","n2139858965","n2139858963","n2139858962","n2139858961","n2139858960","n2139858959","n2139858958","n2139858957","n2139858956","n2139858955","n2139858954","n2139858953","n2139858952","n2139858951"]},"n354002665":{"id":"n354002665","loc":[-85.6366599,41.9444923],"tags":{"name":"Memory Isle","place":"island"}},"n354031301":{"id":"n354031301","loc":[-85.635,41.9463889],"tags":{"amenity":"post_office","name":"Three Rivers Post Office"}},"n185963454":{"id":"n185963454","loc":[-85.633686,41.946072]},"n185963455":{"id":"n185963455","loc":[-85.633815,41.946131]},"n185963456":{"id":"n185963456","loc":[-85.633951,41.946174]},"n185978375":{"id":"n185978375","loc":[-85.634385,41.94559]},"n185978377":{"id":"n185978377","loc":[-85.634544,41.945725]},"n185978379":{"id":"n185978379","loc":[-85.634573,41.945764]},"n185978381":{"id":"n185978381","loc":[-85.634616,41.945849]},"n185978383":{"id":"n185978383","loc":[-85.634629,41.945893]},"n185984011":{"id":"n185984011","loc":[-85.636058,41.946201]},"n185984013":{"id":"n185984013","loc":[-85.636112,41.946366]},"n185984015":{"id":"n185984015","loc":[-85.636143,41.946551]},"n185988237":{"id":"n185988237","loc":[-85.6354162,41.946044]},"n185988969":{"id":"n185988969","loc":[-85.635374,41.945325]},"n185988971":{"id":"n185988971","loc":[-85.635643,41.945585]},"n185988972":{"id":"n185988972","loc":[-85.635853,41.94586]},"n1475283992":{"id":"n1475283992","loc":[-85.6372968,41.9459007]},"n1475284011":{"id":"n1475284011","loc":[-85.6359415,41.9459797]},"n1475284019":{"id":"n1475284019","loc":[-85.6364433,41.9460423]},"n185984009":{"id":"n185984009","loc":[-85.6360524,41.9460485]},"n185988239":{"id":"n185988239","loc":[-85.6358187,41.9460423]},"n185988243":{"id":"n185988243","loc":[-85.6366156,41.9460282]},"n185988244":{"id":"n185988244","loc":[-85.6368316,41.9460046]},"n185988245":{"id":"n185988245","loc":[-85.6370133,41.9459704]},"n185988241":{"id":"n185988241","loc":[-85.636291,41.9460461]},"n185964976":{"id":"n185964976","loc":[-85.633923,41.9434157]},"n185964980":{"id":"n185964980","loc":[-85.6333656,41.9437293]},"n185978388":{"id":"n185978388","loc":[-85.6346449,41.9460571]},"n1819858504":{"id":"n1819858504","loc":[-85.6365343,41.9447926]},"n1819858506":{"id":"n1819858506","loc":[-85.6370546,41.9451882]},"n1819858516":{"id":"n1819858516","loc":[-85.6358369,41.9444654]},"n1819858519":{"id":"n1819858519","loc":[-85.6361534,41.9446176]},"n1819858525":{"id":"n1819858525","loc":[-85.6368025,41.9449442]},"n1819858527":{"id":"n1819858527","loc":[-85.6334199,41.9457495]},"n185963452":{"id":"n185963452","loc":[-85.633564,41.9458519]},"n185963453":{"id":"n185963453","loc":[-85.6336152,41.9459804]},"n185963451":{"id":"n185963451","loc":[-85.6332888,41.9456871]},"n2130304152":{"id":"n2130304152","loc":[-85.6359466,41.9454599]},"n2130304153":{"id":"n2130304153","loc":[-85.6362773,41.9452683]},"n2130304154":{"id":"n2130304154","loc":[-85.6352028,41.9442868]},"n2130304155":{"id":"n2130304155","loc":[-85.6348756,41.9444769]},"n2130304156":{"id":"n2130304156","loc":[-85.6349723,41.9444207]},"n2130304157":{"id":"n2130304157","loc":[-85.6338698,41.9434443]},"n2130304158":{"id":"n2130304158","loc":[-85.635094,41.9451026]},"n2130304160":{"id":"n2130304160","loc":[-85.6353716,41.9449322]},"n2130304162":{"id":"n2130304162","loc":[-85.6365942,41.9459352]},"n2130304163":{"id":"n2130304163","loc":[-85.6369006,41.9457469]},"n2130304164":{"id":"n2130304164","loc":[-85.6363292,41.9452278]},"n2130304165":{"id":"n2130304165","loc":[-85.6360248,41.9454175]},"n2139824683":{"id":"n2139824683","loc":[-85.6339825,41.9446441]},"n2139824689":{"id":"n2139824689","loc":[-85.6340437,41.9446925]},"n2139824702":{"id":"n2139824702","loc":[-85.6340961,41.9447551]},"n2139824705":{"id":"n2139824705","loc":[-85.6337467,41.944809]},"n2139824707":{"id":"n2139824707","loc":[-85.6341598,41.9448129]},"n2139824710":{"id":"n2139824710","loc":[-85.6342771,41.9448223]},"n2139824712":{"id":"n2139824712","loc":[-85.6346058,41.944841]},"n2139824713":{"id":"n2139824713","loc":[-85.633808,41.9448574]},"n2139824714":{"id":"n2139824714","loc":[-85.6340889,41.9448589]},"n2139824716":{"id":"n2139824716","loc":[-85.6343335,41.944871]},"n2139824717":{"id":"n2139824717","loc":[-85.6343341,41.9448717]},"n2139824720":{"id":"n2139824720","loc":[-85.6338757,41.9449069]},"n2139824721":{"id":"n2139824721","loc":[-85.6341445,41.9449071]},"n2139824724":{"id":"n2139824724","loc":[-85.6334787,41.9449262]},"n2139824726":{"id":"n2139824726","loc":[-85.6347119,41.9449332]},"n2139824727":{"id":"n2139824727","loc":[-85.6347175,41.9449418]},"n2139824728":{"id":"n2139824728","loc":[-85.6344284,41.9449538]},"n2139824729":{"id":"n2139824729","loc":[-85.6339339,41.9449573]},"n2139824730":{"id":"n2139824730","loc":[-85.6339179,41.9449682]},"n2139824732":{"id":"n2139824732","loc":[-85.6335472,41.9449895]},"n2139824733":{"id":"n2139824733","loc":[-85.6339736,41.9450164]},"n2139824735":{"id":"n2139824735","loc":[-85.6336034,41.9450415]},"n2139824736":{"id":"n2139824736","loc":[-85.6348317,41.945043]},"n2139824737":{"id":"n2139824737","loc":[-85.63403,41.9450651]},"n2139824738":{"id":"n2139824738","loc":[-85.6336611,41.9450949]},"n2139824740":{"id":"n2139824740","loc":[-85.6336582,41.9450966]},"n2139824744":{"id":"n2139824744","loc":[-85.6331702,41.9451107]},"n2139824745":{"id":"n2139824745","loc":[-85.6333388,41.9451142]},"n2139824746":{"id":"n2139824746","loc":[-85.6337131,41.9451341]},"n2139824747":{"id":"n2139824747","loc":[-85.6337021,41.9451372]},"n2139824748":{"id":"n2139824748","loc":[-85.6341244,41.9451472]},"n2139824749":{"id":"n2139824749","loc":[-85.6333952,41.945166]},"n2139824750":{"id":"n2139824750","loc":[-85.633395,41.9451661]},"n2139824751":{"id":"n2139824751","loc":[-85.6346258,41.9451725]},"n2139824752":{"id":"n2139824752","loc":[-85.6332387,41.9451741]},"n2139824753":{"id":"n2139824753","loc":[-85.6346901,41.9451853]},"n2139824754":{"id":"n2139824754","loc":[-85.6346611,41.9452035]},"n2139824755":{"id":"n2139824755","loc":[-85.6346574,41.9452059]},"n2139824756":{"id":"n2139824756","loc":[-85.6345611,41.9452133]},"n2139824757":{"id":"n2139824757","loc":[-85.633453,41.9452194]},"n2139824758":{"id":"n2139824758","loc":[-85.6335508,41.9452283]},"n2139824759":{"id":"n2139824759","loc":[-85.6347424,41.9452312]},"n2139824760":{"id":"n2139824760","loc":[-85.6342305,41.9452395]},"n2139824761":{"id":"n2139824761","loc":[-85.6342319,41.9452449]},"n2139824762":{"id":"n2139824762","loc":[-85.6334969,41.94526]},"n2139824763":{"id":"n2139824763","loc":[-85.63468,41.9452706]},"n2139824764":{"id":"n2139824764","loc":[-85.6346772,41.9452724]},"n2139824765":{"id":"n2139824765","loc":[-85.6338611,41.9452763]},"n2139824766":{"id":"n2139824766","loc":[-85.6347811,41.9452939]},"n2139824767":{"id":"n2139824767","loc":[-85.6347375,41.9453211]},"n2139824768":{"id":"n2139824768","loc":[-85.6339171,41.9453301]},"n2139824769":{"id":"n2139824769","loc":[-85.6348307,41.9453377]},"n2139824770":{"id":"n2139824770","loc":[-85.6347067,41.9453405]},"n2139824771":{"id":"n2139824771","loc":[-85.6343461,41.9453461]},"n2139824772":{"id":"n2139824772","loc":[-85.6343481,41.9453475]},"n2139824773":{"id":"n2139824773","loc":[-85.634805,41.9453538]},"n2139824774":{"id":"n2139824774","loc":[-85.6336997,41.9453692]},"n2139824775":{"id":"n2139824775","loc":[-85.6339709,41.9453818]},"n2139824776":{"id":"n2139824776","loc":[-85.6336229,41.9454134]},"n2139824777":{"id":"n2139824777","loc":[-85.6349022,41.9454141]},"n2139824778":{"id":"n2139824778","loc":[-85.6348854,41.9454246]},"n2139824779":{"id":"n2139824779","loc":[-85.6340286,41.9454373]},"n2139824780":{"id":"n2139824780","loc":[-85.6336963,41.9454572]},"n2139824781":{"id":"n2139824781","loc":[-85.6336789,41.9454672]},"n2139824782":{"id":"n2139824782","loc":[-85.6344933,41.945475]},"n2139824783":{"id":"n2139824783","loc":[-85.6340854,41.9454918]},"n2139824784":{"id":"n2139824784","loc":[-85.6350036,41.9455034]},"n2139824785":{"id":"n2139824785","loc":[-85.6337501,41.9455089]},"n2139824786":{"id":"n2139824786","loc":[-85.6337497,41.9455091]},"n2139824787":{"id":"n2139824787","loc":[-85.6345425,41.9455186]},"n2139824788":{"id":"n2139824788","loc":[-85.6341459,41.9455372]},"n2139824789":{"id":"n2139824789","loc":[-85.6341376,41.945542]},"n2139824790":{"id":"n2139824790","loc":[-85.6338394,41.9455462]},"n2139824791":{"id":"n2139824791","loc":[-85.6349171,41.9455588]},"n2139824792":{"id":"n2139824792","loc":[-85.6338074,41.9455646]},"n2139824793":{"id":"n2139824793","loc":[-85.6346229,41.9455894]},"n2139824794":{"id":"n2139824794","loc":[-85.6338983,41.9455995]},"n2139824795":{"id":"n2139824795","loc":[-85.6338962,41.9456007]},"n2139824796":{"id":"n2139824796","loc":[-85.6342475,41.9456348]},"n2139824797":{"id":"n2139824797","loc":[-85.6339505,41.9456497]},"n2139824798":{"id":"n2139824798","loc":[-85.6347243,41.9456788]},"n2139824799":{"id":"n2139824799","loc":[-85.635057,41.9456831]},"n2139824800":{"id":"n2139824800","loc":[-85.635287,41.9457056]},"n2139824801":{"id":"n2139824801","loc":[-85.6350753,41.9457068]},"n2139824802":{"id":"n2139824802","loc":[-85.6347753,41.9457252]},"n2139824803":{"id":"n2139824803","loc":[-85.6340521,41.9457473]},"n2139824804":{"id":"n2139824804","loc":[-85.6352875,41.9457611]},"n2139824805":{"id":"n2139824805","loc":[-85.6352941,41.9457611]},"n2139824806":{"id":"n2139824806","loc":[-85.6350758,41.9457623]},"n2139824807":{"id":"n2139824807","loc":[-85.6348194,41.9457638]},"n2139824808":{"id":"n2139824808","loc":[-85.635296,41.9459428]},"n2139824809":{"id":"n2139824809","loc":[-85.6348212,41.9459455]},"n2139832635":{"id":"n2139832635","loc":[-85.6354612,41.9448791]},"n2139832636":{"id":"n2139832636","loc":[-85.6360241,41.9453844]},"n2139832637":{"id":"n2139832637","loc":[-85.6361452,41.9453121]},"n2139832639":{"id":"n2139832639","loc":[-85.6355997,41.944797]},"n2139832641":{"id":"n2139832641","loc":[-85.6351346,41.9443541]},"n2139832647":{"id":"n2139832647","loc":[-85.6329883,41.9453692]},"n2139832653":{"id":"n2139832653","loc":[-85.6333643,41.9456293]},"n2139832663":{"id":"n2139832663","loc":[-85.6335394,41.9455339]},"n2139832665":{"id":"n2139832665","loc":[-85.6332375,41.9452476]},"n2139832667":{"id":"n2139832667","loc":[-85.6331664,41.9452161]},"n2139832669":{"id":"n2139832669","loc":[-85.6331144,41.9451875]},"n2139832671":{"id":"n2139832671","loc":[-85.6330779,41.9451274]},"n2139832673":{"id":"n2139832673","loc":[-85.6330664,41.9450802]},"n2139832678":{"id":"n2139832678","loc":[-85.6332218,41.9453585]},"n2139832686":{"id":"n2139832686","loc":[-85.6334246,41.945541]},"n2139832691":{"id":"n2139832691","loc":[-85.6329898,41.9454997]},"n2139832693":{"id":"n2139832693","loc":[-85.6343554,41.9443274]},"n2139832694":{"id":"n2139832694","loc":[-85.6336339,41.9437089]},"n2139832696":{"id":"n2139832696","loc":[-85.633532,41.9437708]},"n2139832697":{"id":"n2139832697","loc":[-85.6338316,41.9440868]},"n2139832698":{"id":"n2139832698","loc":[-85.6342258,41.9444141]},"n2139832699":{"id":"n2139832699","loc":[-85.6339164,41.9442166]},"n2139832700":{"id":"n2139832700","loc":[-85.6341389,41.944384]},"n2139832701":{"id":"n2139832701","loc":[-85.634235,41.9443259]},"n2139832702":{"id":"n2139832702","loc":[-85.633613,41.9437875]},"n2139832703":{"id":"n2139832703","loc":[-85.633915,41.9436132]},"n2139832704":{"id":"n2139832704","loc":[-85.6340019,41.9435613]},"n2139832706":{"id":"n2139832706","loc":[-85.6343197,41.9438427]},"n2139832708":{"id":"n2139832708","loc":[-85.6342361,41.9438936]},"n2139832709":{"id":"n2139832709","loc":[-85.6353839,41.9460401]},"n2139832710":{"id":"n2139832710","loc":[-85.6354032,41.9456763]},"n2139832711":{"id":"n2139832711","loc":[-85.6356839,41.9459252]},"n2139832712":{"id":"n2139832712","loc":[-85.6356109,41.945735]},"n2139832713":{"id":"n2139832713","loc":[-85.6353997,41.9457421]},"n2139832714":{"id":"n2139832714","loc":[-85.6353895,41.9459347]},"n2139832715":{"id":"n2139832715","loc":[-85.6334777,41.9436628]},"n2139832716":{"id":"n2139832716","loc":[-85.6333137,41.9435382]},"n2139832717":{"id":"n2139832717","loc":[-85.6330938,41.9435406]},"n2139832721":{"id":"n2139832721","loc":[-85.6333023,41.9434922]},"n2139832722":{"id":"n2139832722","loc":[-85.6330466,41.943623]},"n2139832723":{"id":"n2139832723","loc":[-85.6332746,41.9435624]},"n2139832724":{"id":"n2139832724","loc":[-85.6333511,41.9435176]},"n2139832725":{"id":"n2139832725","loc":[-85.6332241,41.9434001]},"n2139832726":{"id":"n2139832726","loc":[-85.6332355,41.9433686]},"n2139870373":{"id":"n2139870373","loc":[-85.6351783,41.9439117]},"n2139870374":{"id":"n2139870374","loc":[-85.6351431,41.9439217]},"n2139870375":{"id":"n2139870375","loc":[-85.6348853,41.9439117]},"n2139870376":{"id":"n2139870376","loc":[-85.6348317,41.9439105]},"n2139870377":{"id":"n2139870377","loc":[-85.6346384,41.944007]},"n2139870378":{"id":"n2139870378","loc":[-85.6345563,41.9440523]},"n2140006403":{"id":"n2140006403","loc":[-85.6359942,41.9450097]},"n2140006405":{"id":"n2140006405","loc":[-85.6363884,41.9446079]},"n2140006407":{"id":"n2140006407","loc":[-85.6362148,41.9447874]},"n2140006409":{"id":"n2140006409","loc":[-85.6379476,41.9445869]},"n2140006411":{"id":"n2140006411","loc":[-85.6378485,41.9445674]},"n2140006413":{"id":"n2140006413","loc":[-85.6378952,41.9444547]},"n2140006415":{"id":"n2140006415","loc":[-85.6379962,41.944477]},"n2140006421":{"id":"n2140006421","loc":[-85.6355248,41.9433702]},"n2140006423":{"id":"n2140006423","loc":[-85.6378471,41.9439233]},"n2140006425":{"id":"n2140006425","loc":[-85.6378913,41.9441238]},"n2140006426":{"id":"n2140006426","loc":[-85.6381674,41.9442289]},"n2140006427":{"id":"n2140006427","loc":[-85.6382359,41.9440975]},"n2140006428":{"id":"n2140006428","loc":[-85.6382071,41.9440252]},"n2140006429":{"id":"n2140006429","loc":[-85.6381409,41.9439973]},"n2140006430":{"id":"n2140006430","loc":[-85.6380569,41.9440153]},"n2140006433":{"id":"n2140006433","loc":[-85.6379071,41.9442467]},"n2140006435":{"id":"n2140006435","loc":[-85.6381634,41.9443125]},"n2140006436":{"id":"n2140006436","loc":[-85.6382407,41.944301]},"n2140006438":{"id":"n2140006438","loc":[-85.6382761,41.9442188]},"n2140006439":{"id":"n2140006439","loc":[-85.6382429,41.9441761]},"n2140006440":{"id":"n2140006440","loc":[-85.6382016,41.9441632]},"n2140006441":{"id":"n2140006441","loc":[-85.6378185,41.9439835]},"n2166205688":{"id":"n2166205688","loc":[-85.6349963,41.9444392]},"n2168544780":{"id":"n2168544780","loc":[-85.633944,41.945807]},"n2168544781":{"id":"n2168544781","loc":[-85.6340783,41.9458621]},"n2168544782":{"id":"n2168544782","loc":[-85.6338184,41.9457548]},"n2168544783":{"id":"n2168544783","loc":[-85.6339925,41.9459777]},"n2168544784":{"id":"n2168544784","loc":[-85.6337317,41.9458698]},"n2168544785":{"id":"n2168544785","loc":[-85.6337297,41.9460042]},"n2168544786":{"id":"n2168544786","loc":[-85.633919,41.9460797]},"n2168544787":{"id":"n2168544787","loc":[-85.6338672,41.9459263]},"n2168544788":{"id":"n2168544788","loc":[-85.6338246,41.9459853]},"n2168544789":{"id":"n2168544789","loc":[-85.6337615,41.9459601]},"n2168544790":{"id":"n2168544790","loc":[-85.6342079,41.9460399]},"n2168544791":{"id":"n2168544791","loc":[-85.6343346,41.9458503]},"n2168544792":{"id":"n2168544792","loc":[-85.6343759,41.9458116]},"n2168544793":{"id":"n2168544793","loc":[-85.6344394,41.9458109]},"n2168544795":{"id":"n2168544795","loc":[-85.6344827,41.945851]},"n2168544797":{"id":"n2168544797","loc":[-85.6344807,41.945969]},"n2168544798":{"id":"n2168544798","loc":[-85.6344404,41.9459697]},"n2168544799":{"id":"n2168544799","loc":[-85.6344413,41.9460333]},"n2168544800":{"id":"n2168544800","loc":[-85.6342173,41.9460705]},"n2168544801":{"id":"n2168544801","loc":[-85.6342162,41.9460392]},"n2168544802":{"id":"n2168544802","loc":[-85.6344251,41.9460351]},"n2168544805":{"id":"n2168544805","loc":[-85.6344257,41.9460507]},"n2168544807":{"id":"n2168544807","loc":[-85.6344721,41.9460498]},"n2168544809":{"id":"n2168544809","loc":[-85.6344754,41.9461427]},"n2168544811":{"id":"n2168544811","loc":[-85.6344311,41.9461435]},"n2168544813":{"id":"n2168544813","loc":[-85.6344317,41.9461592]},"n2168544815":{"id":"n2168544815","loc":[-85.6343708,41.9461604]},"n2168544817":{"id":"n2168544817","loc":[-85.6343715,41.9461786]},"n2168544819":{"id":"n2168544819","loc":[-85.6343229,41.9461795]},"n2168544821":{"id":"n2168544821","loc":[-85.6343222,41.9461606]},"n2168544823":{"id":"n2168544823","loc":[-85.6342476,41.9461621]},"n2168544825":{"id":"n2168544825","loc":[-85.6342444,41.94607]},"n2168544827":{"id":"n2168544827","loc":[-85.634138,41.9461632]},"n2168544829":{"id":"n2168544829","loc":[-85.6342016,41.9460703]},"n2168544830":{"id":"n2168544830","loc":[-85.6332929,41.9463092]},"n2168544831":{"id":"n2168544831","loc":[-85.633122,41.946239]},"n2168544832":{"id":"n2168544832","loc":[-85.6332954,41.9460055]},"n2168544833":{"id":"n2168544833","loc":[-85.6333954,41.9460466]},"n2168544834":{"id":"n2168544834","loc":[-85.6334044,41.9460345]},"n2168544835":{"id":"n2168544835","loc":[-85.6334594,41.9460571]},"n2168544836":{"id":"n2168544836","loc":[-85.6333871,41.9461544]},"n2168544837":{"id":"n2168544837","loc":[-85.633403,41.9461609]},"n2168544838":{"id":"n2168544838","loc":[-85.6341683,41.9464167]},"n2168544839":{"id":"n2168544839","loc":[-85.6341711,41.9463411]},"n2168544840":{"id":"n2168544840","loc":[-85.6344471,41.9463469]},"n2168544841":{"id":"n2168544841","loc":[-85.6344441,41.9464243]},"n2168544842":{"id":"n2168544842","loc":[-85.6343622,41.9464226]},"n2168544843":{"id":"n2168544843","loc":[-85.6343593,41.9464989]},"n2168544844":{"id":"n2168544844","loc":[-85.6342812,41.9464973]},"n2168544845":{"id":"n2168544845","loc":[-85.634283,41.9464504]},"n2168544846":{"id":"n2168544846","loc":[-85.6342609,41.9464499]},"n2168544847":{"id":"n2168544847","loc":[-85.6342621,41.9464187]},"n2168544848":{"id":"n2168544848","loc":[-85.6348414,41.9463396]},"n2168544849":{"id":"n2168544849","loc":[-85.6348387,41.9461872]},"n2168544850":{"id":"n2168544850","loc":[-85.6351186,41.9461844]},"n2168544851":{"id":"n2168544851","loc":[-85.635119,41.9462112]},"n2168544852":{"id":"n2168544852","loc":[-85.6351918,41.9462104]},"n2168544853":{"id":"n2168544853","loc":[-85.6351944,41.9463515]},"n2168544854":{"id":"n2168544854","loc":[-85.6351049,41.9463524]},"n2168544855":{"id":"n2168544855","loc":[-85.6351046,41.946337]},"n2189153180":{"id":"n2189153180","loc":[-85.6340369,41.9469572]},"n2189153181":{"id":"n2189153181","loc":[-85.6342531,41.946953]},"n2189153183":{"id":"n2189153183","loc":[-85.6348115,41.9465468]},"n2189153184":{"id":"n2189153184","loc":[-85.6348105,41.9464569]},"n2189153185":{"id":"n2189153185","loc":[-85.6351431,41.9464549]},"n2189153186":{"id":"n2189153186","loc":[-85.6351441,41.9465448]},"n2189153187":{"id":"n2189153187","loc":[-85.6350077,41.9465456]},"n2189153188":{"id":"n2189153188","loc":[-85.635008,41.9465721]},"n2189153189":{"id":"n2189153189","loc":[-85.6348965,41.9465727]},"n2189153190":{"id":"n2189153190","loc":[-85.6348962,41.9465463]},"n2189153191":{"id":"n2189153191","loc":[-85.6348963,41.9471586]},"n2189153192":{"id":"n2189153192","loc":[-85.6348944,41.947032]},"n2189153193":{"id":"n2189153193","loc":[-85.6350241,41.947031]},"n2189153194":{"id":"n2189153194","loc":[-85.635026,41.9471575]},"n2189153195":{"id":"n2189153195","loc":[-85.6352328,41.9471053]},"n2189153196":{"id":"n2189153196","loc":[-85.6352359,41.9469906]},"n2189153197":{"id":"n2189153197","loc":[-85.6353694,41.9469925]},"n2189153198":{"id":"n2189153198","loc":[-85.6353664,41.9471072]},"n2189153199":{"id":"n2189153199","loc":[-85.6348241,41.9469287]},"n2189153200":{"id":"n2189153200","loc":[-85.6348248,41.9468185]},"n2189153201":{"id":"n2189153201","loc":[-85.6351199,41.9468195]},"n2189153202":{"id":"n2189153202","loc":[-85.6351192,41.9469298]},"n2189153203":{"id":"n2189153203","loc":[-85.6347965,41.9468057]},"n2189153204":{"id":"n2189153204","loc":[-85.634792,41.9466044]},"n2189153205":{"id":"n2189153205","loc":[-85.6349483,41.9466025]},"n2189153206":{"id":"n2189153206","loc":[-85.6349493,41.9466448]},"n2189153207":{"id":"n2189153207","loc":[-85.6349753,41.9466445]},"n2189153208":{"id":"n2189153208","loc":[-85.6349743,41.9465995]},"n2189153209":{"id":"n2189153209","loc":[-85.6351173,41.9465977]},"n2189153210":{"id":"n2189153210","loc":[-85.6351219,41.9468015]},"n2189153211":{"id":"n2189153211","loc":[-85.6349806,41.9468032]},"n2189153212":{"id":"n2189153212","loc":[-85.6349794,41.9467519]},"n2189153213":{"id":"n2189153213","loc":[-85.6349521,41.9467523]},"n2189153214":{"id":"n2189153214","loc":[-85.6349532,41.9468037]},"n2189153215":{"id":"n2189153215","loc":[-85.6346302,41.9468381]},"n2189153216":{"id":"n2189153216","loc":[-85.6343028,41.9468449]},"n2189153217":{"id":"n2189153217","loc":[-85.6342006,41.9468297]},"n2189153218":{"id":"n2189153218","loc":[-85.6336698,41.9465918]},"n2189153219":{"id":"n2189153219","loc":[-85.6344663,41.9466639]},"n2189153220":{"id":"n2189153220","loc":[-85.6344639,41.9466015]},"n2189153221":{"id":"n2189153221","loc":[-85.6342283,41.9466065]},"n2189153222":{"id":"n2189153222","loc":[-85.6342303,41.9466587]},"n2189153223":{"id":"n2189153223","loc":[-85.6342843,41.9466575]},"n2189153224":{"id":"n2189153224","loc":[-85.6342851,41.9466794]},"n2189153225":{"id":"n2189153225","loc":[-85.6343475,41.9466781]},"n2189153226":{"id":"n2189153226","loc":[-85.634347,41.9466664]},"n2189153227":{"id":"n2189153227","loc":[-85.6354428,41.9470148]},"n2189153228":{"id":"n2189153228","loc":[-85.6354432,41.9468005]},"n2189153229":{"id":"n2189153229","loc":[-85.6360277,41.9468011]},"n2189153230":{"id":"n2189153230","loc":[-85.6360273,41.9470154]},"n2189153231":{"id":"n2189153231","loc":[-85.6354565,41.9465823]},"n2189153232":{"id":"n2189153232","loc":[-85.6354496,41.946218]},"n2189153233":{"id":"n2189153233","loc":[-85.6356355,41.9465788]},"n2189153234":{"id":"n2189153234","loc":[-85.6357155,41.9468008]},"n2189153235":{"id":"n2189153235","loc":[-85.6359539,41.9467969]},"n2189153236":{"id":"n2189153236","loc":[-85.6359561,41.9463036]},"n2189153237":{"id":"n2189153237","loc":[-85.6360129,41.9464793]},"n2189153238":{"id":"n2189153238","loc":[-85.6360152,41.9463898]},"n2189153239":{"id":"n2189153239","loc":[-85.6359607,41.9464928]},"n2189153240":{"id":"n2189153240","loc":[-85.6356903,41.9462227]},"n2189153242":{"id":"n2189153242","loc":[-85.6354163,41.946142]},"n2189153243":{"id":"n2189153243","loc":[-85.6357546,41.9462214]},"n2189153244":{"id":"n2189153244","loc":[-85.6357937,41.9462542]},"n2189153245":{"id":"n2189153245","loc":[-85.6358723,41.9467048]},"n2189153246":{"id":"n2189153246","loc":[-85.6361494,41.946757]},"n2189153247":{"id":"n2189153247","loc":[-85.6354173,41.9469082]},"n2189153248":{"id":"n2189153248","loc":[-85.635443,41.9469079]},"n2189153249":{"id":"n2189153249","loc":[-85.6360275,41.9469093]},"n2189153250":{"id":"n2189153250","loc":[-85.6361542,41.946915]},"n2189153251":{"id":"n2189153251","loc":[-85.6358654,41.9464843]},"n2189153252":{"id":"n2189153252","loc":[-85.6359549,41.9467499]},"n2189153253":{"id":"n2189153253","loc":[-85.6357172,41.9466335]},"n2189153254":{"id":"n2189153254","loc":[-85.6355644,41.9461768]},"n2189153255":{"id":"n2189153255","loc":[-85.6355655,41.946528]},"n2189153256":{"id":"n2189153256","loc":[-85.6357055,41.9465971]},"n2189153257":{"id":"n2189153257","loc":[-85.635869,41.9465971]},"n2189153259":{"id":"n2189153259","loc":[-85.6354561,41.9470278]},"n2189153260":{"id":"n2189153260","loc":[-85.6357961,41.9470233]},"n2189153261":{"id":"n2189153261","loc":[-85.6357977,41.9470907]},"n2189153262":{"id":"n2189153262","loc":[-85.6357297,41.9470916]},"n2189153263":{"id":"n2189153263","loc":[-85.635733,41.947233]},"n2189153264":{"id":"n2189153264","loc":[-85.6362674,41.9468637]},"n2189153265":{"id":"n2189153265","loc":[-85.6362646,41.9467047]},"n2189153266":{"id":"n2189153266","loc":[-85.6363267,41.9467047]},"n2189153267":{"id":"n2189153267","loc":[-85.6362633,41.9465848]},"n2189153268":{"id":"n2189153268","loc":[-85.6363805,41.9465468]},"n2189153269":{"id":"n2189153269","loc":[-85.6364604,41.9466842]},"n2189153270":{"id":"n2189153270","loc":[-85.6364604,41.9468647]},"n2199109756":{"id":"n2199109756","loc":[-85.6337134,41.9471841]},"n2199109757":{"id":"n2199109757","loc":[-85.6336514,41.94716]},"n2199109758":{"id":"n2199109758","loc":[-85.6337043,41.9470847]},"n2199109759":{"id":"n2199109759","loc":[-85.6335997,41.9470441]},"n2199109760":{"id":"n2199109760","loc":[-85.6335064,41.9471771]},"n185960195":{"id":"n185960195","loc":[-85.6295992,41.9524346]},"n185960796":{"id":"n185960796","loc":[-85.634723,41.953681]},"n185961396":{"id":"n185961396","loc":[-85.634767,41.959009]},"n185962625":{"id":"n185962625","loc":[-85.635175,41.97201]},"n185964982":{"id":"n185964982","loc":[-85.632799,41.9440543]},"n185965289":{"id":"n185965289","loc":[-85.634621,41.947323]},"n185965291":{"id":"n185965291","loc":[-85.636166,41.947296]},"n185965399":{"id":"n185965399","loc":[-85.634776,41.959834]},"n185966937":{"id":"n185966937","loc":[-85.633183,41.947315]},"n185966948":{"id":"n185966948","loc":[-85.626406,41.957188]},"n185967422":{"id":"n185967422","loc":[-85.6320229,41.9490123]},"n185967917":{"id":"n185967917","loc":[-85.634763,41.958292]},"n185967918":{"id":"n185967918","loc":[-85.636271,41.958311]},"n185968100":{"id":"n185968100","loc":[-85.630835,41.950656]},"n185970515":{"id":"n185970515","loc":[-85.634832,41.963866]},"n185971578":{"id":"n185971578","loc":[-85.634641,41.948627]},"n185971580":{"id":"n185971580","loc":[-85.6361818,41.9486135]},"n185971631":{"id":"n185971631","loc":[-85.634729,41.954667]},"n185971632":{"id":"n185971632","loc":[-85.636236,41.954656]},"n185972155":{"id":"n185972155","loc":[-85.623333,41.961987]},"n185974583":{"id":"n185974583","loc":[-85.634686,41.951158]},"n185974585":{"id":"n185974585","loc":[-85.6362059,41.9511457]},"n185975064":{"id":"n185975064","loc":[-85.636218,41.953667]},"n185975735":{"id":"n185975735","loc":[-85.634923,41.969269]},"n185978390":{"id":"n185978390","loc":[-85.634668,41.949875]},"n185978392":{"id":"n185978392","loc":[-85.634686,41.952415]},"n185978394":{"id":"n185978394","loc":[-85.634726,41.955921]},"n185978399":{"id":"n185978399","loc":[-85.6347861,41.9606613]},"n185978402":{"id":"n185978402","loc":[-85.634806,41.961485]},"n185978406":{"id":"n185978406","loc":[-85.6348298,41.964783]},"n185978410":{"id":"n185978410","loc":[-85.6348766,41.9677088]},"n185978414":{"id":"n185978414","loc":[-85.634938,41.971566]},"n185978415":{"id":"n185978415","loc":[-85.634942,41.971611]},"n185978417":{"id":"n185978417","loc":[-85.634952,41.971655]},"n185978419":{"id":"n185978419","loc":[-85.634989,41.971741]},"n185978420":{"id":"n185978420","loc":[-85.635063,41.971864]},"n185978787":{"id":"n185978787","loc":[-85.627936,41.954693]},"n185978790":{"id":"n185978790","loc":[-85.626832,41.954677]},"n185978967":{"id":"n185978967","loc":[-85.632278,41.948613]},"n185980735":{"id":"n185980735","loc":[-85.628639,41.953725]},"n185982163":{"id":"n185982163","loc":[-85.636233,41.952398]},"n185982193":{"id":"n185982193","loc":[-85.6313855,41.9499125]},"n185982195":{"id":"n185982195","loc":[-85.6304857,41.9511945]},"n185982196":{"id":"n185982196","loc":[-85.626336,41.957291]},"n185982197":{"id":"n185982197","loc":[-85.625578,41.958664]},"n185982198":{"id":"n185982198","loc":[-85.624619,41.960145]},"n185982200":{"id":"n185982200","loc":[-85.624494,41.960338]},"n185984017":{"id":"n185984017","loc":[-85.636163,41.947382]},"n185984020":{"id":"n185984020","loc":[-85.636188,41.9498803]},"n185984022":{"id":"n185984022","loc":[-85.636276,41.955919]},"n185984024":{"id":"n185984024","loc":[-85.636279,41.956901]},"n185988036":{"id":"n185988036","loc":[-85.631422,41.948294]},"n185988867":{"id":"n185988867","loc":[-85.63102,41.948805]},"n185988869":{"id":"n185988869","loc":[-85.630773,41.949209]},"n185988871":{"id":"n185988871","loc":[-85.63005,41.95016]},"n185988872":{"id":"n185988872","loc":[-85.629423,41.951016]},"n185988873":{"id":"n185988873","loc":[-85.629252,41.951256]},"n185988875":{"id":"n185988875","loc":[-85.629126,41.951489]},"n185988877":{"id":"n185988877","loc":[-85.628991,41.951704]},"n185988878":{"id":"n185988878","loc":[-85.628689,41.952112]},"n185988879":{"id":"n185988879","loc":[-85.628313,41.952666]},"n185988880":{"id":"n185988880","loc":[-85.627687,41.953529]},"n185988882":{"id":"n185988882","loc":[-85.627394,41.953947]},"n185988884":{"id":"n185988884","loc":[-85.627287,41.954128]},"n1819858502":{"id":"n1819858502","loc":[-85.6328435,41.9455473]},"n1819858510":{"id":"n1819858510","loc":[-85.6324841,41.9453438]},"n1819858515":{"id":"n1819858515","loc":[-85.6318511,41.9446409]},"n1819858520":{"id":"n1819858520","loc":[-85.6326558,41.9454708]},"n1819858522":{"id":"n1819858522","loc":[-85.6319048,41.9447407]},"n1819858524":{"id":"n1819858524","loc":[-85.6317718,41.9443666]},"n1819858530":{"id":"n1819858530","loc":[-85.632055,41.9449128]},"n2139795768":{"id":"n2139795768","loc":[-85.6243023,41.9606102]},"n2139832645":{"id":"n2139832645","loc":[-85.6324455,41.9448607]},"n2139832649":{"id":"n2139832649","loc":[-85.6328043,41.9454773]},"n2139832651":{"id":"n2139832651","loc":[-85.6322547,41.9449621]},"n2139832675":{"id":"n2139832675","loc":[-85.6327356,41.944757]},"n2139832677":{"id":"n2139832677","loc":[-85.6325433,41.9448599]},"n2139832680":{"id":"n2139832680","loc":[-85.6328885,41.9455614]},"n2139832682":{"id":"n2139832682","loc":[-85.6320913,41.9449492]},"n2139832684":{"id":"n2139832684","loc":[-85.6325366,41.9447133]},"n2139832688":{"id":"n2139832688","loc":[-85.6322786,41.94485]},"n2139832718":{"id":"n2139832718","loc":[-85.6327486,41.9432475]},"n2139832719":{"id":"n2139832719","loc":[-85.6327926,41.9431773]},"n2139832720":{"id":"n2139832720","loc":[-85.6329033,41.943153]},"n2139832727":{"id":"n2139832727","loc":[-85.6328975,41.9430783]},"n2139844839":{"id":"n2139844839","loc":[-85.6326261,41.9432308]},"n2189015992":{"id":"n2189015992","loc":[-85.6347706,41.9593383]},"n2189153179":{"id":"n2189153179","loc":[-85.6340476,41.9472565]},"n2189153182":{"id":"n2189153182","loc":[-85.6342638,41.9472522]},"n2189153241":{"id":"n2189153241","loc":[-85.6354184,41.9473091]},"n2189153258":{"id":"n2189153258","loc":[-85.6354611,41.9472366]},"n2189153277":{"id":"n2189153277","loc":[-85.6328948,41.9462374]},"n2199109755":{"id":"n2199109755","loc":[-85.6336729,41.9472417]},"w203970139":{"id":"w203970139","tags":{"building":"yes"},"nodes":["n2139824793","n2139824787","n2139824773","n2139824778","n2139824793"]},"w203970098":{"id":"w203970098","tags":{"building":"yes"},"nodes":["n2139824748","n2139824712","n2139824726","n2139824760","n2139824748"]},"w208643132":{"id":"w208643132","tags":{"area":"yes","building":"yes"},"nodes":["n2189153195","n2189153196","n2189153197","n2189153198","n2189153195"]},"w203970094":{"id":"w203970094","tags":{"building":"yes"},"nodes":["n2139824755","n2139824753","n2139824759","n2139824764","n2139824763","n2139824767","n2139824770","n2139824782","n2139824772","n2139824756","n2139824751","n2139824754","n2139824755"]},"w208643138":{"id":"w208643138","tags":{"amenity":"parking","area":"yes"},"nodes":["n2189153231","n2189153232","n2189153240","n2189153244","n2189153236","n2189153238","n2189153237","n2189153239","n2189153252","n2189153235","n2189153234","n2189153253","n2189153233","n2189153231"]},"w203970125":{"id":"w203970125","tags":{"building":"yes"},"nodes":["n2139824735","n2139824738","n2139824757","n2139824749","n2139824735"]},"w170848823":{"id":"w170848823","tags":{"name":"Rocky River","waterway":"river"},"nodes":["n1819849189","n1819858516","n1819858519","n1819858504","n1819858525","n1819858506","n1819858513"]},"w203970898":{"id":"w203970898","tags":{"amenity":"parking","area":"yes"},"nodes":["n2139832645","n2139832647","n2139832649","n2139832651","n2139832645"]},"w203970134":{"id":"w203970134","tags":{"building":"yes"},"nodes":["n2139824796","n2139824803","n2139824797","n2139824788","n2139824796"]},"w203970104":{"id":"w203970104","tags":{"building":"yes"},"nodes":["n2139824733","n2139824730","n2139824714","n2139824721","n2139824733"]},"w206805245":{"id":"w206805245","tags":{"area":"yes","building":"yes"},"nodes":["n2168544780","n2168544781","n2139824796","n2139824803","n2168544780"]},"w206805252":{"id":"w206805252","tags":{"area":"yes","building":"yes"},"nodes":["n2168544838","n2168544839","n2168544840","n2168544841","n2168544842","n2168544843","n2168544844","n2168544845","n2168544846","n2168544847","n2168544838"]},"w203970099":{"id":"w203970099","tags":{"building":"yes"},"nodes":["n2139824783","n2139824795","n2139824790","n2139824779","n2139824783"]},"w17967730":{"id":"w17967730","tags":{"highway":"residential","name":"Water St"},"nodes":["n185963451","n2189153277","n185988036","n185988867","n185988869","n185988871","n185988872","n185988873","n185988875","n185988877","n185988878","n185988879","n185988880","n185988882","n185988884","n185978790"]},"w208643133":{"id":"w208643133","tags":{"area":"yes","building":"yes"},"nodes":["n2189153199","n2189153200","n2189153201","n2189153202","n2189153199"]},"w203970127":{"id":"w203970127","tags":{"building":"yes"},"nodes":["n2139824794","n2139824783","n2139824789","n2139824797","n2139824794"]},"w208643139":{"id":"w208643139","tags":{"highway":"service"},"nodes":["n185988237","n2189153242","n2189153247","n2189153241"]},"w203988297":{"id":"w203988297","tags":{"amenity":"parking","area":"yes"},"nodes":["n2140006423","n2140006441","n2140006425","n2140006426","n2140006440","n2140006427","n2140006428","n2140006429","n2140006430","n2140006423"]},"w206805250":{"id":"w206805250","tags":{"area":"yes","building":"yes"},"nodes":["n2168544827","n2168544823","n2168544825","n2168544800","n2168544829","n2168544827"]},"w208643140":{"id":"w208643140","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2189153242","n2189153254","n2189153243","n2189153244","n2189153251","n2189153257","n2189153245","n2189153252","n2189153246"]},"w203974055":{"id":"w203974055","tags":{"bridge":"yes","highway":"path","name":"Riverwalk Trail"},"nodes":["n2139870376","n2139870377"]},"w206805247":{"id":"w206805247","tags":{"area":"yes","building":"yes"},"nodes":["n2168544785","n2168544786","n2168544783","n2168544787","n2168544788","n2168544789","n2168544785"]},"w17964996":{"id":"w17964996","tags":{"highway":"residential","name":"Foster St"},"nodes":["n1819858524","n1819858515","n1819858522","n1819858530","n2139832682","n1819858510","n1819858520","n1819858502","n2139832680","n185963451","n1819858527","n185963452","n185963453","n185963454","n185963455","n185963456"]},"w208643144":{"id":"w208643144","tags":{"area":"yes","building":"yes"},"nodes":["n2189153264","n2189153265","n2189153266","n2189153267","n2189153268","n2189153269","n2189153270","n2189153264"]},"w203970914":{"id":"w203970914","tags":{"amenity":"parking","area":"yes"},"nodes":["n2139832722","n2139832723","n2139832724","n2139832725","n2139832726","n2139832727","n2139844839","n2139832722"]},"w208643143":{"id":"w208643143","tags":{"area":"yes","building":"yes"},"nodes":["n2189153258","n2189153259","n2189153260","n2189153261","n2189153262","n2189153263","n2189153258"]},"w203049590":{"id":"w203049590","tags":{"amenity":"parking","area":"yes"},"nodes":["n2130304152","n2130304153","n2140006403","n2130304154","n2130304156","n2130304155","n2130304160","n2130304152"]},"w203974054":{"id":"w203974054","tags":{"highway":"path","name":"Riverwalk Trail"},"nodes":["n2139858971","n2139870373","n2139870374"]},"w203049595":{"id":"w203049595","tags":{"highway":"service"},"nodes":["n2130304158","n2130304159","n2130304160","n2139832635","n2139832639"]},"w203970913":{"id":"w203970913","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2139832715","n2139832716","n2139832717","n2139832718","n2139832719","n2139832720","n2139832721","n2139832716"]},"w208643134":{"id":"w208643134","tags":{"area":"yes","building":"yes"},"nodes":["n2189153203","n2189153204","n2189153205","n2189153206","n2189153207","n2189153208","n2189153209","n2189153210","n2189153211","n2189153212","n2189153213","n2189153214","n2189153203"]},"w134150808":{"id":"w134150808","tags":{"bridge":"yes","highway":"residential","name":"Moore St"},"nodes":["n185988239","n185984009","n185988241","n1475284019"]},"w203970115":{"id":"w203970115","tags":{"building":"yes"},"nodes":["n2139824761","n2139824727","n2139824736","n2139824771","n2139824761"]},"w208643130":{"id":"w208643130","tags":{"area":"yes","building":"yes"},"nodes":["n2189153183","n2189153184","n2189153185","n2189153186","n2189153187","n2189153188","n2189153189","n2189153190","n2189153183"]},"w206805246":{"id":"w206805246","tags":{"area":"yes","building":"yes"},"nodes":["n2168544782","n2168544780","n2168544781","n2168544783","n2168544787","n2168544784","n2168544782"]},"w203970138":{"id":"w203970138","tags":{"building":"yes"},"nodes":["n2139824729","n2139824720","n2139824702","n2139824707","n2139824729"]},"w203970133":{"id":"w203970133","tags":{"building":"yes"},"nodes":["n2139824748","n2139824737","n2139824717","n2139824728","n2139824748"]},"w203970907":{"id":"w203970907","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2139832700","n2139832701","n2139832702"]},"w203974056":{"id":"w203974056","tags":{"highway":"path","name":"Riverwalk Trail"},"nodes":["n2139870377","n2139870378"]},"w203970897":{"id":"w203970897","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2130304156","n2166205688","n2139832635","n2139832636","n2139832637","n2139832639","n2139832641","n2166205688"]},"w203974057":{"id":"w203974057","tags":{"highway":"path","name":"Riverwalk Trail"},"nodes":["n2139870375","n2139870376"]},"w203049594":{"id":"w203049594","tags":{"highway":"service"},"nodes":["n2130304156","n2139870378","n2139832706","n2139832704","n2130304157"]},"w203970122":{"id":"w203970122","tags":{"building":"yes"},"nodes":["n2139824757","n2139824740","n2139824747","n2139824762","n2139824757"]},"w208643136":{"id":"w208643136","tags":{"area":"yes","building":"yes"},"nodes":["n2189153219","n2189153220","n2189153221","n2189153222","n2189153223","n2189153224","n2189153225","n2189153226","n2189153219"]},"w203970128":{"id":"w203970128","tags":{"building":"yes"},"nodes":["n2139824732","n2139824752","n2139824744","n2139824724","n2139824732"]},"w203970097":{"id":"w203970097","tags":{"building":"yes"},"nodes":["n2139824737","n2139824733","n2139824710","n2139824716","n2139824737"]},"w203970137":{"id":"w203970137","tags":{"building":"yes"},"nodes":["n2139824765","n2139824774","n2139824758","n2139824746","n2139824765"]},"w134150840":{"id":"w134150840","tags":{"highway":"residential","name":"Moore St"},"nodes":["n1475284019","n185988243","n185988244","n185988245"]},"w17967628":{"id":"w17967628","tags":{"highway":"residential","name":"Moore St"},"nodes":["n185978388","n2139832709","n185988237","n185988239"]},"w203988292":{"id":"w203988292","tags":{"bridge":"yes","highway":"footway"},"nodes":["n2140006407","n2140006405"]},"w203970118":{"id":"w203970118","tags":{"building":"yes"},"nodes":["n2139824775","n2139824785","n2139824780","n2139824768","n2139824775"]},"w203970121":{"id":"w203970121","tags":{"building":"yes"},"nodes":["n2139824768","n2139824781","n2139824776","n2139824765","n2139824768"]},"w17967752":{"id":"w17967752","tags":{"highway":"residential","name":"Railroad Drive"},"nodes":["n185964980","n2139832699","n2139832700","n2130304158","n185988969","n185988971","n185988972","n1475284011"]},"w203970136":{"id":"w203970136","tags":{"building":"yes"},"nodes":["n2139824798","n2139824793","n2139824777","n2139824784","n2139824798"]},"w203970142":{"id":"w203970142","tags":{"building":"yes"},"nodes":["n2139824808","n2139824809","n2139824807","n2139824806","n2139824801","n2139824800","n2139824804","n2139824805","n2139824808"]},"w208643137":{"id":"w208643137","tags":{"amenity":"parking","area":"yes"},"nodes":["n2189153227","n2189153248","n2189153228","n2189153234","n2189153235","n2189153229","n2189153249","n2189153230","n2189153227"]},"w208643129":{"id":"w208643129","tags":{"area":"yes","building":"yes"},"nodes":["n2189153179","n2189153180","n2189153181","n2189153182","n2189153179"]},"w203970909":{"id":"w203970909","tags":{"amenity":"parking","area":"yes"},"nodes":["n2139832703","n2139832704","n2139832706","n2139832708","n2139832703"]},"w203970905":{"id":"w203970905","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2139832688","n2139832691"]},"w203988298":{"id":"w203988298","tags":{"highway":"service"},"nodes":["n2140006431","n2140006433","n2140006435","n2140006436","n2140006437","n2140006438","n2140006439","n2140006440"]},"w203970106":{"id":"w203970106","tags":{"building":"yes"},"nodes":["n2139824798","n2139824791","n2139824799","n2139824802","n2139824798"]},"w203970129":{"id":"w203970129","tags":{"building":"yes"},"nodes":["n2139824787","n2139824782","n2139824766","n2139824769","n2139824787"]},"w208643131":{"id":"w208643131","tags":{"area":"yes","building":"yes"},"nodes":["n2189153191","n2189153192","n2189153193","n2189153194","n2189153191"]},"w206805249":{"id":"w206805249","tags":{"area":"yes","building":"yes"},"nodes":["n2168544800","n2168544801","n2168544802","n2168544805","n2168544807","n2168544809","n2168544811","n2168544813","n2168544815","n2168544817","n2168544819","n2168544821","n2168544823","n2168544825","n2168544800"]},"w134150800":{"id":"w134150800","tags":{"bridge":"yes","highway":"primary","name":"W Michigan Ave","old_ref":"US 131","ref":"US 131 Business;M 60"},"nodes":["n185964972","n185964976"]},"w17966984":{"id":"w17966984","tags":{"highway":"residential","name":"Portage Avenue"},"nodes":["n185978375","n185963456","n2189153218","n185966937","n185978967","n185967422","n185982193","n185968100","n185982195","n185960195","n185980735","n185978787","n185966948","n185982196","n185982197","n185982198","n185982200","n2139795768","n185972155"]},"w203988294":{"id":"w203988294","tags":{"amenity":"shelter","area":"yes","building":"yes","shelter_type":"picnic_shelter"},"nodes":["n2140006409","n2140006411","n2140006413","n2140006415","n2140006409"]},"w203970912":{"id":"w203970912","tags":{"amenity":"parking","area":"yes"},"nodes":["n2139832711","n2139832712","n2139832713","n2139832714","n2139832711"]},"w203970119":{"id":"w203970119","tags":{"building":"yes"},"nodes":["n2139824713","n2139824705","n2139824683","n2139824689","n2139824713"]},"w203970114":{"id":"w203970114","tags":{"building":"yes"},"nodes":["n2139824735","n2139824750","n2139824745","n2139824732","n2139824735"]},"w208643142":{"id":"w208643142","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2189153254","n2189153255","n2189153256","n2189153257"]},"w206805253":{"id":"w206805253","tags":{"area":"yes","building":"yes"},"nodes":["n2168544848","n2168544849","n2168544850","n2168544851","n2168544852","n2168544853","n2168544854","n2168544855","n2168544848"]},"w143497377":{"id":"w143497377","tags":{"highway":"primary","name":"North Main Street","old_ref":"US 131","ref":"US 131 Business"},"nodes":["n185962625","n185978420","n185978419","n185978417","n185978415","n185978414","n185975735","n1475293254","n185978410","n185978406","n185970515","n185978402","n185978399","n185965399","n2189015992","n185961396","n185967917","n185978394","n185971631","n185960796","n185978392","n185974583","n185978390","n185971578","n185965289","n2189153215","n185978388","n185978383","n185978381","n185978379","n185978377","n185978375","n185964982"]},"w134150811":{"id":"w134150811","tags":{"highway":"primary","name":"West Michigan Avenue","old_ref":"US 131","ref":"US 131 Business;M 60"},"nodes":["n185964976","n2130304157","n1475284023","n2139832715","n185964980","n185964982"]},"w208643135":{"id":"w208643135","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2189153215","n2189153216","n2189153217","n2189153218"]},"w17967183":{"id":"w17967183","tags":{"highway":"residential","name":"West Street"},"nodes":["n1475284011","n185984011","n185984013","n185984015","n2189153246","n2189153250","n185965291","n185984017","n185971580","n185984020","n185974585","n185982163","n185975064","n185971632","n185984022","n185984024","n185967918"]},"w134150778":{"id":"w134150778","tags":{"bridge":"yes","highway":"residential","name":"Moore St"},"nodes":["n185988245","n1475283992","n185975911"]},"w206805248":{"id":"w206805248","tags":{"area":"yes","building":"yes"},"nodes":["n2168544790","n2168544791","n2168544792","n2168544793","n2168544795","n2168544797","n2168544798","n2168544799","n2168544802","n2168544801","n2168544790"]},"w203974058":{"id":"w203974058","tags":{"bridge":"yes","highway":"path","name":"Riverwalk Trail"},"nodes":["n2139870374","n2139870375"]},"w203970902":{"id":"w203970902","tags":{"highway":"service"},"nodes":["n2139832678","n2139832691","n2139832680"]},"w203988296":{"id":"w203988296","tags":{"highway":"path"},"nodes":["n2139858967","n2140006421","n2139858935"]},"w206805251":{"id":"w206805251","tags":{"area":"yes","building":"yes"},"nodes":["n2168544830","n2168544831","n2168544832","n2168544833","n2168544834","n2168544835","n2168544836","n2168544837","n2168544830"]},"w203970906":{"id":"w203970906","tags":{"amenity":"parking","area":"yes"},"nodes":["n2139832693","n2139832694","n2139832696","n2139832697","n2139832698","n2139832693"]},"w203049598":{"id":"w203049598","tags":{"area":"yes","leisure":"pitch","sport":"tennis"},"nodes":["n2130304162","n2130304163","n2130304164","n2130304165","n2130304162"]},"w203970911":{"id":"w203970911","tags":{"highway":"service"},"nodes":["n2139832709","n2139832714","n2139832713","n2139832710","n185988971"]},"w203970105":{"id":"w203970105","tags":{"building":"yes"},"nodes":["n2139824779","n2139824792","n2139824786","n2139824775","n2139824779"]},"w203988290":{"id":"w203988290","tags":{"highway":"footway"},"nodes":["n2140006403","n2140006407"]},"w203970900":{"id":"w203970900","tags":{"amenity":"parking","area":"yes"},"nodes":["n2139832653","n2139832663","n2139832665","n2139832667","n2139832669","n2139832671","n2139832673","n2139832675","n2139832677","n2139832653"]},"w209717048":{"id":"w209717048","tags":{"area":"yes","building":"yes"},"nodes":["n2199109755","n2199109756","n2199109757","n2199109758","n2199109759","n2199109760","n2199109755"]},"w208643141":{"id":"w208643141","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2189153247","n2189153248","n2189153249","n2189153250"]},"w203970903":{"id":"w203970903","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2139832682","n2139832688","n2139832684","n2139832678","n2139832686"]},"n354002527":{"id":"n354002527","loc":[-85.6236039,41.9458813],"tags":{"amenity":"school","name":"Barrows School"}},"n185963396":{"id":"n185963396","loc":[-85.627401,41.943496]},"n185963397":{"id":"n185963397","loc":[-85.627403,41.943625]},"n185965101":{"id":"n185965101","loc":[-85.626409,41.943215]},"n185971474":{"id":"n185971474","loc":[-85.624884,41.943508]},"n185971475":{"id":"n185971475","loc":[-85.625191,41.943509]},"n185971482":{"id":"n185971482","loc":[-85.624882,41.94382]},"n185983135":{"id":"n185983135","loc":[-85.624893,41.945616]},"n185983137":{"id":"n185983137","loc":[-85.624912,41.946524]},"n185988027":{"id":"n185988027","loc":[-85.622721,41.946535]},"n185963398":{"id":"n185963398","loc":[-85.6273993,41.9446899]},"n185983238":{"id":"n185983238","loc":[-85.6227157,41.9456321]},"n185980374":{"id":"n185980374","loc":[-85.6248856,41.9447242]},"n185980373":{"id":"n185980373","loc":[-85.6226744,41.9447371]},"n2196831342":{"id":"n2196831342","loc":[-85.6250924,41.945063]},"n2196831343":{"id":"n2196831343","loc":[-85.6252335,41.9450636]},"n2196831344":{"id":"n2196831344","loc":[-85.6252286,41.9448707]},"n2196831345":{"id":"n2196831345","loc":[-85.6250661,41.9448707]},"n2196831346":{"id":"n2196831346","loc":[-85.6250243,41.9449012]},"n2196831347":{"id":"n2196831347","loc":[-85.6250251,41.9449244]},"n2196831348":{"id":"n2196831348","loc":[-85.6250867,41.9449257]},"n2196831349":{"id":"n2196831349","loc":[-85.625349,41.9445058]},"n2196831350":{"id":"n2196831350","loc":[-85.6253471,41.9443882]},"n2196831351":{"id":"n2196831351","loc":[-85.6251516,41.94439]},"n2196831352":{"id":"n2196831352","loc":[-85.6251522,41.9444308]},"n2196831353":{"id":"n2196831353","loc":[-85.6251344,41.9444309]},"n2196831354":{"id":"n2196831354","loc":[-85.6251356,41.9445077]},"n2196831355":{"id":"n2196831355","loc":[-85.6232357,41.9463406]},"n2196831356":{"id":"n2196831356","loc":[-85.6232409,41.9460668]},"n2196831357":{"id":"n2196831357","loc":[-85.6232072,41.9460665]},"n2196831358":{"id":"n2196831358","loc":[-85.6232117,41.9458272]},"n2196831359":{"id":"n2196831359","loc":[-85.6229808,41.9458248]},"n2196831360":{"id":"n2196831360","loc":[-85.6229763,41.9460627]},"n2196831361":{"id":"n2196831361","loc":[-85.623006,41.946063]},"n2196831362":{"id":"n2196831362","loc":[-85.6230023,41.9462557]},"n2196831363":{"id":"n2196831363","loc":[-85.6230755,41.9462565]},"n2196831364":{"id":"n2196831364","loc":[-85.6230739,41.9463389]},"n185947349":{"id":"n185947349","loc":[-85.618327,41.945607]},"n185947359":{"id":"n185947359","loc":[-85.615453,41.945597]},"n185947378":{"id":"n185947378","loc":[-85.617231,41.945603]},"n185947474":{"id":"n185947474","loc":[-85.616136,41.945602]},"n185948972":{"id":"n185948972","loc":[-85.615273,41.945637]},"n185955019":{"id":"n185955019","loc":[-85.620172,41.945627]},"n185960682":{"id":"n185960682","loc":[-85.622759,41.951845]},"n185961369":{"id":"n185961369","loc":[-85.622758,41.947444]},"n185961371":{"id":"n185961371","loc":[-85.624908,41.947416]},"n185963392":{"id":"n185963392","loc":[-85.6270462,41.9409953]},"n185963393":{"id":"n185963393","loc":[-85.627295,41.941304]},"n185963394":{"id":"n185963394","loc":[-85.627352,41.94148]},"n185963395":{"id":"n185963395","loc":[-85.62737,41.942261]},"n185965099":{"id":"n185965099","loc":[-85.6264,41.942263]},"n185965108":{"id":"n185965108","loc":[-85.622769,41.949224]},"n185965110":{"id":"n185965110","loc":[-85.624937,41.949237]},"n185966295":{"id":"n185966295","loc":[-85.6299942,41.9446689]},"n185966342":{"id":"n185966342","loc":[-85.624873,41.942022]},"n185970222":{"id":"n185970222","loc":[-85.622761,41.948357]},"n185970224":{"id":"n185970224","loc":[-85.624924,41.9483338]},"n185971477":{"id":"n185971477","loc":[-85.620051,41.94383]},"n185971478":{"id":"n185971478","loc":[-85.621219,41.943801]},"n185971481":{"id":"n185971481","loc":[-85.621812,41.943807]},"n185973866":{"id":"n185973866","loc":[-85.627629,41.946498]},"n185974699":{"id":"n185974699","loc":[-85.6227688,41.950119]},"n185978800":{"id":"n185978800","loc":[-85.623953,41.954684]},"n185980372":{"id":"n185980372","loc":[-85.621459,41.944756]},"n185980378":{"id":"n185980378","loc":[-85.6286375,41.9446764]},"n185980380":{"id":"n185980380","loc":[-85.630139,41.944661]},"n185980382":{"id":"n185980382","loc":[-85.630298,41.944635]},"n185980384":{"id":"n185980384","loc":[-85.630759,41.94454]},"n185980386":{"id":"n185980386","loc":[-85.6312369,41.9444548]},"n185983133":{"id":"n185983133","loc":[-85.6248672,41.9415903]},"n185983139":{"id":"n185983139","loc":[-85.624951,41.950239]},"n185983140":{"id":"n185983140","loc":[-85.624934,41.950681]},"n185983141":{"id":"n185983141","loc":[-85.624813,41.950983]},"n185983143":{"id":"n185983143","loc":[-85.6246225,41.951591]},"n185983144":{"id":"n185983144","loc":[-85.623908,41.9539165]},"n185983145":{"id":"n185983145","loc":[-85.6238903,41.9540956]},"n185983146":{"id":"n185983146","loc":[-85.623898,41.95431]},"n185983236":{"id":"n185983236","loc":[-85.628481,41.945611]},"n185985914":{"id":"n185985914","loc":[-85.620072,41.946538]},"n185986812":{"id":"n185986812","loc":[-85.6227785,41.9510005]},"n185988028":{"id":"n185988028","loc":[-85.6281401,41.9469632]},"n185988030":{"id":"n185988030","loc":[-85.6282451,41.9470314]},"n185988032":{"id":"n185988032","loc":[-85.6283312,41.9470656]},"w17964989":{"id":"w17964989","tags":{"highway":"residential","name":"Middle St"},"nodes":["n185963392","n185963393","n185963394","n185963395","n185963396","n185963397","n185963398"]},"w17965158":{"id":"w17965158","tags":{"access":"private","highway":"service","name":"Battle St"},"nodes":["n185965099","n185965101"]},"w41074896":{"id":"w41074896","tags":{"highway":"secondary","name":"East Michigan Avenue","name_1":"State Highway 60","ref":"M 60"},"nodes":["n185980372","n185980373","n185980374","n185963398","n185980378","n185966295","n185980380","n185980382","n185980384","n185980386"]},"w17965846":{"id":"w17965846","tags":{"highway":"residential","name":"2nd Ave"},"nodes":["n185971477","n185971478","n185971481","n185971482"]},"w209470306":{"id":"w209470306","tags":{"area":"yes","building":"yes"},"nodes":["n2196831349","n2196831350","n2196831351","n2196831352","n2196831353","n2196831354","n2196831349"]},"w17965845":{"id":"w17965845","tags":{"highway":"residential","name":"2nd Ave"},"nodes":["n185971474","n185971475","n185963396"]},"w209470307":{"id":"w209470307","tags":{"area":"yes","building":"yes"},"nodes":["n2196831355","n2196831356","n2196831357","n2196831358","n2196831359","n2196831360","n2196831361","n2196831362","n2196831363","n2196831364","n2196831355"]},"w17968192":{"id":"w17968192","tags":{"highway":"residential","name":"Washington St"},"nodes":["n185980373","n185983238","n185988027","n185961369","n185970222","n185965108","n185974699","n185986812","n185960682"]},"w17967603":{"id":"w17967603","tags":{"highway":"residential","name":"5th Ave"},"nodes":["n185985914","n185988027","n185983137","n185973866","n185988028","n185988030","n185988032"]},"w209470305":{"id":"w209470305","tags":{"area":"yes","building":"yes"},"nodes":["n2196831342","n2196831343","n2196831344","n2196831345","n2196831346","n2196831347","n2196831348","n2196831342"]},"w17967092":{"id":"w17967092","tags":{"highway":"residential","name":"Wood St"},"nodes":["n185983133","n185966342","n185971474","n185971482","n185980374","n185983135","n185983137","n185961371","n185970224","n185965110","n185983139","n185983140","n185983141","n185983143","n185983144","n185983145","n185983146","n185978800"]},"w17967107":{"id":"w17967107","tags":{"highway":"residential","name":"4th Ave"},"nodes":["n185983236","n185983135","n185983238","n185955019","n185947349","n185947378","n185947474","n185947359","n185948972"]},"n354030330":{"id":"n354030330","loc":[-85.6297222,41.9444444],"tags":{"leisure":"park","name":"Scouter Park"}},"n185966296":{"id":"n185966296","loc":[-85.629998,41.944078]},"n185966298":{"id":"n185966298","loc":[-85.629972,41.943927]},"n185966300":{"id":"n185966300","loc":[-85.629948,41.943783]},"n185980391":{"id":"n185980391","loc":[-85.6322992,41.9442766]},"n185980393":{"id":"n185980393","loc":[-85.6324925,41.9442136]},"n185980389":{"id":"n185980389","loc":[-85.6320272,41.9443281]},"n185980388":{"id":"n185980388","loc":[-85.6315778,41.9443959]},"n354031320":{"id":"n354031320","loc":[-85.6280556,41.9447222],"tags":{"amenity":"place_of_worship","name":"Riverside Church","religion":"christian"}},"n185987309":{"id":"n185987309","loc":[-85.6286497,41.9453531]},"n185987311":{"id":"n185987311","loc":[-85.6285942,41.9454805]},"n185988034":{"id":"n185988034","loc":[-85.6285815,41.9471692]},"n185988896":{"id":"n185988896","loc":[-85.6318433,41.9437929]},"n185977764":{"id":"n185977764","loc":[-85.6322988,41.943472]},"n1819848852":{"id":"n1819848852","loc":[-85.6315188,41.9448808]},"n1819848912":{"id":"n1819848912","loc":[-85.6284289,41.9472189]},"n1819848925":{"id":"n1819848925","loc":[-85.6314501,41.9451617]},"n1819848949":{"id":"n1819848949","loc":[-85.6309394,41.9455192]},"n1819848951":{"id":"n1819848951","loc":[-85.6290297,41.9457187]},"n1819848963":{"id":"n1819848963","loc":[-85.630521,41.9455591]},"n1819848981":{"id":"n1819848981","loc":[-85.6292936,41.9455846]},"n1819848989":{"id":"n1819848989","loc":[-85.6298451,41.9455431]},"n1819848998":{"id":"n1819848998","loc":[-85.6314973,41.9446254]},"n1819849018":{"id":"n1819849018","loc":[-85.6302807,41.9455527]},"n1819849043":{"id":"n1819849043","loc":[-85.6285533,41.9469731]},"n1819849087":{"id":"n1819849087","loc":[-85.6314501,41.9453532]},"n1819849090":{"id":"n1819849090","loc":[-85.628843,41.9461033]},"n1819849109":{"id":"n1819849109","loc":[-85.6311926,41.9454729]},"n1819849116":{"id":"n1819849116","loc":[-85.6288967,41.9459437]},"n1819849177":{"id":"n1819849177","loc":[-85.6287894,41.9464544]},"n1819858529":{"id":"n1819858529","loc":[-85.6325485,41.9445625]},"n2189112797":{"id":"n2189112797","loc":[-85.6275271,41.944555]},"n2189112798":{"id":"n2189112798","loc":[-85.6275196,41.9437258]},"n2189112799":{"id":"n2189112799","loc":[-85.6278937,41.943723]},"n2189112800":{"id":"n2189112800","loc":[-85.6278969,41.9439191]},"n2189112801":{"id":"n2189112801","loc":[-85.6279907,41.9439345]},"n2189112802":{"id":"n2189112802","loc":[-85.6280817,41.9439663]},"n2189112803":{"id":"n2189112803","loc":[-85.6281768,41.9440145]},"n2189112804":{"id":"n2189112804","loc":[-85.6281933,41.9440483]},"n2189112805":{"id":"n2189112805","loc":[-85.6281671,41.9440535]},"n2189112806":{"id":"n2189112806","loc":[-85.6281933,41.9440935]},"n2189112807":{"id":"n2189112807","loc":[-85.6282126,41.9441437]},"n2189112808":{"id":"n2189112808","loc":[-85.628214,41.9441991]},"n2189112809":{"id":"n2189112809","loc":[-85.6283298,41.944196]},"n2189112810":{"id":"n2189112810","loc":[-85.6283285,41.9442616]},"n2189112811":{"id":"n2189112811","loc":[-85.6281727,41.9442616]},"n2189112812":{"id":"n2189112812","loc":[-85.6281713,41.9442934]},"n2189112813":{"id":"n2189112813","loc":[-85.6280386,41.9442963]},"n2189112814":{"id":"n2189112814","loc":[-85.6280405,41.9443292]},"n2189112815":{"id":"n2189112815","loc":[-85.627829,41.9443349]},"n2189112816":{"id":"n2189112816","loc":[-85.6278347,41.9445495]},"n2189153271":{"id":"n2189153271","loc":[-85.6321053,41.9460342]},"n2189153272":{"id":"n2189153272","loc":[-85.632278,41.9457841]},"n2189153273":{"id":"n2189153273","loc":[-85.632823,41.9459936]},"n2189153274":{"id":"n2189153274","loc":[-85.6326845,41.9461963]},"n2189153275":{"id":"n2189153275","loc":[-85.6325664,41.9461507]},"n2189153276":{"id":"n2189153276","loc":[-85.6325323,41.946198]},"n2189153278":{"id":"n2189153278","loc":[-85.6321916,41.9459733]},"n2189153279":{"id":"n2189153279","loc":[-85.6322598,41.9458703]},"n2189153280":{"id":"n2189153280","loc":[-85.6327208,41.9460358]},"n2189153281":{"id":"n2189153281","loc":[-85.6326413,41.9461422]},"n185959079":{"id":"n185959079","loc":[-85.6293702,41.9474668]},"n185966301":{"id":"n185966301","loc":[-85.629692,41.943136]},"n185966304":{"id":"n185966304","loc":[-85.629565,41.942916]},"n185966308":{"id":"n185966308","loc":[-85.629501,41.942751]},"n185966315":{"id":"n185966315","loc":[-85.629472,41.942578]},"n185966319":{"id":"n185966319","loc":[-85.629444,41.942414]},"n185966321":{"id":"n185966321","loc":[-85.629391,41.94205]},"n185966323":{"id":"n185966323","loc":[-85.629369,41.941858]},"n185966327":{"id":"n185966327","loc":[-85.629297,41.941604]},"n185966331":{"id":"n185966331","loc":[-85.629233,41.941549]},"n185966336":{"id":"n185966336","loc":[-85.628504,41.941364]},"n185966338":{"id":"n185966338","loc":[-85.628275,41.941303]},"n185966340":{"id":"n185966340","loc":[-85.6269038,41.9410983]},"n185973867":{"id":"n185973867","loc":[-85.626843,41.947333]},"n185977762":{"id":"n185977762","loc":[-85.6318441,41.9429453]},"n1819848853":{"id":"n1819848853","loc":[-85.625854,41.9492218]},"n1819848861":{"id":"n1819848861","loc":[-85.6251459,41.9552376]},"n1819848874":{"id":"n1819848874","loc":[-85.6267445,41.9482961]},"n1819848882":{"id":"n1819848882","loc":[-85.6257209,41.9552396]},"n1819848883":{"id":"n1819848883","loc":[-85.624706,41.9523173]},"n1819848907":{"id":"n1819848907","loc":[-85.62609,41.9561471]},"n1819848908":{"id":"n1819848908","loc":[-85.6244013,41.9549284]},"n1819848911":{"id":"n1819848911","loc":[-85.6265578,41.9553672]},"n1819848923":{"id":"n1819848923","loc":[-85.6246802,41.9550959]},"n1819848936":{"id":"n1819848936","loc":[-85.6241588,41.9539291]},"n1819848940":{"id":"n1819848940","loc":[-85.62506,41.9511129]},"n1819848944":{"id":"n1819848944","loc":[-85.624942,41.9515912]},"n1819848950":{"id":"n1819848950","loc":[-85.6273989,41.9475461]},"n1819848957":{"id":"n1819848957","loc":[-85.627695,41.947404]},"n1819849009":{"id":"n1819849009","loc":[-85.6259248,41.94896]},"n1819849037":{"id":"n1819849037","loc":[-85.6257252,41.9502112]},"n1819849061":{"id":"n1819849061","loc":[-85.6270084,41.9479626]},"n1819849073":{"id":"n1819849073","loc":[-85.6243734,41.9534583]},"n1819849091":{"id":"n1819849091","loc":[-85.6241373,41.9543918]},"n1819849130":{"id":"n1819849130","loc":[-85.6282572,41.9473067]},"n1819849143":{"id":"n1819849143","loc":[-85.625281,41.9506596]},"n1819849153":{"id":"n1819849153","loc":[-85.6258647,41.9498043]},"n1819849168":{"id":"n1819849168","loc":[-85.6265084,41.9559317]},"n1819849173":{"id":"n1819849173","loc":[-85.6263325,41.9552156]},"n1819849175":{"id":"n1819849175","loc":[-85.6266372,41.9556764]},"n1819849178":{"id":"n1819849178","loc":[-85.6242232,41.9545993]},"n1819849181":{"id":"n1819849181","loc":[-85.6262187,41.9486712]},"n1819849188":{"id":"n1819849188","loc":[-85.6245558,41.9530434]},"n1819849190":{"id":"n1819849190","loc":[-85.6255982,41.9563017]},"n2168544738":{"id":"n2168544738","loc":[-85.6245707,41.9529711]},"w208643145":{"id":"w208643145","tags":{"amenity":"parking","area":"yes"},"nodes":["n2189153271","n2189153272","n2189153273","n2189153274","n2189153275","n2189153276","n2189153271"]},"w17967561":{"id":"w17967561","tags":{"highway":"residential","name":"Garden St"},"nodes":["n185980378","n185987309","n185987311","n185983236","n185973866"]},"w134150802":{"id":"w134150802","tags":{"bridge":"yes","highway":"secondary","name":"East Michigan Avenue","name_1":"State Highway 60","ref":"M 60"},"nodes":["n185980386","n185980388"]},"w208639462":{"id":"w208639462","tags":{"area":"yes","building":"yes"},"nodes":["n2189112797","n2189112798","n2189112799","n2189112800","n2189112801","n2189112802","n2189112803","n2189112804","n2189112805","n2189112806","n2189112807","n2189112808","n2189112809","n2189112810","n2189112811","n2189112812","n2189112813","n2189112814","n2189112815","n2189112816","n2189112797"]},"w134150830":{"id":"w134150830","tags":{"bridge":"yes","highway":"secondary","name":"South Main Street","old_ref":"US 131","ref":"M 86"},"nodes":["n185977762","n185977764"]},"w134150801":{"id":"w134150801","tags":{"highway":"secondary","name":"South Main Street","old_ref":"US 131","ref":"M 86"},"nodes":["n185977764","n185964982"]},"w208643146":{"id":"w208643146","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2189153277","n2189153281","n2189153278","n2189153279","n2189153280","n2189153281"]},"w17966061":{"id":"w17966061","tags":{"highway":"residential","name":"John Glenn Ct"},"nodes":["n185973866","n185973867"]},"w134150772":{"id":"w134150772","tags":{"highway":"residential","name":"5th Ave"},"nodes":["n185988034","n185959079","n185988036","n185978967"]},"w134150836":{"id":"w134150836","tags":{"highway":"secondary","name":"East Michigan Avenue","name_1":"State Highway 60","ref":"M 60"},"nodes":["n185980388","n1819858524","n185980389","n185980391","n185980393","n185964982"]},"w17967734":{"id":"w17967734","tags":{"highway":"residential","name":"Water Street"},"nodes":["n185988896","n185980391","n1819858529"]},"w17965305":{"id":"w17965305","tags":{"highway":"residential","name":"River Dr"},"nodes":["n185966295","n185966296","n185966298","n185966300","n185966301","n185966304","n185966308","n185966315","n185966319","n185966321","n185966323","n185966327","n185966331","n185966336","n185966338","n185963392","n185966340","n185966342"]},"w134150826":{"id":"w134150826","tags":{"bridge":"yes","highway":"residential","name":"5th Ave"},"nodes":["n185988032","n185988034"]},"w170848330":{"id":"w170848330","tags":{"name":"Portage River","waterway":"river"},"nodes":["n1819849190","n1819848907","n1819849168","n1819849175","n1819848911","n1819849173","n1819848882","n1819848861","n1819848923","n1819848908","n1819849178","n1819849091","n1819848936","n1819849073","n1819849188","n2168544738","n1819848883","n1819848944","n1819848940","n1819849143","n1819849037","n1819849153","n1819848853","n1819849009","n1819849181","n1819848874","n1819849061","n1819848950","n1819848957","n1819849130","n1819848912","n1819849043","n1819849177","n1819849090","n1819849116","n1819848951","n1819848981","n1819848989","n1819849018","n1819848963","n1819848949","n1819849109","n1819849087","n1819848925","n1819848852","n1819848998","n1819849057"]},"r270264":{"id":"r270264","tags":{"network":"US:MI","ref":"86","route":"road","state_id":"MI","type":"route","url":"http://en.wikipedia.org/wiki/M-86_%28Michigan_highway%29"},"members":[{"id":"w17737723","type":"way","role":""},{"id":"w17735949","type":"way","role":""},{"id":"w17740404","type":"way","role":""},{"id":"w17966273","type":"way","role":""},{"id":"w17964745","type":"way","role":""},{"id":"w151538068","type":"way","role":""},{"id":"w151538067","type":"way","role":""},{"id":"w17964960","type":"way","role":""},{"id":"w17966099","type":"way","role":""},{"id":"w17968009","type":"way","role":""},{"id":"w41259499","type":"way","role":""},{"id":"w151540401","type":"way","role":""},{"id":"w151540418","type":"way","role":""},{"id":"w17967997","type":"way","role":""},{"id":"w17966029","type":"way","role":""},{"id":"w17964801","type":"way","role":""},{"id":"w41259496","type":"way","role":""},{"id":"w151540399","type":"way","role":""},{"id":"w17968004","type":"way","role":""},{"id":"w17966462","type":"way","role":""},{"id":"w134150830","type":"way","role":""},{"id":"w134150801","type":"way","role":""},{"id":"w17732295","type":"way","role":""}]},"n185980093":{"id":"n185980093","loc":[-85.6271414,41.9407274]},"n185964330":{"id":"n185964330","loc":[-85.6235688,41.9399111]},"n185964328":{"id":"n185964328","loc":[-85.6235609,41.9391301]},"n185958034":{"id":"n185958034","loc":[-85.627102,41.939125]},"n185964331":{"id":"n185964331","loc":[-85.623571,41.940124]},"n185964329":{"id":"n185964329","loc":[-85.623562,41.9392411]},"n185972756":{"id":"n185972756","loc":[-85.623802,41.939102]},"n185972757":{"id":"n185972757","loc":[-85.623584,41.93913]},"n185975325":{"id":"n185975325","loc":[-85.624835,41.939318]},"n185975326":{"id":"n185975326","loc":[-85.624811,41.939435]},"n185975327":{"id":"n185975327","loc":[-85.624635,41.939703]},"n185975328":{"id":"n185975328","loc":[-85.624366,41.940055]},"n185975330":{"id":"n185975330","loc":[-85.624287,41.940113]},"n185975332":{"id":"n185975332","loc":[-85.624215,41.940134]},"n185980088":{"id":"n185980088","loc":[-85.627127,41.940086]},"n185988943":{"id":"n185988943","loc":[-85.622643,41.940128]},"n185988961":{"id":"n185988961","loc":[-85.627263,41.940082]},"n185990192":{"id":"n185990192","loc":[-85.622933,41.939224]},"n185990194":{"id":"n185990194","loc":[-85.621976,41.939203]},"n185991378":{"id":"n185991378","loc":[-85.622643,41.940635]},"n1475283999":{"id":"n1475283999","loc":[-85.6271165,41.9408429]},"n185980090":{"id":"n185980090","loc":[-85.6271315,41.9402001]},"n185958036":{"id":"n185958036","loc":[-85.6248366,41.9391615]},"n1819800188":{"id":"n1819800188","loc":[-85.6246947,41.9401644]},"n1819800199":{"id":"n1819800199","loc":[-85.6233686,41.9430896]},"n1819800204":{"id":"n1819800204","loc":[-85.6223236,41.9408587]},"n1819800213":{"id":"n1819800213","loc":[-85.6247526,41.9414138]},"n1819800216":{"id":"n1819800216","loc":[-85.6230961,41.9407151]},"n1819800218":{"id":"n1819800218","loc":[-85.621991,41.9429336]},"n1819800221":{"id":"n1819800221","loc":[-85.6246088,41.9424708]},"n1819800227":{"id":"n1819800227","loc":[-85.6241368,41.9403081]},"n1819800230":{"id":"n1819800230","loc":[-85.6226776,41.9431012]},"n1819800231":{"id":"n1819800231","loc":[-85.6243728,41.9401644]},"n1819800232":{"id":"n1819800232","loc":[-85.6249629,41.9408907]},"n1819800248":{"id":"n1819800248","loc":[-85.6238685,41.9405555]},"n1819800266":{"id":"n1819800266","loc":[-85.6246882,41.9418367]},"n1819800271":{"id":"n1819800271","loc":[-85.62492,41.9413695]},"n1819800294":{"id":"n1819800294","loc":[-85.6243556,41.9427465]},"n1819800304":{"id":"n1819800304","loc":[-85.6251453,41.94117]},"n1819800325":{"id":"n1819800325","loc":[-85.6248234,41.9405714]},"n1819800362":{"id":"n1819800362","loc":[-85.6239544,41.9429416]},"n1819800368":{"id":"n1819800368","loc":[-85.6243406,41.9402283]},"n1819800375":{"id":"n1819800375","loc":[-85.6226562,41.940755]},"n1819800377":{"id":"n1819800377","loc":[-85.6232033,41.9406512]},"n185945133":{"id":"n185945133","loc":[-85.623501,41.933232]},"n185945135":{"id":"n185945135","loc":[-85.624776,41.933205]},"n185945395":{"id":"n185945395","loc":[-85.624741,41.93019]},"n185952239":{"id":"n185952239","loc":[-85.615166,41.9382]},"n185954490":{"id":"n185954490","loc":[-85.624721,41.929278]},"n185957831":{"id":"n185957831","loc":[-85.625041,41.938662]},"n185958030":{"id":"n185958030","loc":[-85.629033,41.93913]},"n185958032":{"id":"n185958032","loc":[-85.628429,41.939143]},"n185958498":{"id":"n185958498","loc":[-85.621605,41.940143]},"n185961186":{"id":"n185961186","loc":[-85.624792,41.935214]},"n185963099":{"id":"n185963099","loc":[-85.6204461,41.9401485]},"n185963698":{"id":"n185963698","loc":[-85.6297342,41.9400783]},"n185964320":{"id":"n185964320","loc":[-85.623511,41.934216]},"n185964322":{"id":"n185964322","loc":[-85.6235312,41.9362084]},"n185964324":{"id":"n185964324","loc":[-85.6235488,41.9371726]},"n185964326":{"id":"n185964326","loc":[-85.6235512,41.9381718]},"n185967077":{"id":"n185967077","loc":[-85.617359,41.940161]},"n185967634":{"id":"n185967634","loc":[-85.6248039,41.9362012]},"n185970833":{"id":"n185970833","loc":[-85.6248019,41.9381684]},"n185972752":{"id":"n185972752","loc":[-85.624582,41.938848]},"n185972754":{"id":"n185972754","loc":[-85.6242,41.939008]},"n185973251":{"id":"n185973251","loc":[-85.602727,41.936012]},"n185974509":{"id":"n185974509","loc":[-85.62478,41.93217]},"n185975315":{"id":"n185975315","loc":[-85.624703,41.925597]},"n185975316":{"id":"n185975316","loc":[-85.624716,41.927359]},"n185975317":{"id":"n185975317","loc":[-85.62475,41.93119]},"n185975318":{"id":"n185975318","loc":[-85.624782,41.934218]},"n185975320":{"id":"n185975320","loc":[-85.6247949,41.9371708]},"n185977754":{"id":"n185977754","loc":[-85.6276,41.937412]},"n185980075":{"id":"n185980075","loc":[-85.627451,41.937549]},"n185980077":{"id":"n185980077","loc":[-85.627375,41.937618]},"n185980078":{"id":"n185980078","loc":[-85.627278,41.937728]},"n185980079":{"id":"n185980079","loc":[-85.627199,41.937842]},"n185980081":{"id":"n185980081","loc":[-85.627141,41.937981]},"n185980083":{"id":"n185980083","loc":[-85.627109,41.938153]},"n185980085":{"id":"n185980085","loc":[-85.627101,41.938699]},"n185981173":{"id":"n185981173","loc":[-85.61433,41.940167]},"n185987021":{"id":"n185987021","loc":[-85.628311,41.942261]},"n185988963":{"id":"n185988963","loc":[-85.628439,41.940086]},"n185990195":{"id":"n185990195","loc":[-85.621225,41.939143]},"n185990196":{"id":"n185990196","loc":[-85.620576,41.939033]},"n185990198":{"id":"n185990198","loc":[-85.619081,41.938804]},"n185990200":{"id":"n185990200","loc":[-85.617593,41.938552]},"n185990202":{"id":"n185990202","loc":[-85.617372,41.938535]},"n185990204":{"id":"n185990204","loc":[-85.616087,41.93832]},"n185990206":{"id":"n185990206","loc":[-85.615754,41.938289]},"n185990209":{"id":"n185990209","loc":[-85.615438,41.938251]},"n185990211":{"id":"n185990211","loc":[-85.613469,41.937867]},"n185990212":{"id":"n185990212","loc":[-85.610172,41.937298]},"n185990213":{"id":"n185990213","loc":[-85.605537,41.936497]},"n185990214":{"id":"n185990214","loc":[-85.604014,41.936234]},"n1819800180":{"id":"n1819800180","loc":[-85.588775,41.9455032]},"n1819800181":{"id":"n1819800181","loc":[-85.6074212,41.9408827]},"n1819800182":{"id":"n1819800182","loc":[-85.6131397,41.9427022]},"n1819800183":{"id":"n1819800183","loc":[-85.6171523,41.9416807]},"n1819800184":{"id":"n1819800184","loc":[-85.602465,41.9397415]},"n1819800185":{"id":"n1819800185","loc":[-85.6109296,41.9410583]},"n1819800186":{"id":"n1819800186","loc":[-85.6165729,41.9418004]},"n1819800189":{"id":"n1819800189","loc":[-85.5866293,41.9458224]},"n1819800191":{"id":"n1819800191","loc":[-85.5853311,41.9466603]},"n1819800201":{"id":"n1819800201","loc":[-85.6101142,41.9433406]},"n1819800202":{"id":"n1819800202","loc":[-85.600963,41.9428618]},"n1819800206":{"id":"n1819800206","loc":[-85.6154357,41.9427501]},"n1819800207":{"id":"n1819800207","loc":[-85.6040309,41.9414094]},"n1819800209":{"id":"n1819800209","loc":[-85.6113694,41.943189]},"n1819800211":{"id":"n1819800211","loc":[-85.618032,41.9416408]},"n1819800214":{"id":"n1819800214","loc":[-85.5959419,41.9402602]},"n1819800219":{"id":"n1819800219","loc":[-85.5972117,41.9420043]},"n1819800223":{"id":"n1819800223","loc":[-85.6117171,41.9430019]},"n1819800224":{"id":"n1819800224","loc":[-85.5977873,41.9395579]},"n1819800226":{"id":"n1819800226","loc":[-85.5917362,41.9432209]},"n1819800228":{"id":"n1819800228","loc":[-85.6055759,41.9419122]},"n1819800229":{"id":"n1819800229","loc":[-85.6203395,41.9425595]},"n1819800233":{"id":"n1819800233","loc":[-85.6107579,41.9433007]},"n1819800234":{"id":"n1819800234","loc":[-85.6039773,41.9412498]},"n1819800235":{"id":"n1819800235","loc":[-85.6000977,41.9412861]},"n1819800236":{"id":"n1819800236","loc":[-85.6026689,41.9407231]},"n1819800237":{"id":"n1819800237","loc":[-85.615161,41.9428662]},"n1819800238":{"id":"n1819800238","loc":[-85.5878953,41.9454314]},"n1819800239":{"id":"n1819800239","loc":[-85.6035267,41.941569]},"n1819800240":{"id":"n1819800240","loc":[-85.5929738,41.9450208]},"n1819800241":{"id":"n1819800241","loc":[-85.6186329,41.9416488]},"n1819800242":{"id":"n1819800242","loc":[-85.5881136,41.9483963]},"n1819800243":{"id":"n1819800243","loc":[-85.5909208,41.9466922]},"n1819800244":{"id":"n1819800244","loc":[-85.5997721,41.9394941]},"n1819800245":{"id":"n1819800245","loc":[-85.6202064,41.9425712]},"n1819800246":{"id":"n1819800246","loc":[-85.591071,41.9448808]},"n1819800247":{"id":"n1819800247","loc":[-85.5866078,41.9490622]},"n1819800250":{"id":"n1819800250","loc":[-85.602383,41.9420841]},"n1819800251":{"id":"n1819800251","loc":[-85.5957418,41.9426906]},"n1819800255":{"id":"n1819800255","loc":[-85.6157039,41.9416727]},"n1819800256":{"id":"n1819800256","loc":[-85.6080328,41.9410982]},"n1819800258":{"id":"n1819800258","loc":[-85.6192551,41.9414892]},"n1819800260":{"id":"n1819800260","loc":[-85.6104253,41.94117]},"n1819800261":{"id":"n1819800261","loc":[-85.6204503,41.9425709]},"n1819800263":{"id":"n1819800263","loc":[-85.5872194,41.9455431]},"n1819800264":{"id":"n1819800264","loc":[-85.616176,41.9418244]},"n1819800268":{"id":"n1819800268","loc":[-85.6120883,41.9426703]},"n1819800269":{"id":"n1819800269","loc":[-85.5894547,41.9474946]},"n1819800272":{"id":"n1819800272","loc":[-85.6209181,41.9425027]},"n1819800274":{"id":"n1819800274","loc":[-85.6122814,41.9412817]},"n1819800276":{"id":"n1819800276","loc":[-85.5895153,41.9452798]},"n1819800277":{"id":"n1819800277","loc":[-85.5884317,41.9455272]},"n1819800279":{"id":"n1819800279","loc":[-85.5884103,41.9480966]},"n1819800287":{"id":"n1819800287","loc":[-85.5904917,41.9453915]},"n1819800288":{"id":"n1819800288","loc":[-85.6212292,41.9412977]},"n1819800289":{"id":"n1819800289","loc":[-85.5954377,41.9406832]},"n1819800290":{"id":"n1819800290","loc":[-85.593721,41.9420957]},"n1819800291":{"id":"n1819800291","loc":[-85.6162832,41.9427102]},"n1819800292":{"id":"n1819800292","loc":[-85.605018,41.9401804]},"n1819800293":{"id":"n1819800293","loc":[-85.6086443,41.941146]},"n1819800296":{"id":"n1819800296","loc":[-85.6204675,41.9413775]},"n1819800297":{"id":"n1819800297","loc":[-85.612496,41.9424947]},"n1819800299":{"id":"n1819800299","loc":[-85.6065629,41.9423431]},"n1819800301":{"id":"n1819800301","loc":[-85.6036125,41.9398452]},"n1819800303":{"id":"n1819800303","loc":[-85.6114767,41.94117]},"n1819800306":{"id":"n1819800306","loc":[-85.592616,41.9428139]},"n1819800308":{"id":"n1819800308","loc":[-85.6023041,41.9419521]},"n1819800310":{"id":"n1819800310","loc":[-85.6218944,41.9411061]},"n1819800311":{"id":"n1819800311","loc":[-85.6097816,41.941162]},"n1819800312":{"id":"n1819800312","loc":[-85.5922549,41.9457869]},"n1819800313":{"id":"n1819800313","loc":[-85.5986027,41.9417206]},"n1819800314":{"id":"n1819800314","loc":[-85.5918687,41.946138]},"n1819800315":{"id":"n1819800315","loc":[-85.5872875,41.948883]},"n1819800316":{"id":"n1819800316","loc":[-85.594272,41.9436642]},"n1819800317":{"id":"n1819800317","loc":[-85.6176351,41.941577]},"n1819800318":{"id":"n1819800318","loc":[-85.6137834,41.9430853]},"n1819800319":{"id":"n1819800319","loc":[-85.6195383,41.942622],"tags":{"leisure":"slipway"}},"n1819800320":{"id":"n1819800320","loc":[-85.5971006,41.9398053]},"n1819800321":{"id":"n1819800321","loc":[-85.601714,41.9406752]},"n1819800322":{"id":"n1819800322","loc":[-85.5908028,41.9453117]},"n1819800323":{"id":"n1819800323","loc":[-85.6062732,41.9404597]},"n1819800324":{"id":"n1819800324","loc":[-85.62124,41.9425905]},"n1819800327":{"id":"n1819800327","loc":[-85.6008664,41.942766]},"n1819800328":{"id":"n1819800328","loc":[-85.6179355,41.9428538]},"n1819800330":{"id":"n1819800330","loc":[-85.6045566,41.9415131]},"n1819800331":{"id":"n1819800331","loc":[-85.5944935,41.9414653]},"n1819800333":{"id":"n1819800333","loc":[-85.6088911,41.943181]},"n1819800334":{"id":"n1819800334","loc":[-85.5946367,41.943369]},"n1819800336":{"id":"n1819800336","loc":[-85.6150494,41.9429656]},"n1819800343":{"id":"n1819800343","loc":[-85.6096099,41.9433326]},"n1819800345":{"id":"n1819800345","loc":[-85.5915216,41.9435401]},"n1819800347":{"id":"n1819800347","loc":[-85.607786,41.9428698]},"n1819800349":{"id":"n1819800349","loc":[-85.6187616,41.9426623]},"n1819800350":{"id":"n1819800350","loc":[-85.6012527,41.9426064]},"n1819800352":{"id":"n1819800352","loc":[-85.6214867,41.9428379]},"n1819800354":{"id":"n1819800354","loc":[-85.61338,41.94293]},"n1819800355":{"id":"n1819800355","loc":[-85.5923156,41.9428139]},"n1819800357":{"id":"n1819800357","loc":[-85.5901591,41.9453197]},"n1819800359":{"id":"n1819800359","loc":[-85.6033979,41.9408827]},"n1819800360":{"id":"n1819800360","loc":[-85.6186543,41.9414653]},"n1819800363":{"id":"n1819800363","loc":[-85.6128607,41.9425665]},"n1819800365":{"id":"n1819800365","loc":[-85.614234,41.9412977]},"n1819800367":{"id":"n1819800367","loc":[-85.6089662,41.9410902]},"n1819800369":{"id":"n1819800369","loc":[-85.6197379,41.9413695]},"n1819800370":{"id":"n1819800370","loc":[-85.6037348,41.941733]},"n1819800371":{"id":"n1819800371","loc":[-85.5993467,41.9415654]},"n1819800372":{"id":"n1819800372","loc":[-85.598077,41.94196]},"n1819800373":{"id":"n1819800373","loc":[-85.5984203,41.9394781]},"n1819800374":{"id":"n1819800374","loc":[-85.6013315,41.9427066]},"n1819800376":{"id":"n1819800376","loc":[-85.5934673,41.944167]},"n1819800378":{"id":"n1819800378","loc":[-85.6011062,41.9407753]},"n1819800379":{"id":"n1819800379","loc":[-85.6150602,41.9415131]},"n1819800380":{"id":"n1819800380","loc":[-85.6132148,41.9412338]},"n1819800381":{"id":"n1819800381","loc":[-85.5889038,41.9453835]},"n2139966621":{"id":"n2139966621","loc":[-85.6198719,41.9426184]},"n2139966622":{"id":"n2139966622","loc":[-85.6197551,41.9426123]},"n2139966623":{"id":"n2139966623","loc":[-85.6196467,41.9426279]},"n2139966624":{"id":"n2139966624","loc":[-85.6191519,41.9426221]},"n2139966625":{"id":"n2139966625","loc":[-85.6194153,41.9426256]},"n2139966626":{"id":"n2139966626","loc":[-85.6200497,41.9425812]},"n2139966629":{"id":"n2139966629","loc":[-85.6192123,41.9426229]},"n2203933101":{"id":"n2203933101","loc":[-85.6030009,41.9360592]},"w17967539":{"id":"w17967539","tags":{"highway":"residential","name":"1st Ave"},"nodes":["n185965099","n185963395","n185987021"]},"w17967751":{"id":"w17967751","tags":{"highway":"residential","name":"River St"},"nodes":["n185980088","n185988961","n185988963","n185963698"]},"w17965088":{"id":"w17965088","tags":{"highway":"residential","name":"9th St"},"nodes":["n185945133","n185964320","n185964322","n185964324","n185964326","n185964328","n185964329","n185964330","n185964331"]},"w17964467":{"id":"w17964467","tags":{"highway":"residential","name":"Mechanic St"},"nodes":["n185958030","n185958032","n185958034","n185958036"]},"w134150842":{"id":"w134150842","tags":{"bridge":"yes","highway":"residential","name":"6th St"},"nodes":["n185980090","n185980093"]},"w17966740":{"id":"w17966740","tags":{"highway":"residential","name":"6th St"},"nodes":["n185977754","n185980075","n185980077","n185980078","n185980079","n185980081","n185980083","n185980085","n185958034","n185980088","n185980090"]},"w170844765":{"id":"w170844765","tags":{"waterway":"dam"},"nodes":["n1819800304","n1819800232","n1819800325","n1819800188"]},"w17967745":{"id":"w17967745","tags":{"highway":"residential","name":"River St"},"nodes":["n185981173","n185967077","n185963099","n185958498","n185988943","n185964331","n185975332"]},"w17968113":{"id":"w17968113","tags":{"highway":"residential","name":"Green St"},"nodes":["n185988943","n185991378"]},"w134150833":{"id":"w134150833","tags":{"highway":"residential","name":"6th St"},"nodes":["n185980093","n1475283999","n185963392"]},"w17967935":{"id":"w17967935","tags":{"name":"Michigan Central Railroad","railway":"abandoned"},"nodes":["n185972757","n185990192","n185990194","n185990195","n185990196","n185990198","n185990200","n185990202","n185990204","n185990206","n185990209","n185952239","n185990211","n185990212","n185990213","n185990214","n2203933101","n185973251"]},"w17965993":{"id":"w17965993","tags":{"name":"Conrail Railroad","railway":"abandoned"},"nodes":["n185957831","n185972752","n185972754","n185972756","n185972757"]},"w17966211":{"id":"w17966211","tags":{"highway":"residential","name":"8th St"},"nodes":["n185975315","n185975316","n185954490","n185945395","n185975317","n185974509","n185945135","n185975318","n185961186","n185967634","n185975320","n185970833","n185958036","n185975325","n185975326","n185975327","n185975328","n185975330","n185975332"]},"w170844766":{"id":"w170844766","tags":{"waterway":"riverbank"},"nodes":["n1819800229","n1819800245","n2139966626","n2139966621","n2139966622","n2139966623","n1819800319","n2139966625","n2139966629","n2139966624","n1819800349","n1819800328","n1819800291","n1819800206","n1819800237","n1819800336","n1819800318","n1819800354","n1819800182","n1819800363","n1819800297","n1819800268","n1819800223","n1819800209","n1819800233","n1819800201","n1819800343","n1819800333","n1819800347","n1819800299","n1819800228","n1819800330","n1819800370","n1819800250","n1819800374","n1819800202","n1819800327","n1819800350","n1819800308","n1819800239","n1819800207","n1819800234","n1819800359","n1819800236","n1819800321","n1819800378","n1819800235","n1819800371","n1819800313","n1819800372","n1819800219","n1819800251","n1819800334","n1819800316","n1819800376","n1819800240","n1819800312","n1819800314","n1819800243","n1819800269","n1819800279","n1819800242","n1819800315","n1819800247","n1819800191","n1819800189","n1819800263","n1819800238","n1819800277","n1819800180","n1819800381","n1819800276","n1819800357","n1819800287","n1819800322","n1819800246","n1819800345","n1819800226","n1819800355","n1819800306","n1819800290","n1819800331","n1819800289","n1819800214","n1819800320","n1819800224","n1819800373","n1819800244","n1819800184","n1819800301","n1819800292","n1819800323","n1819800181","n1819800256","n1819800293","n1819800367","n1819800311","n1819800260","n1819800185","n1819800303","n1819800274","n1819800380","n1819800365","n1819800379","n1819800255","n1819800264","n1819800186","n1819800183","n1819800317","n1819800211","n1819800241","n1819800360","n1819800258","n1819800369","n1819800296","n1819800288","n1819800310","n1819800204","n1819800375","n1819800216","n1819800377","n1819800248","n1819800227","n1819800368","n1819800231","n1819800188","n1819800325","n1819800232","n1819800304","n1819800271","n1819800213","n1819800266","n1819800221","n1819800294","n1819800362","n1819800199","n1819800230","n1819800218","n1819800352","n1819800324","n1819800272","n1819800261","n1819800229"]},"n1875654132":{"id":"n1875654132","loc":[-85.6297439,41.939808]},"n1475293263":{"id":"n1475293263","loc":[-85.6296235,41.939922]},"n185947850":{"id":"n185947850","loc":[-85.631594,41.942613]},"n185952745":{"id":"n185952745","loc":[-85.630986,41.941786]},"n185972907":{"id":"n185972907","loc":[-85.631797,41.9420055]},"n185972911":{"id":"n185972911","loc":[-85.6309723,41.9411623]},"n185972915":{"id":"n185972915","loc":[-85.6295971,41.939267]},"n1475293223":{"id":"n1475293223","loc":[-85.6313962,41.9416114],"tags":{"railway":"level_crossing"}},"n1475293231":{"id":"n1475293231","loc":[-85.6318779,41.9415447]},"n1475293241":{"id":"n1475293241","loc":[-85.6304613,41.9405499]},"n1475293246":{"id":"n1475293246","loc":[-85.6297512,41.9395393],"tags":{"railway":"level_crossing"}},"n1475293251":{"id":"n1475293251","loc":[-85.6316633,41.9415128]},"n2139982404":{"id":"n2139982404","loc":[-85.6313283,41.9413748]},"n2139982407":{"id":"n2139982407","loc":[-85.6325545,41.9417787]},"n2139982408":{"id":"n2139982408","loc":[-85.6324499,41.9417693]},"n2139982409":{"id":"n2139982409","loc":[-85.6324753,41.9416444]},"n2139982410":{"id":"n2139982410","loc":[-85.6325814,41.9416538]},"n2139982411":{"id":"n2139982411","loc":[-85.6319572,41.9413515]},"n2139982412":{"id":"n2139982412","loc":[-85.6322925,41.941139]},"n2139982413":{"id":"n2139982413","loc":[-85.6323153,41.941153]},"n2139982414":{"id":"n2139982414","loc":[-85.6323019,41.9412617]},"n2139982415":{"id":"n2139982415","loc":[-85.6323703,41.9412667]},"n2139982416":{"id":"n2139982416","loc":[-85.6323555,41.941538]},"n2139982417":{"id":"n2139982417","loc":[-85.6321343,41.9416777]},"n2139982418":{"id":"n2139982418","loc":[-85.6319425,41.9416866]},"n2139982419":{"id":"n2139982419","loc":[-85.6320303,41.9416941]},"n2139982420":{"id":"n2139982420","loc":[-85.6321665,41.9415554]},"n2139982421":{"id":"n2139982421","loc":[-85.632412,41.9414164]},"n2139982422":{"id":"n2139982422","loc":[-85.6324801,41.9413421]},"n2139982423":{"id":"n2139982423","loc":[-85.6325023,41.9412585]},"n2139982424":{"id":"n2139982424","loc":[-85.6324532,41.9411607]},"n2139982425":{"id":"n2139982425","loc":[-85.6323502,41.941103]},"n2139982426":{"id":"n2139982426","loc":[-85.6322362,41.9411183]},"n2139982427":{"id":"n2139982427","loc":[-85.6318941,41.9413551]},"n2139982428":{"id":"n2139982428","loc":[-85.6318592,41.9414105]},"n2139982429":{"id":"n2139982429","loc":[-85.6320111,41.9415866]},"n2139982430":{"id":"n2139982430","loc":[-85.632446,41.9413792]},"n2139982431":{"id":"n2139982431","loc":[-85.6325112,41.941416]},"n2139982432":{"id":"n2139982432","loc":[-85.6325449,41.9416345]},"n2139982433":{"id":"n2139982433","loc":[-85.6326122,41.94164]},"n2139982434":{"id":"n2139982434","loc":[-85.6325954,41.9421966]},"n2139982435":{"id":"n2139982435","loc":[-85.6325655,41.9422411]},"n2139982436":{"id":"n2139982436","loc":[-85.632515,41.9422564]},"n2139982437":{"id":"n2139982437","loc":[-85.6324495,41.94223]},"n2139982438":{"id":"n2139982438","loc":[-85.6324009,41.9421743]},"n2139982439":{"id":"n2139982439","loc":[-85.6323915,41.9421145]},"n2139982440":{"id":"n2139982440","loc":[-85.6320287,41.9418585]},"n2139982441":{"id":"n2139982441","loc":[-85.6318285,41.9416387]},"n1475293258":{"id":"n1475293258","loc":[-85.6318289,41.9415077]},"n2168544754":{"id":"n2168544754","loc":[-85.6312814,41.9431198]},"n2168544755":{"id":"n2168544755","loc":[-85.6314212,41.9430646]},"n2168544756":{"id":"n2168544756","loc":[-85.6313387,41.942949]},"n2168544757":{"id":"n2168544757","loc":[-85.6311989,41.9430041]},"n2168544758":{"id":"n2168544758","loc":[-85.6311024,41.9429313]},"n2168544759":{"id":"n2168544759","loc":[-85.6310087,41.9428087]},"n2168544760":{"id":"n2168544760","loc":[-85.6313831,41.9426504]},"n2168544761":{"id":"n2168544761","loc":[-85.6314768,41.9427729]},"n2168544762":{"id":"n2168544762","loc":[-85.6306376,41.942809]},"n2168544763":{"id":"n2168544763","loc":[-85.6307378,41.9429427]},"n2168544764":{"id":"n2168544764","loc":[-85.630841,41.9428998]},"n2168544765":{"id":"n2168544765","loc":[-85.6307408,41.9427662]},"n2168544766":{"id":"n2168544766","loc":[-85.6305404,41.9426029]},"n2168544767":{"id":"n2168544767","loc":[-85.6304976,41.9426194]},"n2168544768":{"id":"n2168544768","loc":[-85.6305673,41.9427184]},"n2168544769":{"id":"n2168544769","loc":[-85.6306164,41.9426984]},"n2168544770":{"id":"n2168544770","loc":[-85.6306418,41.9427302]},"n2168544771":{"id":"n2168544771","loc":[-85.6306861,41.9427137]},"n2168544772":{"id":"n2168544772","loc":[-85.6307146,41.9427537]},"n2168544773":{"id":"n2168544773","loc":[-85.6308999,41.9426807]},"n2168544774":{"id":"n2168544774","loc":[-85.6308429,41.9426053]},"n2168544775":{"id":"n2168544775","loc":[-85.6308999,41.9425806]},"n2168544776":{"id":"n2168544776","loc":[-85.6308318,41.9424875]},"n2168544777":{"id":"n2168544777","loc":[-85.6307732,41.9425087]},"n2168544778":{"id":"n2168544778","loc":[-85.6307178,41.9424357]},"n2168544779":{"id":"n2168544779","loc":[-85.630485,41.942524]},"n2189099387":{"id":"n2189099387","loc":[-85.631203,41.9393371]},"n2189099404":{"id":"n2189099404","loc":[-85.6301963,41.9391363]},"n2189099405":{"id":"n2189099405","loc":[-85.6304447,41.9391352]},"n2189099406":{"id":"n2189099406","loc":[-85.6304463,41.9393391]},"n2189099407":{"id":"n2189099407","loc":[-85.6308435,41.9393373]},"n2189099408":{"id":"n2189099408","loc":[-85.6308418,41.9391251]},"n2189099409":{"id":"n2189099409","loc":[-85.6310929,41.939124]},"n2189099410":{"id":"n2189099410","loc":[-85.6310946,41.9393376]},"n2189112720":{"id":"n2189112720","loc":[-85.6314677,41.9412327]},"n2189112721":{"id":"n2189112721","loc":[-85.6313337,41.9411397]},"n2189112722":{"id":"n2189112722","loc":[-85.6320521,41.9405678]},"n2189112723":{"id":"n2189112723","loc":[-85.6321899,41.9406633]},"n2189112724":{"id":"n2189112724","loc":[-85.6313229,41.9408344]},"n2189112725":{"id":"n2189112725","loc":[-85.6311223,41.9410018]},"n2189112726":{"id":"n2189112726","loc":[-85.6313205,41.9411333]},"n2189112727":{"id":"n2189112727","loc":[-85.6315211,41.9409659]},"n2189112728":{"id":"n2189112728","loc":[-85.6311035,41.9402529]},"n2189112729":{"id":"n2189112729","loc":[-85.631226,41.9402107]},"n2189112730":{"id":"n2189112730","loc":[-85.6315966,41.9408051]},"n2189112731":{"id":"n2189112731","loc":[-85.6314741,41.9408473]},"n2189112732":{"id":"n2189112732","loc":[-85.6318114,41.940534]},"n2189112733":{"id":"n2189112733","loc":[-85.631588,41.94061]},"n2189112734":{"id":"n2189112734","loc":[-85.6314379,41.940366]},"n2189112735":{"id":"n2189112735","loc":[-85.6316613,41.94029]},"n2189112736":{"id":"n2189112736","loc":[-85.6306214,41.9400415]},"n2189112737":{"id":"n2189112737","loc":[-85.6304362,41.9397728]},"n2189112738":{"id":"n2189112738","loc":[-85.6305899,41.9397142]},"n2189112739":{"id":"n2189112739","loc":[-85.6307751,41.9399828]},"n2189112740":{"id":"n2189112740","loc":[-85.6304695,41.9401673]},"n2189112741":{"id":"n2189112741","loc":[-85.6301298,41.9396855]},"n2189112742":{"id":"n2189112742","loc":[-85.6303016,41.9396184]},"n2189112743":{"id":"n2189112743","loc":[-85.6306413,41.9401003]},"n2189112744":{"id":"n2189112744","loc":[-85.6309656,41.9406189]},"n2189112745":{"id":"n2189112745","loc":[-85.6308738,41.940493]},"n2189112746":{"id":"n2189112746","loc":[-85.6309333,41.940469]},"n2189112747":{"id":"n2189112747","loc":[-85.6307634,41.9402358]},"n2189112748":{"id":"n2189112748","loc":[-85.6308798,41.9401889]},"n2189112749":{"id":"n2189112749","loc":[-85.6311416,41.940548]},"n2189112750":{"id":"n2189112750","loc":[-85.6309577,41.9408708]},"n2189112751":{"id":"n2189112751","loc":[-85.630874,41.9407777]},"n2189112752":{"id":"n2189112752","loc":[-85.6310622,41.9406841]},"n2189112753":{"id":"n2189112753","loc":[-85.6311459,41.9407772]},"n2189112754":{"id":"n2189112754","loc":[-85.6320308,41.9405747]},"n2189112755":{"id":"n2189112755","loc":[-85.6317769,41.9401857]},"n2189112756":{"id":"n2189112756","loc":[-85.6313462,41.9401785]},"n2189112757":{"id":"n2189112757","loc":[-85.6313423,41.9401199]},"n2189112758":{"id":"n2189112758","loc":[-85.6318308,41.9401184]},"n2189112759":{"id":"n2189112759","loc":[-85.6321154,41.9405433]},"n2189112760":{"id":"n2189112760","loc":[-85.6310307,41.941683]},"n2189112761":{"id":"n2189112761","loc":[-85.6309808,41.9416078]},"n2189112762":{"id":"n2189112762","loc":[-85.6312094,41.9415156]},"n2189112763":{"id":"n2189112763","loc":[-85.6312636,41.9415865]},"n2189112764":{"id":"n2189112764","loc":[-85.6309384,41.94155]},"n2189112765":{"id":"n2189112765","loc":[-85.631156,41.9414619]},"n2189112766":{"id":"n2189112766","loc":[-85.6311968,41.94152]},"n2189112767":{"id":"n2189112767","loc":[-85.6308946,41.9414851]},"n2189112768":{"id":"n2189112768","loc":[-85.6308237,41.9413888]},"n2189112769":{"id":"n2189112769","loc":[-85.6309858,41.9413228]},"n2189112770":{"id":"n2189112770","loc":[-85.6310567,41.9414192]},"n2189112771":{"id":"n2189112771","loc":[-85.6307774,41.9413276]},"n2189112772":{"id":"n2189112772","loc":[-85.6309068,41.9412735]},"n2189112773":{"id":"n2189112773","loc":[-85.6309531,41.9413347]},"n2189112774":{"id":"n2189112774","loc":[-85.6307975,41.9412466]},"n2189112775":{"id":"n2189112775","loc":[-85.6307006,41.9411699]},"n2189112776":{"id":"n2189112776","loc":[-85.6308289,41.941113]},"n2189112777":{"id":"n2189112777","loc":[-85.6308997,41.9412012]},"n2189112778":{"id":"n2189112778","loc":[-85.630765,41.9412062]},"n2189112779":{"id":"n2189112779","loc":[-85.630739,41.9412177]},"n2189112780":{"id":"n2189112780","loc":[-85.6305822,41.9410391]},"n2189112781":{"id":"n2189112781","loc":[-85.6304117,41.9408177]},"n2189112782":{"id":"n2189112782","loc":[-85.6305086,41.9407769]},"n2189112783":{"id":"n2189112783","loc":[-85.6306779,41.9410044]},"n2189112784":{"id":"n2189112784","loc":[-85.6307734,41.9421663]},"n2189112785":{"id":"n2189112785","loc":[-85.630708,41.9420741]},"n2189112786":{"id":"n2189112786","loc":[-85.630863,41.9420133]},"n2189112787":{"id":"n2189112787","loc":[-85.6309285,41.9421055]},"n2189112788":{"id":"n2189112788","loc":[-85.6307014,41.9420263]},"n2189112789":{"id":"n2189112789","loc":[-85.6306648,41.941971]},"n2189112790":{"id":"n2189112790","loc":[-85.6307927,41.9419178]},"n2189112791":{"id":"n2189112791","loc":[-85.6308366,41.9419696]},"n2189112792":{"id":"n2189112792","loc":[-85.6307574,41.9418708]},"n2189112793":{"id":"n2189112793","loc":[-85.6306288,41.9419231]},"n2189112794":{"id":"n2189112794","loc":[-85.6306943,41.9417835]},"n2189112795":{"id":"n2189112795","loc":[-85.6305344,41.9418474]},"n2189112796":{"id":"n2189112796","loc":[-85.6305981,41.9419355]},"n2189123410":{"id":"n2189123410","loc":[-85.6315476,41.9393801]},"n2189123412":{"id":"n2189123412","loc":[-85.6315247,41.9399188]},"n2189123415":{"id":"n2189123415","loc":[-85.6316484,41.9400433]},"n185945138":{"id":"n185945138","loc":[-85.627073,41.93319]},"n185945142":{"id":"n185945142","loc":[-85.6296891,41.9331674]},"n185945401":{"id":"n185945401","loc":[-85.6269,41.930199]},"n185945405":{"id":"n185945405","loc":[-85.6296598,41.9301676]},"n185956891":{"id":"n185956891","loc":[-85.6251617,41.9255049]},"n185959979":{"id":"n185959979","loc":[-85.626333,41.928347]},"n185959983":{"id":"n185959983","loc":[-85.6296419,41.9283288]},"n185961192":{"id":"n185961192","loc":[-85.627053,41.9352031]},"n185961200":{"id":"n185961200","loc":[-85.6297088,41.9351902]},"n185963655":{"id":"n185963655","loc":[-85.6296112,41.9273948]},"n185963665":{"id":"n185963665","loc":[-85.626047,41.92737]},"n185963688":{"id":"n185963688","loc":[-85.6296503,41.9292199]},"n185963689":{"id":"n185963689","loc":[-85.6296694,41.931157]},"n185963690":{"id":"n185963690","loc":[-85.6296791,41.9321485]},"n185963691":{"id":"n185963691","loc":[-85.6296991,41.9341973]},"n185967638":{"id":"n185967638","loc":[-85.627089,41.9361884]},"n185972917":{"id":"n185972917","loc":[-85.6293759,41.9388605]},"n185972919":{"id":"n185972919","loc":[-85.6290337,41.9380234]},"n185972921":{"id":"n185972921","loc":[-85.628424,41.936212]},"n185972923":{"id":"n185972923","loc":[-85.628367,41.936029]},"n185974511":{"id":"n185974511","loc":[-85.627064,41.932169]},"n185977728":{"id":"n185977728","loc":[-85.625605,41.925842]},"n185977729":{"id":"n185977729","loc":[-85.625685,41.926163]},"n185977731":{"id":"n185977731","loc":[-85.6257845,41.9264872]},"n185977733":{"id":"n185977733","loc":[-85.62663,41.929251]},"n185977734":{"id":"n185977734","loc":[-85.627008,41.930642]},"n185977736":{"id":"n185977736","loc":[-85.627029,41.930775]},"n185977738":{"id":"n185977738","loc":[-85.627041,41.930946]},"n185977739":{"id":"n185977739","loc":[-85.6270379,41.9311746]},"n185977742":{"id":"n185977742","loc":[-85.627055,41.934206]},"n185977744":{"id":"n185977744","loc":[-85.627084,41.936804]},"n185977746":{"id":"n185977746","loc":[-85.627104,41.936914]},"n185977748":{"id":"n185977748","loc":[-85.627156,41.937026]},"n185977750":{"id":"n185977750","loc":[-85.6272406,41.9371672]},"n185977752":{"id":"n185977752","loc":[-85.627317,41.93723]},"n185977753":{"id":"n185977753","loc":[-85.627422,41.937312]},"n185977755":{"id":"n185977755","loc":[-85.627754,41.937504]},"n185977757":{"id":"n185977757","loc":[-85.627883,41.937623]},"n185977761":{"id":"n185977761","loc":[-85.627984,41.93773]},"n1475283996":{"id":"n1475283996","loc":[-85.6270514,41.9317122],"tags":{"railway":"level_crossing"}},"n1475284004":{"id":"n1475284004","loc":[-85.6278177,41.9342117],"tags":{"railway":"level_crossing"}},"n1475284014":{"id":"n1475284014","loc":[-85.6251877,41.9255913],"tags":{"railway":"level_crossing"}},"n1475284017":{"id":"n1475284017","loc":[-85.6274992,41.9331816],"tags":{"railway":"level_crossing"}},"n1475284021":{"id":"n1475284021","loc":[-85.6297108,41.9353939],"tags":{"railway":"level_crossing"}},"n1475284027":{"id":"n1475284027","loc":[-85.62811,41.935198],"tags":{"railway":"level_crossing"}},"n1475284035":{"id":"n1475284035","loc":[-85.626888,41.9311757],"tags":{"railway":"level_crossing"}},"n1475293245":{"id":"n1475293245","loc":[-85.6286047,41.9367881]},"n1875654302":{"id":"n1875654302","loc":[-85.6296367,41.927491]},"n2189099388":{"id":"n2189099388","loc":[-85.6312007,41.9389988]},"n2189099389":{"id":"n2189099389","loc":[-85.6311003,41.9389992]},"n2189099390":{"id":"n2189099390","loc":[-85.6310988,41.9387847]},"n2189099391":{"id":"n2189099391","loc":[-85.6312165,41.9387843]},"n2189099392":{"id":"n2189099392","loc":[-85.6312152,41.9385857]},"n2189099393":{"id":"n2189099393","loc":[-85.6310877,41.9385862]},"n2189099394":{"id":"n2189099394","loc":[-85.6310858,41.9383161]},"n2189099395":{"id":"n2189099395","loc":[-85.6302002,41.9383196]},"n2189099396":{"id":"n2189099396","loc":[-85.6302011,41.9384472]},"n2189099397":{"id":"n2189099397","loc":[-85.6301018,41.9384476]},"n2189099398":{"id":"n2189099398","loc":[-85.6301025,41.9385419]},"n2189099399":{"id":"n2189099399","loc":[-85.6299275,41.9385427]},"n2189099400":{"id":"n2189099400","loc":[-85.62993,41.9388653]},"n2189099401":{"id":"n2189099401","loc":[-85.630107,41.9388645]},"n2189099402":{"id":"n2189099402","loc":[-85.6301079,41.9389908]},"n2189099403":{"id":"n2189099403","loc":[-85.6301951,41.9389904]},"n2189123382":{"id":"n2189123382","loc":[-85.6336279,41.9354365]},"n2189123384":{"id":"n2189123384","loc":[-85.6328492,41.9355177]},"n2189123387":{"id":"n2189123387","loc":[-85.6323762,41.9357396]},"n2189123388":{"id":"n2189123388","loc":[-85.6315174,41.9358966]},"n2189123389":{"id":"n2189123389","loc":[-85.6304331,41.936124]},"n2189123390":{"id":"n2189123390","loc":[-85.6302075,41.9364271]},"n2189123391":{"id":"n2189123391","loc":[-85.6303458,41.9367953]},"n2189123392":{"id":"n2189123392","loc":[-85.6299601,41.9369739]},"n2189123393":{"id":"n2189123393","loc":[-85.6299164,41.9374882]},"n2189123394":{"id":"n2189123394","loc":[-85.6299455,41.9378022]},"n2189123395":{"id":"n2189123395","loc":[-85.6299771,41.9379053]},"n2189123396":{"id":"n2189123396","loc":[-85.6301597,41.9379091]},"n2189123397":{"id":"n2189123397","loc":[-85.6308042,41.9377913]},"n2189123398":{"id":"n2189123398","loc":[-85.6316885,41.9378082]},"n2189123399":{"id":"n2189123399","loc":[-85.6316848,41.9380079]},"n2189123400":{"id":"n2189123400","loc":[-85.6318449,41.9381161]},"n2189123401":{"id":"n2189123401","loc":[-85.6320705,41.9381811]},"n2189123402":{"id":"n2189123402","loc":[-85.6321433,41.9383706]},"n2189123404":{"id":"n2189123404","loc":[-85.632056,41.9384355]},"n2189123406":{"id":"n2189123406","loc":[-85.6317867,41.9384572]},"n2189123409":{"id":"n2189123409","loc":[-85.6316572,41.9387281]},"n2189123417":{"id":"n2189123417","loc":[-85.6315946,41.93775]},"n2189123419":{"id":"n2189123419","loc":[-85.6302641,41.9378393]},"w208640158":{"id":"w208640158","tags":{"area":"yes","natural":"wetland"},"nodes":["n2189123379","n2189123382","n2189123384","n2189123387","n2189123388","n2189123389","n2189123390","n2189123391","n2189123392","n2189123393","n2189123394","n2189123395","n2189123396","n2189123419","n2189123397","n2189123417","n2189123398","n2189123399","n2189123400","n2189123401","n2189123402","n2189123404","n2189123406","n2189123409","n2189123410","n2189123412","n2189123415","n1819805722","n1819805861","n1819805887","n1819805760","n1819805641","n1819805632","n2189123379"]},"w134150787":{"id":"w134150787","tags":{"name":"Conrail Railroad","railway":"rail"},"nodes":["n185972905","n185972907","n1475293223","n185972911","n1475293241","n1475293246","n185972915","n185972917","n185972919","n1475293245","n185972921","n185972923","n1475284027","n1475284004","n1475284017","n1475283996","n1475284035","n1475284014","n185956891"]},"w208639443":{"id":"w208639443","tags":{"area":"yes","building":"yes"},"nodes":["n2189112720","n2189112721","n2189112722","n2189112723","n2189112720"]},"w17966462":{"id":"w17966462","tags":{"highway":"secondary","name":"South Main Street","old_ref":"US 131","ref":"M 86"},"nodes":["n185977728","n185977729","n185977731","n185963665","n185959979","n185977733","n185945401","n185977734","n185977736","n185977738","n185977739","n1475283996","n185974511","n185945138","n185977742","n185961192","n185967638","n185977744","n185977746","n185977748","n185977750","n185977752","n185977753","n185977754","n185977755","n185977757","n185977761","n185958030","n1475293263","n185963698","n185952745","n185947850","n185977762"]},"w203985741":{"id":"w203985741","tags":{"area":"yes","leisure":"park","name":"Conservation Park"},"nodes":["n2139982404","n2139982405","n2139982399","n2139982400","n1819805770","n2139982402","n2139982403","n2139982401","n1819805780","n1819805834","n2139982406","n2139982404"]},"w17963676":{"id":"w17963676","tags":{"highway":"service"},"nodes":["n1475293258","n2139982428","n2139982427","n2139982426","n2139982425","n2139982424","n2139982423","n2139982422","n2139982430","n2139982421","n2139982420","n2139982429","n1475293231","n1475293258","n1475293251","n1475293223","n185952745"]},"w203985745":{"id":"w203985745","tags":{"highway":"footway"},"nodes":["n2139982430","n2139982431","n2139982432","n2139982433","n2139982434","n2139982435","n2139982436","n2139982437","n2139982438","n2139982439","n2139982440","n2139982441","n1475293231"]},"w208639451":{"id":"w208639451","tags":{"area":"yes","building":"yes"},"nodes":["n2189112754","n2189112755","n2189112756","n2189112757","n2189112758","n2189112759","n2189112754"]},"w208639452":{"id":"w208639452","tags":{"area":"yes","building":"yes"},"nodes":["n2189112760","n2189112761","n2189112766","n2189112762","n2189112763","n2189112760"]},"w206805244":{"id":"w206805244","tags":{"area":"yes","building":"yes"},"nodes":["n2168544766","n2168544767","n2168544768","n2168544769","n2168544770","n2168544771","n2168544772","n2168544773","n2168544774","n2168544775","n2168544776","n2168544777","n2168544778","n2168544779","n2168544766"]},"w208639444":{"id":"w208639444","tags":{"area":"yes","building":"yes"},"nodes":["n2189112724","n2189112725","n2189112726","n2189112727","n2189112724"]},"w208639450":{"id":"w208639450","tags":{"area":"yes","building":"yes"},"nodes":["n2189112750","n2189112751","n2189112752","n2189112753","n2189112750"]},"w208639448":{"id":"w208639448","tags":{"area":"yes","building":"yes"},"nodes":["n2189112740","n2189112741","n2189112742","n2189112743","n2189112740"]},"w208637859":{"id":"w208637859","tags":{"area":"yes","building":"yes"},"nodes":["n2189099387","n2189099388","n2189099389","n2189099390","n2189099391","n2189099392","n2189099393","n2189099394","n2189099395","n2189099396","n2189099397","n2189099398","n2189099399","n2189099400","n2189099401","n2189099402","n2189099403","n2189099404","n2189099405","n2189099406","n2189099407","n2189099408","n2189099409","n2189099410","n2189099387"]},"w208639453":{"id":"w208639453","tags":{"area":"yes","building":"yes"},"nodes":["n2189112764","n2189112765","n2189112766","n2189112761","n2189112764"]},"w208639456":{"id":"w208639456","tags":{"area":"yes","building":"yes"},"nodes":["n2189112774","n2189112778","n2189112779","n2189112775","n2189112776","n2189112777","n2189112774"]},"w208639445":{"id":"w208639445","tags":{"area":"yes","building":"yes"},"nodes":["n2189112728","n2189112729","n2189112730","n2189112731","n2189112728"]},"w17967776":{"id":"w17967776","tags":{"highway":"residential","name":"5th St"},"nodes":["n185958032","n185988963"]},"w208639461":{"id":"w208639461","tags":{"area":"yes","building":"yes"},"nodes":["n2189112792","n2189112794","n2189112795","n2189112796","n2189112793","n2189112792"]},"w206805241":{"id":"w206805241","tags":{"area":"yes","building":"yes"},"nodes":["n2168544754","n2168544755","n2168544756","n2168544757","n2168544754"]},"w208639449":{"id":"w208639449","tags":{"area":"yes","building":"yes"},"nodes":["n2189112744","n2189112745","n2189112746","n2189112747","n2189112748","n2189112749","n2189112744"]},"w208639455":{"id":"w208639455","tags":{"area":"yes","building":"yes"},"nodes":["n2189112771","n2189112772","n2189112773","n2189112768","n2189112771"]},"w208639457":{"id":"w208639457","tags":{"area":"yes","building":"yes"},"nodes":["n2189112780","n2189112781","n2189112782","n2189112783","n2189112780"]},"w208639446":{"id":"w208639446","tags":{"area":"yes","building":"yes"},"nodes":["n2189112732","n2189112733","n2189112734","n2189112735","n2189112732"]},"w208639454":{"id":"w208639454","tags":{"area":"yes","building":"yes"},"nodes":["n2189112767","n2189112768","n2189112773","n2189112769","n2189112770","n2189112767"]},"w203985743":{"id":"w203985743","tags":{"amenity":"parking","area":"yes"},"nodes":["n2139982411","n2139982412","n2139982413","n2139982414","n2139982415","n2139982416","n2139982417","n2139982419","n2139982418","n2139982411"]},"w17965023":{"id":"w17965023","tags":{"highway":"residential","name":"4th St"},"nodes":["n185963655","n1875654302","n185959983","n185963688","n185945405","n185963689","n185963690","n185945142","n185963691","n185961200","n1475284021","n1475293246","n1875654132","n1475293263"]},"w206805242":{"id":"w206805242","tags":{"area":"yes","building":"yes"},"nodes":["n2168544758","n2168544759","n2168544760","n2168544761","n2168544758"]},"w208639460":{"id":"w208639460","tags":{"area":"yes","building":"yes"},"nodes":["n2189112792","n2189112793","n2189112789","n2189112790","n2189112792"]},"w208639447":{"id":"w208639447","tags":{"area":"yes","building":"yes"},"nodes":["n2189112736","n2189112737","n2189112738","n2189112739","n2189112736"]},"w208639458":{"id":"w208639458","tags":{"area":"yes","building":"yes"},"nodes":["n2189112784","n2189112785","n2189112786","n2189112787","n2189112784"]},"w203985744":{"id":"w203985744","tags":{"highway":"service"},"nodes":["n2139982425","n2139982400"]},"w208639459":{"id":"w208639459","tags":{"area":"yes","building":"yes"},"nodes":["n2189112788","n2189112789","n2189112790","n2189112791","n2189112788"]},"w203985742":{"id":"w203985742","tags":{"amenity":"shelter","area":"yes","shelter_type":"picnic_shelter"},"nodes":["n2139982407","n2139982408","n2139982409","n2139982410","n2139982407"]},"w206805243":{"id":"w206805243","tags":{"area":"yes","building":"yes"},"nodes":["n2168544762","n2168544763","n2168544764","n2168544765","n2168544762"]},"n185959081":{"id":"n185959081","loc":[-85.628469,41.948674]},"n185967427":{"id":"n185967427","loc":[-85.632054,41.951174]},"n185967424":{"id":"n185967424","loc":[-85.6320391,41.9499109]},"n185968101":{"id":"n185968101","loc":[-85.6308395,41.9511969]},"n185960792":{"id":"n185960792","loc":[-85.632074,41.953707]},"n185961389":{"id":"n185961389","loc":[-85.630935,41.959037]},"n185961391":{"id":"n185961391","loc":[-85.632169,41.959025]},"n185965395":{"id":"n185965395","loc":[-85.63216,41.959859]},"n185966953":{"id":"n185966953","loc":[-85.630894,41.957428]},"n185966955":{"id":"n185966955","loc":[-85.632122,41.957427]},"n185967430":{"id":"n185967430","loc":[-85.632077,41.952453]},"n185967432":{"id":"n185967432","loc":[-85.632095,41.954685]},"n185967434":{"id":"n185967434","loc":[-85.632121,41.955914]},"n185967436":{"id":"n185967436","loc":[-85.632128,41.9583]},"n185967438":{"id":"n185967438","loc":[-85.632187,41.960681]},"n185967440":{"id":"n185967440","loc":[-85.632182,41.961493]},"n185968102":{"id":"n185968102","loc":[-85.630855,41.952452]},"n185968104":{"id":"n185968104","loc":[-85.630887,41.953714]},"n185968106":{"id":"n185968106","loc":[-85.630883,41.954692]},"n185968108":{"id":"n185968108","loc":[-85.630904,41.955913]},"n185968110":{"id":"n185968110","loc":[-85.630904,41.958058]},"n185968112":{"id":"n185968112","loc":[-85.630952,41.960667]},"n185968114":{"id":"n185968114","loc":[-85.630972,41.961495]},"n185968116":{"id":"n185968116","loc":[-85.630962,41.961967]},"n185978969":{"id":"n185978969","loc":[-85.633214,41.948618]},"n185985812":{"id":"n185985812","loc":[-85.633274,41.951159]},"n185986155":{"id":"n185986155","loc":[-85.633258,41.949893]},"n2208608826":{"id":"n2208608826","loc":[-85.6339222,41.9486225]},"w17964531":{"id":"w17964531","tags":{"highway":"residential","name":"Willow Dr"},"nodes":["n185959079","n185959081"]},"w17967386":{"id":"w17967386","tags":{"highway":"residential","name":"East Armitage Street"},"nodes":["n185982195","n185968101","n185967427","n185985812","n185974583"]},"w17965502":{"id":"w17965502","tags":{"highway":"residential","name":"Elm Street"},"nodes":["n185968100","n185968101","n185968102","n185968104","n185968106","n185968108","n185966953","n185968110","n185961389","n185968112","n185968114","n185968116"]},"w17967844":{"id":"w17967844","tags":{"highway":"residential","name":"East Bennett Street"},"nodes":["n185982193","n185967424","n185986155","n185978390"]},"w17966581":{"id":"w17966581","tags":{"highway":"residential","name":"E Kelsey St"},"nodes":["n185978967","n185978969","n2208608826","n185971578"]},"w17965402":{"id":"w17965402","tags":{"highway":"residential","name":"Walnut Street"},"nodes":["n185967422","n185967424","n185967427","n185967430","n185960792","n185967432","n185967434","n185966955","n185967436","n185961391","n185965395","n185967438","n185967440"]},"n2199093506":{"id":"n2199093506","loc":[-85.6251879,41.9478322]},"n2199093505":{"id":"n2199093505","loc":[-85.6252076,41.9477749]},"n2199093504":{"id":"n2199093504","loc":[-85.6252289,41.9477602]},"n2199093503":{"id":"n2199093503","loc":[-85.625201,41.9477492]},"n2199093502":{"id":"n2199093502","loc":[-85.6251682,41.9477066]},"n2199093501":{"id":"n2199093501","loc":[-85.6251715,41.947609]},"n2199093500":{"id":"n2199093500","loc":[-85.6252125,41.9475639]},"n2199093499":{"id":"n2199093499","loc":[-85.6252896,41.9475602]},"n2199093498":{"id":"n2199093498","loc":[-85.6253027,41.9475334]},"n2199093497":{"id":"n2199093497","loc":[-85.6253437,41.9474822]},"n2199093496":{"id":"n2199093496","loc":[-85.6254421,41.9474675]},"n2199093495":{"id":"n2199093495","loc":[-85.6256503,41.9474944]},"n2199093494":{"id":"n2199093494","loc":[-85.6257257,41.9476127]},"n2199093493":{"id":"n2199093493","loc":[-85.6257028,41.9477285]},"n2199093492":{"id":"n2199093492","loc":[-85.6255339,41.9478102]},"n2199093491":{"id":"n2199093491","loc":[-85.6253912,41.9478224]},"n2199093490":{"id":"n2199093490","loc":[-85.6253043,41.947859]},"n2199093489":{"id":"n2199093489","loc":[-85.6252027,41.9478846]},"n2199093458":{"id":"n2199093458","loc":[-85.6246876,41.9486617]},"n2199093457":{"id":"n2199093457","loc":[-85.6243127,41.9486583]},"n2199093456":{"id":"n2199093456","loc":[-85.624306,41.9490569]},"n2199093455":{"id":"n2199093455","loc":[-85.624681,41.9490603]},"n2199093514":{"id":"n2199093514","loc":[-85.6236228,41.9496059]},"n2199093513":{"id":"n2199093513","loc":[-85.6236231,41.9496997]},"n2199093512":{"id":"n2199093512","loc":[-85.623357,41.9497002]},"n2199093511":{"id":"n2199093511","loc":[-85.6233567,41.9496136]},"n2199093508":{"id":"n2199093508","loc":[-85.6239735,41.9494287]},"n2199093507":{"id":"n2199093507","loc":[-85.6239741,41.9496052]},"n2199093488":{"id":"n2199093488","loc":[-85.624497,41.9512286]},"n2199093487":{"id":"n2199093487","loc":[-85.6244966,41.9511259]},"n2199093486":{"id":"n2199093486","loc":[-85.6243151,41.9511263]},"n2199093485":{"id":"n2199093485","loc":[-85.6243154,41.951229]},"n2199093484":{"id":"n2199093484","loc":[-85.6241205,41.9508665]},"n2199093483":{"id":"n2199093483","loc":[-85.624115,41.9505249]},"n2199093482":{"id":"n2199093482","loc":[-85.6243149,41.9505231]},"n2199093481":{"id":"n2199093481","loc":[-85.6243203,41.9508648]},"n2199093480":{"id":"n2199093480","loc":[-85.624393,41.9508668]},"n2199093479":{"id":"n2199093479","loc":[-85.6243904,41.9505956]},"n2199093478":{"id":"n2199093478","loc":[-85.6246727,41.950594]},"n2199093477":{"id":"n2199093477","loc":[-85.624675,41.9508203]},"n2199093476":{"id":"n2199093476","loc":[-85.6245097,41.9508212]},"n2199093475":{"id":"n2199093475","loc":[-85.6245101,41.9508662]},"n2199093474":{"id":"n2199093474","loc":[-85.6241008,41.9493459]},"n2199093473":{"id":"n2199093473","loc":[-85.6242442,41.9493459]},"n2199093472":{"id":"n2199093472","loc":[-85.6242442,41.9493681]},"n2199093471":{"id":"n2199093471","loc":[-85.6243397,41.9493681]},"n2199093470":{"id":"n2199093470","loc":[-85.6243417,41.9493511]},"n2199093469":{"id":"n2199093469","loc":[-85.6247251,41.9493485]},"n2199093468":{"id":"n2199093468","loc":[-85.6247548,41.9504949]},"n2199093467":{"id":"n2199093467","loc":[-85.6241214,41.9505017]},"n2199093466":{"id":"n2199093466","loc":[-85.6254398,41.950174]},"n2199093465":{"id":"n2199093465","loc":[-85.6254412,41.9499872]},"n2199093464":{"id":"n2199093464","loc":[-85.6255363,41.9499876]},"n2199093463":{"id":"n2199093463","loc":[-85.6255374,41.9498439]},"n2199093462":{"id":"n2199093462","loc":[-85.6255638,41.949844]},"n2199093461":{"id":"n2199093461","loc":[-85.6255652,41.9496672]},"n2199093460":{"id":"n2199093460","loc":[-85.6251823,41.9496656]},"n2199093459":{"id":"n2199093459","loc":[-85.6251785,41.9501729]},"n2199093510":{"id":"n2199093510","loc":[-85.6229922,41.9496143]},"n2199093509":{"id":"n2199093509","loc":[-85.6229915,41.9494306]},"n185948903":{"id":"n185948903","loc":[-85.616514,41.947449]},"n185955120":{"id":"n185955120","loc":[-85.620103,41.951]},"n185955143":{"id":"n185955143","loc":[-85.619784,41.94746]},"n185960124":{"id":"n185960124","loc":[-85.615238,41.947468]},"n185961362":{"id":"n185961362","loc":[-85.617437,41.947451]},"n185961364":{"id":"n185961364","loc":[-85.61861,41.947456]},"n185961367":{"id":"n185961367","loc":[-85.620088,41.947458]},"n185965105":{"id":"n185965105","loc":[-85.620087,41.94924]},"n185970220":{"id":"n185970220","loc":[-85.62156,41.948333]},"n185974697":{"id":"n185974697","loc":[-85.6201059,41.950132]},"n2138420778":{"id":"n2138420778","loc":[-85.616948,41.9474499]},"w17967535":{"id":"w17967535","tags":{"highway":"residential","name":"10th Ave"},"nodes":["n185955120","n185986812","n185983141"]},"w209716130":{"id":"w209716130","tags":{"area":"yes","building":"yes"},"nodes":["n2199093485","n2199093486","n2199093487","n2199093488","n2199093485"]},"w17964788":{"id":"w17964788","tags":{"highway":"residential","name":"6th Ave"},"nodes":["n185960124","n185948903","n2138420778","n185961362","n185961364","n185955143","n185961367","n185961369","n185961371"]},"w17965159":{"id":"w17965159","tags":{"highway":"residential","name":"8th Ave"},"nodes":["n185965105","n185965108","n185965110"]},"w209716125":{"id":"w209716125","tags":{"area":"yes","building":"yes"},"nodes":["n2199093459","n2199093460","n2199093461","n2199093462","n2199093463","n2199093464","n2199093465","n2199093466","n2199093459"]},"w17965699":{"id":"w17965699","tags":{"highway":"residential","name":"7th Ave"},"nodes":["n185970220","n185970222","n185970224"]},"w209716132":{"id":"w209716132","tags":{"area":"yes","building":"yes"},"nodes":["n2199093507","n2199093508","n2199093509","n2199093510","n2199093511","n2199093512","n2199093513","n2199093514","n2199093507"]},"w17966129":{"id":"w17966129","tags":{"highway":"residential","name":"9th Ave"},"nodes":["n185974697","n185974699"]},"w209716127":{"id":"w209716127","tags":{"area":"yes","building":"yes"},"nodes":["n2199093475","n2199093476","n2199093477","n2199093478","n2199093479","n2199093480","n2199093475"]},"w209716131":{"id":"w209716131","tags":{"area":"yes","natural":"water","water":"pond"},"nodes":["n2199093489","n2199093490","n2199093491","n2199093492","n2199093493","n2199093494","n2199093495","n2199093496","n2199093497","n2199093498","n2199093499","n2199093500","n2199093501","n2199093502","n2199093503","n2199093504","n2199093505","n2199093506","n2199093489"]},"w209716126":{"id":"w209716126","tags":{"area":"yes","building":"yes"},"nodes":["n2199093467","n2199093468","n2199093469","n2199093470","n2199093471","n2199093472","n2199093473","n2199093474","n2199093467"]},"w209716124":{"id":"w209716124","tags":{"area":"yes","building":"yes"},"nodes":["n2199093455","n2199093456","n2199093457","n2199093458","n2199093455"]},"w209716128":{"id":"w209716128","tags":{"area":"yes","building":"yes"},"nodes":["n2199093481","n2199093482","n2199093483","n2199093484","n2199093481"]},"n185949872":{"id":"n185949872","loc":[-85.643009,41.949264]},"n185949875":{"id":"n185949875","loc":[-85.642598,41.94929]},"n185949877":{"id":"n185949877","loc":[-85.642127,41.949382]},"n185949881":{"id":"n185949881","loc":[-85.64169,41.949936]},"n185988165":{"id":"n185988165","loc":[-85.642167,41.947657]},"n185988167":{"id":"n185988167","loc":[-85.642347,41.947662]},"n185988169":{"id":"n185988169","loc":[-85.642621,41.947659]},"n185965019":{"id":"n185965019","loc":[-85.6385084,41.951127]},"n1475293248":{"id":"n1475293248","loc":[-85.6386095,41.9512214]},"n185962639":{"id":"n185962639","loc":[-85.649669,41.949161]},"n185962810":{"id":"n185962810","loc":[-85.649907,41.949157]},"n185964355":{"id":"n185964355","loc":[-85.637412,41.9511359]},"n185965021":{"id":"n185965021","loc":[-85.638661,41.952386]},"n185965023":{"id":"n185965023","loc":[-85.638654,41.953665]},"n185965025":{"id":"n185965025","loc":[-85.638694,41.954649]},"n185965027":{"id":"n185965027","loc":[-85.638724,41.955913]},"n185971415":{"id":"n185971415","loc":[-85.644466,41.949246]},"n185971417":{"id":"n185971417","loc":[-85.647021,41.949193]},"n185971420":{"id":"n185971420","loc":[-85.648476,41.949169]},"n185979975":{"id":"n185979975","loc":[-85.644429,41.947633]},"n185988171":{"id":"n185988171","loc":[-85.645377,41.947622]},"w17963211":{"id":"w17963211","tags":{"highway":"residential"},"nodes":["n185949870","n185949872","n185949875","n185949877","n185949881"]},"w17965839":{"id":"w17965839","tags":{"highway":"residential","name":"Arnold St"},"nodes":["n185949870","n185971415","n185971417","n185971420","n185962639","n185962810"]},"w17967618":{"id":"w17967618","tags":{"highway":"residential","name":"Pierson St"},"nodes":["n185967777","n185988165","n185988167","n185988169","n185985824","n185979975","n185988171"]},"w17965149":{"id":"w17965149","tags":{"highway":"residential","name":"Oak St"},"nodes":["n185965019","n1475293248","n185965021","n185965023","n185965025","n185965027"]},"w17966118":{"id":"w17966118","tags":{"highway":"residential","name":"West Armitage Street"},"nodes":["n185974583","n185974585","n185964355","n185965019"]},"n2208608800":{"id":"n2208608800","loc":[-85.6354294,41.9486201]},"n2199109806":{"id":"n2199109806","loc":[-85.6350474,41.9477884]},"n2199109804":{"id":"n2199109804","loc":[-85.6350476,41.9477962]},"n2199109802":{"id":"n2199109802","loc":[-85.635002,41.9477969]},"n2199109799":{"id":"n2199109799","loc":[-85.6350018,41.9477883]},"n2199109797":{"id":"n2199109797","loc":[-85.6349141,41.9477897]},"n2199109795":{"id":"n2199109795","loc":[-85.6349131,41.9477535]},"n2199109793":{"id":"n2199109793","loc":[-85.6349395,41.9477531]},"n2199109791":{"id":"n2199109791","loc":[-85.6349382,41.9477077]},"n2199109789":{"id":"n2199109789","loc":[-85.6351236,41.9477049]},"n2199109787":{"id":"n2199109787","loc":[-85.6351259,41.9477872]},"n2199109785":{"id":"n2199109785","loc":[-85.634972,41.9475992]},"n2199109783":{"id":"n2199109783","loc":[-85.6349206,41.9475997]},"n2199109770":{"id":"n2199109770","loc":[-85.6348499,41.9475461]},"n2199109768":{"id":"n2199109768","loc":[-85.6348499,41.9475084]},"n2199109765":{"id":"n2199109765","loc":[-85.6349241,41.9474569]},"n2199109763":{"id":"n2199109763","loc":[-85.634967,41.9474564]},"n2199109762":{"id":"n2199109762","loc":[-85.6350405,41.9475121]},"n2199109761":{"id":"n2199109761","loc":[-85.6350405,41.9475419]},"n2199109753":{"id":"n2199109753","loc":[-85.6342443,41.9478391]},"n2199109751":{"id":"n2199109751","loc":[-85.6342427,41.9477927]},"n2199109745":{"id":"n2199109745","loc":[-85.6342439,41.9476859]},"n2199109743":{"id":"n2199109743","loc":[-85.6342429,41.9476575]},"n2199109741":{"id":"n2199109741","loc":[-85.6344615,41.9476533]},"n2199109739":{"id":"n2199109739","loc":[-85.6344678,41.9478348]},"n2199109737":{"id":"n2199109737","loc":[-85.634416,41.9480059]},"n2199109735":{"id":"n2199109735","loc":[-85.6344145,41.9478983]},"n2199109733":{"id":"n2199109733","loc":[-85.6342749,41.9478993]},"n2199109731":{"id":"n2199109731","loc":[-85.6342753,41.9479272]},"n2199109729":{"id":"n2199109729","loc":[-85.6342498,41.9479274]},"n2199109727":{"id":"n2199109727","loc":[-85.6342505,41.9479762]},"n2199109725":{"id":"n2199109725","loc":[-85.6342743,41.947976]},"n2199109723":{"id":"n2199109723","loc":[-85.6342747,41.948007]},"n2199109721":{"id":"n2199109721","loc":[-85.6343415,41.9476355]},"n2199109719":{"id":"n2199109719","loc":[-85.6343391,41.9474973]},"n2199109717":{"id":"n2199109717","loc":[-85.6343133,41.9474798]},"n2199109715":{"id":"n2199109715","loc":[-85.6342874,41.9474737]},"n2199109709":{"id":"n2199109709","loc":[-85.6349804,41.94815]},"n2199109707":{"id":"n2199109707","loc":[-85.6348915,41.9481505]},"n2199109705":{"id":"n2199109705","loc":[-85.6348917,41.9481692]},"n2199109702":{"id":"n2199109702","loc":[-85.6348522,41.9481694]},"n2199109700":{"id":"n2199109700","loc":[-85.6348532,41.9482679]},"n2199109698":{"id":"n2199109698","loc":[-85.6348315,41.948268]},"n2199109696":{"id":"n2199109696","loc":[-85.6348318,41.9482955]},"n2199109694":{"id":"n2199109694","loc":[-85.6349653,41.9482946]},"n2199109692":{"id":"n2199109692","loc":[-85.6349656,41.9483211]},"n2199109690":{"id":"n2199109690","loc":[-85.634999,41.9483209]},"n2199109688":{"id":"n2199109688","loc":[-85.6349987,41.9482947]},"n2199109686":{"id":"n2199109686","loc":[-85.6351753,41.9482935]},"n2199109684":{"id":"n2199109684","loc":[-85.6351749,41.9482617]},"n2199109682":{"id":"n2199109682","loc":[-85.6351588,41.9482618]},"n2199109680":{"id":"n2199109680","loc":[-85.6351575,41.9481518]},"n2199109678":{"id":"n2199109678","loc":[-85.6350671,41.9481524]},"n2199109676":{"id":"n2199109676","loc":[-85.6350649,41.9479659]},"n2199109674":{"id":"n2199109674","loc":[-85.6349785,41.9479665]},"n2199109671":{"id":"n2199109671","loc":[-85.6343069,41.9483263]},"n2199109669":{"id":"n2199109669","loc":[-85.6343052,41.9482981]},"n2199109658":{"id":"n2199109658","loc":[-85.6343314,41.9480549]},"n2199109656":{"id":"n2199109656","loc":[-85.6343305,41.9480461]},"n2199109654":{"id":"n2199109654","loc":[-85.634435,41.9480468]},"n2199109652":{"id":"n2199109652","loc":[-85.6344342,41.9483746]},"n2199109650":{"id":"n2199109650","loc":[-85.6344629,41.9483727]},"n2199109648":{"id":"n2199109648","loc":[-85.6344637,41.9484561]},"n2199109645":{"id":"n2199109645","loc":[-85.63443,41.9484567]},"n2199109642":{"id":"n2199109642","loc":[-85.6344317,41.948505]},"n185964352":{"id":"n185964352","loc":[-85.6373958,41.9489943]},"n185964351":{"id":"n185964351","loc":[-85.637113,41.9486]},"n2208608825":{"id":"n2208608825","loc":[-85.6354483,41.9494241]},"n2208608823":{"id":"n2208608823","loc":[-85.6360418,41.949416]},"n2208608821":{"id":"n2208608821","loc":[-85.6360458,41.9495802]},"n2208608811":{"id":"n2208608811","loc":[-85.6357458,41.9495843]},"n2208608808":{"id":"n2208608808","loc":[-85.6357508,41.9497835]},"n2208608806":{"id":"n2208608806","loc":[-85.6354573,41.9497875]},"n2208608795":{"id":"n2208608795","loc":[-85.6354595,41.9498778]},"n2199109638":{"id":"n2199109638","loc":[-85.6349605,41.949749]},"n2199109636":{"id":"n2199109636","loc":[-85.6349605,41.9497639]},"n2199109634":{"id":"n2199109634","loc":[-85.6349061,41.94971]},"n2199109632":{"id":"n2199109632","loc":[-85.6349048,41.9496569]},"n2199109630":{"id":"n2199109630","loc":[-85.6348835,41.9496571]},"n2199109628":{"id":"n2199109628","loc":[-85.6348829,41.9497103]},"n2199109626":{"id":"n2199109626","loc":[-85.635227,41.9497738]},"n2199109624":{"id":"n2199109624","loc":[-85.6352184,41.9497787]},"n2199109622":{"id":"n2199109622","loc":[-85.6351181,41.9497806]},"n2199109620":{"id":"n2199109620","loc":[-85.6351181,41.9497456]},"n2199109618":{"id":"n2199109618","loc":[-85.6348842,41.9497651]},"n2199109616":{"id":"n2199109616","loc":[-85.6348827,41.9496238]},"n2199109615":{"id":"n2199109615","loc":[-85.6351268,41.9496206]},"n2199109614":{"id":"n2199109614","loc":[-85.6351261,41.9495891]},"n2199109613":{"id":"n2199109613","loc":[-85.6351957,41.9495881]},"n2199109612":{"id":"n2199109612","loc":[-85.6351924,41.9494515]},"n2199109611":{"id":"n2199109611","loc":[-85.6353997,41.9494488]},"n2199109610":{"id":"n2199109610","loc":[-85.6354074,41.9497715]},"n2189015681":{"id":"n2189015681","loc":[-85.6344229,41.9509639]},"n2189015677":{"id":"n2189015677","loc":[-85.634424,41.9507396]},"n2138493843":{"id":"n2138493843","loc":[-85.6343935,41.9502836]},"n2138493840":{"id":"n2138493840","loc":[-85.634398,41.9506264]},"n354002838":{"id":"n354002838","loc":[-85.6345197,41.9510631]},"n2114807590":{"id":"n2114807590","loc":[-85.634511,41.9499767]},"n185964353":{"id":"n185964353","loc":[-85.6374092,41.9498755]},"n1819849180":{"id":"n1819849180","loc":[-85.6348236,41.94996]},"n1819849115":{"id":"n1819849115","loc":[-85.6354372,41.9499538]},"n1819848921":{"id":"n1819848921","loc":[-85.6348439,41.951064]},"n1819848885":{"id":"n1819848885","loc":[-85.6354575,41.9510578]},"n185984281":{"id":"n185984281","loc":[-85.638075,41.949872]},"n2208608827":{"id":"n2208608827","loc":[-85.6339169,41.9473191]},"n2199109749":{"id":"n2199109749","loc":[-85.6342082,41.9477934]},"n2199109747":{"id":"n2199109747","loc":[-85.6342045,41.9476867]},"n2199109713":{"id":"n2199109713","loc":[-85.6342404,41.9474746]},"n2199109711":{"id":"n2199109711","loc":[-85.6342404,41.9476355]},"n2199109673":{"id":"n2199109673","loc":[-85.6340886,41.9483282]},"n2199109667":{"id":"n2199109667","loc":[-85.6342403,41.9482988]},"n2199109665":{"id":"n2199109665","loc":[-85.6342386,41.9482116]},"n2199109662":{"id":"n2199109662","loc":[-85.6340861,41.9482135]},"n2199109660":{"id":"n2199109660","loc":[-85.6340802,41.9480562]},"n2199109640":{"id":"n2199109640","loc":[-85.6340928,41.9485063]},"n354031366":{"id":"n354031366","loc":[-85.6341667,41.9477778],"tags":{"amenity":"place_of_worship","name":"Faith Tabernacle Church","religion":"christian"}},"n2189015686":{"id":"n2189015686","loc":[-85.6337798,41.95099]},"n2189015684":{"id":"n2189015684","loc":[-85.6337794,41.9509674]},"n2189015673":{"id":"n2189015673","loc":[-85.6337501,41.9507457]},"n2189015669":{"id":"n2189015669","loc":[-85.6337501,41.9506974]},"n2189015665":{"id":"n2189015665","loc":[-85.6339034,41.9506959]},"n2189015662":{"id":"n2189015662","loc":[-85.6339015,41.950436]},"n2189015658":{"id":"n2189015658","loc":[-85.6334916,41.9504376]},"n2189015655":{"id":"n2189015655","loc":[-85.6334939,41.9507558]},"n2189015650":{"id":"n2189015650","loc":[-85.6334543,41.950756]},"n2189015649":{"id":"n2189015649","loc":[-85.633456,41.9509915]},"n2138493842":{"id":"n2138493842","loc":[-85.6339937,41.9502836]},"n2138493841":{"id":"n2138493841","loc":[-85.6339983,41.9506281]},"n2114807579":{"id":"n2114807579","loc":[-85.6333644,41.9510682]},"n2114807573":{"id":"n2114807573","loc":[-85.6333557,41.9499819]},"n354031330":{"id":"n354031330","loc":[-85.6341667,41.9497222],"tags":{"amenity":"place_of_worship","name":"Trinity Episcopal Church","religion":"christian"}},"n185960794":{"id":"n185960794","loc":[-85.633307,41.9537]},"n185964357":{"id":"n185964357","loc":[-85.637432,41.952399]},"n185964358":{"id":"n185964358","loc":[-85.637452,41.953665]},"n185964359":{"id":"n185964359","loc":[-85.63746,41.954658]},"n185964360":{"id":"n185964360","loc":[-85.637473,41.95592]},"n185964361":{"id":"n185964361","loc":[-85.637468,41.956906]},"n185964362":{"id":"n185964362","loc":[-85.637483,41.958313]},"n185966957":{"id":"n185966957","loc":[-85.633361,41.957422]},"n185975351":{"id":"n185975351","loc":[-85.63334,41.9559]},"n185978784":{"id":"n185978784","loc":[-85.633311,41.954679]},"n185986157":{"id":"n185986157","loc":[-85.633287,41.952426]},"n185986158":{"id":"n185986158","loc":[-85.6333607,41.9582301],"tags":{"highway":"turning_circle"}},"w17965182":{"id":"w17965182","tags":{"highway":"residential","name":"W Prutzman St"},"nodes":["n185965289","n2189153241","n185965291"]},"w208627205":{"id":"w208627205","tags":{"area":"yes","building":"yes"},"nodes":["n2189015649","n2189015650","n2189015655","n2189015658","n2189015662","n2189015665","n2189015669","n2189015673","n2189015677","n2189015681","n2189015684","n2189015686","n2189015649"]},"w209717042":{"id":"w209717042","tags":{"amenity":"place_of_worship","area":"yes","building":"yes","denomination":"presbyterian","name":"First Presbyterian Church","religion":"christian"},"nodes":["n2199109610","n2199109611","n2199109612","n2199109613","n2199109614","n2199109615","n2199109616","n2199109630","n2199109632","n2199109634","n2199109628","n2199109618","n2199109636","n2199109638","n2199109620","n2199109622","n2199109624","n2199109626","n2199109610"]},"w209717045":{"id":"w209717045","tags":{"area":"yes","building":"yes"},"nodes":["n2199109711","n2199109713","n2199109715","n2199109717","n2199109719","n2199109721","n2199109711"]},"w209717047":{"id":"w209717047","tags":{"area":"yes","building":"yes"},"nodes":["n2199109739","n2199109741","n2199109743","n2199109745","n2199109747","n2199109749","n2199109751","n2199109753","n2199109739"]},"w209717044":{"id":"w209717044","tags":{"area":"yes","building":"yes"},"nodes":["n2199109674","n2199109676","n2199109678","n2199109680","n2199109682","n2199109684","n2199109686","n2199109688","n2199109690","n2199109692","n2199109694","n2199109696","n2199109698","n2199109700","n2199109702","n2199109705","n2199109707","n2199109709","n2199109674"]},"w210822776":{"id":"w210822776","tags":{"highway":"service","service":"alley","surface":"unpaved"},"nodes":["n2208608795","n2208608806","n2208608825","n2208608800","n2189153241"]},"w210822778":{"id":"w210822778","tags":{"highway":"service","service":"alley"},"nodes":["n2208608826","n2208608827"]},"w209717050":{"id":"w209717050","tags":{"area":"yes","building":"yes"},"nodes":["n2199109787","n2199109789","n2199109791","n2199109793","n2199109795","n2199109797","n2199109799","n2199109802","n2199109804","n2199109806","n2199109787"]},"w17965097":{"id":"w17965097","tags":{"highway":"residential","name":"Maple Street"},"nodes":["n185964351","n185964352","n185964353","n185964355","n185964357","n185964358","n185964359","n185964360","n185964361","n185964362"]},"w17965856":{"id":"w17965856","tags":{"highway":"residential","name":"W Kelsey St"},"nodes":["n185971578","n2208608800","n185971580","n185964351"]},"w17967444":{"id":"w17967444","tags":{"highway":"residential","name":"East Street"},"nodes":["n185966937","n185978969","n185986155","n185985812","n185986157","n185960794","n185978784","n185975351","n185966957","n185986158"]},"w17967764":{"id":"w17967764","tags":{"highway":"residential","name":"Rock River Ave"},"nodes":["n185984017","n185964351"]},"w170848329":{"id":"w170848329","tags":{"leisure":"park","name":"LaFayette Park"},"nodes":["n1819849180","n1819849115","n1819848885","n1819848921","n1819849180"]},"w17967208":{"id":"w17967208","tags":{"highway":"residential","name":"West Bennett Street"},"nodes":["n185978390","n2208608795","n185984020","n185964353","n185984281"]},"w17965349":{"id":"w17965349","tags":{"highway":"residential","name":"E Prutzman St"},"nodes":["n185966937","n2208608827","n185965289"]},"w209717049":{"id":"w209717049","tags":{"area":"yes","building":"yes"},"nodes":["n2199109761","n2199109762","n2199109763","n2199109765","n2199109768","n2199109770","n2199109783","n2199109785","n2199109761"]},"w203841840":{"id":"w203841840","tags":{"area":"yes","leisure":"playground"},"nodes":["n2138493840","n2138493841","n2138493842","n2138493843","n2138493840"]},"w209717043":{"id":"w209717043","tags":{"amenity":"place_of_worship","area":"yes","building":"church","denomination":"methodist","name":"First United Methodist Church","religion":"christian"},"nodes":["n2199109640","n2199109642","n2199109645","n2199109648","n2199109650","n2199109652","n2199109654","n2199109656","n2199109658","n2199109660","n2199109662","n2199109665","n2199109667","n2199109669","n2199109671","n2199109673","n2199109640"]},"w201484341":{"id":"w201484341","tags":{"amenity":"school","name":"Hoppin School"},"nodes":["n354002838","n2114807579","n2114807573","n2114807590","n354002838"]},"w209717046":{"id":"w209717046","tags":{"area":"yes","building":"yes"},"nodes":["n2199109723","n2199109725","n2199109727","n2199109729","n2199109731","n2199109733","n2199109735","n2199109737","n2199109723"]},"w210822777":{"id":"w210822777","tags":{"amenity":"parking","area":"yes"},"nodes":["n2208608806","n2208608808","n2208608811","n2208608821","n2208608823","n2208608825","n2208608806"]},"n185954965":{"id":"n185954965","loc":[-85.6191189,41.9441922]},"n185954968":{"id":"n185954968","loc":[-85.6194384,41.9442405]},"n185954970":{"id":"n185954970","loc":[-85.6196543,41.9443252]},"n185954972":{"id":"n185954972","loc":[-85.6197862,41.9444539]},"n354002931":{"id":"n354002931","loc":[-85.6198991,41.9455269]},"n354030853":{"id":"n354030853","loc":[-85.6219444,41.9455556],"tags":{"amenity":"place_of_worship","name":"Grant Chapel","religion":"christian"}},"n367815963":{"id":"n367815963","loc":[-85.6202778,41.9461111],"tags":{"building":"yes","name":"George Washington Carver Community Center"}},"n185947331":{"id":"n185947331","loc":[-85.618779,41.943269]},"n185947333":{"id":"n185947333","loc":[-85.618795,41.943511]},"n185947336":{"id":"n185947336","loc":[-85.618711,41.94413]},"n185947338":{"id":"n185947338","loc":[-85.618704,41.944189]},"n185947339":{"id":"n185947339","loc":[-85.618597,41.944337]},"n185947340":{"id":"n185947340","loc":[-85.618485,41.944528]},"n185947343":{"id":"n185947343","loc":[-85.618442,41.944716]},"n185947345":{"id":"n185947345","loc":[-85.618457,41.945107]},"n185947347":{"id":"n185947347","loc":[-85.618296,41.945338]},"n185947374":{"id":"n185947374","loc":[-85.616748,41.944453]},"n185947375":{"id":"n185947375","loc":[-85.616813,41.944646]},"n185947376":{"id":"n185947376","loc":[-85.616859,41.945196]},"n185947377":{"id":"n185947377","loc":[-85.616941,41.945352]},"n185947406":{"id":"n185947406","loc":[-85.618184,41.944227]},"n185947409":{"id":"n185947409","loc":[-85.617911,41.943875]},"n185947410":{"id":"n185947410","loc":[-85.617579,41.943682]},"n185947411":{"id":"n185947411","loc":[-85.61713,41.943589]},"n185947412":{"id":"n185947412","loc":[-85.616549,41.943559]},"n185947414":{"id":"n185947414","loc":[-85.616482,41.943556]},"n185947464":{"id":"n185947464","loc":[-85.616526,41.943788]},"n185947466":{"id":"n185947466","loc":[-85.616504,41.944002]},"n185948863":{"id":"n185948863","loc":[-85.619017,41.943391]},"n185948865":{"id":"n185948865","loc":[-85.619059,41.943368]},"n185955022":{"id":"n185955022","loc":[-85.620088,41.945571]},"n185955025":{"id":"n185955025","loc":[-85.620051,41.945505]},"n185955028":{"id":"n185955028","loc":[-85.62001,41.94541]},"n185980371":{"id":"n185980371","loc":[-85.620982,41.944742]},"n185980398":{"id":"n185980398","loc":[-85.621305,41.944782]},"n185980401":{"id":"n185980401","loc":[-85.621174,41.944819]},"n185980403":{"id":"n185980403","loc":[-85.621029,41.944871]},"n185980405":{"id":"n185980405","loc":[-85.620741,41.945011]},"n185980407":{"id":"n185980407","loc":[-85.620616,41.945085]},"n185980409":{"id":"n185980409","loc":[-85.620506,41.945172]},"n185980411":{"id":"n185980411","loc":[-85.620394,41.945273]},"n185980413":{"id":"n185980413","loc":[-85.620316,41.94536]},"n185980415":{"id":"n185980415","loc":[-85.620257,41.945452]},"n185980417":{"id":"n185980417","loc":[-85.620212,41.945535]},"n185985910":{"id":"n185985910","loc":[-85.620101,41.945811]},"n185985912":{"id":"n185985912","loc":[-85.620081,41.945937]},"n1475283972":{"id":"n1475283972","loc":[-85.6198991,41.9437179]},"n1475283982":{"id":"n1475283982","loc":[-85.6195022,41.9433463]},"n1475284007":{"id":"n1475284007","loc":[-85.6193037,41.9433383]},"n1475284040":{"id":"n1475284040","loc":[-85.6197329,41.9434121]},"n1475284044":{"id":"n1475284044","loc":[-85.6198756,41.9435363]},"n1475284050":{"id":"n1475284050","loc":[-85.6199689,41.9432106]},"n1475284053":{"id":"n1475284053","loc":[-85.6198943,41.9432921]},"n185954974":{"id":"n185954974","loc":[-85.6198296,41.94473]},"n185954977":{"id":"n185954977","loc":[-85.6200474,41.9447384]},"n2196831365":{"id":"n2196831365","loc":[-85.6202259,41.9460883]},"n2196831366":{"id":"n2196831366","loc":[-85.6202245,41.9458642]},"n2196831367":{"id":"n2196831367","loc":[-85.6205184,41.9458631]},"n2196831368":{"id":"n2196831368","loc":[-85.6205189,41.9459437]},"n2196831369":{"id":"n2196831369","loc":[-85.6203879,41.9459441]},"n2196831370":{"id":"n2196831370","loc":[-85.6203888,41.9460878]},"n2196831371":{"id":"n2196831371","loc":[-85.6184046,41.9465663]},"n2196831372":{"id":"n2196831372","loc":[-85.6191563,41.9465618]},"n2196831373":{"id":"n2196831373","loc":[-85.6191536,41.946319]},"n2196831374":{"id":"n2196831374","loc":[-85.6187356,41.9463216]},"n2196831375":{"id":"n2196831375","loc":[-85.6187334,41.9461197]},"n2196831376":{"id":"n2196831376","loc":[-85.6193167,41.9461162]},"n2196831377":{"id":"n2196831377","loc":[-85.6193156,41.9460229]},"n2196831378":{"id":"n2196831378","loc":[-85.619622,41.946021]},"n2196831379":{"id":"n2196831379","loc":[-85.6196237,41.9461712]},"n2196831380":{"id":"n2196831380","loc":[-85.6197702,41.9461703]},"n2196831381":{"id":"n2196831381","loc":[-85.6197685,41.9460202]},"n2196831382":{"id":"n2196831382","loc":[-85.6197323,41.9460204]},"n2196831383":{"id":"n2196831383","loc":[-85.6197305,41.9458563]},"n2196831384":{"id":"n2196831384","loc":[-85.6196165,41.945857]},"n2196831385":{"id":"n2196831385","loc":[-85.6196156,41.9457764]},"n2196831386":{"id":"n2196831386","loc":[-85.6194472,41.9457775]},"n2196831387":{"id":"n2196831387","loc":[-85.6194151,41.9457777]},"n2196831388":{"id":"n2196831388","loc":[-85.6183779,41.9457883]},"n2196831389":{"id":"n2196831389","loc":[-85.6183842,41.9461317]},"n2196831390":{"id":"n2196831390","loc":[-85.6185026,41.9461304]},"n2196831391":{"id":"n2196831391","loc":[-85.6185061,41.9463194]},"n2196831392":{"id":"n2196831392","loc":[-85.6184001,41.9463205]},"n2196831393":{"id":"n2196831393","loc":[-85.6182482,41.9464163]},"n2196831394":{"id":"n2196831394","loc":[-85.6182467,41.9463193]},"n2196831395":{"id":"n2196831395","loc":[-85.6180389,41.946321]},"n2196831397":{"id":"n2196831397","loc":[-85.6180404,41.946418]},"n185947303":{"id":"n185947303","loc":[-85.611074,41.943389]},"n185947304":{"id":"n185947304","loc":[-85.611332,41.943267]},"n185947305":{"id":"n185947305","loc":[-85.611635,41.943218]},"n185947306":{"id":"n185947306","loc":[-85.612762,41.943311]},"n185947308":{"id":"n185947308","loc":[-85.613027,41.943327]},"n185947310":{"id":"n185947310","loc":[-85.615377,41.942996]},"n185947312":{"id":"n185947312","loc":[-85.615701,41.943007]},"n185947314":{"id":"n185947314","loc":[-85.61604,41.943067]},"n185947315":{"id":"n185947315","loc":[-85.61626,41.943083]},"n185947316":{"id":"n185947316","loc":[-85.616507,41.943048]},"n185947319":{"id":"n185947319","loc":[-85.616702,41.94299]},"n185947321":{"id":"n185947321","loc":[-85.617078,41.942918]},"n185947322":{"id":"n185947322","loc":[-85.617366,41.942973]},"n185947323":{"id":"n185947323","loc":[-85.617601,41.943033]},"n185947325":{"id":"n185947325","loc":[-85.617799,41.943027]},"n185947327":{"id":"n185947327","loc":[-85.618264,41.942961]},"n185947328":{"id":"n185947328","loc":[-85.618508,41.942972]},"n185947329":{"id":"n185947329","loc":[-85.618707,41.943076]},"n185947361":{"id":"n185947361","loc":[-85.615356,41.944922]},"n185947363":{"id":"n185947363","loc":[-85.61536,41.944893]},"n185947365":{"id":"n185947365","loc":[-85.615406,41.944547]},"n185947367":{"id":"n185947367","loc":[-85.61548,41.944351]},"n185947369":{"id":"n185947369","loc":[-85.615805,41.94419]},"n185947371":{"id":"n185947371","loc":[-85.616166,41.944156]},"n185947373":{"id":"n185947373","loc":[-85.616411,41.944197]},"n185947416":{"id":"n185947416","loc":[-85.616335,41.94343]},"n185947417":{"id":"n185947417","loc":[-85.616069,41.943293]},"n185947419":{"id":"n185947419","loc":[-85.615803,41.943249]},"n185947420":{"id":"n185947420","loc":[-85.615524,41.943342]},"n185947421":{"id":"n185947421","loc":[-85.615311,41.94353]},"n185947422":{"id":"n185947422","loc":[-85.614338,41.943558]},"n185947423":{"id":"n185947423","loc":[-85.61422,41.94369]},"n185947425":{"id":"n185947425","loc":[-85.614221,41.944224]},"n185947427":{"id":"n185947427","loc":[-85.614198,41.944888]},"n185947429":{"id":"n185947429","loc":[-85.614221,41.945439]},"n185947468":{"id":"n185947468","loc":[-85.615908,41.944756]},"n185947470":{"id":"n185947470","loc":[-85.615871,41.944888]},"n185947472":{"id":"n185947472","loc":[-85.615878,41.94507]},"n185955153":{"id":"n185955153","loc":[-85.620087,41.947701]},"n185960690":{"id":"n185960690","loc":[-85.620141,41.951901]},"n185978817":{"id":"n185978817","loc":[-85.617193,41.954706]},"n185985916":{"id":"n185985916","loc":[-85.620088,41.94758]},"n185985918":{"id":"n185985918","loc":[-85.620133,41.951538]},"n185985919":{"id":"n185985919","loc":[-85.62013,41.952104]},"n185985920":{"id":"n185985920","loc":[-85.620104,41.952305]},"n185985921":{"id":"n185985921","loc":[-85.620062,41.952499]},"n185985922":{"id":"n185985922","loc":[-85.619993,41.952702]},"n185985925":{"id":"n185985925","loc":[-85.619879,41.952986]},"n185985927":{"id":"n185985927","loc":[-85.619689,41.95329]},"n185985928":{"id":"n185985928","loc":[-85.619508,41.953521]},"n185985929":{"id":"n185985929","loc":[-85.619286,41.953728]},"n185985930":{"id":"n185985930","loc":[-85.618925,41.954007]},"n185985931":{"id":"n185985931","loc":[-85.618638,41.954189]},"n185985932":{"id":"n185985932","loc":[-85.61831,41.954358]},"n185985934":{"id":"n185985934","loc":[-85.618015,41.954485]},"n185985936":{"id":"n185985936","loc":[-85.617606,41.954611]},"n1475283975":{"id":"n1475283975","loc":[-85.6150935,41.9434118]},"n1475283979":{"id":"n1475283979","loc":[-85.6193367,41.9430252]},"n1475283989":{"id":"n1475283989","loc":[-85.6104771,41.9455269]},"n1475283990":{"id":"n1475283990","loc":[-85.6104771,41.9437179]},"n1475283994":{"id":"n1475283994","loc":[-85.6198042,41.9429763]},"n1475283998":{"id":"n1475283998","loc":[-85.6192101,41.9426716]},"n1475284000":{"id":"n1475284000","loc":[-85.6198622,41.942836]},"n1475284002":{"id":"n1475284002","loc":[-85.6163262,41.9427688]},"n1475284006":{"id":"n1475284006","loc":[-85.6179527,41.9429168]},"n1475284029":{"id":"n1475284029","loc":[-85.6197195,41.9427278]},"n1475284038":{"id":"n1475284038","loc":[-85.6194405,41.9427837]},"n1475284052":{"id":"n1475284052","loc":[-85.6153225,41.942841]},"n1475284055":{"id":"n1475284055","loc":[-85.6129233,41.9437179]},"n2139966627":{"id":"n2139966627","loc":[-85.61958,41.9427558]},"w17966773":{"id":"w17966773","tags":{"highway":"secondary","name":"E Michigan Ave","ref":"M 60"},"nodes":["n185980372","n185980398","n185980401","n185980403","n185980405","n185980407","n185980409","n185980411","n185980413","n185980415","n185980417","n185955019"]},"w17964043":{"id":"w17964043","tags":{"highway":"residential"},"nodes":["n185955019","n185955022","n185955025","n185955028","n185954977","n185971477","n1475284050","n1475284000","n1475284029","n2139966627","n1475284038"]},"w17962834":{"id":"w17962834","tags":{"highway":"service"},"nodes":["n185947316","n185947414","n185947464","n185947466","n185947373","n185947468","n185947470","n185947472","n185947474"]},"w209470310":{"id":"w209470310","tags":{"area":"yes","building":"yes"},"nodes":["n2196831393","n2196831394","n2196831395","n2196831397","n2196831393"]},"w17963058":{"id":"w17963058","tags":{"highway":"service"},"nodes":["n185947333","n185948863","n185948865","n1475284007","n1475283982","n1475284040","n1475284044"]},"w17962823":{"id":"w17962823","tags":{"highway":"service"},"nodes":["n185947359","n185947361","n185947363","n185947365","n185947367","n185947369","n185947371","n185947373","n185947374","n185947375","n185947376","n185947377","n185947378"]},"w17962821":{"id":"w17962821","tags":{"highway":"service"},"nodes":["n185947303","n185947304","n185947305","n185947306","n185947308","n185947310","n185947312","n185947314","n185947315","n185947316","n185947319","n185947321","n185947322","n185947323","n185947325","n185947327","n185947328","n185947329","n185947331","n185947333","n185947336","n185947338","n185947339","n185947340","n185947343","n185947345","n185947347","n185947349"]},"w134150798":{"id":"w134150798","tags":{"amenity":"grave_yard","name":"Riverside Cemetery"},"nodes":["n354002931","n1475283972","n1475284053","n1475283994","n1475283979","n1475283998","n1475284006","n1475284002","n1475284052","n1475283975","n1475284055","n1475283990","n1475283989","n354002931"]},"w17964040":{"id":"w17964040","tags":{"highway":"service"},"nodes":["n185947336","n185954965","n185954968","n185954970","n185954972","n185954974","n185954977"]},"w209470308":{"id":"w209470308","tags":{"area":"yes","building":"yes"},"nodes":["n2196831365","n2196831366","n2196831367","n2196831368","n2196831369","n2196831370","n2196831365"]},"w17962828":{"id":"w17962828","tags":{"highway":"service"},"nodes":["n185947340","n185947406","n185947409","n185947410","n185947411","n185947412","n185947414","n185947416","n185947417","n185947419","n185947420","n185947421","n185947422","n185947423","n185947425","n185947427","n185947429"]},"w209470309":{"id":"w209470309","tags":{"area":"yes","building":"yes"},"nodes":["n2196831371","n2196831372","n2196831373","n2196831374","n2196831375","n2196831376","n2196831377","n2196831378","n2196831379","n2196831380","n2196831381","n2196831382","n2196831383","n2196831384","n2196831385","n2196831386","n2196831387","n2196831388","n2196831389","n2196831390","n2196831391","n2196831392","n2196831371"]},"w17967415":{"id":"w17967415","tags":{"highway":"secondary","name":"Jefferson St","name_1":"State Highway 60","ref":"M 60"},"nodes":["n185955019","n185985910","n185985912","n185985914","n185961367","n185985916","n185955153","n185965105","n185974697","n185955120","n185985918","n185960690","n185985919","n185985920","n185985921","n185985922","n185985925","n185985927","n185985928","n185985929","n185985930","n185985931","n185985932","n185985934","n185985936","n185978817"]},"w17966772":{"id":"w17966772","tags":{"highway":"unclassified","name":"E Michigan Ave","name_1":"State Highway 60"},"nodes":["n185954977","n185980371","n185980372"]},"n185958500":{"id":"n185958500","loc":[-85.621591,41.941075]},"n185963110":{"id":"n185963110","loc":[-85.6204416,41.9408882]},"n2139966628":{"id":"n2139966628","loc":[-85.6196431,41.9426467],"tags":{"leisure":"fishing"}},"n2139966630":{"id":"n2139966630","loc":[-85.6199354,41.9429616]},"n2199127051":{"id":"n2199127051","loc":[-85.6170556,41.939696]},"n2199127052":{"id":"n2199127052","loc":[-85.6170536,41.9392909]},"n2199127053":{"id":"n2199127053","loc":[-85.6172067,41.9392905]},"n2199127054":{"id":"n2199127054","loc":[-85.6172061,41.9391853]},"n2199127055":{"id":"n2199127055","loc":[-85.6171481,41.9391854]},"n2199127060":{"id":"n2199127060","loc":[-85.6167389,41.9392896]},"n2199127061":{"id":"n2199127061","loc":[-85.6168728,41.9392892]},"n2199127062":{"id":"n2199127062","loc":[-85.6168747,41.9396965]},"n2199127071":{"id":"n2199127071","loc":[-85.620196,41.9399446]},"n2199127072":{"id":"n2199127072","loc":[-85.620193,41.9397316]},"n2199127073":{"id":"n2199127073","loc":[-85.6200381,41.9397328]},"n2199127074":{"id":"n2199127074","loc":[-85.6200412,41.9399458]},"n2199127075":{"id":"n2199127075","loc":[-85.6203606,41.9399939]},"n2199127076":{"id":"n2199127076","loc":[-85.6205527,41.9399922]},"n2199127077":{"id":"n2199127077","loc":[-85.6205482,41.9397115]},"n2199127078":{"id":"n2199127078","loc":[-85.6204132,41.9397124]},"n2199127079":{"id":"n2199127079","loc":[-85.6204144,41.9396341]},"n2199127080":{"id":"n2199127080","loc":[-85.6205699,41.9396324]},"n2199127081":{"id":"n2199127081","loc":[-85.6205722,41.939498]},"n2199127082":{"id":"n2199127082","loc":[-85.6204064,41.9394997]},"n2199127083":{"id":"n2199127083","loc":[-85.6204087,41.939561]},"n2199127084":{"id":"n2199127084","loc":[-85.6203103,41.9395618]},"n2199127085":{"id":"n2199127085","loc":[-85.620308,41.9396069]},"n2199127086":{"id":"n2199127086","loc":[-85.6200347,41.9396086]},"n2199127087":{"id":"n2199127087","loc":[-85.6200382,41.9397141]},"n2199127088":{"id":"n2199127088","loc":[-85.6202257,41.9397149]},"n2199127089":{"id":"n2199127089","loc":[-85.6202269,41.9399182]},"n2199127090":{"id":"n2199127090","loc":[-85.6203595,41.9399199]},"n2199127091":{"id":"n2199127091","loc":[-85.6212335,41.939688]},"n2199127092":{"id":"n2199127092","loc":[-85.6212328,41.939595]},"n2199127093":{"id":"n2199127093","loc":[-85.6208807,41.9395966]},"n2199127094":{"id":"n2199127094","loc":[-85.6208815,41.9396896]},"n2199127095":{"id":"n2199127095","loc":[-85.6208676,41.9396872]},"n2199127096":{"id":"n2199127096","loc":[-85.6208583,41.9393539]},"n2199127097":{"id":"n2199127097","loc":[-85.6207006,41.9393563]},"n2199127098":{"id":"n2199127098","loc":[-85.6207099,41.9396896]},"n185967054":{"id":"n185967054","loc":[-85.6173384,41.9356126]},"n185967063":{"id":"n185967063","loc":[-85.617371,41.936243]},"n185967065":{"id":"n185967065","loc":[-85.617337,41.936299]},"n185967068":{"id":"n185967068","loc":[-85.617321,41.936373]},"n185967070":{"id":"n185967070","loc":[-85.6173562,41.9366969]},"n185967074":{"id":"n185967074","loc":[-85.6173635,41.9377414]},"n185967075":{"id":"n185967075","loc":[-85.6173696,41.9381886]},"n185967076":{"id":"n185967076","loc":[-85.617372,41.938535]},"n2199127056":{"id":"n2199127056","loc":[-85.617147,41.9389616]},"n2199127057":{"id":"n2199127057","loc":[-85.6172136,41.9389614]},"n2199127058":{"id":"n2199127058","loc":[-85.6172123,41.9386909]},"n2199127059":{"id":"n2199127059","loc":[-85.616736,41.9386922]},"n2203921041":{"id":"n2203921041","loc":[-85.6173018,41.9346369]},"w203983952":{"id":"w203983952","tags":{"highway":"service"},"nodes":["n2139966627","n1819800319"]},"w209718301":{"id":"w209718301","tags":{"area":"yes","building":"yes"},"nodes":["n2199127051","n2199127052","n2199127053","n2199127054","n2199127055","n2199127056","n2199127057","n2199127058","n2199127059","n2199127060","n2199127061","n2199127062","n2199127051"]},"w209718304":{"id":"w209718304","tags":{"area":"yes","building":"yes"},"nodes":["n2199127071","n2199127072","n2199127073","n2199127074","n2199127071"]},"w17964961":{"id":"w17964961","tags":{"highway":"residential","name":"Whipple St"},"nodes":["n185963099","n185963110"]},"w17964489":{"id":"w17964489","tags":{"highway":"residential","name":"Jackson St"},"nodes":["n185958498","n185958500"]},"w203983953":{"id":"w203983953","tags":{"area":"yes","leisure":"park","name":"Marina Park"},"nodes":["n1475283994","n1475283979","n1475283998","n2139966629","n2139966625","n1819800319","n2139966623","n2139966622","n2139966621","n2139966630","n1475283994"]},"w17965366":{"id":"w17965366","tags":{"highway":"residential","name":"14th St"},"nodes":["n2203921041","n185967054","n185967063","n185967065","n185967068","n185967070","n185967074","n185967075","n185967076","n185967077"]},"w209718306":{"id":"w209718306","tags":{"area":"yes","building":"yes"},"nodes":["n2199127091","n2199127092","n2199127093","n2199127094","n2199127091"]},"w209718307":{"id":"w209718307","tags":{"area":"yes","building":"yes"},"nodes":["n2199127095","n2199127096","n2199127097","n2199127098","n2199127095"]},"w209718305":{"id":"w209718305","tags":{"area":"yes","building":"yes"},"nodes":["n2199127075","n2199127076","n2199127077","n2199127078","n2199127079","n2199127080","n2199127081","n2199127082","n2199127083","n2199127084","n2199127085","n2199127086","n2199127087","n2199127088","n2199127089","n2199127090","n2199127075"]},"n185960199":{"id":"n185960199","loc":[-85.62965,41.95469]},"n185980737":{"id":"n185980737","loc":[-85.629083,41.953725]},"n2114807561":{"id":"n2114807561","loc":[-85.6297681,41.9524688]},"n2114807597":{"id":"n2114807597","loc":[-85.6296517,41.952563]},"n185960197":{"id":"n185960197","loc":[-85.629676,41.9537314]},"n185978791":{"id":"n185978791","loc":[-85.6244542,41.9547066]},"w17967573":{"id":"w17967573","tags":{"highway":"residential","name":"E Wheeler St"},"nodes":["n185960195","n2114807561","n185968102","n185967430","n185986157","n185978392"]},"w17966553":{"id":"w17966553","tags":{"highway":"residential","name":"East Hoffman Street"},"nodes":["n185971631","n185978784","n185967432","n185968106","n185960199","n185978787","n185978790","n185978791"]},"w17966787":{"id":"w17966787","tags":{"highway":"residential","name":"East Cushman Street"},"nodes":["n185980735","n185980737","n185960197","n185968104","n185960792"]},"w17964723":{"id":"w17964723","tags":{"highway":"residential","name":"Cushman Street"},"nodes":["n185960792","n185960794","n185960796"]},"w17964654":{"id":"w17964654","tags":{"highway":"residential","name":"Pine Street"},"nodes":["n185960195","n2114807597","n185960197","n185960199"]},"n1819848862":{"id":"n1819848862","loc":[-85.6346087,41.9545845]},"n1819848935":{"id":"n1819848935","loc":[-85.6345948,41.9537717]},"n1819848973":{"id":"n1819848973","loc":[-85.6334247,41.9537827]},"n1819848997":{"id":"n1819848997","loc":[-85.6334386,41.9545956]},"n2189015861":{"id":"n2189015861","loc":[-85.6375906,41.954836]},"n2189015865":{"id":"n2189015865","loc":[-85.6383307,41.9548291]},"n2189015867":{"id":"n2189015867","loc":[-85.6383337,41.9550072]},"n2189015868":{"id":"n2189015868","loc":[-85.6380986,41.9550094]},"n2189015869":{"id":"n2189015869","loc":[-85.6381005,41.9551226]},"n2199109808":{"id":"n2199109808","loc":[-85.6372702,41.9522894]},"n2199109810":{"id":"n2199109810","loc":[-85.6372677,41.9521583]},"n2199109812":{"id":"n2199109812","loc":[-85.6369505,41.9521617]},"n2199109814":{"id":"n2199109814","loc":[-85.636953,41.9522927]},"n185952156":{"id":"n185952156","loc":[-85.640983,41.9546557]},"n185953423":{"id":"n185953423","loc":[-85.641871,41.954652]},"n185971637":{"id":"n185971637","loc":[-85.641583,41.95465]},"n185971639":{"id":"n185971639","loc":[-85.6421344,41.9546444]},"n185971642":{"id":"n185971642","loc":[-85.6428264,41.9545612]},"n185971648":{"id":"n185971648","loc":[-85.6436023,41.9544262]},"n185975066":{"id":"n185975066","loc":[-85.640532,41.953638]},"n185975067":{"id":"n185975067","loc":[-85.64079,41.953638]},"n185982166":{"id":"n185982166","loc":[-85.6399012,41.9523817]},"n2189015858":{"id":"n2189015858","loc":[-85.6376104,41.9560138]},"n2189015870":{"id":"n2189015870","loc":[-85.6386794,41.9551172]},"n2189015871":{"id":"n2189015871","loc":[-85.6386817,41.955256]},"n2189015873":{"id":"n2189015873","loc":[-85.6385437,41.9552573]},"n2189015876":{"id":"n2189015876","loc":[-85.638555,41.9559278]},"n2189015879":{"id":"n2189015879","loc":[-85.6384954,41.9559283]},"n2189015882":{"id":"n2189015882","loc":[-85.6384965,41.9559935]},"n2189015885":{"id":"n2189015885","loc":[-85.6383533,41.9559949]},"n2189015888":{"id":"n2189015888","loc":[-85.638351,41.9558607]},"n2189015891":{"id":"n2189015891","loc":[-85.6382178,41.9558619]},"n2189015894":{"id":"n2189015894","loc":[-85.6382203,41.956008]},"w208627223":{"id":"w208627223","tags":{"area":"yes","building":"yes"},"nodes":["n2189015858","n2189015861","n2189015865","n2189015867","n2189015868","n2189015869","n2189015870","n2189015871","n2189015873","n2189015876","n2189015879","n2189015882","n2189015885","n2189015888","n2189015891","n2189015894","n2189015858"]},"w170848328":{"id":"w170848328","tags":{"leisure":"park","name":"Bowman Park"},"nodes":["n1819848935","n1819848973","n1819848997","n1819848862","n1819848935"]},"w17965866":{"id":"w17965866","tags":{"highway":"residential","name":"West Hoffman Street"},"nodes":["n185971631","n185971632","n185964359","n185965025","n1475293264","n185952156","n185971637","n185953423","n185971639","n185971642","n185971648"]},"w209717051":{"id":"w209717051","tags":{"amenity":"place_of_worship","area":"yes","building":"yes","denomination":"baptist","name":"Calvary Missionary Baptist Church","religion":"christian"},"nodes":["n2199109808","n2199109810","n2199109812","n2199109814","n2199109808"]},"w17966172":{"id":"w17966172","tags":{"highway":"residential","name":"West Cushman Street"},"nodes":["n185960796","n185975064","n185964358","n185965023","n1475293222","n185975066","n185975067"]},"w17966975":{"id":"w17966975","tags":{"highway":"residential","name":"W Wheeler St"},"nodes":["n185978392","n185982163","n185964357","n185965021","n1475293261","n185982166"]},"n185960684":{"id":"n185960684","loc":[-85.622687,41.951885]},"n185960686":{"id":"n185960686","loc":[-85.622492,41.951901]},"n185978795":{"id":"n185978795","loc":[-85.6240991,41.954708]},"n185978803":{"id":"n185978803","loc":[-85.623348,41.954547]},"n185978806":{"id":"n185978806","loc":[-85.623123,41.954502]},"n185978808":{"id":"n185978808","loc":[-85.622923,41.954469]},"n185978810":{"id":"n185978810","loc":[-85.622787,41.954457]},"n185978811":{"id":"n185978811","loc":[-85.622612,41.954458]},"n185978813":{"id":"n185978813","loc":[-85.622368,41.954472]},"n1819790545":{"id":"n1819790545","loc":[-85.6240295,41.9548949]},"n1819790621":{"id":"n1819790621","loc":[-85.6235789,41.954855]},"n1819790664":{"id":"n1819790664","loc":[-85.6238363,41.9549507]},"n1819790683":{"id":"n1819790683","loc":[-85.6224727,41.9545921]},"n1819790730":{"id":"n1819790730","loc":[-85.6227527,41.9545795]},"n1819790740":{"id":"n1819790740","loc":[-85.6240402,41.9550784]},"n1819790831":{"id":"n1819790831","loc":[-85.624126,41.9549986]},"n1819790861":{"id":"n1819790861","loc":[-85.6231712,41.9546872]},"n1819790887":{"id":"n1819790887","loc":[-85.6242762,41.955206]},"n2168544739":{"id":"n2168544739","loc":[-85.6249102,41.952801]},"n2168544740":{"id":"n2168544740","loc":[-85.6251859,41.9527564]},"n2168544741":{"id":"n2168544741","loc":[-85.6255515,41.9527921]},"n2168544742":{"id":"n2168544742","loc":[-85.626001,41.9529481]},"n2168544743":{"id":"n2168544743","loc":[-85.6265284,41.9529838]},"n2168544744":{"id":"n2168544744","loc":[-85.626942,41.9528857]},"n2168544745":{"id":"n2168544745","loc":[-85.6270918,41.9526851]},"n2168544746":{"id":"n2168544746","loc":[-85.6272117,41.95244]},"n2168544747":{"id":"n2168544747","loc":[-85.6271578,41.952226]},"n2168544748":{"id":"n2168544748","loc":[-85.6270019,41.9519719]},"n2168544749":{"id":"n2168544749","loc":[-85.6268221,41.9518382]},"n2168544750":{"id":"n2168544750","loc":[-85.6265284,41.951807]},"n2168544751":{"id":"n2168544751","loc":[-85.6256534,41.9518516]},"n2168544752":{"id":"n2168544752","loc":[-85.6253477,41.9518338]},"n2168544753":{"id":"n2168544753","loc":[-85.6251139,41.9517669]},"n185955747":{"id":"n185955747","loc":[-85.620674,41.954709]},"n185960688":{"id":"n185960688","loc":[-85.621032,41.951913]},"n185972054":{"id":"n185972054","loc":[-85.6186728,41.9547335]},"n185978814":{"id":"n185978814","loc":[-85.6201708,41.9547403]},"n1819790532":{"id":"n1819790532","loc":[-85.6244908,41.9555731]},"n1819790536":{"id":"n1819790536","loc":[-85.6217925,41.9583135]},"n1819790538":{"id":"n1819790538","loc":[-85.6233954,41.9600014]},"n1819790539":{"id":"n1819790539","loc":[-85.6204611,41.9562117]},"n1819790546":{"id":"n1819790546","loc":[-85.6210898,41.9567657]},"n1819790548":{"id":"n1819790548","loc":[-85.6202465,41.9562237]},"n1819790550":{"id":"n1819790550","loc":[-85.6250165,41.9560677]},"n1819790551":{"id":"n1819790551","loc":[-85.6227946,41.9597023]},"n1819790553":{"id":"n1819790553","loc":[-85.6215726,41.9584571]},"n1819790556":{"id":"n1819790556","loc":[-85.6196306,41.9573002]},"n1819790557":{"id":"n1819790557","loc":[-85.6209503,41.9563109]},"n1819790558":{"id":"n1819790558","loc":[-85.6196939,41.9574085]},"n1819790561":{"id":"n1819790561","loc":[-85.621079,41.957751]},"n1819790562":{"id":"n1819790562","loc":[-85.6224255,41.9611417]},"n1819790565":{"id":"n1819790565","loc":[-85.6232506,41.9604841]},"n1819790566":{"id":"n1819790566","loc":[-85.6190835,41.9562909]},"n1819790567":{"id":"n1819790567","loc":[-85.622227,41.9593028]},"n1819790569":{"id":"n1819790569","loc":[-85.620976,41.9591039]},"n1819790571":{"id":"n1819790571","loc":[-85.6212078,41.9565303]},"n1819790572":{"id":"n1819790572","loc":[-85.6235306,41.9595102]},"n1819790581":{"id":"n1819790581","loc":[-85.6235563,41.9579351]},"n1819790584":{"id":"n1819790584","loc":[-85.6230371,41.9574598]},"n1819790586":{"id":"n1819790586","loc":[-85.6211748,41.9564272]},"n1819790588":{"id":"n1819790588","loc":[-85.6226508,41.9601086]},"n1819790591":{"id":"n1819790591","loc":[-85.6218032,41.9607468]},"n1819790593":{"id":"n1819790593","loc":[-85.6207915,41.9618735]},"n1819790596":{"id":"n1819790596","loc":[-85.6252955,41.9567858]},"n1819790598":{"id":"n1819790598","loc":[-85.6196618,41.9568939]},"n1819790600":{"id":"n1819790600","loc":[-85.6224416,41.9587084]},"n1819790602":{"id":"n1819790602","loc":[-85.6217442,41.9558641]},"n1819790603":{"id":"n1819790603","loc":[-85.6213355,41.9592116]},"n1819790604":{"id":"n1819790604","loc":[-85.622801,41.9573042]},"n1819790608":{"id":"n1819790608","loc":[-85.6199729,41.9574325]},"n1819790610":{"id":"n1819790610","loc":[-85.6195555,41.9557165]},"n1819790611":{"id":"n1819790611","loc":[-85.622978,41.9586007]},"n1819790613":{"id":"n1819790613","loc":[-85.6253963,41.9562636]},"n1819790614":{"id":"n1819790614","loc":[-85.6235252,41.9580342]},"n1819790616":{"id":"n1819790616","loc":[-85.6232988,41.9596305]},"n1819790617":{"id":"n1819790617","loc":[-85.6226776,41.9598732]},"n1819790619":{"id":"n1819790619","loc":[-85.625553,41.9561794]},"n1819790620":{"id":"n1819790620","loc":[-85.6235574,41.959231]},"n1819790624":{"id":"n1819790624","loc":[-85.6228429,41.9573726]},"n1819790626":{"id":"n1819790626","loc":[-85.6193785,41.9556766]},"n1819790628":{"id":"n1819790628","loc":[-85.620092,41.9554253]},"n1819790630":{"id":"n1819790630","loc":[-85.6226658,41.9604402]},"n1819790638":{"id":"n1819790638","loc":[-85.6219964,41.9602561]},"n1819790640":{"id":"n1819790640","loc":[-85.6232731,41.9599969]},"n1819790643":{"id":"n1819790643","loc":[-85.6247698,41.9568895]},"n1819790650":{"id":"n1819790650","loc":[-85.6216412,41.9550149]},"n1819790652":{"id":"n1819790652","loc":[-85.6224952,41.9603918]},"n1819790656":{"id":"n1819790656","loc":[-85.61918,41.9555649]},"n1819790661":{"id":"n1819790661","loc":[-85.6200169,41.955505]},"n1819790662":{"id":"n1819790662","loc":[-85.6217389,41.9563149]},"n1819790666":{"id":"n1819790666","loc":[-85.6229566,41.9598373]},"n1819790667":{"id":"n1819790667","loc":[-85.6209117,41.9609189]},"n1819790669":{"id":"n1819790669","loc":[-85.6252311,41.9562353]},"n1819790670":{"id":"n1819790670","loc":[-85.6209758,41.961868]},"n1819790672":{"id":"n1819790672","loc":[-85.6209557,41.9589078]},"n1819790673":{"id":"n1819790673","loc":[-85.6190352,41.9561393]},"n1819790675":{"id":"n1819790675","loc":[-85.6236432,41.9586685]},"n1819790676":{"id":"n1819790676","loc":[-85.6194901,41.9565389]},"n1819790678":{"id":"n1819790678","loc":[-85.6219266,41.9582417]},"n1819790680":{"id":"n1819790680","loc":[-85.6208258,41.9557211]},"n1819790681":{"id":"n1819790681","loc":[-85.6212024,41.9613212]},"n1819790682":{"id":"n1819790682","loc":[-85.624877,41.9559401]},"n1819790684":{"id":"n1819790684","loc":[-85.6206499,41.9583693]},"n1819790699":{"id":"n1819790699","loc":[-85.6215243,41.956279]},"n1819790701":{"id":"n1819790701","loc":[-85.6246625,41.9559321]},"n1819790703":{"id":"n1819790703","loc":[-85.6230478,41.9585089]},"n1819790708":{"id":"n1819790708","loc":[-85.6211102,41.9575402]},"n1819790710":{"id":"n1819790710","loc":[-85.6215082,41.9548468]},"n1819790711":{"id":"n1819790711","loc":[-85.6206552,41.9586007]},"n1819790713":{"id":"n1819790713","loc":[-85.6215404,41.9549705]},"n1819790715":{"id":"n1819790715","loc":[-85.6216906,41.955521]},"n1819790717":{"id":"n1819790717","loc":[-85.6215404,41.9547391]},"n1819790722":{"id":"n1819790722","loc":[-85.6219964,41.9599131]},"n1819790723":{"id":"n1819790723","loc":[-85.622286,41.9606989]},"n1819790725":{"id":"n1819790725","loc":[-85.6228439,41.9572005]},"n1819790727":{"id":"n1819790727","loc":[-85.6202518,41.9554458]},"n1819790728":{"id":"n1819790728","loc":[-85.623434,41.9575276]},"n1819790729":{"id":"n1819790729","loc":[-85.6234287,41.9568576]},"n1819790732":{"id":"n1819790732","loc":[-85.6229566,41.9571369]},"n1819790733":{"id":"n1819790733","loc":[-85.6225543,41.9590275]},"n1819790734":{"id":"n1819790734","loc":[-85.6232892,41.9583135]},"n1819790736":{"id":"n1819790736","loc":[-85.622977,41.9608551]},"n1819790737":{"id":"n1819790737","loc":[-85.624008,41.9569533]},"n1819790741":{"id":"n1819790741","loc":[-85.6212775,41.9608545]},"n1819790742":{"id":"n1819790742","loc":[-85.6231282,41.9569932]},"n1819790743":{"id":"n1819790743","loc":[-85.6224523,41.9591831]},"n1819790744":{"id":"n1819790744","loc":[-85.6210951,41.9610819]},"n1819790745":{"id":"n1819790745","loc":[-85.6220114,41.960544]},"n1819790755":{"id":"n1819790755","loc":[-85.6216369,41.9553854]},"n1819790757":{"id":"n1819790757","loc":[-85.6209986,41.9592709]},"n1819790758":{"id":"n1819790758","loc":[-85.6200437,41.9563468]},"n1819790764":{"id":"n1819790764","loc":[-85.6219363,41.9596823]},"n1819790765":{"id":"n1819790765","loc":[-85.6237612,41.9568496]},"n1819790769":{"id":"n1819790769","loc":[-85.6212389,41.9593433]},"n1819790771":{"id":"n1819790771","loc":[-85.6210726,41.9560123]},"n1819790772":{"id":"n1819790772","loc":[-85.6212711,41.9561838]},"n1819790776":{"id":"n1819790776","loc":[-85.6234437,41.9577795]},"n1819790777":{"id":"n1819790777","loc":[-85.6212502,41.9618599]},"n1819790783":{"id":"n1819790783","loc":[-85.6216895,41.9610585]},"n1819790784":{"id":"n1819790784","loc":[-85.6200115,41.9556367]},"n1819790785":{"id":"n1819790785","loc":[-85.6210576,41.9573002]},"n1819790786":{"id":"n1819790786","loc":[-85.621138,41.9576632]},"n1819790788":{"id":"n1819790788","loc":[-85.6207733,41.9578946]},"n1819790789":{"id":"n1819790789","loc":[-85.6200705,41.9571566]},"n1819790790":{"id":"n1819790790","loc":[-85.6245337,41.9558443]},"n1819790792":{"id":"n1819790792","loc":[-85.621932,41.9608066]},"n1819790793":{"id":"n1819790793","loc":[-85.6233578,41.9581385]},"n1819790794":{"id":"n1819790794","loc":[-85.6204557,41.9555136]},"n1819790797":{"id":"n1819790797","loc":[-85.6235038,41.9576074]},"n1819790800":{"id":"n1819790800","loc":[-85.6214438,41.9607508]},"n1819790801":{"id":"n1819790801","loc":[-85.623492,41.9602129]},"n1819790802":{"id":"n1819790802","loc":[-85.6216691,41.9546553]},"n1819790803":{"id":"n1819790803","loc":[-85.6231057,41.9586851]},"n1819790804":{"id":"n1819790804","loc":[-85.6209224,41.9578673]},"n1819790813":{"id":"n1819790813","loc":[-85.620092,41.9572962]},"n1819790814":{"id":"n1819790814","loc":[-85.6216691,41.9552218]},"n1819790816":{"id":"n1819790816","loc":[-85.6216144,41.9609668]},"n1819790818":{"id":"n1819790818","loc":[-85.6216906,41.9557324]},"n1819790820":{"id":"n1819790820","loc":[-85.6192069,41.9564186]},"n1819790823":{"id":"n1819790823","loc":[-85.6211155,41.9566027]},"n1819790825":{"id":"n1819790825","loc":[-85.6233106,41.9569294]},"n1819790839":{"id":"n1819790839","loc":[-85.625671,41.9564986]},"n1819790842":{"id":"n1819790842","loc":[-85.6235252,41.9567379]},"n1819790844":{"id":"n1819790844","loc":[-85.6253813,41.9566342]},"n1819790847":{"id":"n1819790847","loc":[-85.6200963,41.9567702]},"n1819790849":{"id":"n1819790849","loc":[-85.6238031,41.9587449]},"n1819790851":{"id":"n1819790851","loc":[-85.6234984,41.9584571]},"n1819790856":{"id":"n1819790856","loc":[-85.6242226,41.9570092]},"n1819790865":{"id":"n1819790865","loc":[-85.6200265,41.9569458]},"n1819790869":{"id":"n1819790869","loc":[-85.6230049,41.9601245]},"n1819790871":{"id":"n1819790871","loc":[-85.6190727,41.9558322]},"n1819790873":{"id":"n1819790873","loc":[-85.6217442,41.9550104]},"n1819790875":{"id":"n1819790875","loc":[-85.6208044,41.9587808]},"n1819790879":{"id":"n1819790879","loc":[-85.6198444,41.9574484]},"n1819790883":{"id":"n1819790883","loc":[-85.623713,41.9588719]},"n1819790885":{"id":"n1819790885","loc":[-85.6223289,41.9605075]},"n1819790889":{"id":"n1819790889","loc":[-85.6208044,41.9562437]},"n1819790893":{"id":"n1819790893","loc":[-85.6218183,41.9559684]},"n1819790906":{"id":"n1819790906","loc":[-85.6214052,41.958697]},"n1819790913":{"id":"n1819790913","loc":[-85.6209981,41.9609957]},"n1819790917":{"id":"n1819790917","loc":[-85.6216208,41.9604436]},"n1819790919":{"id":"n1819790919","loc":[-85.6209406,41.9616373]},"n1819790920":{"id":"n1819790920","loc":[-85.6221948,41.9583334]},"n1819790922":{"id":"n1819790922","loc":[-85.6216681,41.9615292]},"n1819790924":{"id":"n1819790924","loc":[-85.6210147,41.9570489]},"n1819790929":{"id":"n1819790929","loc":[-85.6193678,41.955521]},"w17964707":{"id":"w17964707","tags":{"highway":"residential","name":"11th Ave"},"nodes":["n185960682","n185960684","n185960686","n185960688","n185960690"]},"w201484345":{"id":"w201484345","tags":{"bridge":"yes","highway":"residential","name":"E Hoffman St"},"nodes":["n185978791","n185978795"]},"w201484348":{"id":"w201484348","tags":{"highway":"residential","name":"E Hoffman St"},"nodes":["n185978795","n185978800","n185978803","n185978806","n185978808","n185978810","n185978811","n185978813","n185955747","n185978814","n185972054","n185978817"]},"w170843845":{"id":"w170843845","tags":{"landuse":"reservoir","name":"Hoffman Pond","natural":"water"},"nodes":["n1819790732","n1819790742","n1819790825","n1819790729","n1819790842","n1819790765","n1819790737","n1819790856","n1819790643","n1819790596","n1819790844","n1819790839","n1819849190","n1819790619","n1819790613","n1819790669","n1819790550","n1819790682","n1819790701","n1819790790","n1819790532","n1819790887","n1819790740","n1819790831","n1819790545","n1819790664","n1819790621","n1819790861","n1819790730","n1819790683","n1819790802","n1819790717","n1819790710","n1819790713","n1819790650","n1819790873","n1819790814","n1819790755","n1819790715","n1819790818","n1819790602","n1819790893","n1819790662","n1819790699","n1819790772","n1819790771","n1819790680","n1819790794","n1819790727","n1819790628","n1819790661","n1819790784","n1819790610","n1819790626","n1819790929","n1819790656","n1819790871","n1819790673","n1819790566","n1819790820","n1819790676","n1819790598","n1819790556","n1819790558","n1819790879","n1819790608","n1819790813","n1819790789","n1819790865","n1819790847","n1819790758","n1819790548","n1819790539","n1819790889","n1819790557","n1819790586","n1819790571","n1819790823","n1819790546","n1819790924","n1819790785","n1819790708","n1819790786","n1819790561","n1819790804","n1819790788","n1819790684","n1819790711","n1819790875","n1819790672","n1819790569","n1819790757","n1819790769","n1819790603","n1819790906","n1819790553","n1819790536","n1819790678","n1819790920","n1819790600","n1819790733","n1819790743","n1819790567","n1819790764","n1819790722","n1819790638","n1819790917","n1819790800","n1819790741","n1819790667","n1819790913","n1819790744","n1819790816","n1819790591","n1819790745","n1819790885","n1819790652","n1819790588","n1819790617","n1819790551","n1819790666","n1819790869","n1819790630","n1819790723","n1819790792","n1819790783","n1819790681","n1819790919","n1819790593","n1819790670","n1819790777","n1819790922","n1819790562","n1819790736","n1819790565","n1819790801","n1819790538","n1819790640","n1819790616","n1819790572","n1819790620","n1819790883","n1819790849","n1819790675","n1819790851","n1819790803","n1819790611","n1819790703","n1819790734","n1819790793","n1819790614","n1819790581","n1819790776","n1819790797","n1819790728","n1819790584","n1819790624","n1819790604","n1819790725","n1819790732"]},"w206805240":{"id":"w206805240","tags":{"waterway":"river"},"nodes":["n2168544738","n2168544739","n2168544740","n2168544741","n2168544742","n2168544743","n2168544744","n2168544745","n2168544746","n2168544747","n2168544748","n2168544749","n2168544750","n2168544751","n2168544752","n2168544753","n1819848944"]},"n394490429":{"id":"n394490429","loc":[-85.643883,41.954365]},"n185953421":{"id":"n185953421","loc":[-85.641876,41.954946]},"n185953417":{"id":"n185953417","loc":[-85.6418306,41.9551597]},"n185977233":{"id":"n185977233","loc":[-85.642987,41.95486]},"n185977232":{"id":"n185977232","loc":[-85.642894,41.9547842]},"n1475293244":{"id":"n1475293244","loc":[-85.63974,41.9521543]},"n1819848890":{"id":"n1819848890","loc":[-85.6410004,41.9552822]},"n1819848965":{"id":"n1819848965","loc":[-85.6409795,41.9553892]},"n2189015846":{"id":"n2189015846","loc":[-85.6420457,41.9549528]},"n2189015849":{"id":"n2189015849","loc":[-85.6425867,41.9551392]},"n2189015852":{"id":"n2189015852","loc":[-85.6426877,41.9549771]},"n2199109816":{"id":"n2199109816","loc":[-85.6399215,41.9540925]},"n2199109818":{"id":"n2199109818","loc":[-85.6399182,41.9538236]},"n2199109820":{"id":"n2199109820","loc":[-85.6402201,41.9538216]},"n2199109822":{"id":"n2199109822","loc":[-85.640222,41.9539771]},"n2199109825":{"id":"n2199109825","loc":[-85.6402904,41.9539766]},"n2199109827":{"id":"n2199109827","loc":[-85.6402918,41.95409]},"n2199109829":{"id":"n2199109829","loc":[-85.6395845,41.9544626]},"n2199109831":{"id":"n2199109831","loc":[-85.6395792,41.9540671]},"n2199109833":{"id":"n2199109833","loc":[-85.6397173,41.9540661]},"n2199109835":{"id":"n2199109835","loc":[-85.6397226,41.9544616]},"n2199109837":{"id":"n2199109837","loc":[-85.6399641,41.9545058]},"n2199109839":{"id":"n2199109839","loc":[-85.6399637,41.9541859]},"n2199109841":{"id":"n2199109841","loc":[-85.6401098,41.9541858]},"n2199109843":{"id":"n2199109843","loc":[-85.64011,41.9543272]},"n2199109845":{"id":"n2199109845","loc":[-85.6400783,41.9543273]},"n2199109847":{"id":"n2199109847","loc":[-85.6400785,41.9545058]},"n2199109853":{"id":"n2199109853","loc":[-85.6396184,41.9554049]},"n2199109855":{"id":"n2199109855","loc":[-85.6396825,41.9553713]},"n185949745":{"id":"n185949745","loc":[-85.6442727,41.9553112]},"n185949748":{"id":"n185949748","loc":[-85.6448804,41.9555238]},"n185949755":{"id":"n185949755","loc":[-85.6420011,41.9603536]},"n185949763":{"id":"n185949763","loc":[-85.6408843,41.9555822]},"n185949765":{"id":"n185949765","loc":[-85.6414548,41.9557751]},"n185952158":{"id":"n185952158","loc":[-85.640066,41.956854]},"n185952160":{"id":"n185952160","loc":[-85.639848,41.957229]},"n185952161":{"id":"n185952161","loc":[-85.6396089,41.9576192]},"n185952163":{"id":"n185952163","loc":[-85.63892,41.957957]},"n185953413":{"id":"n185953413","loc":[-85.64162,41.955475]},"n185971651":{"id":"n185971651","loc":[-85.6440766,41.9543462]},"n185977234":{"id":"n185977234","loc":[-85.645044,41.955581]},"n394490395":{"id":"n394490395","loc":[-85.657336,41.936762]},"n394490396":{"id":"n394490396","loc":[-85.653896,41.936978]},"n394490397":{"id":"n394490397","loc":[-85.653732,41.937386]},"n394490398":{"id":"n394490398","loc":[-85.65182,41.937378]},"n394490399":{"id":"n394490399","loc":[-85.651843,41.938445]},"n394490400":{"id":"n394490400","loc":[-85.652536,41.938447]},"n394490401":{"id":"n394490401","loc":[-85.652533,41.938901]},"n394490402":{"id":"n394490402","loc":[-85.652084,41.9389]},"n394490403":{"id":"n394490403","loc":[-85.6521,41.939627]},"n394490404":{"id":"n394490404","loc":[-85.652301,41.939628]},"n394490405":{"id":"n394490405","loc":[-85.652302,41.939755]},"n394490406":{"id":"n394490406","loc":[-85.652783,41.939747]},"n394490407":{"id":"n394490407","loc":[-85.652835,41.94112]},"n394490408":{"id":"n394490408","loc":[-85.651968,41.941123]},"n394490409":{"id":"n394490409","loc":[-85.651983,41.941969]},"n394490410":{"id":"n394490410","loc":[-85.652908,41.941961]},"n394490411":{"id":"n394490411","loc":[-85.65292,41.94278]},"n394490412":{"id":"n394490412","loc":[-85.651698,41.942816]},"n394490413":{"id":"n394490413","loc":[-85.651509,41.942823]},"n394490414":{"id":"n394490414","loc":[-85.651272,41.942837]},"n394490415":{"id":"n394490415","loc":[-85.651272,41.943325]},"n394490416":{"id":"n394490416","loc":[-85.65122,41.944053]},"n394490417":{"id":"n394490417","loc":[-85.651193,41.944449]},"n394490418":{"id":"n394490418","loc":[-85.651088,41.944969]},"n394490419":{"id":"n394490419","loc":[-85.650949,41.945554]},"n394490420":{"id":"n394490420","loc":[-85.650907,41.945719]},"n394490421":{"id":"n394490421","loc":[-85.650808,41.946016]},"n394490422":{"id":"n394490422","loc":[-85.650712,41.946516]},"n394490423":{"id":"n394490423","loc":[-85.650493,41.947166]},"n394490424":{"id":"n394490424","loc":[-85.650626,41.947213]},"n394490425":{"id":"n394490425","loc":[-85.650201,41.948109]},"n394490426":{"id":"n394490426","loc":[-85.649868,41.948797]},"n394490427":{"id":"n394490427","loc":[-85.649669,41.949161]},"n394490428":{"id":"n394490428","loc":[-85.64659,41.954067]},"n394490430":{"id":"n394490430","loc":[-85.644034,41.95444]},"n394490431":{"id":"n394490431","loc":[-85.644248,41.954507]},"n394490432":{"id":"n394490432","loc":[-85.64491,41.954481]},"n394490433":{"id":"n394490433","loc":[-85.645213,41.954433]},"n394490434":{"id":"n394490434","loc":[-85.645426,41.954477]},"n394490435":{"id":"n394490435","loc":[-85.6458,41.954704]},"n394490436":{"id":"n394490436","loc":[-85.64605,41.954804]},"n394490437":{"id":"n394490437","loc":[-85.646125,41.954817]},"n394490438":{"id":"n394490438","loc":[-85.646002,41.954997]},"n394490439":{"id":"n394490439","loc":[-85.645764,41.955366]},"n394490440":{"id":"n394490440","loc":[-85.645525,41.955734]},"n394490441":{"id":"n394490441","loc":[-85.64443,41.957424]},"n394490442":{"id":"n394490442","loc":[-85.641712,41.961723]},"n394490443":{"id":"n394490443","loc":[-85.640747,41.963246]},"n394490444":{"id":"n394490444","loc":[-85.637803,41.967894]},"n394490445":{"id":"n394490445","loc":[-85.637673,41.967861]},"n394490446":{"id":"n394490446","loc":[-85.636637,41.969275]},"n394490447":{"id":"n394490447","loc":[-85.634923,41.969269]},"n394490448":{"id":"n394490448","loc":[-85.634893,41.968537]},"n394490449":{"id":"n394490449","loc":[-85.634544,41.96927]},"n394490450":{"id":"n394490450","loc":[-85.630835,41.969274]},"n394490451":{"id":"n394490451","loc":[-85.630834,41.968348]},"n394490452":{"id":"n394490452","loc":[-85.630857,41.968179]},"n394490453":{"id":"n394490453","loc":[-85.630924,41.968044]},"n394490454":{"id":"n394490454","loc":[-85.631004,41.967925]},"n394490455":{"id":"n394490455","loc":[-85.631143,41.967811]},"n394490456":{"id":"n394490456","loc":[-85.631311,41.967736]},"n394490457":{"id":"n394490457","loc":[-85.631595,41.967693]},"n394490458":{"id":"n394490458","loc":[-85.63325,41.967702]},"n394490459":{"id":"n394490459","loc":[-85.633247,41.967021]},"n394490460":{"id":"n394490460","loc":[-85.634858,41.967021]},"n394490461":{"id":"n394490461","loc":[-85.634865,41.967711]},"n394490462":{"id":"n394490462","loc":[-85.634884,41.968231]},"n394490463":{"id":"n394490463","loc":[-85.636559,41.963867]},"n394490464":{"id":"n394490464","loc":[-85.634832,41.963866]},"n394490465":{"id":"n394490465","loc":[-85.63481,41.961899]},"n394490466":{"id":"n394490466","loc":[-85.637219,41.961842]},"n394490467":{"id":"n394490467","loc":[-85.637837,41.960019]},"n394490468":{"id":"n394490468","loc":[-85.637459,41.960022]},"n394490469":{"id":"n394490469","loc":[-85.635295,41.959987]},"n394490470":{"id":"n394490470","loc":[-85.634783,41.959979]},"n394490471":{"id":"n394490471","loc":[-85.634776,41.959834]},"n394490472":{"id":"n394490472","loc":[-85.634767,41.959009]},"n394490473":{"id":"n394490473","loc":[-85.634763,41.958292]},"n394490474":{"id":"n394490474","loc":[-85.633346,41.958287]},"n394490475":{"id":"n394490475","loc":[-85.632128,41.9583]},"n394490476":{"id":"n394490476","loc":[-85.631414,41.958318]},"n394490477":{"id":"n394490477","loc":[-85.63137,41.959033]},"n394490478":{"id":"n394490478","loc":[-85.631325,41.959753]},"n394490479":{"id":"n394490479","loc":[-85.631494,41.95977]},"n394490480":{"id":"n394490480","loc":[-85.631456,41.960673]},"n394490481":{"id":"n394490481","loc":[-85.631421,41.961494]},"n394490482":{"id":"n394490482","loc":[-85.631404,41.961887]},"n394490483":{"id":"n394490483","loc":[-85.631401,41.961968]},"n394490484":{"id":"n394490484","loc":[-85.630962,41.961967]},"n394490485":{"id":"n394490485","loc":[-85.6299,41.961973]},"n394490486":{"id":"n394490486","loc":[-85.624929,41.962002]},"n394490487":{"id":"n394490487","loc":[-85.623333,41.961987]},"n394490488":{"id":"n394490488","loc":[-85.621894,41.963956]},"n394490489":{"id":"n394490489","loc":[-85.62131,41.963727]},"n394490490":{"id":"n394490490","loc":[-85.621216,41.963868]},"n394490491":{"id":"n394490491","loc":[-85.620356,41.965119]},"n394490492":{"id":"n394490492","loc":[-85.620848,41.965341]},"n394490493":{"id":"n394490493","loc":[-85.620684,41.965558]},"n394490494":{"id":"n394490494","loc":[-85.620621,41.965658]},"n394490495":{"id":"n394490495","loc":[-85.618165,41.965759]},"n394490496":{"id":"n394490496","loc":[-85.618071,41.965759]},"n394490497":{"id":"n394490497","loc":[-85.617986,41.965759]},"n394490498":{"id":"n394490498","loc":[-85.605673,41.965764]},"n394490499":{"id":"n394490499","loc":[-85.605668,41.963548]},"n394490500":{"id":"n394490500","loc":[-85.605664,41.962094]},"n394490501":{"id":"n394490501","loc":[-85.595828,41.962159]},"n394490502":{"id":"n394490502","loc":[-85.587869,41.962169]},"n394490503":{"id":"n394490503","loc":[-85.586289,41.962179]},"n394490504":{"id":"n394490504","loc":[-85.583774,41.962178]},"n394490505":{"id":"n394490505","loc":[-85.583774,41.961789]},"n394490506":{"id":"n394490506","loc":[-85.581303,41.961783]},"n394490507":{"id":"n394490507","loc":[-85.581304,41.961616]},"n394490508":{"id":"n394490508","loc":[-85.581292,41.961616]},"n394490509":{"id":"n394490509","loc":[-85.581247,41.959244]},"n394490510":{"id":"n394490510","loc":[-85.581245,41.958394]},"n394490511":{"id":"n394490511","loc":[-85.581276,41.958372]},"n394490512":{"id":"n394490512","loc":[-85.581302,41.958353]},"n394490513":{"id":"n394490513","loc":[-85.581376,41.9583]},"n394490514":{"id":"n394490514","loc":[-85.582256,41.957663]},"n394490515":{"id":"n394490515","loc":[-85.585299,41.955483]},"n394490516":{"id":"n394490516","loc":[-85.585588,41.955331]},"n394490517":{"id":"n394490517","loc":[-85.586053,41.955163]},"n394490518":{"id":"n394490518","loc":[-85.58632,41.955076]},"n394490519":{"id":"n394490519","loc":[-85.586478,41.955025]},"n394490520":{"id":"n394490520","loc":[-85.58692,41.954947]},"n394490521":{"id":"n394490521","loc":[-85.587327,41.954914]},"n394490522":{"id":"n394490522","loc":[-85.587345,41.954913]},"n394490523":{"id":"n394490523","loc":[-85.587358,41.954913]},"n394490524":{"id":"n394490524","loc":[-85.58963,41.954877]},"n394490525":{"id":"n394490525","loc":[-85.591077,41.954865]},"n394490526":{"id":"n394490526","loc":[-85.594824,41.954843]},"n394490527":{"id":"n394490527","loc":[-85.594804,41.95331]},"n394490528":{"id":"n394490528","loc":[-85.599336,41.95331]},"n394490529":{"id":"n394490529","loc":[-85.599336,41.954825]},"n394490530":{"id":"n394490530","loc":[-85.597828,41.954839]},"n394490531":{"id":"n394490531","loc":[-85.597833,41.95614]},"n394490532":{"id":"n394490532","loc":[-85.596586,41.956151]},"n394490533":{"id":"n394490533","loc":[-85.596586,41.956394]},"n394490534":{"id":"n394490534","loc":[-85.595933,41.956394]},"n394490535":{"id":"n394490535","loc":[-85.595933,41.958176]},"n394490536":{"id":"n394490536","loc":[-85.597635,41.958179]},"n394490537":{"id":"n394490537","loc":[-85.597717,41.958177]},"n394490538":{"id":"n394490538","loc":[-85.601671,41.958194]},"n394490539":{"id":"n394490539","loc":[-85.605619,41.958194]},"n394490540":{"id":"n394490540","loc":[-85.608054,41.958187]},"n394490542":{"id":"n394490542","loc":[-85.6080762,41.9547864]},"n394490545":{"id":"n394490545","loc":[-85.6104354,41.9548263]},"n394490546":{"id":"n394490546","loc":[-85.610274,41.951106]},"n394490547":{"id":"n394490547","loc":[-85.610278,41.950829]},"n394490548":{"id":"n394490548","loc":[-85.610309,41.948377]},"n394490549":{"id":"n394490549","loc":[-85.610314,41.947986]},"n394490550":{"id":"n394490550","loc":[-85.610464,41.947985]},"n394490551":{"id":"n394490551","loc":[-85.610447,41.947468]},"n394490552":{"id":"n394490552","loc":[-85.612469,41.947471]},"n394490553":{"id":"n394490553","loc":[-85.612494,41.945576]},"n394490554":{"id":"n394490554","loc":[-85.610292,41.94558]},"n394490555":{"id":"n394490555","loc":[-85.608412,41.945625]},"n394490556":{"id":"n394490556","loc":[-85.608412,41.943036]},"n394490557":{"id":"n394490557","loc":[-85.608702,41.943087]},"n394490558":{"id":"n394490558","loc":[-85.609196,41.943224]},"n394490559":{"id":"n394490559","loc":[-85.609571,41.943263]},"n394490560":{"id":"n394490560","loc":[-85.610116,41.943295]},"n394490561":{"id":"n394490561","loc":[-85.610273,41.943275]},"n394490562":{"id":"n394490562","loc":[-85.611339,41.943075]},"n394490563":{"id":"n394490563","loc":[-85.611575,41.942997]},"n394490564":{"id":"n394490564","loc":[-85.611847,41.942849]},"n394490565":{"id":"n394490565","loc":[-85.612164,41.942568]},"n394490566":{"id":"n394490566","loc":[-85.612341,41.942529]},"n394490567":{"id":"n394490567","loc":[-85.612562,41.942524]},"n394490568":{"id":"n394490568","loc":[-85.612768,41.942546]},"n394490569":{"id":"n394490569","loc":[-85.612938,41.942633]},"n394490570":{"id":"n394490570","loc":[-85.6131,41.942782]},"n394490571":{"id":"n394490571","loc":[-85.613299,41.942919]},"n394490572":{"id":"n394490572","loc":[-85.613498,41.942996]},"n394490573":{"id":"n394490573","loc":[-85.614698,41.942842]},"n394490574":{"id":"n394490574","loc":[-85.615288,41.942698]},"n394490575":{"id":"n394490575","loc":[-85.616054,41.942693]},"n394490576":{"id":"n394490576","loc":[-85.61603,41.942175]},"n394490577":{"id":"n394490577","loc":[-85.616004,41.941741]},"n394490578":{"id":"n394490578","loc":[-85.615994,41.940156]},"n394490579":{"id":"n394490579","loc":[-85.615144,41.940159]},"n394490580":{"id":"n394490580","loc":[-85.614915,41.940161]},"n394490582":{"id":"n394490582","loc":[-85.614875,41.938532]},"n394490583":{"id":"n394490583","loc":[-85.616167,41.938787]},"n394490585":{"id":"n394490585","loc":[-85.616176,41.938589]},"n394490586":{"id":"n394490586","loc":[-85.614537,41.938282]},"n394490588":{"id":"n394490588","loc":[-85.610141,41.937459]},"n394490589":{"id":"n394490589","loc":[-85.610172,41.937298]},"n394490590":{"id":"n394490590","loc":[-85.609918,41.935495]},"n394490592":{"id":"n394490592","loc":[-85.610092,41.935451]},"n394490594":{"id":"n394490594","loc":[-85.610681,41.935247]},"n394490595":{"id":"n394490595","loc":[-85.611446,41.934955]},"n394490596":{"id":"n394490596","loc":[-85.612057,41.934696]},"n394490598":{"id":"n394490598","loc":[-85.613256,41.934084]},"n394490599":{"id":"n394490599","loc":[-85.613948,41.933682]},"n394490601":{"id":"n394490601","loc":[-85.61436,41.933417]},"n394490602":{"id":"n394490602","loc":[-85.614638,41.933212]},"n394490604":{"id":"n394490604","loc":[-85.615249,41.9332]},"n394490605":{"id":"n394490605","loc":[-85.618218,41.933223]},"n394490607":{"id":"n394490607","loc":[-85.618241,41.933479]},"n394490608":{"id":"n394490608","loc":[-85.618257,41.93365]},"n394490609":{"id":"n394490609","loc":[-85.618298,41.935067]},"n394490611":{"id":"n394490611","loc":[-85.619791,41.935067]},"n394490612":{"id":"n394490612","loc":[-85.619794,41.933301]},"n394490613":{"id":"n394490613","loc":[-85.619795,41.932692]},"n394490614":{"id":"n394490614","loc":[-85.619729,41.929517]},"n394490615":{"id":"n394490615","loc":[-85.619801,41.929305]},"n394490616":{"id":"n394490616","loc":[-85.619809,41.927391]},"n394490617":{"id":"n394490617","loc":[-85.620883,41.927378]},"n394490618":{"id":"n394490618","loc":[-85.620988,41.927368]},"n394490619":{"id":"n394490619","loc":[-85.621076,41.927368]},"n394490620":{"id":"n394490620","loc":[-85.621156,41.927376]},"n394490621":{"id":"n394490621","loc":[-85.621685,41.92737]},"n394490622":{"id":"n394490622","loc":[-85.624716,41.927359]},"n394490623":{"id":"n394490623","loc":[-85.625308,41.92737]},"n394490624":{"id":"n394490624","loc":[-85.625655,41.927377]},"n394490625":{"id":"n394490625","loc":[-85.625093,41.925591]},"n394490626":{"id":"n394490626","loc":[-85.625174,41.92559]},"n394490627":{"id":"n394490627","loc":[-85.625249,41.925597]},"n394490628":{"id":"n394490628","loc":[-85.625532,41.925604]},"n394490629":{"id":"n394490629","loc":[-85.625761,41.925597]},"n394490630":{"id":"n394490630","loc":[-85.625955,41.926153]},"n394490631":{"id":"n394490631","loc":[-85.626209,41.926155]},"n394490632":{"id":"n394490632","loc":[-85.627757,41.926151]},"n394490633":{"id":"n394490633","loc":[-85.627825,41.926298]},"n394490634":{"id":"n394490634","loc":[-85.627994,41.926315]},"n394490635":{"id":"n394490635","loc":[-85.628049,41.927196]},"n394490636":{"id":"n394490636","loc":[-85.62949,41.927221]},"n394490637":{"id":"n394490637","loc":[-85.629602,41.927277]},"n394490638":{"id":"n394490638","loc":[-85.6297102,41.9273279]},"n394490639":{"id":"n394490639","loc":[-85.630958,41.927398]},"n394490699":{"id":"n394490699","loc":[-85.632741,41.927388]},"n394490700":{"id":"n394490700","loc":[-85.632997,41.927391]},"n394490701":{"id":"n394490701","loc":[-85.633149,41.927393]},"n394490702":{"id":"n394490702","loc":[-85.633334,41.927393]},"n394490703":{"id":"n394490703","loc":[-85.633468,41.927561]},"n394490704":{"id":"n394490704","loc":[-85.633563,41.927755]},"n394490705":{"id":"n394490705","loc":[-85.633662,41.928192]},"n394490706":{"id":"n394490706","loc":[-85.633679,41.928807]},"n394490707":{"id":"n394490707","loc":[-85.633687,41.929107]},"n394490708":{"id":"n394490708","loc":[-85.633927,41.929109]},"n394490709":{"id":"n394490709","loc":[-85.634126,41.929111]},"n394490710":{"id":"n394490710","loc":[-85.634207,41.92911]},"n394490711":{"id":"n394490711","loc":[-85.634323,41.929111]},"n394490712":{"id":"n394490712","loc":[-85.636712,41.929128]},"n394490713":{"id":"n394490713","loc":[-85.63808,41.9291]},"n394490714":{"id":"n394490714","loc":[-85.639213,41.929088]},"n394490715":{"id":"n394490715","loc":[-85.639189,41.92852]},"n394490716":{"id":"n394490716","loc":[-85.639204,41.925488]},"n394490717":{"id":"n394490717","loc":[-85.644204,41.925452]},"n394490718":{"id":"n394490718","loc":[-85.651425,41.925406]},"n394490719":{"id":"n394490719","loc":[-85.651449,41.926321]},"n394490720":{"id":"n394490720","loc":[-85.651451,41.926969]},"n394490721":{"id":"n394490721","loc":[-85.651458,41.928052]},"n394490722":{"id":"n394490722","loc":[-85.651446,41.928892]},"n394490723":{"id":"n394490723","loc":[-85.651456,41.929447]},"n394490724":{"id":"n394490724","loc":[-85.651707,41.929454]},"n394490725":{"id":"n394490725","loc":[-85.652369,41.929473]},"n394490726":{"id":"n394490726","loc":[-85.6525,41.929452]},"n394490727":{"id":"n394490727","loc":[-85.654066,41.92946]},"n394490728":{"id":"n394490728","loc":[-85.654816,41.92946]},"n394490729":{"id":"n394490729","loc":[-85.654816,41.930337]},"n394490730":{"id":"n394490730","loc":[-85.654587,41.930337]},"n394490731":{"id":"n394490731","loc":[-85.654548,41.931072]},"n394490732":{"id":"n394490732","loc":[-85.654538,41.931701]},"n394490733":{"id":"n394490733","loc":[-85.654898,41.931689]},"n394490734":{"id":"n394490734","loc":[-85.654898,41.932505]},"n394490735":{"id":"n394490735","loc":[-85.654854,41.932514]},"n394490736":{"id":"n394490736","loc":[-85.655497,41.932499]},"n394490737":{"id":"n394490737","loc":[-85.656405,41.932493]},"n394490738":{"id":"n394490738","loc":[-85.656422,41.933416]},"n394490739":{"id":"n394490739","loc":[-85.657322,41.933438]},"n1475293233":{"id":"n1475293233","loc":[-85.6385522,41.9585167]},"n1475293242":{"id":"n1475293242","loc":[-85.64609,41.9540815]},"n1475293249":{"id":"n1475293249","loc":[-85.6358079,41.9692721]},"n1475293256":{"id":"n1475293256","loc":[-85.6387369,41.9581583]},"n1475293259":{"id":"n1475293259","loc":[-85.6455882,41.9541138]},"n1475293266":{"id":"n1475293266","loc":[-85.6451008,41.9541821]},"n1819800253":{"id":"n1819800253","loc":[-85.6134286,41.9429692]},"n2114807558":{"id":"n2114807558","loc":[-85.6365609,41.963866],"tags":{"railway":"level_crossing"}},"n2189015728":{"id":"n2189015728","loc":[-85.6383956,41.9590576]},"n2189015838":{"id":"n2189015838","loc":[-85.6435144,41.9563705]},"n2189015842":{"id":"n2189015842","loc":[-85.6415782,41.9557035]},"n2189015855":{"id":"n2189015855","loc":[-85.6440829,41.9554577]},"n2199109849":{"id":"n2199109849","loc":[-85.6393434,41.9565591]},"n2199109851":{"id":"n2199109851","loc":[-85.6393208,41.9565002]},"n2199109857":{"id":"n2199109857","loc":[-85.6401986,41.955545]},"n2199109859":{"id":"n2199109859","loc":[-85.6402362,41.955587]},"n2199109861":{"id":"n2199109861","loc":[-85.6395958,41.9565675]},"n2199109863":{"id":"n2199109863","loc":[-85.639528,41.9566011]},"w209717053":{"id":"w209717053","tags":{"area":"yes","building":"yes"},"nodes":["n2199109829","n2199109831","n2199109833","n2199109835","n2199109829"]},"w17966415":{"id":"w17966415","tags":{"access":"private","highway":"service","name":"Manufacturing Way"},"nodes":["n185971642","n185977232","n185977233","n185949745","n185949748","n185977234"]},"w209717054":{"id":"w209717054","tags":{"area":"yes","building":"yes"},"nodes":["n2199109837","n2199109839","n2199109841","n2199109843","n2199109845","n2199109847","n2199109837"]},"w208627214":{"id":"w208627214","tags":{"highway":"service"},"nodes":["n185949755","n2189015728","n1475293233","n1475293256","n185952163","n185952161","n185952160","n185952158","n185949763","n1819848965","n1819848890","n185952156"]},"w17963817":{"id":"w17963817","tags":{"access":"private","highway":"service"},"nodes":["n185949765","n185953413","n185953417","n185953421","n185953423"]},"w34369809":{"id":"w34369809","tags":{"admin_level":"8","boundary":"administrative","landuse":"residential"},"nodes":["n394490395","n394490396","n394490397","n394490398","n394490399","n394490400","n394490401","n394490402","n394490403","n394490404","n394490405","n394490406","n394490407","n394490408","n394490409","n394490410","n394490411","n394490412","n394490413","n394490414","n394490415","n394490416","n394490417","n394490418","n394490419","n394490420","n394490421","n394490422","n394490423","n394490424","n394490425","n394490426","n394490427","n394490428","n1475293242","n1475293259","n1475293266","n394490429","n394490430","n394490431","n394490432","n394490433","n394490434","n394490435","n394490436","n394490437","n394490438","n394490439","n394490440","n394490441","n394490442","n394490443","n394490444","n394490445","n394490446","n1475293249","n394490447","n394490448","n394490449","n394490450","n394490451","n394490452","n394490453","n394490454","n394490455","n394490456","n394490457","n394490458","n394490459","n394490460","n394490461","n394490462","n2114807558","n394490463","n1475293226","n394490464","n394490465","n394490466","n394490467","n394490468","n394490469","n394490470","n394490471","n394490472","n394490473","n394490474","n394490475","n394490476","n394490477","n394490478","n394490479","n394490480","n394490481","n394490482","n394490483","n394490484","n394490485","n394490486","n394490487","n394490488","n394490489","n394490490","n394490491","n394490492","n394490493","n394490494","n394490495","n394490496","n394490497","n394490498","n394490499","n394490500","n394490501","n394490502","n394490503","n394490504","n394490505","n394490506","n394490507","n394490508","n394490509","n394490510","n394490511","n394490512","n394490513","n394490514","n394490515","n394490516","n394490517","n394490518","n394490519","n394490520","n394490521","n394490522","n394490523","n394490524","n394490525","n394490526","n394490527","n394490528","n394490529","n394490530","n394490531","n394490532","n394490533","n394490534","n394490535","n394490536","n394490537","n394490538","n394490539","n394490540","n394490542","n394490545","n394490546","n394490547","n394490548","n394490549","n394490550","n394490551","n394490552","n394490553","n394490554","n394490555","n394490556","n394490557","n394490558","n394490559","n394490560","n394490561","n394490562","n394490563","n394490564","n394490565","n394490566","n394490567","n394490568","n394490569","n394490570","n394490571","n1819800253","n394490572","n394490573","n394490574","n394490575","n394490576","n394490577","n394490578","n394490579","n394490580","n394490582","n394490583","n394490585","n394490586","n394490588","n394490589","n394490590","n394490592","n394490594","n394490595","n394490596","n394490598","n394490599","n394490601","n394490602","n394490604","n394490605","n394490607","n394490608","n394490609","n394490611","n394490612","n394490613","n394490614","n394490615","n394490616","n394490617","n394490618","n394490619","n394490620","n394490621","n394490622","n394490623","n394490624","n394490625","n394490626","n394490627","n394490628","n394490629","n394490630","n394490631","n394490632","n394490633","n394490634","n394490635","n394490636","n394490637","n394490638","n394490639","n394490699","n394490700","n394490701","n394490702","n394490703","n394490704","n394490705","n394490706","n394490707","n394490708","n394490709","n394490710","n394490711","n394490712","n394490713","n394490714","n394490715","n394490716","n394490717","n394490718","n394490719","n394490720","n394490721","n394490722","n394490723","n394490724","n394490725","n394490726","n394490727","n394490728","n394490729","n394490730","n394490731","n394490732","n394490733","n394490734","n394490735","n394490736","n394490737","n394490738","n394490739","n394490395"]},"w208627221":{"id":"w208627221","tags":{"amenity":"parking","area":"yes"},"nodes":["n2189015838","n2189015842","n2189015846","n2189015849","n2189015852","n2189015855","n2189015838"]},"w209717052":{"id":"w209717052","tags":{"area":"yes","building":"yes"},"nodes":["n2199109816","n2199109818","n2199109820","n2199109822","n2199109825","n2199109827","n2199109816"]},"w134151784":{"id":"w134151784","tags":{"bridge":"yes","highway":"residential","name":"W Hoffman St"},"nodes":["n185971648","n185971651"]},"w209717055":{"id":"w209717055","tags":{"area":"yes","landuse":"basin"},"nodes":["n2199109849","n2199109851","n2199109853","n2199109855","n2199109857","n2199109859","n2199109861","n2199109863","n2199109849"]},"w17967763":{"id":"w17967763","tags":{"highway":"residential","name":"Rock River Ave"},"nodes":["n1475293244","n185982166","n185975067","n185971637"]},"r134949":{"id":"r134949","tags":{"admin_level":"8","border_type":"city","boundary":"administrative","name":"Three Rivers","place":"city","type":"boundary"},"members":[{"id":"w34369809","type":"way","role":"outer"},{"id":"w34369821","type":"way","role":"outer"},{"id":"w34369822","type":"way","role":"outer"},{"id":"w34369823","type":"way","role":"outer"},{"id":"w34369824","type":"way","role":"outer"},{"id":"w34369825","type":"way","role":"outer"},{"id":"w34369826","type":"way","role":"outer"},{"id":"w34369810","type":"way","role":"inner"},{"id":"w34369811","type":"way","role":"inner"},{"id":"w34369812","type":"way","role":"inner"},{"id":"w34367079","type":"way","role":"inner"},{"id":"w34369814","type":"way","role":"inner"},{"id":"w34367080","type":"way","role":"inner"},{"id":"w34369815","type":"way","role":"inner"},{"id":"w34369820","type":"way","role":"inner"}]},"n1819848881":{"id":"n1819848881","loc":[-85.638562,41.9569965]},"n1819848947":{"id":"n1819848947","loc":[-85.6384348,41.9576565]},"n1819849044":{"id":"n1819849044","loc":[-85.6385749,41.9573345]},"n2114807547":{"id":"n2114807547","loc":[-85.6384626,41.9583756]},"n2114807564":{"id":"n2114807564","loc":[-85.638535,41.9581283]},"n2189015691":{"id":"n2189015691","loc":[-85.6435584,41.9565243]},"n2189015696":{"id":"n2189015696","loc":[-85.6435805,41.9566049]},"n2189015722":{"id":"n2189015722","loc":[-85.6435035,41.9567438]},"n2189015744":{"id":"n2189015744","loc":[-85.6437991,41.9569582]},"n2189015747":{"id":"n2189015747","loc":[-85.6433042,41.9567742]},"n2189015750":{"id":"n2189015750","loc":[-85.6433827,41.9566844]},"n2189015753":{"id":"n2189015753","loc":[-85.6430447,41.9565588]},"n2189015756":{"id":"n2189015756","loc":[-85.6431111,41.956451]},"n2189015759":{"id":"n2189015759","loc":[-85.6420247,41.956083]},"n2189015760":{"id":"n2189015760","loc":[-85.6419945,41.9561369]},"n2189015764":{"id":"n2189015764","loc":[-85.6413729,41.9558945]},"n2189015766":{"id":"n2189015766","loc":[-85.6412884,41.9560606]},"n2189015770":{"id":"n2189015770","loc":[-85.6411798,41.9560112]},"n2189015771":{"id":"n2189015771","loc":[-85.6410651,41.9562132]},"n2189015774":{"id":"n2189015774","loc":[-85.6409504,41.9561728]},"n2189015778":{"id":"n2189015778","loc":[-85.6407996,41.9564241]},"n2189015781":{"id":"n2189015781","loc":[-85.6406889,41.9563892]},"n2189015785":{"id":"n2189015785","loc":[-85.6404857,41.9567024]},"n2189015789":{"id":"n2189015789","loc":[-85.6406909,41.9567877]},"n2189015793":{"id":"n2189015793","loc":[-85.6405642,41.9570165]},"n2189015796":{"id":"n2189015796","loc":[-85.6415359,41.9573711]},"n2189015800":{"id":"n2189015800","loc":[-85.6411738,41.9579501]},"n2189015804":{"id":"n2189015804","loc":[-85.6411119,41.957921]},"n2189015808":{"id":"n2189015808","loc":[-85.6403186,41.9591751]},"n2189015909":{"id":"n2189015909","loc":[-85.6389293,41.9564636]},"n2189015926":{"id":"n2189015926","loc":[-85.6385431,41.9564617]},"n2189015929":{"id":"n2189015929","loc":[-85.6385457,41.9561823]},"n2189015932":{"id":"n2189015932","loc":[-85.6389319,41.9561843]},"n2199109865":{"id":"n2199109865","loc":[-85.6400768,41.956776]},"n2199109867":{"id":"n2199109867","loc":[-85.639902,41.9567153]},"n2199109869":{"id":"n2199109869","loc":[-85.640004,41.956553]},"n2199109871":{"id":"n2199109871","loc":[-85.6401788,41.9566137]},"n2199109873":{"id":"n2199109873","loc":[-85.6399316,41.9564506],"tags":{"man_made":"water_tower"}},"n2199109876":{"id":"n2199109876","loc":[-85.6397689,41.9572354]},"n2199109878":{"id":"n2199109878","loc":[-85.6399229,41.9569826]},"n2199109880":{"id":"n2199109880","loc":[-85.639706,41.9569095]},"n2199109882":{"id":"n2199109882","loc":[-85.639552,41.9571623]},"n2199109884":{"id":"n2199109884","loc":[-85.6391028,41.9569517]},"n2199109886":{"id":"n2199109886","loc":[-85.6392876,41.956646]},"n2199109888":{"id":"n2199109888","loc":[-85.639484,41.9567117]},"n2199109889":{"id":"n2199109889","loc":[-85.6394322,41.9567973]},"n2199109890":{"id":"n2199109890","loc":[-85.6393718,41.9567771]},"n2199109891":{"id":"n2199109891","loc":[-85.6392387,41.9569972]},"n1819848900":{"id":"n1819848900","loc":[-85.638281,41.9576578]},"n1819848978":{"id":"n1819848978","loc":[-85.6377186,41.9580867]},"n1819849039":{"id":"n1819849039","loc":[-85.6384217,41.9573405]},"n1819849050":{"id":"n1819849050","loc":[-85.6377011,41.9570042]},"n1819849088":{"id":"n1819849088","loc":[-85.6382879,41.9580817]},"n2114807549":{"id":"n2114807549","loc":[-85.6362551,41.96473]},"n2114807587":{"id":"n2114807587","loc":[-85.6368694,41.9629829]},"n2189015725":{"id":"n2189015725","loc":[-85.644156,41.9569753]},"n2189015741":{"id":"n2189015741","loc":[-85.6419825,41.9597632]},"w208627217":{"id":"w208627217","tags":{"area":"yes","building":"yes"},"nodes":["n2189015741","n2189015744","n2189015747","n2189015750","n2189015753","n2189015756","n2189015759","n2189015760","n2189015764","n2189015766","n2189015770","n2189015771","n2189015774","n2189015778","n2189015781","n2189015785","n2189015789","n2189015793","n2189015796","n2189015800","n2189015804","n2189015808","n2189015741"]},"w208627212":{"id":"w208627212","tags":{"highway":"service"},"nodes":["n2189015691","n2189015696","n2189015722","n2189015725"]},"w209717057":{"id":"w209717057","tags":{"area":"yes","building":"yes"},"nodes":["n2199109876","n2199109878","n2199109880","n2199109882","n2199109876"]},"w209717056":{"id":"w209717056","tags":{"area":"yes","building":"yes"},"nodes":["n2199109865","n2199109867","n2199109869","n2199109871","n2199109865"]},"w208627231":{"id":"w208627231","tags":{"area":"yes","building":"yes"},"nodes":["n2189015909","n2189015926","n2189015929","n2189015932","n2189015909"]},"w170848326":{"id":"w170848326","tags":{"building":"yes"},"nodes":["n1819848881","n1819849050","n1819848978","n1819849088","n1819848900","n1819848947","n1819849039","n1819849044","n1819848881"]},"w17963182":{"id":"w17963182","tags":{"highway":"service"},"nodes":["n185949763","n185949765","n2189015691","n185949745"]},"w201484340":{"id":"w201484340","tags":{"railway":"rail","service":"siding"},"nodes":["n2114807565","n2114807564","n2114807547","n2114807587","n2114807558","n2114807549","n2114807593"]},"w209717058":{"id":"w209717058","tags":{"area":"yes","building":"yes"},"nodes":["n2199109884","n2199109886","n2199109888","n2199109889","n2199109890","n2199109891","n2199109884"]},"n185954650":{"id":"n185954650","loc":[-85.627331,41.957439]},"n185966949":{"id":"n185966949","loc":[-85.626868,41.957314]},"n185989335":{"id":"n185989335","loc":[-85.62529,41.958568]},"n185989337":{"id":"n185989337","loc":[-85.624962,41.958453]},"n185989339":{"id":"n185989339","loc":[-85.624832,41.958399]},"n185989340":{"id":"n185989340","loc":[-85.624707,41.958325]},"n185989342":{"id":"n185989342","loc":[-85.624636,41.958251]},"n185989345":{"id":"n185989345","loc":[-85.624578,41.95818]},"n185989347":{"id":"n185989347","loc":[-85.624533,41.958099]},"n185989349":{"id":"n185989349","loc":[-85.624507,41.957985]},"n185989351":{"id":"n185989351","loc":[-85.624495,41.957807]},"n185989353":{"id":"n185989353","loc":[-85.624514,41.957663]},"n185989354":{"id":"n185989354","loc":[-85.624577,41.957593]},"n185989356":{"id":"n185989356","loc":[-85.624685,41.95754]},"n185989357":{"id":"n185989357","loc":[-85.624802,41.957523]},"n185989359":{"id":"n185989359","loc":[-85.624996,41.957524]},"n185989361":{"id":"n185989361","loc":[-85.625409,41.957515]},"n185989364":{"id":"n185989364","loc":[-85.625634,41.957496]},"n185989367":{"id":"n185989367","loc":[-85.625832,41.957453]},"n185989368":{"id":"n185989368","loc":[-85.626044,41.957394]},"n354031352":{"id":"n354031352","loc":[-85.6252778,41.9586111],"tags":{"amenity":"place_of_worship","denomination":"baptist","name":"First Baptist Church","religion":"christian"}},"n2199109892":{"id":"n2199109892","loc":[-85.6261578,41.9589963]},"n2199109893":{"id":"n2199109893","loc":[-85.6263191,41.9586865]},"n2199109894":{"id":"n2199109894","loc":[-85.6261186,41.9586288]},"n2199109895":{"id":"n2199109895","loc":[-85.6260644,41.9587329]},"n2199109896":{"id":"n2199109896","loc":[-85.6261547,41.9587589]},"n2199109898":{"id":"n2199109898","loc":[-85.6260476,41.9589646]},"n185966951":{"id":"n185966951","loc":[-85.628404,41.957438]},"w17965351":{"id":"w17965351","tags":{"highway":"residential","name":"Flower Street"},"nodes":["n185966948","n185966949","n185954650","n185966951","n185966953","n185966955","n185966957"]},"w17967809":{"id":"w17967809","tags":{"highway":"residential","name":"Azaleamum Drive"},"nodes":["n185982197","n185989335","n185989337","n185989339","n185989340","n185989342","n185989345","n185989347","n185989349","n185989351","n185989353","n185989354","n185989356","n185989357","n185989359","n185989361","n185989364","n185989367","n185989368","n185982196"]},"w209717059":{"id":"w209717059","tags":{"area":"yes","building":"yes"},"nodes":["n2199109892","n2199109893","n2199109894","n2199109895","n2199109896","n2199109898","n2199109892"]},"n185961390":{"id":"n185961390","loc":[-85.63137,41.959033]},"n185961393":{"id":"n185961393","loc":[-85.634315,41.959017]},"w17966214":{"id":"w17966214","tags":{"highway":"residential","name":"East Adams Street"},"nodes":["n185975351","n185967434","n185968108"]},"w17964793":{"id":"w17964793","tags":{"highway":"residential","name":"Morris Ave"},"nodes":["n185961389","n185961390","n185961391","n185961393","n185961396"]},"n185952166":{"id":"n185952166","loc":[-85.638174,41.95831]},"n2114807552":{"id":"n2114807552","loc":[-85.6383526,41.9593788]},"n2114807591":{"id":"n2114807591","loc":[-85.6383741,41.9593968]},"n2189015731":{"id":"n2189015731","loc":[-85.6368404,41.9592785]},"n2189015734":{"id":"n2189015734","loc":[-85.6368404,41.9585918]},"n2189015737":{"id":"n2189015737","loc":[-85.6376009,41.9585918]},"n2189015738":{"id":"n2189015738","loc":[-85.6376009,41.9592785]},"n2189015897":{"id":"n2189015897","loc":[-85.6376839,41.9566137]},"n2189015900":{"id":"n2189015900","loc":[-85.6376831,41.9564865]},"n2189015903":{"id":"n2189015903","loc":[-85.6381161,41.9564851]},"n2189015906":{"id":"n2189015906","loc":[-85.6381168,41.9566122]},"n2189015937":{"id":"n2189015937","loc":[-85.6364789,41.9590634]},"n2189015940":{"id":"n2189015940","loc":[-85.6361137,41.9590672]},"n2189015943":{"id":"n2189015943","loc":[-85.6361169,41.9594033]},"n2189015945":{"id":"n2189015945","loc":[-85.6363456,41.9594021]},"n2189015952":{"id":"n2189015952","loc":[-85.636112,41.958892]},"n2189015955":{"id":"n2189015955","loc":[-85.6364757,41.9588894]},"n2189015957":{"id":"n2189015957","loc":[-85.6364729,41.9586747]},"n2189015958":{"id":"n2189015958","loc":[-85.6361103,41.9586765]},"n2189015959":{"id":"n2189015959","loc":[-85.6364719,41.9585562]},"n2189015960":{"id":"n2189015960","loc":[-85.6361093,41.958558]},"n2189015961":{"id":"n2189015961","loc":[-85.6355494,41.9586403]},"n2189015962":{"id":"n2189015962","loc":[-85.635549,41.9584711]},"n2189015963":{"id":"n2189015963","loc":[-85.6351831,41.9584715]},"n2189015964":{"id":"n2189015964","loc":[-85.6351834,41.9586408]},"n2189015966":{"id":"n2189015966","loc":[-85.6359579,41.9586359]},"n2189015968":{"id":"n2189015968","loc":[-85.6359561,41.9585465]},"n2189015971":{"id":"n2189015971","loc":[-85.6355476,41.9585509]},"n2189015974":{"id":"n2189015974","loc":[-85.6359516,41.9592934]},"n2189015977":{"id":"n2189015977","loc":[-85.635949,41.9586697]},"n2189015980":{"id":"n2189015980","loc":[-85.6351329,41.9586716]},"n2189015983":{"id":"n2189015983","loc":[-85.6351318,41.9583949]},"n2189015986":{"id":"n2189015986","loc":[-85.6349148,41.9583954]},"n2189015989":{"id":"n2189015989","loc":[-85.6349186,41.9592958]},"n2189015995":{"id":"n2189015995","loc":[-85.6360173,41.9593286]},"n2189015998":{"id":"n2189015998","loc":[-85.6360278,41.9583079]},"n2114807550":{"id":"n2114807550","loc":[-85.6383392,41.9595404]},"n2114807551":{"id":"n2114807551","loc":[-85.6375855,41.9616107]},"n2114807559":{"id":"n2114807559","loc":[-85.6373978,41.9621273]},"n2114807562":{"id":"n2114807562","loc":[-85.6373361,41.9622609]},"n2114807563":{"id":"n2114807563","loc":[-85.6376472,41.9613953]},"n2114807574":{"id":"n2114807574","loc":[-85.636974,41.9627695]},"n2114807589":{"id":"n2114807589","loc":[-85.6383017,41.9595005]},"n2114807592":{"id":"n2114807592","loc":[-85.6377169,41.9613494]},"n2114807595":{"id":"n2114807595","loc":[-85.6371081,41.962574]},"n2189015934":{"id":"n2189015934","loc":[-85.6364855,41.9595098]},"n2189015949":{"id":"n2189015949","loc":[-85.6363466,41.9595105]},"w208627244":{"id":"w208627244","tags":{"highway":"service"},"nodes":["n2189015992","n2189015995","n2189015998"]},"w208627240":{"id":"w208627240","tags":{"area":"yes","building":"yes"},"nodes":["n2189015961","n2189015971","n2189015962","n2189015963","n2189015964","n2189015961"]},"w17967437":{"id":"w17967437","tags":{"highway":"residential","name":"Lyman St"},"nodes":["n185964361","n185984024"]},"w208627237":{"id":"w208627237","tags":{"area":"yes","building":"yes"},"nodes":["n2189015955","n2189015957","n2189015958","n2189015952","n2189015955"]},"w17967465":{"id":"w17967465","tags":{"highway":"residential","name":"W Adams St"},"nodes":["n185978394","n185984022","n185964360"]},"w208627228":{"id":"w208627228","tags":{"area":"yes","building":"yes"},"nodes":["n2189015897","n2189015900","n2189015903","n2189015906","n2189015897"]},"w201484351":{"id":"w201484351","tags":{"railway":"rail","service":"siding"},"nodes":["n2114807587","n2114807574","n2114807595","n2114807562","n2114807559","n2114807551","n2114807563","n2114807589","n2114807552"]},"w208627239":{"id":"w208627239","tags":{"area":"yes","building":"yes"},"nodes":["n2189015957","n2189015959","n2189015960","n2189015958","n2189015957"]},"w208627233":{"id":"w208627233","tags":{"area":"yes","building":"yes"},"nodes":["n2189015934","n2189015937","n2189015940","n2189015943","n2189015945","n2189015949","n2189015934"]},"w208627241":{"id":"w208627241","tags":{"area":"yes","building":"yes"},"nodes":["n2189015961","n2189015966","n2189015968","n2189015971","n2189015961"]},"w17967970":{"id":"w17967970","tags":{"highway":"residential","name":"Adams St"},"nodes":["n185975351","n185978394"]},"w208627235":{"id":"w208627235","tags":{"area":"yes","building":"yes"},"nodes":["n2189015940","n2189015952","n2189015955","n2189015937","n2189015940"]},"w17965468":{"id":"w17965468","tags":{"highway":"residential","name":"Armstrong Blvd"},"nodes":["n185967917","n2189015998","n185967918","n185964362","n185952166"]},"w201484346":{"id":"w201484346","tags":{"railway":"rail","service":"siding"},"nodes":["n2114807551","n2114807592","n2114807550","n2114807591"]},"w208627242":{"id":"w208627242","tags":{"amenity":"parking","area":"yes"},"nodes":["n2189015974","n2189015977","n2189015980","n2189015983","n2189015986","n2189015989","n2189015974"]},"w208627216":{"id":"w208627216","tags":{"area":"yes","building":"yes"},"nodes":["n2189015731","n2189015734","n2189015737","n2189015738","n2189015731"]},"n185984309":{"id":"n185984309","loc":[-85.631421,41.961494]},"n185987987":{"id":"n185987987","loc":[-85.631456,41.960673]},"n185965397":{"id":"n185965397","loc":[-85.634603,41.959838]},"w17965196":{"id":"w17965196","tags":{"highway":"residential","name":"Burke Ave"},"nodes":["n185965395","n185965397","n185965399"]},"w17967215":{"id":"w17967215","tags":{"highway":"residential","name":"Kellogg Ave"},"nodes":["n185968114","n185984309","n185967440","n185978402"]},"w17967597":{"id":"w17967597","tags":{"highway":"residential","name":"Barnard Ave"},"nodes":["n185968112","n185987987","n185967438","n185978399"]},"n394490857":{"id":"n394490857","loc":[-85.633952,41.960664]},"n394490858":{"id":"n394490858","loc":[-85.633938,41.960227]},"n394490859":{"id":"n394490859","loc":[-85.634794,41.960212]},"n394490860":{"id":"n394490860","loc":[-85.634815,41.960662]},"n394490861":{"id":"n394490861","loc":[-85.634103,41.961268]},"n394490862":{"id":"n394490862","loc":[-85.634103,41.961001]},"n394490863":{"id":"n394490863","loc":[-85.634504,41.961003]},"n394490864":{"id":"n394490864","loc":[-85.634561,41.961269]},"n1057629869":{"id":"n1057629869","loc":[-85.6382599,41.9612134]},"n1057629937":{"id":"n1057629937","loc":[-85.6380035,41.9616137]},"n2189016014":{"id":"n2189016014","loc":[-85.6360365,41.9626496]},"n2189016017":{"id":"n2189016017","loc":[-85.6360374,41.9623228]},"n2189016020":{"id":"n2189016020","loc":[-85.6367557,41.9623239]},"n2189016022":{"id":"n2189016022","loc":[-85.6367566,41.9619919]},"n2189016025":{"id":"n2189016025","loc":[-85.6351794,41.9619893]},"n2189016028":{"id":"n2189016028","loc":[-85.6351788,41.9622011]},"n2189016031":{"id":"n2189016031","loc":[-85.6350855,41.9622009]},"n2189016034":{"id":"n2189016034","loc":[-85.6350845,41.962527]},"n2189016037":{"id":"n2189016037","loc":[-85.6352732,41.9625273]},"n2189016039":{"id":"n2189016039","loc":[-85.6352738,41.9623178]},"n2189016042":{"id":"n2189016042","loc":[-85.6357712,41.9623186]},"n2189016044":{"id":"n2189016044","loc":[-85.6357702,41.9626492]},"n1057629880":{"id":"n1057629880","loc":[-85.638817,41.9619017]},"n1057629923":{"id":"n1057629923","loc":[-85.6390733,41.9615014]},"w91092312":{"id":"w91092312","tags":{"power":"station"},"nodes":["n1057629923","n1057629869","n1057629937","n1057629880","n1057629923"]},"w34369826":{"id":"w34369826","tags":{"admin_level":"8","boundary":"administrative"},"nodes":["n394490861","n394490862","n394490863","n394490864","n394490861"]},"w34369825":{"id":"w34369825","tags":{"admin_level":"8","boundary":"administrative"},"nodes":["n394490857","n394490858","n394490859","n394490860","n394490857"]},"w208627248":{"id":"w208627248","tags":{"area":"yes","building":"yes"},"nodes":["n2189016014","n2189016017","n2189016020","n2189016022","n2189016025","n2189016028","n2189016031","n2189016034","n2189016037","n2189016039","n2189016042","n2189016044","n2189016014"]},"n394490766":{"id":"n394490766","loc":[-85.616777,41.955642]},"n394490768":{"id":"n394490768","loc":[-85.617239,41.955644]},"n394490792":{"id":"n394490792","loc":[-85.619034,41.95543]},"n185972055":{"id":"n185972055","loc":[-85.6185905,41.9568211]},"n185972057":{"id":"n185972057","loc":[-85.6186688,41.9570086]},"n185972059":{"id":"n185972059","loc":[-85.6186924,41.9581453]},"n185972060":{"id":"n185972060","loc":[-85.6187082,41.9588211],"tags":{"highway":"turning_circle"}},"n1819790724":{"id":"n1819790724","loc":[-85.6182155,41.9555703]},"n1819790735":{"id":"n1819790735","loc":[-85.6184059,41.9566188]},"n1819790799":{"id":"n1819790799","loc":[-85.6182372,41.9563771]},"n1819790896":{"id":"n1819790896","loc":[-85.6181431,41.9557227]},"n185971405":{"id":"n185971405","loc":[-85.6186766,41.9577468]},"n185971565":{"id":"n185971565","loc":[-85.6181613,41.9560879]},"n185967985":{"id":"n185967985","loc":[-85.6186798,41.9585791]},"n185955753":{"id":"n185955753","loc":[-85.620773,41.9555854]},"n185955755":{"id":"n185955755","loc":[-85.6212652,41.9559891]},"n185955748":{"id":"n185955748","loc":[-85.620722,41.954858]},"n185955751":{"id":"n185955751","loc":[-85.6206912,41.955367]},"n185967987":{"id":"n185967987","loc":[-85.6159351,41.9585809]},"n185971407":{"id":"n185971407","loc":[-85.6159142,41.9577578]},"n185971570":{"id":"n185971570","loc":[-85.6162248,41.95603]},"n185971572":{"id":"n185971572","loc":[-85.6160402,41.9560749]},"n185971574":{"id":"n185971574","loc":[-85.61593,41.956201]},"n185981301":{"id":"n185981301","loc":[-85.6158973,41.9581601]},"n394490762":{"id":"n394490762","loc":[-85.617193,41.954706]},"n394490764":{"id":"n394490764","loc":[-85.616773,41.954737]},"n394490787":{"id":"n394490787","loc":[-85.618972,41.954737]},"n394490790":{"id":"n394490790","loc":[-85.619046,41.954929]},"n394490794":{"id":"n394490794","loc":[-85.619922,41.955296]},"n394490796":{"id":"n394490796","loc":[-85.61991,41.95501]},"n394490798":{"id":"n394490798","loc":[-85.619974,41.954751]},"n1819790677":{"id":"n1819790677","loc":[-85.6187031,41.9550522]},"n1819790787":{"id":"n1819790787","loc":[-85.6186436,41.9552022]},"n1819790828":{"id":"n1819790828","loc":[-85.6185127,41.9553393]},"w17966857":{"id":"w17966857","tags":{"access":"private","highway":"service","name":"Sable River Rd"},"nodes":["n185972059","n185981301"]},"w34369814":{"id":"w34369814","tags":{"admin_level":"8","boundary":"administrative"},"nodes":["n394490787","n394490790","n394490792","n394490794","n394490796","n394490798","n394490787"]},"w17964176":{"id":"w17964176","tags":{"highway":"residential"},"nodes":["n185955747","n185955748","n185955751","n185955753","n185955755"]},"w17965838":{"id":"w17965838","tags":{"access":"private","highway":"service","name":"Pine River Rd"},"nodes":["n185971405","n185971407"]},"w17965476":{"id":"w17965476","tags":{"access":"private","highway":"service","name":"Raisin River Rd"},"nodes":["n185967985","n185967987"]},"w17965913":{"id":"w17965913","tags":{"access":"private","highway":"service","name":"Shiawassee River Rd"},"nodes":["n185972054","n1819790677","n1819790787","n1819790828","n1819790724","n1819790896","n185971565","n1819790799","n1819790735","n185972055","n185972057","n185971405","n185972059","n185967985","n185972060"]},"w34369811":{"id":"w34369811","tags":{"admin_level":"8","boundary":"administrative"},"nodes":["n394490762","n394490764","n394490766","n394490768","n394490762"]},"w17965854":{"id":"w17965854","tags":{"access":"private","highway":"service","name":"Sturgeon River Rd"},"nodes":["n185971565","n185971570","n185971572","n185971574"]},"n2139795769":{"id":"n2139795769","loc":[-85.6250804,41.9608796]},"n2139795770":{"id":"n2139795770","loc":[-85.6250315,41.9613684]},"n2139795771":{"id":"n2139795771","loc":[-85.6249671,41.9614362]},"n2139795772":{"id":"n2139795772","loc":[-85.6249698,41.961522]},"n2139795773":{"id":"n2139795773","loc":[-85.6250798,41.9615838]},"n2139795774":{"id":"n2139795774","loc":[-85.6252273,41.9615639]},"n2139795775":{"id":"n2139795775","loc":[-85.6252863,41.9614622]},"n2139795776":{"id":"n2139795776","loc":[-85.6252273,41.9613764]},"n2139795777":{"id":"n2139795777","loc":[-85.6251227,41.9613525]},"n2139795778":{"id":"n2139795778","loc":[-85.6249564,41.9612527]},"n2139795779":{"id":"n2139795779","loc":[-85.6249846,41.9610254]},"n2139795780":{"id":"n2139795780","loc":[-85.6266725,41.9599647]},"n2139795781":{"id":"n2139795781","loc":[-85.6259162,41.9599711]},"n2139795782":{"id":"n2139795782","loc":[-85.6257185,41.960019]},"n2139795783":{"id":"n2139795783","loc":[-85.6255509,41.9601213]},"n185963539":{"id":"n185963539","loc":[-85.615718,41.983893]},"n185964418":{"id":"n185964418","loc":[-85.616626,42.049512]},"n185966614":{"id":"n185966614","loc":[-85.615514,41.976603]},"n185966635":{"id":"n185966635","loc":[-85.616118,42.013017]},"n185969040":{"id":"n185969040","loc":[-85.615632,41.972357]},"n185969070":{"id":"n185969070","loc":[-85.619145,41.967648]},"n185972156":{"id":"n185972156","loc":[-85.621894,41.963956]},"n185972157":{"id":"n185972157","loc":[-85.621806,41.964077]},"n185972158":{"id":"n185972158","loc":[-85.620848,41.965341]},"n185972159":{"id":"n185972159","loc":[-85.620684,41.965558]},"n185972160":{"id":"n185972160","loc":[-85.620621,41.965658]},"n185972161":{"id":"n185972161","loc":[-85.617844,41.969359]},"n185972162":{"id":"n185972162","loc":[-85.616843,41.97068]},"n185972164":{"id":"n185972164","loc":[-85.616714,41.970839]},"n185972166":{"id":"n185972166","loc":[-85.615879,41.971969]},"n185972168":{"id":"n185972168","loc":[-85.615748,41.972159]},"n185972170":{"id":"n185972170","loc":[-85.615589,41.972502]},"n185972172":{"id":"n185972172","loc":[-85.615542,41.972733]},"n185972175":{"id":"n185972175","loc":[-85.615524,41.972947]},"n185972177":{"id":"n185972177","loc":[-85.615512,41.973715]},"n185972179":{"id":"n185972179","loc":[-85.615513,41.976496]},"n185972180":{"id":"n185972180","loc":[-85.615538,41.977246]},"n185972181":{"id":"n185972181","loc":[-85.61558,41.982139]},"n185972184":{"id":"n185972184","loc":[-85.61557,41.983317]},"n185972186":{"id":"n185972186","loc":[-85.615591,41.983463]},"n185972188":{"id":"n185972188","loc":[-85.615763,41.984146]},"n185972190":{"id":"n185972190","loc":[-85.615814,41.98435]},"n185972192":{"id":"n185972192","loc":[-85.615965,41.998453]},"n185972194":{"id":"n185972194","loc":[-85.615982,42.001237]},"n185972195":{"id":"n185972195","loc":[-85.616055,42.00555]},"n185972197":{"id":"n185972197","loc":[-85.616134,42.014887]},"n185972199":{"id":"n185972199","loc":[-85.616177,42.018465]},"n185972201":{"id":"n185972201","loc":[-85.616298,42.027627]},"n185972203":{"id":"n185972203","loc":[-85.616513,42.042212]},"w203968015":{"id":"w203968015","tags":{"highway":"residential"},"nodes":["n2139795768","n2139795769"]},"w17965932":{"id":"w17965932","tags":{"highway":"residential","name":"Buckhorn Road","name_1":"County Highway 122"},"nodes":["n185972155","n185972156","n185972157","n185972158","n185972159","n185972160","n185969070","n185972161","n185972162","n185972164","n185972166","n185972168","n185969040","n185972170","n185972172","n185972175","n185972177","n185972179","n185966614","n185972180","n185972181","n185972184","n185972186","n185963539","n185972188","n185972190","n185972192","n185972194","n185972195","n185966635","n185972197","n185972199","n185972201","n185972203","n185964418"]},"w203968016":{"id":"w203968016","tags":{"highway":"residential","name":"New Jersey Court"},"nodes":["n2139795770","n2139795771","n2139795772","n2139795773","n2139795774","n2139795775","n2139795776","n2139795777","n2139795770","n2139795778","n2139795779","n2139795769"]},"w203968017":{"id":"w203968017","tags":{"highway":"residential","name":"Oklahoma Drive"},"nodes":["n2139795780","n2139795781","n2139795782","n2139795783","n2139795769"]},"n1819790528":{"id":"n1819790528","loc":[-85.6184827,41.960025]},"n1819790530":{"id":"n1819790530","loc":[-85.6168626,41.9605834]},"n1819790534":{"id":"n1819790534","loc":[-85.6197379,41.9617163]},"n1819790541":{"id":"n1819790541","loc":[-85.6198881,41.9620833]},"n1819790543":{"id":"n1819790543","loc":[-85.619695,41.9619397]},"n1819790547":{"id":"n1819790547","loc":[-85.6190298,41.9609504]},"n1819790555":{"id":"n1819790555","loc":[-85.6180471,41.9609788]},"n1819790559":{"id":"n1819790559","loc":[-85.6203817,41.9605436]},"n1819790583":{"id":"n1819790583","loc":[-85.6201564,41.9603282]},"n1819790590":{"id":"n1819790590","loc":[-85.617045,41.9598894]},"n1819790609":{"id":"n1819790609","loc":[-85.6177638,41.9598495]},"n1819790618":{"id":"n1819790618","loc":[-85.6195234,41.9610143]},"n1819790642":{"id":"n1819790642","loc":[-85.6181179,41.9627933]},"n1819790659":{"id":"n1819790659","loc":[-85.6174634,41.962897]},"n1819790665":{"id":"n1819790665","loc":[-85.6170343,41.9630885]},"n1819790674":{"id":"n1819790674","loc":[-85.6194697,41.9601925]},"n1819790685":{"id":"n1819790685","loc":[-85.6207722,41.9610665]},"n1819790687":{"id":"n1819790687","loc":[-85.6202315,41.9622109]},"n1819790697":{"id":"n1819790697","loc":[-85.6184505,41.9624662]},"n1819790726":{"id":"n1819790726","loc":[-85.6178926,41.9628492]},"n1819790738":{"id":"n1819790738","loc":[-85.6173347,41.9598016]},"n1819790762":{"id":"n1819790762","loc":[-85.6186221,41.9609105]},"n1819790774":{"id":"n1819790774","loc":[-85.6175922,41.9608308]},"n1819790781":{"id":"n1819790781","loc":[-85.6167768,41.9633198]},"n1819790796":{"id":"n1819790796","loc":[-85.619856,41.961461]},"n1819790811":{"id":"n1819790811","loc":[-85.6208215,41.9620195]},"n1819790833":{"id":"n1819790833","loc":[-85.618311,41.9612536]},"n1819790854":{"id":"n1819790854","loc":[-85.6183646,41.9626417]},"n1819790863":{"id":"n1819790863","loc":[-85.6204997,41.9608547]},"n1819790867":{"id":"n1819790867","loc":[-85.6184934,41.9621391]},"n1819790877":{"id":"n1819790877","loc":[-85.6206928,41.9621152]},"n1819790881":{"id":"n1819790881","loc":[-85.6170879,41.960735]},"n1819790891":{"id":"n1819790891","loc":[-85.6168304,41.9601207]},"n1819790898":{"id":"n1819790898","loc":[-85.619813,41.9612297]},"n1819790909":{"id":"n1819790909","loc":[-85.6167982,41.960376]},"n1819790912":{"id":"n1819790912","loc":[-85.6205855,41.9610462]},"n1819790544":{"id":"n1819790544","loc":[-85.612968,41.9707781]},"n1819790549":{"id":"n1819790549","loc":[-85.614395,41.9697172]},"n1819790552":{"id":"n1819790552","loc":[-85.6180535,41.9655536]},"n1819790554":{"id":"n1819790554","loc":[-85.6111227,41.9703713]},"n1819790560":{"id":"n1819790560","loc":[-85.6112729,41.9701958]},"n1819790563":{"id":"n1819790563","loc":[-85.6137512,41.9689917]},"n1819790564":{"id":"n1819790564","loc":[-85.6181072,41.9659205]},"n1819790595":{"id":"n1819790595","loc":[-85.6170021,41.9666863]},"n1819790605":{"id":"n1819790605","loc":[-85.6168948,41.9644527]},"n1819790606":{"id":"n1819790606","loc":[-85.6128071,41.9701081]},"n1819790607":{"id":"n1819790607","loc":[-85.6129251,41.9704032]},"n1819790612":{"id":"n1819790612","loc":[-85.6177638,41.9663912]},"n1819790615":{"id":"n1819790615","loc":[-85.6152533,41.9670373]},"n1819790622":{"id":"n1819790622","loc":[-85.6146739,41.9673804]},"n1819790623":{"id":"n1819790623","loc":[-85.6180428,41.9661838]},"n1819790625":{"id":"n1819790625","loc":[-85.6172918,41.9646202]},"n1819790645":{"id":"n1819790645","loc":[-85.6178067,41.965043]},"n1819790647":{"id":"n1819790647","loc":[-85.6143306,41.9712488]},"n1819790649":{"id":"n1819790649","loc":[-85.6147383,41.9707702]},"n1819790654":{"id":"n1819790654","loc":[-85.6157361,41.9668459]},"n1819790657":{"id":"n1819790657","loc":[-85.6145666,41.9710733]},"n1819790668":{"id":"n1819790668","loc":[-85.6166909,41.9642692]},"n1819790671":{"id":"n1819790671","loc":[-85.6141482,41.9696538]},"n1819790679":{"id":"n1819790679","loc":[-85.6148349,41.9705388]},"n1819790686":{"id":"n1819790686","loc":[-85.6139551,41.9695501]},"n1819790696":{"id":"n1819790696","loc":[-85.6119703,41.9699087]},"n1819790704":{"id":"n1819790704","loc":[-85.6140731,41.9684174]},"n1819790706":{"id":"n1819790706","loc":[-85.6124745,41.9699246]},"n1819790718":{"id":"n1819790718","loc":[-85.6165407,41.9636868]},"n1819790720":{"id":"n1819790720","loc":[-85.61388,41.9687365]},"n1819790731":{"id":"n1819790731","loc":[-85.6165193,41.9639421]},"n1819790739":{"id":"n1819790739","loc":[-85.6146739,41.9699964]},"n1819790753":{"id":"n1819790753","loc":[-85.6173883,41.9665747]},"n1819790760":{"id":"n1819790760","loc":[-85.6133221,41.9712089]},"n1819790767":{"id":"n1819790767","loc":[-85.6116698,41.9699246]},"n1819790779":{"id":"n1819790779","loc":[-85.6130753,41.9710573]},"n1819790791":{"id":"n1819790791","loc":[-85.6137083,41.9692869]},"n1819790795":{"id":"n1819790795","loc":[-85.6141482,41.9679627]},"n1819790798":{"id":"n1819790798","loc":[-85.6137727,41.9694305]},"n1819790836":{"id":"n1819790836","loc":[-85.6143842,41.9676037]},"n1819790915":{"id":"n1819790915","loc":[-85.6148456,41.9702756]},"n1819790926":{"id":"n1819790926","loc":[-85.6138371,41.9713525]},"n1819790927":{"id":"n1819790927","loc":[-85.6141053,41.9713525]},"n1819790931":{"id":"n1819790931","loc":[-85.6162832,41.966814]},"n1821014625":{"id":"n1821014625","loc":[-85.5960611,41.9808498]},"n1821014627":{"id":"n1821014627","loc":[-85.5565843,42.010982]},"n1821014629":{"id":"n1821014629","loc":[-85.5971541,41.9805808]},"n1821014632":{"id":"n1821014632","loc":[-85.6061837,41.9725907]},"n1821014633":{"id":"n1821014633","loc":[-85.5247773,42.025766]},"n1821014635":{"id":"n1821014635","loc":[-85.5908938,41.9902384]},"n1821014636":{"id":"n1821014636","loc":[-85.5917682,41.9860637]},"n1821014637":{"id":"n1821014637","loc":[-85.5456556,42.0166797]},"n1821014638":{"id":"n1821014638","loc":[-85.5795749,42.0032352]},"n1821014639":{"id":"n1821014639","loc":[-85.6103988,41.9723456]},"n1821014642":{"id":"n1821014642","loc":[-85.5818816,42.0022466]},"n1821014643":{"id":"n1821014643","loc":[-85.5570604,42.0091586]},"n1821014644":{"id":"n1821014644","loc":[-85.5952886,41.9803792]},"n1821014645":{"id":"n1821014645","loc":[-85.5780366,42.0040343]},"n1821014646":{"id":"n1821014646","loc":[-85.6050505,41.9751971]},"n1821014647":{"id":"n1821014647","loc":[-85.5854435,41.9946162]},"n1821014648":{"id":"n1821014648","loc":[-85.5452278,42.0168768]},"n1821014649":{"id":"n1821014649","loc":[-85.6023254,41.9780166]},"n1821014651":{"id":"n1821014651","loc":[-85.5761899,42.0046783]},"n1821014653":{"id":"n1821014653","loc":[-85.5897351,41.9876707]},"n1821014657":{"id":"n1821014657","loc":[-85.5963601,41.9808998]},"n1821014658":{"id":"n1821014658","loc":[-85.5892952,41.9951983]},"n1821014660":{"id":"n1821014660","loc":[-85.5778328,42.0037194]},"n1821014661":{"id":"n1821014661","loc":[-85.5541475,42.0125705]},"n1821014663":{"id":"n1821014663","loc":[-85.5914047,41.9856469]},"n1821014664":{"id":"n1821014664","loc":[-85.6101681,41.9727723]},"n1821014665":{"id":"n1821014665","loc":[-85.5910172,41.9854696]},"n1821014666":{"id":"n1821014666","loc":[-85.5398688,42.0187699]},"n1821014667":{"id":"n1821014667","loc":[-85.5218752,42.0282884]},"n1821014668":{"id":"n1821014668","loc":[-85.5159582,42.0329384]},"n1821014669":{"id":"n1821014669","loc":[-85.5898102,41.9847319]},"n1821014670":{"id":"n1821014670","loc":[-85.5734809,42.0066235]},"n1821014671":{"id":"n1821014671","loc":[-85.5922939,41.980852]},"n1821014672":{"id":"n1821014672","loc":[-85.6023629,41.9781163]},"n1821014674":{"id":"n1821014674","loc":[-85.5409953,42.0191724]},"n1821014676":{"id":"n1821014676","loc":[-85.584435,41.9949909]},"n1821014677":{"id":"n1821014677","loc":[-85.5972399,41.9783835]},"n1821014678":{"id":"n1821014678","loc":[-85.5616738,42.0071337]},"n1821014681":{"id":"n1821014681","loc":[-85.5202994,42.0310755]},"n1821014682":{"id":"n1821014682","loc":[-85.5915912,41.9857767]},"n1821014684":{"id":"n1821014684","loc":[-85.6022288,41.977897]},"n1821014687":{"id":"n1821014687","loc":[-85.5933024,41.9846362]},"n1821014688":{"id":"n1821014688","loc":[-85.5846871,41.9956169]},"n1821014689":{"id":"n1821014689","loc":[-85.5898209,41.99037]},"n1821014691":{"id":"n1821014691","loc":[-85.5448939,42.0149261]},"n1821014692":{"id":"n1821014692","loc":[-85.5977763,41.9786348]},"n1821014694":{"id":"n1821014694","loc":[-85.5767706,42.0034523]},"n1821014695":{"id":"n1821014695","loc":[-85.6103559,41.9726766]},"n1821014697":{"id":"n1821014697","loc":[-85.5922134,41.9809876]},"n1821014698":{"id":"n1821014698","loc":[-85.5935277,41.9831728]},"n1821014700":{"id":"n1821014700","loc":[-85.5674674,42.0078273]},"n1821014703":{"id":"n1821014703","loc":[-85.6021,41.9778053]},"n1821014704":{"id":"n1821014704","loc":[-85.5756763,42.0053737]},"n1821014705":{"id":"n1821014705","loc":[-85.5887695,41.9895207]},"n1821014707":{"id":"n1821014707","loc":[-85.6061073,41.9746866]},"n1821014708":{"id":"n1821014708","loc":[-85.6033446,41.9751692]},"n1821014710":{"id":"n1821014710","loc":[-85.5180986,42.0322332]},"n1821014711":{"id":"n1821014711","loc":[-85.543365,42.0163569]},"n1821014712":{"id":"n1821014712","loc":[-85.6030656,41.9753646]},"n1821014713":{"id":"n1821014713","loc":[-85.6104417,41.9704792]},"n1821014714":{"id":"n1821014714","loc":[-85.5205716,42.030998]},"n1821014716":{"id":"n1821014716","loc":[-85.516382,42.032536]},"n1821014717":{"id":"n1821014717","loc":[-85.5932863,41.9820882]},"n1821014718":{"id":"n1821014718","loc":[-85.5361928,42.0194974]},"n1821014720":{"id":"n1821014720","loc":[-85.6011613,41.9773586]},"n1821014721":{"id":"n1821014721","loc":[-85.554287,42.0109124]},"n1821014722":{"id":"n1821014722","loc":[-85.5577524,42.0103425]},"n1821014725":{"id":"n1821014725","loc":[-85.5867256,41.9921004]},"n1821014726":{"id":"n1821014726","loc":[-85.5856045,41.9968807]},"n1821014727":{"id":"n1821014727","loc":[-85.5545445,42.0106454]},"n1821014728":{"id":"n1821014728","loc":[-85.5923797,41.9842534]},"n1821014729":{"id":"n1821014729","loc":[-85.5696346,42.0081462]},"n1821014730":{"id":"n1821014730","loc":[-85.5998322,41.9786884]},"n1821014735":{"id":"n1821014735","loc":[-85.5337426,42.0218266]},"n1821014736":{"id":"n1821014736","loc":[-85.5847944,41.994672]},"n1821014740":{"id":"n1821014740","loc":[-85.5315271,42.0238669]},"n1821014741":{"id":"n1821014741","loc":[-85.5248846,42.027085]},"n1821014742":{"id":"n1821014742","loc":[-85.5853376,41.997018]},"n1821014743":{"id":"n1821014743","loc":[-85.5894883,41.988811]},"n1821014745":{"id":"n1821014745","loc":[-85.6095311,41.9726226]},"n1821014746":{"id":"n1821014746","loc":[-85.5531511,42.0133416]},"n1821014747":{"id":"n1821014747","loc":[-85.5735882,42.007058]},"n1821014749":{"id":"n1821014749","loc":[-85.5428554,42.0164366]},"n1821014751":{"id":"n1821014751","loc":[-85.5395255,42.0186304]},"n1821014752":{"id":"n1821014752","loc":[-85.571378,42.0083176]},"n1821014754":{"id":"n1821014754","loc":[-85.5541918,42.0113925]},"n1821014755":{"id":"n1821014755","loc":[-85.5278029,42.0250806]},"n1821014756":{"id":"n1821014756","loc":[-85.5936725,41.9827102]},"n1821014757":{"id":"n1821014757","loc":[-85.5176266,42.0346677]},"n1821014758":{"id":"n1821014758","loc":[-85.6096692,41.9714245]},"n1821014759":{"id":"n1821014759","loc":[-85.5770321,42.0034266]},"n1821014761":{"id":"n1821014761","loc":[-85.5988921,41.9779369]},"n1821014762":{"id":"n1821014762","loc":[-85.5811788,42.0024499]},"n1821014763":{"id":"n1821014763","loc":[-85.5154003,42.0381101]},"n1821014764":{"id":"n1821014764","loc":[-85.5155827,42.0374089]},"n1821014765":{"id":"n1821014765","loc":[-85.5891249,41.9884978]},"n1821014766":{"id":"n1821014766","loc":[-85.5313863,42.0238293]},"n1821014768":{"id":"n1821014768","loc":[-85.593297,41.9833363]},"n1821014769":{"id":"n1821014769","loc":[-85.5849446,41.9957245]},"n1821014770":{"id":"n1821014770","loc":[-85.5537774,42.0130847]},"n1821014771":{"id":"n1821014771","loc":[-85.6111766,41.9706069]},"n1821014772":{"id":"n1821014772","loc":[-85.5585477,42.008989]},"n1821014774":{"id":"n1821014774","loc":[-85.5928142,41.9852623]},"n1821014777":{"id":"n1821014777","loc":[-85.5891933,41.9882608]},"n1821014778":{"id":"n1821014778","loc":[-85.5926909,41.9817532]},"n1821014779":{"id":"n1821014779","loc":[-85.5260272,42.0252201]},"n1821014781":{"id":"n1821014781","loc":[-85.5894615,41.9950468]},"n1821014782":{"id":"n1821014782","loc":[-85.5461063,42.0143242]},"n1821014783":{"id":"n1821014783","loc":[-85.5711527,42.0085886]},"n1821014784":{"id":"n1821014784","loc":[-85.5329379,42.0218624]},"n1821014786":{"id":"n1821014786","loc":[-85.583047,42.0020252]},"n1821014787":{"id":"n1821014787","loc":[-85.5758962,42.0054095]},"n1821014788":{"id":"n1821014788","loc":[-85.5626354,42.0077733]},"n1821014789":{"id":"n1821014789","loc":[-85.6029852,41.9755999]},"n1821014790":{"id":"n1821014790","loc":[-85.5892362,41.9886755]},"n1821014791":{"id":"n1821014791","loc":[-85.5157597,42.0372017]},"n1821014793":{"id":"n1821014793","loc":[-85.6054582,41.9751094]},"n1821014794":{"id":"n1821014794","loc":[-85.5986936,41.9778412]},"n1821014795":{"id":"n1821014795","loc":[-85.5880775,41.98976]},"n1821014796":{"id":"n1821014796","loc":[-85.5858727,41.9963624]},"n1821014798":{"id":"n1821014798","loc":[-85.5792543,42.0035958]},"n1821014799":{"id":"n1821014799","loc":[-85.5921665,41.9838326]},"n1821014801":{"id":"n1821014801","loc":[-85.599214,41.9782599]},"n1821014802":{"id":"n1821014802","loc":[-85.5571905,42.0090967]},"n1821014803":{"id":"n1821014803","loc":[-85.5426891,42.0173612]},"n1821014804":{"id":"n1821014804","loc":[-85.5889626,41.9896404]},"n1821014805":{"id":"n1821014805","loc":[-85.5491264,42.0141648]},"n1821014806":{"id":"n1821014806","loc":[-85.5618897,42.0072631]},"n1821014808":{"id":"n1821014808","loc":[-85.5573501,42.0109802]},"n1821014809":{"id":"n1821014809","loc":[-85.5983463,41.9778031]},"n1821014810":{"id":"n1821014810","loc":[-85.5885173,41.9895128]},"n1821014811":{"id":"n1821014811","loc":[-85.6084998,41.9721143]},"n1821014812":{"id":"n1821014812","loc":[-85.5737598,42.0056389]},"n1821014814":{"id":"n1821014814","loc":[-85.5542173,42.0118132]},"n1821014816":{"id":"n1821014816","loc":[-85.5277868,42.024451]},"n1821014817":{"id":"n1821014817","loc":[-85.5403999,42.0191724]},"n1821014819":{"id":"n1821014819","loc":[-85.5983879,41.9791452]},"n1821014820":{"id":"n1821014820","loc":[-85.5891302,41.9897578]},"n1821014822":{"id":"n1821014822","loc":[-85.5930731,41.9805108]},"n1821014824":{"id":"n1821014824","loc":[-85.515395,42.0378471]},"n1821014825":{"id":"n1821014825","loc":[-85.5352755,42.0205136]},"n1821014826":{"id":"n1821014826","loc":[-85.5502744,42.0133398]},"n1821014828":{"id":"n1821014828","loc":[-85.5701295,42.0088256]},"n1821014830":{"id":"n1821014830","loc":[-85.5888929,41.9953099]},"n1821014832":{"id":"n1821014832","loc":[-85.5880077,41.9901547]},"n1821014833":{"id":"n1821014833","loc":[-85.5451192,42.0157072]},"n1821014834":{"id":"n1821014834","loc":[-85.6096478,41.9711932]},"n1821014835":{"id":"n1821014835","loc":[-85.5806424,42.0026532]},"n1821014836":{"id":"n1821014836","loc":[-85.5911674,41.9868732]},"n1821014838":{"id":"n1821014838","loc":[-85.5930302,41.9836571]},"n1821014839":{"id":"n1821014839","loc":[-85.588925,41.9938148]},"n1821014840":{"id":"n1821014840","loc":[-85.6111874,41.9705311]},"n1821014841":{"id":"n1821014841","loc":[-85.5680843,42.0075842]},"n1821014842":{"id":"n1821014842","loc":[-85.6012793,41.9775062]},"n1821014843":{"id":"n1821014843","loc":[-85.5855562,41.9989777]},"n1821014844":{"id":"n1821014844","loc":[-85.5506137,42.0131662]},"n1821014845":{"id":"n1821014845","loc":[-85.5270049,42.025457]},"n1821014846":{"id":"n1821014846","loc":[-85.5257054,42.025244]},"n1821014847":{"id":"n1821014847","loc":[-85.6011184,41.9771832]},"n1821014848":{"id":"n1821014848","loc":[-85.515534,42.0389234]},"n1821014850":{"id":"n1821014850","loc":[-85.5847032,42.0010347]},"n1821014853":{"id":"n1821014853","loc":[-85.5361499,42.019063]},"n1821014854":{"id":"n1821014854","loc":[-85.5439176,42.0165721]},"n1821014855":{"id":"n1821014855","loc":[-85.5838825,42.0017284]},"n1821014857":{"id":"n1821014857","loc":[-85.5542173,42.0122317]},"n1821014859":{"id":"n1821014859","loc":[-85.5708201,42.0089195]},"n1821014860":{"id":"n1821014860","loc":[-85.5844833,41.9954415]},"n1821014862":{"id":"n1821014862","loc":[-85.5223204,42.0295396]},"n1821014863":{"id":"n1821014863","loc":[-85.5777898,42.0035918]},"n1821014864":{"id":"n1821014864","loc":[-85.591044,41.9898078]},"n1821014865":{"id":"n1821014865","loc":[-85.5973204,41.980182]},"n1821014866":{"id":"n1821014866","loc":[-85.5699578,42.0085825]},"n1821014867":{"id":"n1821014867","loc":[-85.5210598,42.0305278]},"n1821014868":{"id":"n1821014868","loc":[-85.5929108,41.9819008]},"n1821014869":{"id":"n1821014869","loc":[-85.5279799,42.0242995]},"n1821014870":{"id":"n1821014870","loc":[-85.5196114,42.0320539]},"n1821014871":{"id":"n1821014871","loc":[-85.5785449,42.0040883]},"n1821014872":{"id":"n1821014872","loc":[-85.588292,41.9895766]},"n1821014873":{"id":"n1821014873","loc":[-85.5160172,42.0331775]},"n1821014874":{"id":"n1821014874","loc":[-85.5688849,42.0077016]},"n1821014876":{"id":"n1821014876","loc":[-85.5857976,41.9996036]},"n1821014879":{"id":"n1821014879","loc":[-85.5990906,41.9780765]},"n1821014881":{"id":"n1821014881","loc":[-85.5483647,42.0144279]},"n1821014883":{"id":"n1821014883","loc":[-85.5691209,42.0077972]},"n1821014885":{"id":"n1821014885","loc":[-85.6076844,41.9721103]},"n1821014886":{"id":"n1821014886","loc":[-85.6015489,41.9766147]},"n1821014887":{"id":"n1821014887","loc":[-85.574822,42.0052802]},"n1821014888":{"id":"n1821014888","loc":[-85.5880024,41.9899593]},"n1821014890":{"id":"n1821014890","loc":[-85.5909421,41.9893772]},"n1821014892":{"id":"n1821014892","loc":[-85.5497326,42.0138141]},"n1821014893":{"id":"n1821014893","loc":[-85.5167106,42.0357811]},"n1821014895":{"id":"n1821014895","loc":[-85.5844404,41.9952501]},"n1821014896":{"id":"n1821014896","loc":[-85.5362465,42.0192662]},"n1821014898":{"id":"n1821014898","loc":[-85.5906095,41.9889147]},"n1821014899":{"id":"n1821014899","loc":[-85.5590667,42.0089354]},"n1821014900":{"id":"n1821014900","loc":[-85.5921598,41.9844209]},"n1821014902":{"id":"n1821014902","loc":[-85.5778971,42.0039266]},"n1821014903":{"id":"n1821014903","loc":[-85.603012,41.9761981]},"n1821014904":{"id":"n1821014904","loc":[-85.6108977,41.9706787]},"n1821014905":{"id":"n1821014905","loc":[-85.5685738,42.0076139]},"n1821014906":{"id":"n1821014906","loc":[-85.5392787,42.0186304]},"n1821014907":{"id":"n1821014907","loc":[-85.5227885,42.0274972]},"n1821014908":{"id":"n1821014908","loc":[-85.5857547,41.9961431]},"n1821014910":{"id":"n1821014910","loc":[-85.5610354,42.0072812]},"n1821014911":{"id":"n1821014911","loc":[-85.5209632,42.0308705]},"n1821014912":{"id":"n1821014912","loc":[-85.5709757,42.0087959]},"n1821014913":{"id":"n1821014913","loc":[-85.59231,41.9839344]},"n1821014914":{"id":"n1821014914","loc":[-85.5375245,42.0185865]},"n1821014916":{"id":"n1821014916","loc":[-85.5901548,41.9839841]},"n1821014917":{"id":"n1821014917","loc":[-85.5611213,42.0086405]},"n1821014918":{"id":"n1821014918","loc":[-85.5360426,42.0198122]},"n1821014919":{"id":"n1821014919","loc":[-85.5862817,41.9948691]},"n1821014921":{"id":"n1821014921","loc":[-85.5469807,42.0144438]},"n1821014922":{"id":"n1821014922","loc":[-85.5761309,42.0053838]},"n1821014924":{"id":"n1821014924","loc":[-85.516264,42.0332971]},"n1821014925":{"id":"n1821014925","loc":[-85.5277224,42.0246661]},"n1821014926":{"id":"n1821014926","loc":[-85.5980016,41.9798231]},"n1821014928":{"id":"n1821014928","loc":[-85.5924548,41.9806965]},"n1821014930":{"id":"n1821014930","loc":[-85.5899121,41.985023]},"n1821014931":{"id":"n1821014931","loc":[-85.5706015,42.0089492]},"n1821014932":{"id":"n1821014932","loc":[-85.515926,42.033046]},"n1821014933":{"id":"n1821014933","loc":[-85.5982377,41.9796796]},"n1821014936":{"id":"n1821014936","loc":[-85.5475721,42.0145253]},"n1821014938":{"id":"n1821014938","loc":[-85.5895701,41.9902323]},"n1821014939":{"id":"n1821014939","loc":[-85.6030495,41.9759947]},"n1821014942":{"id":"n1821014942","loc":[-85.6094721,41.9724989]},"n1821014944":{"id":"n1821014944","loc":[-85.5921973,41.9811112]},"n1821014945":{"id":"n1821014945","loc":[-85.5223526,42.0291332]},"n1821014946":{"id":"n1821014946","loc":[-85.5965103,41.9808998]},"n1821014948":{"id":"n1821014948","loc":[-85.517766,42.0349227]},"n1821014950":{"id":"n1821014950","loc":[-85.5889894,41.990996]},"n1821014951":{"id":"n1821014951","loc":[-85.5601932,42.0092902]},"n1821014954":{"id":"n1821014954","loc":[-85.6028135,41.9764055]},"n1821014955":{"id":"n1821014955","loc":[-85.5520621,42.0130666]},"n1821014956":{"id":"n1821014956","loc":[-85.593002,41.9839344]},"n1821014957":{"id":"n1821014957","loc":[-85.515926,42.0369666]},"n1821014960":{"id":"n1821014960","loc":[-85.5761255,42.003877]},"n1821014961":{"id":"n1821014961","loc":[-85.5716355,42.007911]},"n1821014962":{"id":"n1821014962","loc":[-85.5575378,42.0109045]},"n1821014963":{"id":"n1821014963","loc":[-85.5735667,42.0068188]},"n1821014964":{"id":"n1821014964","loc":[-85.5915214,41.9865861]},"n1821014965":{"id":"n1821014965","loc":[-85.5866344,41.9923157]},"n1821014967":{"id":"n1821014967","loc":[-85.5283138,42.0242256]},"n1821014968":{"id":"n1821014968","loc":[-85.5177875,42.0355801]},"n1821014969":{"id":"n1821014969","loc":[-85.548071,42.0144934]},"n1821014972":{"id":"n1821014972","loc":[-85.5611159,42.0088557]},"n1821014973":{"id":"n1821014973","loc":[-85.541686,42.0188757]},"n1821014974":{"id":"n1821014974","loc":[-85.5917628,41.9862631]},"n1821014975":{"id":"n1821014975","loc":[-85.5854864,41.9959478]},"n1821014977":{"id":"n1821014977","loc":[-85.609102,41.9722317]},"n1821014980":{"id":"n1821014980","loc":[-85.5761202,42.0042438]},"n1821014982":{"id":"n1821014982","loc":[-85.5465944,42.0143601]},"n1821014983":{"id":"n1821014983","loc":[-85.5173261,42.0342732]},"n1821014984":{"id":"n1821014984","loc":[-85.5897297,41.9888509]},"n1821014985":{"id":"n1821014985","loc":[-85.5856688,41.999181]},"n1821014986":{"id":"n1821014986","loc":[-85.5344011,42.0217251]},"n1821014987":{"id":"n1821014987","loc":[-85.601467,41.9768203]},"n1821014988":{"id":"n1821014988","loc":[-85.5457254,42.0165123]},"n1821014989":{"id":"n1821014989","loc":[-85.6023482,41.9784332]},"n1821014991":{"id":"n1821014991","loc":[-85.5361606,42.01823]},"n1821014992":{"id":"n1821014992","loc":[-85.5178465,42.0351139]},"n1821014995":{"id":"n1821014995","loc":[-85.5634293,42.0078092]},"n1821014996":{"id":"n1821014996","loc":[-85.573497,42.0072015]},"n1821014997":{"id":"n1821014997","loc":[-85.5976328,41.9799725]},"n1821014998":{"id":"n1821014998","loc":[-85.5210651,42.0303166]},"n1821015003":{"id":"n1821015003","loc":[-85.5222131,42.0288064]},"n1821015004":{"id":"n1821015004","loc":[-85.5897941,41.984405]},"n1821015005":{"id":"n1821015005","loc":[-85.5975725,41.9776099]},"n1821015006":{"id":"n1821015006","loc":[-85.5765708,42.0034903]},"n1821015007":{"id":"n1821015007","loc":[-85.5250187,42.026559]},"n1821015009":{"id":"n1821015009","loc":[-85.5426998,42.0166279]},"n1821015010":{"id":"n1821015010","loc":[-85.5957606,41.9806584]},"n1821015011":{"id":"n1821015011","loc":[-85.5262753,42.0252497]},"n1821015012":{"id":"n1821015012","loc":[-85.5266455,42.0253374]},"n1821015014":{"id":"n1821015014","loc":[-85.5515632,42.0130187]},"n1821015015":{"id":"n1821015015","loc":[-85.6024058,41.9765212]},"n1821015017":{"id":"n1821015017","loc":[-85.5175032,42.0357156]},"n1821015018":{"id":"n1821015018","loc":[-85.5302718,42.0236039]},"n1821015019":{"id":"n1821015019","loc":[-85.6024005,41.9782759]},"n1821015020":{"id":"n1821015020","loc":[-85.5907758,41.9890821]},"n1821015021":{"id":"n1821015021","loc":[-85.6019445,41.9777215]},"n1821015022":{"id":"n1821015022","loc":[-85.5942854,41.9800881]},"n1821015024":{"id":"n1821015024","loc":[-85.5325826,42.0222711]},"n1821015029":{"id":"n1821015029","loc":[-85.555093,42.0105316]},"n1821015033":{"id":"n1821015033","loc":[-85.5249704,42.0270372]},"n1821015034":{"id":"n1821015034","loc":[-85.5243965,42.0272205]},"n1821015038":{"id":"n1821015038","loc":[-85.5413426,42.0190749]},"n1821015039":{"id":"n1821015039","loc":[-85.5920431,41.9848175]},"n1821015041":{"id":"n1821015041","loc":[-85.5577685,42.0106015]},"n1821015042":{"id":"n1821015042","loc":[-85.5453606,42.0158866]},"n1821015045":{"id":"n1821015045","loc":[-85.5333228,42.0217889]},"n1821015046":{"id":"n1821015046","loc":[-85.5426891,42.0175924]},"n1821015048":{"id":"n1821015048","loc":[-85.5886836,41.9936474]},"n1821015050":{"id":"n1821015050","loc":[-85.6001152,41.9786467]},"n1821015051":{"id":"n1821015051","loc":[-85.6094064,41.9723655]},"n1821015053":{"id":"n1821015053","loc":[-85.605721,41.9749738]},"n1821015055":{"id":"n1821015055","loc":[-85.6106791,41.9705048]},"n1821015057":{"id":"n1821015057","loc":[-85.5210437,42.0307071]},"n1821015059":{"id":"n1821015059","loc":[-85.5995694,41.9786725]},"n1821015060":{"id":"n1821015060","loc":[-85.5371638,42.0182938]},"n1821015062":{"id":"n1821015062","loc":[-85.6111766,41.9704593]},"n1821015065":{"id":"n1821015065","loc":[-85.577704,42.0034921]},"n1821015067":{"id":"n1821015067","loc":[-85.5570067,42.0093699]},"n1821015068":{"id":"n1821015068","loc":[-85.5920364,41.9845525]},"n1821015069":{"id":"n1821015069","loc":[-85.5252065,42.0253954]},"n1821015072":{"id":"n1821015072","loc":[-85.5664159,42.0088517]},"n1821015073":{"id":"n1821015073","loc":[-85.5880399,41.991905]},"n1821015075":{"id":"n1821015075","loc":[-85.6099871,41.9727861]},"n1821015076":{"id":"n1821015076","loc":[-85.5319603,42.0231478]},"n1821015078":{"id":"n1821015078","loc":[-85.6036088,41.9751112]},"n1821015080":{"id":"n1821015080","loc":[-85.5983128,41.9789179]},"n1821015082":{"id":"n1821015082","loc":[-85.5614069,42.0071395]},"n1821015083":{"id":"n1821015083","loc":[-85.60968,41.9709738]},"n1821015086":{"id":"n1821015086","loc":[-85.5914195,41.9837351]},"n1821015087":{"id":"n1821015087","loc":[-85.5895473,41.9948036]},"n1821015090":{"id":"n1821015090","loc":[-85.5929913,41.9851905]},"n1821015093":{"id":"n1821015093","loc":[-85.5907396,41.9838485]},"n1821015095":{"id":"n1821015095","loc":[-85.5893864,41.9880176]},"n1821015096":{"id":"n1821015096","loc":[-85.5788024,42.0039807]},"n1821015097":{"id":"n1821015097","loc":[-85.5630592,42.0078411]},"n1821015098":{"id":"n1821015098","loc":[-85.5350609,42.0211274]},"n1821015099":{"id":"n1821015099","loc":[-85.5967195,41.9808679]},"n1821015100":{"id":"n1821015100","loc":[-85.5666734,42.0088119]},"n1821015101":{"id":"n1821015101","loc":[-85.564694,42.0077675]},"n1821015103":{"id":"n1821015103","loc":[-85.6066544,41.9726527]},"n1821015104":{"id":"n1821015104","loc":[-85.6011827,41.9769838]},"n1821015105":{"id":"n1821015105","loc":[-85.5972131,41.9776697]},"n1821015106":{"id":"n1821015106","loc":[-85.5880828,41.9903341]},"n1821015107":{"id":"n1821015107","loc":[-85.5510268,42.0130626]},"n1821015108":{"id":"n1821015108","loc":[-85.6102164,41.970543]},"n1821015109":{"id":"n1821015109","loc":[-85.5905344,41.9853899]},"n1821015111":{"id":"n1821015111","loc":[-85.5888821,41.9913429]},"n1821015112":{"id":"n1821015112","loc":[-85.606295,41.9741921]},"n1821015114":{"id":"n1821015114","loc":[-85.5969556,41.9807443]},"n1821015115":{"id":"n1821015115","loc":[-85.5882223,41.9934081]},"n1821015116":{"id":"n1821015116","loc":[-85.6104471,41.9724971]},"n1821015118":{"id":"n1821015118","loc":[-85.5406091,42.0192162]},"n1821015120":{"id":"n1821015120","loc":[-85.589955,41.9888429]},"n1821015121":{"id":"n1821015121","loc":[-85.5598821,42.0092304]},"n1821015122":{"id":"n1821015122","loc":[-85.545598,42.0144097]},"n1821015123":{"id":"n1821015123","loc":[-85.5649528,42.0079965]},"n1821015125":{"id":"n1821015125","loc":[-85.5883993,41.9917814]},"n1821015126":{"id":"n1821015126","loc":[-85.5295785,42.0239967]},"n1821015129":{"id":"n1821015129","loc":[-85.5648723,42.0078809]},"n1821015132":{"id":"n1821015132","loc":[-85.564989,42.0081103]},"n1821015133":{"id":"n1821015133","loc":[-85.5946127,41.9800841]},"n1821015134":{"id":"n1821015134","loc":[-85.583448,42.0019078]},"n1821015135":{"id":"n1821015135","loc":[-85.5905934,41.9871842]},"n1821015137":{"id":"n1821015137","loc":[-85.610608,41.9704752]},"n1821015138":{"id":"n1821015138","loc":[-85.5752257,42.0052939]},"n1821015139":{"id":"n1821015139","loc":[-85.5893864,41.9943491]},"n1821015140":{"id":"n1821015140","loc":[-85.5426247,42.0169866]},"n1821015141":{"id":"n1821015141","loc":[-85.562001,42.0074526]},"n1821015142":{"id":"n1821015142","loc":[-85.5212046,42.0301094]},"n1821015143":{"id":"n1821015143","loc":[-85.602214,41.9784531]},"n1821015144":{"id":"n1821015144","loc":[-85.5858687,41.9948293]},"n1821015145":{"id":"n1821015145","loc":[-85.5608477,42.0074805]},"n1821015146":{"id":"n1821015146","loc":[-85.5651607,42.0083614]},"n1821015147":{"id":"n1821015147","loc":[-85.5288288,42.0242495]},"n1821015149":{"id":"n1821015149","loc":[-85.5450334,42.0146989]},"n1821015151":{"id":"n1821015151","loc":[-85.5578275,42.0092304]},"n1821015154":{"id":"n1821015154","loc":[-85.6056634,41.9724511]},"n1821015155":{"id":"n1821015155","loc":[-85.5902179,41.9852742]},"n1821015156":{"id":"n1821015156","loc":[-85.5156256,42.0387157]},"n1821015157":{"id":"n1821015157","loc":[-85.5734433,42.0059459]},"n1821015158":{"id":"n1821015158","loc":[-85.6050773,41.9731273]},"n1821015160":{"id":"n1821015160","loc":[-85.5223419,42.0275233]},"n1821015163":{"id":"n1821015163","loc":[-85.6053562,41.972525]},"n1821015164":{"id":"n1821015164","loc":[-85.5850412,41.9946082]},"n1821015165":{"id":"n1821015165","loc":[-85.5359031,42.0186326]},"n1821015166":{"id":"n1821015166","loc":[-85.5608745,42.0077635]},"n1821015169":{"id":"n1821015169","loc":[-85.572876,42.0073189]},"n1821015171":{"id":"n1821015171","loc":[-85.5875424,41.9919188]},"n1821015172":{"id":"n1821015172","loc":[-85.5240116,42.0272581]},"n1821015173":{"id":"n1821015173","loc":[-85.5318369,42.0236818]},"n1821015174":{"id":"n1821015174","loc":[-85.566888,42.0086923]},"n1821015175":{"id":"n1821015175","loc":[-85.5931522,41.9850669]},"n1821015176":{"id":"n1821015176","loc":[-85.5604842,42.0093199]},"n1821015177":{"id":"n1821015177","loc":[-85.5868168,41.9927543]},"n1821015178":{"id":"n1821015178","loc":[-85.6052275,41.9732549]},"n1821015179":{"id":"n1821015179","loc":[-85.5910118,41.9900431]},"n1821015182":{"id":"n1821015182","loc":[-85.5610032,42.0082897]},"n1821015183":{"id":"n1821015183","loc":[-85.5425443,42.0179431]},"n1821015184":{"id":"n1821015184","loc":[-85.5843277,42.0014055]},"n1821015186":{"id":"n1821015186","loc":[-85.5733307,42.0063564]},"n1821015188":{"id":"n1821015188","loc":[-85.5277385,42.0248694]},"n1821015189":{"id":"n1821015189","loc":[-85.5558427,42.0108168]},"n1821015190":{"id":"n1821015190","loc":[-85.5650587,42.0082618]},"n1821015191":{"id":"n1821015191","loc":[-85.5660351,42.0088278]},"n1821015192":{"id":"n1821015192","loc":[-85.5849768,41.9980049]},"n1821015194":{"id":"n1821015194","loc":[-85.5359139,42.0188199]},"n1821015195":{"id":"n1821015195","loc":[-85.593238,41.9849194]},"n1821015197":{"id":"n1821015197","loc":[-85.5850841,41.9983239]},"n1821015199":{"id":"n1821015199","loc":[-85.5983396,41.9794283]},"n1821015204":{"id":"n1821015204","loc":[-85.5452801,42.0145355]},"n1821015205":{"id":"n1821015205","loc":[-85.5340685,42.0218407]},"n1821015207":{"id":"n1821015207","loc":[-85.5773272,42.0034186]},"n1821015209":{"id":"n1821015209","loc":[-85.5535212,42.0132419]},"n1821015211":{"id":"n1821015211","loc":[-85.6107703,41.9706045]},"n1821015212":{"id":"n1821015212","loc":[-85.6030066,41.9758193]},"n1821015213":{"id":"n1821015213","loc":[-85.5359943,42.0184213]},"n1821015214":{"id":"n1821015214","loc":[-85.5922993,41.9813305]},"n1821015215":{"id":"n1821015215","loc":[-85.5672689,42.0080465]},"n1821015217":{"id":"n1821015217","loc":[-85.5160494,42.0365682]},"n1821015218":{"id":"n1821015218","loc":[-85.5401142,42.0190351]},"n1821015219":{"id":"n1821015219","loc":[-85.5607632,42.0092282]},"n1821015220":{"id":"n1821015220","loc":[-85.5866197,41.9947894]},"n1821015221":{"id":"n1821015221","loc":[-85.6017889,41.9765132]},"n1821015222":{"id":"n1821015222","loc":[-85.5595978,42.009059]},"n1821015226":{"id":"n1821015226","loc":[-85.5871494,41.9929018]},"n1821015227":{"id":"n1821015227","loc":[-85.5857708,41.9998866]},"n1821015228":{"id":"n1821015228","loc":[-85.5317135,42.0238094]},"n1821015231":{"id":"n1821015231","loc":[-85.5733521,42.0061372]},"n1821015233":{"id":"n1821015233","loc":[-85.5855991,42.0001936]},"n1821015234":{"id":"n1821015234","loc":[-85.5213924,42.029962]},"n1821015235":{"id":"n1821015235","loc":[-85.6052221,41.9726567]},"n1821015236":{"id":"n1821015236","loc":[-85.5763723,42.0035422]},"n1821015237":{"id":"n1821015237","loc":[-85.5858512,41.9966215]},"n1821015238":{"id":"n1821015238","loc":[-85.567061,42.008439]},"n1821015239":{"id":"n1821015239","loc":[-85.5250563,42.0269057]},"n1821015240":{"id":"n1821015240","loc":[-85.5347551,42.0214263]},"n1821015241":{"id":"n1821015241","loc":[-85.6098463,41.9707066]},"n1821015242":{"id":"n1821015242","loc":[-85.5676927,42.0076519]},"n1821015243":{"id":"n1821015243","loc":[-85.516775,42.0322669]},"n1821015244":{"id":"n1821015244","loc":[-85.5762275,42.0036538]},"n1821015245":{"id":"n1821015245","loc":[-85.5583639,42.0090949]},"n1821015246":{"id":"n1821015246","loc":[-85.5554041,42.0106432]},"n1821015247":{"id":"n1821015247","loc":[-85.5973364,41.9776099]},"n1821015248":{"id":"n1821015248","loc":[-85.6098945,41.9717513]},"n1821015249":{"id":"n1821015249","loc":[-85.6045315,41.9751511]},"n1821015250":{"id":"n1821015250","loc":[-85.5579938,42.0092264]},"n1821015253":{"id":"n1821015253","loc":[-85.6058873,41.9724652]},"n1821015254":{"id":"n1821015254","loc":[-85.5869456,41.9947517]},"n1821015255":{"id":"n1821015255","loc":[-85.5936565,41.9823713]},"n1821015256":{"id":"n1821015256","loc":[-85.5218269,42.0278102]},"n1821015258":{"id":"n1821015258","loc":[-85.5887802,41.9905534]},"n1821015259":{"id":"n1821015259","loc":[-85.5901924,41.9904515]},"n1821015263":{"id":"n1821015263","loc":[-85.5249222,42.0255787]},"n1821015265":{"id":"n1821015265","loc":[-85.5175206,42.0321672]},"n1821015266":{"id":"n1821015266","loc":[-85.5275722,42.0254034]},"n1821015267":{"id":"n1821015267","loc":[-85.6016226,41.9765451]},"n1821015269":{"id":"n1821015269","loc":[-85.5569316,42.011032]},"n1821015271":{"id":"n1821015271","loc":[-85.6010714,41.9785209]},"n1821015272":{"id":"n1821015272","loc":[-85.6050666,41.9729917]},"n1821015273":{"id":"n1821015273","loc":[-85.5891235,41.99529]},"n1821015274":{"id":"n1821015274","loc":[-85.515454,42.0376439]},"n1821015276":{"id":"n1821015276","loc":[-85.5776021,42.0034443]},"n1821015277":{"id":"n1821015277","loc":[-85.6041707,41.9751453]},"n1821015278":{"id":"n1821015278","loc":[-85.5444701,42.0167435]},"n1821015280":{"id":"n1821015280","loc":[-85.5923274,41.9852202]},"n1821015283":{"id":"n1821015283","loc":[-85.5893649,41.9900271]},"n1821015284":{"id":"n1821015284","loc":[-85.5933453,41.9804412]},"n1821015285":{"id":"n1821015285","loc":[-85.5247237,42.026017]},"n1821015286":{"id":"n1821015286","loc":[-85.5286182,42.0242477]},"n1821015287":{"id":"n1821015287","loc":[-85.5904003,41.9888549]},"n1821015288":{"id":"n1821015288","loc":[-85.6062146,41.9739369]},"n1821015290":{"id":"n1821015290","loc":[-85.5762596,42.0052602]},"n1821015292":{"id":"n1821015292","loc":[-85.5849715,41.9975465]},"n1821015293":{"id":"n1821015293","loc":[-85.585229,42.0006241]},"n1821015294":{"id":"n1821015294","loc":[-85.5926922,41.9805946]},"n1821015295":{"id":"n1821015295","loc":[-85.5703387,42.0089133]},"n1821015299":{"id":"n1821015299","loc":[-85.5789955,42.0038611]},"n1821015301":{"id":"n1821015301","loc":[-85.6072888,41.9721918]},"n1821015302":{"id":"n1821015302","loc":[-85.5356349,42.0200992]},"n1821015304":{"id":"n1821015304","loc":[-85.5891772,41.994066]},"n1821015306":{"id":"n1821015306","loc":[-85.606295,41.9744952]},"n1821015307":{"id":"n1821015307","loc":[-85.538871,42.0186583]},"n1821015308":{"id":"n1821015308","loc":[-85.587997,41.994971]},"n1821015311":{"id":"n1821015311","loc":[-85.606869,41.9725809]},"n1821015312":{"id":"n1821015312","loc":[-85.5171974,42.0339943]},"n1821015314":{"id":"n1821015314","loc":[-85.5327435,42.0220479]},"n1821015315":{"id":"n1821015315","loc":[-85.5383439,42.0187282]},"n1821015316":{"id":"n1821015316","loc":[-85.5248095,42.0263119]},"n1821015318":{"id":"n1821015318","loc":[-85.5732502,42.0073051]},"n1821015319":{"id":"n1821015319","loc":[-85.5924226,41.9852663]},"n1821015321":{"id":"n1821015321","loc":[-85.5179001,42.0353052]},"n1821015322":{"id":"n1821015322","loc":[-85.5456771,42.0162413]},"n1821015323":{"id":"n1821015323","loc":[-85.5936618,41.9829096]},"n1821015325":{"id":"n1821015325","loc":[-85.5656931,42.0086582]},"n1821015326":{"id":"n1821015326","loc":[-85.5448456,42.0150975]},"n1821015327":{"id":"n1821015327","loc":[-85.5220039,42.027615]},"n1821015329":{"id":"n1821015329","loc":[-85.517884,42.0354885]},"n1821015330":{"id":"n1821015330","loc":[-85.5576666,42.0101671]},"n1821015332":{"id":"n1821015332","loc":[-85.5368754,42.0181402]},"n1821015333":{"id":"n1821015333","loc":[-85.5367078,42.0181145]},"n1821015334":{"id":"n1821015334","loc":[-85.5903909,41.9904316]},"n1821015335":{"id":"n1821015335","loc":[-85.5430767,42.0163587]},"n1821015336":{"id":"n1821015336","loc":[-85.5277492,42.0252878]},"n1821015337":{"id":"n1821015337","loc":[-85.5312146,42.0236898]},"n1821015338":{"id":"n1821015338","loc":[-85.5886568,41.991614]},"n1821015339":{"id":"n1821015339","loc":[-85.5782498,42.0040883]},"n1821015341":{"id":"n1821015341","loc":[-85.562233,42.0076457]},"n1821015342":{"id":"n1821015342","loc":[-85.588626,41.9952479]},"n1821015343":{"id":"n1821015343","loc":[-85.5762865,42.005033]},"n1821015344":{"id":"n1821015344","loc":[-85.5850841,41.9971478]},"n1821015346":{"id":"n1821015346","loc":[-85.5643144,42.0076936]},"n1821015347":{"id":"n1821015347","loc":[-85.5164893,42.0359467]},"n1821015348":{"id":"n1821015348","loc":[-85.5906846,41.9903541]},"n1821015349":{"id":"n1821015349","loc":[-85.557688,42.0107769]},"n1821015350":{"id":"n1821015350","loc":[-85.5363698,42.0181424]},"n1821015351":{"id":"n1821015351","loc":[-85.5939636,41.9801918]},"n1821015352":{"id":"n1821015352","loc":[-85.5524041,42.0131644]},"n1821015354":{"id":"n1821015354","loc":[-85.5308606,42.0236221]},"n1821015355":{"id":"n1821015355","loc":[-85.5877449,41.9932367]},"n1821015356":{"id":"n1821015356","loc":[-85.519885,42.0318586]},"n1821015357":{"id":"n1821015357","loc":[-85.5454035,42.0168431]},"n1821015358":{"id":"n1821015358","loc":[-85.5970629,41.9781881]},"n1821015359":{"id":"n1821015359","loc":[-85.5932541,41.9844767]},"n1821015360":{"id":"n1821015360","loc":[-85.5970736,41.9778252]},"n1821015361":{"id":"n1821015361","loc":[-85.537031,42.0181601]},"n1821015362":{"id":"n1821015362","loc":[-85.5548355,42.0105156]},"n1821015363":{"id":"n1821015363","loc":[-85.5168648,42.0336158]},"n1821015365":{"id":"n1821015365","loc":[-85.5870435,41.9919507]},"n1821015366":{"id":"n1821015366","loc":[-85.5719681,42.0075443]},"n1821015367":{"id":"n1821015367","loc":[-85.5969985,41.9780446]},"n1821015368":{"id":"n1821015368","loc":[-85.5926761,41.98528]},"n1821015369":{"id":"n1821015369","loc":[-85.5224009,42.0293444]},"n1821015371":{"id":"n1821015371","loc":[-85.518737,42.0322651]},"n1821015372":{"id":"n1821015372","loc":[-85.6064573,41.9726465]},"n1821015373":{"id":"n1821015373","loc":[-85.5201103,42.0313088]},"n1821015375":{"id":"n1821015375","loc":[-85.5378182,42.0186844]},"n1821015376":{"id":"n1821015376","loc":[-85.6109741,41.9706882]},"n1821015377":{"id":"n1821015377","loc":[-85.5993333,41.9785488]},"n1821015378":{"id":"n1821015378","loc":[-85.5889787,41.9907368]},"n1821015380":{"id":"n1821015380","loc":[-85.6060161,41.9737375]},"n1821015381":{"id":"n1821015381","loc":[-85.5743016,42.0053679]},"n1821015382":{"id":"n1821015382","loc":[-85.6014724,41.9776099]},"n1821015383":{"id":"n1821015383","loc":[-85.5574426,42.0091644]},"n1821015385":{"id":"n1821015385","loc":[-85.5208613,42.0309302]},"n1821015386":{"id":"n1821015386","loc":[-85.5919023,41.9837789]},"n1821015387":{"id":"n1821015387","loc":[-85.5455484,42.0160221]},"n1821015392":{"id":"n1821015392","loc":[-85.5801757,42.0028964]},"n1821015395":{"id":"n1821015395","loc":[-85.5493785,42.0139974]},"n1821015396":{"id":"n1821015396","loc":[-85.5449475,42.015488]},"n1821015398":{"id":"n1821015398","loc":[-85.611123,41.9706627]},"n1821015400":{"id":"n1821015400","loc":[-85.5935706,41.9822477]},"n1821015401":{"id":"n1821015401","loc":[-85.5724254,42.0073508]},"n1821015403":{"id":"n1821015403","loc":[-85.5486812,42.0143442]},"n1821015404":{"id":"n1821015404","loc":[-85.5161835,42.0327711]},"n1821015406":{"id":"n1821015406","loc":[-85.5921705,41.9851107]},"n1821015407":{"id":"n1821015407","loc":[-85.531912,42.0234069]},"n1821015410":{"id":"n1821015410","loc":[-85.5292566,42.024176]},"n1821015411":{"id":"n1821015411","loc":[-85.5845316,41.9948315]},"n1821015413":{"id":"n1821015413","loc":[-85.5217947,42.0280413]},"n1821015414":{"id":"n1821015414","loc":[-85.5527367,42.013272]},"n1821015415":{"id":"n1821015415","loc":[-85.5191179,42.0321973]},"n1821015416":{"id":"n1821015416","loc":[-85.5540241,42.0128655]},"n1821015418":{"id":"n1821015418","loc":[-85.5272892,42.0254849]},"n1821015419":{"id":"n1821015419","loc":[-85.5449744,42.016867]},"n1821015420":{"id":"n1821015420","loc":[-85.5852665,41.9986787]},"n1821015421":{"id":"n1821015421","loc":[-85.6102701,41.972186]},"n1821015423":{"id":"n1821015423","loc":[-85.6026365,41.9764972]},"n1821015427":{"id":"n1821015427","loc":[-85.5898692,41.9841498]},"n1821015429":{"id":"n1821015429","loc":[-85.5422546,42.0183855]},"n1821015430":{"id":"n1821015430","loc":[-85.5866505,41.9925549]},"n1821015431":{"id":"n1821015431","loc":[-85.5234376,42.0273577]},"n1821015432":{"id":"n1821015432","loc":[-85.6096746,41.9727284]},"n1821015433":{"id":"n1821015433","loc":[-85.5824891,42.0021567]},"n1821015434":{"id":"n1821015434","loc":[-85.5923905,41.9841139]},"n1821015435":{"id":"n1821015435","loc":[-85.5874565,41.9948014]},"n1821015437":{"id":"n1821015437","loc":[-85.6055279,41.9734423]},"n1821015438":{"id":"n1821015438","loc":[-85.5299379,42.0237376]},"n1821015439":{"id":"n1821015439","loc":[-85.5155022,42.0383651]},"n1821015442":{"id":"n1821015442","loc":[-85.527422,42.0254711]},"n1821015443":{"id":"n1821015443","loc":[-85.5920699,41.9849291]},"n1821015444":{"id":"n1821015444","loc":[-85.5639711,42.0077494]},"n1821015445":{"id":"n1821015445","loc":[-85.5162586,42.0361777]},"n1821015446":{"id":"n1821015446","loc":[-85.5220039,42.029695]},"n1821015448":{"id":"n1821015448","loc":[-85.5176641,42.0356956]},"n1821015449":{"id":"n1821015449","loc":[-85.5930556,41.9841577]},"n1821015451":{"id":"n1821015451","loc":[-85.5320783,42.0228848]},"n1821015452":{"id":"n1821015452","loc":[-85.5170096,42.0357235]},"n1821015453":{"id":"n1821015453","loc":[-85.5571355,42.009613]},"n1821015454":{"id":"n1821015454","loc":[-85.5609979,42.009059]},"n1821015455":{"id":"n1821015455","loc":[-85.6097336,41.9708342]},"n1821015456":{"id":"n1821015456","loc":[-85.5884476,41.9904218]},"w170843846":{"id":"w170843846","tags":{"waterway":"river"},"nodes":["n1819790555","n1819790762","n1819790547","n1819790618","n1819790898","n1819790796","n1819790534","n1819790543","n1819790541","n1819790687","n1819790877","n1819790811","n1819790670"]},"w209083541":{"id":"w209083541","tags":{"name":"Portage River","waterway":"river"},"nodes":["n1821014848","n1821015156","n1821015439","n1821014763","n1821014824","n1821015274","n1821014764","n1821014791","n1821014957","n1821015217","n1821015445","n1821015347","n1821014893","n1821015452","n1821015017","n1821015448","n1821014968","n1821015329","n1821015321","n1821014992","n1821014948","n1821014757","n1821014983","n1821015312","n1821015363","n1821014924","n1821014873","n1821014932","n1821014668","n1821015404","n1821014716","n1821015243","n1821015265","n1821014710","n1821015371","n1821015415","n1821014870","n1821015356","n1821015373","n1821014681","n1821014714","n1821015385","n1821014911","n1821015057","n1821014867","n1821014998","n1821015142","n1821015234","n1821015446","n1821014862","n1821015369","n1821014945","n1821015003","n1821014667","n1821015413","n1821015256","n1821015327","n1821015160","n1821014907","n1821015431","n1821015172","n1821015034","n1821014741","n1821015033","n1821015239","n1821015007","n1821015316","n1821015285","n1821014633","n1821015263","n1821015069","n1821014846","n1821014779","n1821015011","n1821015012","n1821014845","n1821015418","n1821015442","n1821015266","n1821015336","n1821014755","n1821015188","n1821014925","n1821014816","n1821014869","n1821014967","n1821015286","n1821015147","n1821015410","n1821015126","n1821015438","n1821015018","n1821015354","n1821015337","n1821014766","n1821014740","n1821015228","n1821015173","n1821015407","n1821015076","n1821015451","n1821015024","n1821015314","n1821014784","n1821015045","n1821014735","n1821015205","n1821014986","n1821015240","n1821015098","n1821014825","n1821015302","n1821014918","n1821014718","n1821014896","n1821014853","n1821015194","n1821015165","n1821015213","n1821014991","n1821015350","n1821015333","n1821015332","n1821015361","n1821015060","n1821014914","n1821015375","n1821015315","n1821015307","n1821014906","n1821014751","n1821014666","n1821015218","n1821014817","n1821015118","n1821014674","n1821015038","n1821014973","n1821015429","n1821015183","n1821015046","n1821014803","n1821015140","n1821015009","n1821014749","n1821015335","n1821014711","n1821014854","n1821015278","n1821015419","n1821014648","n1821015357","n1821014637","n1821014988","n1821015322","n1821015387","n1821015042","n1821014833","n1821015396","n1821015326","n1821014691","n1821015149","n1821015204","n1821015122","n1821014782","n1821014982","n1821014921","n1821014936","n1821014969","n1821014881","n1821015403","n1821014805","n1821015395","n1821014892","n1821014826","n1821014844","n1821015107","n1821015014","n1821014955","n1821015352","n1821015414","n1821014746","n1821015209","n1821014770","n1821015416","n1821014661","n1821014857","n1821014814","n1821014754","n1821014721","n1821014727","n1821015362","n1821015029","n1821015246","n1821015189","n1821014627","n1821015269","n1821014808","n1821014962","n1821015349","n1821015041","n1821014722","n1821015330","n1821015453","n1821015067","n1821014643","n1821014802","n1821015383","n1821015151","n1821015250","n1821015245","n1821014772","n1821014899","n1821015222","n1821015121","n1821014951","n1821015176","n1821015219","n1821015454","n1821014972","n1821014917","n1821015182","n1821015166","n1821015145","n1821014910","n1821015082","n1821014678","n1821014806","n1821015141","n1821015341","n1821014788","n1821015097","n1821014995","n1821015444","n1821015346","n1821015101","n1821015129","n1821015123","n1821015132","n1821015190","n1821015146","n1821015325","n1821015191","n1821015072","n1821015100","n1821015174","n1821015238","n1821015215","n1821014700","n1821015242","n1821014841","n1821014905","n1821014874","n1821014883","n1821014729","n1821014866","n1821014828","n1821015295","n1821014931","n1821014859","n1821014912","n1821014783","n1821014752","n1821014961","n1821015366","n1821015401","n1821015169","n1821015318","n1821014996","n1821014747","n1821014963","n1821014670","n1821015186","n1821015231","n1821015157","n1821014812","n1821015381","n1821014887","n1821015138","n1821014704","n1821014787","n1821014922","n1821015290","n1821015343","n1821014651","n1821014980","n1821014960","n1821015244","n1821015236","n1821015006","n1821014694","n1821014759","n1821015207","n1821015276","n1821015065","n1821014863","n1821014660","n1821014902","n1821014645","n1821015339","n1821014871","n1821015096","n1821015299","n1821014798","n1821014638","n1821015392","n1821014835","n1821014762","n1821014642","n1821015433","n1821014786","n1821015134","n1821014855","n1821015184","n1821014850","n1821015293","n1821015233","n1821015227","n1821014876","n1821014985","n1821014843","n1821015420","n1821015197","n1821015192","n1821015292","n1821015344","n1821014742","n1821014726","n1821015237","n1821014796","n1821014908","n1821014975","n1821014769","n1821014688","n1821014860","n1821014895","n1821014676","n1821015411","n1821014736","n1821015164","n1821014647","n1821015144","n1821014919","n1821015220","n1821015254","n1821015435","n1821015308","n1821015342","n1821014830","n1821015273","n1821014658","n1821014781","n1821015087","n1821015139","n1821015304","n1821014839","n1821015048","n1821015115","n1821015355","n1821015226","n1821015177","n1821015430","n1821014965","n1821014725","n1821015365","n1821015171","n1821015073","n1821015125","n1821015338","n1821015111","n1821014950","n1821015378","n1821015258","n1821015456","n1821015106","n1821014832","n1821014888","n1821014795","n1821014872","n1821014810","n1821014705","n1821014804","n1821014820","n1821015283","n1821014938","n1821014689","n1821015259","n1821015334","n1821015348","n1821014635","n1821015179","n1821014864","n1821014890","n1821015020","n1821014898","n1821015287","n1821015120","n1821014984","n1821014743","n1821014790","n1821014765","n1821014777","n1821015095","n1821014653","n1821015135","n1821014836","n1821014964","n1821014974","n1821014636","n1821014682","n1821014663","n1821014665","n1821015109","n1821015155","n1821014930","n1821014669","n1821015004","n1821015427","n1821014916","n1821015093","n1821015086","n1821015386","n1821014799","n1821014913","n1821015434","n1821014728","n1821014900","n1821015068","n1821015039","n1821015443","n1821015406","n1821015280","n1821015319","n1821015368","n1821014774","n1821015090","n1821015175","n1821015195","n1821014687","n1821015359","n1821015449","n1821014956","n1821014838","n1821014768","n1821014698","n1821015323","n1821014756","n1821015255","n1821015400","n1821014717","n1821014868","n1821014778","n1821015214","n1821014944","n1821014697","n1821014671","n1821014928","n1821015294","n1821014822","n1821015284","n1821015351","n1821015022","n1821015133","n1821014644","n1821015010","n1821014625","n1821014657","n1821014946","n1821015099","n1821015114","n1821014629","n1821014865","n1821014997","n1821014926","n1821014933","n1821015199","n1821014819","n1821015080","n1821014692","n1821014677","n1821015358","n1821015367","n1821015360","n1821015105","n1821015247","n1821015005","n1821014809","n1821014794","n1821014761","n1821014879","n1821014801","n1821015377","n1821015059","n1821014730","n1821015050","n1821015271","n1821015143","n1821014989","n1821015019","n1821014672","n1821014649","n1821014684","n1821014703","n1821015021","n1821015382","n1821014842","n1821014720","n1821014847","n1821015104","n1821014987","n1821014886","n1821015267","n1821015221","n1821015015","n1821015423","n1821014954","n1821014903","n1821014939","n1821015212","n1821014789","n1821014712","n1821014708","n1821015078","n1821015277","n1821015249","n1821014646","n1821014793","n1821015053","n1821014707","n1821015306","n1821015112","n1821015288","n1821015380","n1821015437","n1821015178","n1821015158","n1821015272","n1821015235","n1821015163","n1821015154","n1821015253","n1821014632","n1821015372","n1821015103","n1821015311","n1821015301","n1821014885","n1821014811","n1821014977","n1821015051","n1821014942","n1821014745","n1821015432","n1821015075","n1821014664","n1821014695","n1821015116","n1821014639","n1821015421","n1821015248","n1821014758","n1821014834","n1821015083","n1821015455","n1821015241","n1821015108","n1821014713","n1821015137","n1821015055","n1821015211","n1821014904","n1821015376","n1821015398","n1821014771","n1821014840","n1821015062","n1819790554","n1819790560","n1819790767","n1819790696","n1819790706","n1819790606","n1819790607","n1819790544","n1819790779","n1819790760","n1819790926","n1819790927","n1819790647","n1819790657","n1819790649","n1819790679","n1819790915","n1819790739","n1819790549","n1819790671","n1819790686","n1819790798","n1819790791","n1819790563","n1819790720","n1819790704","n1819790795","n1819790836","n1819790622","n1819790615","n1819790654","n1819790931","n1819790595","n1819790753","n1819790612","n1819790623","n1819790564","n1819790552","n1819790645","n1819790625","n1819790605","n1819790668","n1819790731","n1819790718","n1819790781","n1819790665","n1819790659","n1819790726","n1819790642","n1819790854","n1819790697","n1819790867","n1819790833","n1819790555","n1819790774","n1819790881","n1819790530","n1819790909","n1819790891","n1819790590","n1819790738","n1819790609","n1819790528","n1819790674","n1819790583","n1819790559","n1819790863","n1819790912","n1819790685","n1819790913"]},"n185955128":{"id":"n185955128","loc":[-85.6189367,41.9519432]},"n185948818":{"id":"n185948818","loc":[-85.616755,41.952231]},"n185978819":{"id":"n185978819","loc":[-85.616773,41.954737]},"n185978821":{"id":"n185978821","loc":[-85.616699,41.954742]},"n2138420714":{"id":"n2138420714","loc":[-85.6176304,41.9515154]},"n2138420715":{"id":"n2138420715","loc":[-85.6177355,41.9515717]},"n2138420716":{"id":"n2138420716","loc":[-85.6192901,41.951573]},"n2138420718":{"id":"n2138420718","loc":[-85.6171481,41.9513579]},"n2138420719":{"id":"n2138420719","loc":[-85.6165981,41.9519199]},"n2138420720":{"id":"n2138420720","loc":[-85.6165719,41.9519922]},"n2138420721":{"id":"n2138420721","loc":[-85.6165832,41.9520757]},"n2138420722":{"id":"n2138420722","loc":[-85.6166355,41.9521453]},"n2138420723":{"id":"n2138420723","loc":[-85.6169161,41.9522788]},"n2138420724":{"id":"n2138420724","loc":[-85.6170882,41.9522538]},"n2138420725":{"id":"n2138420725","loc":[-85.6189204,41.9514674]},"n2138420726":{"id":"n2138420726","loc":[-85.6180346,41.9514735]},"n2138420727":{"id":"n2138420727","loc":[-85.6180362,41.9515719]},"n2138420728":{"id":"n2138420728","loc":[-85.6189204,41.9515727]},"n2138420744":{"id":"n2138420744","loc":[-85.618919,41.9519571]},"n2138420745":{"id":"n2138420745","loc":[-85.6194575,41.9522374]},"n2138420746":{"id":"n2138420746","loc":[-85.6181777,41.9536179]},"n2138420747":{"id":"n2138420747","loc":[-85.6176582,41.9533658]},"n2138420748":{"id":"n2138420748","loc":[-85.6179871,41.9530242]},"n2138420749":{"id":"n2138420749","loc":[-85.618429,41.9532476]},"n2138420750":{"id":"n2138420750","loc":[-85.6185538,41.9531194]},"n2138420751":{"id":"n2138420751","loc":[-85.6180765,41.9528677]},"n2138420752":{"id":"n2138420752","loc":[-85.6180394,41.9528855]},"n2138420753":{"id":"n2138420753","loc":[-85.6193752,41.9521695]},"n2138420754":{"id":"n2138420754","loc":[-85.6181374,41.9535376]},"n2138420755":{"id":"n2138420755","loc":[-85.6179898,41.9535545]},"n2138420756":{"id":"n2138420756","loc":[-85.6177286,41.9534228]},"n2138420757":{"id":"n2138420757","loc":[-85.6181011,41.9530292]},"n2138420759":{"id":"n2138420759","loc":[-85.6185158,41.9531194]},"n2138420760":{"id":"n2138420760","loc":[-85.6191318,41.9520425]},"n2138420761":{"id":"n2138420761","loc":[-85.6182348,41.9529815]},"n2138420762":{"id":"n2138420762","loc":[-85.6184853,41.9524248]},"n2138420763":{"id":"n2138420763","loc":[-85.6186764,41.9525193]},"n2138420764":{"id":"n2138420764","loc":[-85.6189421,41.9526483]},"n2138420765":{"id":"n2138420765","loc":[-85.6182875,41.9531222]},"n2138420766":{"id":"n2138420766","loc":[-85.6179141,41.9535163]},"n2138420767":{"id":"n2138420767","loc":[-85.6178363,41.9535735]},"n185948824":{"id":"n185948824","loc":[-85.6165667,41.9529715]},"n2138420758":{"id":"n2138420758","loc":[-85.6184408,41.953201]},"n2138422349":{"id":"n2138422349","loc":[-85.6175136,41.9533346]},"n2138422350":{"id":"n2138422350","loc":[-85.6171867,41.9531679]},"n2138422351":{"id":"n2138422351","loc":[-85.61722,41.9531305]},"n2138422352":{"id":"n2138422352","loc":[-85.6171889,41.9531158]},"n2138422353":{"id":"n2138422353","loc":[-85.6171733,41.9531284]},"n2138422354":{"id":"n2138422354","loc":[-85.616765,41.9529207]},"n2138422355":{"id":"n2138422355","loc":[-85.6167565,41.9529355]},"n2138422356":{"id":"n2138422356","loc":[-85.6164772,41.9527911]},"n2138422357":{"id":"n2138422357","loc":[-85.6168227,41.9524261]},"n2138422358":{"id":"n2138422358","loc":[-85.6171913,41.9526158]},"n2138422359":{"id":"n2138422359","loc":[-85.6172403,41.9525589]},"n2138422360":{"id":"n2138422360","loc":[-85.6172097,41.952542]},"n2138422361":{"id":"n2138422361","loc":[-85.6173948,41.9523512]},"n2138422362":{"id":"n2138422362","loc":[-85.6174256,41.9523678]},"n2138422363":{"id":"n2138422363","loc":[-85.6174831,41.9523086]},"n2138422364":{"id":"n2138422364","loc":[-85.6173316,41.9522289]},"n2138422365":{"id":"n2138422365","loc":[-85.6174507,41.9521024]},"n2138422366":{"id":"n2138422366","loc":[-85.6174773,41.9521155]},"n2138422367":{"id":"n2138422367","loc":[-85.6176577,41.9519232]},"n2138422368":{"id":"n2138422368","loc":[-85.6176336,41.9519105]},"n2138422369":{"id":"n2138422369","loc":[-85.617747,41.9517861]},"n2138422370":{"id":"n2138422370","loc":[-85.6182675,41.9520559]},"n2138422371":{"id":"n2138422371","loc":[-85.6182105,41.9521219]},"n2138422372":{"id":"n2138422372","loc":[-85.6183863,41.9522203]},"n2138422373":{"id":"n2138422373","loc":[-85.6180984,41.9525266]},"n2138422374":{"id":"n2138422374","loc":[-85.6179159,41.9524295]},"n2138422375":{"id":"n2138422375","loc":[-85.617854,41.9524979]},"n2138422376":{"id":"n2138422376","loc":[-85.6177686,41.9524531]},"n2138422377":{"id":"n2138422377","loc":[-85.6174716,41.9527765]},"n2138422378":{"id":"n2138422378","loc":[-85.6178545,41.9529756]},"n2138425424":{"id":"n2138425424","loc":[-85.6171736,41.9536385]},"n2138425425":{"id":"n2138425425","loc":[-85.6180159,41.9535782]},"n2138425426":{"id":"n2138425426","loc":[-85.6181068,41.9536282]},"n2138425427":{"id":"n2138425427","loc":[-85.6180673,41.9542678]},"n2138425428":{"id":"n2138425428","loc":[-85.6178636,41.9542634]},"n2138425429":{"id":"n2138425429","loc":[-85.6176204,41.9542046]},"n2138425430":{"id":"n2138425430","loc":[-85.6174366,41.9541031]},"n2138425431":{"id":"n2138425431","loc":[-85.6172942,41.9539781]},"n2138425432":{"id":"n2138425432","loc":[-85.6172171,41.9538399]},"n2138425433":{"id":"n2138425433","loc":[-85.6168138,41.9543266]},"n2138425434":{"id":"n2138425434","loc":[-85.6167779,41.9538098]},"n2138425435":{"id":"n2138425435","loc":[-85.6165849,41.9537073]},"n2138425441":{"id":"n2138425441","loc":[-85.616458,41.9543184]},"n2138425442":{"id":"n2138425442","loc":[-85.6166428,41.954345]},"n2138425445":{"id":"n2138425445","loc":[-85.6181332,41.9514117]},"n2138425446":{"id":"n2138425446","loc":[-85.6183263,41.9514111]},"n2138425447":{"id":"n2138425447","loc":[-85.6185033,41.9514102]},"n2138425449":{"id":"n2138425449","loc":[-85.6186809,41.9514093]},"n2138425451":{"id":"n2138425451","loc":[-85.6188681,41.9514082]},"n2138436008":{"id":"n2138436008","loc":[-85.6170474,41.9513604]},"n2138436009":{"id":"n2138436009","loc":[-85.6164937,41.9519586]},"n2138436010":{"id":"n2138436010","loc":[-85.616497,41.9520725]},"n2138436011":{"id":"n2138436011","loc":[-85.6165654,41.9521645]},"n2138436012":{"id":"n2138436012","loc":[-85.6166631,41.9522178]},"n2138436013":{"id":"n2138436013","loc":[-85.6167327,41.9522554]},"n2138436014":{"id":"n2138436014","loc":[-85.6172383,41.9525125]},"n2138439319":{"id":"n2138439319","loc":[-85.6170432,41.9524057]},"n2138439320":{"id":"n2138439320","loc":[-85.617691,41.9517107]},"n2138439321":{"id":"n2138439321","loc":[-85.6177727,41.9516794]},"n2138439322":{"id":"n2138439322","loc":[-85.619085,41.9516811]},"n2138439323":{"id":"n2138439323","loc":[-85.6179432,41.952895]},"n2138439324":{"id":"n2138439324","loc":[-85.6180389,41.9529384]},"n2138439325":{"id":"n2138439325","loc":[-85.6176303,41.9533604]},"n2138439326":{"id":"n2138439326","loc":[-85.6175538,41.9534396]},"n2138439327":{"id":"n2138439327","loc":[-85.6173806,41.9523658]},"n2138439328":{"id":"n2138439328","loc":[-85.6171841,41.9522542]},"n2138439329":{"id":"n2138439329","loc":[-85.6172077,41.9524958]},"n2138439330":{"id":"n2138439330","loc":[-85.6171235,41.9525809]},"n2138439331":{"id":"n2138439331","loc":[-85.6180938,41.9527349]},"n2138439332":{"id":"n2138439332","loc":[-85.6177023,41.9525253]},"n2138439333":{"id":"n2138439333","loc":[-85.6175543,41.9526865]},"n2138439334":{"id":"n2138439334","loc":[-85.6179589,41.9528783]},"n185948820":{"id":"n185948820","loc":[-85.6163249,41.952701]},"n185948822":{"id":"n185948822","loc":[-85.6163757,41.952855]},"n185955123":{"id":"n185955123","loc":[-85.6198103,41.9510408]},"n185958839":{"id":"n185958839","loc":[-85.611651,41.954761]},"n185965033":{"id":"n185965033","loc":[-85.614195,41.954754]},"n185976502":{"id":"n185976502","loc":[-85.617375,41.947559]},"n185976504":{"id":"n185976504","loc":[-85.6174164,41.9510804]},"n185978828":{"id":"n185978828","loc":[-85.613542,41.954756]},"n185978830":{"id":"n185978830","loc":[-85.610373,41.954774]},"n2138420713":{"id":"n2138420713","loc":[-85.6174641,41.9506942]},"n2138420717":{"id":"n2138420717","loc":[-85.6173027,41.9512895]},"n2138420768":{"id":"n2138420768","loc":[-85.61745,41.9501974]},"n2138420773":{"id":"n2138420773","loc":[-85.6174135,41.9489136]},"n2138425436":{"id":"n2138425436","loc":[-85.6159148,41.9538036]},"n2138425437":{"id":"n2138425437","loc":[-85.6159534,41.9539677]},"n2138425438":{"id":"n2138425438","loc":[-85.6160306,41.9540846]},"n2138425439":{"id":"n2138425439","loc":[-85.6161354,41.954181]},"n2138425440":{"id":"n2138425440","loc":[-85.6162733,41.954263]},"n2138425443":{"id":"n2138425443","loc":[-85.6183273,41.9510826]},"n2138425444":{"id":"n2138425444","loc":[-85.6181354,41.9510835]},"n2138425448":{"id":"n2138425448","loc":[-85.6185033,41.9510816]},"n2138425450":{"id":"n2138425450","loc":[-85.6186816,41.9510808]},"n2138425452":{"id":"n2138425452","loc":[-85.6188641,41.9510818]},"n2138435984":{"id":"n2138435984","loc":[-85.6167607,41.9501009]},"n2138436000":{"id":"n2138436000","loc":[-85.6173169,41.947558]},"n2138436001":{"id":"n2138436001","loc":[-85.6173362,41.948883]},"n2138436002":{"id":"n2138436002","loc":[-85.6167791,41.9492952]},"n2138436003":{"id":"n2138436003","loc":[-85.6167543,41.949349]},"n2138436004":{"id":"n2138436004","loc":[-85.6167648,41.9509125]},"n2138436005":{"id":"n2138436005","loc":[-85.6168832,41.9510412]},"n2138436006":{"id":"n2138436006","loc":[-85.6170045,41.9511417]},"n2138436007":{"id":"n2138436007","loc":[-85.6170624,41.9512483]},"n2138436017":{"id":"n2138436017","loc":[-85.6168094,41.9492729]},"n2138436021":{"id":"n2138436021","loc":[-85.6167553,41.9494886]},"n2138436023":{"id":"n2138436023","loc":[-85.6167585,41.9499707]},"n2138436025":{"id":"n2138436025","loc":[-85.6167567,41.9497018]},"w203838284":{"id":"w203838284","tags":{"area":"yes","leisure":"pitch","sport":"baseball"},"nodes":["n2138425424","n2138425425","n2138425426","n2138425427","n2138425428","n2138425429","n2138425430","n2138425431","n2138425432","n2138425424"]},"w203837928":{"id":"w203837928","tags":{"highway":"service"},"nodes":["n2138420717","n2138420718","n2138420719","n2138420720","n2138420721","n2138420722","n185948818","n2138420723","n2138420724","n2138420715"]},"w203839364":{"id":"w203839364","tags":{"highway":"footway"},"nodes":["n2138439331","n2138439332"]},"w203837932":{"id":"w203837932","tags":{"amenity":"parking","area":"yes"},"nodes":["n2138420744","n2138420745","n2138420746","n2138420747","n2138420748","n2138420749","n2138420750","n2138420751","n2138420744"]},"w203839362":{"id":"w203839362","tags":{"highway":"footway"},"nodes":["n2138439327","n2138439328"]},"w203839363":{"id":"w203839363","tags":{"highway":"footway"},"nodes":["n2138439329","n2138439330"]},"w203837933":{"id":"w203837933","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n185955128","n2138420760","n2138420753","n2138420764","n2138420759","n2138420758","n2138420754","n2138420755","n2138420766","n2138420756"]},"w203837936":{"id":"w203837936","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2138420765","n2138420766"]},"w17966364":{"id":"w17966364","tags":{"access":"private","highway":"service","name":"Collins Dr"},"nodes":["n185961362","n185976502","n2138420773","n2138420768","n2138420713","n185976504","n2138420717","n2138420714","n2138420715","n2138420727","n2138420728","n2138420716"]},"w203838040":{"id":"w203838040","tags":{"amenity":"school","area":"yes","building":"yes","name":"Three Rivers Middle School"},"nodes":["n2138422349","n2138422350","n2138422351","n2138422352","n2138422353","n2138422354","n2138422355","n2138422356","n2138422357","n2138439330","n2138422358","n2138422359","n2138422360","n2138436014","n2138439327","n2138422361","n2138422362","n2138422363","n2138422364","n2138422365","n2138422366","n2138422367","n2138422368","n2138422369","n2138422370","n2138422371","n2138422372","n2138422373","n2138422374","n2138422375","n2138422376","n2138439332","n2138439333","n2138422377","n2138422378","n2138422349"]},"w17964049":{"id":"w17964049","tags":{"highway":"service"},"nodes":["n185955120","n185955123","n2138420716","n185955128","n2138420762","n2138420752","n2138420761","n2138420759"]},"w41074899":{"id":"w41074899","tags":{"highway":"secondary","name":"E Hoffman St","ref":"M 60"},"nodes":["n185978817","n185978819","n185978821","n185965033","n185978828","n185958839","n185978830"]},"w203839365":{"id":"w203839365","tags":{"highway":"footway"},"nodes":["n2138439333","n2138439334"]},"w203837935":{"id":"w203837935","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2138420762","n2138420763","n2138420764"]},"w203838287":{"id":"w203838287","tags":{"area":"yes","leisure":"pitch","sport":"tennis"},"nodes":["n2138425446","n2138425447","n2138425448","n2138425443","n2138425446"]},"w203837934":{"id":"w203837934","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2138420760","n2138420763","n2138420761"]},"w203838289":{"id":"w203838289","tags":{"area":"yes","leisure":"pitch","sport":"tennis"},"nodes":["n2138425449","n2138425451","n2138425452","n2138425450","n2138425449"]},"w17963047":{"id":"w17963047","tags":{"highway":"service"},"nodes":["n185948818","n2138436013","n185948820","n185948822","n185948824","n2138439326","n2138420767","n2138420766"]},"w203839091":{"id":"w203839091","tags":{"highway":"footway"},"nodes":["n185976502","n2138436000","n2138436001","n2138436017","n2138436002","n2138436003","n2138436021","n2138436025","n2138436023","n2138435984","n2138436004","n2138436005","n2138436006","n2138436007","n2138436008","n2138436009","n2138436010","n2138436011","n2138436012","n2138436013","n2138439319","n2138439329","n2138436014"]},"w204830797":{"id":"w204830797","tags":{"highway":"service","service":"parking_aisle"},"nodes":["n2138420756","n2138420757","n2138420765","n2138420758"]},"w203838288":{"id":"w203838288","tags":{"area":"yes","leisure":"pitch","sport":"tennis"},"nodes":["n2138425447","n2138425449","n2138425450","n2138425448","n2138425447"]},"w203838285":{"id":"w203838285","tags":{"area":"yes","leisure":"pitch","sport":"baseball"},"nodes":["n2138425433","n2138425434","n2138425435","n2138425436","n2138425437","n2138425438","n2138425439","n2138425440","n2138425441","n2138425442","n2138425433"]},"w203838286":{"id":"w203838286","tags":{"area":"yes","leisure":"pitch","sport":"tennis"},"nodes":["n2138425443","n2138425444","n2138425445","n2138425446","n2138425443"]},"w203837929":{"id":"w203837929","tags":{"amenity":"parking","area":"yes"},"nodes":["n2138420725","n2138420726","n2138420727","n2138420728","n2138420725"]},"w203839361":{"id":"w203839361","tags":{"highway":"footway"},"nodes":["n2138439319","n2138439328","n2138439320","n2138439321","n2138439322","n2138439331","n2138439334","n2138439323","n2138439324","n2138439325","n2138439326"]},"n394381698":{"id":"n394381698","loc":[-85.614471,41.954755]},"n394381699":{"id":"n394381699","loc":[-85.6152,41.954744]},"n394381700":{"id":"n394381700","loc":[-85.615201,41.954081]},"n394381701":{"id":"n394381701","loc":[-85.614426,41.954042]},"n394381702":{"id":"n394381702","loc":[-85.616319,41.954749]},"n394381704":{"id":"n394381704","loc":[-85.616152,41.954752]},"n394381706":{"id":"n394381706","loc":[-85.615201,41.95483]},"n394490775":{"id":"n394490775","loc":[-85.613971,41.954839]},"n394490782":{"id":"n394490782","loc":[-85.614372,41.954841]},"n185958835":{"id":"n185958835","loc":[-85.611615,41.953704]},"n185958837":{"id":"n185958837","loc":[-85.611636,41.953938]},"n185958842":{"id":"n185958842","loc":[-85.611187,41.951686]},"n185958844":{"id":"n185958844","loc":[-85.611087,41.951741]},"n185958845":{"id":"n185958845","loc":[-85.611034,41.951852]},"n185958847":{"id":"n185958847","loc":[-85.611016,41.95196]},"n185958849":{"id":"n185958849","loc":[-85.610989,41.95328]},"n185958851":{"id":"n185958851","loc":[-85.611021,41.953484]},"n185958852":{"id":"n185958852","loc":[-85.611091,41.953603]},"n185958853":{"id":"n185958853","loc":[-85.6112,41.953661]},"n185958855":{"id":"n185958855","loc":[-85.611364,41.953686]},"n185965031":{"id":"n185965031","loc":[-85.614204,41.953696]},"n185965032":{"id":"n185965032","loc":[-85.6142,41.953978]},"n185965062":{"id":"n185965062","loc":[-85.614617,41.951639]},"n185965064":{"id":"n185965064","loc":[-85.61463,41.951852]},"n185965066":{"id":"n185965066","loc":[-85.614642,41.953436]},"n185965068":{"id":"n185965068","loc":[-85.6146,41.953551]},"n185965071":{"id":"n185965071","loc":[-85.614487,41.95363]},"n185965073":{"id":"n185965073","loc":[-85.614354,41.953672]},"n185966288":{"id":"n185966288","loc":[-85.61179,41.953695]},"n185966290":{"id":"n185966290","loc":[-85.612232,41.953685]},"n185966293":{"id":"n185966293","loc":[-85.613438,41.953677]},"n185966349":{"id":"n185966349","loc":[-85.611323,41.951653]},"n185966351":{"id":"n185966351","loc":[-85.611892,41.951642]},"n185966352":{"id":"n185966352","loc":[-85.612216,41.951641]},"n185966353":{"id":"n185966353","loc":[-85.613111,41.951639]},"n185966354":{"id":"n185966354","loc":[-85.613396,41.95164]},"n185966355":{"id":"n185966355","loc":[-85.614221,41.95164]},"n185973839":{"id":"n185973839","loc":[-85.61341,41.951919]},"n185973840":{"id":"n185973840","loc":[-85.613438,41.953308]},"n185980222":{"id":"n185980222","loc":[-85.613781,41.955164]},"n185980223":{"id":"n185980223","loc":[-85.613815,41.955237]},"n185980225":{"id":"n185980225","loc":[-85.613837,41.955316]},"n185990345":{"id":"n185990345","loc":[-85.612211,41.951977]},"n185955743":{"id":"n185955743","loc":[-85.613873,41.95635]},"n185980227":{"id":"n185980227","loc":[-85.613851,41.955415]},"n185980229":{"id":"n185980229","loc":[-85.613918,41.957134]},"n394381703":{"id":"n394381703","loc":[-85.616287,41.955674]},"n394381705":{"id":"n394381705","loc":[-85.615164,41.955676]},"n394490777":{"id":"n394490777","loc":[-85.613973,41.955979]},"n394490780":{"id":"n394490780","loc":[-85.614364,41.955987]},"w17965307":{"id":"w17965307","tags":{"highway":"residential","name":"Bates Ave"},"nodes":["n185958842","n185966349","n185966351","n185966352","n185966353","n185966354","n185966355","n185965062"]},"w17967957":{"id":"w17967957","tags":{"highway":"residential","name":"Krum Ave"},"nodes":["n185966352","n185990345","n185966290"]},"w17964508":{"id":"w17964508","tags":{"highway":"residential","name":"Blossom Dr"},"nodes":["n185958842","n185958844","n185958845","n185958847","n185958849","n185958851","n185958852","n185958853","n185958855","n185958835"]},"w17964507":{"id":"w17964507","tags":{"highway":"residential","name":"Blossom Dr"},"nodes":["n185958835","n185958837","n185958839"]},"w34367080":{"id":"w34367080","tags":{"admin_level":"8","boundary":"administrative"},"nodes":["n394381699","n394381706","n394381705","n394381703","n394381702","n394381704","n394381699"]},"w17965302":{"id":"w17965302","tags":{"highway":"residential","name":"Clausen Ave"},"nodes":["n185958835","n185966288","n185966290","n185966293","n185965031"]},"w17965156":{"id":"w17965156","tags":{"highway":"residential","name":"Orchard Dr"},"nodes":["n185965062","n185965064","n185965066","n185965068","n185965071","n185965073","n185965031"]},"w34369812":{"id":"w34369812","tags":{"admin_level":"8","boundary":"administrative"},"nodes":["n394490775","n394490777","n394490780","n394490782","n394490775"]},"w17965151":{"id":"w17965151","tags":{"highway":"residential","name":"Orchard Dr"},"nodes":["n185965031","n185965032","n185965033"]},"w17966756":{"id":"w17966756","tags":{"access":"private","highway":"service","name":"Lockport Dr"},"nodes":["n185978828","n185980222","n185980223","n185980225","n185980227","n185955743","n185980229"]},"w17966056":{"id":"w17966056","tags":{"highway":"residential","name":"Angell Ave"},"nodes":["n185966354","n185973839","n185973840","n185966293"]},"w34367079":{"id":"w34367079","tags":{"admin_level":"8","boundary":"administrative"},"nodes":["n394381700","n394381701","n394381698","n394381699","n394381700"]},"n185955744":{"id":"n185955744","loc":[-85.611753,41.956208]},"n185988932":{"id":"n185988932","loc":[-85.6159,41.956336]},"n185988934":{"id":"n185988934","loc":[-85.6159158,41.9590646]},"n185988935":{"id":"n185988935","loc":[-85.6157358,41.959364],"tags":{"highway":"turning_circle"}},"n2138447007":{"id":"n2138447007","loc":[-85.6130784,41.9590689]},"n2138447008":{"id":"n2138447008","loc":[-85.6133328,41.9593805]},"n2138447003":{"id":"n2138447003","loc":[-85.610238,41.9547745]},"n2138447004":{"id":"n2138447004","loc":[-85.6102652,41.9566041]},"n2138447005":{"id":"n2138447005","loc":[-85.610325,41.9568823]},"n2138447006":{"id":"n2138447006","loc":[-85.6105644,41.9571383]},"n2138447009":{"id":"n2138447009","loc":[-85.6135946,41.959948]},"n2138447010":{"id":"n2138447010","loc":[-85.6136071,41.9629372]},"n2138447011":{"id":"n2138447011","loc":[-85.6134392,41.9633182]},"n2138447012":{"id":"n2138447012","loc":[-85.6130151,41.9636073]},"n2138447013":{"id":"n2138447013","loc":[-85.6122729,41.9637125]},"n2138447014":{"id":"n2138447014","loc":[-85.6056682,41.963752]},"w17964174":{"id":"w17964174","tags":{"access":"private","highway":"service"},"nodes":["n185955743","n185955744"]},"w17967743":{"id":"w17967743","tags":{"access":"private","highway":"service","name":"Manistee River Rd"},"nodes":["n185971574","n185988932","n185971407","n185981301","n185967987","n185988934","n185988935"]},"w203839666":{"id":"w203839666","tags":{"highway":"residential","name":"Hov Aire Drive"},"nodes":["n2138447003","n2138447004","n2138447005","n2138447006","n2138447007","n2138447008","n2138447009","n2138447010","n2138447011","n2138447012","n2138447013","n2138447014"]}}';iD.data = {"deprecated":[{"old":{"amenity":"firepit"},"replace":{"leisure":"firepit"}},{"old":{"barrier":"wire_fence"},"replace":{"barrier":"fence","fence_type":"chain"}},{"old":{"barrier":"wood_fence"},"replace":{"barrier":"fence","fence_type":"wood"}},{"old":{"highway":"ford"},"replace":{"ford":"yes"}},{"old":{"highway":"stile"},"replace":{"barrier":"stile"}},{"old":{"highway":"incline"},"replace":{"highway":"road","incline":"up"}},{"old":{"highway":"incline_steep"},"replace":{"highway":"road","incline":"up"}},{"old":{"highway":"unsurfaced"},"replace":{"highway":"road","incline":"unpaved"}},{"old":{"landuse":"wood"},"replace":{"landuse":"forest","natural":"wood"}},{"old":{"natural":"marsh"},"replace":{"natural":"wetland","wetland":"marsh"}},{"old":{"power_source":"*"},"replace":{"generator:source":"$1"}},{"old":{"power_rating":"*"},"replace":{"generator:output":"$1"}},{"old":{"shop":"organic"},"replace":{"shop":"supermarket","organic":"only"}}],"discarded":["created_by","odbl","odbl:note","tiger:upload_uuid","tiger:tlid","tiger:source","tiger:separated","geobase:datasetName","geobase:uuid","sub_sea:type","KSJ2:ADS","KSJ2:ARE","KSJ2:AdminArea","KSJ2:COP_label","KSJ2:DFD","KSJ2:INT","KSJ2:INT_label","KSJ2:LOC","KSJ2:LPN","KSJ2:OPC","KSJ2:PubFacAdmin","KSJ2:RAC","KSJ2:RAC_label","KSJ2:RIC","KSJ2:RIN","KSJ2:WSC","KSJ2:coordinate","KSJ2:curve_id","KSJ2:curve_type","KSJ2:filename","KSJ2:lake_id","KSJ2:lat","KSJ2:long","KSJ2:river_id","yh:LINE_NAME","yh:LINE_NUM","yh:STRUCTURE","yh:TOTYUMONO","yh:TYPE","yh:WIDTH","yh:WIDTH_RANK","SK53_bulk:load"],"wikipedia":[["Abkhazian","Аҧсшәа","ab"],["Achinese","Acèh","ace"],["Afrikaans","Afrikaans","af"],["Akan","Akan","ak"],["Alemannisch","Alemannisch","als"],["Amharic","አማርኛ","am"],["Aragonese","aragonés","an"],["Old English","Ænglisc","ang"],["Arabic","العربية","ar"],["Aramaic","ܐܪܡܝܐ","arc"],["Egyptian Arabic","مصرى","arz"],["Assamese","অসমীয়া","as"],["Asturian","asturianu","ast"],["Avaric","авар","av"],["Aymara","Aymar aru","ay"],["Azerbaijani","azərbaycanca","az"],["South Azerbaijani","تۆرکجه","azb"],["Bashkir","башҡортса","ba"],["Bavarian","Boarisch","bar"],["Samogitian","žemaitėška","bat-smg"],["Bikol Central","Bikol Central","bcl"],["Belarusian","беларуская","be"],["беларуская (тарашкевіца)‎","беларуская (тарашкевіца)‎","be-x-old"],["Bulgarian","български","bg"],["भोजपुरी","भोजपुरी","bh"],["Bislama","Bislama","bi"],["Banjar","Bahasa Banjar","bjn"],["Bambara","bamanankan","bm"],["Bengali","বাংলা","bn"],["Tibetan","བོད་ཡིག","bo"],["Bishnupriya","বিষ্ণুপ্রিয়া মণিপুরী","bpy"],["Breton","brezhoneg","br"],["Bosnian","bosanski","bs"],["Buginese","ᨅᨔ ᨕᨘᨁᨗ","bug"],["буряад","буряад","bxr"],["Catalan","català","ca"],["Chavacano de Zamboanga","Chavacano de Zamboanga","cbk-zam"],["Min Dong Chinese","Mìng-dĕ̤ng-ngṳ̄","cdo"],["Chechen","нохчийн","ce"],["Cebuano","Cebuano","ceb"],["Chamorro","Chamoru","ch"],["Cherokee","ᏣᎳᎩ","chr"],["Cheyenne","Tsetsêhestâhese","chy"],["Central Kurdish","کوردیی ناوەندی","ckb"],["Corsican","corsu","co"],["Cree","Nēhiyawēwin / ᓀᐦᐃᔭᐍᐏᐣ","cr"],["Crimean Turkish","qırımtatarca","crh"],["Czech","čeÅ¡tina","cs"],["Kashubian","kaszëbsczi","csb"],["Church Slavic","словѣньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ","cu"],["Chuvash","Чӑвашла","cv"],["Welsh","Cymraeg","cy"],["Danish","dansk","da"],["German","Deutsch","de"],["Zazaki","Zazaki","diq"],["Lower Sorbian","dolnoserbski","dsb"],["Divehi","ދިވެހިބަސް","dv"],["Dzongkha","ཇོང་ཁ","dz"],["Ewe","eʋegbe","ee"],["Greek","Ελληνικά","el"],["Emiliano-Romagnolo","emiliàn e rumagnòl","eml"],["English","English","en"],["Esperanto","Esperanto","eo"],["Spanish","español","es"],["Estonian","eesti","et"],["Basque","euskara","eu"],["Extremaduran","estremeñu","ext"],["Persian","فارسی","fa"],["Fulah","Fulfulde","ff"],["Finnish","suomi","fi"],["Võro","Võro","fiu-vro"],["Fijian","Na Vosa Vakaviti","fj"],["Faroese","føroyskt","fo"],["French","français","fr"],["Arpitan","arpetan","frp"],["Northern Frisian","Nordfriisk","frr"],["Friulian","furlan","fur"],["Western Frisian","Frysk","fy"],["Irish","Gaeilge","ga"],["Gagauz","Gagauz","gag"],["Gan Chinese","贛語","gan"],["Scottish Gaelic","Gàidhlig","gd"],["Galician","galego","gl"],["Gilaki","گیلکی","glk"],["Guarani","Avañe'ẽ","gn"],["Goan Konkani","गोवा कोंकणी / Gova Konknni","gom"],["Gothic","𐌲𐌿𐍄𐌹𐍃𐌺","got"],["Gujarati","ગુજરાતી","gu"],["Manx","Gaelg","gv"],["Hausa","Hausa","ha"],["Hakka Chinese","客家語/Hak-kâ-ngî","hak"],["Hawaiian","Hawai`i","haw"],["Hebrew","עברית","he"],["Hindi","हिन्दी","hi"],["Fiji Hindi","Fiji Hindi","hif"],["Croatian","hrvatski","hr"],["Upper Sorbian","hornjoserbsce","hsb"],["Haitian","Kreyòl ayisyen","ht"],["Hungarian","magyar","hu"],["Armenian","Հայերեն","hy"],["Interlingua","interlingua","ia"],["Indonesian","Bahasa Indonesia","id"],["Interlingue","Interlingue","ie"],["Igbo","Igbo","ig"],["Inupiaq","Iñupiak","ik"],["Iloko","Ilokano","ilo"],["Ido","Ido","io"],["Icelandic","íslenska","is"],["Italian","italiano","it"],["Inuktitut","ᐃᓄᒃᑎᑐᑦ/inuktitut","iu"],["Japanese","日本語","ja"],["Lojban","Lojban","jbo"],["Javanese","Basa Jawa","jv"],["Georgian","ქართული","ka"],["Kara-Kalpak","Qaraqalpaqsha","kaa"],["Kabyle","Taqbaylit","kab"],["Kabardian","Адыгэбзэ","kbd"],["Kongo","Kongo","kg"],["Kikuyu","GÄ©kÅ©yÅ©","ki"],["Kazakh","қазақша","kk"],["Kalaallisut","kalaallisut","kl"],["Khmer","ភាសាខ្មែរ","km"],["Kannada","ಕನ್ನಡ","kn"],["Korean","한국어","ko"],["Komi-Permyak","Перем Коми","koi"],["Karachay-Balkar","къарачай-малкъар","krc"],["Kashmiri","कॉशुर / کٲشُر","ks"],["Colognian","Ripoarisch","ksh"],["Kurdish","Kurdî","ku"],["Komi","коми","kv"],["Cornish","kernowek","kw"],["Kyrgyz","Кыргызча","ky"],["Latin","Latina","la"],["Ladino","Ladino","lad"],["Luxembourgish","Lëtzebuergesch","lb"],["лакку","лакку","lbe"],["Lezghian","лезги","lez"],["Ganda","Luganda","lg"],["Limburgish","Limburgs","li"],["Ligurian","Ligure","lij"],["Lombard","lumbaart","lmo"],["Lingala","lingála","ln"],["Lao","ລາວ","lo"],["Northern Luri","لۊری شومالی","lrc"],["Lithuanian","lietuvių","lt"],["Latgalian","latgaļu","ltg"],["Latvian","latvieÅ¡u","lv"],["Maithili","मैथिली","mai"],["Basa Banyumasan","Basa Banyumasan","map-bms"],["Moksha","мокшень","mdf"],["Malagasy","Malagasy","mg"],["Eastern Mari","олык марий","mhr"],["Maori","Māori","mi"],["Minangkabau","Baso Minangkabau","min"],["Macedonian","македонски","mk"],["Malayalam","മലയാളം","ml"],["Mongolian","монгол","mn"],["Marathi","मराठी","mr"],["Western Mari","кырык мары","mrj"],["Malay","Bahasa Melayu","ms"],["Maltese","Malti","mt"],["Mirandese","Mirandés","mwl"],["Burmese","မြန်မာဘာသာ","my"],["Erzya","эрзянь","myv"],["Mazanderani","مازِرونی","mzn"],["Nauru","Dorerin Naoero","na"],["Nāhuatl","Nāhuatl","nah"],["Neapolitan","Napulitano","nap"],["Low German","Plattdüütsch","nds"],["Low Saxon (Netherlands)","Nedersaksies","nds-nl"],["Nepali","नेपाली","ne"],["Newari","नेपाल भाषा","new"],["Dutch","Nederlands","nl"],["Norwegian Nynorsk","norsk nynorsk","nn"],["Norwegian","norsk bokmÃ¥l","no"],["Novial","Novial","nov"],["Nouormand","Nouormand","nrm"],["Northern Sotho","Sesotho sa Leboa","nso"],["Navajo","Diné bizaad","nv"],["Nyanja","Chi-Chewa","ny"],["Occitan","occitan","oc"],["Oromo","Oromoo","om"],["Oriya","ଓଡ଼ିଆ","or"],["Ossetic","Ирон","os"],["Punjabi","ਪੰਜਾਬੀ","pa"],["Pangasinan","Pangasinan","pag"],["Pampanga","Kapampangan","pam"],["Papiamento","Papiamentu","pap"],["Picard","Picard","pcd"],["Pennsylvania German","Deitsch","pdc"],["Palatine German","Pälzisch","pfl"],["Pali","पालि","pi"],["Norfuk / Pitkern","Norfuk / Pitkern","pih"],["Polish","polski","pl"],["Piedmontese","Piemontèis","pms"],["Western Punjabi","پنجابی","pnb"],["Pontic","Ποντιακά","pnt"],["Pashto","پښتو","ps"],["Portuguese","português","pt"],["Quechua","Runa Simi","qu"],["Romansh","rumantsch","rm"],["Romani","Romani","rmy"],["Rundi","Kirundi","rn"],["Romanian","română","ro"],["Aromanian","armãneashti","roa-rup"],["tarandíne","tarandíne","roa-tara"],["Russian","русский","ru"],["Rusyn","русиньскый","rue"],["Kinyarwanda","Kinyarwanda","rw"],["Sanskrit","संस्कृतम्","sa"],["Sakha","саха тыла","sah"],["Sardinian","sardu","sc"],["Sicilian","sicilianu","scn"],["Scots","Scots","sco"],["Sindhi","سنڌي","sd"],["Northern Sami","sámegiella","se"],["Sango","Sängö","sg"],["Serbo-Croatian","srpskohrvatski / српскохрватски","sh"],["Sinhala","සිංහල","si"],["Simple English","Simple English","simple"],["Slovak","slovenčina","sk"],["Slovenian","slovenščina","sl"],["Samoan","Gagana Samoa","sm"],["Shona","chiShona","sn"],["Somali","Soomaaliga","so"],["Albanian","shqip","sq"],["Serbian","српски / srpski","sr"],["Sranan Tongo","Sranantongo","srn"],["Swati","SiSwati","ss"],["Southern Sotho","Sesotho","st"],["Saterland Frisian","Seeltersk","stq"],["Sundanese","Basa Sunda","su"],["Swedish","svenska","sv"],["Swahili","Kiswahili","sw"],["Silesian","ślůnski","szl"],["Tamil","தமிழ்","ta"],["Telugu","తెలుగు","te"],["Tetum","tetun","tet"],["Tajik","тоҷикӣ","tg"],["Thai","ไทย","th"],["Tigrinya","ትግርኛ","ti"],["Turkmen","Türkmençe","tk"],["Tagalog","Tagalog","tl"],["Tswana","Setswana","tn"],["Tongan","lea faka-Tonga","to"],["Tok Pisin","Tok Pisin","tpi"],["Turkish","Türkçe","tr"],["Tsonga","Xitsonga","ts"],["Tatar","татарча/tatarça","tt"],["Tumbuka","chiTumbuka","tum"],["Twi","Twi","tw"],["Tahitian","reo tahiti","ty"],["Tuvinian","тыва дыл","tyv"],["Udmurt","удмурт","udm"],["Uyghur","ئۇيغۇرچە / Uyghurche","ug"],["Ukrainian","українська","uk"],["Urdu","اردو","ur"],["Uzbek","oÊ»zbekcha/ўзбекча","uz"],["Venda","Tshivenda","ve"],["Venetian","vèneto","vec"],["Veps","vepsän kel’","vep"],["Vietnamese","Tiếng Việt","vi"],["West Flemish","West-Vlams","vls"],["Volapük","Volapük","vo"],["Walloon","walon","wa"],["Waray","Winaray","war"],["Wolof","Wolof","wo"],["Wu Chinese","吴语","wuu"],["Kalmyk","хальмг","xal"],["Xhosa","isiXhosa","xh"],["Mingrelian","მარგალური","xmf"],["Yiddish","ייִדיש","yi"],["Yoruba","Yorùbá","yo"],["Zhuang","Vahcuengh","za"],["Zeelandic","Zeêuws","zea"],["Chinese","中文","zh"],["Classical Chinese","文言","zh-classical"],["Chinese (Min Nan)","Bân-lâm-gú","zh-min-nan"],["Cantonese","粵語","zh-yue"],["Zulu","isiZulu","zu"]],"imperial":{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"id":0},"geometry":{"type":"MultiPolygon","coordinates":[[[[-1.426496,50.639342],[-1.445953,50.648139],[-1.452789,50.654283],[-1.485951,50.669338],[-1.497426,50.672309],[-1.535146,50.669379],[-1.551503,50.665107],[-1.569488,50.658026],[-1.545318,50.686103],[-1.50593,50.707709],[-1.418691,50.733791],[-1.420888,50.730455],[-1.423451,50.7237],[-1.425364,50.72012],[-1.400868,50.721991],[-1.377553,50.734198],[-1.343495,50.761054],[-1.318512,50.772162],[-1.295766,50.773179],[-1.144276,50.733791],[-1.119537,50.734198],[-1.10912,50.732856],[-1.097035,50.726955],[-1.096425,50.724433],[-1.097646,50.71601],[-1.097035,50.713324],[-1.094228,50.712633],[-1.085561,50.714016],[-1.082753,50.713324],[-1.062327,50.692816],[-1.062327,50.685289],[-1.066965,50.685248],[-1.069651,50.683498],[-1.071889,50.680976],[-1.075307,50.678534],[-1.112701,50.671454],[-1.128651,50.666449],[-1.156361,50.650784],[-1.162221,50.645982],[-1.164703,50.640937],[-1.164666,50.639543],[-1.426496,50.639342]]],[[[-7.240314,55.050389],[-7.013736,55.1615],[-6.958913,55.20349],[-6.571562,55.268366],[-6.509633,55.31398],[-6.226158,55.344406],[-6.07105,55.25001],[-5.712696,55.017635],[-5.242021,54.415204],[-5.695554,54.14284],[-5.72473,54.07455],[-6.041633,54.006238],[-6.153953,54.054931],[-6.220539,54.098803],[-6.242502,54.099758],[-6.263661,54.104682],[-6.269887,54.097927],[-6.28465,54.105226],[-6.299585,54.104037],[-6.313796,54.099696],[-6.327128,54.097888],[-6.338962,54.102952],[-6.346662,54.109877],[-6.354827,54.110652],[-6.368108,54.097319],[-6.369348,54.091118],[-6.367643,54.083418],[-6.366919,54.075098],[-6.371157,54.066778],[-6.377513,54.063264],[-6.401026,54.060887],[-6.426761,54.05541],[-6.433892,54.055306],[-6.4403,54.057993],[-6.446243,54.062438],[-6.450222,54.066675],[-6.450894,54.068432],[-6.47854,54.067709],[-6.564013,54.04895],[-6.571868,54.049519],[-6.587164,54.053343],[-6.595071,54.052412],[-6.60029,54.04895],[-6.605217,54.044475],[-6.610987,54.039235],[-6.616465,54.037271],[-6.630624,54.041819],[-6.657289,54.061146],[-6.672534,54.068432],[-6.657082,54.091945],[-6.655791,54.103314],[-6.666436,54.114786],[-6.643957,54.131839],[-6.634552,54.150133],[-6.640339,54.168013],[-6.648448,54.173665],[-6.663025,54.183826],[-6.683954,54.194368],[-6.694651,54.197985],[-6.706537,54.198915],[-6.717234,54.195143],[-6.724779,54.188631],[-6.73284,54.183567],[-6.744777,54.184187],[-6.766481,54.192352],[-6.787824,54.202998],[-6.807358,54.21633],[-6.823946,54.23235],[-6.829733,54.242375],[-6.833196,54.25209],[-6.837743,54.260513],[-6.846683,54.266456],[-6.882185,54.277257],[-6.864667,54.282734],[-6.856657,54.292811],[-6.858414,54.307332],[-6.870015,54.326001],[-6.879705,54.341594],[-6.885957,54.345624],[-6.897895,54.346193],[-6.905956,54.349035],[-6.915051,54.365933],[-6.922028,54.372703],[-6.984091,54.403089],[-7.017836,54.413166],[-7.049255,54.411512],[-7.078504,54.394717],[-7.127028,54.349759],[-7.159894,54.335186],[-7.168059,54.335031],[-7.185629,54.336943],[-7.18947,54.335692],[-7.19245,54.334721],[-7.193949,54.329967],[-7.191468,54.323869],[-7.187644,54.318804],[-7.185009,54.317254],[-7.184647,54.316634],[-7.192399,54.307384],[-7.193691,54.307539],[-7.199168,54.303457],[-7.206661,54.304903],[-7.211467,54.30418],[-7.209038,54.293431],[-7.1755,54.283664],[-7.181495,54.269763],[-7.14589,54.25209],[-7.159739,54.24067],[-7.153331,54.224237],[-7.174725,54.216072],[-7.229502,54.207545],[-7.240871,54.202326],[-7.249088,54.197416],[-7.255496,54.190854],[-7.261128,54.18088],[-7.256322,54.176901],[-7.247021,54.17225],[-7.24578,54.166979],[-7.265366,54.16114],[-7.26087,54.151166],[-7.263505,54.140986],[-7.27074,54.132253],[-7.280042,54.126155],[-7.293788,54.122021],[-7.297353,54.125896],[-7.29632,54.134991],[-7.296423,54.146515],[-7.295028,54.155404],[-7.292134,54.162638],[-7.295545,54.165119],[-7.325982,54.154577],[-7.333165,54.149409],[-7.333165,54.142743],[-7.310324,54.114683],[-7.316489,54.11428],[-7.326964,54.113597],[-7.375488,54.123312],[-7.390216,54.121194],[-7.39466,54.121917],[-7.396624,54.126258],[-7.403962,54.135043],[-7.41223,54.136438],[-7.422255,54.135456],[-7.425769,54.136955],[-7.414659,54.145688],[-7.439619,54.146929],[-7.480753,54.127653],[-7.502302,54.125121],[-7.609014,54.139901],[-7.620796,54.144965],[-7.624052,54.153336],[-7.625706,54.162173],[-7.632682,54.168529],[-7.70477,54.200362],[-7.722599,54.202326],[-7.782078,54.2],[-7.836959,54.204341],[-7.856441,54.211421],[-7.86967,54.226872],[-7.873649,54.271055],[-7.880264,54.287023],[-7.894966,54.293586],[-7.93411,54.297049],[-7.942075,54.298873],[-7.950802,54.300873],[-7.96801,54.31219],[-7.981033,54.326556],[-8.002194,54.357923],[-8.03134,54.358027],[-8.05648,54.365882],[-8.079941,54.380196],[-8.122419,54.415233],[-8.146346,54.430736],[-8.156035,54.439055],[-8.158128,54.447117],[-8.161177,54.454817],[-8.173837,54.461741],[-8.168467,54.463477],[-8.15017,54.46939],[-8.097046,54.478588],[-8.072448,54.487063],[-8.060976,54.493316],[-8.05586,54.497553],[-8.043561,54.512229],[-8.023278,54.529696],[-8.002194,54.543442],[-7.926411,54.533055],[-7.887137,54.532125],[-7.848844,54.54091],[-7.749264,54.596152],[-7.707871,54.604162],[-7.707944,54.604708],[-7.707951,54.604763],[-7.710558,54.624264],[-7.721204,54.625866],[-7.736758,54.619251],[-7.753553,54.614497],[-7.769159,54.618011],[-7.801199,54.634806],[-7.814996,54.639457],[-7.822541,54.638113],[-7.838044,54.63124],[-7.846416,54.631447],[-7.85427,54.636408],[-7.864347,54.649069],[-7.872771,54.652221],[-7.890082,54.655063],[-7.906619,54.661316],[-7.914835,54.671651],[-7.907135,54.686689],[-7.913233,54.688653],[-7.929666,54.696714],[-7.880109,54.711029],[-7.845899,54.731027],[-7.832153,54.730614],[-7.803576,54.716145],[-7.770503,54.706016],[-7.736603,54.707463],[-7.70229,54.718883],[-7.667512,54.738779],[-7.649683,54.744877],[-7.61537,54.739347],[-7.585398,54.744722],[-7.566639,54.738675],[-7.556149,54.738365],[-7.543075,54.741673],[-7.543023,54.743791],[-7.548398,54.747202],[-7.551705,54.754695],[-7.549741,54.779603],[-7.543385,54.793091],[-7.470831,54.845284],[-7.45507,54.863009],[-7.444735,54.884455],[-7.444735,54.894893],[-7.448972,54.920318],[-7.445251,54.932152],[-7.436983,54.938301],[-7.417139,54.943056],[-7.415755,54.944372],[-7.408665,54.951117],[-7.407424,54.959437],[-7.413109,54.984965],[-7.409078,54.992045],[-7.403755,54.99313],[-7.40112,54.994836],[-7.405254,55.003569],[-7.376987,55.02889],[-7.366962,55.035557],[-7.355024,55.040931],[-7.291152,55.046615],[-7.282987,55.051835],[-7.275288,55.058863],[-7.266503,55.065167],[-7.247097,55.069328],[-7.2471,55.069322],[-7.256744,55.050686],[-7.240956,55.050279],[-7.240314,55.050389]]],[[[-13.688588,57.596259],[-13.690419,57.596259],[-13.691314,57.596503],[-13.691314,57.597154],[-13.690419,57.597805],[-13.688588,57.597805],[-13.687652,57.597154],[-13.687652,57.596869],[-13.688588,57.596259]]],[[[-4.839121,54.469789],[-4.979941,54.457977],[-5.343644,54.878637],[-5.308469,55.176452],[-6.272566,55.418443],[-8.690528,57.833706],[-6.344705,59.061083],[-4.204785,58.63305],[-2.31566,60.699068],[-1.695335,60.76432],[-1.58092,60.866001],[-0.17022,60.897204],[-0.800508,59.770037],[-1.292368,57.732574],[-1.850077,55.766368],[-1.73054,55.782219],[1.892395,52.815229],[1.742775,51.364209],[1.080173,50.847526],[0.000774,50.664982],[-0.162997,50.752401],[-0.725152,50.731879],[-0.768853,50.741516],[-0.770985,50.736884],[-0.789947,50.730048],[-0.812815,50.734768],[-0.877742,50.761156],[-0.942879,50.758338],[-0.992581,50.737379],[-1.18513,50.766989],[-1.282741,50.792353],[-1.375004,50.772063],[-1.523427,50.719605],[-1.630649,50.695128],[-1.663617,50.670508],[-1.498021,50.40831],[-4.097427,49.735486],[-6.825199,49.700905],[-5.541541,51.446591],[-6.03361,51.732369],[-4.791746,52.635365],[-4.969244,52.637413],[-5.049473,53.131209],[-4.787393,53.409491],[-4.734148,53.424866],[-4.917096,53.508212],[-4.839121,54.469789]]]]}},{"type":"Feature","properties":{"id":0},"geometry":{"type":"MultiPolygon","coordinates":[[[[-157.018938,19.300864],[-179.437336,27.295312],[-179.480084,28.991459],[-168.707465,26.30325],[-163.107414,24.60499],[-153.841679,20.079306],[-154.233846,19.433391],[-153.61725,18.900587],[-154.429471,18.171036],[-156.780638,18.718492],[-157.018938,19.300864]]],[[[-78.91269,43.037032],[-78.964351,42.976393],[-78.981718,42.979043],[-78.998055,42.991111],[-79.01189,43.004358],[-79.022046,43.010539],[-79.023076,43.017015],[-79.00983,43.050867],[-79.011449,43.065291],[-78.993051,43.066174],[-78.975536,43.069707],[-78.958905,43.070884],[-78.943304,43.065291],[-78.917399,43.058521],[-78.908569,43.049396],[-78.91269,43.037032]]],[[[-123.03529,48.992515],[-123.035308,48.992499],[-123.045277,48.984361],[-123.08849,48.972235],[-123.089345,48.987982],[-123.090484,48.992499],[-123.090488,48.992515],[-123.035306,48.992515],[-123.03529,48.992515]]],[[[-103.837038,29.279906],[-103.864121,29.281366],[-103.928122,29.293019],[-104.01915,29.32033],[-104.057313,29.339037],[-104.105424,29.385675],[-104.139789,29.400584],[-104.161648,29.416759],[-104.194514,29.448927],[-104.212291,29.484661],[-104.218698,29.489829],[-104.227148,29.493033],[-104.251022,29.508588],[-104.267171,29.526571],[-104.292751,29.532824],[-104.320604,29.532255],[-104.338484,29.524013],[-104.349026,29.537578],[-104.430443,29.582795],[-104.437832,29.58543],[-104.444008,29.589203],[-104.448555,29.597678],[-104.452069,29.607109],[-104.455222,29.613387],[-104.469381,29.625402],[-104.516639,29.654315],[-104.530824,29.667906],[-104.535036,29.677802],[-104.535191,29.687853],[-104.537103,29.702116],[-104.543666,29.71643],[-104.561391,29.745421],[-104.570279,29.787511],[-104.583586,29.802575],[-104.601207,29.81477],[-104.619682,29.833064],[-104.623764,29.841487],[-104.637588,29.887996],[-104.656346,29.908201],[-104.660635,29.918433],[-104.663478,29.923084],[-104.676526,29.93683],[-104.680479,29.942308],[-104.682469,29.952126],[-104.680117,29.967784],[-104.680479,29.976466],[-104.699108,30.03145],[-104.701589,30.055324],[-104.698592,30.075271],[-104.684639,30.111135],[-104.680479,30.134131],[-104.67867,30.170356],[-104.681564,30.192939],[-104.695853,30.208441],[-104.715231,30.243995],[-104.724585,30.252211],[-104.742155,30.25986],[-104.74939,30.264459],[-104.761689,30.284199],[-104.774143,30.311588],[-104.788767,30.335927],[-104.807732,30.346418],[-104.8129,30.350707],[-104.814967,30.360577],[-104.816001,30.371997],[-104.818274,30.380524],[-104.824269,30.38719],[-104.83755,30.394063],[-104.844939,30.40104],[-104.853259,30.41215],[-104.855016,30.417473],[-104.853621,30.423984],[-104.852432,30.438867],[-104.854655,30.448737],[-104.864473,30.462018],[-104.866695,30.473025],[-104.865248,30.479898],[-104.859615,30.491112],[-104.859254,30.497261],[-104.863026,30.502377],[-104.879718,30.510852],[-104.882146,30.520929],[-104.884007,30.541858],[-104.886591,30.551883],[-104.898166,30.569401],[-104.928242,30.599529],[-104.93434,30.610536],[-104.941057,30.61405],[-104.972735,30.618029],[-104.98276,30.620716],[-104.989117,30.629553],[-104.991649,30.640301],[-104.992941,30.651464],[-104.995783,30.661747],[-105.008495,30.676992],[-105.027977,30.690117],[-105.049475,30.699264],[-105.06813,30.702675],[-105.087043,30.709806],[-105.133604,30.757917],[-105.140425,30.750476],[-105.153241,30.763188],[-105.157788,30.76572],[-105.160889,30.764118],[-105.162698,30.774919],[-105.167297,30.781171],[-105.17479,30.783962],[-105.185125,30.784634],[-105.195306,30.787941],[-105.204917,30.80241],[-105.2121,30.805718],[-105.21825,30.806803],[-105.229257,30.810214],[-105.232874,30.809128],[-105.239851,30.801532],[-105.243985,30.799103],[-105.249049,30.798845],[-105.259488,30.802979],[-105.265844,30.808405],[-105.270753,30.814348],[-105.277006,30.819412],[-105.334315,30.843803],[-105.363771,30.850366],[-105.376173,30.859565],[-105.41555,30.902456],[-105.496682,30.95651],[-105.530789,30.991701],[-105.555955,31.002605],[-105.565722,31.016661],[-105.578641,31.052163],[-105.59094,31.071438],[-105.605875,31.081928],[-105.623496,31.090351],[-105.643805,31.103684],[-105.668042,31.127869],[-105.675225,31.131951],[-105.692278,31.137635],[-105.76819,31.18001],[-105.777854,31.192722],[-105.78483,31.211016],[-105.861983,31.288376],[-105.880147,31.300881],[-105.896994,31.305997],[-105.897149,31.309511],[-105.908802,31.317004],[-105.928052,31.326461],[-105.934563,31.335504],[-105.941772,31.352351],[-105.948515,31.361239],[-105.961202,31.371006],[-106.004739,31.396948],[-106.021147,31.402167],[-106.046261,31.404648],[-106.065304,31.410952],[-106.099385,31.428884],[-106.141113,31.439167],[-106.164316,31.447797],[-106.174471,31.460251],[-106.209249,31.477305],[-106.215424,31.483919],[-106.21744,31.488725],[-106.218731,31.494616],[-106.222891,31.50459],[-106.232658,31.519938],[-106.274749,31.562622],[-106.286298,31.580141],[-106.312292,31.648612],[-106.331309,31.68215],[-106.35849,31.717548],[-106.39177,31.745919],[-106.428951,31.758476],[-106.473135,31.755065],[-106.492797,31.759044],[-106.501425,31.766344],[-106.506052,31.770258],[-106.517189,31.773824],[-106.558969,31.773876],[-106.584859,31.773927],[-106.610697,31.773979],[-106.636587,31.774082],[-106.662477,31.774134],[-106.688315,31.774237],[-106.714205,31.774237],[-106.740095,31.774289],[-106.765933,31.774392],[-106.791823,31.774444],[-106.817713,31.774496],[-106.843603,31.774547],[-106.869441,31.774599],[-106.895331,31.774702],[-106.921221,31.774702],[-106.947111,31.774754],[-106.973001,31.774857],[-106.998891,31.774909],[-107.02478,31.774961],[-107.05067,31.775013],[-107.076509,31.775064],[-107.102398,31.775168],[-107.128288,31.775168],[-107.154127,31.775219],[-107.180016,31.775374],[-107.205906,31.775374],[-107.231796,31.775426],[-107.257634,31.775478],[-107.283524,31.775529],[-107.309414,31.775633],[-107.335252,31.775684],[-107.361142,31.775788],[-107.387032,31.775788],[-107.412896,31.775839],[-107.438786,31.775943],[-107.464676,31.775994],[-107.490566,31.776098],[-107.516404,31.776149],[-107.542294,31.776201],[-107.568184,31.776253],[-107.594074,31.776304],[-107.619964,31.776408],[-107.645854,31.776459],[-107.671744,31.776459],[-107.697633,31.776563],[-107.723472,31.776614],[-107.749362,31.776666],[-107.775251,31.776718],[-107.801141,31.77677],[-107.82698,31.776873],[-107.852869,31.776925],[-107.878759,31.776925],[-107.904598,31.777028],[-107.930487,31.77708],[-107.956377,31.777131],[-107.982216,31.777183],[-108.008105,31.777235],[-108.033995,31.777338],[-108.059885,31.77739],[-108.085723,31.77739],[-108.111613,31.777545],[-108.137503,31.777545],[-108.163341,31.777648],[-108.189283,31.7777],[-108.215121,31.777751],[-108.215121,31.770723],[-108.215121,31.763695],[-108.215121,31.756667],[-108.215121,31.749639],[-108.215121,31.74256],[-108.215121,31.735583],[-108.215121,31.728555],[-108.215121,31.721476],[-108.215121,31.714396],[-108.215121,31.70742],[-108.215121,31.700392],[-108.215121,31.693312],[-108.215121,31.686284],[-108.215121,31.679256],[-108.215121,31.672176],[-108.21507,31.665148],[-108.215018,31.658172],[-108.215018,31.651092],[-108.215018,31.644064],[-108.215018,31.637036],[-108.215018,31.630008],[-108.215018,31.62298],[-108.215018,31.615952],[-108.215018,31.608873],[-108.215018,31.601845],[-108.215018,31.594817],[-108.215018,31.587789],[-108.215018,31.580761],[-108.215018,31.573733],[-108.215018,31.566653],[-108.215018,31.559625],[-108.214966,31.552597],[-108.214966,31.545569],[-108.214966,31.538489],[-108.214966,31.531461],[-108.214966,31.524485],[-108.214966,31.517405],[-108.214966,31.510378],[-108.214966,31.503401],[-108.214966,31.496322],[-108.214966,31.489242],[-108.214966,31.482214],[-108.214966,31.475238],[-108.214966,31.468158],[-108.214966,31.46113],[-108.214966,31.454102],[-108.214966,31.447074],[-108.214915,31.440046],[-108.214863,31.432966],[-108.214863,31.425938],[-108.214863,31.41891],[-108.214863,31.411882],[-108.214863,31.404803],[-108.214863,31.397826],[-108.214863,31.390798],[-108.214863,31.383719],[-108.214863,31.376639],[-108.214863,31.369663],[-108.214863,31.362635],[-108.214863,31.355555],[-108.214863,31.348527],[-108.214863,31.341551],[-108.214863,31.334471],[-108.214811,31.327443],[-108.257573,31.327391],[-108.300336,31.327391],[-108.34302,31.327391],[-108.385731,31.327391],[-108.428442,31.327391],[-108.471152,31.327391],[-108.513837,31.327391],[-108.556547,31.327391],[-108.59931,31.327391],[-108.64202,31.327391],[-108.684757,31.327391],[-108.727467,31.327391],[-108.770178,31.327391],[-108.812914,31.327391],[-108.855625,31.327391],[-108.898335,31.327391],[-108.941046,31.327391],[-108.968282,31.327391],[-108.983731,31.327391],[-109.026493,31.327391],[-109.04743,31.327391],[-109.069203,31.327391],[-109.111914,31.327391],[-109.154599,31.327391],[-109.197361,31.327391],[-109.240072,31.32734],[-109.282782,31.32734],[-109.325519,31.32734],[-109.368229,31.32734],[-109.410914,31.32734],[-109.45365,31.32734],[-109.496387,31.32734],[-109.539071,31.32734],[-109.581808,31.32734],[-109.624493,31.32734],[-109.667177,31.32734],[-109.709965,31.32734],[-109.75265,31.32734],[-109.795335,31.32734],[-109.838123,31.32734],[-109.880808,31.32734],[-109.923596,31.327288],[-109.96628,31.327236],[-110.008965,31.327236],[-110.051702,31.327236],[-110.094386,31.327236],[-110.137071,31.327236],[-110.179807,31.327236],[-110.222544,31.327236],[-110.265229,31.327236],[-110.308017,31.327236],[-110.350753,31.327236],[-110.39349,31.327236],[-110.436174,31.327236],[-110.478859,31.327236],[-110.521595,31.327236],[-110.56428,31.327236],[-110.606965,31.327236],[-110.649727,31.327236],[-110.692438,31.327236],[-110.7352,31.327236],[-110.777885,31.327236],[-110.820595,31.327236],[-110.863358,31.327236],[-110.906068,31.327236],[-110.948753,31.327185],[-111.006269,31.327185],[-111.067118,31.333644],[-111.094455,31.342532],[-111.145924,31.359069],[-111.197446,31.375554],[-111.248864,31.392142],[-111.300333,31.40873],[-111.351803,31.425318],[-111.403299,31.441855],[-111.454768,31.458339],[-111.506238,31.474979],[-111.915464,31.601431],[-112.324715,31.727987],[-112.733967,31.854543],[-113.143218,31.981046],[-113.552444,32.107602],[-113.961696,32.234132],[-114.370921,32.360687],[-114.780147,32.487243],[-114.816785,32.498534],[-114.819373,32.499363],[-114.822108,32.50024],[-114.809447,32.511324],[-114.795546,32.552226],[-114.794203,32.574111],[-114.802678,32.594497],[-114.786813,32.621033],[-114.781542,32.628061],[-114.758804,32.64483],[-114.751156,32.65222],[-114.739477,32.669066],[-114.731209,32.686636],[-114.723871,32.711519],[-114.724284,32.712835],[-114.724285,32.712836],[-114.764541,32.709839],[-114.838076,32.704206],[-114.911612,32.698703],[-114.985199,32.693122],[-115.058734,32.687567],[-115.13227,32.681986],[-115.205806,32.676456],[-115.27929,32.670823],[-115.352851,32.665346],[-115.426386,32.659765],[-115.499922,32.654209],[-115.573535,32.648654],[-115.647019,32.643073],[-115.720529,32.637518],[-115.794064,32.631963],[-115.8676,32.626408],[-115.941213,32.620827],[-116.014748,32.615271],[-116.088232,32.609664],[-116.161742,32.604161],[-116.235329,32.598554],[-116.308891,32.593025],[-116.382426,32.587469],[-116.455962,32.581888],[-116.529472,32.576333],[-116.603007,32.570804],[-116.676543,32.565223],[-116.750104,32.559667],[-116.82364,32.554086],[-116.897201,32.548531],[-116.970737,32.542976],[-117.044221,32.537421],[-117.125121,32.531669],[-117.125969,32.538258],[-117.239623,32.531308],[-120.274098,32.884264],[-121.652736,34.467248],[-124.367265,37.662798],[-126.739806,41.37928],[-126.996297,45.773888],[-124.770704,48.44258],[-123.734053,48.241906],[-123.1663,48.27837],[-123.193018,48.501035],[-123.176987,48.65482],[-122.912481,48.753561],[-122.899122,48.897797],[-122.837671,48.97502],[-122.743986,48.980582],[-122.753,48.992499],[-122.753012,48.992515],[-122.653258,48.992515],[-122.433375,48.992515],[-122.213517,48.992515],[-121.993763,48.992515],[-121.773958,48.992515],[-121.554152,48.992515],[-121.33432,48.992515],[-121.114515,48.992515],[-95.396937,48.99267],[-95.177106,48.99267],[-95.168527,48.995047],[-95.161887,49.001145],[-95.159329,49.01179],[-95.159665,49.10951],[-95.160027,49.223353],[-95.160337,49.313012],[-95.160569,49.369494],[-95.102821,49.35394],[-94.982518,49.356162],[-94.926087,49.345568],[-94.856195,49.318283],[-94.839142,49.308878],[-94.827256,49.292858],[-94.819892,49.252034],[-94.810358,49.229606],[-94.806121,49.210899],[-94.811185,49.166561],[-94.803743,49.146407],[-94.792039,49.12646],[-94.753772,49.026156],[-94.711217,48.914586],[-94.711734,48.862755],[-94.712147,48.842446],[-94.713284,48.823843],[-94.710907,48.807513],[-94.701786,48.790098],[-94.688893,48.778832],[-94.592852,48.726433],[-94.519161,48.70447],[-94.4795,48.700698],[-94.311577,48.713927],[-94.292586,48.711912],[-94.284034,48.709069],[-94.274499,48.704108],[-94.265482,48.697752],[-94.258454,48.690828],[-94.255767,48.683541],[-94.252459,48.662405],[-94.251038,48.65729],[-94.23215,48.652019],[-94.03485,48.643311],[-93.874885,48.636206],[-93.835741,48.617137],[-93.809386,48.543576],[-93.778664,48.519468],[-93.756779,48.516549],[-93.616297,48.531302],[-93.599889,48.526341],[-93.566584,48.538279],[-93.491756,48.542309],[-93.459924,48.557399],[-93.45225,48.572721],[-93.453774,48.586958],[-93.451475,48.597422],[-93.417316,48.604114],[-93.385716,48.614863],[-93.25774,48.630314],[-93.131701,48.62463],[-92.97972,48.61768],[-92.955588,48.612228],[-92.884197,48.579878],[-92.72555,48.548692],[-92.648604,48.536263],[-92.630181,48.519468],[-92.627468,48.502777],[-92.646743,48.497428],[-92.691366,48.489858],[-92.710641,48.482882],[-92.718909,48.459782],[-92.704052,48.445158],[-92.677129,48.441747],[-92.657053,48.438233],[-92.570521,48.446656],[-92.526932,48.445623],[-92.490629,48.433117],[-92.474532,48.410483],[-92.467581,48.394282],[-92.467064,48.353225],[-92.462465,48.329299],[-92.451381,48.312685],[-92.41823,48.282041],[-92.38464,48.232406],[-92.371851,48.222587],[-92.353815,48.222897],[-92.327874,48.229435],[-92.303663,48.239279],[-92.291029,48.249562],[-92.292062,48.270336],[-92.301416,48.290645],[-92.303095,48.310928],[-92.281598,48.33178],[-92.259118,48.339635],[-92.154732,48.350125],[-92.070499,48.346714],[-92.043421,48.334596],[-92.030114,48.313176],[-92.021355,48.287441],[-92.007997,48.262482],[-91.992158,48.247909],[-91.975492,48.236566],[-91.957302,48.228323],[-91.852244,48.195974],[-91.764988,48.187344],[-91.744137,48.179593],[-91.727575,48.168327],[-91.695509,48.13758],[-91.716438,48.112051],[-91.692512,48.097866],[-91.618615,48.089572],[-91.597479,48.090399],[-91.589676,48.088332],[-91.581098,48.080942],[-91.579806,48.070969],[-91.585129,48.06084],[-91.586989,48.052572],[-91.574845,48.048205],[-91.487098,48.053476],[-91.464722,48.048955],[-91.446274,48.040738],[-91.427929,48.036449],[-91.3654,48.057843],[-91.276362,48.064768],[-91.23807,48.082648],[-91.203963,48.107659],[-91.071103,48.170859],[-91.02816,48.184838],[-91.008109,48.194372],[-90.923153,48.227109],[-90.873802,48.234344],[-90.840678,48.220107],[-90.837939,48.210547],[-90.848843,48.198713],[-90.849721,48.189566],[-90.843003,48.176983],[-90.83427,48.171789],[-90.823883,48.168327],[-90.812307,48.160989],[-90.803057,48.147166],[-90.796701,48.117064],[-90.786469,48.10045],[-90.750347,48.083991],[-90.701307,48.08456],[-90.611079,48.103499],[-90.586843,48.104817],[-90.573872,48.097892],[-90.562194,48.088849],[-90.542014,48.083733],[-90.531601,48.08456],[-90.501887,48.094275],[-90.490493,48.096239],[-90.483465,48.094482],[-90.477858,48.091536],[-90.470623,48.089882],[-90.178625,48.116444],[-90.120386,48.115359],[-90.073257,48.101199],[-90.061036,48.091019],[-90.008222,48.029731],[-89.995329,48.018595],[-89.980317,48.010094],[-89.92045,47.98746],[-89.902441,47.985909],[-89.803454,48.013763],[-89.780975,48.017199],[-89.763302,48.017303],[-89.745964,48.013763],[-89.724596,48.005908],[-89.712788,48.003376],[-89.678656,48.008699],[-89.65659,48.007975],[-89.593105,47.996503],[-89.581753,47.996333],[-89.586724,47.992938],[-89.310872,47.981097],[-89.072861,48.046842],[-88.49789,48.212841],[-88.286621,48.156675],[-85.939935,47.280501],[-84.784644,46.770068],[-84.516909,46.435083],[-84.489712,46.446652],[-84.491052,46.457658],[-84.478301,46.466467],[-84.465408,46.478172],[-84.448096,46.489722],[-84.42324,46.511581],[-84.389702,46.520262],[-84.352469,46.522743],[-84.30534,46.501607],[-84.242011,46.526464],[-84.197285,46.546359],[-84.147676,46.541346],[-84.110443,46.526464],[-84.158812,46.433343],[-84.147676,46.399882],[-84.129046,46.375026],[-84.10543,46.347741],[-84.105944,46.346374],[-84.117195,46.347157],[-84.117489,46.338326],[-84.122361,46.331922],[-84.112061,46.287102],[-84.092672,46.227469],[-84.111983,46.20337],[-84.015118,46.149712],[-83.957038,46.045736],[-83.676821,46.15388],[-83.429449,46.086221],[-83.523049,45.892052],[-83.574563,45.890259],[-82.551615,44.857931],[-82.655591,43.968545],[-82.440632,43.096285],[-82.460131,43.084392],[-82.458894,43.083247],[-82.431813,43.039387],[-82.424748,43.02408],[-82.417242,43.01731],[-82.416369,43.01742],[-82.416412,43.017143],[-82.414603,42.983243],[-82.430442,42.951307],[-82.453179,42.918983],[-82.464781,42.883637],[-82.468036,42.863974],[-82.482325,42.835113],[-82.485271,42.818524],[-82.473618,42.798164],[-82.470982,42.790568],[-82.471344,42.779845],[-82.476951,42.761474],[-82.48341,42.719254],[-82.511264,42.646675],[-82.526224,42.619906],[-82.549246,42.590941],[-82.575833,42.571795],[-82.608467,42.561098],[-82.644331,42.557817],[-82.644698,42.557533],[-82.644932,42.561634],[-82.637132,42.568405],[-82.60902,42.579296],[-82.616673,42.582828],[-82.636985,42.599607],[-82.625357,42.616092],[-82.629331,42.626394],[-82.638751,42.633459],[-82.644344,42.640524],[-82.644166,42.641056],[-82.716083,42.617461],[-82.777592,42.408506],[-82.888693,42.406093],[-82.889991,42.403266],[-82.905739,42.387665],[-82.923842,42.374419],[-82.937972,42.366176],[-82.947686,42.363527],[-82.979624,42.359406],[-83.042618,42.340861],[-83.061899,42.32732],[-83.081622,42.30907],[-83.11342,42.279619],[-83.145306,42.066968],[-83.177398,41.960666],[-83.21512,41.794493],[-82.219051,41.516445],[-80.345329,42.13344],[-80.316455,42.123137],[-79.270266,42.591872],[-79.221058,42.582892],[-78.871842,42.860012],[-78.875011,42.867184],[-78.896205,42.897209],[-78.901651,42.908101],[-78.90901,42.952255],[-78.913426,42.957848],[-78.932118,42.9708],[-78.936386,42.979631],[-78.927997,43.002003],[-78.893114,43.029379],[-78.887963,43.051456],[-78.914897,43.076477],[-79.026167,43.086485],[-79.065231,43.10573],[-79.065273,43.105897],[-79.065738,43.120237],[-79.061423,43.130288],[-79.055583,43.138427],[-79.051604,43.146851],[-79.04933,43.159847],[-79.048607,43.170622],[-79.053775,43.260358],[-79.058425,43.277799],[-79.058631,43.2782],[-78.990696,43.286947],[-78.862059,43.324332],[-78.767813,43.336418],[-78.516117,43.50645],[-76.363317,43.943219],[-76.396746,44.106667],[-76.364697,44.111631],[-76.366146,44.117349],[-76.357462,44.131478],[-76.183493,44.223025],[-76.162644,44.229888],[-76.176117,44.30795],[-76.046414,44.354817],[-75.928746,44.391137],[-75.852508,44.381639],[-75.849095,44.386103],[-75.847623,44.392579],[-75.84674,44.398172],[-75.845415,44.40141],[-75.780803,44.432318],[-75.770205,44.446153],[-75.772266,44.463815],[-75.779184,44.48236],[-75.791496,44.496513],[-75.791183,44.496768],[-75.754622,44.527567],[-75.69969,44.581673],[-75.578199,44.661513],[-75.455958,44.741766],[-75.341831,44.816749],[-75.270233,44.863774],[-75.129647,44.925166],[-75.075594,44.935501],[-75.058721,44.941031],[-75.0149,44.96599],[-74.998647,44.972398],[-74.940201,44.987746],[-74.903744,45.005213],[-74.88651,45.009398],[-74.868474,45.010122],[-74.741557,44.998857],[-74.712961,44.999254],[-74.695875,44.99803],[-74.596114,44.998495],[-74.496352,44.999012],[-74.197146,45.000458],[-71.703551,45.012757],[-71.603816,45.013274],[-71.505848,45.013731],[-71.50408,45.013739],[-71.506613,45.037045],[-71.504752,45.052962],[-71.497259,45.066553],[-71.45659,45.110994],[-71.451215,45.121691],[-71.445996,45.140295],[-71.441604,45.150682],[-71.413026,45.186184],[-71.406567,45.204942],[-71.42269,45.217189],[-71.449045,45.226905],[-71.438813,45.233468],[-71.394888,45.241529],[-71.381245,45.250779],[-71.3521,45.278323],[-71.334323,45.28871],[-71.311534,45.294136],[-71.293396,45.292327],[-71.20937,45.254758],[-71.185133,45.248557],[-71.160329,45.245767],[-71.141725,45.252329],[-71.111029,45.287108],[-71.095242,45.300905],[-71.085553,45.304213],[-71.084952,45.304293],[-71.064211,45.307055],[-71.054418,45.310362],[-71.036667,45.323385],[-71.027598,45.33465],[-71.016539,45.343125],[-70.993155,45.347827],[-70.968118,45.34452],[-70.951608,45.332014],[-70.906908,45.246232],[-70.892412,45.234604],[-70.874351,45.245663],[-70.870605,45.255275],[-70.872491,45.274189],[-70.870243,45.283129],[-70.862621,45.290363],[-70.842389,45.301215],[-70.835258,45.309794],[-70.83208,45.328552],[-70.835465,45.373097],[-70.833837,45.393096],[-70.825982,45.410459],[-70.812986,45.42343],[-70.794873,45.430406],[-70.771877,45.430045],[-70.75255,45.422345],[-70.718004,45.397282],[-70.696739,45.388652],[-70.675785,45.388704],[-70.65359,45.395473],[-70.641316,45.408496],[-70.650257,45.427461],[-70.668162,45.439036],[-70.707385,45.4564],[-70.722836,45.470921],[-70.732009,45.491591],[-70.730329,45.507973],[-70.686792,45.572723],[-70.589614,45.651788],[-70.572406,45.662279],[-70.514735,45.681709],[-70.484763,45.699641],[-70.4728,45.703568],[-70.450424,45.703723],[-70.439132,45.705893],[-70.419315,45.716901],[-70.407351,45.731525],[-70.402442,45.749663],[-70.403941,45.771161],[-70.408282,45.781651],[-70.413682,45.787697],[-70.41717,45.793795],[-70.415232,45.804389],[-70.409935,45.810745],[-70.389807,45.825059],[-70.312654,45.867641],[-70.283173,45.890482],[-70.262528,45.923038],[-70.255939,45.948876],[-70.263148,45.956834],[-70.280434,45.959315],[-70.303947,45.968616],[-70.316298,45.982982],[-70.316892,45.999002],[-70.306143,46.035331],[-70.303637,46.038483],[-70.294309,46.044943],[-70.29201,46.048663],[-70.293017,46.054038],[-70.296092,46.057862],[-70.300795,46.061737],[-70.304774,46.065975],[-70.311362,46.071866],[-70.312629,46.079566],[-70.30033,46.089281],[-70.26444,46.106593],[-70.24948,46.120597],[-70.244002,46.141009],[-70.249247,46.162765],[-70.263329,46.183229],[-70.284801,46.191859],[-70.280899,46.211857],[-70.253407,46.251493],[-70.236173,46.288339],[-70.223693,46.300793],[-70.201886,46.305495],[-70.199509,46.315262],[-70.197028,46.336863],[-70.188398,46.358412],[-70.167418,46.368179],[-70.153052,46.372829],[-70.074323,46.419545],[-70.061817,46.445409],[-70.050086,46.511271],[-70.032723,46.609766],[-70.023628,46.661287],[-70.007763,46.704075],[-69.989961,46.721697],[-69.899708,46.811562],[-69.809403,46.901299],[-69.719099,46.991086],[-69.628794,47.080797],[-69.538464,47.17061],[-69.448159,47.260346],[-69.357906,47.350134],[-69.267628,47.439844],[-69.25091,47.452919],[-69.237268,47.45881],[-69.221972,47.459688],[-69.069655,47.431886],[-69.054023,47.418399],[-69.054333,47.389253],[-69.066193,47.32967],[-69.065134,47.296339],[-69.06356,47.290809],[-69.057486,47.269467],[-69.0402,47.249055],[-68.906229,47.190221],[-68.889718,47.190609],[-68.761819,47.23704],[-68.71779,47.245231],[-68.668801,47.243422],[-68.644203,47.245283],[-68.6256,47.255205],[-68.607926,47.269829],[-68.58524,47.28249],[-68.539662,47.299853],[-68.518009,47.304762],[-68.492016,47.307553],[-68.466746,47.305692],[-68.435327,47.291275],[-68.422563,47.293109],[-68.410212,47.297424],[-68.385614,47.301713],[-68.383392,47.307139],[-68.384839,47.315873],[-68.382049,47.32781],[-68.347839,47.358506],[-68.299728,47.367833],[-68.24645,47.360573],[-68.197047,47.341401],[-68.184335,47.333133],[-68.156068,47.306674],[-68.145061,47.301455],[-68.115398,47.292282],[-68.101446,47.286185],[-68.039382,47.245231],[-67.993184,47.223217],[-67.962436,47.197689],[-67.953703,47.18663],[-67.949982,47.172936],[-67.943419,47.164538],[-67.899132,47.138778],[-67.870607,47.107358],[-67.854742,47.09785],[-67.813556,47.081908],[-67.808699,47.075138],[-67.805185,47.035631],[-67.802549,46.901247],[-67.800017,46.766785],[-67.797433,46.632297],[-67.794849,46.497861],[-67.792317,46.363476],[-67.789733,46.229014],[-67.78715,46.094552],[-67.784566,45.960142],[-67.782757,45.95053],[-67.776556,45.942933],[-67.767461,45.935957],[-67.759658,45.928567],[-67.757849,45.919472],[-67.769425,45.903969],[-67.787356,45.890017],[-67.799242,45.875651],[-67.792627,45.858907],[-67.776091,45.840821],[-67.772835,45.828057],[-67.779863,45.815706],[-67.794126,45.799169],[-67.80627,45.781754],[-67.811127,45.76651],[-67.810816,45.762414],[-67.817811,45.754896],[-67.821785,45.740767],[-67.827673,45.739001],[-67.868884,45.744593],[-67.856815,45.723694],[-67.835768,45.703971],[-67.793821,45.676301],[-67.733034,45.651869],[-67.723173,45.645393],[-67.711546,45.642155],[-67.697564,45.64922],[-67.66695,45.620077],[-67.649435,45.611247],[-67.603073,45.605948],[-67.561862,45.596234],[-67.54052,45.593879],[-67.442056,45.603593],[-67.440939,45.604586],[-67.431306,45.597941],[-67.422107,45.568796],[-67.42619,45.533449],[-67.443036,45.522184],[-67.467531,45.508283],[-67.493214,45.493142],[-67.48231,45.455521],[-67.428825,45.38705],[-67.434561,45.350308],[-67.459056,45.318424],[-67.468668,45.301835],[-67.475024,45.282353],[-67.471303,45.266282],[-67.427585,45.236568],[-67.390533,45.193108],[-67.356272,45.165926],[-67.31922,45.153886],[-67.284648,45.169699],[-67.279584,45.179052],[-67.279222,45.187372],[-67.277207,45.195072],[-67.267336,45.202513],[-67.254986,45.205045],[-67.242428,45.202565],[-67.219071,45.192126],[-67.206166,45.189401],[-67.176015,45.178656],[-67.191274,45.180365],[-67.204376,45.178209],[-67.204724,45.177791],[-67.152423,45.148932],[-67.048033,45.043407],[-66.962727,45.047088],[-66.857192,44.968696],[-66.897268,44.817275],[-67.2159,44.593511],[-67.122366,44.423624],[-67.68447,44.192544],[-67.459678,40.781645],[-76.607854,32.495823],[-76.798479,32.713735],[-78.561892,29.037718],[-78.892446,29.039659],[-79.762295,26.719312],[-80.026352,24.932961],[-82.368794,23.994833],[-83.806281,29.068506],[-87.460772,29.089961],[-87.922646,28.666131],[-90.461001,28.246758],[-91.787336,29.11536],[-93.311871,29.12431],[-96.423449,26.057857],[-97.129057,25.991017],[-97.129509,25.966833],[-97.139358,25.965876],[-97.202171,25.960893],[-97.202176,25.960857],[-97.204941,25.960639],[-97.253051,25.963481],[-97.266358,25.960639],[-97.2692,25.944361],[-97.287649,25.928651],[-97.310981,25.922088],[-97.328447,25.933302],[-97.351107,25.918419],[-97.355112,25.912786],[-97.35227,25.894493],[-97.345165,25.871704],[-97.345733,25.852222],[-97.36599,25.843902],[-97.376015,25.846744],[-97.380124,25.853203],[-97.383121,25.860541],[-97.389891,25.865657],[-97.397823,25.865812],[-97.399476,25.861162],[-97.39989,25.855115],[-97.404179,25.851395],[-97.425418,25.854857],[-97.435727,25.869275],[-97.441309,25.884933],[-97.448259,25.892322],[-97.469421,25.892943],[-97.486319,25.895733],[-97.502209,25.901883],[-97.52027,25.912786],[-97.565177,25.954748],[-97.594322,25.966375],[-97.604787,25.979966],[-97.613055,25.995985],[-97.622641,26.00906],[-97.641451,26.022495],[-97.659874,26.03066],[-97.679614,26.034639],[-97.766948,26.039652],[-97.780306,26.043218],[-97.782321,26.058617],[-97.80201,26.063733],[-97.878181,26.063733],[-97.941666,26.056809],[-97.999233,26.064302],[-98.013057,26.063682],[-98.044166,26.048799],[-98.065457,26.042184],[-98.075146,26.046628],[-98.083311,26.070916],[-98.103103,26.074947],[-98.150232,26.063682],[-98.185062,26.065232],[-98.222656,26.075412],[-98.300429,26.111431],[-98.309809,26.121094],[-98.333037,26.15303],[-98.339264,26.159851],[-98.365774,26.160161],[-98.377272,26.163572],[-98.377272,26.173649],[-98.36934,26.19401],[-98.397193,26.201141],[-98.428845,26.217729],[-98.456544,26.225946],[-98.472383,26.207652],[-98.49295,26.230596],[-98.521527,26.240932],[-98.552791,26.248321],[-98.581627,26.262274],[-98.640564,26.24181],[-98.653663,26.244291],[-98.664696,26.250647],[-98.685289,26.268475],[-98.693325,26.270542],[-98.702239,26.271628],[-98.704255,26.27664],[-98.691465,26.290231],[-98.701413,26.299119],[-98.713169,26.303357],[-98.726217,26.30439],[-98.739911,26.303253],[-98.735932,26.320048],[-98.746397,26.332141],[-98.780839,26.351674],[-98.795851,26.368314],[-98.801329,26.372138],[-98.810295,26.372448],[-98.817323,26.368521],[-98.825023,26.366454],[-98.836081,26.372138],[-98.842334,26.365834],[-98.850835,26.364077],[-98.860524,26.366299],[-98.870214,26.372138],[-98.893029,26.367849],[-98.9299,26.39224],[-98.945377,26.378288],[-98.954136,26.393946],[-98.962844,26.399527],[-98.986951,26.400095],[-99.004056,26.393842],[-99.010515,26.392602],[-99.016432,26.394462],[-99.022995,26.403351],[-99.027878,26.406245],[-99.047645,26.406968],[-99.066351,26.404746],[-99.085498,26.40764],[-99.106427,26.423039],[-99.108907,26.434253],[-99.102525,26.446966],[-99.09374,26.459781],[-99.089373,26.47115],[-99.091492,26.484018],[-99.10299,26.512078],[-99.115108,26.525617],[-99.140946,26.531405],[-99.164873,26.540448],[-99.17128,26.563961],[-99.171548,26.56583],[-99.213953,26.568537],[-99.242801,26.579723],[-99.254575,26.6018],[-99.258844,26.614752],[-99.277683,26.638007],[-99.281951,26.649781],[-99.277389,26.657729],[-99.26635,26.653314],[-99.252662,26.644483],[-99.240299,26.639184],[-99.244861,26.652431],[-99.240299,26.697763],[-99.242507,26.713658],[-99.252368,26.743683],[-99.254575,26.75899],[-99.252368,26.799024],[-99.254575,26.810504],[-99.257666,26.813153],[-99.262229,26.814036],[-99.266497,26.817863],[-99.268263,26.827872],[-99.271649,26.832876],[-99.289458,26.84465],[-99.308444,26.830521],[-99.316539,26.822279],[-99.323457,26.810504],[-99.328166,26.797258],[-99.329197,26.789016],[-99.331699,26.78254],[-99.340383,26.77312],[-99.366728,26.761345],[-99.380269,26.777241],[-99.391896,26.796963],[-99.412207,26.796963],[-99.410883,26.808149],[-99.405437,26.818452],[-99.396606,26.824928],[-99.384979,26.824928],[-99.377178,26.816686],[-99.374823,26.804028],[-99.374234,26.791076],[-99.371291,26.783128],[-99.360694,26.780479],[-99.359369,26.790487],[-99.36452,26.810504],[-99.357897,26.822279],[-99.351274,26.83111],[-99.346123,26.840824],[-99.344062,26.855247],[-99.348772,26.899696],[-99.355101,26.920302],[-99.36452,26.934726],[-99.403377,26.952093],[-99.413974,26.964162],[-99.401758,26.985651],[-99.399991,26.999192],[-99.418831,27.007728],[-99.441938,27.013615],[-99.453271,27.019797],[-99.455332,27.025979],[-99.464751,27.039225],[-99.466959,27.047467],[-99.462544,27.057181],[-99.461635,27.056839],[-99.461728,27.056954],[-99.442039,27.089614],[-99.439404,27.098347],[-99.441419,27.107494],[-99.445734,27.114728],[-99.450178,27.120465],[-99.452452,27.125012],[-99.450333,27.145166],[-99.435786,27.188419],[-99.431988,27.207591],[-99.434029,27.22697],[-99.440902,27.244798],[-99.451832,27.26118],[-99.46612,27.276527],[-99.468963,27.278233],[-99.480409,27.283297],[-99.482941,27.286708],[-99.484879,27.294821],[-99.486584,27.297611],[-99.493199,27.30128],[-99.521362,27.311254],[-99.5148,27.321796],[-99.497591,27.338798],[-99.494026,27.348203],[-99.492889,27.358848],[-99.487721,27.37187],[-99.484621,27.391766],[-99.475706,27.414762],[-99.472916,27.426647],[-99.473639,27.463803],[-99.472916,27.468299],[-99.47643,27.48251],[-99.480409,27.490778],[-99.48829,27.494654],[-99.503689,27.495584],[-99.509503,27.500028],[-99.510071,27.510518],[-99.507074,27.533437],[-99.507203,27.57377],[-99.515006,27.588601],[-99.535031,27.604828],[-99.55503,27.613509],[-99.572264,27.61847],[-99.578232,27.622811],[-99.590247,27.642061],[-99.600169,27.646427],[-99.612442,27.643637],[-99.633526,27.633069],[-99.644869,27.632733],[-99.648642,27.636919],[-99.658693,27.654024],[-99.664739,27.659398],[-99.70037,27.659191],[-99.705692,27.66317],[-99.710674,27.670116],[-99.723056,27.687381],[-99.730652,27.691825],[-99.734037,27.702031],[-99.736311,27.713607],[-99.740445,27.722159],[-99.747344,27.726009],[-99.765198,27.731177],[-99.774577,27.735828],[-99.78685,27.748488],[-99.795428,27.761924],[-99.806963,27.771423],[-99.808167,27.772414],[-99.83292,27.776755],[-99.832971,27.782181],[-99.844779,27.793576],[-99.858241,27.803524],[-99.863357,27.804661],[-99.864727,27.814324],[-99.861858,27.83608],[-99.863357,27.845666],[-99.870928,27.854477],[-99.880204,27.859231],[-99.888007,27.864812],[-99.891288,27.876026],[-99.882684,27.89158],[-99.878808,27.901838],[-99.88134,27.906463],[-99.896766,27.912923],[-99.914336,27.928245],[-99.929916,27.946331],[-99.939683,27.961085],[-99.928289,27.975761],[-99.940717,27.983254],[-99.961852,27.987492],[-99.976606,27.992453],[-99.991127,28.007801],[-100.000584,28.02041],[-100.007457,28.033561],[-100.014123,28.050459],[-100.013503,28.056971],[-100.010506,28.063611],[-100.010196,28.068882],[-100.017585,28.070949],[-100.031538,28.081801],[-100.045077,28.095289],[-100.048023,28.102523],[-100.048901,28.115959],[-100.056498,28.137922],[-100.074895,28.154407],[-100.172873,28.198538],[-100.189203,28.201329],[-100.197626,28.207168],[-100.201192,28.220346],[-100.202949,28.234428],[-100.205946,28.242877],[-100.212819,28.245073],[-100.240724,28.249698],[-100.257932,28.260524],[-100.275089,28.277242],[-100.284339,28.296517],[-100.277931,28.314888],[-100.278551,28.331088],[-100.293899,28.353413],[-100.322631,28.386899],[-100.331675,28.422013],[-100.336326,28.458574],[-100.340201,28.464259],[-100.348315,28.470253],[-100.355549,28.478185],[-100.35679,28.489322],[-100.351622,28.496711],[-100.322631,28.510406],[-100.364024,28.524797],[-100.38423,28.537174],[-100.397769,28.557586],[-100.398751,28.568645],[-100.397097,28.592726],[-100.401438,28.60226],[-100.411463,28.609314],[-100.434821,28.619133],[-100.44619,28.626497],[-100.444898,28.643782],[-100.481381,28.686054],[-100.493939,28.708378],[-100.519054,28.804961],[-100.524996,28.814831],[-100.529285,28.819947],[-100.534453,28.830231],[-100.538639,28.835631],[-100.54515,28.83899],[-100.559671,28.839378],[-100.566234,28.842504],[-100.569696,28.84961],[-100.56334,28.86209],[-100.566234,28.869789],[-100.571763,28.8732],[-100.586543,28.879789],[-100.58954,28.883458],[-100.594966,28.899322],[-100.606955,28.910123],[-100.618841,28.917926],[-100.624318,28.924721],[-100.624783,28.93777],[-100.626696,28.948338],[-100.630778,28.956683],[-100.637909,28.962884],[-100.628918,28.98433],[-100.632793,29.005156],[-100.652224,29.044817],[-100.660854,29.102669],[-100.668967,29.116208],[-100.678165,29.119412],[-100.690826,29.121014],[-100.70204,29.12365],[-100.706846,29.130187],[-100.70974,29.135561],[-100.762501,29.173776],[-100.770098,29.187289],[-100.762088,29.208658],[-100.783172,29.243074],[-100.796143,29.257673],[-100.81609,29.270773],[-100.86389,29.290616],[-100.871797,29.296456],[-100.891227,29.318547],[-100.91474,29.337048],[-100.987397,29.366322],[-100.998301,29.372472],[-101.008068,29.380585],[-101.016232,29.390068],[-101.022175,29.40048],[-101.025948,29.414356],[-101.029617,29.442984],[-101.037782,29.460063],[-101.039026,29.460452],[-101.040188,29.457132],[-101.045487,29.451245],[-101.060205,29.449184],[-101.067711,29.45095],[-101.076101,29.453894],[-101.085962,29.454483],[-101.098031,29.449184],[-101.113043,29.466552],[-101.142774,29.475383],[-101.174124,29.475971],[-101.193699,29.469495],[-101.198703,29.473911],[-101.198851,29.476854],[-101.184132,29.497754],[-101.184868,29.512767],[-101.195171,29.521892],[-101.214157,29.518065],[-101.245213,29.493044],[-101.265818,29.487157],[-101.290545,29.49746],[-101.297315,29.503936],[-101.300995,29.512767],[-101.294372,29.520715],[-101.273177,29.524247],[-101.259195,29.533372],[-101.243888,29.554861],[-101.231966,29.580176],[-101.227845,29.599899],[-101.239178,29.616677],[-101.26052,29.613439],[-101.281272,29.597249],[-101.290545,29.575761],[-101.295255,29.570168],[-101.306146,29.574583],[-101.317626,29.584003],[-101.323955,29.592539],[-101.323661,29.603137],[-101.318804,29.616383],[-101.311445,29.628158],[-101.303497,29.634045],[-101.303669,29.631411],[-101.302727,29.633851],[-101.301073,29.649509],[-101.30978,29.654548],[-101.336239,29.654315],[-101.349029,29.660103],[-101.357684,29.667441],[-101.364351,29.676665],[-101.376624,29.700643],[-101.383368,29.718497],[-101.39962,29.740718],[-101.406545,29.752888],[-101.409309,29.765781],[-101.405098,29.778442],[-101.414012,29.774411],[-101.424218,29.771414],[-101.435096,29.770122],[-101.446103,29.771052],[-101.455689,29.77591],[-101.462433,29.788932],[-101.470908,29.791516],[-101.490286,29.785547],[-101.505763,29.773894],[-101.521809,29.765936],[-101.542893,29.771052],[-101.539689,29.779191],[-101.530516,29.796477],[-101.528604,29.801438],[-101.531912,29.811101],[-101.539172,29.817974],[-101.546458,29.820145],[-101.549766,29.815701],[-101.553977,29.796684],[-101.564907,29.786478],[-101.580281,29.781568],[-101.632216,29.775651],[-101.794531,29.795857],[-101.80298,29.801438],[-101.805978,29.811928],[-101.812695,29.812032],[-101.82409,29.805184],[-101.857602,29.805184],[-101.877524,29.810843],[-101.88742,29.81229],[-101.895455,29.808621],[-101.90238,29.803247],[-101.910881,29.799888],[-101.920157,29.798182],[-101.929613,29.797717],[-101.942662,29.803608],[-101.957054,29.814047],[-101.972246,29.818181],[-101.98793,29.805184],[-102.014595,29.810998],[-102.109344,29.80211],[-102.145647,29.815701],[-102.157248,29.824537],[-102.203679,29.846138],[-102.239775,29.849135],[-102.253444,29.855285],[-102.258276,29.873475],[-102.276181,29.869547],[-102.289023,29.878126],[-102.302175,29.889391],[-102.321011,29.893939],[-102.330235,29.888926],[-102.339769,29.870633],[-102.351061,29.866602],[-102.36323,29.864276],[-102.370723,29.857765],[-102.374547,29.848102],[-102.376589,29.821488],[-102.380051,29.811386],[-102.404132,29.780793],[-102.406096,29.777279],[-102.515288,29.784721],[-102.523066,29.782318],[-102.531127,29.769915],[-102.54154,29.762474],[-102.543349,29.760123],[-102.546578,29.757875],[-102.553141,29.756738],[-102.558309,29.759089],[-102.562882,29.769347],[-102.566758,29.771052],[-102.58531,29.764696],[-102.621225,29.747281],[-102.638743,29.743715],[-102.676054,29.74449],[-102.683469,29.743715],[-102.69104,29.736817],[-102.693624,29.729401],[-102.694709,29.720616],[-102.697758,29.709557],[-102.726748,29.664495],[-102.73127,29.650594],[-102.735507,29.649509],[-102.751656,29.622457],[-102.75176,29.620157],[-102.761346,29.603414],[-102.767598,29.59729],[-102.779665,29.592303],[-102.774084,29.579617],[-102.776461,29.575948],[-102.785892,29.571814],[-102.78075,29.558249],[-102.786512,29.550497],[-102.795478,29.54427],[-102.827311,29.470502],[-102.833951,29.461355],[-102.839067,29.45195],[-102.841134,29.438308],[-102.838705,29.426939],[-102.834984,29.415699],[-102.835191,29.403839],[-102.844545,29.390533],[-102.845578,29.384719],[-102.838033,29.370534],[-102.837672,29.366322],[-102.84656,29.361749],[-102.853872,29.361],[-102.859867,29.361155],[-102.864957,29.359527],[-102.876972,29.350871],[-102.883069,29.343766],[-102.885188,29.333379],[-102.885498,29.314801],[-102.899399,29.276095],[-102.899709,29.2639],[-102.892139,29.254391],[-102.867954,29.240387],[-102.858781,29.229147],[-102.869866,29.224781],[-102.896893,29.220285],[-102.942265,29.190209],[-102.947536,29.182018],[-102.969757,29.192845],[-102.988386,29.177135],[-103.015826,29.126776],[-103.024275,29.116157],[-103.032621,29.110214],[-103.072541,29.091404],[-103.080758,29.085203],[-103.085589,29.07572],[-103.091532,29.057866],[-103.095356,29.060294],[-103.104684,29.057866],[-103.109205,29.023372],[-103.122771,28.996474],[-103.147989,28.985105],[-103.187108,28.990221],[-103.241756,29.003502],[-103.301545,29.002365],[-103.316247,29.010065],[-103.311514,29.026043],[-103.309994,29.031175],[-103.3248,29.026808],[-103.330484,29.023733],[-103.342602,29.041226],[-103.351671,29.039417],[-103.360534,29.029831],[-103.372083,29.023733],[-103.38663,29.028798],[-103.414639,29.052414],[-103.423605,29.057866],[-103.435697,29.061121],[-103.478537,29.08205],[-103.529748,29.126776],[-103.535588,29.135122],[-103.538223,29.142408],[-103.541711,29.148816],[-103.550238,29.154656],[-103.558015,29.156206],[-103.58499,29.154656],[-103.673125,29.173569],[-103.702477,29.187858],[-103.749476,29.222972],[-103.759062,29.226848],[-103.770767,29.229845],[-103.777718,29.235297],[-103.769424,29.257543],[-103.774229,29.267517],[-103.78366,29.274803],[-103.794177,29.277594],[-103.837038,29.279906]]],[[[178.301106,52.056551],[179.595462,52.142083],[179.825447,51.992849],[179.661729,51.485763],[179.723231,51.459963],[179.408066,51.209841],[178.411463,51.523605],[177.698335,51.877899],[177.16784,51.581866],[176.487008,52.175325],[174.484678,52.08716],[172.866263,52.207379],[172.825506,52.716846],[172.747012,52.654022],[172.08261,52.952695],[172.942925,53.183013],[173.029416,52.993628],[173.127208,52.99494],[173.143321,52.990383],[173.175059,52.971747],[173.182932,52.968373],[176.45233,52.628178],[176.468135,52.488358],[177.900385,52.488358],[178.007601,52.179677],[178.301106,52.056551]]],[[[-168.899607,65.747626],[-168.909861,65.739569],[-168.926218,65.739895],[-168.942128,65.74372],[-168.951731,65.75316],[-168.942983,65.764716],[-168.920115,65.768866],[-168.907908,65.768297],[-168.902781,65.761542],[-168.899607,65.747626]]],[[[-131.160718,54.787192],[-132.853508,54.482536],[-134.77719,54.717786],[-142.6966,55.845503],[-142.861997,49.948308],[-155.675916,51.109976],[-164.492732,50.603976],[-164.691217,50.997975],[-171.246993,49.948308],[-171.215436,50.576636],[-173.341669,50.968826],[-173.362022,51.082198],[-177.799603,51.272899],[-179.155463,50.982285],[-179.476076,52.072632],[-177.11459,52.248701],[-177.146284,52.789384],[-174.777218,52.443779],[-174.773743,52.685853],[-173.653194,52.704099],[-173.790528,53.469081],[-171.063371,53.604473],[-170.777733,59.291898],[-174.324884,60.332184],[-171.736408,62.68026],[-172.315705,62.725352],[-171.995091,63.999658],[-168.501424,65.565173],[-168.714145,65.546708],[-168.853077,68.370871],[-161.115601,72.416214],[-146.132257,70.607941],[-140.692512,69.955349],[-141.145395,69.671641],[-141.015207,69.654202],[-141.006459,69.651272],[-141.005564,69.650946],[-141.005549,69.650941],[-141.005471,69.505164],[-141.001208,60.466879],[-141.001156,60.321074],[-140.994929,60.304382],[-140.979555,60.295804],[-140.909146,60.28366],[-140.768457,60.259269],[-140.660505,60.24051],[-140.533743,60.218548],[-140.518705,60.22387],[-140.506664,60.236324],[-140.475323,60.276477],[-140.462791,60.289138],[-140.447805,60.29446],[-140.424111,60.293168],[-140.32497,60.267537],[-140.169243,60.227229],[-140.01579,60.187387],[-139.967757,60.188369],[-139.916933,60.207851],[-139.826318,60.256478],[-139.728417,60.309033],[-139.679816,60.32681],[-139.628346,60.334096],[-139.517965,60.336732],[-139.413992,60.339212],[-139.262193,60.342778],[-139.101608,60.346602],[-139.079465,60.341021],[-139.06869,60.322056],[-139.073186,60.299835],[-139.113468,60.226816],[-139.149615,60.161187],[-139.183231,60.100157],[-139.182146,60.073389],[-139.112305,60.031376],[-139.060207,60.000059],[-139.051611,59.994892],[-139.003759,59.977219],[-138.842425,59.937686],[-138.742586,59.913192],[-138.704888,59.898464],[-138.697188,59.89371],[-138.692098,59.886888],[-138.654349,59.805498],[-138.63745,59.784052],[-138.59921,59.753822],[-138.488881,59.696357],[-138.363617,59.631142],[-138.219543,59.556004],[-138.067614,59.476991],[-137.91057,59.395187],[-137.758305,59.315915],[-137.611363,59.239331],[-137.594181,59.225275],[-137.582088,59.206568],[-137.5493,59.134531],[-137.521007,59.072364],[-137.484394,58.991904],[-137.507752,58.939969],[-137.50876,58.914906],[-137.486875,58.900075],[-137.453466,58.899145],[-137.423106,58.907723],[-137.338098,58.955472],[-137.2819,58.98715],[-137.172346,59.027148],[-137.062367,59.067572],[-137.047109,59.07331],[-136.942282,59.11107],[-136.840816,59.148174],[-136.785496,59.157217],[-136.671911,59.150809],[-136.613491,59.15422],[-136.569489,59.172152],[-136.484791,59.2538],[-136.483551,59.257469],[-136.466549,59.287803],[-136.467092,59.38449],[-136.467557,59.461643],[-136.415958,59.452238],[-136.36684,59.449551],[-136.319995,59.459059],[-136.275036,59.486448],[-136.244728,59.528202],[-136.258474,59.556107],[-136.29935,59.575745],[-136.350329,59.592384],[-136.2585,59.621582],[-136.145406,59.636826],[-136.02686,59.652846],[-135.923818,59.666747],[-135.830955,59.693257],[-135.641251,59.747362],[-135.482759,59.792475],[-135.465137,59.789685],[-135.404392,59.753305],[-135.345791,59.731032],[-135.259879,59.698218],[-135.221897,59.675273],[-135.192028,59.64711],[-135.157792,59.623287],[-135.106684,59.613158],[-135.087874,59.606544],[-135.032942,59.573109],[-135.018524,59.559363],[-135.016198,59.543447],[-135.01948,59.493166],[-135.023252,59.477146],[-135.037489,59.461591],[-135.078598,59.438337],[-135.095754,59.418855],[-134.993254,59.381906],[-135.00483,59.367127],[-135.014441,59.35152],[-135.016198,59.336173],[-134.979973,59.297415],[-134.95783,59.280982],[-134.932431,59.270647],[-134.839465,59.258141],[-134.74345,59.245119],[-134.70552,59.240106],[-134.692084,59.235249],[-134.68286,59.223001],[-134.671439,59.193752],[-134.66038,59.181298],[-134.610771,59.144556],[-134.582788,59.128847],[-134.556717,59.123059],[-134.509072,59.122801],[-134.477575,59.114946],[-134.451013,59.097893],[-134.398019,59.051952],[-134.387167,59.036863],[-134.385591,59.018828],[-134.399389,58.974954],[-134.343423,58.968857],[-134.329651,58.963017],[-134.320039,58.952682],[-134.32314,58.949168],[-134.330323,58.945344],[-134.333036,58.93413],[-134.327403,58.916457],[-134.316939,58.903796],[-134.22219,58.842714],[-134.108838,58.808246],[-133.983109,58.769902],[-133.87123,58.735899],[-133.831129,58.718019],[-133.796402,58.693421],[-133.700077,58.59937],[-133.626283,58.546402],[-133.547063,58.505577],[-133.463089,58.462221],[-133.392241,58.403878],[-133.43012,58.372097],[-133.41503,58.330549],[-133.374567,58.290965],[-133.257262,58.210298],[-133.165588,58.147305],[-133.142127,58.120588],[-133.094843,58.0331],[-133.075154,58.007882],[-132.99335,57.941917],[-132.917153,57.880499],[-132.83212,57.791564],[-132.70944,57.663303],[-132.629057,57.579277],[-132.552447,57.499075],[-132.455735,57.420992],[-132.362304,57.3457],[-132.304684,57.280355],[-132.230994,57.19682],[-132.276366,57.14889],[-132.34122,57.080393],[-132.16229,57.050317],[-132.031859,57.028406],[-132.107384,56.858753],[-131.871558,56.79346],[-131.865874,56.785708],[-131.872411,56.77297],[-131.882617,56.759146],[-131.887966,56.747958],[-131.886028,56.737055],[-131.880705,56.728838],[-131.864789,56.71349],[-131.838976,56.682278],[-131.830424,56.664759],[-131.826574,56.644606],[-131.832103,56.603368],[-131.825592,56.593343],[-131.799108,56.587658],[-131.692293,56.585074],[-131.585891,56.595048],[-131.560363,56.594066],[-131.536437,56.585229],[-131.491659,56.560166],[-131.345699,56.503271],[-131.215604,56.45255],[-131.100546,56.407669],[-131.016934,56.38705],[-130.839089,56.372452],[-130.760334,56.345192],[-130.645768,56.261942],[-130.602256,56.247059],[-130.495518,56.232434],[-130.47229,56.22489],[-130.458053,56.210653],[-130.427926,56.143964],[-130.418159,56.129702],[-130.403974,56.121898],[-130.290311,56.10097],[-130.243156,56.092391],[-130.211246,56.089962],[-130.116756,56.105646],[-130.094328,56.101486],[-130.071539,56.084123],[-130.039319,56.045521],[-130.026632,56.024101],[-130.01901,56.002216],[-130.014695,55.963252],[-130.016788,55.918913],[-130.019612,55.907978],[-130.019618,55.907952],[-130.022817,55.901353],[-130.049387,55.871405],[-130.104726,55.825263],[-130.136627,55.806464],[-130.148834,55.795356],[-130.163482,55.771145],[-130.167307,55.766262],[-130.170806,55.759833],[-130.173655,55.749498],[-130.170806,55.740953],[-130.163808,55.734565],[-130.160064,55.727118],[-130.167388,55.715399],[-130.155914,55.700141],[-130.142893,55.689521],[-130.131825,55.676581],[-130.126454,55.653998],[-130.12857,55.63642],[-130.135121,55.619127],[-130.153147,55.58511],[-130.148671,55.578192],[-130.146881,55.569322],[-130.146962,55.547187],[-130.112172,55.509345],[-130.101674,55.481147],[-130.095082,55.472113],[-130.065419,55.446112],[-130.057525,55.434882],[-130.052561,55.414008],[-130.054311,55.366645],[-130.05012,55.345445],[-130.039296,55.330756],[-129.989247,55.284003],[-130.031239,55.26435],[-130.050038,55.252875],[-130.067494,55.239],[-130.078236,55.233791],[-130.100494,55.230292],[-130.104726,55.225653],[-130.105702,55.211127],[-130.10912,55.200751],[-130.115793,55.191596],[-130.126454,55.180976],[-130.151967,55.163275],[-130.159983,55.153713],[-130.167592,55.129584],[-130.173695,55.117743],[-130.200266,55.104153],[-130.211781,55.084133],[-130.228871,55.04385],[-130.238678,55.03441],[-130.261342,55.022895],[-130.269846,55.016547],[-130.275706,55.006985],[-130.286366,54.983222],[-130.294342,54.971869],[-130.326568,54.952094],[-130.335561,54.938707],[-130.365387,54.907294],[-130.385243,54.896552],[-130.430816,54.881252],[-130.488759,54.844184],[-130.580312,54.806383],[-130.597485,54.803391],[-130.71074,54.733215],[-131.160718,54.787192]]]]}}]},"featureIcons":{"circle-stroked-24":{"x":0,"y":0,"width":24,"height":24},"circle-stroked-18":{"x":24,"y":0,"width":18,"height":18},"circle-stroked-12":{"x":42,"y":0,"width":12,"height":12},"circle-24":{"x":54,"y":0,"width":24,"height":24},"circle-18":{"x":78,"y":0,"width":18,"height":18},"circle-12":{"x":96,"y":0,"width":12,"height":12},"square-stroked-24":{"x":108,"y":0,"width":24,"height":24},"square-stroked-18":{"x":132,"y":0,"width":18,"height":18},"square-stroked-12":{"x":150,"y":0,"width":12,"height":12},"square-24":{"x":162,"y":0,"width":24,"height":24},"square-18":{"x":186,"y":0,"width":18,"height":18},"square-12":{"x":204,"y":0,"width":12,"height":12},"triangle-stroked-24":{"x":216,"y":0,"width":24,"height":24},"triangle-stroked-18":{"x":240,"y":0,"width":18,"height":18},"triangle-stroked-12":{"x":258,"y":0,"width":12,"height":12},"triangle-24":{"x":0,"y":24,"width":24,"height":24},"triangle-18":{"x":24,"y":24,"width":18,"height":18},"triangle-12":{"x":42,"y":24,"width":12,"height":12},"star-stroked-24":{"x":54,"y":24,"width":24,"height":24},"star-stroked-18":{"x":78,"y":24,"width":18,"height":18},"star-stroked-12":{"x":96,"y":24,"width":12,"height":12},"star-24":{"x":108,"y":24,"width":24,"height":24},"star-18":{"x":132,"y":24,"width":18,"height":18},"star-12":{"x":150,"y":24,"width":12,"height":12},"cross-24":{"x":162,"y":24,"width":24,"height":24},"cross-18":{"x":186,"y":24,"width":18,"height":18},"cross-12":{"x":204,"y":24,"width":12,"height":12},"marker-stroked-24":{"x":216,"y":24,"width":24,"height":24},"marker-stroked-18":{"x":240,"y":24,"width":18,"height":18},"marker-stroked-12":{"x":258,"y":24,"width":12,"height":12},"marker-24":{"x":0,"y":48,"width":24,"height":24},"marker-18":{"x":24,"y":48,"width":18,"height":18},"marker-12":{"x":42,"y":48,"width":12,"height":12},"religious-jewish-24":{"x":54,"y":48,"width":24,"height":24},"religious-jewish-18":{"x":78,"y":48,"width":18,"height":18},"religious-jewish-12":{"x":96,"y":48,"width":12,"height":12},"religious-christian-24":{"x":108,"y":48,"width":24,"height":24},"religious-christian-18":{"x":132,"y":48,"width":18,"height":18},"religious-christian-12":{"x":150,"y":48,"width":12,"height":12},"religious-muslim-24":{"x":162,"y":48,"width":24,"height":24},"religious-muslim-18":{"x":186,"y":48,"width":18,"height":18},"religious-muslim-12":{"x":204,"y":48,"width":12,"height":12},"cemetery-24":{"x":216,"y":48,"width":24,"height":24},"cemetery-18":{"x":240,"y":48,"width":18,"height":18},"cemetery-12":{"x":258,"y":48,"width":12,"height":12},"rocket-24":{"x":0,"y":72,"width":24,"height":24},"rocket-18":{"x":24,"y":72,"width":18,"height":18},"rocket-12":{"x":42,"y":72,"width":12,"height":12},"airport-24":{"x":54,"y":72,"width":24,"height":24},"airport-18":{"x":78,"y":72,"width":18,"height":18},"airport-12":{"x":96,"y":72,"width":12,"height":12},"heliport-24":{"x":108,"y":72,"width":24,"height":24},"heliport-18":{"x":132,"y":72,"width":18,"height":18},"heliport-12":{"x":150,"y":72,"width":12,"height":12},"rail-24":{"x":162,"y":72,"width":24,"height":24},"rail-18":{"x":186,"y":72,"width":18,"height":18},"rail-12":{"x":204,"y":72,"width":12,"height":12},"rail-metro-24":{"x":216,"y":72,"width":24,"height":24},"rail-metro-18":{"x":240,"y":72,"width":18,"height":18},"rail-metro-12":{"x":258,"y":72,"width":12,"height":12},"rail-light-24":{"x":0,"y":96,"width":24,"height":24},"rail-light-18":{"x":24,"y":96,"width":18,"height":18},"rail-light-12":{"x":42,"y":96,"width":12,"height":12},"bus-24":{"x":54,"y":96,"width":24,"height":24},"bus-18":{"x":78,"y":96,"width":18,"height":18},"bus-12":{"x":96,"y":96,"width":12,"height":12},"fuel-24":{"x":108,"y":96,"width":24,"height":24},"fuel-18":{"x":132,"y":96,"width":18,"height":18},"fuel-12":{"x":150,"y":96,"width":12,"height":12},"parking-24":{"x":162,"y":96,"width":24,"height":24},"parking-18":{"x":186,"y":96,"width":18,"height":18},"parking-12":{"x":204,"y":96,"width":12,"height":12},"parking-garage-24":{"x":216,"y":96,"width":24,"height":24},"parking-garage-18":{"x":240,"y":96,"width":18,"height":18},"parking-garage-12":{"x":258,"y":96,"width":12,"height":12},"airfield-24":{"x":0,"y":120,"width":24,"height":24},"airfield-18":{"x":24,"y":120,"width":18,"height":18},"airfield-12":{"x":42,"y":120,"width":12,"height":12},"roadblock-24":{"x":54,"y":120,"width":24,"height":24},"roadblock-18":{"x":78,"y":120,"width":18,"height":18},"roadblock-12":{"x":96,"y":120,"width":12,"height":12},"ferry-24":{"x":108,"y":120,"width":24,"height":24},"ferry-18":{"x":132,"y":120,"width":18,"height":18},"ferry-12":{"x":150,"y":120,"width":12,"height":12},"harbor-24":{"x":162,"y":120,"width":24,"height":24},"harbor-18":{"x":186,"y":120,"width":18,"height":18},"harbor-12":{"x":204,"y":120,"width":12,"height":12},"bicycle-24":{"x":216,"y":120,"width":24,"height":24},"bicycle-18":{"x":240,"y":120,"width":18,"height":18},"bicycle-12":{"x":258,"y":120,"width":12,"height":12},"park-24":{"x":0,"y":144,"width":24,"height":24},"park-18":{"x":24,"y":144,"width":18,"height":18},"park-12":{"x":42,"y":144,"width":12,"height":12},"park2-24":{"x":54,"y":144,"width":24,"height":24},"park2-18":{"x":78,"y":144,"width":18,"height":18},"park2-12":{"x":96,"y":144,"width":12,"height":12},"museum-24":{"x":108,"y":144,"width":24,"height":24},"museum-18":{"x":132,"y":144,"width":18,"height":18},"museum-12":{"x":150,"y":144,"width":12,"height":12},"lodging-24":{"x":162,"y":144,"width":24,"height":24},"lodging-18":{"x":186,"y":144,"width":18,"height":18},"lodging-12":{"x":204,"y":144,"width":12,"height":12},"monument-24":{"x":216,"y":144,"width":24,"height":24},"monument-18":{"x":240,"y":144,"width":18,"height":18},"monument-12":{"x":258,"y":144,"width":12,"height":12},"zoo-24":{"x":0,"y":168,"width":24,"height":24},"zoo-18":{"x":24,"y":168,"width":18,"height":18},"zoo-12":{"x":42,"y":168,"width":12,"height":12},"garden-24":{"x":54,"y":168,"width":24,"height":24},"garden-18":{"x":78,"y":168,"width":18,"height":18},"garden-12":{"x":96,"y":168,"width":12,"height":12},"campsite-24":{"x":108,"y":168,"width":24,"height":24},"campsite-18":{"x":132,"y":168,"width":18,"height":18},"campsite-12":{"x":150,"y":168,"width":12,"height":12},"theatre-24":{"x":162,"y":168,"width":24,"height":24},"theatre-18":{"x":186,"y":168,"width":18,"height":18},"theatre-12":{"x":204,"y":168,"width":12,"height":12},"art-gallery-24":{"x":216,"y":168,"width":24,"height":24},"art-gallery-18":{"x":240,"y":168,"width":18,"height":18},"art-gallery-12":{"x":258,"y":168,"width":12,"height":12},"pitch-24":{"x":0,"y":192,"width":24,"height":24},"pitch-18":{"x":24,"y":192,"width":18,"height":18},"pitch-12":{"x":42,"y":192,"width":12,"height":12},"soccer-24":{"x":54,"y":192,"width":24,"height":24},"soccer-18":{"x":78,"y":192,"width":18,"height":18},"soccer-12":{"x":96,"y":192,"width":12,"height":12},"america-football-24":{"x":108,"y":192,"width":24,"height":24},"america-football-18":{"x":132,"y":192,"width":18,"height":18},"america-football-12":{"x":150,"y":192,"width":12,"height":12},"tennis-24":{"x":162,"y":192,"width":24,"height":24},"tennis-18":{"x":186,"y":192,"width":18,"height":18},"tennis-12":{"x":204,"y":192,"width":12,"height":12},"basketball-24":{"x":216,"y":192,"width":24,"height":24},"basketball-18":{"x":240,"y":192,"width":18,"height":18},"basketball-12":{"x":258,"y":192,"width":12,"height":12},"baseball-24":{"x":0,"y":216,"width":24,"height":24},"baseball-18":{"x":24,"y":216,"width":18,"height":18},"baseball-12":{"x":42,"y":216,"width":12,"height":12},"golf-24":{"x":54,"y":216,"width":24,"height":24},"golf-18":{"x":78,"y":216,"width":18,"height":18},"golf-12":{"x":96,"y":216,"width":12,"height":12},"swimming-24":{"x":108,"y":216,"width":24,"height":24},"swimming-18":{"x":132,"y":216,"width":18,"height":18},"swimming-12":{"x":150,"y":216,"width":12,"height":12},"cricket-24":{"x":162,"y":216,"width":24,"height":24},"cricket-18":{"x":186,"y":216,"width":18,"height":18},"cricket-12":{"x":204,"y":216,"width":12,"height":12},"skiing-24":{"x":216,"y":216,"width":24,"height":24},"skiing-18":{"x":240,"y":216,"width":18,"height":18},"skiing-12":{"x":258,"y":216,"width":12,"height":12},"school-24":{"x":0,"y":240,"width":24,"height":24},"school-18":{"x":24,"y":240,"width":18,"height":18},"school-12":{"x":42,"y":240,"width":12,"height":12},"college-24":{"x":54,"y":240,"width":24,"height":24},"college-18":{"x":78,"y":240,"width":18,"height":18},"college-12":{"x":96,"y":240,"width":12,"height":12},"library-24":{"x":108,"y":240,"width":24,"height":24},"library-18":{"x":132,"y":240,"width":18,"height":18},"library-12":{"x":150,"y":240,"width":12,"height":12},"post-24":{"x":162,"y":240,"width":24,"height":24},"post-18":{"x":186,"y":240,"width":18,"height":18},"post-12":{"x":204,"y":240,"width":12,"height":12},"fire-station-24":{"x":216,"y":240,"width":24,"height":24},"fire-station-18":{"x":240,"y":240,"width":18,"height":18},"fire-station-12":{"x":258,"y":240,"width":12,"height":12},"town-hall-24":{"x":0,"y":264,"width":24,"height":24},"town-hall-18":{"x":24,"y":264,"width":18,"height":18},"town-hall-12":{"x":42,"y":264,"width":12,"height":12},"police-24":{"x":54,"y":264,"width":24,"height":24},"police-18":{"x":78,"y":264,"width":18,"height":18},"police-12":{"x":96,"y":264,"width":12,"height":12},"prison-24":{"x":108,"y":264,"width":24,"height":24},"prison-18":{"x":132,"y":264,"width":18,"height":18},"prison-12":{"x":150,"y":264,"width":12,"height":12},"embassy-24":{"x":162,"y":264,"width":24,"height":24},"embassy-18":{"x":186,"y":264,"width":18,"height":18},"embassy-12":{"x":204,"y":264,"width":12,"height":12},"beer-24":{"x":216,"y":264,"width":24,"height":24},"beer-18":{"x":240,"y":264,"width":18,"height":18},"beer-12":{"x":258,"y":264,"width":12,"height":12},"restaurant-24":{"x":0,"y":288,"width":24,"height":24},"restaurant-18":{"x":24,"y":288,"width":18,"height":18},"restaurant-12":{"x":42,"y":288,"width":12,"height":12},"cafe-24":{"x":54,"y":288,"width":24,"height":24},"cafe-18":{"x":78,"y":288,"width":18,"height":18},"cafe-12":{"x":96,"y":288,"width":12,"height":12},"shop-24":{"x":108,"y":288,"width":24,"height":24},"shop-18":{"x":132,"y":288,"width":18,"height":18},"shop-12":{"x":150,"y":288,"width":12,"height":12},"fast-food-24":{"x":162,"y":288,"width":24,"height":24},"fast-food-18":{"x":186,"y":288,"width":18,"height":18},"fast-food-12":{"x":204,"y":288,"width":12,"height":12},"bar-24":{"x":216,"y":288,"width":24,"height":24},"bar-18":{"x":240,"y":288,"width":18,"height":18},"bar-12":{"x":258,"y":288,"width":12,"height":12},"bank-24":{"x":0,"y":312,"width":24,"height":24},"bank-18":{"x":24,"y":312,"width":18,"height":18},"bank-12":{"x":42,"y":312,"width":12,"height":12},"grocery-24":{"x":54,"y":312,"width":24,"height":24},"grocery-18":{"x":78,"y":312,"width":18,"height":18},"grocery-12":{"x":96,"y":312,"width":12,"height":12},"cinema-24":{"x":108,"y":312,"width":24,"height":24},"cinema-18":{"x":132,"y":312,"width":18,"height":18},"cinema-12":{"x":150,"y":312,"width":12,"height":12},"pharmacy-24":{"x":162,"y":312,"width":24,"height":24},"pharmacy-18":{"x":186,"y":312,"width":18,"height":18},"pharmacy-12":{"x":204,"y":312,"width":12,"height":12},"hospital-24":{"x":216,"y":312,"width":24,"height":24},"hospital-18":{"x":240,"y":312,"width":18,"height":18},"hospital-12":{"x":258,"y":312,"width":12,"height":12},"danger-24":{"x":0,"y":336,"width":24,"height":24},"danger-18":{"x":24,"y":336,"width":18,"height":18},"danger-12":{"x":42,"y":336,"width":12,"height":12},"industrial-24":{"x":54,"y":336,"width":24,"height":24},"industrial-18":{"x":78,"y":336,"width":18,"height":18},"industrial-12":{"x":96,"y":336,"width":12,"height":12},"warehouse-24":{"x":108,"y":336,"width":24,"height":24},"warehouse-18":{"x":132,"y":336,"width":18,"height":18},"warehouse-12":{"x":150,"y":336,"width":12,"height":12},"commercial-24":{"x":162,"y":336,"width":24,"height":24},"commercial-18":{"x":186,"y":336,"width":18,"height":18},"commercial-12":{"x":204,"y":336,"width":12,"height":12},"building-24":{"x":216,"y":336,"width":24,"height":24},"building-18":{"x":240,"y":336,"width":18,"height":18},"building-12":{"x":258,"y":336,"width":12,"height":12},"place-of-worship-24":{"x":0,"y":360,"width":24,"height":24},"place-of-worship-18":{"x":24,"y":360,"width":18,"height":18},"place-of-worship-12":{"x":42,"y":360,"width":12,"height":12},"alcohol-shop-24":{"x":54,"y":360,"width":24,"height":24},"alcohol-shop-18":{"x":78,"y":360,"width":18,"height":18},"alcohol-shop-12":{"x":96,"y":360,"width":12,"height":12},"logging-24":{"x":108,"y":360,"width":24,"height":24},"logging-18":{"x":132,"y":360,"width":18,"height":18},"logging-12":{"x":150,"y":360,"width":12,"height":12},"oil-well-24":{"x":162,"y":360,"width":24,"height":24},"oil-well-18":{"x":186,"y":360,"width":18,"height":18},"oil-well-12":{"x":204,"y":360,"width":12,"height":12},"slaughterhouse-24":{"x":216,"y":360,"width":24,"height":24},"slaughterhouse-18":{"x":240,"y":360,"width":18,"height":18},"slaughterhouse-12":{"x":258,"y":360,"width":12,"height":12},"dam-24":{"x":0,"y":384,"width":24,"height":24},"dam-18":{"x":24,"y":384,"width":18,"height":18},"dam-12":{"x":42,"y":384,"width":12,"height":12},"water-24":{"x":54,"y":384,"width":24,"height":24},"water-18":{"x":78,"y":384,"width":18,"height":18},"water-12":{"x":96,"y":384,"width":12,"height":12},"wetland-24":{"x":108,"y":384,"width":24,"height":24},"wetland-18":{"x":132,"y":384,"width":18,"height":18},"wetland-12":{"x":150,"y":384,"width":12,"height":12},"disability-24":{"x":162,"y":384,"width":24,"height":24},"disability-18":{"x":186,"y":384,"width":18,"height":18},"disability-12":{"x":204,"y":384,"width":12,"height":12},"telephone-24":{"x":216,"y":384,"width":24,"height":24},"telephone-18":{"x":240,"y":384,"width":18,"height":18},"telephone-12":{"x":258,"y":384,"width":12,"height":12},"emergency-telephone-24":{"x":0,"y":408,"width":24,"height":24},"emergency-telephone-18":{"x":24,"y":408,"width":18,"height":18},"emergency-telephone-12":{"x":42,"y":408,"width":12,"height":12},"toilets-24":{"x":54,"y":408,"width":24,"height":24},"toilets-18":{"x":78,"y":408,"width":18,"height":18},"toilets-12":{"x":96,"y":408,"width":12,"height":12},"waste-basket-24":{"x":108,"y":408,"width":24,"height":24},"waste-basket-18":{"x":132,"y":408,"width":18,"height":18},"waste-basket-12":{"x":150,"y":408,"width":12,"height":12},"music-24":{"x":162,"y":408,"width":24,"height":24},"music-18":{"x":186,"y":408,"width":18,"height":18},"music-12":{"x":204,"y":408,"width":12,"height":12},"land-use-24":{"x":216,"y":408,"width":24,"height":24},"land-use-18":{"x":240,"y":408,"width":18,"height":18},"land-use-12":{"x":258,"y":408,"width":12,"height":12},"city-24":{"x":0,"y":432,"width":24,"height":24},"city-18":{"x":24,"y":432,"width":18,"height":18},"city-12":{"x":42,"y":432,"width":12,"height":12},"town-24":{"x":54,"y":432,"width":24,"height":24},"town-18":{"x":78,"y":432,"width":18,"height":18},"town-12":{"x":96,"y":432,"width":12,"height":12},"village-24":{"x":108,"y":432,"width":24,"height":24},"village-18":{"x":132,"y":432,"width":18,"height":18},"village-12":{"x":150,"y":432,"width":12,"height":12},"farm-24":{"x":162,"y":432,"width":24,"height":24},"farm-18":{"x":186,"y":432,"width":18,"height":18},"farm-12":{"x":204,"y":432,"width":12,"height":12},"bakery-24":{"x":216,"y":432,"width":24,"height":24},"bakery-18":{"x":240,"y":432,"width":18,"height":18},"bakery-12":{"x":258,"y":432,"width":12,"height":12},"dog-park-24":{"x":0,"y":456,"width":24,"height":24},"dog-park-18":{"x":24,"y":456,"width":18,"height":18},"dog-park-12":{"x":42,"y":456,"width":12,"height":12},"lighthouse-24":{"x":54,"y":456,"width":24,"height":24},"lighthouse-18":{"x":78,"y":456,"width":18,"height":18},"lighthouse-12":{"x":96,"y":456,"width":12,"height":12},"clothing-store-24":{"x":108,"y":456,"width":24,"height":24},"clothing-store-18":{"x":132,"y":456,"width":18,"height":18},"clothing-store-12":{"x":150,"y":456,"width":12,"height":12},"polling-place-24":{"x":162,"y":456,"width":24,"height":24},"polling-place-18":{"x":186,"y":456,"width":18,"height":18},"polling-place-12":{"x":204,"y":456,"width":12,"height":12},"playground-24":{"x":216,"y":456,"width":24,"height":24},"playground-18":{"x":240,"y":456,"width":18,"height":18},"playground-12":{"x":258,"y":456,"width":12,"height":12},"entrance-24":{"x":0,"y":480,"width":24,"height":24},"entrance-18":{"x":24,"y":480,"width":18,"height":18},"entrance-12":{"x":42,"y":480,"width":12,"height":12},"heart-24":{"x":54,"y":480,"width":24,"height":24},"heart-18":{"x":78,"y":480,"width":18,"height":18},"heart-12":{"x":96,"y":480,"width":12,"height":12},"london-underground-24":{"x":108,"y":480,"width":24,"height":24},"london-underground-18":{"x":132,"y":480,"width":18,"height":18},"london-underground-12":{"x":150,"y":480,"width":12,"height":12},"minefield-24":{"x":162,"y":480,"width":24,"height":24},"minefield-18":{"x":186,"y":480,"width":18,"height":18},"minefield-12":{"x":204,"y":480,"width":12,"height":12},"rail-underground-24":{"x":216,"y":480,"width":24,"height":24},"rail-underground-18":{"x":240,"y":480,"width":18,"height":18},"rail-underground-12":{"x":258,"y":480,"width":12,"height":12},"rail-above-24":{"x":0,"y":504,"width":24,"height":24},"rail-above-18":{"x":24,"y":504,"width":18,"height":18},"rail-above-12":{"x":42,"y":504,"width":12,"height":12},"camera-24":{"x":54,"y":504,"width":24,"height":24},"camera-18":{"x":78,"y":504,"width":18,"height":18},"camera-12":{"x":96,"y":504,"width":12,"height":12},"laundry-24":{"x":108,"y":504,"width":24,"height":24},"laundry-18":{"x":132,"y":504,"width":18,"height":18},"laundry-12":{"x":150,"y":504,"width":12,"height":12},"car-24":{"x":162,"y":504,"width":24,"height":24},"car-18":{"x":186,"y":504,"width":18,"height":18},"car-12":{"x":204,"y":504,"width":12,"height":12},"suitcase-24":{"x":216,"y":504,"width":24,"height":24},"suitcase-18":{"x":240,"y":504,"width":18,"height":18},"suitcase-12":{"x":258,"y":504,"width":12,"height":12},"hairdresser-24":{"x":0,"y":528,"width":24,"height":24},"hairdresser-18":{"x":24,"y":528,"width":18,"height":18},"hairdresser-12":{"x":42,"y":528,"width":12,"height":12},"chemist-24":{"x":54,"y":528,"width":24,"height":24},"chemist-18":{"x":78,"y":528,"width":18,"height":18},"chemist-12":{"x":96,"y":528,"width":12,"height":12},"mobilephone-24":{"x":108,"y":528,"width":24,"height":24},"mobilephone-18":{"x":132,"y":528,"width":18,"height":18},"mobilephone-12":{"x":150,"y":528,"width":12,"height":12},"scooter-24":{"x":162,"y":528,"width":24,"height":24},"scooter-18":{"x":186,"y":528,"width":18,"height":18},"scooter-12":{"x":204,"y":528,"width":12,"height":12},"gift-24":{"x":216,"y":528,"width":24,"height":24},"gift-18":{"x":240,"y":528,"width":18,"height":18},"gift-12":{"x":258,"y":528,"width":12,"height":12},"ice-cream-24":{"x":0,"y":552,"width":24,"height":24},"ice-cream-18":{"x":24,"y":552,"width":18,"height":18},"ice-cream-12":{"x":42,"y":552,"width":12,"height":12}},"locales":["af","sq","ar","ar-AA","hy","ast","bn","bs","bg-BG","ca","zh","zh-CN","zh-HK","zh-TW","yue","hr","cs","da","nl","en-GB","eo","et","fi","fr","gl","de","el","hi","hu","is","id","it","ja","kn","ko","lv","lij","lt","no","fa","pl","pt","pt-BR","ro","ru","sc","sr","si","sk","sl","es","sv","tl","ta","te","th","tr","uk","vi"],"en":{"modes":{"add_area":{"title":"Area","description":"Add parks, buildings, lakes or other areas to the map.","tail":"Click on the map to start drawing an area, like a park, lake, or building."},"add_line":{"title":"Line","description":"Add highways, streets, pedestrian paths, canals or other lines to the map.","tail":"Click on the map to start drawing a road, path, or route."},"add_point":{"title":"Point","description":"Add restaurants, monuments, postal boxes or other points to the map.","tail":"Click on the map to add a point."},"browse":{"title":"Browse","description":"Pan and zoom the map."},"draw_area":{"tail":"Click to add nodes to your area. Click the first node to finish the area."},"draw_line":{"tail":"Click to add more nodes to the line. Click on other lines to connect to them, and double-click to end the line."}},"operations":{"add":{"annotation":{"point":"Added a point.","vertex":"Added a node to a way.","relation":"Added a relation."}},"start":{"annotation":{"line":"Started a line.","area":"Started an area."}},"continue":{"key":"A","title":"Continue","description":"Continue this line.","not_eligible":"No line can be continued here.","multiple":"Several lines can be continued here. To choose a line, press the Shift key and click on it to select it.","annotation":{"line":"Continued a line.","area":"Continued an area."}},"cancel_draw":{"annotation":"Canceled drawing."},"change_role":{"annotation":"Changed the role of a relation member."},"change_tags":{"annotation":"Changed tags."},"circularize":{"title":"Circularize","description":{"line":"Make this line circular.","area":"Make this area circular."},"key":"O","annotation":{"line":"Made a line circular.","area":"Made an area circular."},"not_closed":"This can't be made circular because it's not a loop.","too_large":"This can't be made circular because not enough of it is currently visible.","connected_to_hidden":"This can't be made circular because it is connected to a hidden feature."},"orthogonalize":{"title":"Square","description":{"line":"Square the corners of this line.","area":"Square the corners of this area."},"key":"S","annotation":{"line":"Squared the corners of a line.","area":"Squared the corners of an area."},"not_squarish":"This can't be made square because it is not squarish.","too_large":"This can't be made square because not enough of it is currently visible.","connected_to_hidden":"This can't be made square because it is connected to a hidden feature."},"straighten":{"title":"Straighten","description":"Straighten this line.","key":"S","annotation":"Straightened a line.","too_bendy":"This can't be straightened because it bends too much.","connected_to_hidden":"This line can't be straightened because it is connected to a hidden feature."},"delete":{"title":"Delete","description":"Delete object permanently.","annotation":{"point":"Deleted a point.","vertex":"Deleted a node from a way.","line":"Deleted a line.","area":"Deleted an area.","relation":"Deleted a relation.","multiple":"Deleted {n} objects."},"incomplete_relation":"This feature can't be deleted because it hasn't been fully downloaded.","part_of_relation":"This feature can't be deleted because it's part of a larger relation. You must remove it from the relation first.","connected_to_hidden":"This can't be deleted because it is connected to a hidden feature."},"add_member":{"annotation":"Added a member to a relation."},"delete_member":{"annotation":"Removed a member from a relation."},"connect":{"annotation":{"point":"Connected a way to a point.","vertex":"Connected a way to another.","line":"Connected a way to a line.","area":"Connected a way to an area."}},"disconnect":{"title":"Disconnect","description":"Disconnect these lines/areas from each other.","key":"D","annotation":"Disconnected lines/areas.","not_connected":"There aren't enough lines/areas here to disconnect.","connected_to_hidden":"This can't be disconnected because it is connected to a hidden feature.","relation":"This can't be disconnected because it connects members of a relation."},"merge":{"title":"Merge","description":"Merge these features.","key":"C","annotation":"Merged {n} features.","not_eligible":"These features can't be merged.","not_adjacent":"These features can't be merged because they aren't connected.","restriction":"These features can't be merged because at least one is a member of a \"{relation}\" relation.","incomplete_relation":"These features can't be merged because at least one hasn't been fully downloaded.","conflicting_tags":"These features can't be merged because some of their tags have conflicting values."},"move":{"title":"Move","description":"Move this to a different location.","key":"M","annotation":{"point":"Moved a point.","vertex":"Moved a node in a way.","line":"Moved a line.","area":"Moved an area.","multiple":"Moved multiple objects."},"incomplete_relation":"This feature can't be moved because it hasn't been fully downloaded.","too_large":"This can't be moved because not enough of it is currently visible.","connected_to_hidden":"This can't be moved because it is connected to a hidden feature."},"rotate":{"title":"Rotate","description":"Rotate this object around its center point.","key":"R","annotation":{"line":"Rotated a line.","area":"Rotated an area."},"too_large":"This can't be rotated because not enough of it is currently visible.","connected_to_hidden":"This can't be rotated because it is connected to a hidden feature."},"reverse":{"title":"Reverse","description":"Make this line go in the opposite direction.","key":"V","annotation":"Reversed a line."},"split":{"title":"Split","description":{"line":"Split this line into two at this node.","area":"Split the boundary of this area into two.","multiple":"Split the lines/area boundaries at this node into two."},"key":"X","annotation":{"line":"Split a line.","area":"Split an area boundary.","multiple":"Split {n} lines/area boundaries."},"not_eligible":"Lines can't be split at their beginning or end.","multiple_ways":"There are too many lines here to split.","connected_to_hidden":"This can't be split because it is connected to a hidden feature."},"restriction":{"help":{"select":"Click to select a road segment.","toggle":"Click to toggle turn restrictions.","toggle_on":"Click to add a \"{restriction}\" restriction.","toggle_off":"Click to remove the \"{restriction}\" restriction."},"annotation":{"create":"Added a turn restriction","delete":"Deleted a turn restriction"}}},"undo":{"tooltip":"Undo: {action}","nothing":"Nothing to undo."},"redo":{"tooltip":"Redo: {action}","nothing":"Nothing to redo."},"tooltip_keyhint":"Shortcut:","browser_notice":"This editor is supported in Firefox, Chrome, Safari, Opera, and Internet Explorer 11 and above. Please upgrade your browser or use Potlatch 2 to edit the map.","translate":{"translate":"Translate","localized_translation_label":"Multilingual name","localized_translation_language":"Choose language","localized_translation_name":"Name"},"zoom_in_edit":"Zoom in to Edit","logout":"logout","loading_auth":"Connecting to OpenStreetMap...","report_a_bug":"Report a bug","help_translate":"Help translate","feature_info":{"hidden_warning":"{count} hidden features","hidden_details":"These features are currently hidden: {details}"},"status":{"error":"Unable to connect to API.","offline":"The API is offline. Please try editing later.","readonly":"The API is read-only. You will need to wait to save your changes."},"commit":{"title":"Save Changes","description_placeholder":"Brief description of your contributions","message_label":"Changeset comment","upload_explanation":"The changes you upload will be visible on all maps that use OpenStreetMap data.","upload_explanation_with_user":"The changes you upload as {user} will be visible on all maps that use OpenStreetMap data.","save":"Save","cancel":"Cancel","changes":"{count} Changes","warnings":"Warnings","modified":"Modified","deleted":"Deleted","created":"Created","about_changeset_comments":"About changeset comments","about_changeset_comments_link":"//wiki.openstreetmap.org/wiki/Good_changeset_comments"},"contributors":{"list":"Edits by {users}","truncated_list":"Edits by {users} and {count} others"},"infobox":{"selected":"{n} selected","geometry":"Geometry","closed":"closed","center":"Center","perimeter":"Perimeter","length":"Length","area":"Area","centroid":"Centroid","location":"Location","metric":"Metric","imperial":"Imperial"},"geometry":{"point":"point","vertex":"vertex","line":"line","area":"area","relation":"relation"},"geocoder":{"search":"Search worldwide...","no_results_visible":"No results in visible map area","no_results_worldwide":"No results found"},"geolocate":{"title":"Show My Location"},"inspector":{"no_documentation_combination":"There is no documentation available for this tag combination","no_documentation_key":"There is no documentation available for this key","show_more":"Show More","view_on_osm":"View on openstreetmap.org","all_fields":"All fields","all_tags":"All tags","all_members":"All members","all_relations":"All relations","new_relation":"New relation...","role":"Role","choose":"Select feature type","results":"{n} results for {search}","reference":"View on OpenStreetMap Wiki","back_tooltip":"Change feature","remove":"Remove","search":"Search","multiselect":"Selected items","unknown":"Unknown","incomplete":"","feature_list":"Search features","edit":"Edit feature","check":{"yes":"Yes","no":"No"},"none":"None","node":"Node","way":"Way","relation":"Relation","location":"Location","add_fields":"Add field:"},"background":{"title":"Background","description":"Background settings","percent_brightness":"{opacity}% brightness","none":"None","best_imagery":"Best known imagery source for this location","custom":"Custom","custom_button":"Edit custom background","custom_prompt":"Enter a tile URL template. Valid tokens are {z}, {x}, {y} for Z/X/Y scheme and {u} for quadtile scheme.","fix_misalignment":"Fix alignment","imagery_source_faq":"Where does this imagery come from?","reset":"reset","minimap":{"description":"Minimap","tooltip":"Show a zoomed out map to help locate the area currently displayed."}},"map_data":{"title":"Map Data","description":"Map Data","data_layers":"Data Layers","fill_area":"Fill Areas","map_features":"Map Features","autohidden":"These features have been automatically hidden because too many would be shown on the screen. You can zoom in to edit them."},"feature":{"points":{"description":"Points","tooltip":"Points of Interest"},"major_roads":{"description":"Major Roads","tooltip":"Highways, Streets, etc."},"minor_roads":{"description":"Minor Roads","tooltip":"Service Roads, Parking Aisles, Tracks, etc."},"paths":{"description":"Paths","tooltip":"Sidewalks, Foot Paths, Cycle Paths, etc."},"buildings":{"description":"Buildings","tooltip":"Buildings, Shelters, Garages, etc."},"landuse":{"description":"Landuse Features","tooltip":"Forests, Farmland, Parks, Residential, Commercial, etc."},"boundaries":{"description":"Boundaries","tooltip":"Administrative Boundaries"},"water":{"description":"Water Features","tooltip":"Rivers, Lakes, Ponds, Basins, etc."},"rail":{"description":"Rail Features","tooltip":"Railways"},"power":{"description":"Power Features","tooltip":"Power Lines, Power Plants, Substations, etc."},"past_future":{"description":"Past/Future","tooltip":"Proposed, Construction, Abandoned, Demolished, etc."},"others":{"description":"Others","tooltip":"Everything Else"}},"area_fill":{"wireframe":{"description":"No Fill (Wireframe)","tooltip":"Enabling wireframe mode makes it easy to see the background imagery."},"partial":{"description":"Partial Fill","tooltip":"Areas are drawn with fill only around their inner edges. (Recommended for beginner mappers)"},"full":{"description":"Full Fill","tooltip":"Areas are drawn fully filled."}},"restore":{"heading":"You have unsaved changes","description":"Do you wish to restore unsaved changes from a previous editing session?","restore":"Restore","reset":"Reset"},"save":{"title":"Save","help":"Save changes to OpenStreetMap, making them visible to other users.","no_changes":"No changes to save.","error":"Errors occurred while trying to save","status_code":"Server returned status code {code}","unknown_error_details":"Please ensure you are connected to the internet.","uploading":"Uploading changes to OpenStreetMap.","unsaved_changes":"You have unsaved changes","conflict":{"header":"Resolve conflicting edits","count":"Conflict {num} of {total}","previous":"< Previous","next":"Next >","keep_local":"Keep mine","keep_remote":"Use theirs","restore":"Restore","delete":"Leave Deleted","download_changes":"Or download your changes.","done":"All conflicts resolved!","help":"Another user changed some of the same map features you changed.\nClick on each item below for more details about the conflict, and choose whether to keep\nyour changes or the other user's changes.\n"}},"merge_remote_changes":{"conflict":{"deleted":"This object has been deleted by {user}.","location":"This object was moved by both you and {user}.","nodelist":"Nodes were changed by both you and {user}.","memberlist":"Relation members were changed by both you and {user}.","tags":"You changed the {tag} tag to \"{local}\" and {user} changed it to \"{remote}\"."}},"success":{"edited_osm":"Edited OSM!","just_edited":"You just edited OpenStreetMap!","view_on_osm":"View on OSM","facebook":"Share on Facebook","twitter":"Share on Twitter","google":"Share on Google+","help_html":"Your changes should appear in the \"Standard\" layer in a few minutes. Other layers, and certain features, may take longer.","help_link_text":"Details","help_link_url":"https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F"},"confirm":{"okay":"Okay","cancel":"Cancel"},"splash":{"welcome":"Welcome to the iD OpenStreetMap editor","text":"iD is a friendly but powerful tool for contributing to the world's best free world map. This is version {version}. For more information see {website} and report bugs at {github}.","walkthrough":"Start the Walkthrough","start":"Edit Now"},"source_switch":{"live":"live","lose_changes":"You have unsaved changes. Switching the map server will discard them. Are you sure you want to switch servers?","dev":"dev"},"tag_reference":{"description":"Description","on_wiki":"{tag} on wiki.osm.org","used_with":"used with {type}"},"validations":{"untagged_point":"Untagged point","untagged_line":"Untagged line","untagged_area":"Untagged area","many_deletions":"You're deleting {n} objects. Are you sure you want to do this? This will delete them from the map that everyone else sees on openstreetmap.org.","tag_suggests_area":"The tag {tag} suggests line should be area, but it is not an area","untagged_point_tooltip":"Select a feature type that describes what this point is.","untagged_line_tooltip":"Select a feature type that describes what this line is.","untagged_area_tooltip":"Select a feature type that describes what this area is.","deprecated_tags":"Deprecated tags: {tags}"},"zoom":{"in":"Zoom In","out":"Zoom Out"},"cannot_zoom":"Cannot zoom out further in current mode.","full_screen":"Toggle Full Screen","gpx":{"local_layer":"Local GPX file","drag_drop":"Drag and drop a .gpx file on the page, or click the button to the right to browse","zoom":"Zoom to GPX track","browse":"Browse for a .gpx file"},"mapillary_images":{"tooltip":"Street-level photos from Mapillary","title":"Photo Overlay (Mapillary)"},"mapillary_signs":{"tooltip":"Traffic signs from Mapillary","title":"Traffic Sign Overlay (Mapillary)"},"mapillary":{"view_on_mapillary":"View this image on Mapillary"},"help":{"title":"Help","help":"# Help\n\nThis is an editor for [OpenStreetMap](http://www.openstreetmap.org/), the\nfree and editable map of the world. You can use it to add and update\ndata in your area, making an open-source and open-data map of the world\nbetter for everyone.\n\nEdits that you make on this map will be visible to everyone who uses\nOpenStreetMap. In order to make an edit, you'll need to\n[log in](https://www.openstreetmap.org/login).\n\nThe [iD editor](http://ideditor.com/) is a collaborative project with [source\ncode available on GitHub](https://github.com/openstreetmap/iD).\n","editing_saving":"# Editing & Saving\n\nThis editor is designed to work primarily online, and you're accessing\nit through a website right now.\n\n### Selecting Features\n\nTo select a map feature, like a road or point of interest, click\non it on the map. This will highlight the selected feature, open a panel with\ndetails about it, and show a menu of things you can do with the feature.\n\nTo select multiple features, hold down the 'Shift' key. Then either click\non the features you want to select, or drag on the map to draw a rectangle.\nThis will draw a box and select all the points within it.\n\n### Saving Edits\n\nWhen you make changes like editing roads, buildings, and places, these are\nstored locally until you save them to the server. Don't worry if you make\na mistake - you can undo changes by clicking the undo button, and redo\nchanges by clicking the redo button.\n\nClick 'Save' to finish a group of edits - for instance, if you've completed\nan area of town and would like to start on a new area. You'll have a chance\nto review what you've done, and the editor supplies helpful suggestions\nand warnings if something doesn't seem right about the changes.\n\nIf everything looks good, you can enter a short comment explaining the change\nyou made, and click 'Save' again to post the changes\nto [OpenStreetMap.org](http://www.openstreetmap.org/), where they are visible\nto all other users and available for others to build and improve upon.\n\nIf you can't finish your edits in one sitting, you can leave the editor\nwindow and come back (on the same browser and computer), and the\neditor application will offer to restore your work.\n\n### Using the editor\n\nA list of available keyboard shortcuts can be found [here](http://wiki.openstreetmap.org/wiki/ID/Shortcuts).\n","roads":"# Roads\n\nYou can create, fix, and delete roads with this editor. Roads can be all\nkinds: paths, highways, trails, cycleways, and more - any often-crossed\nsegment should be mappable.\n\n### Selecting\n\nClick on a road to select it. An outline should become visible, along\nwith a small tools menu on the map and a sidebar showing more information\nabout the road.\n\n### Modifying\n\nOften you'll see roads that aren't aligned to the imagery behind them\nor to a GPS track. You can adjust these roads so they are in the correct\nplace.\n\nFirst click on the road you want to change. This will highlight it and show\ncontrol points along it that you can drag to better locations. If\nyou want to add new control points for more detail, double-click a part\nof the road without a node, and one will be added.\n\nIf the road connects to another road, but doesn't properly connect on\nthe map, you can drag one of its control points onto the other road in\norder to join them. Having roads connect is important for the map\nand essential for providing driving directions.\n\nYou can also click the 'Move' tool or press the `M` shortcut key to move the entire road at\none time, and then click again to save that movement.\n\n### Deleting\n\nIf a road is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the road could simply be newly built.\n\nYou can delete a road by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.\n\n### Creating\n\nFound somewhere there should be a road but there isn't? Click the 'Line'\nicon in the top-left of the editor or press the shortcut key `2` to start drawing\na line.\n\nClick on the start of the road on the map to start drawing. If the road\nbranches off from an existing road, start by clicking on the place where they connect.\n\nThen click on points along the road so that it follows the right path, according\nto satellite imagery or GPS. If the road you are drawing crosses another road, connect\nit by clicking on the intersection point. When you're done drawing, double-click\nor press 'Return' or 'Enter' on your keyboard.\n","gps":"# GPS\n\nCollected GPS traces are one valuable source of data for OpenStreetMap. This editor\nsupports local traces - `.gpx` files on your local computer. You can collect\nthis kind of GPS trace with a number of smartphone applications as well as\npersonal GPS hardware.\n\nFor information on how to perform a GPS survey, read\n[Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/).\n\nTo use a GPX track for mapping, drag and drop the GPX file onto the map\neditor. If it's recognized, it will be added to the map as a bright purple\nline. Click on the 'Map Data' menu on the right side to enable,\ndisable, or zoom to this new GPX-powered layer.\n\nThe GPX track isn't directly uploaded to OpenStreetMap - the best way to\nuse it is to draw on the map, using it as a guide for the new features that\nyou add, and also to [upload it to OpenStreetMap](http://www.openstreetmap.org/trace/create)\nfor other users to use.\n","imagery":"# Imagery\n\nAerial imagery is an important resource for mapping. A combination of\nairplane flyovers, satellite views, and freely-compiled sources are available\nin the editor under the 'Background Settings' menu on the right.\n\nBy default a [Bing Maps](http://www.bing.com/maps/) satellite layer is\npresented in the editor, but as you pan and zoom the map to new geographical\nareas, new sources will become available. Some countries, like the United\nStates, France, and Denmark have very high-quality imagery available for some areas.\n\nImagery is sometimes offset from the map data because of a mistake on the\nimagery provider's side. If you see a lot of roads shifted from the background,\ndon't immediately move them all to match the background. Instead you can adjust\nthe imagery so that it matches the existing data by clicking 'Fix alignment' at\nthe bottom of the Background Settings UI.\n","addresses":"# Addresses\n\nAddresses are some of the most useful information for the map.\n\nAlthough addresses are often represented as parts of streets, in OpenStreetMap\nthey're recorded as attributes of buildings and places along streets.\n\nYou can add address information to places mapped as building outlines\nas well as those mapped as single points. The optimal source of address\ndata is from an on-the-ground survey or personal knowledge - as with any\nother feature, copying from commercial sources like Google Maps is strictly\nforbidden.\n","inspector":"# Using the Inspector\n\nThe inspector is the section on the left side of the page that allows you to\nedit the details of the selected feature.\n\n### Selecting a Feature Type\n\nAfter you add a point, line, or area, you can choose what type of feature it\nis, like whether it's a highway or residential road, supermarket or cafe.\nThe inspector will display buttons for common feature types, and you can\nfind others by typing what you're looking for in the search box.\n\nClick the 'i' in the bottom-right-hand corner of a feature type button to\nlearn more about it. Click a button to choose that type.\n\n### Using Forms and Editing Tags\n\nAfter you choose a feature type, or when you select a feature that already\nhas a type assigned, the inspector will display fields with details about\nthe feature like its name and address.\n\nBelow the fields you see, you can click the 'Add field' dropdown to add\nother details, like a Wikipedia link, wheelchair access, and more.\n\nAt the bottom of the inspector, click 'Additional tags' to add arbitrary\nother tags to the element. [Taginfo](http://taginfo.openstreetmap.org/) is a\ngreat resource for learn more about popular tag combinations.\n\nChanges you make in the inspector are automatically applied to the map.\nYou can undo them at any time by clicking the 'Undo' button.\n","buildings":"# Buildings\n\nOpenStreetMap is the world's largest database of buildings. You can create\nand improve this database.\n\n### Selecting\n\nYou can select a building by clicking on its border. This will highlight the\nbuilding and open a small tools menu and a sidebar showing more information\nabout the building.\n\n### Modifying\n\nSometimes buildings are incorrectly placed or have incorrect tags.\n\nTo move an entire building, select it, then click the 'Move' tool. Move your\nmouse to shift the building, and click when it's correctly placed.\n\nTo fix the specific shape of a building, click and drag the nodes that form\nits border into better places.\n\n### Creating\n\nOne of the main questions around adding buildings to the map is that\nOpenStreetMap records buildings both as shapes and points. The rule of thumb\nis to _map a building as a shape whenever possible_, and map companies, homes,\namenities, and other things that operate out of buildings as points placed\nwithin the building shape.\n\nStart drawing a building as a shape by clicking the 'Area' button in the top\nleft of the interface, and end it either by pressing 'Return' on your keyboard\nor clicking on the first node drawn to close the shape.\n\n### Deleting\n\nIf a building is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the building could simply be newly built.\n\nYou can delete a building by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.\n","relations":"# Relations\n\nA relation is a special type of feature in OpenStreetMap that groups together\nother features. For example, two common types of relations are *route relations*,\nwhich group together sections of road that belong to a specific freeway or\nhighway, and *multipolygons*, which group together several lines that define\na complex area (one with several pieces or holes in it like a donut).\n\nThe group of features in a relation are called *members*. In the sidebar, you can\nsee which relations a feature is a member of, and click on a relation there\nto select the it. When the relation is selected, you can see all of its\nmembers listed in the sidebar and highlighted on the map.\n\nFor the most part, iD will take care of maintaining relations automatically\nwhile you edit. The main thing you should be aware of is that if you delete a\nsection of road to redraw it more accurately, you should make sure that the\nnew section is a member of the same relations as the original.\n\n## Editing Relations\n\nIf you want to edit relations, here are the basics.\n\nTo add a feature to a relation, select the feature, click the \"+\" button in the\n\"All relations\" section of the sidebar, and select or type the name of the relation.\n\nTo create a new relation, select the first feature that should be a member,\nclick the \"+\" button in the \"All relations\" section, and select \"New relation...\".\n\nTo remove a feature from a relation, select the feature and click the trash\nbutton next to the relation you want to remove it from.\n\nYou can create multipolygons with holes using the \"Merge\" tool. Draw two areas (inner\nand outer), hold the Shift key and click on each of them to select them both, and then\nclick the \"Merge\" (+) button.\n"},"intro":{"graph":{"city_hall":"Three Rivers City Hall","fire_department":"Three Rivers Fire Department","memory_isle_park":"Memory Isle Park","riverwalk_trail":"Riverwalk Trail","w_michigan_ave":"West Michigan Avenue","e_michigan_ave":"East Michigan Avenue","spring_st":"Spring Street","scidmore_park":"Scidmore Park","petting_zoo":"Scidmore Park Petting Zoo","n_andrews_st":"North Andrews Street","s_andrews_st":"South Andrews Street","n_constantine_st":"North Constantine Street","s_constantine_st":"South Constantine Street","rocky_river":"Rocky River","railroad_dr":"Railroad Drive","conrail_rr":"Conrail Railroad","st_joseph_river":"Saint Joseph River","n_main_st":"North Main Street","s_main_st":"South Main Street","water_st":"Water Street","foster_st":"Foster Street","portage_river":"Portage River","flower_st":"Flower Street","elm_st":"Elm Street","walnut_st":"Walnut Street","morris_ave":"Morris Avenue","east_st":"East Street","portage_ave":"Portage Avenue"},"navigation":{"title":"Navigation","drag":"The main map area shows OpenStreetMap data on top of a background. You can navigate by dragging and scrolling, just like any web map. **Drag the map!**","select":"Map features are represented three ways: using points, lines or areas. All features can be selected by clicking on them. **Click on the point to select it.**","pane":"When a feature is selected, the feature editor is displayed. The header shows us the feature type and the main pane shows the feature's attributes, such as its name and address. **Close the feature editor by pressing the {button} button in the top right.**","search":"You can also search for features in the current view, or worldwide. **Search for '{name}'**","choose":"**Choose {name} from the list to select it.**","chosen":"Great! {name} is now selected. **Close the feature editor by pressing the {button} button.**"},"points":{"title":"Points","add":"Points can be used to represent features such as shops, restaurants, and monuments. They mark a specific location, and describe what's there. **Click the {button} Point button to add a new point.**","place":"The point can be placed by clicking on the map. **Click the map to place the new point on top of the building.**","search":"There are many different features that can be represented by points. The point you just added is a Cafe. **Search for '{name}'**","choose":"**Choose Cafe from the list.**","describe":"The point is now marked as a cafe. Using the feature editor, we can add more information about the feature. **Add a name**","close":"The feature editor will remember all of your changes automatically. When you change a feature, the close button will change to a checkmark. **Click the {button} button to close the feature editor**","reselect":"Often points will already exist, but have mistakes or be incomplete. We can edit existing points. **Click to select the point you just created.**","fixname":"**Change the name, then click the {button} button to close the feature editor.**","reselect_delete":"All features on the map can be deleted. **Click to select the point you created.**","delete":"The menu around the point contains operations that can be performed on it, including delete. **Click on the {button} button to delete the point.**"},"areas":{"title":"Areas","add":"Areas are used to show the boundaries of features like lakes, buildings, and residential areas. They can be also be used for more detailed mapping of many features you might normally map as points. **Click the {button} Area button to add a new area.**","corner":"Areas are drawn by placing nodes that mark the boundary of the area. **Click to place a starting node on one of the corners of the playground.**","place":"Draw the area by placing more nodes. Finish the area by clicking on the starting node. **Draw an area for the playground.**","search":"**Search for '{name}'.**","choose":"**Choose Playground from the list.**","describe":"**Add a name, then click the {button} button to close the feature editor**"},"lines":{"title":"Lines","add":"Lines are used to represent features such as roads, railroads, and rivers. **Click the {button} Line button to add a new line.**","start":"**Start the line by clicking on the end of the road.**","intersect":"Click to add more nodes to the line. You can drag the map while drawing if necessary. Roads, and many other types of lines, are part of a larger network. It is important for these lines to be connected properly in order for routing applications to work. **Click on {name} to create an intersection connecting the two lines.**","finish":"Lines can be finished by clicking on the last node again. **Finish drawing the road.**","road":"**Select Road from the list**","residential":"There are different types of roads, the most common of which is Residential. **Choose the Residential road type**","describe":"**Name the road, then click the {button} button to close the feature editor.**","restart":"The road needs to intersect {name}.","wrong_preset":"You didn't select the Residential road type. **Click here to choose again**"},"startediting":{"title":"Start Editing","help":"You can replay this walkthrough or view more documentation by clicking the {button} Help button.","save":"Don't forget to regularly save your changes!","start":"Start mapping!"}},"presets":{"categories":{"category-building":{"name":"Building Features"},"category-golf":{"name":"Golf Features"},"category-landuse":{"name":"Land Use Features"},"category-path":{"name":"Path Features"},"category-rail":{"name":"Rail Features"},"category-restriction":{"name":"Restriction Features"},"category-road":{"name":"Road Features"},"category-route":{"name":"Route Features"},"category-water-area":{"name":"Water Features"},"category-water-line":{"name":"Water Features"}},"fields":{"access":{"label":"Allowed Access","placeholder":"Not Specified","types":{"access":"All","foot":"Foot","motor_vehicle":"Motor Vehicles","bicycle":"Bicycles","horse":"Horses"},"options":{"yes":{"title":"Allowed","description":"Access permitted by law; a right of way"},"no":{"title":"Prohibited","description":"Access not permitted to the general public"},"permissive":{"title":"Permissive","description":"Access permitted until such time as the owner revokes the permission"},"private":{"title":"Private","description":"Access permitted only with permission of the owner on an individual basis"},"designated":{"title":"Designated","description":"Access permitted according to signs or specific local laws"},"destination":{"title":"Destination","description":"Access permitted only to reach a destination"},"dismount":{"title":"Dismount","description":"Access permitted but rider must dismount"}}},"access_simple":{"label":"Allowed Access","placeholder":"yes"},"access_toilets":{"label":"Access"},"address":{"label":"Address","placeholders":{"housename":"Housename","housenumber":"123","conscriptionnumber":"123","street":"Street","city":"City","postcode":"Postcode","place":"Place","hamlet":"Hamlet","suburb":"Suburb","subdistrict":"Subdistrict","district":"District","province":"Province","state":"State","country":"Country"}},"admin_level":{"label":"Admin Level"},"aerialway":{"label":"Type"},"aerialway/access":{"label":"Access","options":{"entry":"Entry","exit":"Exit","both":"Both"}},"aerialway/bubble":{"label":"Bubble"},"aerialway/capacity":{"label":"Capacity (per hour)","placeholder":"500, 2500, 5000..."},"aerialway/duration":{"label":"Duration (minutes)","placeholder":"1, 2, 3..."},"aerialway/heating":{"label":"Heated"},"aerialway/occupancy":{"label":"Occupancy","placeholder":"2, 4, 8..."},"aerialway/summer/access":{"label":"Access (summer)","options":{"entry":"Entry","exit":"Exit","both":"Both"}},"aeroway":{"label":"Type"},"amenity":{"label":"Type"},"area/highway":{"label":"Type"},"artist":{"label":"Artist"},"artwork_type":{"label":"Type"},"atm":{"label":"ATM"},"backrest":{"label":"Backrest"},"barrier":{"label":"Type"},"bench":{"label":"Bench"},"bicycle_parking":{"label":"Type"},"boundary":{"label":"Type"},"brand":{"label":"Brand"},"building":{"label":"Building"},"building_area":{"label":"Building"},"capacity":{"label":"Capacity","placeholder":"50, 100, 200..."},"cardinal_direction":{"label":"Direction","options":{"N":"North","E":"East","S":"South","W":"West","NE":"Northeast","SE":"Southeast","SW":"Southwest","NW":"Northwest","NNE":"North-northeast","ENE":"East-northeast","ESE":"East-southeast","SSE":"South-southeast","SSW":"South-southwest","WSW":"West-southwest","WNW":"West-northwest","NNW":"North-northwest"}},"clock_direction":{"label":"Direction","options":{"clockwise":"Clockwise","anticlockwise":"Counterclockwise"}},"collection_times":{"label":"Collection Times"},"construction":{"label":"Type"},"content":{"label":"Contents"},"country":{"label":"Country"},"covered":{"label":"Covered"},"craft":{"label":"Type"},"crop":{"label":"Crop"},"crossing":{"label":"Type"},"cuisine":{"label":"Cuisine"},"cycleway":{"label":"Bike Lanes","placeholder":"none","types":{"cycleway:left":"Left side","cycleway:right":"Right side"},"options":{"none":{"title":"None","description":"No bike lane"},"lane":{"title":"Standard bike lane","description":"A bike lane separated from auto traffic by a painted line"},"shared_lane":{"title":"Shared bike lane","description":"A bike lane with no separation from auto traffic"},"track":{"title":"Bike track","description":"A bike lane separated from traffic by a physical barrier"},"share_busway":{"title":"Bike lane shared with bus","description":"A bike lane shared with a bus lane"},"opposite_lane":{"title":"Opposite bike lane","description":"A bike lane that travels in the opposite direction of traffic"},"opposite":{"title":"Contraflow bike lane","description":"A bike lane that travels in both directions on a one-way street"}}},"delivery":{"label":"Delivery"},"denomination":{"label":"Denomination"},"denotation":{"label":"Denotation"},"description":{"label":"Description"},"diaper":{"label":"Diaper Changing Available"},"dock":{"label":"Type"},"drive_through":{"label":"Drive-Through"},"electrified":{"label":"Electrification","placeholder":"Contact Line, Electrified Rail...","options":{"contact_line":"Contact Line","rail":"Electrified Rail","yes":"Yes (unspecified)","no":"No"}},"elevation":{"label":"Elevation"},"emergency":{"label":"Emergency"},"entrance":{"label":"Type"},"except":{"label":"Exceptions"},"fax":{"label":"Fax","placeholder":"+31 42 123 4567"},"fee":{"label":"Fee"},"fire_hydrant/type":{"label":"Type","options":{"pillar":"Pillar/Aboveground","underground":"Underground","wall":"Wall","pond":"Pond"}},"fixme":{"label":"Fix Me"},"fuel":{"label":"Fuel"},"fuel/biodiesel":{"label":"Sells Biodiesel"},"fuel/diesel":{"label":"Sells Diesel"},"fuel/e10":{"label":"Sells E10"},"fuel/e85":{"label":"Sells E85"},"fuel/lpg":{"label":"Sells Propane"},"fuel/octane_100":{"label":"Sells Racing Gasoline"},"fuel/octane_91":{"label":"Sells Regular Gasoline"},"fuel/octane_95":{"label":"Sells Midgrade Gasoline"},"fuel/octane_98":{"label":"Sells Premium Gasoline"},"gauge":{"label":"Gauge"},"gender":{"label":"Gender","placeholder":"Unknown","options":{"male":"Male","female":"Female","unisex":"Unisex"}},"generator/method":{"label":"Method"},"generator/source":{"label":"Source"},"generator/type":{"label":"Type"},"golf_hole":{"label":"Reference","placeholder":"Hole number (1-18)"},"handicap":{"label":"Handicap","placeholder":"1-18"},"handrail":{"label":"Handrail"},"highway":{"label":"Type"},"historic":{"label":"Type"},"hoops":{"label":"Hoops","placeholder":"1, 2, 4..."},"iata":{"label":"IATA"},"icao":{"label":"ICAO"},"incline":{"label":"Incline"},"incline_steps":{"label":"Incline","options":{"up":"Up","down":"Down"}},"information":{"label":"Type"},"internet_access":{"label":"Internet Access","options":{"yes":"Yes","no":"No","wlan":"Wifi","wired":"Wired","terminal":"Terminal"}},"lamp_type":{"label":"Type"},"landuse":{"label":"Type"},"lanes":{"label":"Lanes","placeholder":"1, 2, 3..."},"layer":{"label":"Layer"},"leaf_cycle":{"label":"Leaf Cycle","options":{"evergreen":"Evergreen","deciduous":"Deciduous","semi_evergreen":"Semi-Evergreen","semi_deciduous":"Semi-Deciduous","mixed":"Mixed"}},"leaf_cycle_singular":{"label":"Leaf Cycle","options":{"evergreen":"Evergreen","deciduous":"Deciduous","semi_evergreen":"Semi-Evergreen","semi_deciduous":"Semi-Deciduous"}},"leaf_type":{"label":"Leaf Type","options":{"broadleaved":"Broadleaved","needleleaved":"Needleleaved","mixed":"Mixed","leafless":"Leafless"}},"leaf_type_singular":{"label":"Leaf Type","options":{"broadleaved":"Broadleaved","needleleaved":"Needleleaved","leafless":"Leafless"}},"leisure":{"label":"Type"},"length":{"label":"Length (Meters)"},"level":{"label":"Level"},"levels":{"label":"Levels","placeholder":"2, 4, 6..."},"lit":{"label":"Lit"},"location":{"label":"Location"},"man_made":{"label":"Type"},"maxspeed":{"label":"Speed Limit","placeholder":"40, 50, 60..."},"maxstay":{"label":"Max Stay"},"mtb/scale":{"label":"Mountain Biking Difficulty","placeholder":"0, 1, 2, 3...","options":{"0":"0: Solid gravel/packed earth, no obstacles, wide curves","1":"1: Some loose surface, small obstacles, wide curves","2":"2: Much loose surface, large obstacles, easy hairpins","3":"3: Slippery surface, large obstacles, tight hairpins","4":"4: Loose surface or boulders, dangerous hairpins","5":"5: Maximum difficulty, boulder fields, landslides","6":"6: Not rideable except by the very best mountain bikers"}},"mtb/scale/imba":{"label":"IMBA Trail Difficulty","placeholder":"Easy, Medium, Difficult...","options":{"0":"Easiest (white circle)","1":"Easy (green circle)","2":"Medium (blue square)","3":"Difficult (black diamond)","4":"Extremely Difficult (double black diamond)"}},"mtb/scale/uphill":{"label":"Mountain Biking Uphill Difficulty","placeholder":"0, 1, 2, 3...","options":{"0":"0: Avg. incline <10%, gravel/packed earth, no obstacles","1":"1: Avg. incline <15%, gravel/packed earth, few small objects","2":"2: Avg. incline <20%, stable surface, fistsize rocks/roots","3":"3: Avg. incline <25%, variable surface, fistsize rocks/branches","4":"4: Avg. incline <30%, poor condition, big rocks/branches","5":"5: Very steep, bike generally needs to be pushed or carried"}},"name":{"label":"Name","placeholder":"Common name (if any)"},"natural":{"label":"Natural"},"network":{"label":"Network"},"note":{"label":"Note"},"office":{"label":"Type"},"oneway":{"label":"One Way","options":{"undefined":"Assumed to be No","yes":"Yes","no":"No"}},"oneway_yes":{"label":"One Way","options":{"undefined":"Assumed to be Yes","yes":"Yes","no":"No"}},"opening_hours":{"label":"Hours"},"operator":{"label":"Operator"},"par":{"label":"Par","placeholder":"3, 4, 5..."},"park_ride":{"label":"Park and Ride"},"parking":{"label":"Type","options":{"surface":"Surface","multi-storey":"Multilevel","underground":"Underground","sheds":"Sheds","carports":"Carports","garage_boxes":"Garage Boxes","lane":"Roadside Lane"}},"phone":{"label":"Phone","placeholder":"+31 42 123 4567"},"piste/difficulty":{"label":"Difficulty","placeholder":"Easy, Intermediate, Advanced...","options":{"novice":"Novice (instructional)","easy":"Easy (green circle)","intermediate":"Intermediate (blue square)","advanced":"Advanced (black diamond)","expert":"Expert (double black diamond)","freeride":"Freeride (off-piste)","extreme":"Extreme (climbing equipment required)"}},"piste/grooming":{"label":"Grooming","options":{"classic":"Classic","mogul":"Mogul","backcountry":"Backcountry","classic+skating":"Classic and Skating","scooter":"Scooter/Snowmobile","skating":"Skating"}},"piste/type":{"label":"Type","options":{"downhill":"Downhill","nordic":"Nordic","skitour":"Skitour","sled":"Sled","hike":"Hike","sleigh":"Sleigh","ice_skate":"Ice Skate","snow_park":"Snow Park","playground":"Playground"}},"place":{"label":"Type"},"population":{"label":"Population"},"power":{"label":"Type"},"power_supply":{"label":"Power Supply"},"railway":{"label":"Type"},"recycling/cans":{"label":"Accepts Cans"},"recycling/clothes":{"label":"Accepts Clothes"},"recycling/glass":{"label":"Accepts Glass"},"recycling/glass_bottles":{"label":"Accepts Glass Bottles"},"recycling/paper":{"label":"Accepts Paper"},"recycling/plastic":{"label":"Accepts Plastic"},"recycling/type":{"label":"Recycling Type","options":{"container":"Container","centre":"Recycling Center"}},"ref":{"label":"Reference"},"relation":{"label":"Type"},"religion":{"label":"Religion"},"restriction":{"label":"Type"},"restrictions":{"label":"Turn Restrictions"},"route":{"label":"Type"},"route_master":{"label":"Type"},"sac_scale":{"label":"Hiking Difficulty","placeholder":"Mountain Hiking, Alpine Hiking...","options":{"hiking":"T1: Hiking","mountain_hiking":"T2: Mountain Hiking","demanding_mountain_hiking":"T3: Demanding Mountain Hiking","alpine_hiking":"T4: Alpine Hiking","demanding_alpine_hiking":"T5: Demanding Alpine Hiking","difficult_alpine_hiking":"T6: Difficult Alpine Hiking"}},"sanitary_dump_station":{"label":"Toilet Disposal"},"seasonal":{"label":"Seasonal"},"service":{"label":"Type"},"service/bicycle/chain_tool":{"label":"Chain Tool","options":{"undefined":"Assumed to be No","yes":"Yes","no":"No"}},"service/bicycle/pump":{"label":"Air Pump","options":{"undefined":"Assumed to be No","yes":"Yes","no":"No"}},"service_rail":{"label":"Service Type","options":{"spur":"Spur","yard":"Yard","siding":"Siding","crossover":"Crossover"}},"shelter":{"label":"Shelter"},"shelter_type":{"label":"Type"},"shop":{"label":"Type"},"site":{"label":"Type"},"sloped_curb":{"label":"Sloped Curb"},"smoking":{"label":"Smoking","placeholder":"No, Separated, Yes...","options":{"no":"No smoking anywhere","separated":"In smoking areas, not physically isolated","isolated":"In smoking areas, physically isolated","outside":"Allowed outside","yes":"Allowed everywhere","dedicated":"Dedicated to smokers (e.g. smokers' club)"}},"smoothness":{"label":"Smoothness","placeholder":"Thin Rollers, Wheels, Off-Road...","options":{"excellent":"Thin Rollers: rollerblade, skateboard","good":"Thin Wheels: racing bike","intermediate":"Wheels: city bike, wheelchair, scooter","bad":"Robust Wheels: trekking bike, car, rickshaw","very_bad":"High Clearance: light duty off-road vehicle","horrible":"Off-Road: heavy duty off-road vehicle","very_horrible":"Specialized off-road: tractor, ATV","impassable":"Impassable / No wheeled vehicle"}},"social_facility_for":{"label":"People served","placeholder":"Homeless, Disabled, Child, etc"},"source":{"label":"Source"},"sport":{"label":"Sport"},"sport_ice":{"label":"Sport"},"sport_racing":{"label":"Sport"},"structure":{"label":"Structure","placeholder":"Unknown","options":{"bridge":"Bridge","tunnel":"Tunnel","embankment":"Embankment","cutting":"Cutting","ford":"Ford"}},"studio_type":{"label":"Type"},"substation":{"label":"Type"},"supervised":{"label":"Supervised"},"surface":{"label":"Surface"},"tactile_paving":{"label":"Tactile Paving"},"takeaway":{"label":"Takeaway","placeholder":"Yes, No, Takeaway Only...","options":{"yes":"Yes","no":"No","only":"Takeaway Only"}},"toilets/disposal":{"label":"Disposal","options":{"flush":"Flush","pitlatrine":"Pit/Latrine","chemical":"Chemical","bucket":"Bucket"}},"tourism":{"label":"Type"},"towertype":{"label":"Tower type"},"tracktype":{"label":"Track Type","placeholder":"Solid, Mostly Solid, Soft...","options":{"grade1":"Solid: paved or heavily compacted hardcore surface","grade2":"Mostly Solid: gravel/rock with some soft material mixed in","grade3":"Even mixture of hard and soft materials","grade4":"Mostly Soft: soil/sand/grass with some hard material mixed in","grade5":"Soft: soil/sand/grass"}},"traffic_signals":{"label":"Type"},"trail_visibility":{"label":"Trail Visibility","placeholder":"Excellent, Good, Bad...","options":{"excellent":"Excellent: unambiguous path or markers everywhere","good":"Good: markers visible, sometimes require searching","intermediate":"Intermediate: few markers, path mostly visible","bad":"Bad: no markers, path sometimes invisible/pathless","horrible":"Horrible: often pathless, some orientation skills required","no":"No: pathless, excellent orientation skills required"}},"trees":{"label":"Trees"},"tunnel":{"label":"Tunnel"},"vending":{"label":"Type of Goods"},"water":{"label":"Type"},"water_point":{"label":"Water Point"},"waterway":{"label":"Type"},"website":{"label":"Website","placeholder":"http://example.com/"},"wetland":{"label":"Type"},"wheelchair":{"label":"Wheelchair Access"},"width":{"label":"Width (Meters)"},"wikipedia":{"label":"Wikipedia"}},"presets":{"address":{"name":"Address","terms":""},"aerialway":{"name":"Aerialway","terms":"ski lift,funifor,funitel"},"aerialway/cable_car":{"name":"Cable Car","terms":"tramway,ropeway"},"aerialway/chair_lift":{"name":"Chair Lift","terms":""},"aerialway/gondola":{"name":"Gondola","terms":""},"aerialway/magic_carpet":{"name":"Magic Carpet Lift","terms":""},"aerialway/platter":{"name":"Platter Lift","terms":"button lift,poma lift"},"aerialway/pylon":{"name":"Aerialway Pylon","terms":""},"aerialway/rope_tow":{"name":"Rope Tow Lift","terms":"handle tow,bugel lift"},"aerialway/station":{"name":"Aerialway Station","terms":""},"aerialway/t-bar":{"name":"T-bar Lift","terms":""},"aeroway":{"name":"Aeroway","terms":""},"aeroway/aerodrome":{"name":"Airport","terms":"airplane,airport,aerodrome"},"aeroway/apron":{"name":"Apron","terms":"ramp"},"aeroway/gate":{"name":"Airport gate","terms":""},"aeroway/hangar":{"name":"Hangar","terms":""},"aeroway/helipad":{"name":"Helipad","terms":"helicopter,helipad,heliport"},"aeroway/runway":{"name":"Runway","terms":"landing strip"},"aeroway/taxiway":{"name":"Taxiway","terms":""},"aeroway/terminal":{"name":"Airport terminal","terms":"airport,aerodrome"},"amenity":{"name":"Amenity","terms":""},"amenity/arts_centre":{"name":"Arts Center","terms":""},"amenity/atm":{"name":"ATM","terms":"money,cash,machine"},"amenity/bank":{"name":"Bank","terms":"credit union,check,deposit,fund,investment,repository,reserve,safe,savings,stock,treasury,trust,vault"},"amenity/bar":{"name":"Bar","terms":"dive,beer,bier,booze"},"amenity/bbq":{"name":"Barbecue/Grill","terms":"bbq"},"amenity/bench":{"name":"Bench","terms":"seat"},"amenity/bicycle_parking":{"name":"Bicycle Parking","terms":"bike"},"amenity/bicycle_rental":{"name":"Bicycle Rental","terms":"bike"},"amenity/bicycle_repair_station":{"name":"Bicycle Repair Tool Stand","terms":"bike,repair,chain,pump"},"amenity/biergarten":{"name":"Beer Garden","terms":"beer,bier,booze"},"amenity/boat_rental":{"name":"Boat Rental","terms":""},"amenity/bureau_de_change":{"name":"Currency Exchange","terms":"bureau de change,money changer"},"amenity/bus_station":{"name":"Bus Station","terms":""},"amenity/cafe":{"name":"Cafe","terms":"bistro,coffee,tea"},"amenity/car_rental":{"name":"Car Rental","terms":""},"amenity/car_sharing":{"name":"Car Sharing","terms":""},"amenity/car_wash":{"name":"Car Wash","terms":""},"amenity/casino":{"name":"Casino","terms":"gambling,roulette,craps,poker,blackjack"},"amenity/charging_station":{"name":"Charging Station","terms":"EV,Electric Vehicle,Supercharger"},"amenity/childcare":{"name":"Nursery/Childcare","terms":"daycare,orphanage,playgroup"},"amenity/cinema":{"name":"Cinema","terms":"drive-in,film,flick,movie,theater,picture,show,screen"},"amenity/clinic":{"name":"Clinic","terms":"medical,urgentcare"},"amenity/clock":{"name":"Clock","terms":""},"amenity/college":{"name":"College Grounds","terms":"university"},"amenity/community_centre":{"name":"Community Center","terms":"event,hall"},"amenity/compressed_air":{"name":"Compressed Air","terms":""},"amenity/courthouse":{"name":"Courthouse","terms":""},"amenity/dentist":{"name":"Dentist","terms":"tooth,teeth"},"amenity/doctors":{"name":"Doctor","terms":"medic*"},"amenity/dojo":{"name":"Dojo / Martial Arts Academy","terms":"martial arts,dojang"},"amenity/drinking_water":{"name":"Drinking Water","terms":"fountain,potable"},"amenity/embassy":{"name":"Embassy","terms":""},"amenity/fast_food":{"name":"Fast Food","terms":"restaurant"},"amenity/ferry_terminal":{"name":"Ferry Terminal","terms":""},"amenity/fire_station":{"name":"Fire Station","terms":""},"amenity/fountain":{"name":"Fountain","terms":""},"amenity/fuel":{"name":"Gas Station","terms":"petrol,fuel,gasoline,propane,diesel,lng,cng,biodiesel"},"amenity/grave_yard":{"name":"Graveyard","terms":""},"amenity/grit_bin":{"name":"Grit Bin","terms":"salt,sand"},"amenity/hospital":{"name":"Hospital Grounds","terms":"clinic,doctor,emergency room,health service,hospice,infirmary,institution,nursing home,sanatorium,sanitarium,sick,surgery,ward"},"amenity/hunting_stand":{"name":"Hunting Stand","terms":""},"amenity/kindergarten":{"name":"Preschool/Kindergarten Grounds","terms":"kindergarden,pre-school"},"amenity/library":{"name":"Library","terms":"book"},"amenity/marketplace":{"name":"Marketplace","terms":""},"amenity/motorcycle_parking":{"name":"Motorcycle Parking","terms":""},"amenity/nightclub":{"name":"Nightclub","terms":"disco*,night club,dancing,dance club"},"amenity/parking":{"name":"Car Parking","terms":""},"amenity/parking_entrance":{"name":"Parking Garage Entrance/Exit","terms":""},"amenity/parking_space":{"name":"Parking Space","terms":""},"amenity/pharmacy":{"name":"Pharmacy","terms":"drug,medicine"},"amenity/place_of_worship":{"name":"Place of Worship","terms":"abbey,basilica,bethel,cathedral,chancel,chantry,chapel,church,fold,house of God,house of prayer,house of worship,minster,mission,mosque,oratory,parish,sacellum,sanctuary,shrine,synagogue,tabernacle,temple"},"amenity/place_of_worship/buddhist":{"name":"Buddhist Temple","terms":"stupa,vihara,monastery,temple,pagoda,zendo,dojo"},"amenity/place_of_worship/christian":{"name":"Church","terms":"christian,abbey,basilica,bethel,cathedral,chancel,chantry,chapel,fold,house of God,house of prayer,house of worship,minster,mission,oratory,parish,sacellum,sanctuary,shrine,tabernacle,temple"},"amenity/place_of_worship/jewish":{"name":"Synagogue","terms":"jewish"},"amenity/place_of_worship/muslim":{"name":"Mosque","terms":"muslim"},"amenity/police":{"name":"Police","terms":"badge,constable,constabulary,cop,detective,fed,law,enforcement,officer,patrol"},"amenity/post_box":{"name":"Mailbox","terms":"letter,post"},"amenity/post_office":{"name":"Post Office","terms":"letter,mail"},"amenity/pub":{"name":"Pub","terms":"dive,beer,bier,booze"},"amenity/public_bookcase":{"name":"Public Bookcase","terms":"library,bookcrossing"},"amenity/ranger_station":{"name":"Ranger Station","terms":"visitor center,visitor centre,permit center,permit centre,backcountry office,warden office,warden center"},"amenity/recycling":{"name":"Recycling","terms":"can,bottle,garbage,scrap,trash"},"amenity/register_office":{"name":"Register Office","terms":""},"amenity/restaurant":{"name":"Restaurant","terms":"bar,breakfast,cafe,café,canteen,coffee,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/sanitary_dump_station":{"name":"RV Toilet Disposal","terms":"Motor Home,Camper,Sanitary,Dump Station,Elsan,CDP,CTDP,Chemical Toilet"},"amenity/school":{"name":"School Grounds","terms":"academy,elementary school,middle school,high school"},"amenity/shelter":{"name":"Shelter","terms":"lean-to,gazebo,picnic"},"amenity/social_facility":{"name":"Social Facility","terms":""},"amenity/social_facility/food_bank":{"name":"Food Bank","terms":""},"amenity/social_facility/group_home":{"name":"Elderly Group Home","terms":"old,senior,living"},"amenity/social_facility/homeless_shelter":{"name":"Homeless Shelter","terms":"houseless,unhoused,displaced"},"amenity/studio":{"name":"Studio","terms":"recording,radio,television"},"amenity/swimming_pool":{"name":"Swimming Pool","terms":""},"amenity/taxi":{"name":"Taxi Stand","terms":"cab"},"amenity/telephone":{"name":"Telephone","terms":"phone"},"amenity/theatre":{"name":"Theater","terms":"theatre,performance,play,musical"},"amenity/toilets":{"name":"Toilets","terms":"bathroom,restroom,outhouse,privy,head,lavatory,latrine,water closet,WC,W.C."},"amenity/townhall":{"name":"Town Hall","terms":"village,city,government,courthouse,municipal"},"amenity/university":{"name":"University Grounds","terms":"college"},"amenity/vending_machine/cigarettes":{"name":"Cigarette Vending Machine","terms":"cigarette"},"amenity/vending_machine/condoms":{"name":"Condom Vending Machine","terms":"condom"},"amenity/vending_machine/drinks":{"name":"Drink Vending Machine","terms":"drink,soda,beverage,juice,pop"},"amenity/vending_machine/excrement_bags":{"name":"Excrement Bag Vending Machine","terms":"excrement bags,poop,dog,animal"},"amenity/vending_machine/news_papers":{"name":"Newspaper Vending Machine","terms":"newspaper"},"amenity/vending_machine/parcel_pickup_dropoff":{"name":"Parcel Pickup/Dropoff Vending Machine","terms":"parcel,mail,pickup"},"amenity/vending_machine/parking_tickets":{"name":"Parking Ticket Vending Machine","terms":"parking,ticket"},"amenity/vending_machine/public_transport_tickets":{"name":"Transit Ticket Vending Machine","terms":"bus,train,ferry,rail,ticket,transportation"},"amenity/vending_machine/sweets":{"name":"Snack Vending Machine","terms":"candy,gum,chip,pretzel,cookie,cracker"},"amenity/vending_machine/vending_machine":{"name":"Vending Machine","terms":""},"amenity/veterinary":{"name":"Veterinary","terms":"pet clinic,veterinarian,animal hospital,pet doctor"},"amenity/waste_basket":{"name":"Waste Basket","terms":"bin,rubbish,litter,trash,garbage"},"amenity/waste_disposal":{"name":"Garbage Dumpster","terms":"rubbish,litter,trash"},"amenity/water_point":{"name":"RV Drinking Water","terms":""},"area":{"name":"Area","terms":""},"area/highway":{"name":"Road Surface","terms":""},"barrier":{"name":"Barrier","terms":""},"barrier/block":{"name":"Block","terms":""},"barrier/bollard":{"name":"Bollard","terms":""},"barrier/cattle_grid":{"name":"Cattle Grid","terms":""},"barrier/city_wall":{"name":"City Wall","terms":""},"barrier/cycle_barrier":{"name":"Cycle Barrier","terms":""},"barrier/ditch":{"name":"Ditch","terms":""},"barrier/entrance":{"name":"Entrance","terms":""},"barrier/fence":{"name":"Fence","terms":""},"barrier/gate":{"name":"Gate","terms":""},"barrier/hedge":{"name":"Hedge","terms":""},"barrier/kissing_gate":{"name":"Kissing Gate","terms":""},"barrier/lift_gate":{"name":"Lift Gate","terms":""},"barrier/retaining_wall":{"name":"Retaining Wall","terms":""},"barrier/stile":{"name":"Stile","terms":""},"barrier/toll_booth":{"name":"Toll Booth","terms":""},"barrier/wall":{"name":"Wall","terms":""},"boundary/administrative":{"name":"Administrative Boundary","terms":""},"building":{"name":"Building","terms":""},"building/apartments":{"name":"Apartments","terms":""},"building/barn":{"name":"Barn","terms":""},"building/bunker":{"name":"Bunker","terms":""},"building/cabin":{"name":"Cabin","terms":""},"building/cathedral":{"name":"Cathedral Building","terms":""},"building/chapel":{"name":"Chapel Building","terms":""},"building/church":{"name":"Church Building","terms":""},"building/college":{"name":"College Building","terms":"university"},"building/commercial":{"name":"Commercial Building","terms":""},"building/construction":{"name":"Building Under Construction","terms":""},"building/detached":{"name":"Detached House","terms":"home,single,family,residence,dwelling"},"building/dormitory":{"name":"Dormitory","terms":""},"building/entrance":{"name":"Entrance/Exit","terms":""},"building/garage":{"name":"Garage","terms":""},"building/garages":{"name":"Garages","terms":""},"building/greenhouse":{"name":"Greenhouse","terms":""},"building/hospital":{"name":"Hospital Building","terms":""},"building/hotel":{"name":"Hotel Building","terms":""},"building/house":{"name":"House","terms":"home,family,residence,dwelling"},"building/hut":{"name":"Hut","terms":""},"building/industrial":{"name":"Industrial Building","terms":""},"building/kindergarten":{"name":"Preschool/Kindergarten Building","terms":"kindergarden,pre-school"},"building/public":{"name":"Public Building","terms":""},"building/residential":{"name":"Residential Building","terms":""},"building/retail":{"name":"Retail Building","terms":""},"building/roof":{"name":"Roof","terms":""},"building/school":{"name":"School Building","terms":"academy,elementary school,middle school,high school"},"building/semidetached_house":{"name":"Semi-Detached House","terms":"home,double,duplex,twin,family,residence,dwelling"},"building/shed":{"name":"Shed","terms":""},"building/stable":{"name":"Stable","terms":""},"building/static_caravan":{"name":"Static Mobile Home","terms":""},"building/terrace":{"name":"Row Houses","terms":"home,terrace,brownstone,family,residence,dwelling"},"building/train_station":{"name":"Train Station","terms":""},"building/university":{"name":"University Building","terms":"college"},"building/warehouse":{"name":"Warehouse","terms":""},"craft":{"name":"Craft","terms":""},"craft/basket_maker":{"name":"Basket Maker","terms":""},"craft/beekeeper":{"name":"Beekeeper","terms":""},"craft/blacksmith":{"name":"Blacksmith","terms":""},"craft/boatbuilder":{"name":"Boat Builder","terms":""},"craft/bookbinder":{"name":"Bookbinder","terms":"book repair"},"craft/brewery":{"name":"Brewery","terms":"beer,bier"},"craft/carpenter":{"name":"Carpenter","terms":"woodworker"},"craft/carpet_layer":{"name":"Carpet Layer","terms":""},"craft/caterer":{"name":"Caterer","terms":""},"craft/clockmaker":{"name":"Clockmaker","terms":""},"craft/confectionery":{"name":"Confectionery","terms":"sweets,candy"},"craft/dressmaker":{"name":"Dressmaker","terms":"seamstress"},"craft/electrician":{"name":"Electrician","terms":"power,wire"},"craft/gardener":{"name":"Gardener","terms":"landscaper,grounds keeper"},"craft/glaziery":{"name":"Glaziery","terms":"glass,stained-glass,window"},"craft/handicraft":{"name":"Handicraft","terms":""},"craft/hvac":{"name":"HVAC","terms":"heat*,vent*,air conditioning"},"craft/insulator":{"name":"Insulator","terms":""},"craft/jeweler":{"name":"Jeweler","terms":""},"craft/key_cutter":{"name":"Key Cutter","terms":""},"craft/locksmith":{"name":"Locksmith","terms":""},"craft/metal_construction":{"name":"Metal Construction","terms":""},"craft/optician":{"name":"Optician","terms":""},"craft/painter":{"name":"Painter","terms":""},"craft/photographer":{"name":"Photographer","terms":""},"craft/photographic_laboratory":{"name":"Photographic Laboratory","terms":"film"},"craft/plasterer":{"name":"Plasterer","terms":""},"craft/plumber":{"name":"Plumber","terms":"pipe"},"craft/pottery":{"name":"Pottery","terms":"ceramic"},"craft/rigger":{"name":"Rigger","terms":""},"craft/roofer":{"name":"Roofer","terms":""},"craft/saddler":{"name":"Saddler","terms":""},"craft/sailmaker":{"name":"Sailmaker","terms":""},"craft/sawmill":{"name":"Sawmill","terms":"lumber"},"craft/scaffolder":{"name":"Scaffolder","terms":""},"craft/sculpter":{"name":"Sculpter","terms":""},"craft/shoemaker":{"name":"Shoemaker","terms":"cobbler"},"craft/stonemason":{"name":"Stonemason","terms":"masonry"},"craft/sweep":{"name":"Chimney Sweep","terms":""},"craft/tailor":{"name":"Tailor","terms":"clothes,suit"},"craft/tiler":{"name":"Tiler","terms":""},"craft/tinsmith":{"name":"Tinsmith","terms":""},"craft/upholsterer":{"name":"Upholsterer","terms":""},"craft/watchmaker":{"name":"Watchmaker","terms":""},"craft/window_construction":{"name":"Window Construction","terms":"glass"},"craft/winery":{"name":"Winery","terms":""},"embankment":{"name":"Embankment","terms":""},"emergency/ambulance_station":{"name":"Ambulance Station","terms":"EMS,EMT,rescue"},"emergency/fire_hydrant":{"name":"Fire Hydrant","terms":""},"emergency/phone":{"name":"Emergency Phone","terms":""},"entrance":{"name":"Entrance/Exit","terms":""},"footway/crossing":{"name":"Street Crossing","terms":""},"footway/crosswalk":{"name":"Pedestrian Crosswalk","terms":"zebra crossing"},"footway/sidewalk":{"name":"Sidewalk","terms":""},"ford":{"name":"Ford","terms":""},"golf/bunker":{"name":"Sand Trap","terms":"hazard,bunker"},"golf/fairway":{"name":"Fairway","terms":""},"golf/green":{"name":"Putting Green","terms":""},"golf/hole":{"name":"Golf Hole","terms":""},"golf/lateral_water_hazard":{"name":"Lateral Water Hazard","terms":""},"golf/rough":{"name":"Rough","terms":""},"golf/tee":{"name":"Tee Box","terms":"teeing ground"},"golf/water_hazard":{"name":"Water Hazard","terms":""},"highway":{"name":"Highway","terms":""},"highway/bridleway":{"name":"Bridle Path","terms":"bridleway,equestrian,horse"},"highway/bus_stop":{"name":"Bus Stop","terms":""},"highway/corridor":{"name":"Indoor Corridor","terms":"gallery,hall,hallway,indoor,passage,passageway"},"highway/crossing":{"name":"Street Crossing","terms":""},"highway/crosswalk":{"name":"Pedestrian Crosswalk","terms":"zebra crossing"},"highway/cycleway":{"name":"Cycle Path","terms":"bike"},"highway/footway":{"name":"Foot Path","terms":"hike,hiking,trackway,trail,walk"},"highway/living_street":{"name":"Living Street","terms":""},"highway/mini_roundabout":{"name":"Mini-Roundabout","terms":""},"highway/motorway":{"name":"Motorway","terms":""},"highway/motorway_junction":{"name":"Motorway Junction / Exit","terms":""},"highway/motorway_link":{"name":"Motorway Link","terms":"ramp,on ramp,off ramp"},"highway/path":{"name":"Path","terms":"hike,hiking,trackway,trail,walk"},"highway/pedestrian":{"name":"Pedestrian Street","terms":""},"highway/primary":{"name":"Primary Road","terms":""},"highway/primary_link":{"name":"Primary Link","terms":"ramp,on ramp,off ramp"},"highway/raceway":{"name":"Motor Raceway","terms":"auto*,race*,nascar"},"highway/residential":{"name":"Residential Road","terms":""},"highway/rest_area":{"name":"Rest Area","terms":"rest stop"},"highway/road":{"name":"Unknown Road","terms":""},"highway/secondary":{"name":"Secondary Road","terms":""},"highway/secondary_link":{"name":"Secondary Link","terms":"ramp,on ramp,off ramp"},"highway/service":{"name":"Service Road","terms":""},"highway/service/alley":{"name":"Alley","terms":""},"highway/service/drive-through":{"name":"Drive-Through","terms":""},"highway/service/driveway":{"name":"Driveway","terms":""},"highway/service/emergency_access":{"name":"Emergency Access","terms":""},"highway/service/parking_aisle":{"name":"Parking Aisle","terms":""},"highway/services":{"name":"Service Area","terms":"services,travel plaza,service station"},"highway/steps":{"name":"Steps","terms":"stairs,staircase"},"highway/stop":{"name":"Stop Sign","terms":"stop sign"},"highway/street_lamp":{"name":"Street Lamp","terms":"streetlight,street light,lamp,light,gaslight"},"highway/tertiary":{"name":"Tertiary Road","terms":""},"highway/tertiary_link":{"name":"Tertiary Link","terms":"ramp,on ramp,off ramp"},"highway/track":{"name":"Unmaintained Track Road","terms":"woods road,forest road,logging road,fire road,farm road,agricultural road,ranch road,carriage road,primitive,unmaintained,rut,offroad,4wd,4x4,four wheel drive,atv,quad,jeep,double track,two track"},"highway/traffic_signals":{"name":"Traffic Signals","terms":"light,stoplight,traffic light"},"highway/trunk":{"name":"Trunk Road","terms":""},"highway/trunk_link":{"name":"Trunk Link","terms":"ramp,on ramp,off ramp"},"highway/turning_circle":{"name":"Turning Circle","terms":"cul-de-sac"},"highway/unclassified":{"name":"Minor Road","terms":""},"historic":{"name":"Historic Site","terms":""},"historic/archaeological_site":{"name":"Archaeological Site","terms":""},"historic/boundary_stone":{"name":"Boundary Stone","terms":""},"historic/castle":{"name":"Castle","terms":""},"historic/memorial":{"name":"Memorial","terms":""},"historic/monument":{"name":"Monument","terms":""},"historic/ruins":{"name":"Ruins","terms":""},"historic/wayside_cross":{"name":"Wayside Cross","terms":""},"historic/wayside_shrine":{"name":"Wayside Shrine","terms":""},"junction":{"name":"Junction","terms":""},"landuse":{"name":"Land Use","terms":""},"landuse/allotments":{"name":"Community Garden","terms":"allotment,garden"},"landuse/basin":{"name":"Basin","terms":""},"landuse/cemetery":{"name":"Cemetery","terms":""},"landuse/churchyard":{"name":"Churchyard","terms":""},"landuse/commercial":{"name":"Commercial Area","terms":""},"landuse/construction":{"name":"Construction","terms":""},"landuse/farm":{"name":"Farmland","terms":""},"landuse/farmland":{"name":"Farmland","terms":""},"landuse/farmyard":{"name":"Farmyard","terms":""},"landuse/forest":{"name":"Forest","terms":"tree"},"landuse/garages":{"name":"Garages","terms":""},"landuse/grass":{"name":"Grass","terms":""},"landuse/industrial":{"name":"Industrial Area","terms":""},"landuse/landfill":{"name":"Landfill","terms":"dump"},"landuse/meadow":{"name":"Meadow","terms":""},"landuse/military":{"name":"Military Area","terms":""},"landuse/orchard":{"name":"Orchard","terms":""},"landuse/plant_nursery":{"name":"Plant Nursery","terms":"vivero"},"landuse/quarry":{"name":"Quarry","terms":""},"landuse/residential":{"name":"Residential Area","terms":""},"landuse/retail":{"name":"Retail Area","terms":""},"landuse/vineyard":{"name":"Vineyard","terms":""},"leisure":{"name":"Leisure","terms":""},"leisure/adult_gaming_centre":{"name":"Adult Gaming Center","terms":"gambling,slot machine"},"leisure/bowling_alley":{"name":"Bowling Alley","terms":""},"leisure/common":{"name":"Common","terms":"open space"},"leisure/dog_park":{"name":"Dog Park","terms":""},"leisure/firepit":{"name":"Firepit","terms":"fireplace,campfire"},"leisure/garden":{"name":"Garden","terms":""},"leisure/golf_course":{"name":"Golf Course","terms":"links"},"leisure/ice_rink":{"name":"Ice Rink","terms":"hockey,skating,curling"},"leisure/marina":{"name":"Marina","terms":"boat"},"leisure/nature_reserve":{"name":"Nature Reserve","terms":"protected,wildlife"},"leisure/park":{"name":"Park","terms":"esplanade,estate,forest,garden,grass,green,grounds,lawn,lot,meadow,parkland,place,playground,plaza,pleasure garden,recreation area,square,tract,village green,woodland"},"leisure/picnic_table":{"name":"Picnic Table","terms":"bench"},"leisure/pitch":{"name":"Sport Pitch","terms":"field"},"leisure/pitch/american_football":{"name":"American Football Field","terms":""},"leisure/pitch/baseball":{"name":"Baseball Diamond","terms":""},"leisure/pitch/basketball":{"name":"Basketball Court","terms":""},"leisure/pitch/rugby_league":{"name":"Rugby League Field","terms":""},"leisure/pitch/rugby_union":{"name":"Rugby Union Field","terms":""},"leisure/pitch/skateboard":{"name":"Skate Park","terms":""},"leisure/pitch/soccer":{"name":"Soccer Field","terms":""},"leisure/pitch/tennis":{"name":"Tennis Court","terms":""},"leisure/pitch/volleyball":{"name":"Volleyball Court","terms":""},"leisure/playground":{"name":"Playground","terms":"jungle gym,play area"},"leisure/running_track":{"name":"Running Track","terms":""},"leisure/slipway":{"name":"Slipway","terms":"boat launch,boat ramp"},"leisure/sports_centre":{"name":"Sports Center / Gym","terms":"gym"},"leisure/sports_centre/swimming":{"name":"Swimming Pool Facility","terms":"dive,water"},"leisure/stadium":{"name":"Stadium","terms":""},"leisure/swimming_pool":{"name":"Swimming Pool","terms":"dive,water"},"leisure/track":{"name":"Racetrack (non-Motorsport)","terms":""},"leisure/water_park":{"name":"Water Park","terms":"swim,pool,dive"},"line":{"name":"Line","terms":""},"man_made":{"name":"Man Made","terms":""},"man_made/adit":{"name":"Adit","terms":"entrance,underground,mine,cave"},"man_made/breakwater":{"name":"Breakwater","terms":""},"man_made/chimney":{"name":"Chimney","terms":""},"man_made/cutline":{"name":"Cut line","terms":""},"man_made/embankment":{"name":"Embankment","terms":""},"man_made/flagpole":{"name":"Flagpole","terms":""},"man_made/gasometer":{"name":"Gasometer","terms":"gas holder"},"man_made/groyne":{"name":"Groyne","terms":""},"man_made/lighthouse":{"name":"Lighthouse","terms":""},"man_made/mast":{"name":"Radio Mast","terms":"broadcast tower,cell phone tower,cell tower,guyed tower,mobile phone tower,radio tower,television tower,transmission mast,transmission tower,tv tower"},"man_made/observation":{"name":"Observation Tower","terms":"lookout tower,fire tower"},"man_made/petroleum_well":{"name":"Oil Well","terms":"drilling rig,oil derrick,oil drill,oil horse,oil rig,oil pump,petroleum well,pumpjack"},"man_made/pier":{"name":"Pier","terms":""},"man_made/pipeline":{"name":"Pipeline","terms":""},"man_made/silo":{"name":"Silo","terms":"grain,corn,wheat"},"man_made/storage_tank":{"name":"Storage Tank","terms":"water,oil,gas,petrol"},"man_made/surveillance":{"name":"Surveillance","terms":""},"man_made/survey_point":{"name":"Survey Point","terms":""},"man_made/tower":{"name":"Tower","terms":""},"man_made/wastewater_plant":{"name":"Wastewater Plant","terms":"sewage*,water treatment plant,reclamation plant"},"man_made/water_tower":{"name":"Water Tower","terms":""},"man_made/water_well":{"name":"Water Well","terms":""},"man_made/water_works":{"name":"Water Works","terms":""},"man_made/works":{"name":"Works","terms":"car assembly plant,aluminium processing plant,brewery,furniture manufacture factory,oil refinery,plastic recycling"},"military/airfield":{"name":"Airfield","terms":""},"military/barracks":{"name":"Barracks","terms":""},"military/bunker":{"name":"Bunker","terms":""},"military/checkpoint":{"name":"Checkpoint","terms":""},"military/danger_area":{"name":"Danger Area","terms":""},"military/naval_base":{"name":"Naval Base","terms":""},"military/obstacle_course":{"name":"Obstacle Course","terms":""},"military/range":{"name":"Military Range","terms":""},"military/training_area":{"name":"Training area","terms":""},"natural":{"name":"Natural","terms":""},"natural/bay":{"name":"Bay","terms":""},"natural/beach":{"name":"Beach","terms":""},"natural/cave_entrance":{"name":"Cave Entrance","terms":"cavern,hollow,grotto,shelter,cavity"},"natural/cliff":{"name":"Cliff","terms":""},"natural/coastline":{"name":"Coastline","terms":"shore"},"natural/fell":{"name":"Fell","terms":""},"natural/glacier":{"name":"Glacier","terms":""},"natural/grassland":{"name":"Grassland","terms":""},"natural/heath":{"name":"Heath","terms":""},"natural/peak":{"name":"Peak","terms":"acme,aiguille,alp,climax,crest,crown,hill,mount,mountain,pinnacle,summit,tip,top"},"natural/saddle":{"name":"Saddle","terms":"pass,mountain pass,top"},"natural/scree":{"name":"Scree","terms":"loose rocks"},"natural/scrub":{"name":"Scrub","terms":"bush,shrubs"},"natural/spring":{"name":"Spring","terms":""},"natural/tree":{"name":"Tree","terms":""},"natural/tree_row":{"name":"Tree row","terms":""},"natural/volcano":{"name":"Volcano","terms":"mountain,crater"},"natural/water":{"name":"Water","terms":""},"natural/water/lake":{"name":"Lake","terms":"lakelet,loch,mere"},"natural/water/pond":{"name":"Pond","terms":"lakelet,millpond,tarn,pool,mere"},"natural/water/reservoir":{"name":"Reservoir","terms":""},"natural/wetland":{"name":"Wetland","terms":""},"natural/wood":{"name":"Wood","terms":"tree"},"office":{"name":"Office","terms":""},"office/accountant":{"name":"Accountant","terms":""},"office/administrative":{"name":"Administrative Office","terms":""},"office/architect":{"name":"Architect","terms":""},"office/company":{"name":"Company Office","terms":""},"office/educational_institution":{"name":"Educational Institution","terms":""},"office/employment_agency":{"name":"Employment Agency","terms":"job"},"office/estate_agent":{"name":"Real Estate Office","terms":""},"office/financial":{"name":"Financial Office","terms":""},"office/government":{"name":"Government Office","terms":""},"office/insurance":{"name":"Insurance Office","terms":""},"office/it":{"name":"IT Office","terms":""},"office/lawyer":{"name":"Law Office","terms":""},"office/newspaper":{"name":"Newspaper","terms":""},"office/ngo":{"name":"NGO Office","terms":""},"office/physician":{"name":"Physician","terms":""},"office/political_party":{"name":"Political Party","terms":""},"office/research":{"name":"Research Office","terms":""},"office/telecommunication":{"name":"Telecom Office","terms":""},"office/therapist":{"name":"Therapist","terms":""},"office/travel_agent":{"name":"Travel Agency","terms":""},"piste":{"name":"Piste/Ski Trail","terms":"ski,sled,sleigh,snowboard,nordic,downhill,snowmobile"},"place":{"name":"Place","terms":""},"place/city":{"name":"City","terms":""},"place/farm":{"name":"Farm","terms":""},"place/hamlet":{"name":"Hamlet","terms":""},"place/island":{"name":"Island","terms":"archipelago,atoll,bar,cay,isle,islet,key,reef"},"place/isolated_dwelling":{"name":"Isolated Dwelling","terms":""},"place/locality":{"name":"Locality","terms":""},"place/neighbourhood":{"name":"Neighborhood","terms":"neighbourhood"},"place/suburb":{"name":"Borough","terms":"Boro,Quarter"},"place/town":{"name":"Town","terms":""},"place/village":{"name":"Village","terms":""},"point":{"name":"Point","terms":""},"power":{"name":"Power","terms":""},"power/generator":{"name":"Power Generator","terms":""},"power/line":{"name":"Power Line","terms":""},"power/minor_line":{"name":"Minor Power Line","terms":""},"power/pole":{"name":"Power Pole","terms":""},"power/sub_station":{"name":"Substation","terms":""},"power/substation":{"name":"Substation","terms":""},"power/tower":{"name":"High-Voltage Tower","terms":""},"power/transformer":{"name":"Transformer","terms":""},"public_transport/platform":{"name":"Platform","terms":""},"public_transport/stop_position":{"name":"Stop Position","terms":""},"railway":{"name":"Railway","terms":""},"railway/abandoned":{"name":"Abandoned Railway","terms":""},"railway/disused":{"name":"Disused Railway","terms":""},"railway/funicular":{"name":"Funicular","terms":"venicular,cliff railway,cable car,cable railway,funicular railway"},"railway/halt":{"name":"Railway Halt","terms":"break,interrupt,rest,wait,interruption"},"railway/level_crossing":{"name":"Railway Crossing","terms":"crossing,railroad crossing,level crossing,grade crossing,road through railroad,train crossing"},"railway/monorail":{"name":"Monorail","terms":""},"railway/narrow_gauge":{"name":"Narrow Gauge Rail","terms":"narrow gauge railway,narrow gauge railroad"},"railway/platform":{"name":"Railway Platform","terms":""},"railway/rail":{"name":"Rail","terms":""},"railway/station":{"name":"Railway Station","terms":"train station,station"},"railway/subway":{"name":"Subway","terms":""},"railway/subway_entrance":{"name":"Subway Entrance","terms":""},"railway/tram":{"name":"Tram","terms":"streetcar"},"relation":{"name":"Relation","terms":""},"roundabout":{"name":"Roundabout","terms":""},"route/ferry":{"name":"Ferry Route","terms":""},"shop":{"name":"Shop","terms":""},"shop/alcohol":{"name":"Liquor Store","terms":"alcohol,beer,booze,wine"},"shop/anime":{"name":"Anime Shop","terms":""},"shop/antiques":{"name":"Antiques Shop","terms":""},"shop/art":{"name":"Art Store","terms":"art*,exhibit*,gallery"},"shop/baby_goods":{"name":"Baby Goods Store","terms":""},"shop/bag":{"name":"Bag/Luggage Store","terms":"handbag,purse"},"shop/bakery":{"name":"Bakery","terms":""},"shop/bathroom_furnishing":{"name":"Bathroom Furnishing Store","terms":""},"shop/beauty":{"name":"Beauty Shop","terms":"nail spa,spa,salon,tanning"},"shop/bed":{"name":"Bedding/Mattress Store","terms":""},"shop/beverages":{"name":"Beverage Store","terms":""},"shop/bicycle":{"name":"Bicycle Shop","terms":"bike,repair"},"shop/bookmaker":{"name":"Bookmaker","terms":""},"shop/books":{"name":"Book Store","terms":""},"shop/boutique":{"name":"Boutique","terms":""},"shop/butcher":{"name":"Butcher","terms":"meat"},"shop/candles":{"name":"Candle Shop","terms":""},"shop/car":{"name":"Car Dealership","terms":"auto"},"shop/car_parts":{"name":"Car Parts Store","terms":"auto"},"shop/car_repair":{"name":"Car Repair Shop","terms":"auto"},"shop/carpet":{"name":"Carpet Store","terms":"rug"},"shop/cheese":{"name":"Cheese Store","terms":""},"shop/chemist":{"name":"Chemist","terms":""},"shop/chocolate":{"name":"Chocolate Store","terms":""},"shop/clothes":{"name":"Clothing Store","terms":""},"shop/computer":{"name":"Computer Store","terms":""},"shop/confectionery":{"name":"Candy Store","terms":""},"shop/convenience":{"name":"Convenience Store","terms":""},"shop/copyshop":{"name":"Copy Store","terms":""},"shop/cosmetics":{"name":"Cosmetics Store","terms":""},"shop/craft":{"name":"Arts and Crafts Store","terms":"art*,paint*,frame"},"shop/curtain":{"name":"Curtain Store","terms":"drape*,window"},"shop/dairy":{"name":"Dairy Store","terms":"milk,egg,cheese"},"shop/deli":{"name":"Deli","terms":"lunch,meat,sandwich"},"shop/department_store":{"name":"Department Store","terms":""},"shop/doityourself":{"name":"DIY Store","terms":""},"shop/dry_cleaning":{"name":"Dry Cleaner","terms":""},"shop/electronics":{"name":"Electronics Store","terms":"appliance,audio,computer,tv"},"shop/erotic":{"name":"Erotic Store","terms":"sex,porn"},"shop/fabric":{"name":"Fabric Store","terms":"sew"},"shop/farm":{"name":"Produce Stand","terms":"farm shop,farm stand"},"shop/fashion":{"name":"Fashion Store","terms":""},"shop/fishmonger":{"name":"Fishmonger","terms":""},"shop/florist":{"name":"Florist","terms":"flower"},"shop/frame":{"name":"Framing Shop","terms":"art*,paint*,photo*,frame"},"shop/funeral_directors":{"name":"Funeral Home","terms":"undertaker,memorial home"},"shop/furnace":{"name":"Furnace Store","terms":"oven,stove"},"shop/furniture":{"name":"Furniture Store","terms":"chair,sofa,table"},"shop/garden_centre":{"name":"Garden Center","terms":"landscape,mulch,shrub,tree"},"shop/gift":{"name":"Gift Shop","terms":""},"shop/greengrocer":{"name":"Greengrocer","terms":"fruit,vegetable"},"shop/hairdresser":{"name":"Hairdresser","terms":""},"shop/hardware":{"name":"Hardware Store","terms":""},"shop/hearing_aids":{"name":"Hearing Aids Store","terms":""},"shop/herbalist":{"name":"Herbalist","terms":""},"shop/hifi":{"name":"Hifi Store","terms":"stereo,video"},"shop/houseware":{"name":"Houseware Store","terms":"home,household"},"shop/interior_decoration":{"name":"Interior Decoration Store","terms":""},"shop/jewelry":{"name":"Jeweler","terms":"diamond,gem,ring"},"shop/kiosk":{"name":"News Kiosk","terms":""},"shop/kitchen":{"name":"Kitchen Design Store","terms":""},"shop/laundry":{"name":"Laundry","terms":""},"shop/leather":{"name":"Leather Store","terms":""},"shop/locksmith":{"name":"Locksmith","terms":"key,lockpick"},"shop/lottery":{"name":"Lottery Shop","terms":""},"shop/mall":{"name":"Mall","terms":""},"shop/massage":{"name":"Massage Shop","terms":""},"shop/medical_supply":{"name":"Medical Supply Store","terms":""},"shop/mobile_phone":{"name":"Mobile Phone Store","terms":""},"shop/money_lender":{"name":"Money Lender","terms":""},"shop/motorcycle":{"name":"Motorcycle Dealership","terms":""},"shop/music":{"name":"Music Store","terms":"CD,vinyl"},"shop/musical_instrument":{"name":"Musical Instrument Store","terms":""},"shop/newsagent":{"name":"Newspaper/Magazine Shop","terms":""},"shop/optician":{"name":"Optician","terms":"eye,glasses"},"shop/organic":{"name":"Organic Goods Store","terms":""},"shop/outdoor":{"name":"Outdoors Store","terms":"camping,climbing,hiking"},"shop/paint":{"name":"Paint Store","terms":""},"shop/pawnbroker":{"name":"Pawn Shop","terms":""},"shop/pet":{"name":"Pet Store","terms":"cat,dog,fish"},"shop/photo":{"name":"Photography Store","terms":"camera,film"},"shop/pyrotechnics":{"name":"Fireworks Store","terms":""},"shop/radiotechnics":{"name":"Radio/Electronic Component Store","terms":""},"shop/religion":{"name":"Religious Store","terms":""},"shop/scuba_diving":{"name":"Scuba Diving Shop","terms":""},"shop/seafood":{"name":"Seafood Shop","terms":"fishmonger"},"shop/second_hand":{"name":"Consignment/Thrift Store","terms":"secondhand,second hand,resale,thrift,used"},"shop/shoes":{"name":"Shoe Store","terms":""},"shop/sports":{"name":"Sporting Goods Store","terms":""},"shop/stationery":{"name":"Stationery Store","terms":"card,paper"},"shop/storage_rental":{"name":"Storage Rental","terms":""},"shop/supermarket":{"name":"Supermarket","terms":"grocery,store,shop"},"shop/tailor":{"name":"Tailor","terms":"clothes,suit"},"shop/tattoo":{"name":"Tattoo Parlor","terms":""},"shop/tea":{"name":"Tea Store","terms":""},"shop/ticket":{"name":"Ticket Seller","terms":""},"shop/tobacco":{"name":"Tobacco Shop","terms":""},"shop/toys":{"name":"Toy Store","terms":""},"shop/travel_agency":{"name":"Travel Agency","terms":""},"shop/tyres":{"name":"Tire Store","terms":""},"shop/vacant":{"name":"Vacant Shop","terms":""},"shop/vacuum_cleaner":{"name":"Vacuum Cleaner Store","terms":""},"shop/variety_store":{"name":"Variety Store","terms":""},"shop/video":{"name":"Video Store","terms":"DVD"},"shop/video_games":{"name":"Video Game Store","terms":""},"shop/water_sports":{"name":"Watersport/Swim Shop","terms":""},"shop/weapons":{"name":"Weapon Shop","terms":"ammo,gun,knife,knives"},"shop/window_blind":{"name":"Window Blind Store","terms":""},"shop/wine":{"name":"Wine Shop","terms":""},"tourism":{"name":"Tourism","terms":""},"tourism/alpine_hut":{"name":"Alpine Hut","terms":""},"tourism/artwork":{"name":"Artwork","terms":"mural,sculpture,statue"},"tourism/attraction":{"name":"Tourist Attraction","terms":""},"tourism/camp_site":{"name":"Camp Site","terms":"Tent"},"tourism/caravan_site":{"name":"RV Park","terms":"Motor Home,Camper"},"tourism/chalet":{"name":"Chalet","terms":""},"tourism/gallery":{"name":"Art Gallery","terms":"art*,exhibit*,paint*,photo*,sculpt*"},"tourism/guest_house":{"name":"Guest House","terms":"B&B,Bed and Breakfast"},"tourism/hostel":{"name":"Hostel","terms":""},"tourism/hotel":{"name":"Hotel","terms":""},"tourism/information":{"name":"Information","terms":""},"tourism/motel":{"name":"Motel","terms":""},"tourism/museum":{"name":"Museum","terms":"art*,exhibit*,gallery,foundation,hall,institution,paint*,photo*,sculpt*"},"tourism/picnic_site":{"name":"Picnic Site","terms":"camp"},"tourism/theme_park":{"name":"Theme Park","terms":""},"tourism/viewpoint":{"name":"Viewpoint","terms":""},"tourism/zoo":{"name":"Zoo","terms":""},"traffic_calming/bump":{"name":"Speed Bump","terms":"speed hump"},"traffic_calming/hump":{"name":"Speed Hump","terms":"speed bump"},"traffic_calming/rumble_strip":{"name":"Rumble Strip","terms":"sleeper lines,audible lines,growlers"},"traffic_calming/table":{"name":"Raised Pedestrian Crossing","terms":"speed table,flat top hump"},"type/boundary":{"name":"Boundary","terms":""},"type/boundary/administrative":{"name":"Administrative Boundary","terms":""},"type/multipolygon":{"name":"Multipolygon","terms":""},"type/restriction":{"name":"Restriction","terms":""},"type/restriction/no_left_turn":{"name":"No Left Turn","terms":""},"type/restriction/no_right_turn":{"name":"No Right Turn","terms":""},"type/restriction/no_straight_on":{"name":"No Straight On","terms":""},"type/restriction/no_u_turn":{"name":"No U-turn","terms":""},"type/restriction/only_left_turn":{"name":"Left Turn Only","terms":""},"type/restriction/only_right_turn":{"name":"Right Turn Only","terms":""},"type/restriction/only_straight_on":{"name":"No Turns","terms":""},"type/route":{"name":"Route","terms":""},"type/route/bicycle":{"name":"Cycle Route","terms":""},"type/route/bus":{"name":"Bus Route","terms":""},"type/route/detour":{"name":"Detour Route","terms":""},"type/route/ferry":{"name":"Ferry Route","terms":""},"type/route/foot":{"name":"Foot Route","terms":""},"type/route/hiking":{"name":"Hiking Route","terms":""},"type/route/pipeline":{"name":"Pipeline Route","terms":""},"type/route/power":{"name":"Power Route","terms":""},"type/route/road":{"name":"Road Route","terms":""},"type/route/train":{"name":"Train Route","terms":""},"type/route/tram":{"name":"Tram Route","terms":""},"type/route_master":{"name":"Route Master","terms":""},"type/site":{"name":"Site","terms":""},"vertex":{"name":"Other","terms":""},"waterway":{"name":"Waterway","terms":""},"waterway/boatyard":{"name":"Boatyard","terms":""},"waterway/canal":{"name":"Canal","terms":""},"waterway/dam":{"name":"Dam","terms":""},"waterway/ditch":{"name":"Ditch","terms":""},"waterway/dock":{"name":"Dock","terms":""},"waterway/drain":{"name":"Drain","terms":""},"waterway/fuel":{"name":"Marine Fuel Station","terms":"petrol,gas,diesel,boat"},"waterway/river":{"name":"River","terms":"beck,branch,brook,course,creek,estuary,rill,rivulet,run,runnel,stream,tributary,watercourse"},"waterway/riverbank":{"name":"Riverbank","terms":""},"waterway/sanitary_dump_station":{"name":"Marine Toilet Disposal","terms":"Boat,Watercraft,Sanitary,Dump Station,Pumpout,Pump out,Elsan,CDP,CTDP,Chemical Toilet"},"waterway/stream":{"name":"Stream","terms":"beck,branch,brook,burn,course,creek,current,drift,flood,flow,freshet,race,rill,rindle,rivulet,run,runnel,rush,spate,spritz,surge,tide,torrent,tributary,watercourse"},"waterway/water_point":{"name":"Marine Drinking Water","terms":""},"waterway/weir":{"name":"Weir","terms":""}}}},"suggestions":{"amenity":{"fuel":{"76":{"count":314},"Neste":{"count":189},"BP":{"count":2511},"Shell":{"count":8380},"Agip":{"count":2651},"Migrol":{"count":65},"Avia":{"count":897},"Texaco":{"count":680},"Total":{"count":2607},"Statoil":{"count":596},"Esso":{"count":3652},"Jet":{"count":441},"Avanti":{"count":90},"Sainsbury's":{"count":58},"OMV":{"count":701},"Aral":{"count":1339},"Tesco":{"count":197},"JET":{"count":180},"Morrisons":{"count":111},"United":{"count":91},"Canadian Tire":{"count":66},"Mobil":{"count":613},"Caltex":{"count":1001},"Sunoco":{"count":355},"Q8":{"count":1161},"ABC":{"count":79},"ARAL":{"count":375},"CEPSA":{"count":1018},"BFT":{"count":89},"Petron":{"count":878},"Intermarché":{"count":434},"Total Access":{"count":51},"Super U":{"count":124},"Auchan":{"count":53},"Elf":{"count":129},"Carrefour":{"count":205},"Station Service E. Leclerc":{"count":530},"Shell Express":{"count":131},"Hess":{"count":127},"Flying V":{"count":129},"bft":{"count":168},"Gulf":{"count":199},"PTT":{"count":191},"St1":{"count":100},"Teboil":{"count":115},"HEM":{"count":212},"GALP":{"count":626},"OK":{"count":163},"ÖMV":{"count":101},"Tinq":{"count":215},"OKQ8":{"count":186},"Repsol":{"count":424},"Westfalen":{"count":96},"Esso Express":{"count":98},"Raiffeisenbank":{"count":117},"Tamoil":{"count":866},"Engen":{"count":241},"Sasol":{"count":59},"Topaz":{"count":78},"LPG":{"count":174},"Coop":{"count":62},"Orlen":{"count":598},"Oilibya":{"count":68},"Tango":{"count":122},"Star":{"count":319},"Петрол":{"count":84},"Cepsa":{"count":96},"OIL!":{"count":63},"Ultramar":{"count":125},"Irving":{"count":87},"Lukoil":{"count":701},"Petro-Canada":{"count":489},"7-Eleven":{"count":488},"Agrola":{"count":69},"Husky":{"count":126},"Slovnaft":{"count":219},"Sheetz":{"count":134},"Mol":{"count":61},"Petronas":{"count":159},"Газпромнефть":{"count":748},"Лукойл":{"count":1477},"Elan":{"count":112},"Роснефть":{"count":638},"Turmöl":{"count":57},"Neste A24":{"count":55},"Marathon":{"count":189},"Valero":{"count":366},"Eni":{"count":236},"Chevron":{"count":954},"ТНК":{"count":520},"REPSOL":{"count":1603},"MOL":{"count":228},"Bliska":{"count":150},"Api":{"count":302},"Arco":{"count":179},"Pemex":{"count":423},"Exxon":{"count":506},"Coles Express":{"count":115},"Petrom":{"count":259},"PETRONOR":{"count":207},"Rompetrol":{"count":174},"Lotos":{"count":178},"ОМВ":{"count":60},"BR":{"count":129},"Copec":{"count":505},"Petrobras":{"count":270},"Liberty":{"count":55},"IP":{"count":871},"Erg":{"count":596},"Eneos":{"count":97},"Citgo":{"count":279},"Metano":{"count":208},"Сургутнефтегаз":{"count":61},"EKO":{"count":59},"Eko":{"count":58},"Indipend.":{"count":172},"IES":{"count":63},"TotalErg":{"count":89},"Cenex":{"count":115},"ПТК":{"count":82},"HP":{"count":79},"Phillips 66":{"count":216},"CARREFOUR":{"count":74},"ERG":{"count":76},"Speedway":{"count":148},"Benzina":{"count":96},"Татнефть":{"count":264},"Terpel":{"count":259},"WOG":{"count":189},"Seaoil":{"count":54},"АЗС":{"count":1077},"Kwik Trip":{"count":108},"Wawa":{"count":89},"Pertamina":{"count":186},"COSMO":{"count":64},"Z":{"count":76},"Indian Oil":{"count":183},"АГЗС":{"count":494},"INA":{"count":121},"JOMO":{"count":62},"Holiday":{"count":97},"YPF":{"count":70},"IDEMITSU":{"count":87},"ENEOS":{"count":736},"Bharat Petroleum":{"count":64},"CAMPSA":{"count":615},"Casey's General Store":{"count":190},"Башнефть":{"count":60},"Kangaroo":{"count":60},"コスモ石油 (COSMO)":{"count":136},"MEROIL":{"count":77},"1-2-3":{"count":71},"出光":{"count":228,"tags":{"name:en":"IDEMITSU"}},"НК Альянс":{"count":88},"Sinclair":{"count":100},"Conoco":{"count":189},"SPBU":{"count":54},"Макпетрол":{"count":109},"Circle K":{"count":166},"Posto Ipiranga":{"count":70},"Posto Shell":{"count":54},"Phoenix":{"count":144},"Ipiranga":{"count":119},"OKKO":{"count":85},"ОККО":{"count":119},"บางจาก":{"count":60},"QuikTrip":{"count":105},"Stewart's":{"count":63},"Posto BR":{"count":68},"ป ต ท":{"count":152},"ปตท":{"count":88},"ANP":{"count":80},"Kum & Go":{"count":80},"Petrolimex":{"count":55},"Sokimex":{"count":66},"Tela":{"count":154},"Posto":{"count":71},"H-E-B":{"count":182},"Укрнафта":{"count":58},"Татнефтепродукт":{"count":54},"Afriquia":{"count":88},"Murphy USA":{"count":67},"昭和シェル (Showa-shell)":{"count":94},"エネオス":{"count":53},"CNG":{"count":94}},"pub":{"Kings Arms":{"count":67},"The Ship":{"count":89},"The White Horse":{"count":204},"The White Hart":{"count":226},"Royal Oak":{"count":150},"The Red Lion":{"count":233},"The Kings Arms":{"count":58},"The Star":{"count":73},"The Anchor":{"count":64},"The Cross Keys":{"count":55},"The Wheatsheaf":{"count":117},"The Crown Inn":{"count":67},"The Kings Head":{"count":53},"The Castle":{"count":62},"The Railway":{"count":102},"The White Lion":{"count":118},"The Bell":{"count":121},"The Bull":{"count":68},"The Plough":{"count":179},"The George":{"count":110},"The Royal Oak":{"count":209},"The Fox":{"count":74},"Prince of Wales":{"count":77},"The Rising Sun":{"count":71},"The Prince of Wales":{"count":51},"The Crown":{"count":244},"The Chequers":{"count":66},"The Swan":{"count":152},"Rose and Crown":{"count":79},"The Victoria":{"count":67},"New Inn":{"count":90},"Royal Hotel":{"count":57},"Red Lion":{"count":207},"Cross Keys":{"count":61},"The Greyhound":{"count":96},"The Black Horse":{"count":94},"The New Inn":{"count":105},"Kings Head":{"count":59},"The Albion":{"count":51},"The Angel":{"count":52},"The Queens Head":{"count":52},"The Ship Inn":{"count":83},"Rose & Crown":{"count":51},"Queens Head":{"count":52},"Irish Pub":{"count":76}},"fast_food":{"Quick":{"count":484},"McDonald's":{"count":12376,"tags":{"cuisine":"burger"}},"Subway":{"count":5576,"tags":{"cuisine":"sandwich"}},"Burger King":{"count":3734,"tags":{"cuisine":"burger"}},"Ali Baba":{"count":61},"Hungry Jacks":{"count":173,"tags":{"cuisine":"burger"}},"Red Rooster":{"count":148},"KFC":{"count":3198,"tags":{"cuisine":"chicken"}},"Domino's Pizza":{"count":985,"tags":{"cuisine":"pizza"}},"Chowking":{"count":142},"Jollibee":{"count":396},"Hesburger":{"count":102},"肯德基":{"count":86},"Wendy's":{"count":1621,"tags":{"cuisine":"burger"}},"Tim Hortons":{"count":323},"Steers":{"count":151},"Hardee's":{"count":268,"tags":{"cuisine":"burger"}},"Arby's":{"count":782},"A&W":{"count":283},"Dairy Queen":{"count":791},"Hallo Pizza":{"count":76},"Fish & Chips":{"count":93},"Harvey's":{"count":90},"麥當勞":{"count":65},"Pizza Pizza":{"count":215},"Kotipizza":{"count":74},"Jack in the Box":{"count":546,"tags":{"cuisine":"burger"}},"Istanbul":{"count":56},"Kochlöffel":{"count":68},"Döner":{"count":228},"Telepizza":{"count":201},"Sibylla":{"count":61},"Carl's Jr.":{"count":298,"tags":{"cuisine":"burger"}},"Quiznos":{"count":266,"tags":{"cuisine":"sandwich"}},"Wimpy":{"count":141},"Sonic":{"count":566,"tags":{"cuisine":"burger"}},"Taco Bell":{"count":1423,"tags":{"cuisine":"mexican"}},"Pizza Nova":{"count":63},"Papa John's":{"count":304,"tags":{"cuisine":"pizza"}},"Nordsee":{"count":159},"Mr. Sub":{"count":103},"Макдоналдс":{"count":324,"tags":{"name:en":"McDonald's"}},"Asia Imbiss":{"count":111},"Chipotle":{"count":290,"tags":{"cuisine":"mexican"}},"マクドナルド":{"count":692,"tags":{"name:en":"McDonald's","cuisine":"burger"}},"In-N-Out Burger":{"count":65},"Jimmy John's":{"count":141},"Jamba Juice":{"count":68},"Робин Сдобин":{"count":82},"Baskin Robbins":{"count":74},"ケンタッキーフライドチキン":{"count":164,"tags":{"name:en":"KFC","cuisine":"chicken"}},"吉野家":{"count":191},"Taco Time":{"count":88},"松屋":{"count":281,"tags":{"name:en":"Matsuya"}},"Little Caesars":{"count":81},"El Pollo Loco":{"count":63},"Del Taco":{"count":141},"White Castle":{"count":80},"Boston Market":{"count":66},"Chick-fil-A":{"count":257,"tags":{"cuisine":"chicken"}},"Panda Express":{"count":238,"tags":{"cuisine":"chinese"}},"Whataburger":{"count":364},"Taco John's":{"count":78},"Теремок":{"count":68},"Culver's":{"count":425},"Five Guys":{"count":141},"Church's Chicken":{"count":95},"Popeye's":{"count":167,"tags":{"cuisine":"chicken"}},"Long John Silver's":{"count":93},"Pollo Campero":{"count":62},"Zaxby's":{"count":51},"すき家":{"count":276,"tags":{"name:en":"SUKIYA"}},"モスバーガー":{"count":257,"tags":{"name:en":"MOS BURGER"}},"Русский Аппетит":{"count":69},"なか卯":{"count":63}},"restaurant":{"Pizza Hut":{"count":1180,"tags":{"cuisine":"pizza"}},"Little Chef":{"count":64},"Adler":{"count":158},"Zur Krone":{"count":90},"Deutsches Haus":{"count":90},"Krone":{"count":171},"Akropolis":{"count":152},"Schützenhaus":{"count":124},"Kreuz":{"count":74},"Waldschänke":{"count":55},"La Piazza":{"count":69},"Lamm":{"count":66},"Zur Sonne":{"count":73},"Zur Linde":{"count":204},"Poseidon":{"count":110},"Shanghai":{"count":82},"Red Lobster":{"count":235},"Zum Löwen":{"count":84},"Swiss Chalet":{"count":107},"Olympia":{"count":74},"Wagamama":{"count":64},"Frankie & Benny's":{"count":66},"Hooters":{"count":103},"Sternen":{"count":78},"Hirschen":{"count":79},"Denny's":{"count":450},"Athen":{"count":68},"Sonne":{"count":126},"Hirsch":{"count":79},"Ratskeller":{"count":150},"La Cantina":{"count":56},"Gasthaus Krone":{"count":56},"El Greco":{"count":86},"Gasthof zur Post":{"count":79},"Nando's":{"count":246},"Löwen":{"count":112},"La Pataterie":{"count":51},"Bella Napoli":{"count":53},"Pizza Express":{"count":262},"Mandarin":{"count":65},"Hong Kong":{"count":83},"Zizzi":{"count":68},"Cracker Barrel":{"count":183},"Rhodos":{"count":81},"Lindenhof":{"count":79},"Milano":{"count":54},"Dolce Vita":{"count":77},"Kirchenwirt":{"count":81},"Kantine":{"count":52},"Ochsen":{"count":95},"Spur":{"count":62},"Mykonos":{"count":59},"Lotus":{"count":66},"Applebee's":{"count":531},"Flunch":{"count":72},"Zur Post":{"count":116},"China Town":{"count":76},"La Dolce Vita":{"count":73},"Waffle House":{"count":207},"Delphi":{"count":88},"Linde":{"count":103},"Outback Steakhouse":{"count":218},"Dionysos":{"count":69},"Kelsey's":{"count":57},"Boston Pizza":{"count":165},"Bella Italia":{"count":132},"Sizzler":{"count":53},"Grüner Baum":{"count":116},"Taj Mahal":{"count":104},"Rössli":{"count":68},"Wimpy":{"count":51},"Traube":{"count":65},"Adria":{"count":52},"Red Robin":{"count":185},"Roma":{"count":61},"San Marco":{"count":67},"Hellas":{"count":55},"La Perla":{"count":67},"Vips":{"count":53},"Panera Bread":{"count":218},"Da Vinci":{"count":54},"Hippopotamus":{"count":96},"Prezzo":{"count":75},"Courtepaille":{"count":106},"Hard Rock Cafe":{"count":70},"Panorama":{"count":61},"デニーズ":{"count":82},"Sportheim":{"count":65},"餃子の王将":{"count":57},"Bären":{"count":60},"Alte Post":{"count":60},"Pizzeria Roma":{"count":51},"China Garden":{"count":66},"Vapiano":{"count":82},"Mamma Mia":{"count":64},"Schwarzer Adler":{"count":57},"IHOP":{"count":317},"Chili's":{"count":328},"Asia":{"count":51},"Olive Garden":{"count":279},"TGI Friday's":{"count":159},"Friendly's":{"count":78},"Buffalo Grill":{"count":202},"Texas Roadhouse":{"count":110},"ガスト":{"count":230,"tags":{"name:en":"Gusto"}},"Sakura":{"count":75},"Mensa":{"count":99},"The Keg":{"count":53},"サイゼリヤ":{"count":93},"La Strada":{"count":52},"Village Inn":{"count":92},"Buffalo Wild Wings":{"count":176},"Peking":{"count":59},"Boston Market":{"count":61},"Round Table Pizza":{"count":53},"Jimmy John's":{"count":69},"California Pizza Kitchen":{"count":61},"Якитория":{"count":77},"Golden Corral":{"count":101},"Perkins":{"count":105},"Ruby Tuesday":{"count":162},"Shari's":{"count":65},"Bob Evans":{"count":129},"바다횟집 (Bada Fish Restaurant)":{"count":55},"Mang Inasal":{"count":84},"Евразия":{"count":102},"ジョナサン":{"count":59},"Longhorn Steakhouse":{"count":66}},"bank":{"Chase":{"count":721},"Commonwealth Bank":{"count":232},"Citibank":{"count":277},"HSBC":{"count":1102},"Barclays":{"count":965},"Westpac":{"count":208},"NAB":{"count":131},"ANZ":{"count":218},"Lloyds Bank":{"count":547},"Landbank":{"count":81},"Sparkasse":{"count":4555},"UCPB":{"count":92},"PNB":{"count":244},"Metrobank":{"count":269},"BDO":{"count":290},"Volksbank":{"count":2591},"BPI":{"count":415},"Postbank":{"count":443},"NatWest":{"count":628},"Raiffeisenbank":{"count":2119},"Yorkshire Bank":{"count":63},"ABSA":{"count":95},"Standard Bank":{"count":109},"FNB":{"count":97},"Deutsche Bank":{"count":855},"SEB":{"count":133},"Commerzbank":{"count":806},"Targobank":{"count":166},"ABN AMRO":{"count":130},"Handelsbanken":{"count":184},"Swedbank":{"count":223},"Kreissparkasse":{"count":600},"UniCredit Bank":{"count":408},"Monte dei Paschi di Siena":{"count":132},"Caja Rural":{"count":99},"Dresdner Bank":{"count":66},"Sparda-Bank":{"count":320},"VÚB":{"count":107},"Slovenská sporiteľňa":{"count":134},"Bank of Montreal":{"count":118},"KBC":{"count":203},"Royal Bank of Scotland":{"count":111},"TSB":{"count":80},"US Bank":{"count":256},"HypoVereinsbank":{"count":561},"Bank Austria":{"count":176},"ING":{"count":496},"Erste Bank":{"count":180},"CIBC":{"count":326},"Scotiabank":{"count":413},"Caisse d'Épargne":{"count":882},"Santander":{"count":1323},"Bank of Scotland":{"count":89},"TD Canada Trust":{"count":450},"BMO":{"count":169},"Danske Bank":{"count":131},"OTP":{"count":192},"Crédit Agricole":{"count":1239},"LCL":{"count":553},"VR-Bank":{"count":430},"ČSOB":{"count":160},"Česká spořitelna":{"count":212},"BNP":{"count":112},"Royal Bank":{"count":65},"Nationwide":{"count":209},"Halifax":{"count":225},"BAWAG PSK":{"count":102},"National Bank":{"count":84},"Nedbank":{"count":80},"First National Bank":{"count":85},"Nordea":{"count":319},"Rabobank":{"count":609},"Sparkasse KölnBonn":{"count":69},"Tatra banka":{"count":67},"Berliner Sparkasse":{"count":62},"Berliner Volksbank":{"count":77},"Wells Fargo":{"count":874},"Credit Suisse":{"count":71},"Société Générale":{"count":634},"Osuuspankki":{"count":75},"Sparkasse Aachen":{"count":56},"Hamburger Sparkasse":{"count":156},"Cassa di Risparmio del Veneto":{"count":68},"BNP Paribas":{"count":617},"Banque Populaire":{"count":433},"BNP Paribas Fortis":{"count":209},"Banco Popular":{"count":291},"Bancaja":{"count":55},"Banesto":{"count":208},"La Caixa":{"count":583},"Santander Consumer Bank":{"count":88},"BRD":{"count":191},"BCR":{"count":143},"Banca Transilvania":{"count":141},"BW-Bank":{"count":97},"Komerční banka":{"count":132},"Banco Pastor":{"count":64},"Stadtsparkasse":{"count":86},"Ulster Bank":{"count":86},"Sberbank":{"count":58},"CIC":{"count":427},"Bancpost":{"count":56},"Caja Madrid":{"count":115},"Maybank":{"count":94},"中国银行":{"count":85},"Unicredit Banca":{"count":243},"Crédit Mutuel":{"count":690},"BBVA":{"count":647},"Intesa San Paolo":{"count":69},"TD Bank":{"count":206},"Belfius":{"count":231},"Bank of America":{"count":924},"RBC":{"count":230},"Alpha Bank":{"count":123},"Сбербанк":{"count":4794},"Россельхозбанк":{"count":201},"Crédit du Nord":{"count":96},"BancoEstado":{"count":80},"Millennium Bank":{"count":414},"State Bank of India":{"count":151},"Беларусбанк":{"count":242},"ING Bank Śląski":{"count":67},"Caixa Geral de Depósitos":{"count":129},"Kreissparkasse Köln":{"count":65},"Banco BCI":{"count":51},"Banco de Chile":{"count":98},"ВТБ24":{"count":326},"UBS":{"count":134},"PKO BP":{"count":265},"Chinabank":{"count":55},"PSBank":{"count":59},"Union Bank":{"count":124},"China Bank":{"count":66},"RCBC":{"count":122},"Unicaja":{"count":83},"BBK":{"count":79},"Ibercaja":{"count":69},"RBS":{"count":143},"Commercial Bank of Ceylon PLC":{"count":79},"Bank of Ireland":{"count":109},"BNL":{"count":87},"Banco Santander":{"count":138},"Banco Itaú":{"count":111},"AIB":{"count":72},"BZ WBK":{"count":77},"Banco do Brasil":{"count":557},"Caixa Econômica Federal":{"count":184},"Fifth Third Bank":{"count":84},"Banca Popolare di Vicenza":{"count":81},"Wachovia":{"count":58},"OLB":{"count":53},"みずほ銀行":{"count":78},"BES":{"count":72},"ICICI Bank":{"count":91},"HDFC Bank":{"count":91},"La Banque Postale":{"count":67},"Pekao SA":{"count":56},"Oberbank":{"count":90},"Bradesco":{"count":295},"Oldenburgische Landesbank":{"count":56},"Bendigo Bank":{"count":93},"Argenta":{"count":86},"AXA":{"count":68},"Axis Bank":{"count":61},"Banco Nación":{"count":67},"GE Money Bank":{"count":72},"Альфа-Банк":{"count":185},"Белагропромбанк":{"count":70},"Caja Círculo":{"count":65},"Banco Galicia":{"count":51},"Eurobank":{"count":97},"Banca Intesa":{"count":62},"Canara Bank":{"count":92},"Cajamar":{"count":77},"Banamex":{"count":149},"Crédit Mutuel de Bretagne":{"count":335},"Davivienda":{"count":83},"Bank Spółdzielczy":{"count":159},"Credit Agricole":{"count":157},"Bankinter":{"count":59},"Banque Nationale":{"count":63},"Bank of the West":{"count":96},"Key Bank":{"count":155},"Western Union":{"count":88},"Citizens Bank":{"count":115},"ПриватБанк":{"count":513},"Security Bank":{"count":78},"Millenium":{"count":60},"Bankia":{"count":149},"三菱東京UFJ銀行":{"count":159},"Caixa":{"count":117},"Banco de Costa Rica":{"count":63},"SunTrust Bank":{"count":73},"Itaú":{"count":338},"PBZ":{"count":52},"中国工商银行":{"count":51},"Bancolombia":{"count":89},"Райффайзен Банк Аваль":{"count":64},"Bancomer":{"count":115},"Banorte":{"count":80},"Alior Bank":{"count":81},"BOC":{"count":51},"Банк Москвы":{"count":118},"ВТБ":{"count":59},"Getin Bank":{"count":55},"Caja Duero":{"count":57},"Regions Bank":{"count":62},"Росбанк":{"count":177},"Banco Estado":{"count":72},"BCI":{"count":68},"SunTrust":{"count":68},"PNC Bank":{"count":254},"신한은행":{"count":217,"tags":{"name:en":"Sinhan Bank"}},"우리은행":{"count":291,"tags":{"name:en":"Uri Bank"}},"국민은행":{"count":165,"tags":{"name:en":"Gungmin Bank"}},"중소기업은행":{"count":52,"tags":{"name:en":"Industrial Bank of Korea"}},"광주은행":{"count":51,"tags":{"name:en":"Gwangju Bank"}},"Газпромбанк":{"count":100},"M&T Bank":{"count":92},"Caja de Burgos":{"count":51},"Santander Totta":{"count":69},"УкрСиббанк":{"count":192},"Ощадбанк":{"count":364},"Уралсиб":{"count":85},"りそな銀行":{"count":225,"tags":{"name:en":"Mizuho Bank"}},"Ecobank":{"count":66},"Cajero Automatico Bancared":{"count":145},"Промсвязьбанк":{"count":93},"三井住友銀行":{"count":129},"Banco Provincia":{"count":67},"BB&T":{"count":147},"Возрождение":{"count":59},"Capital One":{"count":59},"横浜銀行":{"count":51},"Bank Mandiri":{"count":62},"Banco de la Nación":{"count":92},"Banco G&T Continental":{"count":62},"Peoples Bank":{"count":60},"工商银行":{"count":51},"Совкомбанк":{"count":55},"Provincial":{"count":56},"Banco de Desarrollo Banrural":{"count":73},"Banco Bradesco":{"count":65},"Bicentenario":{"count":182},"ლიბერთი ბანკი":{"count":54,"tags":{"name:en":"Liberty Bank"}},"Banesco":{"count":108},"Mercantil":{"count":75},"Bank BRI":{"count":53},"Del Tesoro":{"count":91},"하나은행":{"count":77},"CityCommerce Bank":{"count":71},"De Venezuela":{"count":117}},"car_rental":{"Europcar":{"count":291},"Budget":{"count":92},"Sixt":{"count":161},"Avis":{"count":282},"Hertz":{"count":293},"Enterprise":{"count":199},"stadtmobil CarSharing-Station":{"count":148}},"pharmacy":{"Rowlands Pharmacy":{"count":71},"Boots":{"count":840},"Marien-Apotheke":{"count":314},"Mercury Drug":{"count":426},"Löwen-Apotheke":{"count":356},"Superdrug":{"count":117},"Sonnen-Apotheke":{"count":311},"Rathaus-Apotheke":{"count":132},"Engel-Apotheke":{"count":123},"Hirsch-Apotheke":{"count":83},"Stern-Apotheke":{"count":67},"Lloyds Pharmacy":{"count":295},"Rosen-Apotheke":{"count":208},"Stadt-Apotheke":{"count":302},"Markt-Apotheke":{"count":164},"Аптека":{"count":1989},"Pharmasave":{"count":64},"Brunnen-Apotheke":{"count":53},"Shoppers Drug Mart":{"count":430},"Apotheke am Markt":{"count":60},"Alte Apotheke":{"count":88},"Neue Apotheke":{"count":109},"Gintarinė vaistinė":{"count":101},"Rats-Apotheke":{"count":84},"Adler Apotheke":{"count":313},"Pharmacie Centrale":{"count":64},"Walgreens":{"count":1619},"Rite Aid":{"count":745},"Apotheke":{"count":165},"Linden-Apotheke":{"count":211},"Bahnhof-Apotheke":{"count":66},"Burg-Apotheke":{"count":55},"Jean Coutu":{"count":62},"Pharmaprix":{"count":60},"Farmacias Ahumada":{"count":104},"Farmacia Comunale":{"count":113},"Farmacias Cruz Verde":{"count":86},"Cruz Verde":{"count":99},"Hubertus Apotheke":{"count":52},"CVS":{"count":1560},"Farmacias SalcoBrand":{"count":133},"Фармация":{"count":120},"Bären-Apotheke":{"count":74},"Clicks":{"count":113},"セイジョー":{"count":53},"マツモトキヨシ":{"count":115},"Dr. Max":{"count":51},"Вита":{"count":106},"Радуга":{"count":70},"サンドラッグ":{"count":61},"Apteka":{"count":366},"Первая помощь":{"count":74},"Ригла":{"count":113},"Имплозия":{"count":63},"Kinney Drugs":{"count":68},"Классика":{"count":67},"Ljekarna":{"count":53},"SalcoBrand":{"count":88},"Аптека 36,6":{"count":224},"Фармакор":{"count":75},"スギ薬局":{"count":84},"Аптечный пункт":{"count":148},"Невис":{"count":60},"トモズ (Tomod's)":{"count":83},"Eurovaistinė":{"count":65},"Farmacity":{"count":68},"аптека":{"count":96},"The Generics Pharmacy":{"count":95},"Farmatodo":{"count":123},"Duane Reade":{"count":61},"H-E-B":{"count":262},"Фармленд":{"count":82},"ドラッグてらしま (Drug Terashima)":{"count":96},"Арніка":{"count":125},"ავერსი (Aversi)":{"count":62},"Farmahorro":{"count":58}},"cafe":{"Starbucks":{"count":4238,"tags":{"cuisine":"coffee_shop"}},"Cafeteria":{"count":115},"Costa":{"count":618},"Caffè Nero":{"count":169},"Кафе":{"count":226},"Café Central":{"count":61},"Second Cup":{"count":193},"Dunkin Donuts":{"count":428,"tags":{"cuisine":"donut"}},"Espresso House":{"count":53},"Segafredo":{"count":69},"Coffee Time":{"count":94},"Cafe Coffee Day":{"count":120},"Eiscafe Venezia":{"count":180},"スターバックス":{"count":251,"tags":{"name:en":"Starbucks"}},"Шоколадница":{"count":145},"Pret A Manger":{"count":119},"Столовая":{"count":391},"Jamba Juice":{"count":53},"ドトール":{"count":164,"tags":{"name:en":"DOUTOR"}},"Tchibo":{"count":100},"Кофе Хауз":{"count":104},"Caribou Coffee":{"count":100},"Уют":{"count":51},"Шашлычная":{"count":58},"คาเฟ่ อเมซอน":{"count":62},"Traveler's Coffee":{"count":60},"カフェ・ド・クリエ":{"count":67,"tags":{"name:en":"Cafe de CRIE"}},"Cafe Amazon":{"count":65}}},"shop":{"supermarket":{"Budgens":{"count":88},"Morrisons":{"count":411},"Interspar":{"count":142},"Merkur":{"count":107},"Sainsbury's":{"count":547},"Lidl":{"count":7130},"Edeka":{"count":2293},"Coles":{"count":400},"Iceland":{"count":315},"Coop":{"count":2100},"Tesco":{"count":1297},"Woolworths":{"count":541},"Zielpunkt":{"count":239},"Nahkauf":{"count":170},"Billa":{"count":1432},"Kaufland":{"count":1004},"Plus":{"count":120},"ALDI":{"count":5172},"Checkers":{"count":128},"Tesco Metro":{"count":137},"NP":{"count":153},"Penny":{"count":1759},"Norma":{"count":1068},"Asda":{"count":225},"Netto":{"count":4379},"Rewe":{"count":2645},"Aldi Süd":{"count":594},"Real":{"count":246},"Tesco Express":{"count":406},"King Soopers":{"count":72},"Kiwi":{"count":167},"Pick n Pay":{"count":241},"ICA":{"count":192},"Tengelmann":{"count":188},"Carrefour":{"count":1640},"Waitrose":{"count":258},"Spar":{"count":2386},"Hofer":{"count":442},"M-Preis":{"count":76},"tegut":{"count":210},"Sainsbury's Local":{"count":118},"E-Center":{"count":66},"Aldi Nord":{"count":210},"nahkauf":{"count":84},"Meijer":{"count":76},"Safeway":{"count":410},"Costco":{"count":152},"Albert":{"count":185},"Jumbo":{"count":194},"Shoprite":{"count":244},"MPreis":{"count":54},"Penny Market":{"count":429},"Tesco Extra":{"count":123},"Albert Heijn":{"count":476},"IGA":{"count":363},"Super U":{"count":488},"Metro":{"count":260},"Neukauf":{"count":77},"Migros":{"count":459},"Marktkauf":{"count":121},"Delikatesy Centrum":{"count":59},"C1000":{"count":307},"Hoogvliet":{"count":53},"Food Basics":{"count":75},"Casino":{"count":264},"Penny Markt":{"count":466},"Giant":{"count":191},"COOP Jednota":{"count":73},"Rema 1000":{"count":368},"Kaufpark":{"count":96},"ALDI SÜD":{"count":113},"Simply Market":{"count":330},"Konzum":{"count":230},"Carrefour Express":{"count":353},"Eurospar":{"count":270},"Mercator":{"count":125},"Famila":{"count":130},"Hemköp":{"count":82},"real,-":{"count":81},"Markant":{"count":88},"Volg":{"count":135},"Leader Price":{"count":267},"Treff 3000":{"count":94},"SuperBrugsen":{"count":67},"Kaiser's":{"count":256},"K+K":{"count":106},"Unimarkt":{"count":86},"Carrefour City":{"count":126},"Sobeys":{"count":122},"S-Market":{"count":109},"Combi":{"count":55},"Denner":{"count":276},"Konsum":{"count":133},"Franprix":{"count":312},"Monoprix":{"count":198},"Diska":{"count":69},"PENNY":{"count":79},"Dia":{"count":835},"Giant Eagle":{"count":85},"NORMA":{"count":115},"AD Delhaize":{"count":63},"Auchan":{"count":152},"Mercadona":{"count":769},"Consum":{"count":130},"Carrefour Market":{"count":80},"Whole Foods":{"count":210,"tags":{"shop":"supermarket"}},"Pam":{"count":56},"sky":{"count":105},"Despar":{"count":146},"Eroski":{"count":208},"Costcutter":{"count":63},"Maxi":{"count":108},"Colruyt":{"count":180},"The Co-operative":{"count":64},"Intermarché":{"count":1210},"Delhaize":{"count":207},"CBA":{"count":176},"Shopi":{"count":53},"Walmart":{"count":644},"Kroger":{"count":317},"Albertsons":{"count":242},"Trader Joe's":{"count":235},"Feneberg":{"count":58},"denn's Biomarkt":{"count":52},"dm":{"count":114},"Kvickly":{"count":55},"Makro":{"count":140},"Dico":{"count":53},"Nah & Frisch":{"count":73},"Champion":{"count":59},"ICA Supermarket":{"count":51},"Fakta":{"count":235},"Магнит":{"count":1760},"Caprabo":{"count":103},"Famiglia Cooperativa":{"count":64},"Народная 7Я семьЯ":{"count":154},"Esselunga":{"count":85},"Maxima":{"count":102},"Petit Casino":{"count":111},"Wasgau":{"count":60},"Pingo Doce":{"count":253},"Match":{"count":140},"Profi":{"count":60},"Lider":{"count":65},"Unimarc":{"count":177},"The Co-operative Food":{"count":190},"Santa Isabel":{"count":128},"Седьмой континент":{"count":79},"HIT":{"count":59},"Rimi":{"count":106},"Conad":{"count":304},"Фуршет":{"count":76},"Willys":{"count":56},"Farmfoods":{"count":64},"U Express":{"count":51},"Фора":{"count":52},"Dunnes Stores":{"count":73},"Сільпо":{"count":125},"マルエツ":{"count":59},"Piggly Wiggly":{"count":57},"Crai":{"count":54},"El Árbol":{"count":73},"Centre Commercial E. Leclerc":{"count":549},"Foodland":{"count":100},"Super Brugsen":{"count":67},"Дикси":{"count":683},"Пятёрочка":{"count":1344},"Publix":{"count":339},"Føtex":{"count":66},"coop":{"count":73},"Fressnapf":{"count":69},"Coop Konsum":{"count":79},"Carrefour Contact":{"count":83},"No Frills":{"count":105},"Plodine":{"count":52},"ADEG":{"count":68},"Minipreço":{"count":111},"Biedronka":{"count":1335},"Eurospin":{"count":155},"Семья":{"count":62},"Gadis":{"count":53},"Евроопт":{"count":68},"Centra":{"count":51},"Квартал":{"count":82},"New World":{"count":69},"Countdown":{"count":95},"Reliance Fresh":{"count":61},"Stokrotka":{"count":98},"Coop Jednota":{"count":74},"Fred Meyer":{"count":64},"Irma":{"count":58},"Continente":{"count":75},"Price Chopper":{"count":99},"Game":{"count":52},"Soriana":{"count":93},"Alimerka":{"count":64},"Piotr i Paweł":{"count":53},"Перекресток":{"count":312},"Maxima X":{"count":117},"Карусель":{"count":55},"ALDI Nord":{"count":51},"Condis":{"count":67},"Sam's Club":{"count":138},"Копейка":{"count":87},"Géant Casino":{"count":54},"ASDA":{"count":180},"Intermarche":{"count":115},"Stop & Shop":{"count":66},"Food Lion":{"count":216},"Harris Teeter":{"count":92},"Foodworks":{"count":62},"Polo Market":{"count":86},"Лента":{"count":51},"西友 (SEIYU)":{"count":58},"H-E-B":{"count":293},"Атак":{"count":53},"Полушка":{"count":139},"Extra":{"count":82},"Lewiatan":{"count":94},"Sigma":{"count":51},"АТБ":{"count":322},"Społem":{"count":55},"Bodega Aurrera":{"count":82},"Tesco Lotus":{"count":77},"Мария-Ра":{"count":108},"Магнолия":{"count":72},"Магазин":{"count":120},"Монетка":{"count":174},"Hy-Vee":{"count":75},"Walmart Supercenter":{"count":133},"Hannaford":{"count":57},"Wegmans":{"count":83},"業務スーパー":{"count":61},"Norfa XL":{"count":55},"ヨークマート (YorkMart)":{"count":64},"Leclerc Drive":{"count":76}},"electronics":{"Media Markt":{"count":285},"Maplin":{"count":65},"Best Buy":{"count":345},"Future Shop":{"count":73},"Saturn":{"count":134},"Currys":{"count":80},"Radio Shack":{"count":269},"Euronics":{"count":115},"Expert":{"count":123},"Эльдорадо":{"count":184},"Darty":{"count":74},"М.Видео":{"count":89},"ヤマダ電機":{"count":51}},"convenience":{"Shell":{"count":255},"Spar":{"count":1119},"McColl's":{"count":100},"Tesco Express":{"count":426},"Sainsbury's Local":{"count":104},"Aral":{"count":56},"One Stop":{"count":146},"The Co-operative Food":{"count":115},"Londis":{"count":352},"7-Eleven":{"count":4440},"CBA":{"count":135},"Coop":{"count":678},"Sale":{"count":80},"Statoil":{"count":69},"Sheetz":{"count":54},"Konzum":{"count":173},"Siwa":{"count":216},"Mercator":{"count":57},"Esso":{"count":67},"COOP Jednota":{"count":181},"Mac's":{"count":152},"Alepa":{"count":62},"Hasty Market":{"count":54},"K-Market":{"count":54},"Costcutter":{"count":292},"Valintatalo":{"count":62},"Casino":{"count":90},"Franprix":{"count":61},"Circle K":{"count":289},"セブンイレブン":{"count":3011,"tags":{"name:en":"7-Eleven"}},"ローソン":{"count":1596,"tags":{"name:en":"LAWSON"}},"BP":{"count":163},"Tesco":{"count":55},"Petit Casino":{"count":233},"Volg":{"count":116},"Mace":{"count":115},"Mini Market":{"count":272},"Nisa Local":{"count":77},"Dorfladen":{"count":75},"Продукты":{"count":4285},"Mini Stop":{"count":228},"LAWSON":{"count":419},"デイリーヤマザキ":{"count":141},"Biedronka":{"count":83},"Надежда":{"count":56},"Mobil":{"count":66},"Nisa":{"count":51},"Premier":{"count":129},"ABC":{"count":152},"ミニストップ":{"count":316,"tags":{"name:en":"MINISTOP"}},"サンクス":{"count":560,"tags":{"name:en":"sunkus"}},"スリーエフ":{"count":88},"8 à Huit":{"count":61},"Tchibo":{"count":56},"Å»abka":{"count":546},"Almacen":{"count":229},"Vival":{"count":194},"FamilyMart":{"count":529},"ファミリーマート":{"count":1608,"tags":{"name:en":"FamilyMart"}},"Carrefour City":{"count":57},"Sunkus":{"count":62},"Casey's General Store":{"count":95},"セブンイレブン(Seven-Eleven)":{"count":65},"Jednota":{"count":58},"Магазин":{"count":915},"Гастроном":{"count":152},"Centra":{"count":111},"Магнит":{"count":701},"サークルK":{"count":538,"tags":{"name:en":"Circle K"}},"Wawa":{"count":135},"Proxi":{"count":123},"Универсам":{"count":78},"Перекресток":{"count":51},"Groszek":{"count":65},"Select":{"count":62},"Večerka":{"count":51},"Potraviny":{"count":249},"Смак":{"count":78},"Эконом":{"count":55},"Березка":{"count":77},"Społem":{"count":93},"Carrefour Express":{"count":84},"Cumberland Farms":{"count":63},"Chevron":{"count":59},"Coop Jednota":{"count":66},"Tesco Lotus Express":{"count":67},"Kiosk":{"count":55},"Sklep spożywczy":{"count":130},"24 часа":{"count":58},"Минимаркет":{"count":102},"Oxxo":{"count":669},"Пятёрочка":{"count":398},"abc":{"count":74},"7/11":{"count":51},"Stewart's":{"count":255},"Продукти":{"count":171},"ローソンストア100 (LAWSON STORE 100)":{"count":85},"Дикси":{"count":119},"Радуга":{"count":86},"ローソンストア100":{"count":76},"เซเว่นอีเลฟเว่น":{"count":185},"Delikatesy Centrum":{"count":53},"Citgo":{"count":62},"Фортуна":{"count":51},"Kum & Go":{"count":59},"Мария-Ра":{"count":76},"Picard":{"count":57},"Four Square":{"count":52},"Визит":{"count":57},"Авоська":{"count":55},"Dollar General":{"count":127},"Studenac":{"count":76},"Central Convenience Store":{"count":55},"Монетка":{"count":62},"продукты":{"count":114},"Теремок":{"count":56},"Kwik Trip":{"count":69},"Кулинария":{"count":55},"全家":{"count":90},"Мечта":{"count":54},"Epicerie":{"count":102},"Кировский":{"count":67},"Food Mart":{"count":117},"Delikatesy":{"count":81},"ポプラ":{"count":54},"Lewiatan":{"count":135},"Продуктовый магазин":{"count":149},"Продуктовый":{"count":84},"セイコーマート (Seicomart)":{"count":72},"Виктория":{"count":70},"Весна":{"count":57},"Mini Market Non-Stop":{"count":60},"QuikTrip":{"count":75},"Копеечка":{"count":51},"Royal Farms":{"count":51},"Alfamart":{"count":103},"Indomaret":{"count":141},"магазин":{"count":171},"全家便利商店":{"count":156},"Boutique":{"count":59},"მარკეტი (Market)":{"count":144},"Stores":{"count":61}},"chemist":{"dm":{"count":939},"Müller":{"count":212},"Schlecker":{"count":187},"Etos":{"count":467},"Bipa":{"count":289},"Rossmann":{"count":1669},"DM Drogeriemarkt":{"count":55},"Ihr Platz":{"count":73},"Douglas":{"count":62},"Kruidvat":{"count":123}},"car_repair":{"Peugeot":{"count":83},"Kwik Fit":{"count":128},"ATU":{"count":261},"Midas":{"count":202},"Feu Vert":{"count":113},"Norauto":{"count":152},"Speedy":{"count":115},"Автозапчасти":{"count":212},"Renault":{"count":171},"Pit Stop":{"count":58},"Jiffy Lube":{"count":198},"Шиномонтаж":{"count":1157},"СТО":{"count":395},"O'Reilly Auto Parts":{"count":81},"Carglass":{"count":112},"шиномонтаж":{"count":62},"Citroen":{"count":51},"Euromaster":{"count":87},"Firestone":{"count":88},"Автосервис":{"count":361},"Advance Auto Parts":{"count":52},"Roady":{"count":56}},"furniture":{"IKEA":{"count":169},"Jysk":{"count":109},"Roller":{"count":78},"Dänisches Bettenlager":{"count":309},"Conforama":{"count":99},"Matratzen Concord":{"count":52},"Мебель":{"count":210},"But":{"count":63}},"doityourself":{"Hornbach":{"count":123},"B&Q":{"count":225},"Hubo":{"count":77},"Mr Bricolage":{"count":88},"Gamma":{"count":111},"OBI":{"count":422},"Lowes":{"count":1152},"Wickes":{"count":123},"Hagebau":{"count":59},"Max Bahr":{"count":79},"Castorama":{"count":153},"Rona":{"count":61},"Home Depot":{"count":865},"Toom Baumarkt":{"count":71},"Homebase":{"count":225},"Baumax":{"count":95},"Lagerhaus":{"count":79},"Bauhaus":{"count":186},"Canadian Tire":{"count":97},"Leroy Merlin":{"count":209},"Hellweg":{"count":58},"Brico":{"count":98},"Bricomarché":{"count":235},"Toom":{"count":67},"Hagebaumarkt":{"count":107},"Praktiker":{"count":122},"Menards":{"count":70},"Weldom":{"count":73},"Bunnings Warehouse":{"count":91},"Ace Hardware":{"count":147},"Home Hardware":{"count":72},"Хозтовары":{"count":86},"Стройматериалы":{"count":197},"Bricorama":{"count":60},"Point P":{"count":59}},"stationery":{"Staples":{"count":299},"McPaper":{"count":83},"Office Depot":{"count":98},"Канцтовары":{"count":63}},"car":{"Skoda":{"count":97},"BMW":{"count":149},"Citroen":{"count":277},"Renault":{"count":382},"Mercedes-Benz":{"count":235},"Volvo":{"count":96},"Ford":{"count":239},"Volkswagen":{"count":217},"Mazda":{"count":105},"Mitsubishi":{"count":73},"Fiat":{"count":93},"Автозапчасти":{"count":277},"Opel":{"count":165},"Audi":{"count":121},"Toyota":{"count":271},"Nissan":{"count":189},"Suzuki":{"count":75},"Honda":{"count":157},"Peugeot":{"count":308},"Шиномонтаж":{"count":259},"Hyundai":{"count":166},"Subaru":{"count":58},"Chevrolet":{"count":86},"Автомагазин":{"count":72}},"clothes":{"Matalan":{"count":90},"KiK":{"count":1219},"H&M":{"count":658},"Urban Outfitters":{"count":63},"Vögele":{"count":132},"Zeeman":{"count":121},"Takko":{"count":515},"Adler":{"count":55},"C&A":{"count":506},"Zara":{"count":217},"Vero Moda":{"count":95},"NKD":{"count":486},"Ernsting's family":{"count":312},"Winners":{"count":65},"River Island":{"count":59},"Next":{"count":176},"Gap":{"count":81},"Adidas":{"count":92},"Woolworths":{"count":117},"Mr Price":{"count":88},"Jet":{"count":61},"Pep":{"count":134},"Edgars":{"count":110},"Ackermans":{"count":91},"Truworths":{"count":65},"Ross":{"count":93},"Burton":{"count":51},"Dorothy Perkins":{"count":53},"Deichmann":{"count":61},"Lindex":{"count":73},"s.Oliver":{"count":56},"Cecil":{"count":51},"Dress Barn":{"count":52},"Old Navy":{"count":174},"Jack & Jones":{"count":52},"Pimkie":{"count":73},"Esprit":{"count":231},"Primark":{"count":92},"Bonita":{"count":155},"Mexx":{"count":67},"Gerry Weber":{"count":71},"Tally Weijl":{"count":70},"Mango":{"count":133},"TK Maxx":{"count":84},"Benetton":{"count":101},"Ulla Popken":{"count":61},"AWG":{"count":66},"Tommy Hilfiger":{"count":75},"New Yorker":{"count":180},"Orsay":{"count":73},"Jeans Fritz":{"count":51},"Charles Vögele":{"count":69},"New Look":{"count":126},"Lacoste":{"count":78},"Etam":{"count":53},"Kiabi":{"count":148},"Jack Wolfskin":{"count":60},"American Apparel":{"count":57},"Men's Wearhouse":{"count":54},"Intimissimi":{"count":52},"United Colors of Benetton":{"count":96},"Jules":{"count":63},"Second Hand":{"count":53},"AOKI":{"count":57},"Calzedonia":{"count":68},"洋服の青山":{"count":100},"Levi's":{"count":63},"Celio":{"count":74},"TJ Maxx":{"count":57},"Promod":{"count":82},"Street One":{"count":72},"ユニクロ":{"count":59},"Banana Republic":{"count":57},"Одежда":{"count":75},"Marshalls":{"count":56},"La Halle":{"count":62},"Peacocks":{"count":89},"しまむら":{"count":60}},"books":{"Bruna":{"count":58},"Waterstones":{"count":90},"Libro":{"count":57},"Barnes & Noble":{"count":267},"Weltbild":{"count":74},"Thalia":{"count":121},"Книги":{"count":112}},"department_store":{"Debenhams":{"count":67},"Canadian Tire":{"count":75},"Karstadt":{"count":64},"Walmart":{"count":517},"Kmart":{"count":143},"Target":{"count":574},"Galeria Kaufhof":{"count":61},"Marks & Spencer":{"count":66},"Big W":{"count":57},"Woolworth":{"count":78},"Универмаг":{"count":72},"Sears":{"count":235},"Walmart Supercenter":{"count":101},"Kohl's":{"count":153},"Macy's":{"count":147},"Sam's Club":{"count":54},"JCPenney":{"count":66}},"alcohol":{"Alko":{"count":145},"The Beer Store":{"count":150},"Systembolaget":{"count":210},"LCBO":{"count":239},"Ароматный мир":{"count":62},"Bargain Booze":{"count":62},"Nicolas":{"count":119},"BWS":{"count":70},"Botilleria":{"count":77},"SAQ":{"count":72},"Gall & Gall":{"count":512},"Живое пиво":{"count":70}},"bakery":{"Kamps":{"count":252},"Banette":{"count":52},"Bäckerei Schmidt":{"count":57},"Anker":{"count":73},"Hofpfisterei":{"count":111},"Greggs":{"count":276},"Oebel":{"count":57},"Boulangerie":{"count":266},"Stadtbäckerei":{"count":57},"Steinecke":{"count":145},"Ihle":{"count":76},"Goldilocks":{"count":59},"Dat Backhus":{"count":67},"K&U":{"count":61},"Der Beck":{"count":96},"Thürmann":{"count":54},"Backwerk":{"count":95},"Schäfer's":{"count":51},"Panaderia":{"count":168},"Goeken backen":{"count":51},"Stadtbäckerei Junge":{"count":51},"Boulangerie Patisserie":{"count":119},"Paul":{"count":81},"Хлеб":{"count":89},"Пекарня":{"count":52},"Кулиничи":{"count":51}},"sports":{"Sports Direct":{"count":57},"Decathlon":{"count":309},"Intersport":{"count":283},"Sports Authority":{"count":75},"Спортмастер":{"count":87},"Sport 2000":{"count":90},"Dick's Sporting Goods":{"count":77}},"variety_store":{"Tedi":{"count":157},"Dollarama":{"count":103},"Family Dollar":{"count":61},"Dollar Tree":{"count":110},"Dollar General":{"count":80}},"pet":{"Fressnapf":{"count":318},"PetSmart":{"count":177},"Das Futterhaus":{"count":69},"Pets at Home":{"count":62},"Petco":{"count":101},"Зоомагазин":{"count":100}},"shoes":{"Deichmann":{"count":622},"Reno":{"count":183},"Ecco":{"count":55},"Clarks":{"count":109},"La Halle aux Chaussures":{"count":69},"Brantano":{"count":71},"Geox":{"count":51},"Salamander":{"count":51},"Обувь":{"count":100},"Payless Shoe Source":{"count":67},"Famous Footwear":{"count":59},"Quick Schuh":{"count":72},"Shoe Zone":{"count":55},"Foot Locker":{"count":82},"Bata":{"count":101},"ЦентрОбувь":{"count":51}},"toys":{"La Grande Récré":{"count":56},"Toys R Us":{"count":151,"tags":{"shop":"toys"}},"Intertoys":{"count":57},"Детский мир":{"count":86},"Игрушки":{"count":58}},"travel_agency":{"Flight Centre":{"count":92},"Thomas Cook":{"count":119}},"jewelry":{"Bijou Brigitte":{"count":57},"Christ":{"count":57},"Swarovski":{"count":74}},"optician":{"Fielmann":{"count":232},"Apollo Optik":{"count":150},"Vision Express":{"count":58},"Оптика":{"count":182},"Optic 2000":{"count":98},"Alain Afflelou":{"count":73},"Specsavers":{"count":124},"Krys":{"count":77},"Atol":{"count":55}},"video":{"Blockbuster":{"count":184},"World of Video":{"count":64}},"mobile_phone":{"Билайн":{"count":128},"ソフトバンクショップ (SoftBank shop)":{"count":255},"Vodafone":{"count":355},"O2":{"count":208},"Carphone Warehouse":{"count":127},"Orange":{"count":246},"Verizon Wireless":{"count":125},"Sprint":{"count":109},"T-Mobile":{"count":175},"МТС":{"count":352},"Евросеть":{"count":506},"Bell":{"count":190},"The Phone House":{"count":83},"SFR":{"count":71},"Связной":{"count":439},"Мегафон":{"count":251},"AT&T":{"count":124},"ドコモショップ (docomo shop)":{"count":114},"au":{"count":65},"Movistar":{"count":77},"Bitė":{"count":72}},"hifi":{},"computer":{"PC World":{"count":55},"DNS":{"count":128}},"hairdresser":{"Klier":{"count":119},"Supercuts":{"count":106},"Hairkiller":{"count":51},"Great Clips":{"count":182},"Парикмахерская":{"count":510},"Стиль":{"count":51},"Franck Provost":{"count":70},"Салон красоты":{"count":70}},"hardware":{"1000 мелочей":{"count":61},"Хозтовары":{"count":151},"Стройматериалы":{"count":54}},"motorcycle":{"Yamaha":{"count":67},"Honda":{"count":69}}}},"addressFormats":[{"format":[["housenumber","street"],["city","postcode"]]},{"countryCodes":["gb"],"format":[["housename"],["housenumber","street"],["city","postcode"]]},{"countryCodes":["ie"],"format":[["housename"],["housenumber","street"],["city"],["postcode"]]},{"countryCodes":["ad","at","ba","be","ch","cz","de","dk","es","fi","gr","hr","is","it","li","nl","no","pl","pt","se","si","sk","sm","va"],"format":[["street","housenumber"],["postcode","city"]]},{"countryCodes":["fr","lu","mo"],"format":[["housenumber","street"],["postcode","city"]]},{"countryCodes":["br"],"format":[["street"],["housenumber","suburb"],["city","postcode"]]},{"countryCodes":["vn"],"format":[["housenumber","street"],["subdistrict"],["district"],["city"],["province","postcode"]]},{"countryCodes":["us"],"format":[["housenumber","street"],["city","state","postcode"]]},{"countryCodes":["ca"],"format":[["housenumber","street"],["city","province","postcode"]]}]}; \ No newline at end of file